67 lines
2 KiB
TypeScript
67 lines
2 KiB
TypeScript
import { z } from 'zod';
|
|
|
|
// Base provider configuration
|
|
export const baseProviderConfigSchema = z.object({
|
|
name: z.string(),
|
|
enabled: z.boolean().default(true),
|
|
priority: z.number().default(0),
|
|
rateLimit: z
|
|
.object({
|
|
maxRequests: z.number().default(100),
|
|
windowMs: z.number().default(60000),
|
|
})
|
|
.optional(),
|
|
timeout: z.number().default(30000),
|
|
retries: z.number().default(3),
|
|
});
|
|
|
|
// EOD Historical Data provider
|
|
export const eodProviderConfigSchema = baseProviderConfigSchema.extend({
|
|
apiKey: z.string(),
|
|
baseUrl: z.string().default('https://eodhistoricaldata.com/api'),
|
|
tier: z.enum(['free', 'fundamentals', 'all-in-one']).default('free'),
|
|
});
|
|
|
|
// Interactive Brokers provider
|
|
export const ibProviderConfigSchema = baseProviderConfigSchema.extend({
|
|
gateway: z.object({
|
|
host: z.string().default('localhost'),
|
|
port: z.number().default(5000),
|
|
clientId: z.number().default(1),
|
|
}),
|
|
account: z.string().optional(),
|
|
marketDataType: z.enum(['live', 'delayed', 'frozen']).default('delayed'),
|
|
});
|
|
|
|
// QuoteMedia provider
|
|
export const qmProviderConfigSchema = baseProviderConfigSchema.extend({
|
|
username: z.string(),
|
|
password: z.string(),
|
|
baseUrl: z.string().default('https://app.quotemedia.com/quotetools'),
|
|
webmasterId: z.string(),
|
|
});
|
|
|
|
// Yahoo Finance provider
|
|
export const yahooProviderConfigSchema = baseProviderConfigSchema.extend({
|
|
baseUrl: z.string().default('https://query1.finance.yahoo.com'),
|
|
cookieJar: z.boolean().default(true),
|
|
crumb: z.string().optional(),
|
|
});
|
|
|
|
// Combined provider configuration
|
|
export const providersSchema = z.object({
|
|
eod: eodProviderConfigSchema.optional(),
|
|
ib: ibProviderConfigSchema.optional(),
|
|
qm: qmProviderConfigSchema.optional(),
|
|
yahoo: yahooProviderConfigSchema.optional(),
|
|
});
|
|
|
|
// Dynamic provider configuration type
|
|
export type ProviderName = 'eod' | 'ib' | 'qm' | 'yahoo';
|
|
|
|
export const providerSchemas = {
|
|
eod: eodProviderConfigSchema,
|
|
ib: ibProviderConfigSchema,
|
|
qm: qmProviderConfigSchema,
|
|
yahoo: yahooProviderConfigSchema,
|
|
} as const;
|