48 lines
1.3 KiB
TypeScript
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 };
|