58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import process from 'node:process';
|
|
|
|
import { z } from 'zod';
|
|
|
|
const DEFAULT_BASE_URL = 'http://172.16.74.149:5666';
|
|
|
|
const EnvSchema = z.object({
|
|
FINANCE_API_BASE_URL: z.string().trim().optional(),
|
|
FINANCE_API_KEY: z.string().trim().optional(),
|
|
FINANCE_API_TIMEOUT: z.string().trim().optional(),
|
|
FINANCE_BASIC_USERNAME: z.string().optional(),
|
|
FINANCE_BASIC_PASSWORD: z.string().optional(),
|
|
FINANCE_BASIC_USER: z.string().optional(),
|
|
FINANCE_USERNAME: z.string().optional(),
|
|
FINANCE_PASSWORD: z.string().optional(),
|
|
FINANCE_MCP_MAX_CONCURRENCY: z.string().trim().optional(),
|
|
});
|
|
|
|
const parsed = EnvSchema.parse(process.env);
|
|
|
|
const baseUrl =
|
|
parsed.FINANCE_API_BASE_URL && parsed.FINANCE_API_BASE_URL.length > 0
|
|
? parsed.FINANCE_API_BASE_URL
|
|
: DEFAULT_BASE_URL;
|
|
|
|
const timeoutMs = parsed.FINANCE_API_TIMEOUT
|
|
? Number.parseInt(parsed.FINANCE_API_TIMEOUT, 10)
|
|
: undefined;
|
|
|
|
const maxConcurrencyRaw = parsed.FINANCE_MCP_MAX_CONCURRENCY
|
|
? Number.parseInt(parsed.FINANCE_MCP_MAX_CONCURRENCY, 10)
|
|
: undefined;
|
|
|
|
const maxConcurrency =
|
|
Number.isFinite(maxConcurrencyRaw ?? Number.NaN) &&
|
|
(maxConcurrencyRaw ?? 0) > 0
|
|
? (maxConcurrencyRaw as number)
|
|
: 4;
|
|
|
|
const username =
|
|
parsed.FINANCE_BASIC_USERNAME ??
|
|
parsed.FINANCE_BASIC_USER ??
|
|
parsed.FINANCE_USERNAME ??
|
|
null;
|
|
const password =
|
|
parsed.FINANCE_BASIC_PASSWORD ?? parsed.FINANCE_PASSWORD ?? null;
|
|
|
|
export const config = {
|
|
baseUrl,
|
|
apiKey: parsed.FINANCE_API_KEY,
|
|
timeoutMs:
|
|
Number.isFinite(timeoutMs ?? Number.NaN) && (timeoutMs ?? 0) > 0
|
|
? (timeoutMs as number)
|
|
: undefined,
|
|
maxConcurrency,
|
|
basicAuth: username && password ? { username, password } : undefined,
|
|
};
|