@xbibzlibrary/telebibz 0.1.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.
Files changed (134) hide show
  1. package/APPROVAL_FEATURE.md +73 -0
  2. package/CHANGELOG.md +21 -0
  3. package/LICENSE +21 -0
  4. package/README.md +171 -0
  5. package/SECURITY.md +15 -0
  6. package/bin/telebibz.mjs +3 -0
  7. package/dist/generated/api.d.ts +13 -0
  8. package/dist/generated/api.d.ts.map +1 -0
  9. package/dist/generated/api.js +192 -0
  10. package/dist/generated/api.js.map +1 -0
  11. package/dist/src/api/client.d.ts +32 -0
  12. package/dist/src/api/client.d.ts.map +1 -0
  13. package/dist/src/api/client.js +50 -0
  14. package/dist/src/api/client.js.map +1 -0
  15. package/dist/src/api/errors.d.ts +45 -0
  16. package/dist/src/api/errors.d.ts.map +1 -0
  17. package/dist/src/api/errors.js +65 -0
  18. package/dist/src/api/errors.js.map +1 -0
  19. package/dist/src/api/index.d.ts +5 -0
  20. package/dist/src/api/index.d.ts.map +1 -0
  21. package/dist/src/api/index.js +5 -0
  22. package/dist/src/api/index.js.map +1 -0
  23. package/dist/src/api/transport.d.ts +37 -0
  24. package/dist/src/api/transport.d.ts.map +1 -0
  25. package/dist/src/api/transport.js +134 -0
  26. package/dist/src/api/transport.js.map +1 -0
  27. package/dist/src/api/types.d.ts +441 -0
  28. package/dist/src/api/types.d.ts.map +1 -0
  29. package/dist/src/api/types.js +2 -0
  30. package/dist/src/api/types.js.map +1 -0
  31. package/dist/src/approval/approval.d.ts +63 -0
  32. package/dist/src/approval/approval.d.ts.map +1 -0
  33. package/dist/src/approval/approval.js +90 -0
  34. package/dist/src/approval/approval.js.map +1 -0
  35. package/dist/src/cache/cache.d.ts +33 -0
  36. package/dist/src/cache/cache.d.ts.map +1 -0
  37. package/dist/src/cache/cache.js +37 -0
  38. package/dist/src/cache/cache.js.map +1 -0
  39. package/dist/src/cli.d.ts +2 -0
  40. package/dist/src/cli.d.ts.map +1 -0
  41. package/dist/src/cli.js +55 -0
  42. package/dist/src/cli.js.map +1 -0
  43. package/dist/src/context/context.d.ts +46 -0
  44. package/dist/src/context/context.d.ts.map +1 -0
  45. package/dist/src/context/context.js +63 -0
  46. package/dist/src/context/context.js.map +1 -0
  47. package/dist/src/core/bot.d.ts +76 -0
  48. package/dist/src/core/bot.d.ts.map +1 -0
  49. package/dist/src/core/bot.js +160 -0
  50. package/dist/src/core/bot.js.map +1 -0
  51. package/dist/src/core/events.d.ts +71 -0
  52. package/dist/src/core/events.d.ts.map +1 -0
  53. package/dist/src/core/events.js +24 -0
  54. package/dist/src/core/events.js.map +1 -0
  55. package/dist/src/index.d.ts +18 -0
  56. package/dist/src/index.d.ts.map +1 -0
  57. package/dist/src/index.js +18 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/dist/src/keyboard/index.d.ts +34 -0
  60. package/dist/src/keyboard/index.d.ts.map +1 -0
  61. package/dist/src/keyboard/index.js +43 -0
  62. package/dist/src/keyboard/index.js.map +1 -0
  63. package/dist/src/middleware/compose.d.ts +5 -0
  64. package/dist/src/middleware/compose.d.ts.map +1 -0
  65. package/dist/src/middleware/compose.js +17 -0
  66. package/dist/src/middleware/compose.js.map +1 -0
  67. package/dist/src/plugins/plugin.d.ts +36 -0
  68. package/dist/src/plugins/plugin.d.ts.map +1 -0
  69. package/dist/src/plugins/plugin.js +31 -0
  70. package/dist/src/plugins/plugin.js.map +1 -0
  71. package/dist/src/queue/queue.d.ts +52 -0
  72. package/dist/src/queue/queue.d.ts.map +1 -0
  73. package/dist/src/queue/queue.js +82 -0
  74. package/dist/src/queue/queue.js.map +1 -0
  75. package/dist/src/router/router.d.ts +35 -0
  76. package/dist/src/router/router.d.ts.map +1 -0
  77. package/dist/src/router/router.js +23 -0
  78. package/dist/src/router/router.js.map +1 -0
  79. package/dist/src/state/conversation.d.ts +40 -0
  80. package/dist/src/state/conversation.d.ts.map +1 -0
  81. package/dist/src/state/conversation.js +38 -0
  82. package/dist/src/state/conversation.js.map +1 -0
  83. package/dist/src/state/forms.d.ts +35 -0
  84. package/dist/src/state/forms.d.ts.map +1 -0
  85. package/dist/src/state/forms.js +41 -0
  86. package/dist/src/state/forms.js.map +1 -0
  87. package/dist/src/state/menu.d.ts +30 -0
  88. package/dist/src/state/menu.d.ts.map +1 -0
  89. package/dist/src/state/menu.js +28 -0
  90. package/dist/src/state/menu.js.map +1 -0
  91. package/dist/src/storage/storage.d.ts +33 -0
  92. package/dist/src/storage/storage.d.ts.map +1 -0
  93. package/dist/src/storage/storage.js +51 -0
  94. package/dist/src/storage/storage.js.map +1 -0
  95. package/dist/src/testing.d.ts +17 -0
  96. package/dist/src/testing.d.ts.map +1 -0
  97. package/dist/src/testing.js +12 -0
  98. package/dist/src/testing.js.map +1 -0
  99. package/dist/src/utils/text.d.ts +17 -0
  100. package/dist/src/utils/text.d.ts.map +1 -0
  101. package/dist/src/utils/text.js +0 -0
  102. package/dist/src/utils/text.js.map +1 -0
  103. package/dist/src/webhook/handler.d.ts +8 -0
  104. package/dist/src/webhook/handler.d.ts.map +1 -0
  105. package/dist/src/webhook/handler.js +27 -0
  106. package/dist/src/webhook/handler.js.map +1 -0
  107. package/dist-cjs/generated/api.js +194 -0
  108. package/dist-cjs/package.json +3 -0
  109. package/dist-cjs/src/api/client.js +53 -0
  110. package/dist-cjs/src/api/errors.js +74 -0
  111. package/dist-cjs/src/api/index.js +20 -0
  112. package/dist-cjs/src/api/transport.js +137 -0
  113. package/dist-cjs/src/api/types.js +2 -0
  114. package/dist-cjs/src/approval/approval.js +94 -0
  115. package/dist-cjs/src/cache/cache.js +41 -0
  116. package/dist-cjs/src/cli.js +57 -0
  117. package/dist-cjs/src/context/context.js +66 -0
  118. package/dist-cjs/src/core/bot.js +163 -0
  119. package/dist-cjs/src/core/events.js +27 -0
  120. package/dist-cjs/src/index.js +33 -0
  121. package/dist-cjs/src/keyboard/index.js +49 -0
  122. package/dist-cjs/src/middleware/compose.js +20 -0
  123. package/dist-cjs/src/plugins/plugin.js +35 -0
  124. package/dist-cjs/src/queue/queue.js +86 -0
  125. package/dist-cjs/src/router/router.js +26 -0
  126. package/dist-cjs/src/state/conversation.js +43 -0
  127. package/dist-cjs/src/state/forms.js +44 -0
  128. package/dist-cjs/src/state/menu.js +33 -0
  129. package/dist-cjs/src/storage/storage.js +54 -0
  130. package/dist-cjs/src/testing.js +18 -0
  131. package/dist-cjs/src/utils/text.js +0 -0
  132. package/dist-cjs/src/webhook/handler.js +29 -0
  133. package/docs/README.md +21 -0
  134. package/package.json +78 -0
