@zhin.js/adapter-telegram 1.0.69 → 1.1.2

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +909 -17
  2. package/PERMITS.md +24 -0
  3. package/README.md +106 -77
  4. package/adapters/telegram/index.js +34 -0
  5. package/adapters/telegram/index.ts +39 -0
  6. package/agents/telegram/agent.json +20 -0
  7. package/agents/telegram/boundaries.md +3 -0
  8. package/agents/telegram/conventions.md +3 -0
  9. package/agents/telegram/skills/telegram-chat-admin/SKILL.md +24 -0
  10. package/agents/telegram/skills/telegram-chat-admin/tools/create_invite/index.js +18 -0
  11. package/agents/telegram/skills/telegram-chat-admin/tools/create_invite/index.ts +18 -0
  12. package/agents/telegram/skills/telegram-chat-admin/tools/list_admins/index.js +24 -0
  13. package/agents/telegram/skills/telegram-chat-admin/tools/list_admins/index.ts +24 -0
  14. package/agents/telegram/skills/telegram-chat-admin/tools/member_count/index.js +16 -0
  15. package/agents/telegram/skills/telegram-chat-admin/tools/member_count/index.ts +16 -0
  16. package/agents/telegram/skills/telegram-chat-admin/tools/pin_message/index.js +19 -0
  17. package/agents/telegram/skills/telegram-chat-admin/tools/pin_message/index.ts +19 -0
  18. package/agents/telegram/skills/telegram-chat-admin/tools/set_description/index.js +17 -0
  19. package/agents/telegram/skills/telegram-chat-admin/tools/set_description/index.ts +17 -0
  20. package/agents/telegram/skills/telegram-chat-admin/tools/set_permissions/index.js +32 -0
  21. package/agents/telegram/skills/telegram-chat-admin/tools/set_permissions/index.ts +31 -0
  22. package/agents/telegram/skills/telegram-chat-admin/tools/unpin_message/index.js +19 -0
  23. package/agents/telegram/skills/telegram-chat-admin/tools/unpin_message/index.ts +19 -0
  24. package/agents/telegram/skills/telegram-messages/SKILL.md +19 -0
  25. package/agents/telegram/skills/telegram-messages/tools/react/index.js +18 -0
  26. package/agents/telegram/skills/telegram-messages/tools/react/index.ts +18 -0
  27. package/agents/telegram/skills/telegram-messages/tools/send_poll/index.js +30 -0
  28. package/agents/telegram/skills/telegram-messages/tools/send_poll/index.ts +32 -0
  29. package/agents/telegram/skills/telegram-messages/tools/send_sticker/index.js +17 -0
  30. package/agents/telegram/skills/telegram-messages/tools/send_sticker/index.ts +17 -0
  31. package/agents/telegram/system.md +3 -0
  32. package/commands/telegram/endpoint/add/[id]/index.js +3 -0
  33. package/commands/telegram/endpoint/add/[id]/index.ts +3 -0
  34. package/commands/telegram/endpoint/definition.js +17 -0
  35. package/commands/telegram/endpoint/definition.ts +17 -0
  36. package/commands/telegram/endpoint/list/index.js +3 -0
  37. package/commands/telegram/endpoint/list/index.ts +3 -0
  38. package/commands/telegram/endpoint/remove/[id]/index.js +3 -0
  39. package/commands/telegram/endpoint/remove/[id]/index.ts +3 -0
  40. package/lib/client.d.ts +12 -0
  41. package/lib/client.js +2 -0
  42. package/lib/endpoint.d.ts +112 -0
  43. package/lib/endpoint.js +535 -0
  44. package/lib/index.d.ts +4 -18
  45. package/lib/index.js +4 -455
  46. package/lib/markdown-to-html.d.ts +9 -0
  47. package/lib/markdown-to-html.js +75 -0
  48. package/lib/platform-permit.d.ts +17 -0
  49. package/lib/platform-permit.js +51 -0
  50. package/lib/polling.d.ts +9 -0
  51. package/lib/polling.js +57 -0
  52. package/lib/protocol.d.ts +291 -0
  53. package/lib/protocol.js +463 -0
  54. package/lib/telegram-runtime-state.d.ts +1 -0
  55. package/lib/telegram-runtime-state.js +6 -0
  56. package/lib/webhook.d.ts +12 -0
  57. package/lib/webhook.js +55 -0
  58. package/package.json +72 -29
  59. package/plugin.js +19 -0
  60. package/schema.json +141 -0
  61. package/src/client.ts +16 -0
  62. package/src/endpoint.ts +679 -0
  63. package/src/index.ts +39 -426
  64. package/src/markdown-to-html.ts +86 -0
  65. package/src/platform-permit.ts +65 -0
  66. package/src/polling.ts +76 -0
  67. package/src/protocol.ts +744 -0
  68. package/src/telegram-runtime-state.ts +7 -0
  69. package/src/webhook.ts +75 -0
  70. package/client/Dashboard.tsx +0 -295
  71. package/client/index.tsx +0 -11
  72. package/client/tsconfig.json +0 -7
  73. package/client/utils/api.ts +0 -17
  74. package/dist/index.js +0 -32
  75. package/lib/adapter.d.ts +0 -18
  76. package/lib/adapter.d.ts.map +0 -1
  77. package/lib/adapter.js +0 -55
  78. package/lib/adapter.js.map +0 -1
  79. package/lib/bot.d.ts +0 -140
  80. package/lib/bot.d.ts.map +0 -1
  81. package/lib/bot.js +0 -866
  82. package/lib/bot.js.map +0 -1
  83. package/lib/index.d.ts.map +0 -1
  84. package/lib/index.js.map +0 -1
  85. package/lib/types.d.ts +0 -29
  86. package/lib/types.d.ts.map +0 -1
  87. package/lib/types.js +0 -2
  88. package/lib/types.js.map +0 -1
  89. package/plugin.yml +0 -3
  90. package/skills/telegram/SKILL.md +0 -103
  91. package/src/adapter.ts +0 -64
  92. package/src/bot.ts +0 -983
  93. package/src/types.ts +0 -32
