@ebowwa/channel-telegram 1.14.8 → 1.14.9

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
@@ -30,12 +30,21 @@ export interface TelegramConfig {
30
30
  tools?: Tool[];
31
31
  /** Optional conversations file path */
32
32
  conversationsFile?: string;
33
+ /** Enable native streaming using sendMessageDraft API (Bot API 9.5+) */
34
+ nativeStreaming?: boolean;
35
+ /** Streaming mode: 'partial' (default), 'block', or 'progress' */
36
+ streamingMode?: "partial" | "block" | "progress";
37
+ /** Debounce interval for streaming updates (ms), default: 100 */
38
+ streamingDebounceMs?: number;
33
39
  }
34
40
  export declare function createTelegramConfigFromEnv(): TelegramConfig;
35
41
  export declare class TelegramChannel {
36
42
  readonly id: ChannelId;
37
43
  readonly label = "Telegram";
38
44
  readonly capabilities: ChannelCapabilities;
45
+ readonly nativeStreaming: boolean;
46
+ readonly streamingMode: "partial" | "block" | "progress";
47
+ readonly streamingDebounceMs: number;
39
48
  private bot;
40
49
  private config;
41
50
  private memory;
@@ -43,6 +52,7 @@ export declare class TelegramChannel {
43
52
  private messageHandler?;
44
53
  private typingIntervals;
45
54
  private connected;
55
+ private activeStreams;
46
56
  constructor(config: TelegramConfig);
47
57
  start(): Promise<void>;
48
58
  stop(): Promise<void>;
@@ -79,6 +89,31 @@ export declare class TelegramChannel {
79
89
  * Stop typing indicator.
80
90
  */
81
91
  stopTypingIndicator(chatId: number): void;
92
+ /**
93
+ * Start a streaming message session.
94
+ * Returns a streamId for subsequent updates.
95
+ */
96
+ startStream(chatId: number): string;
97
+ /**
98
+ * Update streaming message content.
99
+ * Uses sendMessageDraft for native streaming (Bot API 9.5+) or
100
+ * falls back to sendMessage + editMessageText for older APIs.
101
+ */
102
+ updateStream(streamId: string, text: string, options?: TelegramBot.SendMessageOptions): Promise<void>;
103
+ /**
104
+ * Finalize streaming message.
105
+ * Commits the final text and cleans up stream state.
106
+ */
107
+ finalizeStream(streamId: string, finalText: string, options?: TelegramBot.SendMessageOptions): Promise<number | undefined>;
108
+ /**
109
+ * Cancel an active stream.
110
+ */
111
+ cancelStream(streamId: string): void;
112
+ /**
113
+ * Native sendMessageDraft implementation (Bot API 9.5+).
114
+ * Falls back to editMessageText if API not available.
115
+ */
116
+ private sendMessageDraftNative;
82
117
  /**
83
118
  * Check if user/chat is allowed.
84
119
  */
@@ -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;AAqBvC,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;AAGvC,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAM1B,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;IA2BtB,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;IAkB9B;;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
@@ -60,25 +60,10 @@ export function createTelegramConfigFromEnv() {
60
60
  export class TelegramChannel {
61
61
  id;
62
62
  label = "Telegram";
63
- capabilities = {
64
- supports: {
65
- text: true,
66
- media: true,
67
- replies: true,
68
- threads: false,
69
- reactions: true,
70
- editing: true,
71
- streaming: false,
72
- },
73
- media: {
74
- maxFileSize: 50 * 1024 * 1024, // 50MB
75
- supportedMimeTypes: ["image/*", "video/*", "audio/*", "application/pdf"],
76
- },
77
- rateLimits: {
78
- messagesPerMinute: 30,
79
- charactersPerMessage: 4096,
80
- },
81
- };
63
+ capabilities;
64
+ nativeStreaming;
65
+ streamingMode;
66
+ streamingDebounceMs;
82
67
  bot;
83
68
  config;
84
69
  memory;
@@ -86,12 +71,38 @@ export class TelegramChannel {
86
71
  messageHandler;
87
72
  typingIntervals = new Map();
88
73
  connected = false;
74
+ // Streaming state
75
+ activeStreams = new Map();
89
76
  constructor(config) {
90
77
  this.config = config;
91
78
  this.id = createChannelId("telegram", "default");
92
79
  this.bot = new TelegramBot(config.botToken, { polling: false });
93
80
  this.memory = new ConversationMemory(config.conversationsFile);
94
81
  this.tools = config.tools || [];
82
+ // Native streaming configuration
83
+ this.nativeStreaming = config.nativeStreaming ?? false;
84
+ this.streamingMode = config.streamingMode ?? "partial";
85
+ this.streamingDebounceMs = config.streamingDebounceMs ?? 100;
86
+ // Capabilities depend on nativeStreaming config
87
+ this.capabilities = {
88
+ supports: {
89
+ text: true,
90
+ media: true,
91
+ replies: true,
92
+ threads: false,
93
+ reactions: true,
94
+ editing: true,
95
+ streaming: this.nativeStreaming,
96
+ },
97
+ media: {
98
+ maxFileSize: 50 * 1024 * 1024, // 50MB
99
+ supportedMimeTypes: ["image/*", "video/*", "audio/*", "application/pdf"],
100
+ },
101
+ rateLimits: {
102
+ messagesPerMinute: 30,
103
+ charactersPerMessage: 4096,
104
+ },
105
+ };
95
106
  }
96
107
  // ============================================================
97
108
  // ChannelConnector Implementation
@@ -197,6 +208,135 @@ export class TelegramChannel {
197
208
  this.typingIntervals.delete(chatId);
198
209
  }
199
210
  }
211
+ // ============================================================
212
+ // Native Streaming (Bot API 9.5+)
213
+ // ============================================================
214
+ /**
215
+ * Start a streaming message session.
216
+ * Returns a streamId for subsequent updates.
217
+ */
218
+ startStream(chatId) {
219
+ const streamId = `${chatId}:${Date.now()}`;
220
+ this.activeStreams.set(streamId, { lastText: "", lastUpdate: 0 });
221
+ return streamId;
222
+ }
223
+ /**
224
+ * Update streaming message content.
225
+ * Uses sendMessageDraft for native streaming (Bot API 9.5+) or
226
+ * falls back to sendMessage + editMessageText for older APIs.
227
+ */
228
+ async updateStream(streamId, text, options) {
229
+ const stream = this.activeStreams.get(streamId);
230
+ if (!stream) {
231
+ console.error(`[TelegramChannel] No active stream: ${streamId}`);
232
+ return;
233
+ }
234
+ const chatId = parseInt(streamId.split(":")[0], 10);
235
+ const now = Date.now();
236
+ // Debounce updates
237
+ if (now - stream.lastUpdate < this.streamingDebounceMs && text === stream.lastText) {
238
+ return;
239
+ }
240
+ stream.lastText = text;
241
+ stream.lastUpdate = now;
242
+ try {
243
+ if (this.nativeStreaming) {
244
+ // Use sendMessageDraft for native streaming (Bot API 9.5+)
245
+ await this.sendMessageDraftNative(chatId, text, options);
246
+ }
247
+ else {
248
+ // Fallback: sendMessage + editMessageText
249
+ if (!stream.messageId) {
250
+ // First message: send new
251
+ const result = await this.bot.sendMessage(chatId, text, options);
252
+ stream.messageId = result.message_id;
253
+ }
254
+ else {
255
+ // Subsequent updates: edit
256
+ await this.bot.editMessageText(text, {
257
+ chat_id: chatId,
258
+ message_id: stream.messageId,
259
+ parse_mode: options?.parse_mode,
260
+ });
261
+ }
262
+ }
263
+ }
264
+ catch (error) {
265
+ console.error(`[TelegramChannel] Stream update error: ${error.message}`);
266
+ }
267
+ }
268
+ /**
269
+ * Finalize streaming message.
270
+ * Commits the final text and cleans up stream state.
271
+ */
272
+ async finalizeStream(streamId, finalText, options) {
273
+ const stream = this.activeStreams.get(streamId);
274
+ if (!stream) {
275
+ console.error(`[TelegramChannel] No active stream: ${streamId}`);
276
+ return undefined;
277
+ }
278
+ const chatId = parseInt(streamId.split(":")[0], 10);
279
+ try {
280
+ if (this.nativeStreaming) {
281
+ // Final commit with sendMessageDraft
282
+ await this.sendMessageDraftNative(chatId, finalText, options, true);
283
+ }
284
+ else if (stream.messageId) {
285
+ // Final edit for fallback mode
286
+ await this.bot.editMessageText(finalText, {
287
+ chat_id: chatId,
288
+ message_id: stream.messageId,
289
+ parse_mode: options?.parse_mode,
290
+ });
291
+ return stream.messageId;
292
+ }
293
+ }
294
+ catch (error) {
295
+ console.error(`[TelegramChannel] Stream finalize error: ${error.message}`);
296
+ }
297
+ finally {
298
+ this.activeStreams.delete(streamId);
299
+ }
300
+ return stream.messageId;
301
+ }
302
+ /**
303
+ * Cancel an active stream.
304
+ */
305
+ cancelStream(streamId) {
306
+ const stream = this.activeStreams.get(streamId);
307
+ if (stream?.messageId) {
308
+ const chatId = parseInt(streamId.split(":")[0], 10);
309
+ this.bot.deleteMessage(chatId, stream.messageId).catch(() => { });
310
+ }
311
+ this.activeStreams.delete(streamId);
312
+ }
313
+ /**
314
+ * Native sendMessageDraft implementation (Bot API 9.5+).
315
+ * Falls back to editMessageText if API not available.
316
+ */
317
+ async sendMessageDraftNative(chatId, text, options, finalize = false) {
318
+ try {
319
+ // Try native sendMessageDraft API (Bot API 9.5+)
320
+ // Note: node-telegram-bot-api may not have this method yet,
321
+ // so we use the raw API call
322
+ await this.bot.sendMessage(chatId, text, {
323
+ ...options,
324
+ // @ts-expect-error - sendMessageDraft is new in Bot API 9.5
325
+ draft: !finalize,
326
+ });
327
+ }
328
+ catch (error) {
329
+ // If draft mode not supported, fall back silently
330
+ const errMsg = error.message;
331
+ if (errMsg.includes("draft") || errMsg.includes("Bad Request")) {
332
+ // API doesn't support draft mode, use regular send
333
+ await this.bot.sendMessage(chatId, text, options);
334
+ }
335
+ else {
336
+ throw error;
337
+ }
338
+ }
339
+ }
200
340
  /**
201
341
  * Check if user/chat is allowed.
202
342
  */
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ebowwa/channel-telegram",
3
- "version": "1.14.8",
3
+ "version": "1.14.9",
4
4
  "description": "Pure Telegram protocol adapter implementing ChannelConnector",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@ebowwa/channel-core": "^1.4.3",
44
- "@ebowwa/channel-types": "^0.2.1",
44
+ "@ebowwa/channel-types": "^0.2.3",
45
45
  "node-telegram-bot-api": "^0.66.0"
46
46
  },
47
47
  "devDependencies": {
package/src/index.ts CHANGED
@@ -76,6 +76,12 @@ export interface TelegramConfig {
76
76
  tools?: Tool[];
77
77
  /** Optional conversations file path */
78
78
  conversationsFile?: string;
79
+ /** Enable native streaming using sendMessageDraft API (Bot API 9.5+) */
80
+ nativeStreaming?: boolean;
81
+ /** Streaming mode: 'partial' (default), 'block', or 'progress' */
82
+ streamingMode?: "partial" | "block" | "progress";
83
+ /** Debounce interval for streaming updates (ms), default: 100 */
84
+ streamingDebounceMs?: number;
79
85
  }
80
86
 
81
87
  export function createTelegramConfigFromEnv(): TelegramConfig {
@@ -105,25 +111,10 @@ export function createTelegramConfigFromEnv(): TelegramConfig {
105
111
  export class TelegramChannel {
106
112
  readonly id: ChannelId;
107
113
  readonly label = "Telegram";
108
- readonly capabilities: ChannelCapabilities = {
109
- supports: {
110
- text: true,
111
- media: true,
112
- replies: true,
113
- threads: false,
114
- reactions: true,
115
- editing: true,
116
- streaming: false,
117
- },
118
- media: {
119
- maxFileSize: 50 * 1024 * 1024, // 50MB
120
- supportedMimeTypes: ["image/*", "video/*", "audio/*", "application/pdf"],
121
- },
122
- rateLimits: {
123
- messagesPerMinute: 30,
124
- charactersPerMessage: 4096,
125
- },
126
- };
114
+ readonly capabilities: ChannelCapabilities;
115
+ readonly nativeStreaming: boolean;
116
+ readonly streamingMode: "partial" | "block" | "progress";
117
+ readonly streamingDebounceMs: number;
127
118
 
128
119
  private bot: TelegramBot;
129
120
  private config: TelegramConfig;
@@ -132,6 +123,8 @@ export class TelegramChannel {
132
123
  private messageHandler?: MessageHandler;
133
124
  private typingIntervals: Map<number, NodeJS.Timeout> = new Map();
134
125
  private connected = false;
126
+ // Streaming state
127
+ private activeStreams: Map<string, { messageId?: number; lastText: string; lastUpdate: number }> = new Map();
135
128
 
136
129
  constructor(config: TelegramConfig) {
137
130
  this.config = config;
@@ -139,6 +132,32 @@ export class TelegramChannel {
139
132
  this.bot = new TelegramBot(config.botToken, { polling: false });
140
133
  this.memory = new ConversationMemory(config.conversationsFile);
141
134
  this.tools = config.tools || [];
135
+
136
+ // Native streaming configuration
137
+ this.nativeStreaming = config.nativeStreaming ?? false;
138
+ this.streamingMode = config.streamingMode ?? "partial";
139
+ this.streamingDebounceMs = config.streamingDebounceMs ?? 100;
140
+
141
+ // Capabilities depend on nativeStreaming config
142
+ this.capabilities = {
143
+ supports: {
144
+ text: true,
145
+ media: true,
146
+ replies: true,
147
+ threads: false,
148
+ reactions: true,
149
+ editing: true,
150
+ streaming: this.nativeStreaming,
151
+ },
152
+ media: {
153
+ maxFileSize: 50 * 1024 * 1024, // 50MB
154
+ supportedMimeTypes: ["image/*", "video/*", "audio/*", "application/pdf"],
155
+ },
156
+ rateLimits: {
157
+ messagesPerMinute: 30,
158
+ charactersPerMessage: 4096,
159
+ },
160
+ };
142
161
  }
143
162
 
144
163
  // ============================================================
@@ -265,6 +284,153 @@ export class TelegramChannel {
265
284
  }
266
285
  }
267
286
 
287
+ // ============================================================
288
+ // Native Streaming (Bot API 9.5+)
289
+ // ============================================================
290
+
291
+ /**
292
+ * Start a streaming message session.
293
+ * Returns a streamId for subsequent updates.
294
+ */
295
+ startStream(chatId: number): string {
296
+ const streamId = `${chatId}:${Date.now()}`;
297
+ this.activeStreams.set(streamId, { lastText: "", lastUpdate: 0 });
298
+ return streamId;
299
+ }
300
+
301
+ /**
302
+ * Update streaming message content.
303
+ * Uses sendMessageDraft for native streaming (Bot API 9.5+) or
304
+ * falls back to sendMessage + editMessageText for older APIs.
305
+ */
306
+ async updateStream(
307
+ streamId: string,
308
+ text: string,
309
+ options?: TelegramBot.SendMessageOptions
310
+ ): Promise<void> {
311
+ const stream = this.activeStreams.get(streamId);
312
+ if (!stream) {
313
+ console.error(`[TelegramChannel] No active stream: ${streamId}`);
314
+ return;
315
+ }
316
+
317
+ const chatId = parseInt(streamId.split(":")[0], 10);
318
+ const now = Date.now();
319
+
320
+ // Debounce updates
321
+ if (now - stream.lastUpdate < this.streamingDebounceMs && text === stream.lastText) {
322
+ return;
323
+ }
324
+
325
+ stream.lastText = text;
326
+ stream.lastUpdate = now;
327
+
328
+ try {
329
+ if (this.nativeStreaming) {
330
+ // Use sendMessageDraft for native streaming (Bot API 9.5+)
331
+ await this.sendMessageDraftNative(chatId, text, options);
332
+ } else {
333
+ // Fallback: sendMessage + editMessageText
334
+ if (!stream.messageId) {
335
+ // First message: send new
336
+ const result = await this.bot.sendMessage(chatId, text, options);
337
+ stream.messageId = result.message_id;
338
+ } else {
339
+ // Subsequent updates: edit
340
+ await this.bot.editMessageText(text, {
341
+ chat_id: chatId,
342
+ message_id: stream.messageId,
343
+ parse_mode: options?.parse_mode,
344
+ });
345
+ }
346
+ }
347
+ } catch (error) {
348
+ console.error(`[TelegramChannel] Stream update error: ${(error as Error).message}`);
349
+ }
350
+ }
351
+
352
+ /**
353
+ * Finalize streaming message.
354
+ * Commits the final text and cleans up stream state.
355
+ */
356
+ async finalizeStream(
357
+ streamId: string,
358
+ finalText: string,
359
+ options?: TelegramBot.SendMessageOptions
360
+ ): Promise<number | undefined> {
361
+ const stream = this.activeStreams.get(streamId);
362
+ if (!stream) {
363
+ console.error(`[TelegramChannel] No active stream: ${streamId}`);
364
+ return undefined;
365
+ }
366
+
367
+ const chatId = parseInt(streamId.split(":")[0], 10);
368
+
369
+ try {
370
+ if (this.nativeStreaming) {
371
+ // Final commit with sendMessageDraft
372
+ await this.sendMessageDraftNative(chatId, finalText, options, true);
373
+ } else if (stream.messageId) {
374
+ // Final edit for fallback mode
375
+ await this.bot.editMessageText(finalText, {
376
+ chat_id: chatId,
377
+ message_id: stream.messageId,
378
+ parse_mode: options?.parse_mode,
379
+ });
380
+ return stream.messageId;
381
+ }
382
+ } catch (error) {
383
+ console.error(`[TelegramChannel] Stream finalize error: ${(error as Error).message}`);
384
+ } finally {
385
+ this.activeStreams.delete(streamId);
386
+ }
387
+
388
+ return stream.messageId;
389
+ }
390
+
391
+ /**
392
+ * Cancel an active stream.
393
+ */
394
+ cancelStream(streamId: string): void {
395
+ const stream = this.activeStreams.get(streamId);
396
+ if (stream?.messageId) {
397
+ const chatId = parseInt(streamId.split(":")[0], 10);
398
+ this.bot.deleteMessage(chatId, stream.messageId).catch(() => {});
399
+ }
400
+ this.activeStreams.delete(streamId);
401
+ }
402
+
403
+ /**
404
+ * Native sendMessageDraft implementation (Bot API 9.5+).
405
+ * Falls back to editMessageText if API not available.
406
+ */
407
+ private async sendMessageDraftNative(
408
+ chatId: number,
409
+ text: string,
410
+ options?: TelegramBot.SendMessageOptions,
411
+ finalize = false
412
+ ): Promise<void> {
413
+ try {
414
+ // Try native sendMessageDraft API (Bot API 9.5+)
415
+ // Note: node-telegram-bot-api may not have this method yet,
416
+ // so we use the raw API call
417
+ await this.bot.sendMessage(chatId, text, {
418
+ ...options,
419
+ // @ts-expect-error - sendMessageDraft is new in Bot API 9.5
420
+ draft: !finalize,
421
+ });
422
+ } catch (error) {
423
+ // If draft mode not supported, fall back silently
424
+ const errMsg = (error as Error).message;
425
+ if (errMsg.includes("draft") || errMsg.includes("Bad Request")) {
426
+ // API doesn't support draft mode, use regular send
427
+ await this.bot.sendMessage(chatId, text, options);
428
+ } else {
429
+ throw error;
430
+ }
431
+ }
432
+ }
433
+
268
434
  /**
269
435
  * Check if user/chat is allowed.
270
436
  */
package/src/plugin.ts CHANGED
@@ -38,6 +38,12 @@ export interface ResolvedTelegramAccount {
38
38
  allowedUsers?: number[];
39
39
  allowedChats?: number[];
40
40
  pollingInterval: number;
41
+ /** Enable native streaming using sendMessageDraft API (Bot API 9.5+) */
42
+ nativeStreaming?: boolean;
43
+ /** Streaming mode: 'partial' (default), 'block', or 'progress' */
44
+ streamingMode?: "partial" | "block" | "progress";
45
+ /** Debounce interval for streaming updates (ms), default: 100 */
46
+ streamingDebounceMs?: number;
41
47
  }
42
48
 
43
49
  // ============================================================
@@ -69,6 +75,9 @@ export const telegramConfigAdapter: ChannelConfigAdapter<ResolvedTelegramAccount
69
75
  allowedUsers: config.allowedUsers as number[] | undefined,
70
76
  allowedChats: config.allowedChats as number[] | undefined,
71
77
  pollingInterval: (config.pollingInterval as number) || 1000,
78
+ nativeStreaming: (config.nativeStreaming as boolean) ?? false,
79
+ streamingMode: (config.streamingMode as "partial" | "block" | "progress") ?? "partial",
80
+ streamingDebounceMs: (config.streamingDebounceMs as number) ?? 100,
72
81
  };
73
82
  },
74
83
 
@@ -84,90 +93,200 @@ export const telegramConfigAdapter: ChannelConfigAdapter<ResolvedTelegramAccount
84
93
  // ============================================================
85
94
 
86
95
  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
- },
96
+ getBot: () => TelegramBot | null,
97
+ getAccount: () => ResolvedTelegramAccount | null
98
+ ): ChannelOutboundAdapter<ResolvedTelegramAccount> => {
99
+ // Active streams for streaming support
100
+ const activeStreams = new Map<string, { messageId?: number; lastText: string; lastUpdate: number }>();
100
101
 
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
- }
102
+ return {
103
+ deliveryMode: "direct",
104
+ textChunkLimit: 4096,
105
+
106
+ chunker: (text, limit) => {
107
+ // Simple chunking - could be smarter with markdown
108
+ const chunks: string[] = [];
109
+ for (let i = 0; i < text.length; i += limit) {
110
+ chunks.push(text.slice(i, i + limit));
111
+ }
112
+ return { chunks, totalChunks: chunks.length };
113
+ },
106
114
 
107
- try {
108
- const chatId = parseInt(to, 10);
109
- const options: TelegramBot.SendMessageOptions = {
110
- parse_mode: "Markdown",
111
- };
115
+ sendText: async ({ to, text, accountId, account, replyToId, threadId }) => {
116
+ const bot = getBot();
117
+ if (!bot) {
118
+ return { success: false, error: "Bot not initialized", timestamp: new Date() };
119
+ }
120
+
121
+ try {
122
+ const chatId = parseInt(to, 10);
123
+ const options: TelegramBot.SendMessageOptions = {
124
+ parse_mode: "Markdown",
125
+ };
126
+
127
+ if (replyToId) {
128
+ options.reply_to_message_id = parseInt(replyToId, 10);
129
+ }
130
+
131
+ if (threadId) {
132
+ options.message_thread_id = parseInt(threadId, 10);
133
+ }
134
+
135
+ const result = await bot.sendMessage(chatId, text, options);
112
136
 
113
- if (replyToId) {
114
- options.reply_to_message_id = parseInt(replyToId, 10);
137
+ return {
138
+ success: true,
139
+ messageId: result.message_id.toString(),
140
+ timestamp: new Date(),
141
+ };
142
+ } catch (error) {
143
+ return {
144
+ success: false,
145
+ error: (error as Error).message,
146
+ timestamp: new Date(),
147
+ };
115
148
  }
149
+ },
150
+
151
+ // Streaming support
152
+ startStream: async ({ to }) => {
153
+ const streamId = `${to}:${Date.now()}`;
154
+ activeStreams.set(streamId, { lastText: "", lastUpdate: 0 });
155
+ return streamId;
156
+ },
116
157
 
117
- if (threadId) {
118
- options.message_thread_id = parseInt(threadId, 10);
158
+ updateStream: async ({ streamId, text, options }) => {
159
+ const stream = activeStreams.get(streamId);
160
+ if (!stream) return;
161
+
162
+ const bot = getBot();
163
+ const account = getAccount();
164
+ if (!bot || !account) return;
165
+
166
+ const chatId = parseInt(streamId.split(":")[0], 10);
167
+ const now = Date.now();
168
+ const debounceMs = account.streamingDebounceMs ?? 100;
169
+
170
+ // Debounce updates
171
+ if (now - stream.lastUpdate < debounceMs && text === stream.lastText) {
172
+ return;
173
+ }
174
+
175
+ stream.lastText = text;
176
+ stream.lastUpdate = now;
177
+
178
+ try {
179
+ if (account.nativeStreaming) {
180
+ // Use sendMessageDraft for native streaming (Bot API 9.5+)
181
+ await bot.sendMessage(chatId, text, {
182
+ parse_mode: options?.parseMode as "Markdown" | "HTML",
183
+ // @ts-expect-error - sendMessageDraft is new in Bot API 9.5
184
+ draft: true,
185
+ });
186
+ } else {
187
+ // Fallback: sendMessage + editMessageText
188
+ if (!stream.messageId) {
189
+ const result = await bot.sendMessage(chatId, text, {
190
+ parse_mode: options?.parseMode as "Markdown" | "HTML",
191
+ });
192
+ stream.messageId = result.message_id;
193
+ } else {
194
+ await bot.editMessageText(text, {
195
+ chat_id: chatId,
196
+ message_id: stream.messageId,
197
+ parse_mode: options?.parseMode as "Markdown" | "HTML",
198
+ });
199
+ }
200
+ }
201
+ } catch (error) {
202
+ console.error(`[TelegramOutbound] Stream update error: ${(error as Error).message}`);
119
203
  }
204
+ },
120
205
 
121
- const result = await bot.sendMessage(chatId, text, options);
206
+ finalizeStream: async ({ streamId, finalText, options }) => {
207
+ const stream = activeStreams.get(streamId);
208
+ if (!stream) return undefined;
209
+
210
+ const bot = getBot();
211
+ const account = getAccount();
212
+ if (!bot || !account) return undefined;
213
+
214
+ const chatId = parseInt(streamId.split(":")[0], 10);
215
+ let messageId = stream.messageId;
216
+
217
+ try {
218
+ if (account.nativeStreaming) {
219
+ // Final commit with sendMessageDraft
220
+ const result = await bot.sendMessage(chatId, finalText, {
221
+ parse_mode: options?.parseMode as "Markdown" | "HTML",
222
+ // @ts-expect-error - sendMessageDraft is new in Bot API 9.5
223
+ draft: false,
224
+ });
225
+ messageId = result.message_id;
226
+ } else if (stream.messageId) {
227
+ // Final edit for fallback mode
228
+ await bot.editMessageText(finalText, {
229
+ chat_id: chatId,
230
+ message_id: stream.messageId,
231
+ parse_mode: options?.parseMode as "Markdown" | "HTML",
232
+ });
233
+ }
234
+ } catch (error) {
235
+ console.error(`[TelegramOutbound] Stream finalize error: ${(error as Error).message}`);
236
+ } finally {
237
+ activeStreams.delete(streamId);
238
+ }
122
239
 
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
- },
240
+ return messageId?.toString();
241
+ },
136
242
 
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
- }
243
+ cancelStream: async ({ streamId }) => {
244
+ const stream = activeStreams.get(streamId);
245
+ if (stream?.messageId) {
246
+ const bot = getBot();
247
+ if (bot) {
248
+ const chatId = parseInt(streamId.split(":")[0], 10);
249
+ await bot.deleteMessage(chatId, stream.messageId).catch(() => {});
250
+ }
251
+ }
252
+ activeStreams.delete(streamId);
253
+ },
142
254
 
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 });
255
+ sendMedia: async ({ to, text, mediaUrl, mediaType, accountId, account }) => {
256
+ const bot = getBot();
257
+ if (!bot) {
258
+ return { success: false, error: "Bot not initialized", timestamp: new Date() };
155
259
  }
156
260
 
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
- });
261
+ try {
262
+ const chatId = parseInt(to, 10);
263
+ let result: TelegramBot.Message;
264
+
265
+ if (mediaType === "image") {
266
+ result = await bot.sendPhoto(chatId, mediaUrl, { caption: text });
267
+ } else if (mediaType === "video") {
268
+ result = await bot.sendVideo(chatId, mediaUrl, { caption: text });
269
+ } else if (mediaType === "audio") {
270
+ result = await bot.sendAudio(chatId, mediaUrl, { caption: text });
271
+ } else {
272
+ result = await bot.sendDocument(chatId, mediaUrl, { caption: text });
273
+ }
274
+
275
+ return {
276
+ success: true,
277
+ messageId: result.message_id.toString(),
278
+ timestamp: new Date(),
279
+ };
280
+ } catch (error) {
281
+ return {
282
+ success: false,
283
+ error: (error as Error).message,
284
+ timestamp: new Date(),
285
+ };
286
+ }
287
+ },
288
+ };
289
+ };
171
290
 
172
291
  // ============================================================
173
292
  // THREADING ADAPTER
@@ -265,10 +384,16 @@ const createGatewayAdapter = (
265
384
  // ============================================================
266
385
 
267
386
  export function createTelegramPlugin(
268
- config: { botToken?: string } = {},
387
+ config: {
388
+ botToken?: string;
389
+ nativeStreaming?: boolean;
390
+ streamingMode?: "partial" | "block" | "progress";
391
+ streamingDebounceMs?: number;
392
+ } = {},
269
393
  TelegramBotClass?: typeof TelegramBot
270
394
  ): ChannelPlugin<ResolvedTelegramAccount> {
271
395
  let bot: TelegramBot | null = null;
396
+ let account: ResolvedTelegramAccount | null = null;
272
397
 
273
398
  const createBot = (token: string): TelegramBot => {
274
399
  if (!TelegramBotClass) {
@@ -277,6 +402,11 @@ export function createTelegramPlugin(
277
402
  return new TelegramBotClass(token, { polling: true });
278
403
  };
279
404
 
405
+ // Native streaming configuration
406
+ const nativeStreaming = config.nativeStreaming ?? false;
407
+ const streamingMode = config.streamingMode ?? "partial";
408
+ const streamingDebounceMs = config.streamingDebounceMs ?? 100;
409
+
280
410
  return {
281
411
  id: "telegram",
282
412
  meta: telegramMeta,
@@ -289,7 +419,7 @@ export function createTelegramPlugin(
289
419
  threads: true,
290
420
  reactions: true,
291
421
  editing: true,
292
- streaming: false,
422
+ streaming: nativeStreaming,
293
423
  buttons: true,
294
424
  },
295
425
  nativeCommands: true,
@@ -303,9 +433,19 @@ export function createTelegramPlugin(
303
433
  },
304
434
  },
305
435
  config: telegramConfigAdapter,
306
- outbound: createOutboundAdapter(() => bot),
436
+ outbound: createOutboundAdapter(
437
+ () => bot,
438
+ () => account
439
+ ),
307
440
  gateway: createGatewayAdapter((token) => {
308
441
  bot = createBot(token);
442
+ account = {
443
+ botToken: token,
444
+ pollingInterval: 1000,
445
+ nativeStreaming,
446
+ streamingMode,
447
+ streamingDebounceMs,
448
+ };
309
449
  return bot;
310
450
  }),
311
451
  threading: telegramThreadingAdapter,