@@ -0,0 +1,73 @@
1
+ # Telebibz Owner Approval Feature
2
+
3
+ ## Tujuan
4
+
5
+ Approval feature membuat bot yang memakai `telebibz` meminta izin owner sebelum update biasa diproses. Ketika bot pertama kali start, library mengirim pesan ke `ownerChatId` dengan format:
6
+
7
+ > Haloo Dev Gantenggg, ada yang memakai library telebibz nihh
8
+ >
9
+ > Bot: @example_bot (ID: 123456)
10
+ > Owner ID: 987654
11
+ > Status: menunggu izin owner.
12
+ >
13
+ > [Izinkan] [Tidak Diizinkan]
14
+
15
+ Bot berada pada status `awaiting-approval`. Update biasa tidak diteruskan ke router sampai owner menekan **Izinkan**. **Tidak Diizinkan** membuat status tetap tertolak.
16
+
17
+ ## Konfigurasi
18
+
19
+ ```ts
20
+ import { Bot } from "@xbibzlibrary/telebibz";
21
+
22
+ const bot = new Bot({
23
+ token: process.env.TELEGRAM_BOT_TOKEN!,
24
+ approval: {
25
+ ownerChatId: Number(process.env.TELEBIBZ_OWNER_CHAT_ID),
26
+ ownerUserId: Number(process.env.TELEBIBZ_OWNER_USER_ID),
27
+ ownerLabel: "Dev Gantenggg",
28
+ requireApproval: true,
29
+ },
30
+ });
31
+
32
+ bot.command("start", (ctx) => ctx.reply("Bot sudah diizinkan."));
33
+ await bot.start();
34
+ ```
35
+
36
+ `ownerChatId` adalah chat tempat notifikasi approval dikirim. `ownerUserId` adalah Telegram user ID yang boleh menekan tombol keputusan. Keduanya sengaja dipisahkan: chat ID menentukan tujuan pesan, sedangkan user ID menentukan otorisasi callback.
37
+
38
+ ## Alur
39
+
40
+ Pada startup, `Bot.init()` memanggil `getMe()` lalu membuat approval record `pending`. Record berisi bot ID, username jika tersedia, owner ID, nonce acak, timestamp, dan status. Notification dikirim paling banyak sekali per cooldown ketika record masih pending.
41
+
42
+ Callback memakai format internal dengan nonce acak. Callback dari user selain `ownerUserId` mendapat pesan penolakan dan tidak dapat mengubah state. Callback dengan nonce tidak cocok dianggap kedaluwarsa. Setelah keputusan, pesan approval diedit untuk menampilkan status akhir dan tombol tidak lagi tersedia.
43
+
44
+ ## Persistence
45
+
46
+ Default store adalah `MemoryApprovalStore`, cocok untuk development dan satu proses. Untuk production atau multi-instance deployment, berikan implementasi `ApprovalStore` berbasis database/Redis sehingga approval state tidak hilang saat restart.
47
+
48
+ ```ts
49
+ const approvalStore = {
50
+ async get(key) { return database.approvals.find(key); },
51
+ async set(key, record) { await database.approvals.upsert(key, record); },
52
+ async delete(key) { return database.approvals.delete(key); },
53
+ };
54
+
55
+ const bot = new Bot({
56
+ token: process.env.TELEGRAM_BOT_TOKEN!,
57
+ approval: {
58
+ ownerChatId: 123,
59
+ ownerUserId: 456,
60
+ store: approvalStore,
61
+ },
62
+ });
63
+ ```
64
+
65
+ ## Privacy dan security
66
+
67
+ Feature ini **tidak mengirim data ke server telebibz atau third party secara diam-diam**. Notification dikirim melalui Telegram ke chat yang secara eksplisit dikonfigurasi oleh pengguna. Hanya identitas bot dan owner ID konfigurasi yang dimasukkan ke pesan. Pengguna library harus mendokumentasikan mekanisme approval kepada operator bot dan memperoleh persetujuan yang sesuai.
68
+
69
+ Token bot, `ownerChatId`, dan `ownerUserId` harus berasal dari environment/secret manager. Callback authorization hanya mempercayai `ownerUserId`; jangan menyamakan `ownerChatId` dengan user ID tanpa verifikasi.
70
+
71
+ ## Test coverage
72
+
73
+ Approval tests mencakup notification, pending block, signed callback format, unauthorized decision rejection, owner approval, denial, dan Bot startup state `awaiting-approval`. Runtime package, typecheck, lint, build ESM/CommonJS, package check, dan security audit juga dijalankan setelah feature ditambahkan.
package/CHANGELOG.md ADDED
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 — 2026-08-19
4
+
5
+ ### Added
6
+
7
+ - Typed low-level Telegram API client with `call`, `raw`, and `request`.
8
+ - Official-documentation-driven method-name generation targeting Bot API 10.2.
9
+ - Fetch transport with JSON, multipart, timeout, retry, exponential backoff, jitter, and AbortSignal.
10
+ - Typed Telegram error hierarchy and response parsing.
11
+ - Bot lifecycle, health checks, polling, update handling, sessions, context, and graceful stop.
12
+ - Router matchers for command, text, regex, callback, chat, and custom predicates.
13
+ - Async middleware composition.
14
+ - Inline and reply keyboard builders with native Telegram payload validation.
15
+ - Memory storage, TTL cache, token bucket limiter, task queue, scheduler, plugin manager, service container, webhook handler, CLI, text splitting, and formatting utilities.
16
+ - Unit, integration, type-level, and credential-gated E2E tests.
17
+ - ESM/CommonJS build configuration, package exports, security policy, CI-ready scripts, and feature matrix.
18
+
19
+ ### Known limitations
20
+
21
+ The full object/type schema generator, conversations/scenes/wizard/forms, distributed adapters, Mini App UI SDK, high-level payments subsystem, and authenticated Telegram E2E verification are not complete in this release. See `FEATURE_MATRIX.md`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 telebibz contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,171 @@
1
+ # telebibz
2
+
3
+ `telebibz` adalah SDK dan framework Telegram Bot untuk Node.js dan TypeScript dengan low-level API access, typed context, router, middleware, sessions, keyboards, polling, webhook, storage, cache, queue, scheduler, plugins, CLI, serta testing utilities.
4
+
5
+ > **Status rilis saat ini: `PARTIAL` / development release.** Core transport, API runtime, lifecycle, polling, webhook handler, routing, middleware, keyboards, storage, queue, scheduler, plugins, tests, dan ESM/CommonJS build telah diimplementasikan dan diverifikasi. Full strongly typed schema untuk seluruh object Telegram, seluruh optional adapters, Mini App UI SDK, payments orchestration, conversations/scenes/wizard/forms, serta real Telegram E2E masih memerlukan milestone lanjutan. Package tidak mengklaim production-ready sebelum semua gate dan credentials eksternal tersedia.
6
+
7
+ Target generated API mengikuti dokumentasi resmi Telegram Bot API yang tersedia saat build, saat ini Bot API **10.2**.[^telegram-api]
8
+
9
+ ## Instalasi
10
+
11
+ ```bash
12
+ npm install @xbibzlibrary/telebibz
13
+ ```
14
+
15
+ Package mendukung ESM:
16
+
17
+ ```ts
18
+ import { Bot, InlineKeyboard } from "@xbibzlibrary/telebibz";
19
+
20
+ const bot = new Bot(process.env.TELEGRAM_BOT_TOKEN!);
21
+ bot.command("start", (ctx) => ctx.reply("Halo dari telebibz", {
22
+ reply_markup: new InlineKeyboard().text("Status", "status").build()
23
+ }));
24
+ await bot.start();
25
+ ```
26
+
27
+ dan CommonJS:
28
+
29
+ ```js
30
+ const { Bot } = require("@xbibzlibrary/telebibz");
31
+ const bot = new Bot(process.env.TELEGRAM_BOT_TOKEN);
32
+ ```
33
+
34
+ ## Low-level API
35
+
36
+ Setiap method yang terdeteksi dari dokumentasi resmi tersedia melalui `bot.api.methods.<method>()`. API raw tetap tersedia untuk method baru sebelum convenience abstraction dibuat.
37
+
38
+ ```ts
39
+ await bot.api.methods.getMe();
40
+ await bot.api.methods.sendMessage({ chat_id: 123, text: "hello" });
41
+ await bot.api.call("sendMessage", { chat_id: 123, text: "hello" });
42
+ await bot.api.raw("futureTelegramMethod", { value: true });
43
+ ```
44
+
45
+ Transport default memakai HTTPS `fetch`, JSON untuk payload biasa, dan multipart untuk input file. Transport dapat diganti dengan implementasi custom melalui `BotOptions.transport`.
46
+
47
+ ## Router dan middleware
48
+
49
+ ```ts
50
+ bot.use(async (ctx, next) => {
51
+ const started = Date.now();
52
+ await next();
53
+ console.log(`update processed in ${Date.now() - started}ms`);
54
+ });
55
+
56
+ bot.command("help", (ctx) => ctx.reply("Help"));
57
+ bot.onText("ping", (ctx) => ctx.reply("pong"));
58
+ bot.onRegex(/^order:(\\d+)$/, (ctx) => ctx.reply("Order received"));
59
+ bot.callback("user:*", async (ctx) => ctx.answerCallbackQuery("Opened"));
60
+ ```
61
+
62
+ Middleware memakai komposisi async dengan `next()` dan mencegah pemanggilan `next()` ganda. Router menyediakan command, text, regex, callback prefix/exact, chat matcher, custom predicate, nested router, dan priority ordering.
63
+
64
+ ## Lifecycle dan health
65
+
66
+ ```ts
67
+ await bot.init();
68
+ const health = await bot.health();
69
+ await bot.start();
70
+ await bot.stop();
71
+ await bot.restart();
72
+ ```
73
+
74
+ `start()` menggunakan long polling. Polling memiliki offset management, allowed updates, timeout, retry, exponential backoff, reconnect event, dan graceful shutdown. Webhook dapat digunakan melalui `createWebhookHandler(bot, options)` dan memverifikasi `X-Telegram-Bot-Api-Secret-Token`.
75
+
76
+ ## Approval owner sebelum bot aktif
77
+
78
+ Jika library dipakai dalam mode approval, bot akan mengirim notifikasi ke `ownerChatId` dan menahan update biasa sampai owner menekan tombol **Izinkan**. Tombol **Tidak Diizinkan** menutup permintaan. Callback approval ditandatangani dengan nonce acak dan hanya diterima dari `ownerUserId`; callback dari user lain ditolak.
79
+
80
+ ```ts
81
+ const bot = new Bot({
82
+ token: process.env.TELEGRAM_BOT_TOKEN!,
83
+ approval: {
84
+ ownerChatId: Number(process.env.TELEBIBZ_OWNER_CHAT_ID),
85
+ ownerUserId: Number(process.env.TELEBIBZ_OWNER_USER_ID),
86
+ ownerLabel: "Dev Gantenggg",
87
+ requireApproval: true,
88
+ },
89
+ });
90
+
91
+ bot.command("start", (ctx) => ctx.reply("Bot sudah diizinkan."));
92
+ await bot.start();
93
+ ```
94
+
95
+ Pesan yang dikirim berbentuk:
96
+
97
+ > Haloo Dev Gantenggg, ada yang memakai library telebibz nihh
98
+ >
99
+ > Bot: @example_bot (ID: 123456)
100
+ > Owner ID: 987654
101
+ > Status: menunggu izin owner.
102
+ >
103
+ > `[Izinkan] [Tidak Diizinkan]`
104
+
105
+ Mode ini bersifat **eksplisit dan configurable**. Library tidak mengirim identitas ke server pihak ketiga secara diam-diam; notifikasi dikirim melalui Telegram ke `ownerChatId` yang dikonfigurasi. Untuk production, gunakan `ApprovalStore` persisten dan jelaskan mekanisme ini kepada pengguna bot.
106
+
107
+ ## Keyboard
108
+
109
+ Builder hanya menghasilkan kemampuan native Telegram yang valid. Styling CSS bebas tidak dipalsukan pada native keyboard; gunakan Mini App/Web App untuk UI HTML/CSS.
110
+
111
+ ```ts
112
+ const keyboard = new InlineKeyboard()
113
+ .text("Profile", "profile")
114
+ .url("Documentation", "https://core.telegram.org/bots/api")
115
+ .row({ text: "Copy", copy_text: { text: "telebibz" } })
116
+ .build();
117
+ ```
118
+
119
+ ## Storage, queue, scheduler, cache
120
+
121
+ Core menyediakan `MemoryStorage` dengan TTL dan atomic update, `MemoryCache`, `TokenBucketLimiter`, `TaskQueue` dengan retry/backoff/concurrency/priority/delay/cancel, serta scheduler interval/one-shot dan limited simple cron adapter. Adapter distributed seperti Redis, PostgreSQL, MySQL, MongoDB, dan queue vendor harus ditambahkan sebagai package optional terpisah.
122
+
123
+ ## Testing
124
+
125
+ ```bash
126
+ node_modules/.bin/tsc -p tsconfig.json --noEmit
127
+ node_modules/.bin/tsc -p tests/tsconfig.json --noEmit
128
+ node_modules/.bin/vitest run
129
+ node_modules/.bin/eslint scripts/*.mjs bin/*.mjs
130
+ ```
131
+
132
+ Testing utilities tidak dipakai oleh production transport. `MockTransport`, `createTestBot`, `createMockUpdate`, dan `createMockContext` hanya berada pada export testing.
133
+
134
+ Real Telegram E2E hanya berjalan jika environment menyediakan:
135
+
136
+ ```bash
137
+ TELEGRAM_BOT_TOKEN=...
138
+ TELEGRAM_TEST_CHAT_ID=...
139
+ ```
140
+
141
+ Tanpa credentials tersebut, test E2E berstatus skipped/blocked dan tidak boleh dianggap PASS.
142
+
143
+ ## Generated API
144
+
145
+ ```bash
146
+ node scripts/generate-api.mjs
147
+ ```
148
+
149
+ Generator membaca dokumentasi Telegram yang disimpan pada `schema/telegram-api.md`, menghasilkan `generated/api.ts`, dan menjaga generated method list terpisah dari handwritten framework code. Update source schema dan jalankan generator kembali ketika Bot API berubah.
150
+
151
+ ## CLI
152
+
153
+ ```bash
154
+ npx telebibz init my-bot
155
+ npx telebibz doctor
156
+ npx telebibz generate
157
+ npx telebibz build
158
+ npx telebibz test
159
+ ```
160
+
161
+ `doctor` memeriksa Node version, keberadaan token, dan konektivitas API bila token tersedia.
162
+
163
+ ## Keamanan
164
+
165
+ Token tidak ditulis ke log debug. Webhook secret dapat diverifikasi, body size dapat dibatasi, callback data dibatasi 64 byte, file upload tidak di-fetch dari URL arbitrer tanpa instruksi eksplisit, dan error Telegram dibedakan dari error network. Lihat [SECURITY.md](SECURITY.md).
166
+
167
+ ## Lisensi
168
+
169
+ MIT. Lihat [LICENSE](LICENSE).
170
+
171
+ [^telegram-api]: [Telegram Bot API resmi](https://core.telegram.org/bots/api) dan [Bot API changelog](https://core.telegram.org/bots/api-changelog).
package/SECURITY.md ADDED
@@ -0,0 +1,15 @@
1
+ # Security Policy
2
+
3
+ ## Supported versions
4
+
5
+ Security fixes target the latest development branch and the latest published stable release.
6
+
7
+ ## Reporting a vulnerability
8
+
9
+ Jangan publikasikan token bot, payload sensitif, atau detail eksploit pada issue terbuka. Kirim laporan privat kepada maintainer package dengan deskripsi reproduksi minimal, impact, versi Node.js, versi `telebibz`, dan apakah masalah terjadi pada transport, webhook, routing, storage, atau CLI.
10
+
11
+ ## Security boundaries
12
+
13
+ `telebibz` tidak mengirim telemetry ke third party secara otomatis. Token harus diberikan melalui environment atau secret manager dan tidak boleh dimasukkan ke source control. Aplikasi pengguna bertanggung jawab untuk membatasi akses server webhook, mengelola secret rotation, memvalidasi authorization domain Mini App, dan memilih adapter storage yang aman.
14
+
15
+ Input dari Telegram dianggap tidak tepercaya. Callback data, file path, URL, JSON payload, dan user-provided text harus divalidasi sebelum digunakan sebagai perintah filesystem, network, atau database.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../dist/cli.js";
3
+ await main();
@@ -0,0 +1,13 @@
1
+ /** Generated from the official Telegram Bot API documentation. Do not edit manually. */
2
+ export declare const TELEGRAM_API_VERSION: "10.2";
3
+ export declare const TELEGRAM_METHOD_NAMES: readonly ["addStickerToSet", "answerCallbackQuery", "answerChatJoinRequestQuery", "answerGuestQuery", "answerInlineQuery", "answerPreCheckoutQuery", "answerShippingQuery", "answerWebAppQuery", "approveChatJoinRequest", "approveSuggestedPost", "banChatMember", "banChatSenderChat", "close", "closeForumTopic", "closeGeneralForumTopic", "convertGiftToStars", "copyMessage", "copyMessages", "createChatInviteLink", "createChatSubscriptionInviteLink", "createForumTopic", "createInvoiceLink", "createNewStickerSet", "declineChatJoinRequest", "declineSuggestedPost", "deleteAllMessageReactions", "deleteBusinessMessages", "deleteChatPhoto", "deleteChatStickerSet", "deleteEphemeralMessage", "deleteForumTopic", "deleteMessage", "deleteMessageReaction", "deleteMessages", "deleteMyCommands", "deleteStickerFromSet", "deleteStickerSet", "deleteStory", "deleteWebhook", "editChatInviteLink", "editChatSubscriptionInviteLink", "editEphemeralMessageCaption", "editEphemeralMessageMedia", "editEphemeralMessageReplyMarkup", "editEphemeralMessageText", "editForumTopic", "editGeneralForumTopic", "editMessageCaption", "editMessageChecklist", "editMessageLiveLocation", "editMessageMedia", "editMessageReplyMarkup", "editMessageText", "editStory", "editUserStarSubscription", "exportChatInviteLink", "forwardMessage", "forwardMessages", "getAvailableGifts", "getBusinessAccountGifts", "getBusinessAccountStarBalance", "getBusinessConnection", "getChat", "getChatAdministrators", "getChatGifts", "getChatMember", "getChatMemberCount", "getChatMenuButton", "getCustomEmojiStickers", "getFile", "getForumTopicIconStickers", "getGameHighScores", "getManagedBotAccessSettings", "getManagedBotToken", "getMe", "getMyCommands", "getMyDefaultAdministratorRights", "getMyDescription", "getMyName", "getMyShortDescription", "getMyStarBalance", "getStarTransactions", "getStickerSet", "getUpdates", "getUserChatBoosts", "getUserGifts", "getUserPersonalChatMessages", "getUserProfileAudios", "getUserProfilePhotos", "getWebhookInfo", "giftPremiumSubscription", "hideGeneralForumTopic", "leaveChat", "logOut", "pinChatMessage", "postStory", "promoteChatMember", "readBusinessMessage", "refundStarPayment", "removeBusinessAccountProfilePhoto", "removeChatVerification", "removeMyProfilePhoto", "removeUserVerification", "reopenForumTopic", "reopenGeneralForumTopic", "replaceManagedBotToken", "replaceStickerInSet", "repostStory", "restrictChatMember", "revokeChatInviteLink", "savePreparedInlineMessage", "savePreparedKeyboardButton", "sendAnimation", "sendAudio", "sendChatAction", "sendChatJoinRequestWebApp", "sendChecklist", "sendContact", "sendDice", "sendDocument", "sendGame", "sendGift", "sendInvoice", "sendLivePhoto", "sendLocation", "sendMediaGroup", "sendMessage", "sendMessageDraft", "sendPaidMedia", "sendPhoto", "sendPoll", "sendRichMessage", "sendRichMessageDraft", "sendSticker", "sendVenue", "sendVideo", "sendVideoNote", "sendVoice", "setBusinessAccountBio", "setBusinessAccountGiftSettings", "setBusinessAccountName", "setBusinessAccountProfilePhoto", "setBusinessAccountUsername", "setChatAdministratorCustomTitle", "setChatDescription", "setChatMemberTag", "setChatMenuButton", "setChatPermissions", "setChatPhoto", "setChatStickerSet", "setChatTitle", "setCustomEmojiStickerSetThumbnail", "setGameScore", "setManagedBotAccessSettings", "setMessageReaction", "setMyCommands", "setMyDefaultAdministratorRights", "setMyDescription", "setMyName", "setMyProfilePhoto", "setMyShortDescription", "setPassportDataErrors", "setStickerEmojiList", "setStickerKeywords", "setStickerMaskPosition", "setStickerPositionInSet", "setStickerSetThumbnail", "setStickerSetTitle", "setUserEmojiStatus", "setWebhook", "stopMessageLiveLocation", "stopPoll", "transferBusinessAccountStars", "transferGift", "unbanChatMember", "unbanChatSenderChat", "unhideGeneralForumTopic", "unpinAllChatMessages", "unpinAllForumTopicMessages", "unpinAllGeneralForumTopicMessages", "unpinChatMessage", "upgradeGift", "uploadStickerFile", "verifyChat", "verifyUser"];
4
+ export type TelegramMethodName = typeof TELEGRAM_METHOD_NAMES[number];
5
+ export type GeneratedMethodSpec = {
6
+ params: Record<string, unknown>;
7
+ result: unknown;
8
+ };
9
+ export type GeneratedTelegramMethodMap = {
10
+ [K in TelegramMethodName]: GeneratedMethodSpec;
11
+ };
12
+ export declare const GENERATED_METHODS: Readonly<Record<"addStickerToSet" | "answerCallbackQuery" | "answerChatJoinRequestQuery" | "answerGuestQuery" | "answerInlineQuery" | "answerPreCheckoutQuery" | "answerShippingQuery" | "answerWebAppQuery" | "approveChatJoinRequest" | "approveSuggestedPost" | "banChatMember" | "banChatSenderChat" | "close" | "closeForumTopic" | "closeGeneralForumTopic" | "convertGiftToStars" | "copyMessage" | "copyMessages" | "createChatInviteLink" | "createChatSubscriptionInviteLink" | "createForumTopic" | "createInvoiceLink" | "createNewStickerSet" | "declineChatJoinRequest" | "declineSuggestedPost" | "deleteAllMessageReactions" | "deleteBusinessMessages" | "deleteChatPhoto" | "deleteChatStickerSet" | "deleteEphemeralMessage" | "deleteForumTopic" | "deleteMessage" | "deleteMessageReaction" | "deleteMessages" | "deleteMyCommands" | "deleteStickerFromSet" | "deleteStickerSet" | "deleteStory" | "deleteWebhook" | "editChatInviteLink" | "editChatSubscriptionInviteLink" | "editEphemeralMessageCaption" | "editEphemeralMessageMedia" | "editEphemeralMessageReplyMarkup" | "editEphemeralMessageText" | "editForumTopic" | "editGeneralForumTopic" | "editMessageCaption" | "editMessageChecklist" | "editMessageLiveLocation" | "editMessageMedia" | "editMessageReplyMarkup" | "editMessageText" | "editStory" | "editUserStarSubscription" | "exportChatInviteLink" | "forwardMessage" | "forwardMessages" | "getAvailableGifts" | "getBusinessAccountGifts" | "getBusinessAccountStarBalance" | "getBusinessConnection" | "getChat" | "getChatAdministrators" | "getChatGifts" | "getChatMember" | "getChatMemberCount" | "getChatMenuButton" | "getCustomEmojiStickers" | "getFile" | "getForumTopicIconStickers" | "getGameHighScores" | "getManagedBotAccessSettings" | "getManagedBotToken" | "getMe" | "getMyCommands" | "getMyDefaultAdministratorRights" | "getMyDescription" | "getMyName" | "getMyShortDescription" | "getMyStarBalance" | "getStarTransactions" | "getStickerSet" | "getUpdates" | "getUserChatBoosts" | "getUserGifts" | "getUserPersonalChatMessages" | "getUserProfileAudios" | "getUserProfilePhotos" | "getWebhookInfo" | "giftPremiumSubscription" | "hideGeneralForumTopic" | "leaveChat" | "logOut" | "pinChatMessage" | "postStory" | "promoteChatMember" | "readBusinessMessage" | "refundStarPayment" | "removeBusinessAccountProfilePhoto" | "removeChatVerification" | "removeMyProfilePhoto" | "removeUserVerification" | "reopenForumTopic" | "reopenGeneralForumTopic" | "replaceManagedBotToken" | "replaceStickerInSet" | "repostStory" | "restrictChatMember" | "revokeChatInviteLink" | "savePreparedInlineMessage" | "savePreparedKeyboardButton" | "sendAnimation" | "sendAudio" | "sendChatAction" | "sendChatJoinRequestWebApp" | "sendChecklist" | "sendContact" | "sendDice" | "sendDocument" | "sendGame" | "sendGift" | "sendInvoice" | "sendLivePhoto" | "sendLocation" | "sendMediaGroup" | "sendMessage" | "sendMessageDraft" | "sendPaidMedia" | "sendPhoto" | "sendPoll" | "sendRichMessage" | "sendRichMessageDraft" | "sendSticker" | "sendVenue" | "sendVideo" | "sendVideoNote" | "sendVoice" | "setBusinessAccountBio" | "setBusinessAccountGiftSettings" | "setBusinessAccountName" | "setBusinessAccountProfilePhoto" | "setBusinessAccountUsername" | "setChatAdministratorCustomTitle" | "setChatDescription" | "setChatMemberTag" | "setChatMenuButton" | "setChatPermissions" | "setChatPhoto" | "setChatStickerSet" | "setChatTitle" | "setCustomEmojiStickerSetThumbnail" | "setGameScore" | "setManagedBotAccessSettings" | "setMessageReaction" | "setMyCommands" | "setMyDefaultAdministratorRights" | "setMyDescription" | "setMyName" | "setMyProfilePhoto" | "setMyShortDescription" | "setPassportDataErrors" | "setStickerEmojiList" | "setStickerKeywords" | "setStickerMaskPosition" | "setStickerPositionInSet" | "setStickerSetThumbnail" | "setStickerSetTitle" | "setUserEmojiStatus" | "setWebhook" | "stopMessageLiveLocation" | "stopPoll" | "transferBusinessAccountStars" | "transferGift" | "unbanChatMember" | "unbanChatSenderChat" | "unhideGeneralForumTopic" | "unpinAllChatMessages" | "unpinAllForumTopicMessages" | "unpinAllGeneralForumTopicMessages" | "unpinChatMessage" | "upgradeGift" | "uploadStickerFile" | "verifyChat" | "verifyUser", "addStickerToSet" | "answerCallbackQuery" | "answerChatJoinRequestQuery" | "answerGuestQuery" | "answerInlineQuery" | "answerPreCheckoutQuery" | "answerShippingQuery" | "answerWebAppQuery" | "approveChatJoinRequest" | "approveSuggestedPost" | "banChatMember" | "banChatSenderChat" | "close" | "closeForumTopic" | "closeGeneralForumTopic" | "convertGiftToStars" | "copyMessage" | "copyMessages" | "createChatInviteLink" | "createChatSubscriptionInviteLink" | "createForumTopic" | "createInvoiceLink" | "createNewStickerSet" | "declineChatJoinRequest" | "declineSuggestedPost" | "deleteAllMessageReactions" | "deleteBusinessMessages" | "deleteChatPhoto" | "deleteChatStickerSet" | "deleteEphemeralMessage" | "deleteForumTopic" | "deleteMessage" | "deleteMessageReaction" | "deleteMessages" | "deleteMyCommands" | "deleteStickerFromSet" | "deleteStickerSet" | "deleteStory" | "deleteWebhook" | "editChatInviteLink" | "editChatSubscriptionInviteLink" | "editEphemeralMessageCaption" | "editEphemeralMessageMedia" | "editEphemeralMessageReplyMarkup" | "editEphemeralMessageText" | "editForumTopic" | "editGeneralForumTopic" | "editMessageCaption" | "editMessageChecklist" | "editMessageLiveLocation" | "editMessageMedia" | "editMessageReplyMarkup" | "editMessageText" | "editStory" | "editUserStarSubscription" | "exportChatInviteLink" | "forwardMessage" | "forwardMessages" | "getAvailableGifts" | "getBusinessAccountGifts" | "getBusinessAccountStarBalance" | "getBusinessConnection" | "getChat" | "getChatAdministrators" | "getChatGifts" | "getChatMember" | "getChatMemberCount" | "getChatMenuButton" | "getCustomEmojiStickers" | "getFile" | "getForumTopicIconStickers" | "getGameHighScores" | "getManagedBotAccessSettings" | "getManagedBotToken" | "getMe" | "getMyCommands" | "getMyDefaultAdministratorRights" | "getMyDescription" | "getMyName" | "getMyShortDescription" | "getMyStarBalance" | "getStarTransactions" | "getStickerSet" | "getUpdates" | "getUserChatBoosts" | "getUserGifts" | "getUserPersonalChatMessages" | "getUserProfileAudios" | "getUserProfilePhotos" | "getWebhookInfo" | "giftPremiumSubscription" | "hideGeneralForumTopic" | "leaveChat" | "logOut" | "pinChatMessage" | "postStory" | "promoteChatMember" | "readBusinessMessage" | "refundStarPayment" | "removeBusinessAccountProfilePhoto" | "removeChatVerification" | "removeMyProfilePhoto" | "removeUserVerification" | "reopenForumTopic" | "reopenGeneralForumTopic" | "replaceManagedBotToken" | "replaceStickerInSet" | "repostStory" | "restrictChatMember" | "revokeChatInviteLink" | "savePreparedInlineMessage" | "savePreparedKeyboardButton" | "sendAnimation" | "sendAudio" | "sendChatAction" | "sendChatJoinRequestWebApp" | "sendChecklist" | "sendContact" | "sendDice" | "sendDocument" | "sendGame" | "sendGift" | "sendInvoice" | "sendLivePhoto" | "sendLocation" | "sendMediaGroup" | "sendMessage" | "sendMessageDraft" | "sendPaidMedia" | "sendPhoto" | "sendPoll" | "sendRichMessage" | "sendRichMessageDraft" | "sendSticker" | "sendVenue" | "sendVideo" | "sendVideoNote" | "sendVoice" | "setBusinessAccountBio" | "setBusinessAccountGiftSettings" | "setBusinessAccountName" | "setBusinessAccountProfilePhoto" | "setBusinessAccountUsername" | "setChatAdministratorCustomTitle" | "setChatDescription" | "setChatMemberTag" | "setChatMenuButton" | "setChatPermissions" | "setChatPhoto" | "setChatStickerSet" | "setChatTitle" | "setCustomEmojiStickerSetThumbnail" | "setGameScore" | "setManagedBotAccessSettings" | "setMessageReaction" | "setMyCommands" | "setMyDefaultAdministratorRights" | "setMyDescription" | "setMyName" | "setMyProfilePhoto" | "setMyShortDescription" | "setPassportDataErrors" | "setStickerEmojiList" | "setStickerKeywords" | "setStickerMaskPosition" | "setStickerPositionInSet" | "setStickerSetThumbnail" | "setStickerSetTitle" | "setUserEmojiStatus" | "setWebhook" | "stopMessageLiveLocation" | "stopPoll" | "transferBusinessAccountStars" | "transferGift" | "unbanChatMember" | "unbanChatSenderChat" | "unhideGeneralForumTopic" | "unpinAllChatMessages" | "unpinAllForumTopicMessages" | "unpinAllGeneralForumTopicMessages" | "unpinChatMessage" | "upgradeGift" | "uploadStickerFile" | "verifyChat" | "verifyUser">>;
13
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../generated/api.ts"],"names":[],"mappings":"AACA,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,EAAG,MAAe,CAAC;AACpD,eAAO,MAAM,qBAAqB,y7HA0LxB,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AACvF,MAAM,MAAM,0BAA0B,GAAG;KAAG,CAAC,IAAI,kBAAkB,GAAG,mBAAmB;CAAE,CAAC;AAC5F,eAAO,MAAM,iBAAiB,8tQAAyI,CAAC"}
@@ -0,0 +1,192 @@
1
+ /* eslint-disable */
2
+ /** Generated from the official Telegram Bot API documentation. Do not edit manually. */
3
+ export const TELEGRAM_API_VERSION = "10.2";
4
+ export const TELEGRAM_METHOD_NAMES = [
5
+ "addStickerToSet",
6
+ "answerCallbackQuery",
7
+ "answerChatJoinRequestQuery",
8
+ "answerGuestQuery",
9
+ "answerInlineQuery",
10
+ "answerPreCheckoutQuery",
11
+ "answerShippingQuery",
12
+ "answerWebAppQuery",
13
+ "approveChatJoinRequest",
14
+ "approveSuggestedPost",
15
+ "banChatMember",
16
+ "banChatSenderChat",
17
+ "close",
18
+ "closeForumTopic",
19
+ "closeGeneralForumTopic",
20
+ "convertGiftToStars",
21
+ "copyMessage",
22
+ "copyMessages",
23
+ "createChatInviteLink",
24
+ "createChatSubscriptionInviteLink",
25
+ "createForumTopic",
26
+ "createInvoiceLink",
27
+ "createNewStickerSet",
28
+ "declineChatJoinRequest",
29
+ "declineSuggestedPost",
30
+ "deleteAllMessageReactions",
31
+ "deleteBusinessMessages",
32
+ "deleteChatPhoto",
33
+ "deleteChatStickerSet",
34
+ "deleteEphemeralMessage",
35
+ "deleteForumTopic",
36
+ "deleteMessage",
37
+ "deleteMessageReaction",
38
+ "deleteMessages",
39
+ "deleteMyCommands",
40
+ "deleteStickerFromSet",
41
+ "deleteStickerSet",
42
+ "deleteStory",
43
+ "deleteWebhook",
44
+ "editChatInviteLink",
45
+ "editChatSubscriptionInviteLink",
46
+ "editEphemeralMessageCaption",
47
+ "editEphemeralMessageMedia",
48
+ "editEphemeralMessageReplyMarkup",
49
+ "editEphemeralMessageText",
50
+ "editForumTopic",
51
+ "editGeneralForumTopic",
52
+ "editMessageCaption",
53
+ "editMessageChecklist",
54
+ "editMessageLiveLocation",
55
+ "editMessageMedia",
56
+ "editMessageReplyMarkup",
57
+ "editMessageText",
58
+ "editStory",
59
+ "editUserStarSubscription",
60
+ "exportChatInviteLink",
61
+ "forwardMessage",
62
+ "forwardMessages",
63
+ "getAvailableGifts",
64
+ "getBusinessAccountGifts",
65
+ "getBusinessAccountStarBalance",
66
+ "getBusinessConnection",
67
+ "getChat",
68
+ "getChatAdministrators",
69
+ "getChatGifts",
70
+ "getChatMember",
71
+ "getChatMemberCount",
72
+ "getChatMenuButton",
73
+ "getCustomEmojiStickers",
74
+ "getFile",
75
+ "getForumTopicIconStickers",
76
+ "getGameHighScores",
77
+ "getManagedBotAccessSettings",
78
+ "getManagedBotToken",
79
+ "getMe",
80
+ "getMyCommands",
81
+ "getMyDefaultAdministratorRights",
82
+ "getMyDescription",
83
+ "getMyName",
84
+ "getMyShortDescription",
85
+ "getMyStarBalance",
86
+ "getStarTransactions",
87
+ "getStickerSet",
88
+ "getUpdates",
89
+ "getUserChatBoosts",
90
+ "getUserGifts",
91
+ "getUserPersonalChatMessages",
92
+ "getUserProfileAudios",
93
+ "getUserProfilePhotos",
94
+ "getWebhookInfo",
95
+ "giftPremiumSubscription",
96
+ "hideGeneralForumTopic",
97
+ "leaveChat",
98
+ "logOut",
99
+ "pinChatMessage",
100
+ "postStory",
101
+ "promoteChatMember",
102
+ "readBusinessMessage",
103
+ "refundStarPayment",
104
+ "removeBusinessAccountProfilePhoto",
105
+ "removeChatVerification",
106
+ "removeMyProfilePhoto",
107
+ "removeUserVerification",
108
+ "reopenForumTopic",
109
+ "reopenGeneralForumTopic",
110
+ "replaceManagedBotToken",
111
+ "replaceStickerInSet",
112
+ "repostStory",
113
+ "restrictChatMember",
114
+ "revokeChatInviteLink",
115
+ "savePreparedInlineMessage",
116
+ "savePreparedKeyboardButton",
117
+ "sendAnimation",
118
+ "sendAudio",
119
+ "sendChatAction",
120
+ "sendChatJoinRequestWebApp",
121
+ "sendChecklist",
122
+ "sendContact",
123
+ "sendDice",
124
+ "sendDocument",
125
+ "sendGame",
126
+ "sendGift",
127
+ "sendInvoice",
128
+ "sendLivePhoto",
129
+ "sendLocation",
130
+ "sendMediaGroup",
131
+ "sendMessage",
132
+ "sendMessageDraft",
133
+ "sendPaidMedia",
134
+ "sendPhoto",
135
+ "sendPoll",
136
+ "sendRichMessage",
137
+ "sendRichMessageDraft",
138
+ "sendSticker",
139
+ "sendVenue",
140
+ "sendVideo",
141
+ "sendVideoNote",
142
+ "sendVoice",
143
+ "setBusinessAccountBio",
144
+ "setBusinessAccountGiftSettings",
145
+ "setBusinessAccountName",
146
+ "setBusinessAccountProfilePhoto",
147
+ "setBusinessAccountUsername",
148
+ "setChatAdministratorCustomTitle",
149
+ "setChatDescription",
150
+ "setChatMemberTag",
151
+ "setChatMenuButton",
152
+ "setChatPermissions",
153
+ "setChatPhoto",
154
+ "setChatStickerSet",
155
+ "setChatTitle",
156
+ "setCustomEmojiStickerSetThumbnail",
157
+ "setGameScore",
158
+ "setManagedBotAccessSettings",
159
+ "setMessageReaction",
160
+ "setMyCommands",
161
+ "setMyDefaultAdministratorRights",
162
+ "setMyDescription",
163
+ "setMyName",
164
+ "setMyProfilePhoto",
165
+ "setMyShortDescription",
166
+ "setPassportDataErrors",
167
+ "setStickerEmojiList",
168
+ "setStickerKeywords",
169
+ "setStickerMaskPosition",
170
+ "setStickerPositionInSet",
171
+ "setStickerSetThumbnail",
172
+ "setStickerSetTitle",
173
+ "setUserEmojiStatus",
174
+ "setWebhook",
175
+ "stopMessageLiveLocation",
176
+ "stopPoll",
177
+ "transferBusinessAccountStars",
178
+ "transferGift",
179
+ "unbanChatMember",
180
+ "unbanChatSenderChat",
181
+ "unhideGeneralForumTopic",
182
+ "unpinAllChatMessages",
183
+ "unpinAllForumTopicMessages",
184
+ "unpinAllGeneralForumTopicMessages",
185
+ "unpinChatMessage",
186
+ "upgradeGift",
187
+ "uploadStickerFile",
188
+ "verifyChat",
189
+ "verifyUser"
190
+ ];
191
+ export const GENERATED_METHODS = Object.freeze(Object.fromEntries(TELEGRAM_METHOD_NAMES.map((name) => [name, name])));
192
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../generated/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { TelegramMethodName } from "../../generated/api.js";
2
+ import type { ApiCallArgs, ApiParams, ApiResult, TelegramResponse } from "./types.js";
3
+ import type { Transport } from "./transport.js";
4
+ export interface ApiHookContext {
5
+ method: string;
6
+ payload: unknown;
7
+ startedAt: number;
8
+ durationMs?: number;
9
+ response?: TelegramResponse<unknown>;
10
+ error?: unknown;
11
+ }
12
+ export interface ApiClientOptions {
13
+ transport: Transport;
14
+ hooks?: {
15
+ onRequest?: (context: ApiHookContext) => void | Promise<void>;
16
+ onResponse?: (context: ApiHookContext) => void | Promise<void>;
17
+ onError?: (context: ApiHookContext) => void | Promise<void>;
18
+ };
19
+ }
20
+ export type ApiMethods = {
21
+ [M in TelegramMethodName]: (...args: ApiCallArgs<M>) => Promise<ApiResult<M>>;
22
+ };
23
+ export declare class ApiClient {
24
+ readonly methods: ApiMethods;
25
+ private readonly transport;
26
+ private readonly hooks;
27
+ constructor(options: ApiClientOptions);
28
+ call<M extends TelegramMethodName>(method: M, ...args: ApiCallArgs<M>): Promise<ApiResult<M>>;
29
+ request<M extends TelegramMethodName>(method: M, payload?: ApiParams<M>, signal?: AbortSignal): Promise<ApiResult<M>>;
30
+ raw(method: string, payload?: Record<string, unknown>, signal?: AbortSignal): Promise<unknown>;
31
+ }
32
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAElE,MAAM,WAAW,cAAc;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;AACnK,MAAM,WAAW,gBAAgB;IAAG,SAAS,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAA;CAAE;AAClQ,MAAM,MAAM,UAAU,GAAG;KAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE3G,qBAAa,SAAS;IACpB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;gBACnD,OAAO,EAAE,gBAAgB;IAK/B,IAAI,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAqBrH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAQrG"}
@@ -0,0 +1,50 @@
1
+ import { TelegramError, telegramErrorFromResponse } from "./errors.js";
2
+ export class ApiClient {
3
+ methods;
4
+ transport;
5
+ hooks;
6
+ constructor(options) {
7
+ this.transport = options.transport;
8
+ this.hooks = options.hooks ?? {};
9
+ this.methods = new Proxy({}, { get: (_target, property) => typeof property === "string" ? (payload) => this.request(property, payload) : undefined });
10
+ }
11
+ async call(method, ...args) { return this.request(method, args[0]); }
12
+ async request(method, payload, signal) {
13
+ const context = { method, payload, startedAt: Date.now() };
14
+ await this.hooks.onRequest?.(context);
15
+ try {
16
+ const request = { method };
17
+ if (payload !== undefined)
18
+ request.payload = payload;
19
+ if (signal !== undefined)
20
+ request.signal = signal;
21
+ const response = await this.transport.request(request);
22
+ context.durationMs = Date.now() - context.startedAt;
23
+ context.response = response.data;
24
+ await this.hooks.onResponse?.(context);
25
+ if (!response.data.ok || response.data.result === undefined)
26
+ throw telegramErrorFromResponse(response.data, { method, payload, status: response.status });
27
+ return response.data.result;
28
+ }
29
+ catch (error) {
30
+ context.durationMs = Date.now() - context.startedAt;
31
+ context.error = error;
32
+ await this.hooks.onError?.(context);
33
+ if (error instanceof TelegramError)
34
+ throw error;
35
+ throw error;
36
+ }
37
+ }
38
+ async raw(method, payload, signal) {
39
+ const request = { method };
40
+ if (payload !== undefined)
41
+ request.payload = payload;
42
+ if (signal !== undefined)
43
+ request.signal = signal;
44
+ const response = await this.transport.request(request);
45
+ if (!response.data.ok)
46
+ throw telegramErrorFromResponse(response.data, { method, payload, status: response.status });
47
+ return response.data.result;
48
+ }
49
+ }
50
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"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"}