fix(gateway): wire Telegram plugin into gateway plugin host (#99)
Some checks failed
ci/woodpecker/push/ci Pipeline failed

Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
This commit was merged in pull request #99.
This commit is contained in:
2026-03-15 00:05:27 +00:00
committed by jason.woltje
parent b7a39b45d7
commit 1f4d54e474
4 changed files with 42 additions and 4 deletions

View File

@@ -18,3 +18,17 @@ BETTER_AUTH_URL=http://localhost:4000
# Gateway # Gateway
GATEWAY_PORT=4000 GATEWAY_PORT=4000
# Discord Plugin (optional — set DISCORD_BOT_TOKEN to enable)
# DISCORD_BOT_TOKEN=
# DISCORD_GUILD_ID=
# DISCORD_GATEWAY_URL=http://localhost:4000
# Telegram Plugin (optional — set TELEGRAM_BOT_TOKEN to enable)
# TELEGRAM_BOT_TOKEN=
# TELEGRAM_GATEWAY_URL=http://localhost:4000
# Authentik SSO (optional — set AUTHENTIK_CLIENT_ID to enable)
# AUTHENTIK_ISSUER=https://auth.example.com
# AUTHENTIK_CLIENT_ID=
# AUTHENTIK_CLIENT_SECRET=

View File

@@ -20,6 +20,7 @@
"@mosaic/coord": "workspace:^", "@mosaic/coord": "workspace:^",
"@mosaic/db": "workspace:^", "@mosaic/db": "workspace:^",
"@mosaic/discord-plugin": "workspace:^", "@mosaic/discord-plugin": "workspace:^",
"@mosaic/telegram-plugin": "workspace:^",
"@mosaic/log": "workspace:^", "@mosaic/log": "workspace:^",
"@mosaic/memory": "workspace:^", "@mosaic/memory": "workspace:^",
"@mosaic/types": "workspace:^", "@mosaic/types": "workspace:^",

View File

@@ -7,6 +7,7 @@ import {
type OnModuleInit, type OnModuleInit,
} from '@nestjs/common'; } from '@nestjs/common';
import { DiscordPlugin } from '@mosaic/discord-plugin'; import { DiscordPlugin } from '@mosaic/discord-plugin';
import { TelegramPlugin } from '@mosaic/telegram-plugin';
import { PluginService } from './plugin.service.js'; import { PluginService } from './plugin.service.js';
import type { IChannelPlugin } from './plugin.interface.js'; import type { IChannelPlugin } from './plugin.interface.js';
@@ -26,9 +27,23 @@ class DiscordChannelPluginAdapter implements IChannelPlugin {
} }
} }
class TelegramChannelPluginAdapter implements IChannelPlugin {
readonly name = 'telegram';
constructor(private readonly plugin: TelegramPlugin) {}
async start(): Promise<void> {
await this.plugin.start();
}
async stop(): Promise<void> {
await this.plugin.stop();
}
}
const DEFAULT_GATEWAY_URL = 'http://localhost:4000'; const DEFAULT_GATEWAY_URL = 'http://localhost:4000';
function createPluginRegistry(logger: Logger): IChannelPlugin[] { function createPluginRegistry(): IChannelPlugin[] {
const plugins: IChannelPlugin[] = []; const plugins: IChannelPlugin[] = [];
const discordToken = process.env['DISCORD_BOT_TOKEN']; const discordToken = process.env['DISCORD_BOT_TOKEN'];
const discordGuildId = process.env['DISCORD_GUILD_ID']; const discordGuildId = process.env['DISCORD_GUILD_ID'];
@@ -50,8 +65,13 @@ function createPluginRegistry(logger: Logger): IChannelPlugin[] {
const telegramGatewayUrl = process.env['TELEGRAM_GATEWAY_URL'] ?? DEFAULT_GATEWAY_URL; const telegramGatewayUrl = process.env['TELEGRAM_GATEWAY_URL'] ?? DEFAULT_GATEWAY_URL;
if (telegramToken) { if (telegramToken) {
logger.warn( plugins.push(
`Telegram plugin requested for ${telegramGatewayUrl}, but @mosaic/telegram-plugin is not implemented yet.`, new TelegramChannelPluginAdapter(
new TelegramPlugin({
token: telegramToken,
gatewayUrl: telegramGatewayUrl,
}),
),
); );
} }
@@ -63,7 +83,7 @@ function createPluginRegistry(logger: Logger): IChannelPlugin[] {
providers: [ providers: [
{ {
provide: PLUGIN_REGISTRY, provide: PLUGIN_REGISTRY,
useFactory: (): IChannelPlugin[] => createPluginRegistry(new Logger('PluginModule')), useFactory: (): IChannelPlugin[] => createPluginRegistry(),
}, },
PluginService, PluginService,
], ],

3
pnpm-lock.yaml generated
View File

@@ -71,6 +71,9 @@ importers:
'@mosaic/memory': '@mosaic/memory':
specifier: workspace:^ specifier: workspace:^
version: link:../../packages/memory version: link:../../packages/memory
'@mosaic/telegram-plugin':
specifier: workspace:^
version: link:../../plugins/telegram
'@mosaic/types': '@mosaic/types':
specifier: workspace:^ specifier: workspace:^
version: link:../../packages/types version: link:../../packages/types