initial setup, its a mess

This commit is contained in:
Bojan Kucera 2025-06-08 14:49:52 -04:00
parent 811fc86c92
commit f9c2860ff4
8 changed files with 723 additions and 622 deletions

View file

@ -0,0 +1,82 @@
import { Logger } from '@stock-bot/logger';
export interface JobHandler {
(payload: any): Promise<any>;
}
export interface ProviderConfig {
name: string;
service: string;
operations: Record<string, JobHandler>;
}
export class ProviderRegistry {
private logger = new Logger('provider-registry');
private providers = new Map<string, ProviderConfig>();
/**
* Register a provider with its operations
*/
registerProvider(config: ProviderConfig): void {
const key = `${config.service}:${config.name}`;
this.providers.set(key, config);
this.logger.info(`Registered provider: ${key}`, {
operations: Object.keys(config.operations)
});
}
/**
* Get a job handler for a specific provider and operation
*/
getHandler(service: string, provider: string, operation: string): JobHandler | null {
const key = `${service}:${provider}`;
const providerConfig = this.providers.get(key);
if (!providerConfig) {
this.logger.warn(`Provider not found: ${key}`);
return null;
}
const handler = providerConfig.operations[operation];
if (!handler) {
this.logger.warn(`Operation not found: ${operation} in provider ${key}`);
return null;
}
return handler;
}
/**
* Get all registered providers
*/
getProviders(): Array<{ key: string; config: ProviderConfig }> {
return Array.from(this.providers.entries()).map(([key, config]) => ({
key,
config
}));
}
/**
* Check if a provider exists
*/
hasProvider(service: string, provider: string): boolean {
return this.providers.has(`${service}:${provider}`);
}
/**
* Get providers by service type
*/
getProvidersByService(service: string): ProviderConfig[] {
return Array.from(this.providers.values()).filter(provider => provider.service === service);
}
/**
* Clear all providers (useful for testing)
*/
clear(): void {
this.providers.clear();
this.logger.info('All providers cleared');
}
}
export const providerRegistry = new ProviderRegistry();