package/src/polling.ts ADDED
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Telegram long-polling loop for getUpdates.
3
+ */
4
+ import { formatCompact, getLogger } from '@zhin.js/logger';
5
+ import type { TelegramUpdate } from './protocol.js';
6
+
7
+ const logger = getLogger('telegram');
8
+ const RETRY_DELAY_MS = 2_000;
9
+ const BACKOFF_DELAY_MS = 10_000;
10
+ const MAX_CONSECUTIVE_FAILURES = 5;
11
+ const DEFAULT_POLL_TIMEOUT_SEC = 30;
12
+
13
+ export interface TelegramPollingHost {
14
+ readonly allowedUpdates: readonly string[];
15
+ callApi<T>(
16
+ method: string,
17
+ params?: Record<string, unknown>,
18
+ signal?: AbortSignal,
19
+ ): Promise<T>;
20
+ getUpdateOffset(): number;
21
+ setUpdateOffset(offset: number): void;
22
+ handleUpdate(update: TelegramUpdate): void;
23
+ }
24
+
25
+ export async function runTelegramPollLoop(
26
+ host: TelegramPollingHost,
27
+ abortSignal: AbortSignal,
28
+ ): Promise<void> {
29
+ let consecutiveFailures = 0;
30
+ while (!abortSignal.aborted) {
31
+ try {
32
+ const updates = await host.callApi<TelegramUpdate[]>('getUpdates', {
33
+ offset: host.getUpdateOffset() || undefined,
34
+ timeout: DEFAULT_POLL_TIMEOUT_SEC,
35
+ allowed_updates: host.allowedUpdates,
36
+ }, abortSignal);
37
+ consecutiveFailures = 0;
38
+ for (const update of updates) {
39
+ // A transport may resolve after cancellation; never admit that late batch.
40
+ if (abortSignal.aborted) return;
41
+ host.setUpdateOffset(update.update_id + 1);
42
+ host.handleUpdate(update);
43
+ }
44
+ } catch (err) {
45
+ if (abortSignal.aborted) return;
46
+ consecutiveFailures += 1;
47
+ logger.error(formatCompact({
48
+ op: 'poll',
49
+ ok: false,
50
+ error: err instanceof Error ? err.message : String(err),
51
+ }));
52
+ // 不在退避后清零:对端持续挂时清零会让重试固定打满 RETRY_DELAY_MS,
53
+ // 保持计数才能让 BACKOFF_DELAY_MS 持续生效(成功时上面才清零)。
54
+ await sleep(
55
+ consecutiveFailures >= MAX_CONSECUTIVE_FAILURES ? BACKOFF_DELAY_MS : RETRY_DELAY_MS,
56
+ abortSignal,
57
+ );
58
+ }
59
+ }
60
+ }
61
+
62
+ function sleep(ms: number, signal?: AbortSignal): Promise<void> {
63
+ return new Promise((resolve) => {
64
+ if (signal?.aborted) {
65
+ resolve();
66
+ return;
67
+ }
68
+ const finish = () => {
69
+ clearTimeout(timer);
70
+ signal?.removeEventListener('abort', finish);
71
+ resolve();
72
+ };
73
+ const timer = setTimeout(finish, ms);
74
+ signal?.addEventListener('abort', finish, { once: true });
75
+ });
76
+ }