@xbibzlibrary/telebibz 0.1.19 → 0.2.1
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/CHANGELOG.md +28 -8
- package/CONTRIBUTING.md +2 -2
- package/README.id.md +25 -5
- package/README.md +26 -6
- package/README.zh-CN.md +25 -5
- package/RELEASE_AUTOMATION.md +17 -5
- package/bin/telebibz.mjs +1 -1
- package/dist/src/api/client.d.ts +3 -1
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +3 -1
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/transport.d.ts +3 -1
- package/dist/src/api/transport.d.ts.map +1 -1
- package/dist/src/api/transport.js +3 -2
- package/dist/src/api/transport.js.map +1 -1
- package/dist/src/branding/terminal.d.ts +62 -0
- package/dist/src/branding/terminal.d.ts.map +1 -1
- package/dist/src/branding/terminal.js +258 -0
- package/dist/src/branding/terminal.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +7 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/context/context.d.ts +24 -1
- package/dist/src/context/context.d.ts.map +1 -1
- package/dist/src/context/context.js +102 -8
- package/dist/src/context/context.js.map +1 -1
- package/dist/src/core/bot.d.ts +18 -1
- package/dist/src/core/bot.d.ts.map +1 -1
- package/dist/src/core/bot.js +106 -23
- package/dist/src/core/bot.js.map +1 -1
- package/dist/src/keyboard/index.d.ts +12 -0
- package/dist/src/keyboard/index.d.ts.map +1 -1
- package/dist/src/keyboard/index.js +13 -1
- package/dist/src/keyboard/index.js.map +1 -1
- package/dist/src/observability/logger.d.ts +28 -1
- package/dist/src/observability/logger.d.ts.map +1 -1
- package/dist/src/observability/logger.js +110 -0
- package/dist/src/observability/logger.js.map +1 -1
- package/dist/src/plugins/plugin.d.ts +2 -0
- package/dist/src/plugins/plugin.d.ts.map +1 -1
- package/dist/src/plugins/plugin.js +11 -4
- package/dist/src/plugins/plugin.js.map +1 -1
- package/dist/src/router/router.d.ts +19 -0
- package/dist/src/router/router.d.ts.map +1 -1
- package/dist/src/router/router.js +125 -23
- package/dist/src/router/router.js.map +1 -1
- package/dist/src/state/forms.d.ts +0 -1
- package/dist/src/state/forms.d.ts.map +1 -1
- package/dist/src/state/forms.js +27 -24
- package/dist/src/state/forms.js.map +1 -1
- package/dist/src/storage/storage.d.ts +10 -0
- package/dist/src/storage/storage.d.ts.map +1 -1
- package/dist/src/storage/storage.js +20 -2
- package/dist/src/storage/storage.js.map +1 -1
- package/dist/src/utils/text.d.ts +22 -0
- package/dist/src/utils/text.d.ts.map +1 -1
- package/dist/src/utils/text.js +0 -0
- package/dist/src/utils/text.js.map +1 -1
- package/dist/src/webhook/handler.d.ts +3 -0
- package/dist/src/webhook/handler.d.ts.map +1 -1
- package/dist/src/webhook/handler.js +85 -0
- package/dist/src/webhook/handler.js.map +1 -1
- package/dist-cjs/src/api/client.js +3 -1
- package/dist-cjs/src/api/transport.js +3 -2
- package/dist-cjs/src/branding/terminal.js +264 -1
- package/dist-cjs/src/cli.js +7 -3
- package/dist-cjs/src/context/context.js +102 -8
- package/dist-cjs/src/core/bot.js +104 -21
- package/dist-cjs/src/keyboard/index.js +13 -1
- package/dist-cjs/src/observability/logger.js +113 -1
- package/dist-cjs/src/plugins/plugin.js +11 -4
- package/dist-cjs/src/router/router.js +126 -24
- package/dist-cjs/src/state/forms.js +27 -24
- package/dist-cjs/src/storage/storage.js +20 -2
- package/dist-cjs/src/utils/text.js +0 -0
- package/dist-cjs/src/webhook/handler.js +86 -0
- package/docs/API.id.md +57 -3
- package/docs/API.md +59 -3
- package/docs/API.zh-CN.md +56 -2
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,20 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 0.2.0 — 2026-08-29
|
|
4
|
+
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
- Node.js 22 is now the minimum supported runtime (`engines.node: ">=22"`); CI tests Node 22 and 24. The TypeScript target moves to ES2023.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- `bot.on(filter, handler)` update-type filters with payload narrowing: `bot.on("message:photo")`, `bot.on("callback_query:data")`, or an array like `["message:text", "callback_query:data"]`. Invalid filters throw at registration time.
|
|
12
|
+
- `bot.hears(trigger, handler)` for exact text or `RegExp` message matching.
|
|
13
|
+
- `bot.catch(handler)` error boundary: handler failures are logged, emitted as `update:error`/`bot:error`, and routed to the handler instead of rejecting `handleUpdate()`; webhooks answer `200` and polling continues.
|
|
14
|
+
- Extended context senders with automatic quote-reply: `replyWithAnimation`, `replyWithVideoNote`, `replyWithSticker`, `replyWithMediaGroup`, `replyWithLocation`, `replyWithVenue`, `replyWithContact`, `replyWithPoll`, and `replyWithDice`.
|
|
15
|
+
- Animated terminal startup experience (on by default, `branding: false` to disable): typing effect for `Installing Dependencies......`, a glass progress bar with a sweeping highlight, and the animated rainbow ASCII banner `Tele Bibz` (figlet `Speed` font) that flows until the bot connects and then freezes with `✓ Connected as @<username>`.
|
|
16
|
+
- Human-readable incoming update logs: `[ => ] Message From {id} {nickname} {dd/mm/yyyy} {hh:mm:ss}` plus an indented content line. Regular message/command text is truncated to 50 characters; callback button data is shown in full. Errors print in red with the full stack. Non-interactive stdout falls back to plain output; `logger.format: "json"` emits structured `update.received` entries instead.
|
|
17
|
+
- Branding helpers exported for applications: `runStartupSequence()`, `startTeleBibzBanner()`, `printTeleBibzBanner()`, `paintRainbow()`, `printStatusLine()`, plus `Logger.incoming()` and `describeIncomingUpdate()`.
|
|
18
|
+
- `TransportRequest.timeoutMs` for per-request timeouts, honored by `FetchTransport` and `ApiClient.request()`.
|
|
19
|
+
- Storage-backed conversations, full five-field cron parsing, scheduler error hooks, permission-aware menus, `MenuController`, Web App init-data validation, PaymentsClient, and vendored Telegram declarations.
|
|
4
20
|
|
|
5
21
|
### Fixed
|
|
6
22
|
|
|
7
|
-
-
|
|
23
|
+
- Restored a green build: `npm run typecheck`, `lint`, `test:types`, `test:examples`, and `build` failed under TypeScript 5.9 with `exactOptionalPropertyTypes` (`Context.me` assignment, `RoutableContext.me` index-signature constraint, and an invalid `webhookCallback` cast).
|
|
24
|
+
- The published `telebibz` CLI binary crashed with `MODULE_NOT_FOUND` because `bin/telebibz.mjs` imported `../dist/cli.js`; the build emits `dist/src/cli.js`. `release:check` now verifies every bin import resolves inside the tarball.
|
|
25
|
+
- Long polling no longer races its own transport timeout: `getUpdates` now uses a per-request timeout of the polling timeout plus a 10-second buffer instead of the flat 30s transport default, which aborted healthy connections the moment Telegram responded.
|
|
26
|
+
- `bot.stop()` now aborts the in-flight long-poll request (the polling `AbortSignal` is passed through to the transport), so shutdown no longer blocks for up to the full polling timeout.
|
|
27
|
+
- `JsonFileStorage` now persists `expiresAt` metadata, so values written with a TTL no longer silently become permanent after a restart.
|
|
28
|
+
- `webhookCallback` now actually supports Koa-style contexts (`status`/`body`), reads secret-token headers from fetch `Request` header maps, and parses bodies from web-standard `Request` objects instead of misreading their `ReadableStream` `body` as a pre-parsed update.
|
|
29
|
+
- Passing `reply_parameters` in `extra` no longer discards the automatic quote `message_id`; user options now merge with it across all `reply`/`replyWith*` senders.
|
|
30
|
+
- Plugins install exactly once; `bot.restart()` no longer double-registers plugin middleware and routes.
|
|
31
|
+
- Callback-query contexts resolve `message` and `chat` from `callback_query.message`, so `ctx.reply()`, `ctx.edit()`, and `ctx.delete()` work for button callbacks.
|
|
8
32
|
- Router matching is first-match by default; explicit `matchMode: "all"` preserves deliberate fan-out without accidental double replies.
|
|
9
33
|
- Polling isolates handler failures per update, continues the remainder of a batch, emits `update:error`, and uses abortable reconnect backoff.
|
|
10
|
-
- Regex matchers reset `lastIndex` before reuse.
|
|
11
34
|
|
|
12
|
-
###
|
|
35
|
+
### Removed
|
|
13
36
|
|
|
14
|
-
-
|
|
15
|
-
- Storage-backed conversations, full five-field cron parsing, scheduler error hooks, permission-aware menus, `MenuController`, Web App init-data validation, PaymentsClient, and vendored Telegram declarations.
|
|
16
|
-
- Callback-update test fixtures and expanded failure-path/regression coverage.
|
|
17
|
-
- Code of Conduct, Contributing Guide, Contribution Rules, Governance, Support Policy, expanded Security Policy, third-party Notice, CODEOWNERS, Dependabot configuration, and complete GitHub issue/PR templates.
|
|
37
|
+
- Development report files (`TELEBIBZ_FINAL_REPORT.md`, `TELEBIBZ_E2E_REPORT.md`, `NPM_RELEASE_REPORT.md`) and the feature-matrix row for an approval gate that was never part of the source tree.
|
|
18
38
|
|
|
19
39
|
## 0.1.2 — 2026-08-19
|
|
20
40
|
|
package/CONTRIBUTING.md
CHANGED
|
@@ -10,7 +10,7 @@ Check existing issues and pull requests before opening a new one. For a defect,
|
|
|
10
10
|
|
|
11
11
|
## Local setup
|
|
12
12
|
|
|
13
|
-
The project requires Node.js `>=
|
|
13
|
+
The project requires Node.js `>=22` and uses npm for release-compatible commands. Install dependencies and run the baseline checks:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
npm ci
|
|
@@ -32,7 +32,7 @@ Create a focused branch from `main`. Keep unrelated refactors out of a feature o
|
|
|
32
32
|
|
|
33
33
|
## Implementation expectations
|
|
34
34
|
|
|
35
|
-
Public behavior must be implemented in TypeScript with strict typing. Do not add fake responses, silent stubs, undocumented breaking behavior, or untested branches. Preserve ESM and CommonJS builds, zero runtime vendor dependencies in the core package, Node.js `>=
|
|
35
|
+
Public behavior must be implemented in TypeScript with strict typing. Do not add fake responses, silent stubs, undocumented breaking behavior, or untested branches. Preserve ESM and CommonJS builds, zero runtime vendor dependencies in the core package, Node.js `>=22` compatibility, and the existing package export map.
|
|
36
36
|
|
|
37
37
|
Changes to routing, context, lifecycle, transport, storage, queue, scheduler, approval, generated API declarations, or release automation require regression tests. Changes to a public function, class, method, option, error, event, or generated method require a corresponding API documentation update. Changes to examples require `npm run test:examples` and must use placeholders instead of credentials. Changes that affect package contents must pass `release:check` and `npm pack --dry-run`.
|
|
38
38
|
|
package/README.id.md
CHANGED
|
@@ -27,7 +27,7 @@ Showcase komunitas: [SHOWCASE.md](SHOWCASE.md)
|
|
|
27
27
|
npm install @xbibzlibrary/telebibz
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Node.js **
|
|
30
|
+
Node.js **22 atau lebih baru** diperlukan.
|
|
31
31
|
|
|
32
32
|
## Bot sederhana
|
|
33
33
|
|
|
@@ -67,9 +67,13 @@ bot.use(async (ctx, next) => {
|
|
|
67
67
|
bot.command("help", async (ctx) => { await ctx.reply("Bantuan tersedia."); });
|
|
68
68
|
bot.onRegex(/^order:(\\d+)$/, async (ctx) => { await ctx.reply("Order diterima."); });
|
|
69
69
|
bot.callback("profile:*", async (ctx) => { await ctx.answerCallbackQuery("Dibuka."); });
|
|
70
|
+
bot.on("message:photo", async (ctx) => { await ctx.reply("Foto yang bagus."); });
|
|
71
|
+
bot.on(["message:text", "callback_query:data"], async (ctx) => { await ctx.reply("Diterima."); });
|
|
72
|
+
bot.hears("ping", async (ctx) => { await ctx.reply("pong"); });
|
|
73
|
+
bot.catch(async (error, ctx) => { await ctx.reply("Terjadi kesalahan."); });
|
|
70
74
|
```
|
|
71
75
|
|
|
72
|
-
Router mendukung command, text, regex, pola callback, predikat kustom, router bersarang, middleware per rute, dan prioritas rute.
|
|
76
|
+
Router mendukung command, text, regex, pola callback, filter tipe update (`on`), predikat kustom, router bersarang, middleware per rute, dan prioritas rute. `bot.catch()` mendaftarkan error boundary: kegagalan handler diarahkan ke sana alih-alih menolak update.
|
|
73
77
|
|
|
74
78
|
## Telegram API
|
|
75
79
|
|
|
@@ -103,7 +107,7 @@ Builder hanya menghasilkan payload keyboard native Telegram. UI HTML/CSS memerlu
|
|
|
103
107
|
|
|
104
108
|
## Startup dan log terminal
|
|
105
109
|
|
|
106
|
-
|
|
110
|
+
Logger mengeluarkan baris terminal yang ringkas dan mudah dibaca dengan level berwarna serta konteks terstruktur. Level log: `silent`, `error`, `warn`, `info`, `debug`, dan `trace`; nilai sensitif di-redact; error dicetak merah lengkap dengan stack. Gunakan `format: "json"` untuk log terstruktur, dan `includeUpdateContent: true` hanya bila teks pesan atau data callback memang diperlukan.
|
|
107
111
|
|
|
108
112
|
## Webhook
|
|
109
113
|
|
|
@@ -122,9 +126,24 @@ const handler = createWebhookHandler(bot, {
|
|
|
122
126
|
|
|
123
127
|
Paket menyediakan `MemoryStorage` dengan TTL dan pembaruan atomik, `JsonFileStorage`, `RedisStorage`, `SqlStorage`, `MongoStorage`, persistent application state storage, session bot, conversation dan form berbasis Storage, menu berbasis permission, pagination `MenuController`, `MemoryCache`, token-bucket limiter, task queue dengan retry/backoff/concurrency/delay/cancel, serta scheduler interval, one-shot, dan cron lima field lengkap. Adapter Redis, SQL, dan Mongo memakai driver kecil sehingga core package tetap tanpa runtime dependency vendor.
|
|
124
128
|
|
|
129
|
+
## Pengalaman terminal
|
|
130
|
+
|
|
131
|
+
Saat bot dinyalakan di terminal interaktif (`npm start`, `node index.js`, `telebibz start`), telebibz memainkan urutan startup: efek ketik `Installing Dependencies......`, glass progress bar dengan kilau menyapu, dan banner ASCII rainbow animasi **Tele Bibz** (font figlet `Speed`) yang terus mengalir sampai bot terhubung, lalu diam dengan `✓ Connected as @<username>`.
|
|
132
|
+
|
|
133
|
+
Setelah itu, setiap update yang masuk ditampilkan dalam baris log yang mudah dibaca, dan error otomatis berwarna merah lengkap dengan stack-nya:
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
[ => ] Message From 123456789 John Doe 29/08/2026 15:04:05
|
|
137
|
+
↳ Text: /start
|
|
138
|
+
[ => ] Callback From 123456789 John Doe 29/08/2026 15:04:07
|
|
139
|
+
↳ Data: menu:open
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Teks pesan/command biasa dibatasi 50 karakter; data tombol callback ditampilkan penuh. Matikan dengan `branding: false` pada `Bot`, atau pakai `logger.format: "json"` untuk log terstruktur. Output non-interaktif (pipe, Docker, CI) otomatis fallback ke teks polos tanpa animasi.
|
|
143
|
+
|
|
125
144
|
## CLI
|
|
126
145
|
|
|
127
|
-
|
|
146
|
+
Command CLI seperti `telebibz doctor`, `init`, dan `webhook` diawali banner rainbow `Tele Bibz`. Animasi startup otomatis fallback ke output statis bersih saat stdout bukan TTY.
|
|
128
147
|
|
|
129
148
|
```bash
|
|
130
149
|
npx telebibz init my-bot
|
|
@@ -136,8 +155,9 @@ npx telebibz test
|
|
|
136
155
|
Branding terminal juga dapat dicetak dari aplikasi:
|
|
137
156
|
|
|
138
157
|
```ts
|
|
139
|
-
import { printTerminalBranding } from "@xbibzlibrary/telebibz";
|
|
158
|
+
import { printTeleBibzBanner, printTerminalBranding } from "@xbibzlibrary/telebibz";
|
|
140
159
|
|
|
160
|
+
printTeleBibzBanner({ subtitle: "Bot saya" });
|
|
141
161
|
printTerminalBranding();
|
|
142
162
|
```
|
|
143
163
|
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://www.npmjs.com/package/@xbibzlibrary/telebibz)
|
|
8
8
|
[](https://www.npmjs.com/package/@xbibzlibrary/telebibz)
|
|
9
9
|
|
|
10
|
-
**`@xbibzlibrary/telebibz`** is a
|
|
10
|
+
**`@xbibzlibrary/telebibz`** is a Telegram Bot SDK and framework for Node.js and TypeScript. It provides a typed API client, polling, routing, middleware, context helpers, keyboard builders, state/session primitives, webhooks, queues, scheduling, caching, plugin lifecycle, colorful terminal logging, CLI tooling, and testing utilities.
|
|
11
11
|
|
|
12
12
|
## Documentation languages
|
|
13
13
|
|
|
@@ -29,7 +29,7 @@ Community showcase: [SHOWCASE.md](SHOWCASE.md)
|
|
|
29
29
|
npm install @xbibzlibrary/telebibz
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Node.js **
|
|
32
|
+
Node.js **22 or newer** is required.
|
|
33
33
|
|
|
34
34
|
## Minimal bot
|
|
35
35
|
|
|
@@ -69,9 +69,13 @@ bot.use(async (ctx, next) => {
|
|
|
69
69
|
bot.command("help", async (ctx) => { await ctx.reply("Help is available."); });
|
|
70
70
|
bot.onRegex(/^order:(\\d+)$/, async (ctx) => { await ctx.reply("Order received."); });
|
|
71
71
|
bot.callback("profile:*", async (ctx) => { await ctx.answerCallbackQuery("Opened."); });
|
|
72
|
+
bot.on("message:photo", async (ctx) => { await ctx.reply("Nice photo."); });
|
|
73
|
+
bot.on(["message:text", "callback_query:data"], async (ctx) => { await ctx.reply("Got it."); });
|
|
74
|
+
bot.hears("ping", async (ctx) => { await ctx.reply("pong"); });
|
|
75
|
+
bot.catch(async (error, ctx) => { await ctx.reply("Something went wrong."); });
|
|
72
76
|
```
|
|
73
77
|
|
|
74
|
-
The router supports commands, exact text, regular expressions, callback patterns, custom predicates, nested routers, per-route middleware, and route priority.
|
|
78
|
+
The router supports commands, exact text, regular expressions, callback patterns, update-type filters (`on`), custom predicates, nested routers, per-route middleware, and route priority. `bot.catch()` registers an error boundary: handler failures are routed there instead of rejecting the update.
|
|
75
79
|
|
|
76
80
|
## Telegram API
|
|
77
81
|
|
|
@@ -103,7 +107,7 @@ Builders produce native Telegram keyboard payloads. HTML/CSS interfaces require
|
|
|
103
107
|
|
|
104
108
|
## Colorful runtime logging
|
|
105
109
|
|
|
106
|
-
|
|
110
|
+
The logger emits compact, readable terminal lines with colored levels and structured context. Log levels are `silent`, `error`, `warn`, `info`, `debug`, and `trace`; sensitive values are redacted; errors print in red with the full stack. Use `format: "json"` for machine ingestion and `includeUpdateContent: true` only when message text or callback data is explicitly required.
|
|
107
111
|
|
|
108
112
|
```ts
|
|
109
113
|
const bot = new Bot({
|
|
@@ -150,9 +154,24 @@ const handler = createWebhookHandler(bot, {
|
|
|
150
154
|
|
|
151
155
|
The package provides `MemoryStorage` with TTL and serialized per-key updates, `JsonFileStorage`, `RedisStorage`, `SqlStorage`, `MongoStorage`, persistent application state storage, bot sessions, storage-backed conversations and forms, permission-aware menus, `MenuController` pagination, `MemoryCache`, a token-bucket limiter, a task queue with retry/backoff/concurrency/delay/cancel, and schedulers for intervals, one-shot tasks, and full five-field cron expressions. Redis, SQL, and Mongo adapters use small driver interfaces so the core package remains free of vendor runtime dependencies.
|
|
152
156
|
|
|
157
|
+
## Terminal experience
|
|
158
|
+
|
|
159
|
+
When the bot starts on an interactive terminal (`npm start`, `node index.js`, `telebibz start`), telebibz plays a startup sequence: a typing effect for `Installing Dependencies......`, a glass progress bar with a sweeping highlight, and the animated rainbow ASCII banner **Tele Bibz** (figlet `Speed` font) that keeps flowing until the bot connects, then freezes with `✓ Connected as @<username>`.
|
|
160
|
+
|
|
161
|
+
Afterwards, every incoming update is logged on a human-readable line, and errors are printed in red with the full stack:
|
|
162
|
+
|
|
163
|
+
```text
|
|
164
|
+
[ => ] Message From 123456789 John Doe 29/08/2026 15:04:05
|
|
165
|
+
↳ Text: /start
|
|
166
|
+
[ => ] Callback From 123456789 John Doe 29/08/2026 15:04:07
|
|
167
|
+
↳ Data: menu:open
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Message and command text is truncated to 50 characters; callback button data is shown in full. Pass `branding: false` to `Bot` to disable the sequence, or set `logger.format: "json"` for structured log ingestion. Non-interactive stdout (pipes, Docker, CI) automatically falls back to plain output without animations.
|
|
171
|
+
|
|
153
172
|
## CLI
|
|
154
173
|
|
|
155
|
-
|
|
174
|
+
CLI commands such as `telebibz doctor`, `init`, and `webhook` start with the rainbow `Tele Bibz` banner. Startup animation automatically falls back to clean static output when stdout is not a TTY.
|
|
156
175
|
|
|
157
176
|
```bash
|
|
158
177
|
npm start
|
|
@@ -165,8 +184,9 @@ npx telebibz test
|
|
|
165
184
|
Applications can print the same terminal branding explicitly:
|
|
166
185
|
|
|
167
186
|
```ts
|
|
168
|
-
import { printTerminalBranding } from "@xbibzlibrary/telebibz";
|
|
187
|
+
import { printTeleBibzBanner, printTerminalBranding } from "@xbibzlibrary/telebibz";
|
|
169
188
|
|
|
189
|
+
printTeleBibzBanner({ subtitle: "My bot" });
|
|
170
190
|
printTerminalBranding();
|
|
171
191
|
```
|
|
172
192
|
|
package/README.zh-CN.md
CHANGED
|
@@ -27,7 +27,7 @@ GitHub Packages 指南:[English](docs/GITHUB_PACKAGES.md) · [Bahasa Indonesia
|
|
|
27
27
|
npm install @xbibzlibrary/telebibz
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
需要 Node.js **
|
|
30
|
+
需要 Node.js **22 或更高版本**。
|
|
31
31
|
|
|
32
32
|
## 简单机器人
|
|
33
33
|
|
|
@@ -67,9 +67,13 @@ bot.use(async (ctx, next) => {
|
|
|
67
67
|
bot.command("help", async (ctx) => { await ctx.reply("Bantuan tersedia."); });
|
|
68
68
|
bot.onRegex(/^order:(\\d+)$/, async (ctx) => { await ctx.reply("Order diterima."); });
|
|
69
69
|
bot.callback("profile:*", async (ctx) => { await ctx.answerCallbackQuery("Dibuka."); });
|
|
70
|
+
bot.on("message:photo", async (ctx) => { await ctx.reply("照片不错。"); });
|
|
71
|
+
bot.on(["message:text", "callback_query:data"], async (ctx) => { await ctx.reply("收到。"); });
|
|
72
|
+
bot.hears("ping", async (ctx) => { await ctx.reply("pong"); });
|
|
73
|
+
bot.catch(async (error, ctx) => { await ctx.reply("出错了。"); });
|
|
70
74
|
```
|
|
71
75
|
|
|
72
|
-
|
|
76
|
+
路由器支持命令、文本、正则、回调模式、更新类型过滤器(`on`)、自定义谓词、嵌套路由器、每条路由的中间件,以及路由优先级。`bot.catch()` 注册错误边界:处理器失败会转发到那里,而不是拒绝整个 update。
|
|
73
77
|
|
|
74
78
|
## Telegram API
|
|
75
79
|
|
|
@@ -103,7 +107,7 @@ await ctx.reply("Pilih menu:", { reply_markup: keyboard });
|
|
|
103
107
|
|
|
104
108
|
## Startup and terminal logs
|
|
105
109
|
|
|
106
|
-
|
|
110
|
+
The logger emits compact, readable terminal lines with colored levels and structured context. Log levels are `silent`, `error`, `warn`, `info`, `debug`, and `trace`; sensitive values are redacted; errors print in red with the full stack. Use `format: "json"` for machine ingestion and `includeUpdateContent: true` only when message text or callback data is explicitly required.
|
|
107
111
|
|
|
108
112
|
## Webhook
|
|
109
113
|
|
|
@@ -122,9 +126,24 @@ const handler = createWebhookHandler(bot, {
|
|
|
122
126
|
|
|
123
127
|
该包提供带 TTL 和原子更新的 `MemoryStorage`、`JsonFileStorage`、`RedisStorage`、`SqlStorage`、`MongoStorage`、bot session、基于 Storage 的 conversation/form、基于 permission 的菜单、`MenuController` 分页、`MemoryCache`、令牌桶限流器、支持重试/退避/并发/延迟/取消的任务队列,以及间隔、一次性和完整五字段 cron 的调度器。Redis、SQL 和 Mongo 适配器使用小型 driver interface,因此 core package 不需要 vendor runtime dependency。
|
|
124
128
|
|
|
129
|
+
## 终端体验
|
|
130
|
+
|
|
131
|
+
当 bot 在交互式终端启动时(`npm start`、`node index.js`、`telebibz start`),telebibz 会播放启动序列:`Installing Dependencies......` 打字效果、带扫过高光的 glass 进度条,以及动画彩虹 ASCII 横幅 **Tele Bibz**(figlet `Speed` 字体)——彩虹持续流动直到 bot 连接成功,随后定格并显示 `✓ Connected as @<username>`。
|
|
132
|
+
|
|
133
|
+
之后,每一条进入的 update 都会以易读的格式输出,错误自动以红色打印并附带完整堆栈:
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
[ => ] Message From 123456789 John Doe 29/08/2026 15:04:05
|
|
137
|
+
↳ Text: /start
|
|
138
|
+
[ => ] Callback From 123456789 John Doe 29/08/2026 15:04:07
|
|
139
|
+
↳ Data: menu:open
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
普通消息与命令文本截断为 50 个字符;回调按钮数据完整显示。向 `Bot` 传入 `branding: false` 可关闭启动序列,或设置 `logger.format: "json"` 获取结构化日志。非交互 stdout(管道、Docker、CI)会自动回退到无动画的纯文本输出。
|
|
143
|
+
|
|
125
144
|
## CLI
|
|
126
145
|
|
|
127
|
-
|
|
146
|
+
`telebibz doctor`、`init`、`webhook` 等 CLI command 以彩虹 `Tele Bibz` 横幅开始。当 stdout 不是 TTY 时,启动动画自动回退为干净的静态输出。
|
|
128
147
|
|
|
129
148
|
```bash
|
|
130
149
|
npx telebibz init my-bot
|
|
@@ -136,8 +155,9 @@ npx telebibz test
|
|
|
136
155
|
也可以在应用中打印相同的 terminal branding:
|
|
137
156
|
|
|
138
157
|
```ts
|
|
139
|
-
import { printTerminalBranding } from "@xbibzlibrary/telebibz";
|
|
158
|
+
import { printTeleBibzBanner, printTerminalBranding } from "@xbibzlibrary/telebibz";
|
|
140
159
|
|
|
160
|
+
printTeleBibzBanner({ subtitle: "My bot" });
|
|
141
161
|
printTerminalBranding();
|
|
142
162
|
```
|
|
143
163
|
|
package/RELEASE_AUTOMATION.md
CHANGED
|
@@ -8,17 +8,29 @@ Setiap push ke branch `main` menjalankan workflow `.github/workflows/auto-publis
|
|
|
8
8
|
|
|
9
9
|
| Tahap | Perilaku |
|
|
10
10
|
|---|---|
|
|
11
|
-
| Checkout | Mengambil seluruh history
|
|
11
|
+
| Checkout | Mengambil seluruh history beserta tag (`fetch-depth: 0` + `fetch-tags: true`) agar analisis commit dan pembuatan tag akurat. |
|
|
12
12
|
| Install | Menjalankan `npm ci --ignore-scripts`. |
|
|
13
|
-
| Version | Membaca versi
|
|
13
|
+
| Version | Membaca versi `package.json`, versi latest npm, dan commit sejak tag release terakhir, lalu memilih versi berikutnya (lihat aturan di bawah). |
|
|
14
14
|
| Verification | Menjalankan typecheck, type-level tests, lint, runtime tests, build ESM/CommonJS, security audit, dan release check. |
|
|
15
15
|
| Immutable guard | Menolak publish jika versi target sudah ada di npmjs. |
|
|
16
|
-
| Git sync | Commit otomatis `chore(release): vX.Y.Z [skip release]
|
|
16
|
+
| Git sync | Commit otomatis `chore(release): vX.Y.Z [skip release]` (dilewati bila `package.json` sudah berada di versi target), membuat annotated tag `vX.Y.Z`, lalu push commit dan tag ke GitHub. |
|
|
17
17
|
| npmjs publish | Menerbitkan package public menggunakan `NPM_TOKEN`; provenance dinonaktifkan karena npm menolak provenance dari source repository private. |
|
|
18
18
|
| GitHub Release | Membuat GitHub Release dengan generated notes. |
|
|
19
19
|
|
|
20
20
|
Push commit version otomatis tidak memicu release kedua karena mengandung `[skip release]`. Workflow menggunakan concurrency sehingga release berjalan satu per satu.
|
|
21
21
|
|
|
22
|
+
## Aturan penomoran versi
|
|
23
|
+
|
|
24
|
+
Versi berikutnya dihitung dari `max(package.json, npm latest)` dengan bump berdasarkan Conventional Commits sejak tag release terakhir:
|
|
25
|
+
|
|
26
|
+
| Commit sejak tag terakhir | 0.x | >=1.0.0 |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `BREAKING CHANGE:` atau `feat!:` / `fix!:` | minor (`0.1.19` → `0.2.0`) | major (`1.2.3` → `2.0.0`) |
|
|
29
|
+
| `feat:` / `feat(scope):` | minor | minor |
|
|
30
|
+
| lainnya (`fix:`, `docs:`, `chore:`, …) | patch | patch |
|
|
31
|
+
|
|
32
|
+
Jika `package.json` sudah dideklarasikan lebih tinggi daripada versi npm (misalnya dipersiapkan manual untuk `0.2.0`), workflow memakai versi tersebut apa adanya. Hasil perhitungan tidak pernah boleh lebih rendah daripada versi npm yang sudah terbit; jika demikian, workflow gagal dengan pesan yang jelas.
|
|
33
|
+
|
|
22
34
|
## Secret dan permission yang wajib tersedia
|
|
23
35
|
|
|
24
36
|
Workflow membutuhkan `contents: write` untuk version bump, tag, dan GitHub Release. Buka repository GitHub, kemudian masuk ke **Settings → Secrets and variables → Actions** dan tambahkan repository atau environment secret berikut:
|
|
@@ -33,9 +45,9 @@ Jangan menyimpan token di repository, `.npmrc`, source code, issue, commit, atau
|
|
|
33
45
|
|
|
34
46
|
## Aturan penggunaan
|
|
35
47
|
|
|
36
|
-
Perubahan source biasa dapat dipush ke `main`; workflow
|
|
48
|
+
Perubahan source biasa dapat dipush ke `main`; workflow menghitung versi baru berdasarkan Conventional Commits (`feat:` → minor, `fix:`/lainnya → patch, `feat!:`/`BREAKING CHANGE:` → minor pada 0.x / major pada 1.x) setelah seluruh quality gates lulus. Karena versi npm immutable, workflow tidak pernah menimpa versi yang telah ada.
|
|
37
49
|
|
|
38
|
-
Untuk
|
|
50
|
+
Untuk rilis yang dipersiapkan secara eksplisit (misalnya `0.2.0` atau `1.0.0`), deklarasikan versi tersebut langsung di `package.json` sebelum push; workflow akan memakainya apa adanya selama lebih tinggi daripada versi npm yang sudah terbit.
|
|
39
51
|
|
|
40
52
|
Untuk perubahan dokumentasi atau perubahan internal yang tidak boleh menerbitkan npm, gunakan commit message yang memuat marker berikut:
|
|
41
53
|
|
package/bin/telebibz.mjs
CHANGED
package/dist/src/api/client.d.ts
CHANGED
|
@@ -26,7 +26,9 @@ export declare class ApiClient {
|
|
|
26
26
|
private readonly hooks;
|
|
27
27
|
constructor(options: ApiClientOptions);
|
|
28
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
|
|
29
|
+
request<M extends TelegramMethodName>(method: M, payload?: ApiParams<M>, signal?: AbortSignal, options?: {
|
|
30
|
+
timeoutMs?: number;
|
|
31
|
+
}): Promise<ApiResult<M>>;
|
|
30
32
|
raw(method: string, payload?: Record<string, unknown>, signal?: AbortSignal): Promise<unknown>;
|
|
31
33
|
}
|
|
32
34
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAExF,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;IAa/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;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAExF,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;IAa/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,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAsBvJ,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"}
|
package/dist/src/api/client.js
CHANGED
|
@@ -21,7 +21,7 @@ export class ApiClient {
|
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
async call(method, ...args) { return this.request(method, args[0]); }
|
|
24
|
-
async request(method, payload, signal) {
|
|
24
|
+
async request(method, payload, signal, options) {
|
|
25
25
|
const context = { method, payload, startedAt: Date.now() };
|
|
26
26
|
await this.hooks.onRequest?.(context);
|
|
27
27
|
try {
|
|
@@ -30,6 +30,8 @@ export class ApiClient {
|
|
|
30
30
|
request.payload = payload;
|
|
31
31
|
if (signal !== undefined)
|
|
32
32
|
request.signal = signal;
|
|
33
|
+
if (options?.timeoutMs !== undefined)
|
|
34
|
+
request.timeoutMs = options.timeoutMs;
|
|
33
35
|
const response = await this.transport.request(request);
|
|
34
36
|
context.durationMs = Date.now() - context.startedAt;
|
|
35
37
|
context.response = response.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA2B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAQvE,MAAM,OAAO,SAAS;IACX,OAAO,CAAa;IACZ,SAAS,CAAY;IACrB,KAAK,CAAyC;IAC/D,YAAY,OAAyB;QACnC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,qBAAqB,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE;YAC3B,GAAG,EAAE,CAAC,OAAO,EAAE,QAAyB,EAAE,EAAE;gBAC1C,IAAI,OAAO,QAAQ,KAAK,QAAQ;oBAAE,OAAO,SAAS,CAAC;gBACnD,IAAI,QAAQ,KAAK,MAAM;oBAAE,OAAO,SAAS,CAAC;gBAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;gBACjG,OAAO,CAAC,OAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAA8B,EAAE,OAAgB,CAAC,CAAC;YAC/F,CAAC;SACF,CAAe,CAAC;IACnB,CAAC;IACD,KAAK,CAAC,IAAI,CAA+B,MAAS,EAAE,GAAG,IAAoB,IAA2B,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,CAAC,CAAC,CAA6B,CAAC,CAAC,CAAC,CAAC;IAC5K,KAAK,CAAC,OAAO,CAA+B,MAAS,EAAE,OAAsB,EAAE,MAAoB;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ export interface TransportRequest {
|
|
|
3
3
|
method: string;
|
|
4
4
|
payload?: Record<string, unknown>;
|
|
5
5
|
signal?: AbortSignal;
|
|
6
|
+
/** Per-request timeout in milliseconds; overrides the transport default. */
|
|
7
|
+
timeoutMs?: number;
|
|
6
8
|
}
|
|
7
9
|
export interface TransportResponse<T = unknown> {
|
|
8
10
|
status: number;
|
|
@@ -32,6 +34,6 @@ export declare class FetchTransport implements Transport {
|
|
|
32
34
|
private readonly jitter;
|
|
33
35
|
private readonly headers;
|
|
34
36
|
constructor(options?: FetchTransportOptions);
|
|
35
|
-
request<T>({ method, payload, signal }: TransportRequest): Promise<TransportResponse<T>>;
|
|
37
|
+
request<T>({ method, payload, signal, timeoutMs }: TransportRequest): Promise<TransportResponse<T>>;
|
|
36
38
|
}
|
|
37
39
|
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/api/transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/api/transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,OAAO,GAAE,qBAA0B;IAYzC,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAY,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;CA+E/G"}
|
|
@@ -22,7 +22,8 @@ export class FetchTransport {
|
|
|
22
22
|
this.jitter = options.jitter ?? 0.2;
|
|
23
23
|
this.headers = options.headers ?? {};
|
|
24
24
|
}
|
|
25
|
-
async request({ method, payload = {}, signal }) {
|
|
25
|
+
async request({ method, payload = {}, signal, timeoutMs }) {
|
|
26
|
+
const effectiveTimeoutMs = timeoutMs ?? this.timeoutMs;
|
|
26
27
|
const hasUpload = await containsUpload(payload);
|
|
27
28
|
let body;
|
|
28
29
|
const headers = new Headers(this.headers);
|
|
@@ -40,7 +41,7 @@ export class FetchTransport {
|
|
|
40
41
|
while (true) {
|
|
41
42
|
let responseStatus;
|
|
42
43
|
const controller = new AbortController();
|
|
43
|
-
const timeout = setTimeout(() => controller.abort(new Error(`Request timed out after ${
|
|
44
|
+
const timeout = setTimeout(() => controller.abort(new Error(`Request timed out after ${effectiveTimeoutMs}ms`)), effectiveTimeoutMs);
|
|
44
45
|
const onAbort = () => controller.abort(signal?.reason);
|
|
45
46
|
signal?.addEventListener("abort", onAbort, { once: true });
|
|
46
47
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/api/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/api/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare const TERMINAL_BRAND_TEXT = "Library Bot Telegram By @xbibzofficial";
|
|
2
|
+
/** "Tele Bibz" rendered with the figlet Speed font. */
|
|
3
|
+
export declare const TELE_BIBZ_ASCII: string[];
|
|
2
4
|
export interface TerminalBrandingOptions {
|
|
3
5
|
color?: boolean;
|
|
4
6
|
}
|
|
@@ -9,6 +11,66 @@ export interface TerminalAnimationOptions extends TerminalBrandingOptions {
|
|
|
9
11
|
export interface TerminalAnimation {
|
|
10
12
|
stop(message?: string): void;
|
|
11
13
|
}
|
|
14
|
+
export interface RainbowPaintOptions {
|
|
15
|
+
color?: boolean;
|
|
16
|
+
/** Hue phase shift in degrees; animate by increasing this over time. */
|
|
17
|
+
offset?: number;
|
|
18
|
+
/** Total hue spread across the widest line. */
|
|
19
|
+
spread?: number;
|
|
20
|
+
saturation?: number;
|
|
21
|
+
lightness?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Paints multi-line text with a rainbow gradient across columns (the classic
|
|
25
|
+
* "Rainbow" color filter). Spaces stay unstyled so the art keeps its shape.
|
|
26
|
+
*/
|
|
27
|
+
export declare function paintRainbow(text: string, options?: RainbowPaintOptions): string;
|
|
28
|
+
export interface StartupSequenceOptions {
|
|
29
|
+
stream?: NodeJS.WriteStream;
|
|
30
|
+
color?: boolean;
|
|
31
|
+
label?: string;
|
|
32
|
+
typeDelayMs?: number;
|
|
33
|
+
dotDelayMs?: number;
|
|
34
|
+
dots?: number;
|
|
35
|
+
barWidth?: number;
|
|
36
|
+
barDurationMs?: number;
|
|
37
|
+
barFrameMs?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Plays the startup sequence on a TTY: a typing effect for the label
|
|
41
|
+
* (default "Installing Dependencies"), a trailing run of dots, and a
|
|
42
|
+
* glass progress bar with a sweeping highlight that fills to 100%.
|
|
43
|
+
* No-ops when the stream is not an interactive TTY.
|
|
44
|
+
*/
|
|
45
|
+
export declare function runStartupSequence(options?: StartupSequenceOptions): Promise<void>;
|
|
46
|
+
export type BannerStopTone = "success" | "error" | "info";
|
|
47
|
+
export interface BannerHandle {
|
|
48
|
+
/** Freezes the animation, prints the final frame plus an optional status message. */
|
|
49
|
+
stop(message?: string, tone?: BannerStopTone): void;
|
|
50
|
+
}
|
|
51
|
+
export interface TeleBibzBannerOptions extends TerminalBrandingOptions {
|
|
52
|
+
stream?: NodeJS.WriteStream | undefined;
|
|
53
|
+
frameMs?: number | undefined;
|
|
54
|
+
subtitle?: string | undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Prints the static "Tele Bibz" banner (rainbow-painted once, no animation).
|
|
58
|
+
* Suitable for short-lived CLI commands and non-interactive streams.
|
|
59
|
+
*/
|
|
60
|
+
export declare function printTeleBibzBanner(options?: TeleBibzBannerOptions & {
|
|
61
|
+
message?: string | undefined;
|
|
62
|
+
tone?: BannerStopTone | undefined;
|
|
63
|
+
}): void;
|
|
64
|
+
/**
|
|
65
|
+
* Prints the animated rainbow "Tele Bibz" banner. The rainbow flows until
|
|
66
|
+
* `stop()` is called (typically once the bot is connected), then the banner
|
|
67
|
+
* freezes and an optional status line is printed.
|
|
68
|
+
*/
|
|
69
|
+
export declare function startTeleBibzBanner(options?: TeleBibzBannerOptions): BannerHandle;
|
|
70
|
+
/** Prints a single dim status line (used for "Listening for updates..." style messages). */
|
|
71
|
+
export declare function printStatusLine(text: string, options?: TerminalBrandingOptions & {
|
|
72
|
+
stream?: NodeJS.WriteStream;
|
|
73
|
+
}): void;
|
|
12
74
|
export declare function buildTerminalBranding(options?: TerminalBrandingOptions): string;
|
|
13
75
|
export declare function printTerminalBranding(options?: TerminalBrandingOptions): void;
|
|
14
76
|
export declare function startTerminalAnimation(message?: string, options?: TerminalAnimationOptions): TerminalAnimation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/branding/terminal.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,2CAA2C,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/branding/terminal.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,2CAA2C,CAAC;AAE5E,uDAAuD;AACvD,eAAO,MAAM,eAAe,UAM3B,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAyDD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAsBpF;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0BD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC5F;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAmBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,qBAAqB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;CAAO,GAAG,IAAI,CASnJ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,qBAA0B,GAAG,YAAY,CAkDrF;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,uBAAuB,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;CAAO,GAAG,IAAI,CAI3H;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAenF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,uBAA4B,GAAG,IAAI,CAEjF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,SAAsB,EAAE,OAAO,GAAE,wBAA6B,GAAG,iBAAiB,CA2B/H"}
|