98 lines
No EOL
3.6 KiB
TypeScript
98 lines
No EOL
3.6 KiB
TypeScript
export * from './base.schema';
|
|
export * from './database.schema';
|
|
export * from './provider.schema';
|
|
export * from './service.schema';
|
|
|
|
import { z } from 'zod';
|
|
import { baseConfigSchema, environmentSchema } from './base.schema';
|
|
import { providerConfigSchema, webshareProviderConfigSchema } from './provider.schema';
|
|
import { httpConfigSchema, queueConfigSchema } from './service.schema';
|
|
|
|
// Flexible service schema with defaults
|
|
const flexibleServiceConfigSchema = z.object({
|
|
name: z.string().default('default-service'),
|
|
port: z.number().min(1).max(65535).default(3000),
|
|
host: z.string().default('0.0.0.0'),
|
|
healthCheckPath: z.string().default('/health'),
|
|
metricsPath: z.string().default('/metrics'),
|
|
shutdownTimeout: z.number().default(30000),
|
|
cors: z.object({
|
|
enabled: z.boolean().default(true),
|
|
origin: z.union([z.string(), z.array(z.string())]).default('*'),
|
|
credentials: z.boolean().default(true),
|
|
}).default({}),
|
|
}).default({});
|
|
|
|
// Flexible database schema with defaults
|
|
const flexibleDatabaseConfigSchema = z.object({
|
|
postgres: z.object({
|
|
host: z.string().default('localhost'),
|
|
port: z.number().default(5432),
|
|
database: z.string().default('test_db'),
|
|
user: z.string().default('test_user'),
|
|
password: z.string().default('test_pass'),
|
|
ssl: z.boolean().default(false),
|
|
poolSize: z.number().min(1).max(100).default(10),
|
|
connectionTimeout: z.number().default(30000),
|
|
idleTimeout: z.number().default(10000),
|
|
}).default({}),
|
|
questdb: z.object({
|
|
host: z.string().default('localhost'),
|
|
ilpPort: z.number().default(9009),
|
|
httpPort: z.number().default(9000),
|
|
pgPort: z.number().default(8812),
|
|
database: z.string().default('questdb'),
|
|
user: z.string().default('admin'),
|
|
password: z.string().default('quest'),
|
|
bufferSize: z.number().default(65536),
|
|
flushInterval: z.number().default(1000),
|
|
}).default({}),
|
|
mongodb: z.object({
|
|
uri: z.string().url().optional(),
|
|
host: z.string().default('localhost'),
|
|
port: z.number().default(27017),
|
|
database: z.string().default('test_mongo'),
|
|
user: z.string().optional(),
|
|
password: z.string().optional(),
|
|
authSource: z.string().default('admin'),
|
|
replicaSet: z.string().optional(),
|
|
poolSize: z.number().min(1).max(100).default(10),
|
|
}).default({}),
|
|
dragonfly: z.object({
|
|
host: z.string().default('localhost'),
|
|
port: z.number().default(6379),
|
|
password: z.string().optional(),
|
|
db: z.number().min(0).max(15).default(0),
|
|
keyPrefix: z.string().optional(),
|
|
ttl: z.number().optional(),
|
|
maxRetries: z.number().default(3),
|
|
retryDelay: z.number().default(100),
|
|
}).default({}),
|
|
}).default({});
|
|
|
|
// Flexible log schema with defaults (renamed from logging)
|
|
const flexibleLogConfigSchema = z.object({
|
|
level: z.enum(['trace', 'debug', 'info', 'warn', 'error', 'fatal']).default('info'),
|
|
format: z.enum(['json', 'pretty']).default('json'),
|
|
hideObject: z.boolean().default(false),
|
|
loki: z.object({
|
|
enabled: z.boolean().default(false),
|
|
host: z.string().default('localhost'),
|
|
port: z.number().default(3100),
|
|
labels: z.record(z.string()).default({}),
|
|
}).optional(),
|
|
}).default({});
|
|
|
|
// Complete application configuration schema
|
|
export const appConfigSchema = baseConfigSchema.extend({
|
|
environment: environmentSchema.default('development'),
|
|
service: flexibleServiceConfigSchema,
|
|
log: flexibleLogConfigSchema,
|
|
database: flexibleDatabaseConfigSchema,
|
|
queue: queueConfigSchema.optional(),
|
|
http: httpConfigSchema.optional(),
|
|
providers: providerConfigSchema.optional(),
|
|
webshare: webshareProviderConfigSchema.optional(),
|
|
});
|
|
|
|
export type AppConfig = z.infer<typeof appConfigSchema>; |