48 lines
1.3 KiB
TypeScript

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 };