82 lines
3 KiB
TypeScript
82 lines
3 KiB
TypeScript
/**
|
|
* 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');
|
|
}
|