diff --git a/apps/data-ingestion/package.json b/apps/data-ingestion/package.json index cd5fbf0..8ca015d 100644 --- a/apps/data-ingestion/package.json +++ b/apps/data-ingestion/package.json @@ -14,11 +14,11 @@ "dependencies": { "@stock-bot/cache": "*", "@stock-bot/config": "*", - "@stock-bot/connection-factory": "*", + "@stock-bot/di": "*", "@stock-bot/logger": "*", - "@stock-bot/mongodb-client": "*", - "@stock-bot/postgres-client": "*", - "@stock-bot/questdb-client": "*", + "@stock-bot/mongodb": "*", + "@stock-bot/postgres": "*", + "@stock-bot/questdb": "*", "@stock-bot/queue": "*", "@stock-bot/shutdown": "*", "@stock-bot/utils": "*", diff --git a/apps/data-ingestion/src/handlers/ib/operations/exchanges.operations.ts b/apps/data-ingestion/src/handlers/ib/operations/exchanges.operations.ts index 2ed60e0..85ded3c 100644 --- a/apps/data-ingestion/src/handlers/ib/operations/exchanges.operations.ts +++ b/apps/data-ingestion/src/handlers/ib/operations/exchanges.operations.ts @@ -1,7 +1,7 @@ /** * IB Exchanges Operations - Fetching exchange data from IB API */ -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import type { ServiceContainer } from '@stock-bot/connection-factory'; import { IB_CONFIG } from '../shared/config'; diff --git a/apps/data-ingestion/src/handlers/ib/operations/session.operations.ts b/apps/data-ingestion/src/handlers/ib/operations/session.operations.ts index fc5ecfc..1898c4a 100644 --- a/apps/data-ingestion/src/handlers/ib/operations/session.operations.ts +++ b/apps/data-ingestion/src/handlers/ib/operations/session.operations.ts @@ -2,8 +2,8 @@ * IB Session Operations - Browser automation for session headers */ import { Browser } from '@stock-bot/browser'; -import { OperationContext } from '@stock-bot/utils'; -import type { ServiceContainer } from '@stock-bot/connection-factory'; +import { OperationContext } from '@stock-bot/di'; +import type { ServiceContainer } from '@stock-bot/di'; import { IB_CONFIG } from '../shared/config'; diff --git a/apps/data-ingestion/src/handlers/ib/operations/symbols.operations.ts b/apps/data-ingestion/src/handlers/ib/operations/symbols.operations.ts index 2d53d77..cfd076f 100644 --- a/apps/data-ingestion/src/handlers/ib/operations/symbols.operations.ts +++ b/apps/data-ingestion/src/handlers/ib/operations/symbols.operations.ts @@ -1,7 +1,7 @@ /** * IB Symbols Operations - Fetching symbol data from IB API */ -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import type { ServiceContainer } from '@stock-bot/connection-factory'; import { IB_CONFIG } from '../shared/config'; diff --git a/apps/data-ingestion/src/handlers/proxy/operations/check.operations.ts b/apps/data-ingestion/src/handlers/proxy/operations/check.operations.ts index d49ead3..3d92903 100644 --- a/apps/data-ingestion/src/handlers/proxy/operations/check.operations.ts +++ b/apps/data-ingestion/src/handlers/proxy/operations/check.operations.ts @@ -2,7 +2,7 @@ * Proxy Check Operations - Checking proxy functionality */ import { HttpClient, ProxyInfo } from '@stock-bot/http'; -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import { PROXY_CONFIG } from '../shared/config'; import { ProxyStatsManager } from '../shared/proxy-manager'; diff --git a/apps/data-ingestion/src/handlers/proxy/operations/fetch.operations.ts b/apps/data-ingestion/src/handlers/proxy/operations/fetch.operations.ts index ed6910c..5cabb8a 100644 --- a/apps/data-ingestion/src/handlers/proxy/operations/fetch.operations.ts +++ b/apps/data-ingestion/src/handlers/proxy/operations/fetch.operations.ts @@ -2,7 +2,7 @@ * Proxy Fetch Operations - Fetching proxies from sources */ import { HttpClient, ProxyInfo } from '@stock-bot/http'; -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import { PROXY_CONFIG } from '../shared/config'; import { ProxyStatsManager } from '../shared/proxy-manager'; diff --git a/apps/data-ingestion/src/handlers/proxy/operations/query.operations.ts b/apps/data-ingestion/src/handlers/proxy/operations/query.operations.ts index 87165fd..5a15dcb 100644 --- a/apps/data-ingestion/src/handlers/proxy/operations/query.operations.ts +++ b/apps/data-ingestion/src/handlers/proxy/operations/query.operations.ts @@ -2,7 +2,7 @@ * Proxy Query Operations - Getting active proxies from cache */ import { ProxyInfo } from '@stock-bot/http'; -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import { PROXY_CONFIG } from '../shared/config'; diff --git a/apps/data-ingestion/src/handlers/proxy/operations/queue.operations.ts b/apps/data-ingestion/src/handlers/proxy/operations/queue.operations.ts index 22b23a8..1db582f 100644 --- a/apps/data-ingestion/src/handlers/proxy/operations/queue.operations.ts +++ b/apps/data-ingestion/src/handlers/proxy/operations/queue.operations.ts @@ -3,7 +3,7 @@ */ import { ProxyInfo } from '@stock-bot/http'; import { QueueManager } from '@stock-bot/queue'; -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; export async function queueProxyFetch(): Promise { const ctx = OperationContext.create('proxy', 'queue-fetch'); diff --git a/apps/data-ingestion/src/handlers/proxy/shared/proxy-manager.ts b/apps/data-ingestion/src/handlers/proxy/shared/proxy-manager.ts index 9712d80..4a02dc4 100644 --- a/apps/data-ingestion/src/handlers/proxy/shared/proxy-manager.ts +++ b/apps/data-ingestion/src/handlers/proxy/shared/proxy-manager.ts @@ -1,56 +1,6 @@ /** - * Proxy Stats Manager - Singleton for managing proxy statistics + * Proxy Manager - Simplified without stats tracking */ -import type { ProxySource } from './types'; -import { PROXY_CONFIG } from './config'; -export class ProxyStatsManager { - private static instance: ProxyStatsManager | null = null; - private proxyStats: ProxySource[] = []; - - private constructor() { - this.resetStats(); - } - - static getInstance(): ProxyStatsManager { - if (!ProxyStatsManager.instance) { - ProxyStatsManager.instance = new ProxyStatsManager(); - } - return ProxyStatsManager.instance; - } - - resetStats(): void { - this.proxyStats = PROXY_CONFIG.PROXY_SOURCES.map(source => ({ - id: source.id, - total: 0, - working: 0, - lastChecked: new Date(), - protocol: source.protocol, - url: source.url, - })); - } - - getStats(): ProxySource[] { - return [...this.proxyStats]; - } - - updateSourceStats(sourceId: string, success: boolean): ProxySource | undefined { - const source = this.proxyStats.find(s => s.id === sourceId); - if (source) { - if (typeof source.working !== 'number') { - source.working = 0; - } - if (typeof source.total !== 'number') { - source.total = 0; - } - source.total += 1; - if (success) { - source.working += 1; - } - source.percentWorking = (source.working / source.total) * 100; - source.lastChecked = new Date(); - return source; - } - return undefined; - } -} \ No newline at end of file +// This file is kept for compatibility but ProxyStatsManager has been removed +// All proxy management is now handled by the global ProxyManager in @stock-bot/utils \ No newline at end of file diff --git a/apps/data-ingestion/src/handlers/qm/operations/exchanges.operations.ts b/apps/data-ingestion/src/handlers/qm/operations/exchanges.operations.ts index fbcb8c3..05ae48e 100644 --- a/apps/data-ingestion/src/handlers/qm/operations/exchanges.operations.ts +++ b/apps/data-ingestion/src/handlers/qm/operations/exchanges.operations.ts @@ -2,7 +2,7 @@ * QM Exchanges Operations - Exchange fetching functionality */ -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import type { ServiceContainer } from '@stock-bot/connection-factory'; import { initializeQMResources } from './session.operations'; diff --git a/apps/data-ingestion/src/handlers/qm/operations/session.operations.ts b/apps/data-ingestion/src/handlers/qm/operations/session.operations.ts index dbb80bd..0f6e6c6 100644 --- a/apps/data-ingestion/src/handlers/qm/operations/session.operations.ts +++ b/apps/data-ingestion/src/handlers/qm/operations/session.operations.ts @@ -2,9 +2,9 @@ * QM Session Operations - Session creation and management */ -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import { isShutdownSignalReceived } from '@stock-bot/shutdown'; -import { getRandomProxy } from '@stock-bot/utils'; +import { getRandomProxy } from '@stock-bot/di'; import type { ServiceContainer } from '@stock-bot/connection-factory'; import { QMSessionManager } from '../shared/session-manager'; diff --git a/apps/data-ingestion/src/handlers/qm/operations/spider.operations.ts b/apps/data-ingestion/src/handlers/qm/operations/spider.operations.ts index 33dcd5c..ff70866 100644 --- a/apps/data-ingestion/src/handlers/qm/operations/spider.operations.ts +++ b/apps/data-ingestion/src/handlers/qm/operations/spider.operations.ts @@ -2,7 +2,7 @@ * QM Spider Operations - Symbol spider search functionality */ -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import { QueueManager } from '@stock-bot/queue'; import { QMSessionManager } from '../shared/session-manager'; diff --git a/apps/data-ingestion/src/handlers/qm/operations/symbols.operations.ts b/apps/data-ingestion/src/handlers/qm/operations/symbols.operations.ts index ce62e3f..995bcbf 100644 --- a/apps/data-ingestion/src/handlers/qm/operations/symbols.operations.ts +++ b/apps/data-ingestion/src/handlers/qm/operations/symbols.operations.ts @@ -2,9 +2,9 @@ * QM Symbols Operations - Symbol fetching and API interactions */ -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import { getRandomProxy } from '@stock-bot/utils'; -import type { ServiceContainer } from '@stock-bot/connection-factory'; +import type { ServiceContainer } from '@stock-bot/di'; import { QMSessionManager } from '../shared/session-manager'; import { QM_SESSION_IDS, QM_CONFIG, SESSION_CONFIG } from '../shared/config'; diff --git a/apps/data-ingestion/src/handlers/webshare/operations/fetch.operations.ts b/apps/data-ingestion/src/handlers/webshare/operations/fetch.operations.ts index bc43682..662e5bf 100644 --- a/apps/data-ingestion/src/handlers/webshare/operations/fetch.operations.ts +++ b/apps/data-ingestion/src/handlers/webshare/operations/fetch.operations.ts @@ -2,7 +2,7 @@ * WebShare Fetch Operations - API integration */ import { type ProxyInfo } from '@stock-bot/http'; -import { OperationContext } from '@stock-bot/utils'; +import { OperationContext } from '@stock-bot/di'; import { WEBSHARE_CONFIG } from '../shared/config'; diff --git a/apps/data-ingestion/src/handlers/webshare/webshare.handler.ts b/apps/data-ingestion/src/handlers/webshare/webshare.handler.ts index 752cc06..59882ed 100644 --- a/apps/data-ingestion/src/handlers/webshare/webshare.handler.ts +++ b/apps/data-ingestion/src/handlers/webshare/webshare.handler.ts @@ -8,7 +8,7 @@ import { type HandlerConfigWithSchedule, } from '@stock-bot/queue'; import { updateProxies } from '@stock-bot/utils'; -import type { ServiceContainer } from '@stock-bot/connection-factory'; +import type { ServiceContainer } from '@stock-bot/di'; const logger = getLogger('webshare-provider'); diff --git a/apps/data-ingestion/src/index.ts b/apps/data-ingestion/src/index.ts index 28a0212..bac61f3 100644 --- a/apps/data-ingestion/src/index.ts +++ b/apps/data-ingestion/src/index.ts @@ -4,10 +4,10 @@ import { Hono } from 'hono'; import { cors } from 'hono/cors'; // Library imports import { getLogger, setLoggerConfig, shutdownLoggers } from '@stock-bot/logger'; -import { QueueManager, type QueueManagerConfig } from '@stock-bot/queue'; +import type { QueueManager } from '@stock-bot/queue'; import { Shutdown } from '@stock-bot/shutdown'; -import { ProxyManager } from '@stock-bot/utils'; -import type { ServiceContainer } from '@stock-bot/connection-factory'; +import { ProxyManager } from '@stock-bot/di'; +import type { ServiceContainer } from '@stock-bot/di'; // Local imports import { setupServiceContainer } from './setup/database-setup'; import { createRoutes } from './routes/create-routes'; @@ -68,35 +68,10 @@ async function initializeServices() { const routes = createRoutes(serviceContainer); app.route('/', routes); - // Initialize queue system (with delayed worker start) - logger.debug('Initializing queue system...'); - const queueManagerConfig: QueueManagerConfig = { - redis: queueConfig?.redis || { - host: 'localhost', - port: 6379, - db: 1, - }, - defaultQueueOptions: { - defaultJobOptions: queueConfig?.defaultJobOptions || { - attempts: 3, - backoff: { - type: 'exponential', - delay: 1000, - }, - removeOnComplete: 10, - removeOnFail: 5, - }, - workers: 2, - concurrency: 1, - enableMetrics: true, - enableDLQ: true, - }, - enableScheduledJobs: true, - delayWorkerStart: true, // Prevent workers from starting until all singletons are ready - }; - - queueManager = QueueManager.getOrInitialize(queueManagerConfig); - logger.info('Queue system initialized'); + // Get queue manager from service container + logger.debug('Getting queue manager from service container...'); + queueManager = await serviceContainer.resolveAsync('queue'); + logger.info('Queue system resolved from container'); // Initialize proxy manager logger.debug('Initializing proxy manager...'); diff --git a/apps/data-ingestion/src/setup/database-setup.ts b/apps/data-ingestion/src/setup/database-setup.ts index 3ccb344..6de2349 100644 --- a/apps/data-ingestion/src/setup/database-setup.ts +++ b/apps/data-ingestion/src/setup/database-setup.ts @@ -1,11 +1,11 @@ -import { getDatabaseConfig } from '@stock-bot/config'; +import { getDatabaseConfig, getQueueConfig } from '@stock-bot/config'; import { getLogger } from '@stock-bot/logger'; import { ConnectionFactory, ServiceContainer, PoolSizeCalculator -} from '@stock-bot/connection-factory'; -import type { ConnectionFactoryConfig, DynamicPoolConfig } from '@stock-bot/mongodb-client'; +} from '@stock-bot/di'; +import type { ConnectionFactoryConfig, DynamicPoolConfig } from '@stock-bot/mongodb'; const logger = getLogger('database-setup'); @@ -27,6 +27,9 @@ export function createConnectionFactory(): ConnectionFactory { }, cache: { poolSize: 20, + }, + queue: { + poolSize: 1, // QueueManager is a singleton } } }; @@ -42,6 +45,7 @@ export async function setupServiceContainer(): Promise { const connectionFactory = createConnectionFactory(); const dbConfig = getDatabaseConfig(); + const queueConfig = getQueueConfig(); // Create base container const container = new ServiceContainer('data-ingestion'); @@ -130,6 +134,45 @@ export async function setupServiceContainer(): Promise { singleton: true, }); + // Register QueueManager + container.register({ + name: 'queue', + factory: () => { + const pool = connectionFactory.createQueue({ + name: 'default', + config: { + redis: queueConfig?.redis || { + host: dbConfig.dragonfly.host, + port: dbConfig.dragonfly.port, + db: dbConfig.dragonfly.db || 1, + }, + defaultQueueOptions: { + defaultJobOptions: queueConfig?.defaultJobOptions || { + attempts: 3, + backoff: { + type: 'exponential', + delay: 1000, + }, + removeOnComplete: 10, + removeOnFail: 5, + }, + workers: 2, + concurrency: 1, + enableMetrics: true, + enableDLQ: true, + }, + enableScheduledJobs: true, + delayWorkerStart: true, + } + }); + return pool.client; + }, + singleton: true, + dispose: async (queueManager) => { + await queueManager.shutdown(); + } + }); + // Register the connection factory itself for pool management container.register({ name: 'connectionFactory', diff --git a/apps/data-ingestion/src/setup/dynamic-pool-example.ts b/apps/data-ingestion/src/setup/dynamic-pool-example.ts deleted file mode 100644 index b8e45cd..0000000 --- a/apps/data-ingestion/src/setup/dynamic-pool-example.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { getDatabaseConfig } from '@stock-bot/config'; -import { getLogger } from '@stock-bot/logger'; -import { createMongoDBClient, createPostgreSQLClient } from '@stock-bot/connection-factory'; -import type { DynamicPoolConfig } from '@stock-bot/mongodb-client'; - -const logger = getLogger('dynamic-pool-example'); - -/** - * Example of setting up dynamic pool sizing for high-load scenarios - */ -export async function setupDynamicPools() { - const dbConfig = getDatabaseConfig(); - - // Dynamic pool configuration for batch processing - const dynamicConfig: DynamicPoolConfig = { - enabled: true, - minSize: 5, - maxSize: 100, - scaleUpThreshold: 70, // Scale up when 70% of connections are in use - scaleDownThreshold: 30, // Scale down when only 30% are in use - scaleUpIncrement: 10, // Add 10 connections at a time - scaleDownIncrement: 5, // Remove 5 connections at a time - evaluationInterval: 10000 // Check every 10 seconds - }; - - // Create MongoDB client with dynamic pooling - const mongoClient = createMongoDBClient({ - uri: dbConfig.mongodb.uri, - database: dbConfig.mongodb.database, - poolSettings: { - minPoolSize: dynamicConfig.minSize, - maxPoolSize: dynamicConfig.maxSize, - } - }, { - onConnect: () => logger.info('MongoDB connected with dynamic pooling'), - onError: (error) => logger.error('MongoDB pool error', { error }), - }); - - await mongoClient.connect(); - mongoClient.setDynamicPoolConfig(dynamicConfig); - - // Create PostgreSQL client with dynamic pooling - const pgClient = createPostgreSQLClient({ - host: dbConfig.postgresql.host, - port: dbConfig.postgresql.port, - database: dbConfig.postgresql.database, - username: dbConfig.postgresql.user, - password: dbConfig.postgresql.password, - poolSettings: { - min: dynamicConfig.minSize, - max: dynamicConfig.maxSize, - } - }, undefined, { - onConnect: () => logger.info('PostgreSQL connected with dynamic pooling'), - onError: (error) => logger.error('PostgreSQL pool error', { error }), - }); - - await pgClient.connect(); - pgClient.setDynamicPoolConfig(dynamicConfig); - - // Monitor pool metrics - setInterval(() => { - const mongoMetrics = mongoClient.getPoolMetrics(); - const pgMetrics = pgClient.getPoolMetrics(); - - logger.info('Pool metrics', { - mongodb: { - total: mongoMetrics.totalConnections, - active: mongoMetrics.activeConnections, - idle: mongoMetrics.idleConnections, - waiting: mongoMetrics.waitingRequests, - }, - postgresql: { - total: pgMetrics.totalConnections, - active: pgMetrics.activeConnections, - idle: pgMetrics.idleConnections, - waiting: pgMetrics.waitingRequests, - } - }); - }, 30000); // Log metrics every 30 seconds - - return { mongoClient, pgClient }; -} - -/** - * Example of adaptive pool sizing based on time of day - */ -export function getTimeBasedPoolConfig(): DynamicPoolConfig { - const hour = new Date().getHours(); - - // High load hours (9 AM - 5 PM) - if (hour >= 9 && hour <= 17) { - return { - enabled: true, - minSize: 10, - maxSize: 150, - scaleUpThreshold: 60, - scaleDownThreshold: 20, - scaleUpIncrement: 20, - scaleDownIncrement: 10, - evaluationInterval: 5000 // More frequent checks during peak - }; - } - - // Low load hours (night time) - return { - enabled: true, - minSize: 2, - maxSize: 50, - scaleUpThreshold: 80, - scaleDownThreshold: 40, - scaleUpIncrement: 5, - scaleDownIncrement: 2, - evaluationInterval: 30000 // Less frequent checks at night - }; -} \ No newline at end of file diff --git a/apps/data-ingestion/src/utils/symbol-search.util.ts b/apps/data-ingestion/src/utils/symbol-search.util.ts index a84e68f..7e2379a 100644 --- a/apps/data-ingestion/src/utils/symbol-search.util.ts +++ b/apps/data-ingestion/src/utils/symbol-search.util.ts @@ -1,5 +1,5 @@ import { getLogger } from '@stock-bot/logger'; -import { sleep } from '@stock-bot/utils'; +import { sleep } from '@stock-bot/di'; const logger = getLogger('symbol-search-util'); diff --git a/apps/data-ingestion/tsconfig.json b/apps/data-ingestion/tsconfig.json index 9e65c6a..5808c85 100644 --- a/apps/data-ingestion/tsconfig.json +++ b/apps/data-ingestion/tsconfig.json @@ -1,16 +1,16 @@ { "extends": "../../tsconfig.app.json", "references": [ - { "path": "../../libs/types" }, - { "path": "../../libs/config" }, - { "path": "../../libs/logger" }, - { "path": "../../libs/cache" }, - { "path": "../../libs/queue" }, - { "path": "../../libs/mongodb-client" }, - { "path": "../../libs/postgres-client" }, - { "path": "../../libs/questdb-client" }, - { "path": "../../libs/shutdown" }, - { "path": "../../libs/connection-factory" }, + { "path": "../../libs/core/types" }, + { "path": "../../libs/core/config" }, + { "path": "../../libs/core/logger" }, + { "path": "../../libs/core/di" }, + { "path": "../../libs/data/cache" }, + { "path": "../../libs/data/mongodb" }, + { "path": "../../libs/data/postgres" }, + { "path": "../../libs/data/questdb" }, + { "path": "../../libs/services/queue" }, + { "path": "../../libs/services/shutdown" }, { "path": "../../libs/utils" } ] } diff --git a/apps/data-pipeline/package.json b/apps/data-pipeline/package.json index 54da14a..9b381f4 100644 --- a/apps/data-pipeline/package.json +++ b/apps/data-pipeline/package.json @@ -15,9 +15,9 @@ "@stock-bot/cache": "*", "@stock-bot/config": "*", "@stock-bot/logger": "*", - "@stock-bot/mongodb-client": "*", - "@stock-bot/postgres-client": "*", - "@stock-bot/questdb-client": "*", + "@stock-bot/mongodb": "*", + "@stock-bot/postgres": "*", + "@stock-bot/questdb": "*", "@stock-bot/queue": "*", "@stock-bot/shutdown": "*", "hono": "^4.0.0" diff --git a/apps/data-pipeline/tsconfig.json b/apps/data-pipeline/tsconfig.json index d9f09df..cb4b0dc 100644 --- a/apps/data-pipeline/tsconfig.json +++ b/apps/data-pipeline/tsconfig.json @@ -1,14 +1,14 @@ { "extends": "../../tsconfig.app.json", "references": [ - { "path": "../../libs/types" }, - { "path": "../../libs/config" }, - { "path": "../../libs/logger" }, - { "path": "../../libs/cache" }, - { "path": "../../libs/queue" }, - { "path": "../../libs/mongodb-client" }, - { "path": "../../libs/postgres-client" }, - { "path": "../../libs/questdb-client" }, - { "path": "../../libs/shutdown" } + { "path": "../../libs/core/types" }, + { "path": "../../libs/core/config" }, + { "path": "../../libs/core/logger" }, + { "path": "../../libs/data/cache" }, + { "path": "../../libs/services/queue" }, + { "path": "../../libs/data/mongodb" }, + { "path": "../../libs/data/postgres" }, + { "path": "../../libs/data/questdb" }, + { "path": "../../libs/services/shutdown" } ] } diff --git a/apps/web-api/package.json b/apps/web-api/package.json index ad90669..1f260ec 100644 --- a/apps/web-api/package.json +++ b/apps/web-api/package.json @@ -14,8 +14,8 @@ "dependencies": { "@stock-bot/config": "*", "@stock-bot/logger": "*", - "@stock-bot/mongodb-client": "*", - "@stock-bot/postgres-client": "*", + "@stock-bot/mongodb": "*", + "@stock-bot/postgres": "*", "@stock-bot/shutdown": "*", "hono": "^4.0.0" }, diff --git a/apps/web-api/tsconfig.json b/apps/web-api/tsconfig.json index d9f09df..cb4b0dc 100644 --- a/apps/web-api/tsconfig.json +++ b/apps/web-api/tsconfig.json @@ -1,14 +1,14 @@ { "extends": "../../tsconfig.app.json", "references": [ - { "path": "../../libs/types" }, - { "path": "../../libs/config" }, - { "path": "../../libs/logger" }, - { "path": "../../libs/cache" }, - { "path": "../../libs/queue" }, - { "path": "../../libs/mongodb-client" }, - { "path": "../../libs/postgres-client" }, - { "path": "../../libs/questdb-client" }, - { "path": "../../libs/shutdown" } + { "path": "../../libs/core/types" }, + { "path": "../../libs/core/config" }, + { "path": "../../libs/core/logger" }, + { "path": "../../libs/data/cache" }, + { "path": "../../libs/services/queue" }, + { "path": "../../libs/data/mongodb" }, + { "path": "../../libs/data/postgres" }, + { "path": "../../libs/data/questdb" }, + { "path": "../../libs/services/shutdown" } ] } diff --git a/bun.lock b/bun.lock index d781082..a768dee 100644 --- a/bun.lock +++ b/bun.lock @@ -47,11 +47,11 @@ "dependencies": { "@stock-bot/cache": "*", "@stock-bot/config": "*", - "@stock-bot/connection-factory": "*", + "@stock-bot/di": "*", "@stock-bot/logger": "*", - "@stock-bot/mongodb-client": "*", - "@stock-bot/postgres-client": "*", - "@stock-bot/questdb-client": "*", + "@stock-bot/mongodb": "*", + "@stock-bot/postgres": "*", + "@stock-bot/questdb": "*", "@stock-bot/queue": "*", "@stock-bot/shutdown": "*", "@stock-bot/utils": "*", @@ -68,9 +68,9 @@ "@stock-bot/cache": "*", "@stock-bot/config": "*", "@stock-bot/logger": "*", - "@stock-bot/mongodb-client": "*", - "@stock-bot/postgres-client": "*", - "@stock-bot/questdb-client": "*", + "@stock-bot/mongodb": "*", + "@stock-bot/postgres": "*", + "@stock-bot/questdb": "*", "@stock-bot/queue": "*", "@stock-bot/shutdown": "*", "hono": "^4.0.0", @@ -85,8 +85,8 @@ "dependencies": { "@stock-bot/config": "*", "@stock-bot/logger": "*", - "@stock-bot/mongodb-client": "*", - "@stock-bot/postgres-client": "*", + "@stock-bot/mongodb": "*", + "@stock-bot/postgres": "*", "@stock-bot/shutdown": "*", "hono": "^4.0.0", }, @@ -131,35 +131,7 @@ "vite": "^4.4.5", }, }, - "libs/browser": { - "name": "@stock-bot/browser", - "version": "1.0.0", - "dependencies": { - "playwright": "^1.53.0", - }, - "devDependencies": { - "@types/node": "^20.0.0", - "typescript": "^5.0.0", - }, - "peerDependencies": { - "@stock-bot/http": "workspace:*", - "@stock-bot/logger": "workspace:*", - }, - }, - "libs/cache": { - "name": "@stock-bot/cache", - "version": "1.0.0", - "dependencies": { - "@stock-bot/logger": "*", - "ioredis": "^5.3.2", - }, - "devDependencies": { - "@types/node": "^20.11.0", - "bun-types": "^1.2.15", - "typescript": "^5.3.0", - }, - }, - "libs/config": { + "libs/core/config": { "name": "@stock-bot/config", "version": "1.0.0", "bin": { @@ -174,15 +146,16 @@ "typescript": "^5.3.3", }, }, - "libs/connection-factory": { - "name": "@stock-bot/connection-factory", + "libs/core/di": { + "name": "@stock-bot/di", "version": "1.0.0", "dependencies": { "@stock-bot/cache": "workspace:*", "@stock-bot/config": "workspace:*", "@stock-bot/logger": "workspace:*", - "@stock-bot/mongodb-client": "workspace:*", - "@stock-bot/postgres-client": "workspace:*", + "@stock-bot/mongodb": "workspace:*", + "@stock-bot/postgres": "workspace:*", + "@stock-bot/queue": "workspace:*", "mongodb": "^6.3.0", "pg": "^8.11.3", }, @@ -190,7 +163,112 @@ "@types/pg": "^8.10.7", }, }, - "libs/event-bus": { + "libs/core/logger": { + "name": "@stock-bot/logger", + "version": "1.0.0", + "dependencies": { + "got": "^14.4.7", + "pino": "^9.7.0", + "pino-loki": "^2.6.0", + "pino-pretty": "^13.0.0", + }, + "devDependencies": { + "@types/node": "^20.11.0", + "bun-types": "^1.2.15", + "typescript": "^5.3.0", + }, + }, + "libs/core/types": { + "name": "@stock-bot/types", + "version": "1.0.0", + "devDependencies": { + "@types/node": "^20.11.0", + "bun-types": "^1.2.15", + "typescript": "^5.3.0", + }, + }, + "libs/data/cache": { + "name": "@stock-bot/cache", + "version": "1.0.0", + "dependencies": { + "@stock-bot/logger": "*", + "ioredis": "^5.3.2", + }, + "devDependencies": { + "@types/node": "^20.11.0", + "bun-types": "^1.2.15", + "typescript": "^5.3.0", + }, + }, + "libs/data/mongodb": { + "name": "@stock-bot/mongodb", + "version": "1.0.0", + "dependencies": { + "@stock-bot/logger": "*", + "@stock-bot/types": "*", + "@types/mongodb": "^4.0.7", + "mongodb": "^6.17.0", + }, + "devDependencies": { + "@types/node": "^20.11.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "bun-types": "^1.2.15", + "eslint": "^8.56.0", + "typescript": "^5.3.0", + }, + }, + "libs/data/postgres": { + "name": "@stock-bot/postgres", + "version": "1.0.0", + "dependencies": { + "@stock-bot/logger": "*", + "@stock-bot/types": "*", + "pg": "^8.11.3", + }, + "devDependencies": { + "@types/node": "^20.11.0", + "@types/pg": "^8.10.7", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "bun-types": "^1.2.15", + "eslint": "^8.56.0", + "typescript": "^5.3.0", + }, + }, + "libs/data/questdb": { + "name": "@stock-bot/questdb", + "version": "1.0.0", + "dependencies": { + "@stock-bot/logger": "*", + "@stock-bot/types": "*", + "pg": "^8.11.3", + }, + "devDependencies": { + "@types/node": "^20.11.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "bun-types": "^1.2.15", + "eslint": "^8.56.0", + "typescript": "^5.3.0", + }, + }, + "libs/services/browser": { + "name": "@stock-bot/browser", + "version": "1.0.0", + "dependencies": { + "playwright": "^1.53.0", + }, + "devDependencies": { + "@types/node": "^20.0.0", + "typescript": "^5.0.0", + }, + "peerDependencies": { + "@stock-bot/http": "workspace:*", + "@stock-bot/logger": "workspace:*", + }, + }, + "libs/services/event-bus": { "name": "@stock-bot/event-bus", "version": "1.0.0", "dependencies": { @@ -204,7 +282,7 @@ "typescript": "^5.3.0", }, }, - "libs/http": { + "libs/services/http": { "name": "@stock-bot/http", "version": "1.0.0", "dependencies": { @@ -226,75 +304,7 @@ "typescript": "^5.3.0", }, }, - "libs/logger": { - "name": "@stock-bot/logger", - "version": "1.0.0", - "dependencies": { - "got": "^14.4.7", - "pino": "^9.7.0", - "pino-loki": "^2.6.0", - "pino-pretty": "^13.0.0", - }, - "devDependencies": { - "@types/node": "^20.11.0", - "bun-types": "^1.2.15", - "typescript": "^5.3.0", - }, - }, - "libs/mongodb-client": { - "name": "@stock-bot/mongodb-client", - "version": "1.0.0", - "dependencies": { - "@stock-bot/logger": "*", - "@stock-bot/types": "*", - "@types/mongodb": "^4.0.7", - "mongodb": "^6.17.0", - }, - "devDependencies": { - "@types/node": "^20.11.0", - "@typescript-eslint/eslint-plugin": "^6.19.0", - "@typescript-eslint/parser": "^6.19.0", - "bun-types": "^1.2.15", - "eslint": "^8.56.0", - "typescript": "^5.3.0", - }, - }, - "libs/postgres-client": { - "name": "@stock-bot/postgres-client", - "version": "1.0.0", - "dependencies": { - "@stock-bot/logger": "*", - "@stock-bot/types": "*", - "pg": "^8.11.3", - }, - "devDependencies": { - "@types/node": "^20.11.0", - "@types/pg": "^8.10.7", - "@typescript-eslint/eslint-plugin": "^6.19.0", - "@typescript-eslint/parser": "^6.19.0", - "bun-types": "^1.2.15", - "eslint": "^8.56.0", - "typescript": "^5.3.0", - }, - }, - "libs/questdb-client": { - "name": "@stock-bot/questdb-client", - "version": "1.0.0", - "dependencies": { - "@stock-bot/logger": "*", - "@stock-bot/types": "*", - "pg": "^8.11.3", - }, - "devDependencies": { - "@types/node": "^20.11.0", - "@typescript-eslint/eslint-plugin": "^6.19.0", - "@typescript-eslint/parser": "^6.19.0", - "bun-types": "^1.2.15", - "eslint": "^8.56.0", - "typescript": "^5.3.0", - }, - }, - "libs/queue": { + "libs/services/queue": { "name": "@stock-bot/queue", "version": "1.0.0", "dependencies": { @@ -311,7 +321,7 @@ "typescript": "^5.3.0", }, }, - "libs/shutdown": { + "libs/services/shutdown": { "name": "@stock-bot/shutdown", "version": "1.0.0", "devDependencies": { @@ -319,26 +329,17 @@ "typescript": "^5.0.0", }, }, - "libs/types": { - "name": "@stock-bot/types", - "version": "1.0.0", - "devDependencies": { - "@types/node": "^20.11.0", - "bun-types": "^1.2.15", - "typescript": "^5.3.0", - }, - }, "libs/utils": { "name": "@stock-bot/utils", "version": "1.0.0", "dependencies": { "@stock-bot/cache": "workspace:*", "@stock-bot/config": "workspace:*", - "@stock-bot/connection-factory": "workspace:*", + "@stock-bot/di": "workspace:*", "@stock-bot/http": "workspace:*", "@stock-bot/logger": "workspace:*", - "@stock-bot/mongodb-client": "workspace:*", - "@stock-bot/postgres-client": "workspace:*", + "@stock-bot/mongodb": "workspace:*", + "@stock-bot/postgres": "workspace:*", "@stock-bot/types": "workspace:*", "axios": "^1.7.7", "axios-rate-limit": "^1.4.0", @@ -758,35 +759,35 @@ "@smithy/util-utf8": ["@smithy/util-utf8@4.0.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow=="], - "@stock-bot/browser": ["@stock-bot/browser@workspace:libs/browser"], + "@stock-bot/browser": ["@stock-bot/browser@workspace:libs/services/browser"], - "@stock-bot/cache": ["@stock-bot/cache@workspace:libs/cache"], + "@stock-bot/cache": ["@stock-bot/cache@workspace:libs/data/cache"], - "@stock-bot/config": ["@stock-bot/config@workspace:libs/config"], - - "@stock-bot/connection-factory": ["@stock-bot/connection-factory@workspace:libs/connection-factory"], + "@stock-bot/config": ["@stock-bot/config@workspace:libs/core/config"], "@stock-bot/data-ingestion": ["@stock-bot/data-ingestion@workspace:apps/data-ingestion"], "@stock-bot/data-pipeline": ["@stock-bot/data-pipeline@workspace:apps/data-pipeline"], - "@stock-bot/event-bus": ["@stock-bot/event-bus@workspace:libs/event-bus"], + "@stock-bot/di": ["@stock-bot/di@workspace:libs/core/di"], - "@stock-bot/http": ["@stock-bot/http@workspace:libs/http"], + "@stock-bot/event-bus": ["@stock-bot/event-bus@workspace:libs/services/event-bus"], - "@stock-bot/logger": ["@stock-bot/logger@workspace:libs/logger"], + "@stock-bot/http": ["@stock-bot/http@workspace:libs/services/http"], - "@stock-bot/mongodb-client": ["@stock-bot/mongodb-client@workspace:libs/mongodb-client"], + "@stock-bot/logger": ["@stock-bot/logger@workspace:libs/core/logger"], - "@stock-bot/postgres-client": ["@stock-bot/postgres-client@workspace:libs/postgres-client"], + "@stock-bot/mongodb": ["@stock-bot/mongodb@workspace:libs/data/mongodb"], - "@stock-bot/questdb-client": ["@stock-bot/questdb-client@workspace:libs/questdb-client"], + "@stock-bot/postgres": ["@stock-bot/postgres@workspace:libs/data/postgres"], - "@stock-bot/queue": ["@stock-bot/queue@workspace:libs/queue"], + "@stock-bot/questdb": ["@stock-bot/questdb@workspace:libs/data/questdb"], - "@stock-bot/shutdown": ["@stock-bot/shutdown@workspace:libs/shutdown"], + "@stock-bot/queue": ["@stock-bot/queue@workspace:libs/services/queue"], - "@stock-bot/types": ["@stock-bot/types@workspace:libs/types"], + "@stock-bot/shutdown": ["@stock-bot/shutdown@workspace:libs/services/shutdown"], + + "@stock-bot/types": ["@stock-bot/types@workspace:libs/core/types"], "@stock-bot/utils": ["@stock-bot/utils@workspace:libs/utils"], @@ -2356,29 +2357,29 @@ "@stock-bot/logger/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], - "@stock-bot/mongodb-client/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], + "@stock-bot/mongodb/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.21.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/type-utils": "6.21.0", "@typescript-eslint/utils": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.21.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/type-utils": "6.21.0", "@typescript-eslint/utils": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], + "@stock-bot/mongodb/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], - "@stock-bot/mongodb-client/eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], + "@stock-bot/mongodb/eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], - "@stock-bot/postgres-client/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], + "@stock-bot/postgres/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.21.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/type-utils": "6.21.0", "@typescript-eslint/utils": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.21.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/type-utils": "6.21.0", "@typescript-eslint/utils": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA=="], - "@stock-bot/postgres-client/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], + "@stock-bot/postgres/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], - "@stock-bot/postgres-client/eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], + "@stock-bot/postgres/eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], - "@stock-bot/questdb-client/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], + "@stock-bot/questdb/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.21.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/type-utils": "6.21.0", "@typescript-eslint/utils": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.21.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/type-utils": "6.21.0", "@typescript-eslint/utils": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA=="], - "@stock-bot/questdb-client/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], + "@stock-bot/questdb/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], - "@stock-bot/questdb-client/eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], + "@stock-bot/questdb/eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], "@stock-bot/queue/@types/node": ["@types/node@20.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA=="], @@ -2594,113 +2595,113 @@ "@stock-bot/http/eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.21.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.21.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.21.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.21.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "@stock-bot/mongodb-client/eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], + "@stock-bot/mongodb/eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], - "@stock-bot/mongodb-client/eslint/@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], + "@stock-bot/mongodb/eslint/@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], - "@stock-bot/mongodb-client/eslint/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], + "@stock-bot/mongodb/eslint/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], - "@stock-bot/mongodb-client/eslint/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], + "@stock-bot/mongodb/eslint/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], - "@stock-bot/mongodb-client/eslint/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/mongodb/eslint/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/mongodb-client/eslint/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], + "@stock-bot/mongodb/eslint/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], - "@stock-bot/mongodb-client/eslint/file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + "@stock-bot/mongodb/eslint/file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], - "@stock-bot/mongodb-client/eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@stock-bot/mongodb/eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.21.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.21.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.21.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.21.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "@stock-bot/postgres-client/eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], + "@stock-bot/postgres/eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], - "@stock-bot/postgres-client/eslint/@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], + "@stock-bot/postgres/eslint/@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], - "@stock-bot/postgres-client/eslint/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], + "@stock-bot/postgres/eslint/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], - "@stock-bot/postgres-client/eslint/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], + "@stock-bot/postgres/eslint/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], - "@stock-bot/postgres-client/eslint/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/postgres/eslint/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/postgres-client/eslint/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], + "@stock-bot/postgres/eslint/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], - "@stock-bot/postgres-client/eslint/file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + "@stock-bot/postgres/eslint/file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], - "@stock-bot/postgres-client/eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@stock-bot/postgres/eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.21.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.21.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.21.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.21.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "@stock-bot/questdb-client/eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], + "@stock-bot/questdb/eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], - "@stock-bot/questdb-client/eslint/@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], + "@stock-bot/questdb/eslint/@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], - "@stock-bot/questdb-client/eslint/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], + "@stock-bot/questdb/eslint/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], - "@stock-bot/questdb-client/eslint/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], + "@stock-bot/questdb/eslint/eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], - "@stock-bot/questdb-client/eslint/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/questdb/eslint/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/questdb-client/eslint/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], + "@stock-bot/questdb/eslint/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], - "@stock-bot/questdb-client/eslint/file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + "@stock-bot/questdb/eslint/file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], - "@stock-bot/questdb-client/eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@stock-bot/questdb/eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "@stock-bot/web-app/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], @@ -2824,65 +2825,65 @@ "@stock-bot/http/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/mongodb-client/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], + "@stock-bot/mongodb/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/postgres-client/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], + "@stock-bot/postgres/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@stock-bot/questdb-client/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], + "@stock-bot/questdb/eslint/file-entry-cache/flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], "@stock-bot/web-app/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], @@ -2926,29 +2927,29 @@ "@stock-bot/http/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/mongodb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/mongodb/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/postgres-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/postgres/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], - "@stock-bot/questdb-client/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/questdb/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "@stock-bot/web-app/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], @@ -2968,17 +2969,17 @@ "@stock-bot/http/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/mongodb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/mongodb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/postgres-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/postgres/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@stock-bot/questdb-client/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@stock-bot/questdb/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "@stock-bot/web-app/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], diff --git a/libs/connection-factory/src/index.ts b/libs/connection-factory/src/index.ts deleted file mode 100644 index 4631db4..0000000 --- a/libs/connection-factory/src/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { ConnectionFactory } from './connection-factory'; -export { ServiceContainer, createServiceContainer } from './service-container'; -export { PoolSizeCalculator } from './pool-size-calculator'; - -export type { - ConnectionPoolConfig, - MongoDBPoolConfig, - PostgreSQLPoolConfig, - CachePoolConfig, - ConnectionFactoryConfig, - ConnectionPool, - PoolMetrics, - ConnectionFactory as IConnectionFactory, -} from './types'; - -export type { - ServiceRegistration, - ServiceResolver, -} from './service-container'; - -export type { - PoolSizeRecommendation, -} from './pool-size-calculator'; \ No newline at end of file diff --git a/libs/config/.env.example b/libs/core/config/.env.example similarity index 100% rename from libs/config/.env.example rename to libs/core/config/.env.example diff --git a/libs/config/README.md b/libs/core/config/README.md similarity index 100% rename from libs/config/README.md rename to libs/core/config/README.md diff --git a/libs/config/config/default.json b/libs/core/config/config/default.json similarity index 100% rename from libs/config/config/default.json rename to libs/core/config/config/default.json diff --git a/libs/config/config/development.json b/libs/core/config/config/development.json similarity index 100% rename from libs/config/config/development.json rename to libs/core/config/config/development.json diff --git a/libs/config/config/production.json b/libs/core/config/config/production.json similarity index 100% rename from libs/config/config/production.json rename to libs/core/config/config/production.json diff --git a/libs/config/config/test.json b/libs/core/config/config/test.json similarity index 100% rename from libs/config/config/test.json rename to libs/core/config/config/test.json diff --git a/libs/config/package.json b/libs/core/config/package.json similarity index 100% rename from libs/config/package.json rename to libs/core/config/package.json diff --git a/libs/config/src/cli.ts b/libs/core/config/src/cli.ts similarity index 100% rename from libs/config/src/cli.ts rename to libs/core/config/src/cli.ts diff --git a/libs/config/src/config-manager.ts b/libs/core/config/src/config-manager.ts similarity index 100% rename from libs/config/src/config-manager.ts rename to libs/core/config/src/config-manager.ts diff --git a/libs/config/src/errors.ts b/libs/core/config/src/errors.ts similarity index 100% rename from libs/config/src/errors.ts rename to libs/core/config/src/errors.ts diff --git a/libs/config/src/index.ts b/libs/core/config/src/index.ts similarity index 98% rename from libs/config/src/index.ts rename to libs/core/config/src/index.ts index 1097816..cd65a71 100644 --- a/libs/config/src/index.ts +++ b/libs/core/config/src/index.ts @@ -150,6 +150,10 @@ export function getProviderConfig(provider: string) { return (providers as Record)[provider]; } +export function getQueueConfig() { + return getConfig().queue; +} + // Export environment helpers export function isDevelopment(): boolean { return getConfig().environment === 'development'; diff --git a/libs/config/src/loaders/env.loader.ts b/libs/core/config/src/loaders/env.loader.ts similarity index 100% rename from libs/config/src/loaders/env.loader.ts rename to libs/core/config/src/loaders/env.loader.ts diff --git a/libs/config/src/loaders/file.loader.ts b/libs/core/config/src/loaders/file.loader.ts similarity index 100% rename from libs/config/src/loaders/file.loader.ts rename to libs/core/config/src/loaders/file.loader.ts diff --git a/libs/config/src/schemas/base.schema.ts b/libs/core/config/src/schemas/base.schema.ts similarity index 100% rename from libs/config/src/schemas/base.schema.ts rename to libs/core/config/src/schemas/base.schema.ts diff --git a/libs/config/src/schemas/database.schema.ts b/libs/core/config/src/schemas/database.schema.ts similarity index 100% rename from libs/config/src/schemas/database.schema.ts rename to libs/core/config/src/schemas/database.schema.ts diff --git a/libs/config/src/schemas/index.ts b/libs/core/config/src/schemas/index.ts similarity index 100% rename from libs/config/src/schemas/index.ts rename to libs/core/config/src/schemas/index.ts diff --git a/libs/config/src/schemas/provider.schema.ts b/libs/core/config/src/schemas/provider.schema.ts similarity index 100% rename from libs/config/src/schemas/provider.schema.ts rename to libs/core/config/src/schemas/provider.schema.ts diff --git a/libs/config/src/schemas/service.schema.ts b/libs/core/config/src/schemas/service.schema.ts similarity index 100% rename from libs/config/src/schemas/service.schema.ts rename to libs/core/config/src/schemas/service.schema.ts diff --git a/libs/config/src/types/index.ts b/libs/core/config/src/types/index.ts similarity index 100% rename from libs/config/src/types/index.ts rename to libs/core/config/src/types/index.ts diff --git a/libs/config/src/utils/secrets.ts b/libs/core/config/src/utils/secrets.ts similarity index 100% rename from libs/config/src/utils/secrets.ts rename to libs/core/config/src/utils/secrets.ts diff --git a/libs/config/src/utils/validation.ts b/libs/core/config/src/utils/validation.ts similarity index 100% rename from libs/config/src/utils/validation.ts rename to libs/core/config/src/utils/validation.ts diff --git a/libs/config/test/config-manager.test.ts b/libs/core/config/test/config-manager.test.ts similarity index 100% rename from libs/config/test/config-manager.test.ts rename to libs/core/config/test/config-manager.test.ts diff --git a/libs/config/test/dynamic-location.test.ts b/libs/core/config/test/dynamic-location.test.ts similarity index 100% rename from libs/config/test/dynamic-location.test.ts rename to libs/core/config/test/dynamic-location.test.ts diff --git a/libs/config/test/edge-cases.test.ts b/libs/core/config/test/edge-cases.test.ts similarity index 100% rename from libs/config/test/edge-cases.test.ts rename to libs/core/config/test/edge-cases.test.ts diff --git a/libs/config/test/index.test.ts b/libs/core/config/test/index.test.ts similarity index 100% rename from libs/config/test/index.test.ts rename to libs/core/config/test/index.test.ts diff --git a/libs/config/test/loaders.test.ts b/libs/core/config/test/loaders.test.ts similarity index 100% rename from libs/config/test/loaders.test.ts rename to libs/core/config/test/loaders.test.ts diff --git a/libs/config/test/provider-config.test.ts b/libs/core/config/test/provider-config.test.ts similarity index 100% rename from libs/config/test/provider-config.test.ts rename to libs/core/config/test/provider-config.test.ts diff --git a/libs/config/test/real-usage.test.ts b/libs/core/config/test/real-usage.test.ts similarity index 100% rename from libs/config/test/real-usage.test.ts rename to libs/core/config/test/real-usage.test.ts diff --git a/libs/config/tsconfig.json b/libs/core/config/tsconfig.json similarity index 55% rename from libs/config/tsconfig.json rename to libs/core/config/tsconfig.json index e02b16b..3f476c8 100644 --- a/libs/config/tsconfig.json +++ b/libs/core/config/tsconfig.json @@ -1,8 +1,9 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ diff --git a/libs/config/turbo.json b/libs/core/config/turbo.json similarity index 100% rename from libs/config/turbo.json rename to libs/core/config/turbo.json diff --git a/libs/connection-factory/src/connection-factory.ts b/libs/core/di/connection-factory.ts similarity index 79% rename from libs/connection-factory/src/connection-factory.ts rename to libs/core/di/connection-factory.ts index 0d20990..5f402a6 100644 --- a/libs/connection-factory/src/connection-factory.ts +++ b/libs/core/di/connection-factory.ts @@ -1,7 +1,8 @@ import { getLogger, type Logger } from '@stock-bot/logger'; -import { MongoDBClient, createMongoDBClient, type ConnectionEvents } from '@stock-bot/mongodb-client'; -import { PostgreSQLClient, createPostgreSQLClient } from '@stock-bot/postgres-client'; +import { MongoDBClient, createMongoDBClient, type ConnectionEvents } from '@stock-bot/mongodb'; +import { PostgreSQLClient, createPostgreSQLClient } from '@stock-bot/postgres'; import { createCache, type CacheProvider } from '@stock-bot/cache'; +import { QueueManager } from '@stock-bot/queue'; import type { ConnectionFactory as IConnectionFactory, ConnectionPool, @@ -9,6 +10,7 @@ import type { MongoDBPoolConfig, PostgreSQLPoolConfig, CachePoolConfig, + QueuePoolConfig, PoolMetrics, } from './types'; @@ -189,7 +191,51 @@ export class ConnectionFactory implements IConnectionFactory { } } - getPool(type: 'mongodb' | 'postgres' | 'cache', name: string): ConnectionPool | undefined { + createQueue(poolConfig: QueuePoolConfig): ConnectionPool { + const key = `queue:${poolConfig.name}`; + + if (this.pools.has(key)) { + this.logger.debug('Reusing existing queue manager', { name: poolConfig.name }); + return this.pools.get(key)!; + } + + this.logger.info('Creating queue manager', { + name: poolConfig.name, + }); + + try { + // Initialize or get existing QueueManager instance + const queueManager = QueueManager.getOrInitialize(poolConfig.config); + + const pool: ConnectionPool = { + name: poolConfig.name, + client: queueManager, + metrics: this.createInitialMetrics(), + health: async () => { + try { + // Check if QueueManager is initialized + queueManager.getQueueNames(); + return true; + } catch { + return false; + } + }, + dispose: async () => { + // QueueManager handles its own shutdown + await queueManager.shutdown(); + this.pools.delete(key); + }, + }; + + this.pools.set(key, pool); + return pool; + } catch (error) { + this.logger.error('Failed to create queue manager', { name: poolConfig.name, error }); + throw error; + } + } + + getPool(type: 'mongodb' | 'postgres' | 'cache' | 'queue', name: string): ConnectionPool | undefined { const key = `${type}:${name}`; return this.pools.get(key); } diff --git a/libs/core/di/index.ts b/libs/core/di/index.ts new file mode 100644 index 0000000..e79e4b0 --- /dev/null +++ b/libs/core/di/index.ts @@ -0,0 +1,6 @@ +// Export all dependency injection components +export * from './service-container'; +export * from './connection-factory'; +export * from './operation-context'; +export * from './pool-size-calculator'; +export * from './types'; \ No newline at end of file diff --git a/libs/utils/src/operation-context.ts b/libs/core/di/operation-context.ts similarity index 88% rename from libs/utils/src/operation-context.ts rename to libs/core/di/operation-context.ts index c265f4e..fbe1038 100644 --- a/libs/utils/src/operation-context.ts +++ b/libs/core/di/operation-context.ts @@ -11,9 +11,9 @@ import { createCache, type CacheProvider } from '@stock-bot/cache'; import { getLogger, type Logger } from '@stock-bot/logger'; import { getDatabaseConfig } from '@stock-bot/config'; -import type { ServiceResolver } from '@stock-bot/connection-factory'; -import type { MongoDBClient } from '@stock-bot/mongodb-client'; -import type { PostgreSQLClient } from '@stock-bot/postgres-client'; +import type { ServiceResolver } from './service-container'; +import type { MongoDBClient } from '@stock-bot/mongodb'; +import type { PostgreSQLClient } from '@stock-bot/postgres'; export interface OperationContextOptions { handlerName: string; @@ -28,6 +28,7 @@ export class OperationContext { private _mongodb?: MongoDBClient; private _postgres?: PostgreSQLClient; private _cache?: CacheProvider; + private _queue?: any; // Type will be QueueManager but we avoid import for circular deps private static sharedCache: CacheProvider | null = null; private static parentLoggers = new Map(); @@ -92,16 +93,45 @@ export class OperationContext { return this._postgres!; } + // Lazy load QueueManager + get queue(): any { + if (!this._queue) { + if (this.container) { + try { + this._queue = this.container.resolve('queue'); + } catch (error) { + this.logger.warn('Failed to resolve QueueManager from container, falling back to singleton', { error }); + this._queue = this.getLegacyQueueManager(); + } + } else { + this._queue = this.getLegacyQueueManager(); + } + } + return this._queue!; + } + + // Legacy method for QueueManager + private getLegacyQueueManager(): any { + try { + // Dynamic import to avoid TypeScript issues during build + const { QueueManager } = require('@stock-bot/queue'); + return QueueManager.getInstance(); + } catch (error) { + this.logger.warn('QueueManager not initialized, queue operations may fail', { error }); + throw new Error('QueueManager not available'); + } + } + // Legacy method for backward compatibility private getLegacyDatabaseClient(type: 'mongodb' | 'postgres'): any { try { if (type === 'mongodb') { // Dynamic import to avoid TypeScript issues during build - const { getMongoDBClient } = require('@stock-bot/mongodb-client'); + const { getMongoDBClient } = require('@stock-bot/mongodb'); return getMongoDBClient(); } else { // Dynamic import to avoid TypeScript issues during build - const { getPostgreSQLClient } = require('@stock-bot/postgres-client'); + const { getPostgreSQLClient } = require('@stock-bot/postgres'); return getPostgreSQLClient(); } } catch (error) { diff --git a/libs/connection-factory/package.json b/libs/core/di/package.json similarity index 57% rename from libs/connection-factory/package.json rename to libs/core/di/package.json index 8774b38..e10377f 100644 --- a/libs/connection-factory/package.json +++ b/libs/core/di/package.json @@ -1,14 +1,19 @@ { - "name": "@stock-bot/connection-factory", + "name": "@stock-bot/di", "version": "1.0.0", "main": "./src/index.ts", "types": "./src/index.ts", + "scripts": { + "build": "tsc", + "clean": "rm -rf dist" + }, "dependencies": { "@stock-bot/config": "workspace:*", "@stock-bot/logger": "workspace:*", - "@stock-bot/mongodb-client": "workspace:*", - "@stock-bot/postgres-client": "workspace:*", + "@stock-bot/mongodb": "workspace:*", + "@stock-bot/postgres": "workspace:*", "@stock-bot/cache": "workspace:*", + "@stock-bot/queue": "workspace:*", "mongodb": "^6.3.0", "pg": "^8.11.3" }, diff --git a/libs/connection-factory/src/pool-size-calculator.ts b/libs/core/di/pool-size-calculator.ts similarity index 100% rename from libs/connection-factory/src/pool-size-calculator.ts rename to libs/core/di/pool-size-calculator.ts diff --git a/libs/connection-factory/src/service-container.ts b/libs/core/di/service-container.ts similarity index 67% rename from libs/connection-factory/src/service-container.ts rename to libs/core/di/service-container.ts index dadc77e..3c34fc5 100644 --- a/libs/connection-factory/src/service-container.ts +++ b/libs/core/di/service-container.ts @@ -99,12 +99,22 @@ export class ServiceContainer implements ServiceResolver { } } -// Helper to create pre-configured containers for services +// Enhanced service container factory with infrastructure services export function createServiceContainer( serviceName: string, - connectionFactory: ConnectionFactory + connectionFactory: ConnectionFactory, + config?: any ): ServiceContainer { const container = new ServiceContainer(serviceName); + + // Register configuration if provided + if (config) { + container.register({ + name: 'config', + factory: () => config, + singleton: true, + }); + } // Register connection factories container.register({ @@ -143,5 +153,63 @@ export function createServiceContainer( singleton: true, }); + container.register({ + name: 'queue', + factory: () => { + const pool = connectionFactory.createQueue({ + name: 'default', + config: {} as any, // Config injected by factory + }); + return pool.client; + }, + singleton: true, + }); + + // Register ProxyManager + container.register({ + name: 'proxyManager', + factory: async () => { + const { ProxyManager } = await import('@stock-bot/utils'); + await ProxyManager.initialize(); + return ProxyManager.getInstance(); + }, + singleton: true, + dispose: async (proxyManager) => { + // ProxyManager handles its own cleanup + if (proxyManager && typeof proxyManager.shutdown === 'function') { + await proxyManager.shutdown(); + } + } + }); + + // Register Browser service + container.register({ + name: 'browser', + factory: async () => { + const { Browser } = await import('@stock-bot/browser'); + return Browser; + }, + singleton: true, + dispose: async (browser) => { + if (browser && typeof browser.close === 'function') { + await browser.close(); + } + } + }); + + // Register HttpClient with default configuration + container.register({ + name: 'httpClient', + factory: async () => { + const { createHttpClient } = await import('@stock-bot/http'); + return createHttpClient({ + timeout: 30000, + retries: 3, + userAgent: 'stock-bot/1.0', + }); + }, + singleton: true, + }); + return container; } \ No newline at end of file diff --git a/libs/core/di/tsconfig.json b/libs/core/di/tsconfig.json new file mode 100644 index 0000000..8b161f1 --- /dev/null +++ b/libs/core/di/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "rootDir": "./", + "outDir": "./dist", + "composite": true, + "declaration": true, + "declarationMap": true, + "types": ["node", "bun-types"] + }, + "include": ["./**/*.ts"], + "exclude": ["node_modules", "dist"], + "references": [ + { "path": "../config" }, + { "path": "../logger" }, + { "path": "../../data/mongodb" }, + { "path": "../../data/postgres" }, + { "path": "../../data/cache" }, + { "path": "../../services/queue" } + ] +} \ No newline at end of file diff --git a/libs/connection-factory/src/types.ts b/libs/core/di/types.ts similarity index 79% rename from libs/connection-factory/src/types.ts rename to libs/core/di/types.ts index 4d61f20..6f414d0 100644 --- a/libs/connection-factory/src/types.ts +++ b/libs/core/di/types.ts @@ -1,6 +1,7 @@ import type { MongoDBClientConfig } from '@stock-bot/mongodb-client'; import type { PostgreSQLClientConfig } from '@stock-bot/postgres-client'; import type { CacheOptions } from '@stock-bot/cache'; +import type { QueueManagerConfig } from '@stock-bot/queue'; export interface ConnectionPoolConfig { name: string; @@ -24,6 +25,10 @@ export interface CachePoolConfig extends ConnectionPoolConfig { config: CacheOptions; } +export interface QueuePoolConfig extends ConnectionPoolConfig { + config: QueueManagerConfig; +} + export interface ConnectionFactoryConfig { service: string; environment: 'development' | 'production' | 'test'; @@ -31,6 +36,7 @@ export interface ConnectionFactoryConfig { mongodb?: Partial; postgres?: Partial; cache?: Partial; + queue?: Partial; }; } @@ -55,7 +61,8 @@ export interface ConnectionFactory { createMongoDB(config: MongoDBPoolConfig): Promise>; createPostgreSQL(config: PostgreSQLPoolConfig): Promise>; createCache(config: CachePoolConfig): ConnectionPool; - getPool(type: 'mongodb' | 'postgres' | 'cache', name: string): ConnectionPool | undefined; + createQueue(config: QueuePoolConfig): ConnectionPool; + getPool(type: 'mongodb' | 'postgres' | 'cache' | 'queue', name: string): ConnectionPool | undefined; listPools(): Array<{ type: string; name: string; metrics: PoolMetrics }>; disposeAll(): Promise; } \ No newline at end of file diff --git a/libs/core/handlers/package.json b/libs/core/handlers/package.json new file mode 100644 index 0000000..9b9db79 --- /dev/null +++ b/libs/core/handlers/package.json @@ -0,0 +1,22 @@ +{ + "name": "@stock-bot/handlers", + "version": "1.0.0", + "description": "Universal handler system for queue and event-driven operations", + "main": "./src/index.ts", + "types": "./src/index.ts", + "scripts": { + "build": "tsc", + "clean": "rimraf dist", + "test": "bun test" + }, + "dependencies": { + "@stock-bot/config": "workspace:*", + "@stock-bot/logger": "workspace:*", + "@stock-bot/di": "workspace:*" + }, + "devDependencies": { + "@types/node": "^20.11.0", + "typescript": "^5.3.0", + "bun-types": "^1.2.15" + } +} \ No newline at end of file diff --git a/libs/core/handlers/src/base/BaseHandler.ts b/libs/core/handlers/src/base/BaseHandler.ts new file mode 100644 index 0000000..529ab4c --- /dev/null +++ b/libs/core/handlers/src/base/BaseHandler.ts @@ -0,0 +1,69 @@ +import type { ServiceContainer } from '@stock-bot/di'; +import { getLogger } from '@stock-bot/logger'; +import type { IHandler, ExecutionContext } from '../types/types'; + +/** + * Abstract base class for all handlers + * Provides common functionality and structure for queue/event operations + */ +export abstract class BaseHandler implements IHandler { + protected readonly logger; + + constructor(protected readonly container: ServiceContainer) { + this.logger = getLogger(this.constructor.name); + } + + /** + * Main execution method - must be implemented by subclasses + * Works with queue (events commented for future) + */ + abstract execute(operation: string, input: unknown, context: ExecutionContext): Promise; + + /** + * Queue helper methods + */ + protected async scheduleOperation(operation: string, payload: unknown, delay?: number): Promise { + const queue = await this.container.resolveAsync('queue'); + await queue.add(operation, payload, { delay }); + } + + /** + * Get a service from the container + */ + protected async getService(serviceName: string): Promise { + return await this.container.resolveAsync(serviceName); + } + + /** + * Event methods - commented for future + */ + // protected async publishEvent(eventName: string, payload: unknown): Promise { + // const eventBus = await this.container.resolveAsync('eventBus'); + // await eventBus.publish(eventName, payload); + // } + + /** + * Lifecycle hooks - can be overridden by subclasses + */ + async onInit?(): Promise; + async onStart?(): Promise; + async onStop?(): Promise; + async onDispose?(): Promise; +} + +/** + * Specialized handler for operations that have scheduled jobs + */ +export abstract class ScheduledHandler extends BaseHandler { + /** + * Get scheduled job configurations for this handler + * Override in subclasses to define schedules + */ + getScheduledJobs?(): Array<{ + operation: string; + cronPattern: string; + priority?: number; + immediately?: boolean; + description?: string; + }>; +} \ No newline at end of file diff --git a/libs/core/handlers/src/decorators/decorators.ts b/libs/core/handlers/src/decorators/decorators.ts new file mode 100644 index 0000000..b25e0db --- /dev/null +++ b/libs/core/handlers/src/decorators/decorators.ts @@ -0,0 +1,86 @@ +// Simple decorators for handler registration +// These are placeholders for now - can be enhanced with reflection later + +/** + * Handler decorator - marks a class as a handler + * @param name Handler name for registration + */ +export function Handler(name: string) { + return function (constructor: T) { + // Store handler name on the constructor for future use + (constructor as any).__handlerName = name; + return constructor; + }; +} + +/** + * Operation decorator - marks a method as an operation + * @param name Operation name + */ +export function Operation(name: string) { + return function (target: any, propertyName: string, descriptor: PropertyDescriptor) { + // Store operation metadata for future use + if (!target.constructor.__operations) { + target.constructor.__operations = []; + } + target.constructor.__operations.push({ + name, + method: propertyName, + }); + return descriptor; + }; +} + +/** + * Queue schedule decorator - marks an operation as scheduled + * @param cronPattern Cron pattern for scheduling + * @param options Additional scheduling options + */ +export function QueueSchedule( + cronPattern: string, + options?: { + priority?: number; + immediately?: boolean; + description?: string; + } +) { + return function (target: any, propertyName: string, descriptor: PropertyDescriptor) { + // Store schedule metadata for future use + if (!target.constructor.__schedules) { + target.constructor.__schedules = []; + } + target.constructor.__schedules.push({ + operation: propertyName, + cronPattern, + ...options, + }); + return descriptor; + }; +} + +// Future event decorators - commented for now +// export function EventListener(eventName: string) { +// return function (target: any, propertyName: string, descriptor: PropertyDescriptor) { +// if (!target.constructor.__eventListeners) { +// target.constructor.__eventListeners = []; +// } +// target.constructor.__eventListeners.push({ +// eventName, +// method: propertyName, +// }); +// return descriptor; +// }; +// } + +// export function EventPublisher(eventName: string) { +// return function (target: any, propertyName: string, descriptor: PropertyDescriptor) { +// if (!target.constructor.__eventPublishers) { +// target.constructor.__eventPublishers = []; +// } +// target.constructor.__eventPublishers.push({ +// eventName, +// method: propertyName, +// }); +// return descriptor; +// }; +// } \ No newline at end of file diff --git a/libs/core/handlers/src/index.ts b/libs/core/handlers/src/index.ts new file mode 100644 index 0000000..752d78d --- /dev/null +++ b/libs/core/handlers/src/index.ts @@ -0,0 +1,26 @@ +// Base handler classes +export { BaseHandler, ScheduledHandler } from './base/BaseHandler'; + +// Handler registry +export { handlerRegistry } from './registry/HandlerRegistry'; + +// Types +export type { + ExecutionContext, + IHandler, + JobHandler, + ScheduledJob, + HandlerConfig, + HandlerConfigWithSchedule, + TypedJobHandler, + HandlerMetadata, + OperationMetadata, +} from './types/types'; + +export { createJobHandler } from './types/types'; + +// Decorators +export { Handler, Operation, QueueSchedule } from './decorators/decorators'; + +// Future exports - commented for now +// export { EventListener, EventPublisher } from './decorators/decorators'; \ No newline at end of file diff --git a/libs/core/handlers/src/registry/HandlerRegistry.ts b/libs/core/handlers/src/registry/HandlerRegistry.ts new file mode 100644 index 0000000..4101bc1 --- /dev/null +++ b/libs/core/handlers/src/registry/HandlerRegistry.ts @@ -0,0 +1,191 @@ +import { getLogger } from '@stock-bot/logger'; +import type { JobHandler, HandlerConfig, HandlerConfigWithSchedule, ScheduledJob } from '../types/types'; + +const logger = getLogger('handler-registry'); + +class HandlerRegistry { + private handlers = new Map(); + private handlerSchedules = new Map(); + + /** + * Register a handler with its operations (simple config) + */ + register(handlerName: string, config: HandlerConfig): void { + logger.info(`Registering handler: ${handlerName}`, { + operations: Object.keys(config), + }); + + this.handlers.set(handlerName, config); + } + + /** + * Register a handler with operations and scheduled jobs (full config) + */ + registerWithSchedule(config: HandlerConfigWithSchedule): void { + logger.info(`Registering handler with schedule: ${config.name}`, { + operations: Object.keys(config.operations), + scheduledJobs: config.scheduledJobs?.length || 0, + }); + + this.handlers.set(config.name, config.operations); + + if (config.scheduledJobs && config.scheduledJobs.length > 0) { + this.handlerSchedules.set(config.name, config.scheduledJobs); + } + } + + /** + * Get a handler for a specific handler and operation + */ + getHandler(handler: string, operation: string): JobHandler | null { + const handlerConfig = this.handlers.get(handler); + if (!handlerConfig) { + logger.warn(`Handler not found: ${handler}`); + return null; + } + + const jobHandler = handlerConfig[operation]; + if (!jobHandler) { + logger.warn(`Operation not found: ${handler}:${operation}`, { + availableOperations: Object.keys(handlerConfig), + }); + return null; + } + + return jobHandler; + } + + /** + * Get all scheduled jobs from all handlers + */ + getAllScheduledJobs(): Array<{ handler: string; job: ScheduledJob }> { + const allJobs: Array<{ handler: string; job: ScheduledJob }> = []; + + for (const [handlerName, jobs] of this.handlerSchedules) { + for (const job of jobs) { + allJobs.push({ + handler: handlerName, + job, + }); + } + } + + return allJobs; + } + + /** + * Get scheduled jobs for a specific handler + */ + getScheduledJobs(handler: string): ScheduledJob[] { + return this.handlerSchedules.get(handler) || []; + } + + /** + * Check if a handler has scheduled jobs + */ + hasScheduledJobs(handler: string): boolean { + return this.handlerSchedules.has(handler); + } + + /** + * Get all registered handlers with their configurations + */ + getHandlerConfigs(): Array<{ name: string; operations: string[]; scheduledJobs: number }> { + return Array.from(this.handlers.keys()).map(name => ({ + name, + operations: Object.keys(this.handlers.get(name) || {}), + scheduledJobs: this.handlerSchedules.get(name)?.length || 0, + })); + } + + /** + * Get all handlers with their full configurations for queue manager registration + */ + getAllHandlers(): Map { + const result = new Map< + string, + { operations: HandlerConfig; scheduledJobs?: ScheduledJob[] } + >(); + + for (const [name, operations] of this.handlers) { + const scheduledJobs = this.handlerSchedules.get(name); + result.set(name, { + operations, + scheduledJobs, + }); + } + + return result; + } + + /** + * Get all registered handlers + */ + getHandlers(): string[] { + return Array.from(this.handlers.keys()); + } + + /** + * Get operations for a specific handler + */ + getOperations(handler: string): string[] { + const handlerConfig = this.handlers.get(handler); + return handlerConfig ? Object.keys(handlerConfig) : []; + } + + /** + * Check if a handler exists + */ + hasHandler(handler: string): boolean { + return this.handlers.has(handler); + } + + /** + * Check if a handler has a specific operation + */ + hasOperation(handler: string, operation: string): boolean { + const handlerConfig = this.handlers.get(handler); + return handlerConfig ? operation in handlerConfig : false; + } + + /** + * Remove a handler + */ + unregister(handler: string): boolean { + this.handlerSchedules.delete(handler); + return this.handlers.delete(handler); + } + + /** + * Clear all handlers + */ + clear(): void { + this.handlers.clear(); + this.handlerSchedules.clear(); + } + + /** + * Get registry statistics + */ + getStats(): { handlers: number; totalOperations: number; totalScheduledJobs: number } { + let totalOperations = 0; + let totalScheduledJobs = 0; + + for (const config of this.handlers.values()) { + totalOperations += Object.keys(config).length; + } + + for (const jobs of this.handlerSchedules.values()) { + totalScheduledJobs += jobs.length; + } + + return { + handlers: this.handlers.size, + totalOperations, + totalScheduledJobs, + }; + } +} + +// Export singleton instance +export const handlerRegistry = new HandlerRegistry(); \ No newline at end of file diff --git a/libs/core/handlers/src/types/types.ts b/libs/core/handlers/src/types/types.ts new file mode 100644 index 0000000..07e3761 --- /dev/null +++ b/libs/core/handlers/src/types/types.ts @@ -0,0 +1,73 @@ +import type { ServiceContainer } from '@stock-bot/di'; + +// Simple execution context - mostly queue for now +export interface ExecutionContext { + type: 'queue'; // | 'event' - commented for future + serviceContainer: ServiceContainer; + metadata: { + source?: string; + jobId?: string; + attempts?: number; + timestamp: number; + [key: string]: unknown; + }; +} + +// Simple handler interface +export interface IHandler { + execute(operation: string, input: unknown, context: ExecutionContext): Promise; +} + +// Job handler type for queue operations +export interface JobHandler { + (payload: TPayload): Promise; +} + +// Scheduled job configuration +export interface ScheduledJob { + type: string; + operation: string; + payload?: T; + cronPattern: string; + priority?: number; + description?: string; + immediately?: boolean; + delay?: number; +} + +// Handler configuration +export interface HandlerConfig { + [operation: string]: JobHandler; +} + +// Handler configuration with schedule +export interface HandlerConfigWithSchedule { + name: string; + operations: Record; + scheduledJobs?: ScheduledJob[]; +} + +// Type-safe wrapper for creating job handlers +export type TypedJobHandler = (payload: TPayload) => Promise; + +// Helper to create type-safe job handlers +export function createJobHandler( + handler: TypedJobHandler +): JobHandler { + return async (payload: unknown): Promise => { + return handler(payload as TPayload); + }; +} + +// Handler metadata for decorators (future) +export interface HandlerMetadata { + name: string; + operations: OperationMetadata[]; +} + +export interface OperationMetadata { + name: string; + schedules?: string[]; + // eventListeners?: string[]; // Future + // eventPublishers?: string[]; // Future +} \ No newline at end of file diff --git a/libs/connection-factory/tsconfig.json b/libs/core/handlers/tsconfig.json similarity index 57% rename from libs/connection-factory/tsconfig.json rename to libs/core/handlers/tsconfig.json index 1ef4805..5dee02f 100644 --- a/libs/connection-factory/tsconfig.json +++ b/libs/core/handlers/tsconfig.json @@ -1,16 +1,14 @@ { - "extends": "../../tsconfig.json", + "extends": "../../../tsconfig.json", "compilerOptions": { - "rootDir": "./src", "outDir": "./dist", + "rootDir": "./src", "composite": true }, "include": ["src/**/*"], "references": [ { "path": "../config" }, { "path": "../logger" }, - { "path": "../mongodb-client" }, - { "path": "../postgres-client" }, - { "path": "../cache" } + { "path": "../di" } ] } \ No newline at end of file diff --git a/libs/logger/README.md b/libs/core/logger/README.md similarity index 100% rename from libs/logger/README.md rename to libs/core/logger/README.md diff --git a/libs/logger/bunfig.toml b/libs/core/logger/bunfig.toml similarity index 100% rename from libs/logger/bunfig.toml rename to libs/core/logger/bunfig.toml diff --git a/libs/logger/package.json b/libs/core/logger/package.json similarity index 100% rename from libs/logger/package.json rename to libs/core/logger/package.json diff --git a/libs/logger/src/index.ts b/libs/core/logger/src/index.ts similarity index 100% rename from libs/logger/src/index.ts rename to libs/core/logger/src/index.ts diff --git a/libs/logger/src/logger.ts b/libs/core/logger/src/logger.ts similarity index 100% rename from libs/logger/src/logger.ts rename to libs/core/logger/src/logger.ts diff --git a/libs/logger/src/types.ts b/libs/core/logger/src/types.ts similarity index 100% rename from libs/logger/src/types.ts rename to libs/core/logger/src/types.ts diff --git a/libs/logger/test/advanced.test.ts b/libs/core/logger/test/advanced.test.ts similarity index 100% rename from libs/logger/test/advanced.test.ts rename to libs/core/logger/test/advanced.test.ts diff --git a/libs/logger/test/basic.test.ts b/libs/core/logger/test/basic.test.ts similarity index 100% rename from libs/logger/test/basic.test.ts rename to libs/core/logger/test/basic.test.ts diff --git a/libs/logger/test/integration.test.ts b/libs/core/logger/test/integration.test.ts similarity index 100% rename from libs/logger/test/integration.test.ts rename to libs/core/logger/test/integration.test.ts diff --git a/libs/logger/test/setup.ts b/libs/core/logger/test/setup.ts similarity index 100% rename from libs/logger/test/setup.ts rename to libs/core/logger/test/setup.ts diff --git a/libs/logger/tsconfig.json b/libs/core/logger/tsconfig.json similarity index 55% rename from libs/logger/tsconfig.json rename to libs/core/logger/tsconfig.json index 969ce3b..dbc9566 100644 --- a/libs/logger/tsconfig.json +++ b/libs/core/logger/tsconfig.json @@ -1,8 +1,9 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ diff --git a/libs/types/package.json b/libs/core/types/package.json similarity index 100% rename from libs/types/package.json rename to libs/core/types/package.json diff --git a/libs/types/src/backtesting.ts b/libs/core/types/src/backtesting.ts similarity index 100% rename from libs/types/src/backtesting.ts rename to libs/core/types/src/backtesting.ts diff --git a/libs/types/src/financial-statements.ts b/libs/core/types/src/financial-statements.ts similarity index 100% rename from libs/types/src/financial-statements.ts rename to libs/core/types/src/financial-statements.ts diff --git a/libs/types/src/helpers.ts b/libs/core/types/src/helpers.ts similarity index 100% rename from libs/types/src/helpers.ts rename to libs/core/types/src/helpers.ts diff --git a/libs/types/src/index.ts b/libs/core/types/src/index.ts similarity index 100% rename from libs/types/src/index.ts rename to libs/core/types/src/index.ts diff --git a/libs/types/src/market-data.ts b/libs/core/types/src/market-data.ts similarity index 100% rename from libs/types/src/market-data.ts rename to libs/core/types/src/market-data.ts diff --git a/libs/types/src/options.ts b/libs/core/types/src/options.ts similarity index 100% rename from libs/types/src/options.ts rename to libs/core/types/src/options.ts diff --git a/libs/types/src/portfolio.ts b/libs/core/types/src/portfolio.ts similarity index 100% rename from libs/types/src/portfolio.ts rename to libs/core/types/src/portfolio.ts diff --git a/libs/types/src/risk-metrics.ts b/libs/core/types/src/risk-metrics.ts similarity index 100% rename from libs/types/src/risk-metrics.ts rename to libs/core/types/src/risk-metrics.ts diff --git a/libs/types/src/technical-analysis.ts b/libs/core/types/src/technical-analysis.ts similarity index 100% rename from libs/types/src/technical-analysis.ts rename to libs/core/types/src/technical-analysis.ts diff --git a/libs/types/src/trading.ts b/libs/core/types/src/trading.ts similarity index 100% rename from libs/types/src/trading.ts rename to libs/core/types/src/trading.ts diff --git a/libs/shutdown/tsconfig.json b/libs/core/types/tsconfig.json similarity index 55% rename from libs/shutdown/tsconfig.json rename to libs/core/types/tsconfig.json index 969ce3b..dbc9566 100644 --- a/libs/shutdown/tsconfig.json +++ b/libs/core/types/tsconfig.json @@ -1,8 +1,9 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ diff --git a/libs/cache/package.json b/libs/data/cache/package.json similarity index 100% rename from libs/cache/package.json rename to libs/data/cache/package.json diff --git a/libs/cache/src/connection-manager.ts b/libs/data/cache/src/connection-manager.ts similarity index 100% rename from libs/cache/src/connection-manager.ts rename to libs/data/cache/src/connection-manager.ts diff --git a/libs/cache/src/index.ts b/libs/data/cache/src/index.ts similarity index 100% rename from libs/cache/src/index.ts rename to libs/data/cache/src/index.ts diff --git a/libs/cache/src/key-generator.ts b/libs/data/cache/src/key-generator.ts similarity index 100% rename from libs/cache/src/key-generator.ts rename to libs/data/cache/src/key-generator.ts diff --git a/libs/cache/src/redis-cache.ts b/libs/data/cache/src/redis-cache.ts similarity index 100% rename from libs/cache/src/redis-cache.ts rename to libs/data/cache/src/redis-cache.ts diff --git a/libs/cache/src/types.ts b/libs/data/cache/src/types.ts similarity index 100% rename from libs/cache/src/types.ts rename to libs/data/cache/src/types.ts diff --git a/libs/data/cache/tsconfig.json b/libs/data/cache/tsconfig.json new file mode 100644 index 0000000..88fe818 --- /dev/null +++ b/libs/data/cache/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "composite": true + }, + "include": ["src/**/*"], + "references": [ + { "path": "../../core/logger" } + ] +} diff --git a/libs/mongodb-client/README.md b/libs/data/mongodb/README.md similarity index 93% rename from libs/mongodb-client/README.md rename to libs/data/mongodb/README.md index 204df2d..34019ce 100644 --- a/libs/mongodb-client/README.md +++ b/libs/data/mongodb/README.md @@ -15,7 +15,7 @@ A comprehensive MongoDB client library for the Stock Bot trading platform, desig ## Usage ```typescript -import { MongoDBClient } from '@stock-bot/mongodb-client'; +import { MongoDBClient } from '@stock-bot/mongodb'; // Initialize client const mongoClient = new MongoDBClient(); diff --git a/libs/mongodb-client/package.json b/libs/data/mongodb/package.json similarity index 96% rename from libs/mongodb-client/package.json rename to libs/data/mongodb/package.json index ee9957a..c39d9f4 100644 --- a/libs/mongodb-client/package.json +++ b/libs/data/mongodb/package.json @@ -1,5 +1,5 @@ { - "name": "@stock-bot/mongodb-client", + "name": "@stock-bot/mongodb", "version": "1.0.0", "description": "MongoDB client library for Stock Bot platform", "main": "dist/index.js", diff --git a/libs/mongodb-client/src/client.ts b/libs/data/mongodb/src/client.ts similarity index 100% rename from libs/mongodb-client/src/client.ts rename to libs/data/mongodb/src/client.ts diff --git a/libs/mongodb-client/src/factory.ts b/libs/data/mongodb/src/factory.ts similarity index 100% rename from libs/mongodb-client/src/factory.ts rename to libs/data/mongodb/src/factory.ts diff --git a/libs/mongodb-client/src/index.ts b/libs/data/mongodb/src/index.ts similarity index 100% rename from libs/mongodb-client/src/index.ts rename to libs/data/mongodb/src/index.ts diff --git a/libs/mongodb-client/src/types.ts b/libs/data/mongodb/src/types.ts similarity index 100% rename from libs/mongodb-client/src/types.ts rename to libs/data/mongodb/src/types.ts diff --git a/libs/data/mongodb/tsconfig.json b/libs/data/mongodb/tsconfig.json new file mode 100644 index 0000000..79532f7 --- /dev/null +++ b/libs/data/mongodb/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "composite": true + }, + "include": ["src/**/*"], + "references": [ + { "path": "../../core/logger" }, + { "path": "../../core/types" } + ] +} diff --git a/libs/postgres-client/README.md b/libs/data/postgres/README.md similarity index 93% rename from libs/postgres-client/README.md rename to libs/data/postgres/README.md index ad2abab..b0d9ad0 100644 --- a/libs/postgres-client/README.md +++ b/libs/data/postgres/README.md @@ -15,7 +15,7 @@ A comprehensive PostgreSQL client library for the Stock Bot trading platform, de ## Usage ```typescript -import { PostgreSQLClient } from '@stock-bot/postgres-client'; +import { PostgreSQLClient } from '@stock-bot/postgres'; // Initialize client const pgClient = new PostgreSQLClient(); diff --git a/libs/postgres-client/package.json b/libs/data/postgres/package.json similarity index 96% rename from libs/postgres-client/package.json rename to libs/data/postgres/package.json index 781e696..2e6e531 100644 --- a/libs/postgres-client/package.json +++ b/libs/data/postgres/package.json @@ -1,5 +1,5 @@ { - "name": "@stock-bot/postgres-client", + "name": "@stock-bot/postgres", "version": "1.0.0", "description": "PostgreSQL client library for Stock Bot platform", "main": "dist/index.js", diff --git a/libs/postgres-client/src/client.ts b/libs/data/postgres/src/client.ts similarity index 100% rename from libs/postgres-client/src/client.ts rename to libs/data/postgres/src/client.ts diff --git a/libs/postgres-client/src/factory.ts b/libs/data/postgres/src/factory.ts similarity index 100% rename from libs/postgres-client/src/factory.ts rename to libs/data/postgres/src/factory.ts diff --git a/libs/postgres-client/src/health.ts b/libs/data/postgres/src/health.ts similarity index 100% rename from libs/postgres-client/src/health.ts rename to libs/data/postgres/src/health.ts diff --git a/libs/postgres-client/src/index.ts b/libs/data/postgres/src/index.ts similarity index 100% rename from libs/postgres-client/src/index.ts rename to libs/data/postgres/src/index.ts diff --git a/libs/postgres-client/src/query-builder.ts b/libs/data/postgres/src/query-builder.ts similarity index 100% rename from libs/postgres-client/src/query-builder.ts rename to libs/data/postgres/src/query-builder.ts diff --git a/libs/postgres-client/src/transactions.ts b/libs/data/postgres/src/transactions.ts similarity index 100% rename from libs/postgres-client/src/transactions.ts rename to libs/data/postgres/src/transactions.ts diff --git a/libs/postgres-client/src/types.ts b/libs/data/postgres/src/types.ts similarity index 100% rename from libs/postgres-client/src/types.ts rename to libs/data/postgres/src/types.ts diff --git a/libs/data/postgres/tsconfig.json b/libs/data/postgres/tsconfig.json new file mode 100644 index 0000000..79532f7 --- /dev/null +++ b/libs/data/postgres/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "composite": true + }, + "include": ["src/**/*"], + "references": [ + { "path": "../../core/logger" }, + { "path": "../../core/types" } + ] +} diff --git a/libs/questdb-client/README.md b/libs/data/questdb/README.md similarity index 94% rename from libs/questdb-client/README.md rename to libs/data/questdb/README.md index e69884d..469ab8b 100644 --- a/libs/questdb-client/README.md +++ b/libs/data/questdb/README.md @@ -15,7 +15,7 @@ A comprehensive QuestDB client library for the Stock Bot trading platform, optim ## Usage ```typescript -import { QuestDBClient } from '@stock-bot/questdb-client'; +import { QuestDBClient } from '@stock-bot/questdb'; // Initialize client const questClient = new QuestDBClient(); diff --git a/libs/questdb-client/bunfig.toml b/libs/data/questdb/bunfig.toml similarity index 100% rename from libs/questdb-client/bunfig.toml rename to libs/data/questdb/bunfig.toml diff --git a/libs/questdb-client/package.json b/libs/data/questdb/package.json similarity index 96% rename from libs/questdb-client/package.json rename to libs/data/questdb/package.json index a1ec85b..d173cdd 100644 --- a/libs/questdb-client/package.json +++ b/libs/data/questdb/package.json @@ -1,5 +1,5 @@ { - "name": "@stock-bot/questdb-client", + "name": "@stock-bot/questdb", "version": "1.0.0", "description": "QuestDB client library for Stock Bot platform", "main": "dist/index.js", diff --git a/libs/questdb-client/src/client.ts b/libs/data/questdb/src/client.ts similarity index 100% rename from libs/questdb-client/src/client.ts rename to libs/data/questdb/src/client.ts diff --git a/libs/questdb-client/src/factory.ts b/libs/data/questdb/src/factory.ts similarity index 100% rename from libs/questdb-client/src/factory.ts rename to libs/data/questdb/src/factory.ts diff --git a/libs/questdb-client/src/health.ts b/libs/data/questdb/src/health.ts similarity index 100% rename from libs/questdb-client/src/health.ts rename to libs/data/questdb/src/health.ts diff --git a/libs/questdb-client/src/index.ts b/libs/data/questdb/src/index.ts similarity index 100% rename from libs/questdb-client/src/index.ts rename to libs/data/questdb/src/index.ts diff --git a/libs/questdb-client/src/influx-writer.ts b/libs/data/questdb/src/influx-writer.ts similarity index 100% rename from libs/questdb-client/src/influx-writer.ts rename to libs/data/questdb/src/influx-writer.ts diff --git a/libs/questdb-client/src/query-builder.ts b/libs/data/questdb/src/query-builder.ts similarity index 100% rename from libs/questdb-client/src/query-builder.ts rename to libs/data/questdb/src/query-builder.ts diff --git a/libs/questdb-client/src/schema.ts b/libs/data/questdb/src/schema.ts similarity index 100% rename from libs/questdb-client/src/schema.ts rename to libs/data/questdb/src/schema.ts diff --git a/libs/questdb-client/src/types.ts b/libs/data/questdb/src/types.ts similarity index 100% rename from libs/questdb-client/src/types.ts rename to libs/data/questdb/src/types.ts diff --git a/libs/questdb-client/test/integration.test.ts b/libs/data/questdb/test/integration.test.ts similarity index 100% rename from libs/questdb-client/test/integration.test.ts rename to libs/data/questdb/test/integration.test.ts diff --git a/libs/questdb-client/test/setup.ts b/libs/data/questdb/test/setup.ts similarity index 100% rename from libs/questdb-client/test/setup.ts rename to libs/data/questdb/test/setup.ts diff --git a/libs/http/tsconfig.json b/libs/data/questdb/tsconfig.json similarity index 65% rename from libs/http/tsconfig.json rename to libs/data/questdb/tsconfig.json index bdc180d..4e787c8 100644 --- a/libs/http/tsconfig.json +++ b/libs/data/questdb/tsconfig.json @@ -1,8 +1,9 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ diff --git a/libs/event-bus/tsconfig.json b/libs/event-bus/tsconfig.json deleted file mode 100644 index eae3dc0..0000000 --- a/libs/event-bus/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.lib.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"], - "references": [ - { "path": "../logger" } - ] -} diff --git a/libs/mongodb-client/tsconfig.json b/libs/mongodb-client/tsconfig.json deleted file mode 100644 index bdc180d..0000000 --- a/libs/mongodb-client/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.lib.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"], - "references": [ - { "path": "../logger" }, - { "path": "../types" } - ] -} diff --git a/libs/postgres-client/tsconfig.json b/libs/postgres-client/tsconfig.json deleted file mode 100644 index bdc180d..0000000 --- a/libs/postgres-client/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.lib.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"], - "references": [ - { "path": "../logger" }, - { "path": "../types" } - ] -} diff --git a/libs/questdb-client/tsconfig.json b/libs/questdb-client/tsconfig.json deleted file mode 100644 index bdc180d..0000000 --- a/libs/questdb-client/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.lib.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"], - "references": [ - { "path": "../logger" }, - { "path": "../types" } - ] -} diff --git a/libs/queue/tsconfig.json b/libs/queue/tsconfig.json deleted file mode 100644 index f6dd3d7..0000000 --- a/libs/queue/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.lib.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"], - "references": [ - { "path": "../cache" }, - { "path": "../logger" }, - { "path": "../types" } - ] -} diff --git a/libs/browser/package.json b/libs/services/browser/package.json similarity index 100% rename from libs/browser/package.json rename to libs/services/browser/package.json diff --git a/libs/browser/src/browser-pool.ts b/libs/services/browser/src/browser-pool.ts similarity index 100% rename from libs/browser/src/browser-pool.ts rename to libs/services/browser/src/browser-pool.ts diff --git a/libs/browser/src/browser.ts b/libs/services/browser/src/browser.ts similarity index 100% rename from libs/browser/src/browser.ts rename to libs/services/browser/src/browser.ts diff --git a/libs/browser/src/index.ts b/libs/services/browser/src/index.ts similarity index 100% rename from libs/browser/src/index.ts rename to libs/services/browser/src/index.ts diff --git a/libs/browser/src/tab-manager.ts b/libs/services/browser/src/tab-manager.ts similarity index 100% rename from libs/browser/src/tab-manager.ts rename to libs/services/browser/src/tab-manager.ts diff --git a/libs/browser/src/types.ts b/libs/services/browser/src/types.ts similarity index 100% rename from libs/browser/src/types.ts rename to libs/services/browser/src/types.ts diff --git a/libs/browser/src/utils.ts b/libs/services/browser/src/utils.ts similarity index 100% rename from libs/browser/src/utils.ts rename to libs/services/browser/src/utils.ts diff --git a/libs/browser/tsconfig.json b/libs/services/browser/tsconfig.json similarity index 65% rename from libs/browser/tsconfig.json rename to libs/services/browser/tsconfig.json index 2ecd08d..96fc86d 100644 --- a/libs/browser/tsconfig.json +++ b/libs/services/browser/tsconfig.json @@ -1,8 +1,9 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ diff --git a/libs/browser/turbo.json b/libs/services/browser/turbo.json similarity index 100% rename from libs/browser/turbo.json rename to libs/services/browser/turbo.json diff --git a/libs/event-bus/README.md b/libs/services/event-bus/README.md similarity index 100% rename from libs/event-bus/README.md rename to libs/services/event-bus/README.md diff --git a/libs/event-bus/package.json b/libs/services/event-bus/package.json similarity index 100% rename from libs/event-bus/package.json rename to libs/services/event-bus/package.json diff --git a/libs/event-bus/src/event-bus.ts b/libs/services/event-bus/src/event-bus.ts similarity index 100% rename from libs/event-bus/src/event-bus.ts rename to libs/services/event-bus/src/event-bus.ts diff --git a/libs/event-bus/src/index.ts b/libs/services/event-bus/src/index.ts similarity index 100% rename from libs/event-bus/src/index.ts rename to libs/services/event-bus/src/index.ts diff --git a/libs/event-bus/src/types.ts b/libs/services/event-bus/src/types.ts similarity index 100% rename from libs/event-bus/src/types.ts rename to libs/services/event-bus/src/types.ts diff --git a/libs/cache/tsconfig.json b/libs/services/event-bus/tsconfig.json similarity index 61% rename from libs/cache/tsconfig.json rename to libs/services/event-bus/tsconfig.json index eae3dc0..2ea16be 100644 --- a/libs/cache/tsconfig.json +++ b/libs/services/event-bus/tsconfig.json @@ -1,8 +1,9 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ diff --git a/libs/http/README.md b/libs/services/http/README.md similarity index 100% rename from libs/http/README.md rename to libs/services/http/README.md diff --git a/libs/http/bunfig.toml b/libs/services/http/bunfig.toml similarity index 100% rename from libs/http/bunfig.toml rename to libs/services/http/bunfig.toml diff --git a/libs/http/package.json b/libs/services/http/package.json similarity index 100% rename from libs/http/package.json rename to libs/services/http/package.json diff --git a/libs/http/src/adapters/axios-adapter.ts b/libs/services/http/src/adapters/axios-adapter.ts similarity index 100% rename from libs/http/src/adapters/axios-adapter.ts rename to libs/services/http/src/adapters/axios-adapter.ts diff --git a/libs/http/src/adapters/factory.ts b/libs/services/http/src/adapters/factory.ts similarity index 100% rename from libs/http/src/adapters/factory.ts rename to libs/services/http/src/adapters/factory.ts diff --git a/libs/http/src/adapters/fetch-adapter.ts b/libs/services/http/src/adapters/fetch-adapter.ts similarity index 100% rename from libs/http/src/adapters/fetch-adapter.ts rename to libs/services/http/src/adapters/fetch-adapter.ts diff --git a/libs/http/src/adapters/index.ts b/libs/services/http/src/adapters/index.ts similarity index 100% rename from libs/http/src/adapters/index.ts rename to libs/services/http/src/adapters/index.ts diff --git a/libs/http/src/adapters/types.ts b/libs/services/http/src/adapters/types.ts similarity index 100% rename from libs/http/src/adapters/types.ts rename to libs/services/http/src/adapters/types.ts diff --git a/libs/http/src/client.ts b/libs/services/http/src/client.ts similarity index 100% rename from libs/http/src/client.ts rename to libs/services/http/src/client.ts diff --git a/libs/http/src/index.ts b/libs/services/http/src/index.ts similarity index 100% rename from libs/http/src/index.ts rename to libs/services/http/src/index.ts diff --git a/libs/http/src/proxy-manager.ts b/libs/services/http/src/proxy-manager.ts similarity index 100% rename from libs/http/src/proxy-manager.ts rename to libs/services/http/src/proxy-manager.ts diff --git a/libs/http/src/types.ts b/libs/services/http/src/types.ts similarity index 100% rename from libs/http/src/types.ts rename to libs/services/http/src/types.ts diff --git a/libs/http/src/user-agent.ts b/libs/services/http/src/user-agent.ts similarity index 100% rename from libs/http/src/user-agent.ts rename to libs/services/http/src/user-agent.ts diff --git a/libs/http/test/http-integration.test.ts b/libs/services/http/test/http-integration.test.ts similarity index 100% rename from libs/http/test/http-integration.test.ts rename to libs/services/http/test/http-integration.test.ts diff --git a/libs/http/test/http.test.ts b/libs/services/http/test/http.test.ts similarity index 100% rename from libs/http/test/http.test.ts rename to libs/services/http/test/http.test.ts diff --git a/libs/http/test/mock-server.test.ts b/libs/services/http/test/mock-server.test.ts similarity index 100% rename from libs/http/test/mock-server.test.ts rename to libs/services/http/test/mock-server.test.ts diff --git a/libs/http/test/mock-server.ts b/libs/services/http/test/mock-server.ts similarity index 100% rename from libs/http/test/mock-server.ts rename to libs/services/http/test/mock-server.ts diff --git a/libs/services/http/tsconfig.json b/libs/services/http/tsconfig.json new file mode 100644 index 0000000..79532f7 --- /dev/null +++ b/libs/services/http/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "composite": true + }, + "include": ["src/**/*"], + "references": [ + { "path": "../../core/logger" }, + { "path": "../../core/types" } + ] +} diff --git a/libs/queue/README.md b/libs/services/queue/README.md similarity index 100% rename from libs/queue/README.md rename to libs/services/queue/README.md diff --git a/libs/queue/package.json b/libs/services/queue/package.json similarity index 100% rename from libs/queue/package.json rename to libs/services/queue/package.json diff --git a/libs/queue/src/batch-processor.ts b/libs/services/queue/src/batch-processor.ts similarity index 100% rename from libs/queue/src/batch-processor.ts rename to libs/services/queue/src/batch-processor.ts diff --git a/libs/queue/src/dlq-handler.ts b/libs/services/queue/src/dlq-handler.ts similarity index 100% rename from libs/queue/src/dlq-handler.ts rename to libs/services/queue/src/dlq-handler.ts diff --git a/libs/queue/src/handler-registry.ts b/libs/services/queue/src/handler-registry.ts similarity index 100% rename from libs/queue/src/handler-registry.ts rename to libs/services/queue/src/handler-registry.ts diff --git a/libs/queue/src/index.ts b/libs/services/queue/src/index.ts similarity index 100% rename from libs/queue/src/index.ts rename to libs/services/queue/src/index.ts diff --git a/libs/queue/src/queue-manager.ts b/libs/services/queue/src/queue-manager.ts similarity index 100% rename from libs/queue/src/queue-manager.ts rename to libs/services/queue/src/queue-manager.ts diff --git a/libs/queue/src/queue-metrics.ts b/libs/services/queue/src/queue-metrics.ts similarity index 100% rename from libs/queue/src/queue-metrics.ts rename to libs/services/queue/src/queue-metrics.ts diff --git a/libs/queue/src/queue.ts b/libs/services/queue/src/queue.ts similarity index 100% rename from libs/queue/src/queue.ts rename to libs/services/queue/src/queue.ts diff --git a/libs/queue/src/rate-limiter.ts b/libs/services/queue/src/rate-limiter.ts similarity index 100% rename from libs/queue/src/rate-limiter.ts rename to libs/services/queue/src/rate-limiter.ts diff --git a/libs/queue/src/types.ts b/libs/services/queue/src/types.ts similarity index 100% rename from libs/queue/src/types.ts rename to libs/services/queue/src/types.ts diff --git a/libs/queue/src/utils.ts b/libs/services/queue/src/utils.ts similarity index 100% rename from libs/queue/src/utils.ts rename to libs/services/queue/src/utils.ts diff --git a/libs/queue/test/batch-processor.test.ts b/libs/services/queue/test/batch-processor.test.ts similarity index 100% rename from libs/queue/test/batch-processor.test.ts rename to libs/services/queue/test/batch-processor.test.ts diff --git a/libs/queue/test/dlq-handler.test.ts b/libs/services/queue/test/dlq-handler.test.ts similarity index 100% rename from libs/queue/test/dlq-handler.test.ts rename to libs/services/queue/test/dlq-handler.test.ts diff --git a/libs/queue/test/queue-integration.test.ts b/libs/services/queue/test/queue-integration.test.ts similarity index 100% rename from libs/queue/test/queue-integration.test.ts rename to libs/services/queue/test/queue-integration.test.ts diff --git a/libs/queue/test/queue-manager.test.ts b/libs/services/queue/test/queue-manager.test.ts similarity index 100% rename from libs/queue/test/queue-manager.test.ts rename to libs/services/queue/test/queue-manager.test.ts diff --git a/libs/queue/test/queue-metrics.test.ts b/libs/services/queue/test/queue-metrics.test.ts similarity index 100% rename from libs/queue/test/queue-metrics.test.ts rename to libs/services/queue/test/queue-metrics.test.ts diff --git a/libs/queue/test/queue-simple.test.ts b/libs/services/queue/test/queue-simple.test.ts similarity index 100% rename from libs/queue/test/queue-simple.test.ts rename to libs/services/queue/test/queue-simple.test.ts diff --git a/libs/queue/test/rate-limiter.test.ts b/libs/services/queue/test/rate-limiter.test.ts similarity index 100% rename from libs/queue/test/rate-limiter.test.ts rename to libs/services/queue/test/rate-limiter.test.ts diff --git a/libs/services/queue/tsconfig.json b/libs/services/queue/tsconfig.json new file mode 100644 index 0000000..81eab15 --- /dev/null +++ b/libs/services/queue/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "composite": true + }, + "include": ["src/**/*"], + "references": [ + { "path": "../../data/cache" }, + { "path": "../../core/logger" }, + { "path": "../../core/types" } + ] +} diff --git a/libs/queue/turbo.json b/libs/services/queue/turbo.json similarity index 100% rename from libs/queue/turbo.json rename to libs/services/queue/turbo.json diff --git a/libs/shutdown/README.md b/libs/services/shutdown/README.md similarity index 100% rename from libs/shutdown/README.md rename to libs/services/shutdown/README.md diff --git a/libs/shutdown/package.json b/libs/services/shutdown/package.json similarity index 100% rename from libs/shutdown/package.json rename to libs/services/shutdown/package.json diff --git a/libs/shutdown/src/index.ts b/libs/services/shutdown/src/index.ts similarity index 100% rename from libs/shutdown/src/index.ts rename to libs/services/shutdown/src/index.ts diff --git a/libs/shutdown/src/shutdown.ts b/libs/services/shutdown/src/shutdown.ts similarity index 100% rename from libs/shutdown/src/shutdown.ts rename to libs/services/shutdown/src/shutdown.ts diff --git a/libs/shutdown/src/types.ts b/libs/services/shutdown/src/types.ts similarity index 100% rename from libs/shutdown/src/types.ts rename to libs/services/shutdown/src/types.ts diff --git a/libs/types/tsconfig.json b/libs/services/shutdown/tsconfig.json similarity index 55% rename from libs/types/tsconfig.json rename to libs/services/shutdown/tsconfig.json index 969ce3b..dbc9566 100644 --- a/libs/types/tsconfig.json +++ b/libs/services/shutdown/tsconfig.json @@ -1,8 +1,9 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ diff --git a/libs/utils/package.json b/libs/utils/package.json index 1dcfb97..8539074 100644 --- a/libs/utils/package.json +++ b/libs/utils/package.json @@ -13,9 +13,9 @@ "@stock-bot/config": "workspace:*", "@stock-bot/logger": "workspace:*", "@stock-bot/cache": "workspace:*", - "@stock-bot/postgres-client": "workspace:*", - "@stock-bot/mongodb-client": "workspace:*", - "@stock-bot/connection-factory": "workspace:*", + "@stock-bot/postgres": "workspace:*", + "@stock-bot/mongodb": "workspace:*", + "@stock-bot/di": "workspace:*", "@stock-bot/types": "workspace:*", "@stock-bot/http": "workspace:*", "cheerio": "^1.0.0", diff --git a/libs/utils/src/index.ts b/libs/utils/src/index.ts index a552313..430bafa 100644 --- a/libs/utils/src/index.ts +++ b/libs/utils/src/index.ts @@ -2,5 +2,4 @@ export * from './calculations/index'; export * from './common'; export * from './dateUtils'; export * from './generic-functions'; -export * from './operation-context'; export * from './proxy'; diff --git a/libs/utils/tsconfig.json b/libs/utils/tsconfig.json index 459d69b..8e9609e 100644 --- a/libs/utils/tsconfig.json +++ b/libs/utils/tsconfig.json @@ -1,18 +1,19 @@ { - "extends": "../../tsconfig.lib.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "composite": true }, "include": ["src/**/*"], "references": [ - { "path": "../types" }, - { "path": "../cache" }, - { "path": "../config" }, - { "path": "../logger" }, - { "path": "../http" }, - { "path": "../connection-factory" }, - { "path": "../mongodb-client" }, - { "path": "../postgres-client" } + { "path": "../core/types" }, + { "path": "../data/cache" }, + { "path": "../core/config" }, + { "path": "../core/logger" }, + { "path": "../services/http" }, + { "path": "../core/di" }, + { "path": "../data/mongodb" }, + { "path": "../data/postgres" } ] } diff --git a/package.json b/package.json index b9063a3..c535e5e 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,9 @@ }, "workspaces": [ "libs/*", + "libs/core/*", + "libs/data/*", + "libs/services/*", "apps/*" ], "devDependencies": { diff --git a/scripts/build-libs.sh b/scripts/build-libs.sh index f721587..bdaceb4 100755 --- a/scripts/build-libs.sh +++ b/scripts/build-libs.sh @@ -32,23 +32,26 @@ trap cleanup EXIT # Build order is important due to dependencies libs=( # Core Libraries - "types" # Base types - no dependencies - "config" # Configuration - depends on types - "logger" # Logging utilities - depends on types + "core/types" # Base types - no dependencies + "core/config" # Configuration - depends on types + "core/logger" # Logging utilities - depends on types "utils" # Utilities - depends on types and config - # Database clients - "postgres-client" # PostgreSQL client - depends on types, config, logger - "mongodb-client" # MongoDB client - depends on types, config, logger - "questdb-client" # QuestDB client - depends on types, config, logger + # Data access libraries + "data/postgres" # PostgreSQL client - depends on core libs + "data/mongodb" # MongoDB client - depends on core libs + "data/questdb" # QuestDB client - depends on core libs + "data/cache" # Cache - depends on core libs # Service libraries - "cache" # Cache - depends on types and logger - "http" # HTTP client - depends on types, config, logger - "event-bus" # Event bus - depends on types, logger - "queue" # Queue - depends on types, logger, cache - "shutdown" # Shutdown - depends on types, logger + "services/http" # HTTP client - depends on core libs + "services/event-bus" # Event bus - depends on core libs + "services/queue" # Queue - depends on core libs and cache + "services/shutdown" # Shutdown - depends on core libs + "services/browser" # Browser - depends on core libs + # DI and Connection Factory - depends on everything + "core/di" # Dependency injection - depends on all other libs ) # Build each library in order