import { ImplementableApi } from './implementableApi'; import { DiscordParser } from './discordParser'; import { LogWriter } from './logWriter'; import { PeerTubeRequester } from './peertubeRequester'; namespace Router { export type Config = { events: { name: string; type: 'emit' | 'received'; }[]; apis: { apiName: string; }[]; }; export type GlobalConfig = { router: Config; discord: DiscordParser.Config; peertubeRequester: PeerTubeRequester.Config; logWriter: LogWriter.Config; }; } class Router { api_array: { [key: string]: ImplementableApi } = {}; readonly routes: Router.Config; constructor(readonly config: Router.GlobalConfig) { this.routes = config.router; this.api_array[config.discord.name] = new DiscordParser(config.discord); this.api_array[config.peertubeRequester.name] = new PeerTubeRequester( config.peertubeRequester ); this.api_array[config.logWriter.name] = new LogWriter(config.logWriter); } public receivedMessage(message: ImplementableApi.Message) { this.routes.apis.forEach((api) => this.api_array[api.apiName].receivedMessage(message) ); } } export { Router };