@ebowwa/channel-telegram 1.13.7 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -17,9 +17,17 @@ import TelegramBot from "node-telegram-bot-api";
17
17
  import { type ChannelId, type ChannelResponse, type ChannelCapabilities, type MessageHandler } from "@ebowwa/channel-types";
18
18
  import { ConversationMemory } from "./conversation-memory.js";
19
19
  import type { Tool } from "./types.js";
20
+ /**
21
+ * Telegram ChannelPlugin implementation.
22
+ *
23
+ * Use this for composable channel integration with the plugin registry.
24
+ */
25
+ export { createTelegramPlugin, telegramPlugin, telegramMeta, telegramConfigAdapter, telegramThreadingAdapter, } from "./plugin.js";
26
+ export type { ResolvedTelegramAccount } from "./plugin.js";
20
27
  export { ConversationMemory } from "./conversation-memory.js";
21
28
  export { registerAllCommands, isQuiet } from "./commands/index.js";
22
29
  export type { Tool } from "./types.js";
30
+ export { normalizeTelegramMessagingTarget, looksLikeTelegramTargetId, extractRawTarget, isUsernameTarget, isNumericIdTarget, } from "./utils/index.js";
23
31
  export interface TelegramConfig {
24
32
  botToken: string;
25
33
  testChatId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAGxB,KAAK,cAAc,EAEpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iEAAiE;IACjE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,2BAA2B,IAAI,cAAc,CAkB5D;AAMD,qBAAa,eAAe;IAC1B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,KAAK,cAAc;IAC5B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAkBxC;IAEF,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,cAAc;IAY5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIxC;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpD,WAAW,IAAI,OAAO;IAQtB;;OAEG;IACH,MAAM,IAAI,WAAW;IAIrB;;OAEG;IACH,SAAS,IAAI,kBAAkB;IAI/B;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxG;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS1C;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQzC;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAoBpD,OAAO,CAAC,oBAAoB;IAyG5B;;OAEG;YACW,gBAAgB;IAiB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuC5B,OAAO,CAAC,aAAa;IAOrB;;OAEG;YACW,eAAe;CAkC9B;AAMD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAE7E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,9 +17,23 @@ import TelegramBot from "node-telegram-bot-api";
17
17
  import { createChannelId, } from "@ebowwa/channel-types";
18
18
  import { ConversationMemory } from "./conversation-memory.js";
19
19
  import { registerAllCommands } from "./commands/index.js";
20
+ // ============================================================
21
+ // PLUGIN EXPORTS (ChannelPlugin Pattern)
22
+ // ============================================================
23
+ /**
24
+ * Telegram ChannelPlugin implementation.
25
+ *
26
+ * Use this for composable channel integration with the plugin registry.
27
+ */
28
+ export { createTelegramPlugin, telegramPlugin, telegramMeta, telegramConfigAdapter, telegramThreadingAdapter, } from "./plugin.js";
29
+ // ============================================================
30
+ // LEGACY EXPORTS (ChannelConnector Pattern)
31
+ // ============================================================
20
32
  // Re-export for external use
21
33
  export { ConversationMemory } from "./conversation-memory.js";
22
34
  export { registerAllCommands, isQuiet } from "./commands/index.js";
35
+ // Normalization utilities
36
+ export { normalizeTelegramMessagingTarget, looksLikeTelegramTargetId, extractRawTarget, isUsernameTarget, isNumericIdTarget, } from "./utils/index.js";
23
37
  export function createTelegramConfigFromEnv() {
24
38
  const allowedUsers = process.env.TELEGRAM_ALLOWED_USERS
25
39
  ?.split(",")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @ebowwa/channel-telegram
3
+ *
4
+ * Telegram ChannelPlugin implementation following OpenClaw adapter pattern.
5
+ *
6
+ * This module provides:
7
+ * - ChannelPlugin implementation for Telegram
8
+ * - Config adapter for account management
9
+ * - Outbound adapter for message delivery
10
+ * - Gateway adapter for bot lifecycle
11
+ * - Threading adapter for reply modes
12
+ * - Auto-registration with pluginRegistry
13
+ */
14
+ import type { ChannelPlugin, ChannelMeta, ChannelConfigAdapter, ChannelThreadingAdapter } from "@ebowwa/channel-types/plugins";
15
+ import type TelegramBot from "node-telegram-bot-api";
16
+ export interface ResolvedTelegramAccount {
17
+ botToken: string;
18
+ bot?: TelegramBot;
19
+ allowedUsers?: number[];
20
+ allowedChats?: number[];
21
+ pollingInterval: number;
22
+ }
23
+ export declare const telegramMeta: ChannelMeta;
24
+ export declare const telegramConfigAdapter: ChannelConfigAdapter<ResolvedTelegramAccount>;
25
+ export declare const telegramThreadingAdapter: ChannelThreadingAdapter;
26
+ export declare function createTelegramPlugin(config?: {
27
+ botToken?: string;
28
+ }, TelegramBotClass?: typeof TelegramBot): ChannelPlugin<ResolvedTelegramAccount>;
29
+ export declare const telegramPlugin: ChannelPlugin<ResolvedTelegramAccount>;
30
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,oBAAoB,EAGpB,uBAAuB,EAExB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAC;AAMrD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAMD,eAAO,MAAM,YAAY,EAAE,WAM1B,CAAC;AAMF,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,uBAAuB,CAqB/E,CAAC;AAgGF,eAAO,MAAM,wBAAwB,EAAE,uBAGtC,CAAC;AAwFF,wBAAgB,oBAAoB,CAClC,MAAM,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,EAClC,gBAAgB,CAAC,EAAE,OAAO,WAAW,GACpC,aAAa,CAAC,uBAAuB,CAAC,CA2CxC;AAMD,eAAO,MAAM,cAAc,wCAAyB,CAAC"}
package/dist/plugin.js ADDED
@@ -0,0 +1,266 @@
1
+ /**
2
+ * @ebowwa/channel-telegram
3
+ *
4
+ * Telegram ChannelPlugin implementation following OpenClaw adapter pattern.
5
+ *
6
+ * This module provides:
7
+ * - ChannelPlugin implementation for Telegram
8
+ * - Config adapter for account management
9
+ * - Outbound adapter for message delivery
10
+ * - Gateway adapter for bot lifecycle
11
+ * - Threading adapter for reply modes
12
+ * - Auto-registration with pluginRegistry
13
+ */
14
+ import { pluginRegistry } from "@ebowwa/channel-types/plugins";
15
+ // ============================================================
16
+ // META
17
+ // ============================================================
18
+ export const telegramMeta = {
19
+ label: "Telegram",
20
+ blurb: "Telegram Bot API for direct and group chats",
21
+ icon: "📱",
22
+ docsPath: "/docs/channels/telegram",
23
+ quickstartAllowFrom: true,
24
+ };
25
+ // ============================================================
26
+ // CONFIG ADAPTER
27
+ // ============================================================
28
+ export const telegramConfigAdapter = {
29
+ listAccountIds: async (config) => {
30
+ const botToken = config.botToken;
31
+ if (!botToken)
32
+ return [];
33
+ return ["default"];
34
+ },
35
+ resolveAccount: async (config, accountId) => {
36
+ return {
37
+ botToken: config.botToken,
38
+ allowedUsers: config.allowedUsers,
39
+ allowedChats: config.allowedChats,
40
+ pollingInterval: config.pollingInterval || 1000,
41
+ };
42
+ },
43
+ validateAccount: async (account) => {
44
+ if (!account.botToken)
45
+ return false;
46
+ // Could validate by calling getMe
47
+ return true;
48
+ },
49
+ };
50
+ // ============================================================
51
+ // OUTBOUND ADAPTER
52
+ // ============================================================
53
+ const createOutboundAdapter = (getBot) => ({
54
+ deliveryMode: "direct",
55
+ textChunkLimit: 4096,
56
+ chunker: (text, limit) => {
57
+ // Simple chunking - could be smarter with markdown
58
+ const chunks = [];
59
+ for (let i = 0; i < text.length; i += limit) {
60
+ chunks.push(text.slice(i, i + limit));
61
+ }
62
+ return { chunks, totalChunks: chunks.length };
63
+ },
64
+ sendText: async ({ to, text, accountId, account, replyToId, threadId }) => {
65
+ const bot = getBot();
66
+ if (!bot) {
67
+ return { success: false, error: "Bot not initialized", timestamp: new Date() };
68
+ }
69
+ try {
70
+ const chatId = parseInt(to, 10);
71
+ const options = {
72
+ parse_mode: "Markdown",
73
+ };
74
+ if (replyToId) {
75
+ options.reply_to_message_id = parseInt(replyToId, 10);
76
+ }
77
+ if (threadId) {
78
+ options.message_thread_id = parseInt(threadId, 10);
79
+ }
80
+ const result = await bot.sendMessage(chatId, text, options);
81
+ return {
82
+ success: true,
83
+ messageId: result.message_id.toString(),
84
+ timestamp: new Date(),
85
+ };
86
+ }
87
+ catch (error) {
88
+ return {
89
+ success: false,
90
+ error: error.message,
91
+ timestamp: new Date(),
92
+ };
93
+ }
94
+ },
95
+ sendMedia: async ({ to, text, mediaUrl, mediaType, accountId, account }) => {
96
+ const bot = getBot();
97
+ if (!bot) {
98
+ return { success: false, error: "Bot not initialized", timestamp: new Date() };
99
+ }
100
+ try {
101
+ const chatId = parseInt(to, 10);
102
+ let result;
103
+ if (mediaType === "image") {
104
+ result = await bot.sendPhoto(chatId, mediaUrl, { caption: text });
105
+ }
106
+ else if (mediaType === "video") {
107
+ result = await bot.sendVideo(chatId, mediaUrl, { caption: text });
108
+ }
109
+ else if (mediaType === "audio") {
110
+ result = await bot.sendAudio(chatId, mediaUrl, { caption: text });
111
+ }
112
+ else {
113
+ result = await bot.sendDocument(chatId, mediaUrl, { caption: text });
114
+ }
115
+ return {
116
+ success: true,
117
+ messageId: result.message_id.toString(),
118
+ timestamp: new Date(),
119
+ };
120
+ }
121
+ catch (error) {
122
+ return {
123
+ success: false,
124
+ error: error.message,
125
+ timestamp: new Date(),
126
+ };
127
+ }
128
+ },
129
+ });
130
+ // ============================================================
131
+ // THREADING ADAPTER
132
+ // ============================================================
133
+ export const telegramThreadingAdapter = {
134
+ replyModes: ["quote", "thread"],
135
+ defaultReplyMode: "quote",
136
+ };
137
+ // ============================================================
138
+ // GATEWAY ADAPTER
139
+ // ============================================================
140
+ const createGatewayAdapter = (createBot) => {
141
+ const activeBots = new Map();
142
+ const messageHandlers = new Map();
143
+ return {
144
+ startAccount: async ({ accountId, account, onMessage }) => {
145
+ const bot = createBot(account.botToken);
146
+ const handler = (msg) => {
147
+ // Check allowed users/chats
148
+ if (account.allowedUsers?.length && !account.allowedUsers.includes(msg.from?.id || 0)) {
149
+ return;
150
+ }
151
+ if (account.allowedChats?.length && !account.allowedChats.includes(msg.chat.id)) {
152
+ return;
153
+ }
154
+ // Create ChannelId for this message
155
+ const channelId = {
156
+ platform: "telegram",
157
+ accountId: msg.chat.id.toString(),
158
+ };
159
+ // Normalize to ChannelMessage format
160
+ const channelMessage = {
161
+ messageId: msg.message_id.toString(),
162
+ channelId,
163
+ timestamp: new Date(msg.date * 1000),
164
+ sender: {
165
+ id: msg.from?.id.toString() || "unknown",
166
+ username: msg.from?.username,
167
+ displayName: msg.from?.first_name,
168
+ isBot: msg.from?.is_bot || false,
169
+ },
170
+ text: msg.text || "",
171
+ context: {
172
+ isDM: msg.chat.type === "private",
173
+ groupName: msg.chat.title,
174
+ threadId: msg.message_thread_id?.toString(),
175
+ },
176
+ replyTo: msg.reply_to_message
177
+ ? {
178
+ messageId: msg.reply_to_message.message_id.toString(),
179
+ channelId,
180
+ }
181
+ : undefined,
182
+ };
183
+ onMessage(channelMessage);
184
+ };
185
+ bot.on("message", handler);
186
+ activeBots.set(accountId, bot);
187
+ messageHandlers.set(accountId, handler);
188
+ },
189
+ stopAccount: async ({ accountId, account }) => {
190
+ const bot = activeBots.get(accountId);
191
+ const handler = messageHandlers.get(accountId);
192
+ if (bot && handler) {
193
+ bot.off("message", handler);
194
+ if (bot.isPolling()) {
195
+ await bot.stopPolling();
196
+ }
197
+ activeBots.delete(accountId);
198
+ messageHandlers.delete(accountId);
199
+ }
200
+ },
201
+ isAccountActive: (accountId) => {
202
+ return activeBots.has(accountId);
203
+ },
204
+ };
205
+ };
206
+ // ============================================================
207
+ // PLUGIN FACTORY
208
+ // ============================================================
209
+ export function createTelegramPlugin(config = {}, TelegramBotClass) {
210
+ let bot = null;
211
+ const createBot = (token) => {
212
+ if (!TelegramBotClass) {
213
+ throw new Error("TelegramBot class not provided");
214
+ }
215
+ return new TelegramBotClass(token, { polling: true });
216
+ };
217
+ return {
218
+ id: "telegram",
219
+ meta: telegramMeta,
220
+ capabilities: {
221
+ chatTypes: ["direct", "group", "channel", "thread"],
222
+ supports: {
223
+ text: true,
224
+ media: true,
225
+ replies: true,
226
+ threads: true,
227
+ reactions: true,
228
+ editing: true,
229
+ streaming: false,
230
+ buttons: true,
231
+ },
232
+ nativeCommands: true,
233
+ rateLimits: {
234
+ messagesPerMinute: 30,
235
+ charactersPerMessage: 4096,
236
+ },
237
+ media: {
238
+ maxFileSize: 50 * 1024 * 1024, // 50MB
239
+ supportedMimeTypes: ["image/*", "video/*", "audio/*", "application/pdf"],
240
+ },
241
+ },
242
+ config: telegramConfigAdapter,
243
+ outbound: createOutboundAdapter(() => bot),
244
+ gateway: createGatewayAdapter((token) => {
245
+ bot = createBot(token);
246
+ return bot;
247
+ }),
248
+ threading: telegramThreadingAdapter,
249
+ };
250
+ }
251
+ // ============================================================
252
+ // DEFAULT PLUGIN INSTANCE
253
+ // ============================================================
254
+ export const telegramPlugin = createTelegramPlugin();
255
+ // ============================================================
256
+ // AUTO-REGISTER
257
+ // ============================================================
258
+ // Note: Only register if botToken is available
259
+ if (process.env.TELEGRAM_BOT_TOKEN) {
260
+ pluginRegistry.registerChannel({
261
+ pluginId: "telegram",
262
+ plugin: telegramPlugin,
263
+ source: "core",
264
+ });
265
+ }
266
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Telegram Channel Utilities
3
+ */
4
+ export { normalizeTelegramMessagingTarget, looksLikeTelegramTargetId, extractRawTarget, isUsernameTarget, isNumericIdTarget, } from "./normalize.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Telegram Channel Utilities
3
+ */
4
+ export { normalizeTelegramMessagingTarget, looksLikeTelegramTargetId, extractRawTarget, isUsernameTarget, isNumericIdTarget, } from "./normalize.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Telegram Target Normalization Utilities
3
+ *
4
+ * Utilities for normalizing various Telegram target formats to a standardized
5
+ * `telegram:@username` or `telegram:123456` format.
6
+ *
7
+ * Supported input formats:
8
+ * - @username
9
+ * - telegram:@username
10
+ * - tg:@username
11
+ * - https://t.me/username
12
+ * - t.me/username
13
+ * - 123456789 (numeric ID)
14
+ */
15
+ /**
16
+ * Normalize a Telegram messaging target to standard format.
17
+ *
18
+ * @param raw - Raw input string (username, URL, numeric ID, etc.)
19
+ * @returns Normalized format like `telegram:@username` or `telegram:123456`, or undefined if invalid
20
+ *
21
+ * @example
22
+ * normalizeTelegramMessagingTarget("@durov") // "telegram:@durov"
23
+ * normalizeTelegramMessagingTarget("t.me/durov") // "telegram:@durov"
24
+ * normalizeTelegramMessagingTarget("telegram:123") // "telegram:123"
25
+ * normalizeTelegramMessagingTarget("") // undefined
26
+ */
27
+ export declare function normalizeTelegramMessagingTarget(raw: string): string | undefined;
28
+ /**
29
+ * Check if a string looks like a Telegram target ID.
30
+ *
31
+ * @param raw - Raw input string
32
+ * @returns true if the string appears to be a Telegram target
33
+ *
34
+ * @example
35
+ * looksLikeTelegramTargetId("@durov") // true
36
+ * looksLikeTelegramTargetId("telegram:123") // true
37
+ * looksLikeTelegramTargetId("tg:@bot") // true
38
+ * looksLikeTelegramTargetId("123456789") // true (numeric ID)
39
+ * looksLikeTelegramTargetId("hello world") // false
40
+ */
41
+ export declare function looksLikeTelegramTargetId(raw: string): boolean;
42
+ /**
43
+ * Extract the raw target from a normalized Telegram target string.
44
+ *
45
+ * @param normalized - Normalized format like `telegram:@username`
46
+ * @returns The raw target (@username or numeric ID) or undefined
47
+ *
48
+ * @example
49
+ * extractRawTarget("telegram:@durov") // "@durov"
50
+ * extractRawTarget("telegram:123456") // "123456"
51
+ * extractRawTarget("invalid") // undefined
52
+ */
53
+ export declare function extractRawTarget(normalized: string): string | undefined;
54
+ /**
55
+ * Check if a normalized target is a username (vs numeric ID).
56
+ *
57
+ * @param normalized - Normalized format like `telegram:@username`
58
+ * @returns true if target is a username
59
+ *
60
+ * @example
61
+ * isUsernameTarget("telegram:@durov") // true
62
+ * isUsernameTarget("telegram:123456") // false
63
+ */
64
+ export declare function isUsernameTarget(normalized: string): boolean;
65
+ /**
66
+ * Check if a normalized target is a numeric ID.
67
+ *
68
+ * @param normalized - Normalized format like `telegram:123456`
69
+ * @returns true if target is a numeric ID
70
+ *
71
+ * @example
72
+ * isNumericIdTarget("telegram:123456") // true
73
+ * isNumericIdTarget("telegram:@durov") // false
74
+ */
75
+ export declare function isNumericIdTarget(normalized: string): boolean;
76
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA2BhF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAY9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAI7D"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Telegram Target Normalization Utilities
3
+ *
4
+ * Utilities for normalizing various Telegram target formats to a standardized
5
+ * `telegram:@username` or `telegram:123456` format.
6
+ *
7
+ * Supported input formats:
8
+ * - @username
9
+ * - telegram:@username
10
+ * - tg:@username
11
+ * - https://t.me/username
12
+ * - t.me/username
13
+ * - 123456789 (numeric ID)
14
+ */
15
+ /**
16
+ * Normalize a Telegram messaging target to standard format.
17
+ *
18
+ * @param raw - Raw input string (username, URL, numeric ID, etc.)
19
+ * @returns Normalized format like `telegram:@username` or `telegram:123456`, or undefined if invalid
20
+ *
21
+ * @example
22
+ * normalizeTelegramMessagingTarget("@durov") // "telegram:@durov"
23
+ * normalizeTelegramMessagingTarget("t.me/durov") // "telegram:@durov"
24
+ * normalizeTelegramMessagingTarget("telegram:123") // "telegram:123"
25
+ * normalizeTelegramMessagingTarget("") // undefined
26
+ */
27
+ export function normalizeTelegramMessagingTarget(raw) {
28
+ const trimmed = raw.trim();
29
+ if (!trimmed)
30
+ return undefined;
31
+ let normalized = trimmed;
32
+ // Strip telegram: or tg: prefix
33
+ if (normalized.startsWith("telegram:")) {
34
+ normalized = normalized.slice("telegram:".length).trim();
35
+ }
36
+ else if (normalized.startsWith("tg:")) {
37
+ normalized = normalized.slice("tg:".length).trim();
38
+ }
39
+ if (!normalized)
40
+ return undefined;
41
+ // Convert t.me URLs to @username format
42
+ const tmeMatch = /^https?:\/\/t\.me\/([A-Za-z0-9_]+)$/i.exec(normalized) ??
43
+ /^t\.me\/([A-Za-z0-9_]+)$/i.exec(normalized);
44
+ if (tmeMatch?.[1]) {
45
+ normalized = `@${tmeMatch[1]}`;
46
+ }
47
+ if (!normalized)
48
+ return undefined;
49
+ return `telegram:${normalized}`.toLowerCase();
50
+ }
51
+ /**
52
+ * Check if a string looks like a Telegram target ID.
53
+ *
54
+ * @param raw - Raw input string
55
+ * @returns true if the string appears to be a Telegram target
56
+ *
57
+ * @example
58
+ * looksLikeTelegramTargetId("@durov") // true
59
+ * looksLikeTelegramTargetId("telegram:123") // true
60
+ * looksLikeTelegramTargetId("tg:@bot") // true
61
+ * looksLikeTelegramTargetId("123456789") // true (numeric ID)
62
+ * looksLikeTelegramTargetId("hello world") // false
63
+ */
64
+ export function looksLikeTelegramTargetId(raw) {
65
+ const trimmed = raw.trim();
66
+ if (!trimmed)
67
+ return false;
68
+ // Has telegram: or tg: prefix
69
+ if (/^(telegram|tg):/i.test(trimmed))
70
+ return true;
71
+ // Starts with @ (username format)
72
+ if (trimmed.startsWith("@"))
73
+ return true;
74
+ // Numeric ID (6+ digits, Telegram user/chat IDs are typically long)
75
+ return /^-?\d{6,}$/.test(trimmed);
76
+ }
77
+ /**
78
+ * Extract the raw target from a normalized Telegram target string.
79
+ *
80
+ * @param normalized - Normalized format like `telegram:@username`
81
+ * @returns The raw target (@username or numeric ID) or undefined
82
+ *
83
+ * @example
84
+ * extractRawTarget("telegram:@durov") // "@durov"
85
+ * extractRawTarget("telegram:123456") // "123456"
86
+ * extractRawTarget("invalid") // undefined
87
+ */
88
+ export function extractRawTarget(normalized) {
89
+ const trimmed = normalized.trim();
90
+ if (!trimmed.startsWith("telegram:"))
91
+ return undefined;
92
+ const raw = trimmed.slice("telegram:".length);
93
+ return raw || undefined;
94
+ }
95
+ /**
96
+ * Check if a normalized target is a username (vs numeric ID).
97
+ *
98
+ * @param normalized - Normalized format like `telegram:@username`
99
+ * @returns true if target is a username
100
+ *
101
+ * @example
102
+ * isUsernameTarget("telegram:@durov") // true
103
+ * isUsernameTarget("telegram:123456") // false
104
+ */
105
+ export function isUsernameTarget(normalized) {
106
+ const raw = extractRawTarget(normalized);
107
+ return raw?.startsWith("@") ?? false;
108
+ }
109
+ /**
110
+ * Check if a normalized target is a numeric ID.
111
+ *
112
+ * @param normalized - Normalized format like `telegram:123456`
113
+ * @returns true if target is a numeric ID
114
+ *
115
+ * @example
116
+ * isNumericIdTarget("telegram:123456") // true
117
+ * isNumericIdTarget("telegram:@durov") // false
118
+ */
119
+ export function isNumericIdTarget(normalized) {
120
+ const raw = extractRawTarget(normalized);
121
+ if (!raw)
122
+ return false;
123
+ return /^-?\d+$/.test(raw);
124
+ }
125
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAW;IAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,IAAI,UAAU,GAAG,OAAO,CAAC;IAEzB,gCAAgC;IAChC,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,CAAC;SAAM,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,wCAAwC;IACxC,MAAM,QAAQ,GACZ,sCAAsC,CAAC,IAAI,CAAC,UAAU,CAAC;QACvD,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,UAAU,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,OAAO,YAAY,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,8BAA8B;IAC9B,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,kCAAkC;IAClC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,oEAAoE;IACpE,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAEvD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,GAAG,IAAI,SAAS,CAAC;AAC1B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ebowwa/channel-telegram",
3
- "version": "1.13.7",
3
+ "version": "1.14.0",
4
4
  "description": "Pure Telegram protocol adapter implementing ChannelConnector",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/index.ts CHANGED
@@ -31,11 +31,42 @@ import { ConversationMemory } from "./conversation-memory.js";
31
31
  import { registerAllCommands, isQuiet } from "./commands/index.js";
32
32
  import type { Tool } from "./types.js";
33
33
 
34
+ // ============================================================
35
+ // PLUGIN EXPORTS (ChannelPlugin Pattern)
36
+ // ============================================================
37
+
38
+ /**
39
+ * Telegram ChannelPlugin implementation.
40
+ *
41
+ * Use this for composable channel integration with the plugin registry.
42
+ */
43
+ export {
44
+ createTelegramPlugin,
45
+ telegramPlugin,
46
+ telegramMeta,
47
+ telegramConfigAdapter,
48
+ telegramThreadingAdapter,
49
+ } from "./plugin.js";
50
+ export type { ResolvedTelegramAccount } from "./plugin.js";
51
+
52
+ // ============================================================
53
+ // LEGACY EXPORTS (ChannelConnector Pattern)
54
+ // ============================================================
55
+
34
56
  // Re-export for external use
35
57
  export { ConversationMemory } from "./conversation-memory.js";
36
58
  export { registerAllCommands, isQuiet } from "./commands/index.js";
37
59
  export type { Tool } from "./types.js";
38
60
 
61
+ // Normalization utilities
62
+ export {
63
+ normalizeTelegramMessagingTarget,
64
+ looksLikeTelegramTargetId,
65
+ extractRawTarget,
66
+ isUsernameTarget,
67
+ isNumericIdTarget,
68
+ } from "./utils/index.js";
69
+
39
70
  // ============================================================
40
71
  // CONFIG
41
72
  // ============================================================
package/src/plugin.ts ADDED
@@ -0,0 +1,332 @@
1
+ /**
2
+ * @ebowwa/channel-telegram
3
+ *
4
+ * Telegram ChannelPlugin implementation following OpenClaw adapter pattern.
5
+ *
6
+ * This module provides:
7
+ * - ChannelPlugin implementation for Telegram
8
+ * - Config adapter for account management
9
+ * - Outbound adapter for message delivery
10
+ * - Gateway adapter for bot lifecycle
11
+ * - Threading adapter for reply modes
12
+ * - Auto-registration with pluginRegistry
13
+ */
14
+
15
+ import type {
16
+ ChannelPlugin,
17
+ ChannelMeta,
18
+ ChannelConfigAdapter,
19
+ ChannelOutboundAdapter,
20
+ ChannelGatewayAdapter,
21
+ ChannelThreadingAdapter,
22
+ OutboundResult,
23
+ } from "@ebowwa/channel-types/plugins";
24
+ import type {
25
+ ChannelId,
26
+ ChannelMessage,
27
+ } from "@ebowwa/channel-types";
28
+ import { pluginRegistry } from "@ebowwa/channel-types/plugins";
29
+ import type TelegramBot from "node-telegram-bot-api";
30
+
31
+ // ============================================================
32
+ // RESOLVED ACCOUNT TYPE
33
+ // ============================================================
34
+
35
+ export interface ResolvedTelegramAccount {
36
+ botToken: string;
37
+ bot?: TelegramBot;
38
+ allowedUsers?: number[];
39
+ allowedChats?: number[];
40
+ pollingInterval: number;
41
+ }
42
+
43
+ // ============================================================
44
+ // META
45
+ // ============================================================
46
+
47
+ export const telegramMeta: ChannelMeta = {
48
+ label: "Telegram",
49
+ blurb: "Telegram Bot API for direct and group chats",
50
+ icon: "📱",
51
+ docsPath: "/docs/channels/telegram",
52
+ quickstartAllowFrom: true,
53
+ };
54
+
55
+ // ============================================================
56
+ // CONFIG ADAPTER
57
+ // ============================================================
58
+
59
+ export const telegramConfigAdapter: ChannelConfigAdapter<ResolvedTelegramAccount> = {
60
+ listAccountIds: async (config) => {
61
+ const botToken = config.botToken as string;
62
+ if (!botToken) return [];
63
+ return ["default"];
64
+ },
65
+
66
+ resolveAccount: async (config, accountId) => {
67
+ return {
68
+ botToken: config.botToken as string,
69
+ allowedUsers: config.allowedUsers as number[] | undefined,
70
+ allowedChats: config.allowedChats as number[] | undefined,
71
+ pollingInterval: (config.pollingInterval as number) || 1000,
72
+ };
73
+ },
74
+
75
+ validateAccount: async (account) => {
76
+ if (!account.botToken) return false;
77
+ // Could validate by calling getMe
78
+ return true;
79
+ },
80
+ };
81
+
82
+ // ============================================================
83
+ // OUTBOUND ADAPTER
84
+ // ============================================================
85
+
86
+ const createOutboundAdapter = (
87
+ getBot: () => TelegramBot | null
88
+ ): ChannelOutboundAdapter<ResolvedTelegramAccount> => ({
89
+ deliveryMode: "direct",
90
+ textChunkLimit: 4096,
91
+
92
+ chunker: (text, limit) => {
93
+ // Simple chunking - could be smarter with markdown
94
+ const chunks: string[] = [];
95
+ for (let i = 0; i < text.length; i += limit) {
96
+ chunks.push(text.slice(i, i + limit));
97
+ }
98
+ return { chunks, totalChunks: chunks.length };
99
+ },
100
+
101
+ sendText: async ({ to, text, accountId, account, replyToId, threadId }) => {
102
+ const bot = getBot();
103
+ if (!bot) {
104
+ return { success: false, error: "Bot not initialized", timestamp: new Date() };
105
+ }
106
+
107
+ try {
108
+ const chatId = parseInt(to, 10);
109
+ const options: TelegramBot.SendMessageOptions = {
110
+ parse_mode: "Markdown",
111
+ };
112
+
113
+ if (replyToId) {
114
+ options.reply_to_message_id = parseInt(replyToId, 10);
115
+ }
116
+
117
+ if (threadId) {
118
+ options.message_thread_id = parseInt(threadId, 10);
119
+ }
120
+
121
+ const result = await bot.sendMessage(chatId, text, options);
122
+
123
+ return {
124
+ success: true,
125
+ messageId: result.message_id.toString(),
126
+ timestamp: new Date(),
127
+ };
128
+ } catch (error) {
129
+ return {
130
+ success: false,
131
+ error: (error as Error).message,
132
+ timestamp: new Date(),
133
+ };
134
+ }
135
+ },
136
+
137
+ sendMedia: async ({ to, text, mediaUrl, mediaType, accountId, account }) => {
138
+ const bot = getBot();
139
+ if (!bot) {
140
+ return { success: false, error: "Bot not initialized", timestamp: new Date() };
141
+ }
142
+
143
+ try {
144
+ const chatId = parseInt(to, 10);
145
+ let result: TelegramBot.Message;
146
+
147
+ if (mediaType === "image") {
148
+ result = await bot.sendPhoto(chatId, mediaUrl, { caption: text });
149
+ } else if (mediaType === "video") {
150
+ result = await bot.sendVideo(chatId, mediaUrl, { caption: text });
151
+ } else if (mediaType === "audio") {
152
+ result = await bot.sendAudio(chatId, mediaUrl, { caption: text });
153
+ } else {
154
+ result = await bot.sendDocument(chatId, mediaUrl, { caption: text });
155
+ }
156
+
157
+ return {
158
+ success: true,
159
+ messageId: result.message_id.toString(),
160
+ timestamp: new Date(),
161
+ };
162
+ } catch (error) {
163
+ return {
164
+ success: false,
165
+ error: (error as Error).message,
166
+ timestamp: new Date(),
167
+ };
168
+ }
169
+ },
170
+ });
171
+
172
+ // ============================================================
173
+ // THREADING ADAPTER
174
+ // ============================================================
175
+
176
+ export const telegramThreadingAdapter: ChannelThreadingAdapter = {
177
+ replyModes: ["quote", "thread"],
178
+ defaultReplyMode: "quote",
179
+ };
180
+
181
+ // ============================================================
182
+ // GATEWAY ADAPTER
183
+ // ============================================================
184
+
185
+ const createGatewayAdapter = (
186
+ createBot: (token: string) => TelegramBot
187
+ ): ChannelGatewayAdapter<ResolvedTelegramAccount> => {
188
+ const activeBots = new Map<string, TelegramBot>();
189
+ const messageHandlers = new Map<string, (msg: any) => void>();
190
+
191
+ return {
192
+ startAccount: async ({ accountId, account, onMessage }) => {
193
+ const bot = createBot(account.botToken);
194
+
195
+ const handler = (msg: TelegramBot.Message) => {
196
+ // Check allowed users/chats
197
+ if (account.allowedUsers?.length && !account.allowedUsers.includes(msg.from?.id || 0)) {
198
+ return;
199
+ }
200
+ if (account.allowedChats?.length && !account.allowedChats.includes(msg.chat.id)) {
201
+ return;
202
+ }
203
+
204
+ // Create ChannelId for this message
205
+ const channelId: ChannelId = {
206
+ platform: "telegram",
207
+ accountId: msg.chat.id.toString(),
208
+ };
209
+
210
+ // Normalize to ChannelMessage format
211
+ const channelMessage: ChannelMessage = {
212
+ messageId: msg.message_id.toString(),
213
+ channelId,
214
+ timestamp: new Date(msg.date * 1000),
215
+ sender: {
216
+ id: msg.from?.id.toString() || "unknown",
217
+ username: msg.from?.username,
218
+ displayName: msg.from?.first_name,
219
+ isBot: msg.from?.is_bot || false,
220
+ },
221
+ text: msg.text || "",
222
+ context: {
223
+ isDM: msg.chat.type === "private",
224
+ groupName: msg.chat.title,
225
+ threadId: msg.message_thread_id?.toString(),
226
+ },
227
+ replyTo: msg.reply_to_message
228
+ ? {
229
+ messageId: msg.reply_to_message.message_id.toString(),
230
+ channelId,
231
+ }
232
+ : undefined,
233
+ };
234
+
235
+ onMessage(channelMessage);
236
+ };
237
+
238
+ bot.on("message", handler);
239
+ activeBots.set(accountId, bot);
240
+ messageHandlers.set(accountId, handler);
241
+ },
242
+
243
+ stopAccount: async ({ accountId, account }) => {
244
+ const bot = activeBots.get(accountId);
245
+ const handler = messageHandlers.get(accountId);
246
+
247
+ if (bot && handler) {
248
+ bot.off("message", handler);
249
+ if (bot.isPolling()) {
250
+ await bot.stopPolling();
251
+ }
252
+ activeBots.delete(accountId);
253
+ messageHandlers.delete(accountId);
254
+ }
255
+ },
256
+
257
+ isAccountActive: (accountId) => {
258
+ return activeBots.has(accountId);
259
+ },
260
+ };
261
+ };
262
+
263
+ // ============================================================
264
+ // PLUGIN FACTORY
265
+ // ============================================================
266
+
267
+ export function createTelegramPlugin(
268
+ config: { botToken?: string } = {},
269
+ TelegramBotClass?: typeof TelegramBot
270
+ ): ChannelPlugin<ResolvedTelegramAccount> {
271
+ let bot: TelegramBot | null = null;
272
+
273
+ const createBot = (token: string): TelegramBot => {
274
+ if (!TelegramBotClass) {
275
+ throw new Error("TelegramBot class not provided");
276
+ }
277
+ return new TelegramBotClass(token, { polling: true });
278
+ };
279
+
280
+ return {
281
+ id: "telegram",
282
+ meta: telegramMeta,
283
+ capabilities: {
284
+ chatTypes: ["direct", "group", "channel", "thread"],
285
+ supports: {
286
+ text: true,
287
+ media: true,
288
+ replies: true,
289
+ threads: true,
290
+ reactions: true,
291
+ editing: true,
292
+ streaming: false,
293
+ buttons: true,
294
+ },
295
+ nativeCommands: true,
296
+ rateLimits: {
297
+ messagesPerMinute: 30,
298
+ charactersPerMessage: 4096,
299
+ },
300
+ media: {
301
+ maxFileSize: 50 * 1024 * 1024, // 50MB
302
+ supportedMimeTypes: ["image/*", "video/*", "audio/*", "application/pdf"],
303
+ },
304
+ },
305
+ config: telegramConfigAdapter,
306
+ outbound: createOutboundAdapter(() => bot),
307
+ gateway: createGatewayAdapter((token) => {
308
+ bot = createBot(token);
309
+ return bot;
310
+ }),
311
+ threading: telegramThreadingAdapter,
312
+ };
313
+ }
314
+
315
+ // ============================================================
316
+ // DEFAULT PLUGIN INSTANCE
317
+ // ============================================================
318
+
319
+ export const telegramPlugin = createTelegramPlugin();
320
+
321
+ // ============================================================
322
+ // AUTO-REGISTER
323
+ // ============================================================
324
+
325
+ // Note: Only register if botToken is available
326
+ if (process.env.TELEGRAM_BOT_TOKEN) {
327
+ pluginRegistry.registerChannel({
328
+ pluginId: "telegram",
329
+ plugin: telegramPlugin,
330
+ source: "core",
331
+ });
332
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Telegram Channel Utilities
3
+ */
4
+
5
+ export {
6
+ normalizeTelegramMessagingTarget,
7
+ looksLikeTelegramTargetId,
8
+ extractRawTarget,
9
+ isUsernameTarget,
10
+ isNumericIdTarget,
11
+ } from "./normalize.js";
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Telegram Target Normalization Utilities
3
+ *
4
+ * Utilities for normalizing various Telegram target formats to a standardized
5
+ * `telegram:@username` or `telegram:123456` format.
6
+ *
7
+ * Supported input formats:
8
+ * - @username
9
+ * - telegram:@username
10
+ * - tg:@username
11
+ * - https://t.me/username
12
+ * - t.me/username
13
+ * - 123456789 (numeric ID)
14
+ */
15
+
16
+ /**
17
+ * Normalize a Telegram messaging target to standard format.
18
+ *
19
+ * @param raw - Raw input string (username, URL, numeric ID, etc.)
20
+ * @returns Normalized format like `telegram:@username` or `telegram:123456`, or undefined if invalid
21
+ *
22
+ * @example
23
+ * normalizeTelegramMessagingTarget("@durov") // "telegram:@durov"
24
+ * normalizeTelegramMessagingTarget("t.me/durov") // "telegram:@durov"
25
+ * normalizeTelegramMessagingTarget("telegram:123") // "telegram:123"
26
+ * normalizeTelegramMessagingTarget("") // undefined
27
+ */
28
+ export function normalizeTelegramMessagingTarget(raw: string): string | undefined {
29
+ const trimmed = raw.trim();
30
+ if (!trimmed) return undefined;
31
+
32
+ let normalized = trimmed;
33
+
34
+ // Strip telegram: or tg: prefix
35
+ if (normalized.startsWith("telegram:")) {
36
+ normalized = normalized.slice("telegram:".length).trim();
37
+ } else if (normalized.startsWith("tg:")) {
38
+ normalized = normalized.slice("tg:".length).trim();
39
+ }
40
+
41
+ if (!normalized) return undefined;
42
+
43
+ // Convert t.me URLs to @username format
44
+ const tmeMatch =
45
+ /^https?:\/\/t\.me\/([A-Za-z0-9_]+)$/i.exec(normalized) ??
46
+ /^t\.me\/([A-Za-z0-9_]+)$/i.exec(normalized);
47
+
48
+ if (tmeMatch?.[1]) {
49
+ normalized = `@${tmeMatch[1]}`;
50
+ }
51
+
52
+ if (!normalized) return undefined;
53
+
54
+ return `telegram:${normalized}`.toLowerCase();
55
+ }
56
+
57
+ /**
58
+ * Check if a string looks like a Telegram target ID.
59
+ *
60
+ * @param raw - Raw input string
61
+ * @returns true if the string appears to be a Telegram target
62
+ *
63
+ * @example
64
+ * looksLikeTelegramTargetId("@durov") // true
65
+ * looksLikeTelegramTargetId("telegram:123") // true
66
+ * looksLikeTelegramTargetId("tg:@bot") // true
67
+ * looksLikeTelegramTargetId("123456789") // true (numeric ID)
68
+ * looksLikeTelegramTargetId("hello world") // false
69
+ */
70
+ export function looksLikeTelegramTargetId(raw: string): boolean {
71
+ const trimmed = raw.trim();
72
+ if (!trimmed) return false;
73
+
74
+ // Has telegram: or tg: prefix
75
+ if (/^(telegram|tg):/i.test(trimmed)) return true;
76
+
77
+ // Starts with @ (username format)
78
+ if (trimmed.startsWith("@")) return true;
79
+
80
+ // Numeric ID (6+ digits, Telegram user/chat IDs are typically long)
81
+ return /^-?\d{6,}$/.test(trimmed);
82
+ }
83
+
84
+ /**
85
+ * Extract the raw target from a normalized Telegram target string.
86
+ *
87
+ * @param normalized - Normalized format like `telegram:@username`
88
+ * @returns The raw target (@username or numeric ID) or undefined
89
+ *
90
+ * @example
91
+ * extractRawTarget("telegram:@durov") // "@durov"
92
+ * extractRawTarget("telegram:123456") // "123456"
93
+ * extractRawTarget("invalid") // undefined
94
+ */
95
+ export function extractRawTarget(normalized: string): string | undefined {
96
+ const trimmed = normalized.trim();
97
+ if (!trimmed.startsWith("telegram:")) return undefined;
98
+
99
+ const raw = trimmed.slice("telegram:".length);
100
+ return raw || undefined;
101
+ }
102
+
103
+ /**
104
+ * Check if a normalized target is a username (vs numeric ID).
105
+ *
106
+ * @param normalized - Normalized format like `telegram:@username`
107
+ * @returns true if target is a username
108
+ *
109
+ * @example
110
+ * isUsernameTarget("telegram:@durov") // true
111
+ * isUsernameTarget("telegram:123456") // false
112
+ */
113
+ export function isUsernameTarget(normalized: string): boolean {
114
+ const raw = extractRawTarget(normalized);
115
+ return raw?.startsWith("@") ?? false;
116
+ }
117
+
118
+ /**
119
+ * Check if a normalized target is a numeric ID.
120
+ *
121
+ * @param normalized - Normalized format like `telegram:123456`
122
+ * @returns true if target is a numeric ID
123
+ *
124
+ * @example
125
+ * isNumericIdTarget("telegram:123456") // true
126
+ * isNumericIdTarget("telegram:@durov") // false
127
+ */
128
+ export function isNumericIdTarget(normalized: string): boolean {
129
+ const raw = extractRawTarget(normalized);
130
+ if (!raw) return false;
131
+ return /^-?\d+$/.test(raw);
132
+ }