feat(server): Support TypeSense High-Availibility configuration (#2146)

* feat(server): Support TypeSense High-Availibility configuration.

* Lint fixes

* Address comments.
This commit is contained in:
Skyler Mäntysaari
2023-04-04 04:16:45 +03:00
committed by GitHub
parent d6f2ca6aaa
commit fc585bffcc
2 changed files with 40 additions and 13 deletions

View File

@@ -37,16 +37,35 @@ export const bullConfig: BullModuleOptions = {
export const bullQueues: BullModuleOptions[] = Object.values(QueueName).map((name) => ({ name }));
export const typesenseConfig: ConfigurationOptions = {
nodes: [
{
host: process.env.TYPESENSE_HOST || 'typesense',
port: Number(process.env.TYPESENSE_PORT) || 8108,
protocol: process.env.TYPESENSE_PROTOCOL || 'http',
},
],
apiKey: process.env.TYPESENSE_API_KEY as string,
numRetries: 15,
retryIntervalSeconds: 4,
connectionTimeoutSeconds: 10,
};
function parseTypeSenseConfig(): ConfigurationOptions {
const typesenseURL = process.env.TYPESENSE_URL;
const common = {
apiKey: process.env.TYPESENSE_API_KEY as string,
numRetries: 15,
retryIntervalSeconds: 4,
connectionTimeoutSeconds: 10,
};
if (typesenseURL && typesenseURL.startsWith('ha://')) {
try {
const decodedString = Buffer.from(typesenseURL.slice(5), 'base64').toString();
return {
nodes: JSON.parse(decodedString),
...common,
};
} catch (error) {
throw new Error(`Failed to decode typesense options: ${error}`);
}
}
return {
nodes: [
{
host: process.env.TYPESENSE_HOST || 'typesense',
port: Number(process.env.TYPESENSE_PORT) || 8108,
protocol: process.env.TYPESENSE_PROTOCOL || 'http',
},
],
...common,
};
}
export const typesenseConfig: ConfigurationOptions = parseTypeSenseConfig();