213dba855a
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
105 lines
4.1 KiB
TypeScript
105 lines
4.1 KiB
TypeScript
import type { Config } from '../config/index.js';
|
|
import type { HookEngine } from '../hooks/index.js';
|
|
import { ChannelRegistry, TelegramAdapter, WebChatAdapter, DiscordAdapter, SlackAdapter, WhatsAppAdapter, PairingManager } from '../channels/index.js';
|
|
import { CronScheduler, WebhookHandler, GmailWatcher } from '../automation/index.js';
|
|
import type { GatewayServer } from '../gateway/index.js';
|
|
|
|
export interface ChannelsDeps {
|
|
config: Config;
|
|
channelRegistry: ChannelRegistry;
|
|
hookEngine: HookEngine;
|
|
pairingManager?: PairingManager;
|
|
gateway: GatewayServer;
|
|
}
|
|
|
|
export interface ChannelsResult {
|
|
cronScheduler?: CronScheduler;
|
|
webhookHandler?: WebhookHandler;
|
|
gmailWatcher?: GmailWatcher;
|
|
}
|
|
|
|
export function registerChannels(deps: ChannelsDeps): ChannelsResult {
|
|
const { config, channelRegistry, hookEngine, pairingManager, gateway } = deps;
|
|
|
|
// Register Telegram adapter (if configured)
|
|
if (config.telegram) {
|
|
const telegramAdapter = new TelegramAdapter({
|
|
botToken: config.telegram.bot_token,
|
|
allowedChatIds: config.telegram.allowed_chat_ids,
|
|
requireMention: config.telegram.require_mention,
|
|
hookEngine,
|
|
pairingManager,
|
|
});
|
|
channelRegistry.register(telegramAdapter);
|
|
}
|
|
|
|
// Register Discord adapter (if configured)
|
|
if (config.discord) {
|
|
const discordAdapter = new DiscordAdapter({
|
|
botToken: config.discord.bot_token,
|
|
allowedGuildIds: config.discord.allowed_guild_ids.length > 0 ? config.discord.allowed_guild_ids : undefined,
|
|
allowedChannelIds: config.discord.allowed_channel_ids.length > 0 ? config.discord.allowed_channel_ids : undefined,
|
|
requireMention: config.discord.require_mention,
|
|
pairingManager,
|
|
});
|
|
channelRegistry.register(discordAdapter);
|
|
}
|
|
|
|
// Register Slack adapter (if configured)
|
|
if (config.slack) {
|
|
const slackAdapter = new SlackAdapter({
|
|
botToken: config.slack.bot_token,
|
|
appToken: config.slack.app_token,
|
|
signingSecret: config.slack.signing_secret,
|
|
allowedChannelIds: config.slack.allowed_channel_ids.length > 0 ? config.slack.allowed_channel_ids : undefined,
|
|
requireMention: config.slack.require_mention,
|
|
pairingManager,
|
|
});
|
|
channelRegistry.register(slackAdapter);
|
|
}
|
|
|
|
// Register WhatsApp adapter (if configured)
|
|
if (config.whatsapp) {
|
|
const whatsappAdapter = new WhatsAppAdapter({
|
|
allowedNumbers: config.whatsapp.allowed_numbers.length > 0 ? config.whatsapp.allowed_numbers : undefined,
|
|
allowedGroupIds: config.whatsapp.allowed_group_ids.length > 0 ? config.whatsapp.allowed_group_ids : undefined,
|
|
requireMention: config.whatsapp.require_mention,
|
|
dataDir: config.whatsapp.data_dir,
|
|
pairingManager,
|
|
});
|
|
channelRegistry.register(whatsappAdapter);
|
|
}
|
|
|
|
// Register WebChat adapter (wraps the gateway)
|
|
const webChatAdapter = new WebChatAdapter({ gateway });
|
|
channelRegistry.register(webChatAdapter);
|
|
|
|
// Register cron scheduler adapter (if any cron jobs configured)
|
|
let cronScheduler: CronScheduler | undefined;
|
|
if (config.automation.cron.length > 0) {
|
|
cronScheduler = new CronScheduler(config.automation.cron, channelRegistry);
|
|
channelRegistry.register(cronScheduler);
|
|
console.log(`Registered ${config.automation.cron.length} cron job(s)`);
|
|
}
|
|
|
|
// Register webhook handler adapter (if any webhooks configured)
|
|
let webhookHandler: WebhookHandler | undefined;
|
|
if (config.automation.webhooks.length > 0) {
|
|
webhookHandler = new WebhookHandler(config.automation.webhooks, channelRegistry);
|
|
channelRegistry.register(webhookHandler);
|
|
gateway.setWebhookHandler(webhookHandler);
|
|
console.log(`Registered ${config.automation.webhooks.length} webhook(s)`);
|
|
}
|
|
|
|
// Register Gmail watcher adapter (if configured and enabled)
|
|
let gmailWatcher: GmailWatcher | undefined;
|
|
if (config.automation.gmail?.enabled) {
|
|
gmailWatcher = new GmailWatcher(config.automation.gmail, channelRegistry);
|
|
channelRegistry.register(gmailWatcher);
|
|
gateway.setGmailHandler(gmailWatcher);
|
|
console.log('Registered Gmail watcher');
|
|
}
|
|
|
|
return { cronScheduler, webhookHandler, gmailWatcher };
|
|
}
|