/** * Interactive Brokers Provider for new queue system */ import { getLogger } from '@stock-bot/logger'; import type { HandlerConfigWithSchedule } from '@stock-bot/queue'; import { handlerRegistry } from '@stock-bot/queue'; const logger = getLogger('ib-provider'); // Initialize and register the IB provider export function initializeIBProvider() { logger.debug('Registering IB provider with scheduled jobs...'); const ibProviderConfig: HandlerConfigWithSchedule = { name: 'ib', operations: { 'fetch-session': async _payload => { // payload contains session configuration (not used in current implementation) logger.debug('Processing session fetch request'); const { fetchSession } = await import('./ib.tasks'); return fetchSession(); }, 'fetch-exchanges': async _payload => { // payload should contain session headers logger.debug('Processing exchanges fetch request'); const { fetchSession, fetchExchanges } = await import('./ib.tasks'); const sessionHeaders = await fetchSession(); if (sessionHeaders) { return fetchExchanges(sessionHeaders); } throw new Error('Failed to get session headers'); }, 'fetch-symbols': async _payload => { // payload should contain session headers logger.debug('Processing symbols fetch request'); const { fetchSession, fetchSymbols } = await import('./ib.tasks'); const sessionHeaders = await fetchSession(); if (sessionHeaders) { return fetchSymbols(sessionHeaders); } throw new Error('Failed to get session headers'); }, 'ib-exchanges-and-symbols': async _payload => { // Legacy operation for scheduled jobs logger.info('Fetching symbol summary from IB'); const { fetchSession, fetchExchanges, fetchSymbols } = await import('./ib.tasks'); const sessionHeaders = await fetchSession(); logger.info('Fetched symbol summary from IB'); if (sessionHeaders) { logger.debug('Fetching exchanges from IB'); const exchanges = await fetchExchanges(sessionHeaders); logger.info('Fetched exchanges from IB', { count: exchanges?.length }); logger.debug('Fetching symbols from IB'); const symbols = await fetchSymbols(sessionHeaders); logger.info('Fetched symbols from IB', { symbols }); return { exchangesCount: exchanges?.length, symbolsCount: symbols?.length }; } }, }, scheduledJobs: [ { type: 'ib-exchanges-and-symbols', operation: 'ib-exchanges-and-symbols', payload: {}, cronPattern: '0 0 * * 0', // Every Sunday at midnight priority: 5, description: 'Fetch and update IB exchanges and symbols data', // immediately: true, // Don't run immediately during startup to avoid conflicts }, ], }; handlerRegistry.registerWithSchedule(ibProviderConfig); logger.debug('IB provider registered successfully with scheduled jobs'); }