import { questdbConfig } from '@stock-bot/config'; import { QuestDBClient } from './client'; import type { QuestDBClientConfig, QuestDBConnectionOptions } from './types'; /** * Factory function to create a QuestDB client instance */ export function createQuestDBClient( config?: Partial, options?: QuestDBConnectionOptions ): QuestDBClient { return new QuestDBClient(config, options); } /** * Create a QuestDB client with default configuration */ export function createDefaultQuestDBClient(): QuestDBClient { const config: Partial = { host: questdbConfig.QUESTDB_HOST, httpPort: questdbConfig.QUESTDB_HTTP_PORT, pgPort: questdbConfig.QUESTDB_PG_PORT, influxPort: questdbConfig.QUESTDB_INFLUX_PORT, user: questdbConfig.QUESTDB_USER, password: questdbConfig.QUESTDB_PASSWORD, }; return new QuestDBClient(config); } /** * Singleton QuestDB client instance */ let defaultClient: QuestDBClient | null = null; /** * Get or create the default QuestDB client instance */ export function getQuestDBClient(): QuestDBClient { if (!defaultClient) { defaultClient = createDefaultQuestDBClient(); } return defaultClient; } /** * Connect to QuestDB using the default client */ export async function connectQuestDB(): Promise { const client = getQuestDBClient(); await client.connect(); return client; } /** * Disconnect from QuestDB */ export async function disconnectQuestDB(): Promise { if (defaultClient) { await defaultClient.disconnect(); defaultClient = null; } }