@xbibzlibrary/telebibz 0.1.4 → 0.1.5
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/README.id.md +2 -2
- package/README.md +2 -2
- package/README.zh-CN.md +2 -2
- package/dist/src/approval/approval.d.ts.map +1 -1
- package/dist/src/approval/approval.js +3 -1
- package/dist/src/approval/approval.js.map +1 -1
- package/dist/src/branding/branding.d.ts +17 -0
- package/dist/src/branding/branding.d.ts.map +1 -0
- package/dist/src/branding/branding.js +35 -0
- package/dist/src/branding/branding.js.map +1 -0
- package/dist/src/core/bot.d.ts +3 -0
- package/dist/src/core/bot.d.ts.map +1 -1
- package/dist/src/core/bot.js +15 -3
- package/dist/src/core/bot.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/observability/logger.d.ts +45 -0
- package/dist/src/observability/logger.d.ts.map +1 -0
- package/dist/src/observability/logger.js +111 -0
- package/dist/src/observability/logger.js.map +1 -0
- package/dist-cjs/src/approval/approval.js +3 -1
- package/dist-cjs/src/branding/branding.js +39 -0
- package/dist-cjs/src/core/bot.js +15 -3
- package/dist-cjs/src/index.js +2 -0
- package/dist-cjs/src/observability/logger.js +117 -0
- package/docs/API.id.md +4 -4
- package/docs/API.md +4 -4
- package/docs/API.zh-CN.md +4 -4
- package/docs/README.md +1 -1
- package/package.json +1 -1
package/README.id.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# telebibz
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|
|
|
5
5
|
**`@xbibzlibrary/telebibz`** adalah SDK dan framework Telegram Bot untuk Node.js dan TypeScript. Paket ini menyediakan API client, polling, router, middleware, context, keyboard builder, state/session, webhook handler, queue, scheduler, cache, plugin lifecycle, CLI, dan utilitas pengujian.
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
Referensi API lengkap: [English](docs/API.md) · **Indonesia** · [中文](docs/API.zh-CN.md)
|
|
10
10
|
|
|
11
|
-

|
|
11
|
+

|
|
12
12
|
|
|
13
13
|
## Instalasi
|
|
14
14
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# telebibz
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|
|
|
5
5
|
[](https://github.com/XbibzOfficial777/telebibz/actions/workflows/ci.yml)
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
Complete API references: [English](docs/API.md) · [Indonesia](docs/API.id.md) · [中文](docs/API.zh-CN.md)
|
|
14
14
|
|
|
15
|
-

|
|
15
|
+

|
|
16
16
|
|
|
17
17
|
## Installation
|
|
18
18
|
|
package/README.zh-CN.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# telebibz
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|
|
|
5
5
|
**`@xbibzlibrary/telebibz`** 是一个面向 Node.js 和 TypeScript 的 Telegram Bot SDK 和框架。该包提供 API 客户端、轮询、路由器、中间件、上下文、键盘构造器、状态/会话、Webhook 处理、队列、调度器、缓存、插件生命周期、CLI 以及测试工具。
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
完整 API 参考:[English](docs/API.md) · [Indonesia](docs/API.id.md) · **中文**
|
|
10
10
|
|
|
11
|
-

|
|
11
|
+

|
|
12
12
|
|
|
13
13
|
## 安装
|
|
14
14
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/approval/approval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAW,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/approval/approval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAW,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IACtD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,IAAI,CAAC;IACV,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,cAAc,GAAG,UAAU,CAAC;IACpC,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IACvD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IACrD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IACvD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAC5C;AAED,qBAAa,oBAAqB,YAAW,aAAa;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC;IACrE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IACrD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IACvD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CACtC;AAED,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAa,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBACL,GAAG,EAAE,SAAS,EAAmB,OAAO,EAAE,eAAe;IAMhF,KAAK,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCzD,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,CAAC;IAwB/F,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC7C,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;YACP,qBAAqB;CACpC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
2
|
import { InlineKeyboard } from "../keyboard/index.js";
|
|
3
|
+
import { buildApprovalNotification } from "../branding/branding.js";
|
|
3
4
|
export class MemoryApprovalStore {
|
|
4
5
|
records = new Map();
|
|
5
6
|
async get(key) { const value = this.records.get(key); return value ? { ...value } : undefined; }
|
|
@@ -56,7 +57,8 @@ export class ApprovalGate {
|
|
|
56
57
|
.build();
|
|
57
58
|
const message = await this.api.methods.sendMessage({
|
|
58
59
|
chat_id: this.options.ownerChatId,
|
|
59
|
-
text:
|
|
60
|
+
text: buildApprovalNotification({ ownerLabel, botLine, ownerIdLine }),
|
|
61
|
+
parse_mode: "HTML",
|
|
60
62
|
reply_markup: keyboard,
|
|
61
63
|
});
|
|
62
64
|
record.notificationMessageId = message.message_id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/approval/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/approval/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const TELEBIBZ_BRAND_TEXT = "Library Bot Telegram By @xbibzofficial";
|
|
2
|
+
export interface BrandingBoxOptions {
|
|
3
|
+
title?: string;
|
|
4
|
+
footer?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Telegram does not support arbitrary font colors. Colored square markers and a
|
|
8
|
+
* monospace Unicode box provide a portable colored/boxed treatment in clients.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildBrandingBox(options?: BrandingBoxOptions): string;
|
|
11
|
+
export interface ApprovalBrandingDetails {
|
|
12
|
+
ownerLabel: string;
|
|
13
|
+
botLine: string;
|
|
14
|
+
ownerIdLine: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function buildApprovalNotification(details: ApprovalBrandingDetails): string;
|
|
17
|
+
//# sourceMappingURL=branding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../../../src/branding/branding.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,2CAA2C,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAEvE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAYzE;AAED,MAAM,WAAW,uBAAuB;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE;AAErG,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAUlF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const TELEBIBZ_BRAND_TEXT = "Library Bot Telegram By @xbibzofficial";
|
|
2
|
+
/**
|
|
3
|
+
* Telegram does not support arbitrary font colors. Colored square markers and a
|
|
4
|
+
* monospace Unicode box provide a portable colored/boxed treatment in clients.
|
|
5
|
+
*/
|
|
6
|
+
export function buildBrandingBox(options = {}) {
|
|
7
|
+
const title = options.title ?? "TELEBIBZ";
|
|
8
|
+
const footer = options.footer ?? TELEBIBZ_BRAND_TEXT;
|
|
9
|
+
const safeFooter = escapeHtml(footer);
|
|
10
|
+
const innerWidth = Math.max(32, [...safeFooter].length);
|
|
11
|
+
const horizontal = "─".repeat(innerWidth + 2);
|
|
12
|
+
return [
|
|
13
|
+
`🟦 <b>${escapeHtml(title)}</b> 🟪`,
|
|
14
|
+
`<pre>┌${horizontal}┐`,
|
|
15
|
+
`│ ${padBox(safeFooter, innerWidth)} │`,
|
|
16
|
+
`└${horizontal}┘</pre>`,
|
|
17
|
+
].join("\n");
|
|
18
|
+
}
|
|
19
|
+
export function buildApprovalNotification(details) {
|
|
20
|
+
return [
|
|
21
|
+
buildBrandingBox(),
|
|
22
|
+
"",
|
|
23
|
+
`Haloo ${escapeHtml(details.ownerLabel)}, ada yang memakai library telebibz nihh`,
|
|
24
|
+
"",
|
|
25
|
+
escapeHtml(details.botLine),
|
|
26
|
+
escapeHtml(details.ownerIdLine),
|
|
27
|
+
"Status: menunggu izin owner.",
|
|
28
|
+
].join("\n");
|
|
29
|
+
}
|
|
30
|
+
function padBox(value, width) {
|
|
31
|
+
const safe = [...value].slice(0, width).join("");
|
|
32
|
+
return `${safe}${" ".repeat(Math.max(0, width - [...safe].length))}`;
|
|
33
|
+
}
|
|
34
|
+
function escapeHtml(value) { return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """); }
|
|
35
|
+
//# sourceMappingURL=branding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branding.js","sourceRoot":"","sources":["../../../src/branding/branding.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,wCAAwC,CAAC;AAI5E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA8B,EAAE;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,mBAAmB,CAAC;IACrD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO;QACL,SAAS,UAAU,CAAC,KAAK,CAAC,SAAS;QACnC,SAAS,UAAU,GAAG;QACtB,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI;QACvC,IAAI,UAAU,SAAS;KACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAID,MAAM,UAAU,yBAAyB,CAAC,OAAgC;IACxE,OAAO;QACL,gBAAgB,EAAE;QAClB,EAAE;QACF,SAAS,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,0CAA0C;QACjF,EAAE;QACF,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/B,8BAA8B;KAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,KAAa;IAC1C,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,IAAY,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/src/core/bot.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { EventBus, type EventMap } from "./events.js";
|
|
|
8
8
|
import { type Storage } from "../storage/storage.js";
|
|
9
9
|
import { PluginManager, type Plugin } from "../plugins/plugin.js";
|
|
10
10
|
import { ApprovalGate, type ApprovalOptions } from "../approval/approval.js";
|
|
11
|
+
import { Logger, type LoggerOptions } from "../observability/logger.js";
|
|
11
12
|
export type BotStatus = "created" | "initialized" | "awaiting-approval" | "starting" | "running" | "stopping" | "stopped" | "error";
|
|
12
13
|
export type BotContext<S extends object = Record<string, unknown>> = Context<S>;
|
|
13
14
|
export interface BotOptions<S extends object = Record<string, unknown>> {
|
|
@@ -26,6 +27,7 @@ export interface BotOptions<S extends object = Record<string, unknown>> {
|
|
|
26
27
|
};
|
|
27
28
|
approval?: ApprovalOptions;
|
|
28
29
|
router?: RouterOptions;
|
|
30
|
+
logger?: Logger | LoggerOptions;
|
|
29
31
|
}
|
|
30
32
|
export interface HealthStatus {
|
|
31
33
|
status: BotStatus;
|
|
@@ -43,6 +45,7 @@ export declare class Bot<S extends object = Record<string, unknown>> {
|
|
|
43
45
|
readonly services: Record<string, unknown>;
|
|
44
46
|
readonly approval: ApprovalGate | undefined;
|
|
45
47
|
readonly token: string;
|
|
48
|
+
readonly logger: Logger;
|
|
46
49
|
private readonly middlewares;
|
|
47
50
|
private readonly pollingOptions;
|
|
48
51
|
private statusValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/core/bot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAkB,KAAK,qBAAqB,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAU,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/core/bot.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/bot.js
CHANGED
|
@@ -7,6 +7,7 @@ import { EventBus } from "./events.js";
|
|
|
7
7
|
import { MemoryStorage } from "../storage/storage.js";
|
|
8
8
|
import { PluginManager } from "../plugins/plugin.js";
|
|
9
9
|
import { ApprovalGate } from "../approval/approval.js";
|
|
10
|
+
import { createLogger, Logger, summarizeUpdate } from "../observability/logger.js";
|
|
10
11
|
export class Bot {
|
|
11
12
|
api;
|
|
12
13
|
router;
|
|
@@ -16,6 +17,7 @@ export class Bot {
|
|
|
16
17
|
services;
|
|
17
18
|
approval;
|
|
18
19
|
token;
|
|
20
|
+
logger;
|
|
19
21
|
middlewares = [];
|
|
20
22
|
pollingOptions;
|
|
21
23
|
statusValue = "created";
|
|
@@ -27,6 +29,7 @@ export class Bot {
|
|
|
27
29
|
if (!config.token || !/^\d+:[\w-]+$/.test(config.token))
|
|
28
30
|
throw new Error("A valid Telegram bot token is required.");
|
|
29
31
|
this.token = config.token;
|
|
32
|
+
this.logger = config.logger instanceof Logger ? config.logger : createLogger(config.logger);
|
|
30
33
|
this.router = new Router(config.router);
|
|
31
34
|
this.session = config.session ?? new MemoryStorage();
|
|
32
35
|
this.services = { ...(config.services ?? {}) };
|
|
@@ -34,9 +37,9 @@ export class Bot {
|
|
|
34
37
|
this.api = new ApiClient({
|
|
35
38
|
transport,
|
|
36
39
|
hooks: {
|
|
37
|
-
onRequest: (context) => this.events.emit("api:request", { method: context.method, payload: context.payload }),
|
|
38
|
-
onResponse: (context) => this.events.emit("api:response", { method: context.method, durationMs: context.durationMs ?? 0, response: context.response }),
|
|
39
|
-
onError: (context) => this.events.emit("api:error", { method: context.method, durationMs: context.durationMs ?? 0, error: context.error }),
|
|
40
|
+
onRequest: (context) => { this.logger.trace("api.request", { method: context.method, payload: context.payload }); return this.events.emit("api:request", { method: context.method, payload: context.payload }); },
|
|
41
|
+
onResponse: (context) => { this.logger.debug("api.response", { method: context.method, durationMs: context.durationMs ?? 0, ok: context.response?.ok }); return this.events.emit("api:response", { method: context.method, durationMs: context.durationMs ?? 0, response: context.response }); },
|
|
42
|
+
onError: (context) => { this.logger.error("api.error", { method: context.method, durationMs: context.durationMs ?? 0, error: context.error }); return this.events.emit("api:error", { method: context.method, durationMs: context.durationMs ?? 0, error: context.error }); },
|
|
40
43
|
},
|
|
41
44
|
});
|
|
42
45
|
this.plugins = new PluginManager(this);
|
|
@@ -48,6 +51,7 @@ export class Bot {
|
|
|
48
51
|
retryDelayMs: config.polling?.retryDelayMs ?? 500,
|
|
49
52
|
maxRetryDelayMs: config.polling?.maxRetryDelayMs ?? 30_000,
|
|
50
53
|
};
|
|
54
|
+
this.logger.info("bot.created", { status: this.statusValue });
|
|
51
55
|
void this.events.emit("bot:created", { bot: this });
|
|
52
56
|
}
|
|
53
57
|
get status() { return this.statusValue; }
|
|
@@ -61,15 +65,18 @@ export class Bot {
|
|
|
61
65
|
async init() {
|
|
62
66
|
if (this.statusValue === "initialized" || this.statusValue === "running")
|
|
63
67
|
return this;
|
|
68
|
+
this.logger.info("bot.initializing");
|
|
64
69
|
this.me = await this.api.methods.getMe();
|
|
65
70
|
if (this.approval) {
|
|
66
71
|
const approval = await this.approval.check({ bot: this.me });
|
|
67
72
|
if (!approval.allowed) {
|
|
68
73
|
this.statusValue = "awaiting-approval";
|
|
74
|
+
this.logger.warn("approval.pending", { botId: this.me.id, status: approval.status });
|
|
69
75
|
return this;
|
|
70
76
|
}
|
|
71
77
|
}
|
|
72
78
|
this.statusValue = "initialized";
|
|
79
|
+
this.logger.info("bot.initialized", { botId: this.me.id, username: this.me.username });
|
|
73
80
|
await this.events.emit("bot:initialized", { bot: this });
|
|
74
81
|
await this.plugins.setup();
|
|
75
82
|
await this.plugins.start();
|
|
@@ -83,6 +90,7 @@ export class Bot {
|
|
|
83
90
|
if (this.statusValue === "running")
|
|
84
91
|
return;
|
|
85
92
|
this.statusValue = "starting";
|
|
93
|
+
this.logger.info("bot.starting", { mode: options.mode });
|
|
86
94
|
await this.events.emit("bot:starting", { bot: this });
|
|
87
95
|
this.pollingAbort = new AbortController();
|
|
88
96
|
this.statusValue = "running";
|
|
@@ -98,6 +106,7 @@ export class Bot {
|
|
|
98
106
|
this.pollingAbort = undefined;
|
|
99
107
|
await this.plugins.dispose();
|
|
100
108
|
this.statusValue = "stopped";
|
|
109
|
+
this.logger.info("bot.stopped");
|
|
101
110
|
await this.events.emit("bot:stopped", { bot: this });
|
|
102
111
|
}
|
|
103
112
|
async restart() { await this.stop(); await this.start(); }
|
|
@@ -114,6 +123,7 @@ export class Bot {
|
|
|
114
123
|
async setCommands(commands, scope, languageCode) { return this.api.call("setMyCommands", { commands, scope, language_code: languageCode }); }
|
|
115
124
|
async deleteCommands(scope, languageCode) { return this.api.call("deleteMyCommands", { scope, language_code: languageCode }); }
|
|
116
125
|
async handleUpdate(update) {
|
|
126
|
+
this.logger.debug("update.received", { update: summarizeUpdate(update, this.logger.includeUpdateContent) });
|
|
117
127
|
const message = update.message
|
|
118
128
|
?? update.edited_message
|
|
119
129
|
?? update.channel_post
|
|
@@ -148,6 +158,7 @@ export class Bot {
|
|
|
148
158
|
catch (error) {
|
|
149
159
|
// A handler failure belongs to this update. It must remain observable and reject
|
|
150
160
|
// direct handleUpdate() callers, but it must not poison the polling lifecycle.
|
|
161
|
+
this.logger.error("update.handler_error", { update: summarizeUpdate(update, this.logger.includeUpdateContent), error });
|
|
151
162
|
await this.events.emit("update:error", { update, error });
|
|
152
163
|
await this.events.emit("bot:error", { bot: this, error });
|
|
153
164
|
throw error;
|
|
@@ -190,6 +201,7 @@ export class Bot {
|
|
|
190
201
|
if (signal.aborted)
|
|
191
202
|
break;
|
|
192
203
|
const attempt = Math.max(1, Math.round(Math.log2(delay / this.pollingOptions.retryDelayMs) + 1));
|
|
204
|
+
this.logger.warn("polling.reconnect", { attempt, delayMs: delay, error });
|
|
193
205
|
await this.events.emit("polling:reconnect", { error, attempt });
|
|
194
206
|
if (!(await this.waitForRetry(delay, signal)))
|
|
195
207
|
break;
|
package/dist/src/core/bot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../../src/core/bot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../../src/core/bot.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -16,4 +16,6 @@ export * from "./state/forms.js";
|
|
|
16
16
|
export * from "./state/menu.js";
|
|
17
17
|
export * from "./approval/approval.js";
|
|
18
18
|
export * from "./telegram-features.js";
|
|
19
|
+
export * from "./branding/branding.js";
|
|
20
|
+
export * from "./observability/logger.js";
|
|
19
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -16,4 +16,6 @@ export * from "./state/forms.js";
|
|
|
16
16
|
export * from "./state/menu.js";
|
|
17
17
|
export * from "./approval/approval.js";
|
|
18
18
|
export * from "./telegram-features.js";
|
|
19
|
+
export * from "./branding/branding.js";
|
|
20
|
+
export * from "./observability/logger.js";
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Update } from "../api/types.js";
|
|
2
|
+
export type LogLevel = "silent" | "error" | "warn" | "info" | "debug" | "trace";
|
|
3
|
+
export type LogContext = Record<string, unknown>;
|
|
4
|
+
export interface LogEntry {
|
|
5
|
+
timestamp: string;
|
|
6
|
+
level: Exclude<LogLevel, "silent">;
|
|
7
|
+
event: string;
|
|
8
|
+
context?: LogContext;
|
|
9
|
+
}
|
|
10
|
+
export type LoggerSink = (entry: LogEntry) => void;
|
|
11
|
+
export interface LoggerOptions {
|
|
12
|
+
level?: LogLevel;
|
|
13
|
+
sink?: LoggerSink;
|
|
14
|
+
includeUpdateContent?: boolean;
|
|
15
|
+
redactKeys?: readonly string[];
|
|
16
|
+
context?: LogContext;
|
|
17
|
+
}
|
|
18
|
+
export declare function redact(value: unknown, keys?: readonly string[]): unknown;
|
|
19
|
+
export interface UpdateSummary {
|
|
20
|
+
updateId: number;
|
|
21
|
+
type: string;
|
|
22
|
+
chatId?: number | string;
|
|
23
|
+
fromUserId?: number;
|
|
24
|
+
messageId?: number;
|
|
25
|
+
text?: string;
|
|
26
|
+
callbackData?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function summarizeUpdate(update: Update, includeContent?: boolean): UpdateSummary;
|
|
29
|
+
export declare class Logger {
|
|
30
|
+
readonly level: LogLevel;
|
|
31
|
+
readonly includeUpdateContent: boolean;
|
|
32
|
+
private readonly sink;
|
|
33
|
+
private readonly redactKeys;
|
|
34
|
+
private readonly baseContext;
|
|
35
|
+
constructor(options?: LoggerOptions);
|
|
36
|
+
child(context: LogContext): Logger;
|
|
37
|
+
trace(event: string, context?: LogContext): void;
|
|
38
|
+
debug(event: string, context?: LogContext): void;
|
|
39
|
+
info(event: string, context?: LogContext): void;
|
|
40
|
+
warn(event: string, context?: LogContext): void;
|
|
41
|
+
error(event: string, context?: LogContext): void;
|
|
42
|
+
private write;
|
|
43
|
+
}
|
|
44
|
+
export declare function createLogger(options?: LoggerOptions): Logger;
|
|
45
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/observability/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,WAAW,QAAQ;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE;AACxH,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAKnD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAoBD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,SAAS,MAAM,EAAsB,GAAG,OAAO,CAAmC;AAiB/H,MAAM,WAAW,aAAa;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;AAE1K,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,aAAa,CAarF;AASD,qBAAa,MAAM;IACjB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE7B,OAAO,GAAE,aAAkB;IAQvC,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAClC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAChD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAC/C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAC/C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAEhD,OAAO,CAAC,KAAK;CAQd;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAgC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
const priorities = { silent: 99, error: 0, warn: 1, info: 2, debug: 3, trace: 4 };
|
|
2
|
+
const defaultRedactKeys = ["token", "secret", "password", "authorization", "cookie", "private_key", "api_key", "npm_token", "bot_token"];
|
|
3
|
+
function isObject(value) { return typeof value === "object" && value !== null; }
|
|
4
|
+
function shouldRedact(key, keys) { const normalized = key.toLowerCase().replace(/[-_]/g, ""); return keys.some((candidate) => normalized.includes(candidate.toLowerCase().replace(/[-_]/g, ""))); }
|
|
5
|
+
function safeValue(value, keys, seen = new WeakSet()) {
|
|
6
|
+
if (typeof value === "bigint")
|
|
7
|
+
return `${value}n`;
|
|
8
|
+
if (value instanceof Error)
|
|
9
|
+
return { name: value.name, message: value.message, stack: value.stack };
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
if (seen.has(value))
|
|
12
|
+
return "[Circular]";
|
|
13
|
+
seen.add(value);
|
|
14
|
+
return value.map((item) => safeValue(item, keys, seen));
|
|
15
|
+
}
|
|
16
|
+
if (!isObject(value))
|
|
17
|
+
return value;
|
|
18
|
+
if (seen.has(value))
|
|
19
|
+
return "[Circular]";
|
|
20
|
+
seen.add(value);
|
|
21
|
+
const result = {};
|
|
22
|
+
for (const [key, nested] of Object.entries(value))
|
|
23
|
+
result[key] = shouldRedact(key, keys) ? "[REDACTED]" : safeValue(nested, keys, seen);
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
export function redact(value, keys = defaultRedactKeys) { return safeValue(value, keys); }
|
|
27
|
+
function updateType(update) {
|
|
28
|
+
if (update.callback_query)
|
|
29
|
+
return "callback_query";
|
|
30
|
+
if (update.inline_query)
|
|
31
|
+
return "inline_query";
|
|
32
|
+
if (update.message)
|
|
33
|
+
return "message";
|
|
34
|
+
if (update.edited_message)
|
|
35
|
+
return "edited_message";
|
|
36
|
+
if (update.channel_post)
|
|
37
|
+
return "channel_post";
|
|
38
|
+
if (update.edited_channel_post)
|
|
39
|
+
return "edited_channel_post";
|
|
40
|
+
if (update.my_chat_member)
|
|
41
|
+
return "my_chat_member";
|
|
42
|
+
if (update.chat_member)
|
|
43
|
+
return "chat_member";
|
|
44
|
+
if (update.chat_join_request)
|
|
45
|
+
return "chat_join_request";
|
|
46
|
+
if (update.poll)
|
|
47
|
+
return "poll";
|
|
48
|
+
if (update.poll_answer)
|
|
49
|
+
return "poll_answer";
|
|
50
|
+
return "unknown";
|
|
51
|
+
}
|
|
52
|
+
export function summarizeUpdate(update, includeContent = false) {
|
|
53
|
+
const callback = update.callback_query;
|
|
54
|
+
const message = update.message ?? update.edited_message ?? update.channel_post ?? update.edited_channel_post ?? update.business_message ?? update.edited_business_message ?? callback?.message;
|
|
55
|
+
const summary = { updateId: update.update_id, type: updateType(update) };
|
|
56
|
+
if (message?.chat?.id !== undefined)
|
|
57
|
+
summary.chatId = message.chat.id;
|
|
58
|
+
if (message?.from?.id !== undefined)
|
|
59
|
+
summary.fromUserId = message.from.id;
|
|
60
|
+
if (message?.message_id !== undefined)
|
|
61
|
+
summary.messageId = message.message_id;
|
|
62
|
+
if (includeContent) {
|
|
63
|
+
const text = message?.text ?? message?.caption;
|
|
64
|
+
if (text !== undefined)
|
|
65
|
+
summary.text = text;
|
|
66
|
+
if (callback?.data !== undefined)
|
|
67
|
+
summary.callbackData = callback.data;
|
|
68
|
+
}
|
|
69
|
+
return summary;
|
|
70
|
+
}
|
|
71
|
+
function defaultSink(entry) {
|
|
72
|
+
const line = JSON.stringify(entry);
|
|
73
|
+
if (entry.level === "error")
|
|
74
|
+
console.error(line);
|
|
75
|
+
else if (entry.level === "warn")
|
|
76
|
+
console.warn(line);
|
|
77
|
+
else
|
|
78
|
+
console.log(line);
|
|
79
|
+
}
|
|
80
|
+
export class Logger {
|
|
81
|
+
level;
|
|
82
|
+
includeUpdateContent;
|
|
83
|
+
sink;
|
|
84
|
+
redactKeys;
|
|
85
|
+
baseContext;
|
|
86
|
+
constructor(options = {}) {
|
|
87
|
+
this.level = options.level ?? "info";
|
|
88
|
+
this.includeUpdateContent = options.includeUpdateContent ?? false;
|
|
89
|
+
this.sink = options.sink ?? defaultSink;
|
|
90
|
+
this.redactKeys = options.redactKeys ?? defaultRedactKeys;
|
|
91
|
+
this.baseContext = options.context ?? {};
|
|
92
|
+
}
|
|
93
|
+
child(context) { return new Logger({ level: this.level, sink: this.sink, includeUpdateContent: this.includeUpdateContent, redactKeys: this.redactKeys, context: { ...this.baseContext, ...context } }); }
|
|
94
|
+
trace(event, context) { this.write("trace", event, context); }
|
|
95
|
+
debug(event, context) { this.write("debug", event, context); }
|
|
96
|
+
info(event, context) { this.write("info", event, context); }
|
|
97
|
+
warn(event, context) { this.write("warn", event, context); }
|
|
98
|
+
error(event, context) { this.write("error", event, context); }
|
|
99
|
+
write(level, event, context = {}) {
|
|
100
|
+
if (priorities[level] > priorities[this.level])
|
|
101
|
+
return;
|
|
102
|
+
const merged = { ...this.baseContext, ...context };
|
|
103
|
+
const safe = redact(merged, this.redactKeys);
|
|
104
|
+
const entry = { timestamp: new Date().toISOString(), level, event };
|
|
105
|
+
if (Object.keys(safe).length)
|
|
106
|
+
entry.context = safe;
|
|
107
|
+
this.sink(entry);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export function createLogger(options) { return new Logger(options); }
|
|
111
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/observability/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ApprovalGate = exports.StorageApprovalStore = exports.MemoryApprovalStore = void 0;
|
|
4
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
5
|
const index_js_1 = require("../keyboard/index.js");
|
|
6
|
+
const branding_js_1 = require("../branding/branding.js");
|
|
6
7
|
class MemoryApprovalStore {
|
|
7
8
|
records = new Map();
|
|
8
9
|
async get(key) { const value = this.records.get(key); return value ? { ...value } : undefined; }
|
|
@@ -61,7 +62,8 @@ class ApprovalGate {
|
|
|
61
62
|
.build();
|
|
62
63
|
const message = await this.api.methods.sendMessage({
|
|
63
64
|
chat_id: this.options.ownerChatId,
|
|
64
|
-
text:
|
|
65
|
+
text: (0, branding_js_1.buildApprovalNotification)({ ownerLabel, botLine, ownerIdLine }),
|
|
66
|
+
parse_mode: "HTML",
|
|
65
67
|
reply_markup: keyboard,
|
|
66
68
|
});
|
|
67
69
|
record.notificationMessageId = message.message_id;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TELEBIBZ_BRAND_TEXT = void 0;
|
|
4
|
+
exports.buildBrandingBox = buildBrandingBox;
|
|
5
|
+
exports.buildApprovalNotification = buildApprovalNotification;
|
|
6
|
+
exports.TELEBIBZ_BRAND_TEXT = "Library Bot Telegram By @xbibzofficial";
|
|
7
|
+
/**
|
|
8
|
+
* Telegram does not support arbitrary font colors. Colored square markers and a
|
|
9
|
+
* monospace Unicode box provide a portable colored/boxed treatment in clients.
|
|
10
|
+
*/
|
|
11
|
+
function buildBrandingBox(options = {}) {
|
|
12
|
+
const title = options.title ?? "TELEBIBZ";
|
|
13
|
+
const footer = options.footer ?? exports.TELEBIBZ_BRAND_TEXT;
|
|
14
|
+
const safeFooter = escapeHtml(footer);
|
|
15
|
+
const innerWidth = Math.max(32, [...safeFooter].length);
|
|
16
|
+
const horizontal = "─".repeat(innerWidth + 2);
|
|
17
|
+
return [
|
|
18
|
+
`🟦 <b>${escapeHtml(title)}</b> 🟪`,
|
|
19
|
+
`<pre>┌${horizontal}┐`,
|
|
20
|
+
`│ ${padBox(safeFooter, innerWidth)} │`,
|
|
21
|
+
`└${horizontal}┘</pre>`,
|
|
22
|
+
].join("\n");
|
|
23
|
+
}
|
|
24
|
+
function buildApprovalNotification(details) {
|
|
25
|
+
return [
|
|
26
|
+
buildBrandingBox(),
|
|
27
|
+
"",
|
|
28
|
+
`Haloo ${escapeHtml(details.ownerLabel)}, ada yang memakai library telebibz nihh`,
|
|
29
|
+
"",
|
|
30
|
+
escapeHtml(details.botLine),
|
|
31
|
+
escapeHtml(details.ownerIdLine),
|
|
32
|
+
"Status: menunggu izin owner.",
|
|
33
|
+
].join("\n");
|
|
34
|
+
}
|
|
35
|
+
function padBox(value, width) {
|
|
36
|
+
const safe = [...value].slice(0, width).join("");
|
|
37
|
+
return `${safe}${" ".repeat(Math.max(0, width - [...safe].length))}`;
|
|
38
|
+
}
|
|
39
|
+
function escapeHtml(value) { return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """); }
|
package/dist-cjs/src/core/bot.js
CHANGED
|
@@ -10,6 +10,7 @@ const events_js_1 = require("./events.js");
|
|
|
10
10
|
const storage_js_1 = require("../storage/storage.js");
|
|
11
11
|
const plugin_js_1 = require("../plugins/plugin.js");
|
|
12
12
|
const approval_js_1 = require("../approval/approval.js");
|
|
13
|
+
const logger_js_1 = require("../observability/logger.js");
|
|
13
14
|
class Bot {
|
|
14
15
|
api;
|
|
15
16
|
router;
|
|
@@ -19,6 +20,7 @@ class Bot {
|
|
|
19
20
|
services;
|
|
20
21
|
approval;
|
|
21
22
|
token;
|
|
23
|
+
logger;
|
|
22
24
|
middlewares = [];
|
|
23
25
|
pollingOptions;
|
|
24
26
|
statusValue = "created";
|
|
@@ -30,6 +32,7 @@ class Bot {
|
|
|
30
32
|
if (!config.token || !/^\d+:[\w-]+$/.test(config.token))
|
|
31
33
|
throw new Error("A valid Telegram bot token is required.");
|
|
32
34
|
this.token = config.token;
|
|
35
|
+
this.logger = config.logger instanceof logger_js_1.Logger ? config.logger : (0, logger_js_1.createLogger)(config.logger);
|
|
33
36
|
this.router = new router_js_1.Router(config.router);
|
|
34
37
|
this.session = config.session ?? new storage_js_1.MemoryStorage();
|
|
35
38
|
this.services = { ...(config.services ?? {}) };
|
|
@@ -37,9 +40,9 @@ class Bot {
|
|
|
37
40
|
this.api = new client_js_1.ApiClient({
|
|
38
41
|
transport,
|
|
39
42
|
hooks: {
|
|
40
|
-
onRequest: (context) => this.events.emit("api:request", { method: context.method, payload: context.payload }),
|
|
41
|
-
onResponse: (context) => this.events.emit("api:response", { method: context.method, durationMs: context.durationMs ?? 0, response: context.response }),
|
|
42
|
-
onError: (context) => this.events.emit("api:error", { method: context.method, durationMs: context.durationMs ?? 0, error: context.error }),
|
|
43
|
+
onRequest: (context) => { this.logger.trace("api.request", { method: context.method, payload: context.payload }); return this.events.emit("api:request", { method: context.method, payload: context.payload }); },
|
|
44
|
+
onResponse: (context) => { this.logger.debug("api.response", { method: context.method, durationMs: context.durationMs ?? 0, ok: context.response?.ok }); return this.events.emit("api:response", { method: context.method, durationMs: context.durationMs ?? 0, response: context.response }); },
|
|
45
|
+
onError: (context) => { this.logger.error("api.error", { method: context.method, durationMs: context.durationMs ?? 0, error: context.error }); return this.events.emit("api:error", { method: context.method, durationMs: context.durationMs ?? 0, error: context.error }); },
|
|
43
46
|
},
|
|
44
47
|
});
|
|
45
48
|
this.plugins = new plugin_js_1.PluginManager(this);
|
|
@@ -51,6 +54,7 @@ class Bot {
|
|
|
51
54
|
retryDelayMs: config.polling?.retryDelayMs ?? 500,
|
|
52
55
|
maxRetryDelayMs: config.polling?.maxRetryDelayMs ?? 30_000,
|
|
53
56
|
};
|
|
57
|
+
this.logger.info("bot.created", { status: this.statusValue });
|
|
54
58
|
void this.events.emit("bot:created", { bot: this });
|
|
55
59
|
}
|
|
56
60
|
get status() { return this.statusValue; }
|
|
@@ -64,15 +68,18 @@ class Bot {
|
|
|
64
68
|
async init() {
|
|
65
69
|
if (this.statusValue === "initialized" || this.statusValue === "running")
|
|
66
70
|
return this;
|
|
71
|
+
this.logger.info("bot.initializing");
|
|
67
72
|
this.me = await this.api.methods.getMe();
|
|
68
73
|
if (this.approval) {
|
|
69
74
|
const approval = await this.approval.check({ bot: this.me });
|
|
70
75
|
if (!approval.allowed) {
|
|
71
76
|
this.statusValue = "awaiting-approval";
|
|
77
|
+
this.logger.warn("approval.pending", { botId: this.me.id, status: approval.status });
|
|
72
78
|
return this;
|
|
73
79
|
}
|
|
74
80
|
}
|
|
75
81
|
this.statusValue = "initialized";
|
|
82
|
+
this.logger.info("bot.initialized", { botId: this.me.id, username: this.me.username });
|
|
76
83
|
await this.events.emit("bot:initialized", { bot: this });
|
|
77
84
|
await this.plugins.setup();
|
|
78
85
|
await this.plugins.start();
|
|
@@ -86,6 +93,7 @@ class Bot {
|
|
|
86
93
|
if (this.statusValue === "running")
|
|
87
94
|
return;
|
|
88
95
|
this.statusValue = "starting";
|
|
96
|
+
this.logger.info("bot.starting", { mode: options.mode });
|
|
89
97
|
await this.events.emit("bot:starting", { bot: this });
|
|
90
98
|
this.pollingAbort = new AbortController();
|
|
91
99
|
this.statusValue = "running";
|
|
@@ -101,6 +109,7 @@ class Bot {
|
|
|
101
109
|
this.pollingAbort = undefined;
|
|
102
110
|
await this.plugins.dispose();
|
|
103
111
|
this.statusValue = "stopped";
|
|
112
|
+
this.logger.info("bot.stopped");
|
|
104
113
|
await this.events.emit("bot:stopped", { bot: this });
|
|
105
114
|
}
|
|
106
115
|
async restart() { await this.stop(); await this.start(); }
|
|
@@ -117,6 +126,7 @@ class Bot {
|
|
|
117
126
|
async setCommands(commands, scope, languageCode) { return this.api.call("setMyCommands", { commands, scope, language_code: languageCode }); }
|
|
118
127
|
async deleteCommands(scope, languageCode) { return this.api.call("deleteMyCommands", { scope, language_code: languageCode }); }
|
|
119
128
|
async handleUpdate(update) {
|
|
129
|
+
this.logger.debug("update.received", { update: (0, logger_js_1.summarizeUpdate)(update, this.logger.includeUpdateContent) });
|
|
120
130
|
const message = update.message
|
|
121
131
|
?? update.edited_message
|
|
122
132
|
?? update.channel_post
|
|
@@ -151,6 +161,7 @@ class Bot {
|
|
|
151
161
|
catch (error) {
|
|
152
162
|
// A handler failure belongs to this update. It must remain observable and reject
|
|
153
163
|
// direct handleUpdate() callers, but it must not poison the polling lifecycle.
|
|
164
|
+
this.logger.error("update.handler_error", { update: (0, logger_js_1.summarizeUpdate)(update, this.logger.includeUpdateContent), error });
|
|
154
165
|
await this.events.emit("update:error", { update, error });
|
|
155
166
|
await this.events.emit("bot:error", { bot: this, error });
|
|
156
167
|
throw error;
|
|
@@ -193,6 +204,7 @@ class Bot {
|
|
|
193
204
|
if (signal.aborted)
|
|
194
205
|
break;
|
|
195
206
|
const attempt = Math.max(1, Math.round(Math.log2(delay / this.pollingOptions.retryDelayMs) + 1));
|
|
207
|
+
this.logger.warn("polling.reconnect", { attempt, delayMs: delay, error });
|
|
196
208
|
await this.events.emit("polling:reconnect", { error, attempt });
|
|
197
209
|
if (!(await this.waitForRetry(delay, signal)))
|
|
198
210
|
break;
|
package/dist-cjs/src/index.js
CHANGED
|
@@ -32,3 +32,5 @@ __exportStar(require("./state/forms.js"), exports);
|
|
|
32
32
|
__exportStar(require("./state/menu.js"), exports);
|
|
33
33
|
__exportStar(require("./approval/approval.js"), exports);
|
|
34
34
|
__exportStar(require("./telegram-features.js"), exports);
|
|
35
|
+
__exportStar(require("./branding/branding.js"), exports);
|
|
36
|
+
__exportStar(require("./observability/logger.js"), exports);
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Logger = void 0;
|
|
4
|
+
exports.redact = redact;
|
|
5
|
+
exports.summarizeUpdate = summarizeUpdate;
|
|
6
|
+
exports.createLogger = createLogger;
|
|
7
|
+
const priorities = { silent: 99, error: 0, warn: 1, info: 2, debug: 3, trace: 4 };
|
|
8
|
+
const defaultRedactKeys = ["token", "secret", "password", "authorization", "cookie", "private_key", "api_key", "npm_token", "bot_token"];
|
|
9
|
+
function isObject(value) { return typeof value === "object" && value !== null; }
|
|
10
|
+
function shouldRedact(key, keys) { const normalized = key.toLowerCase().replace(/[-_]/g, ""); return keys.some((candidate) => normalized.includes(candidate.toLowerCase().replace(/[-_]/g, ""))); }
|
|
11
|
+
function safeValue(value, keys, seen = new WeakSet()) {
|
|
12
|
+
if (typeof value === "bigint")
|
|
13
|
+
return `${value}n`;
|
|
14
|
+
if (value instanceof Error)
|
|
15
|
+
return { name: value.name, message: value.message, stack: value.stack };
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
if (seen.has(value))
|
|
18
|
+
return "[Circular]";
|
|
19
|
+
seen.add(value);
|
|
20
|
+
return value.map((item) => safeValue(item, keys, seen));
|
|
21
|
+
}
|
|
22
|
+
if (!isObject(value))
|
|
23
|
+
return value;
|
|
24
|
+
if (seen.has(value))
|
|
25
|
+
return "[Circular]";
|
|
26
|
+
seen.add(value);
|
|
27
|
+
const result = {};
|
|
28
|
+
for (const [key, nested] of Object.entries(value))
|
|
29
|
+
result[key] = shouldRedact(key, keys) ? "[REDACTED]" : safeValue(nested, keys, seen);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
function redact(value, keys = defaultRedactKeys) { return safeValue(value, keys); }
|
|
33
|
+
function updateType(update) {
|
|
34
|
+
if (update.callback_query)
|
|
35
|
+
return "callback_query";
|
|
36
|
+
if (update.inline_query)
|
|
37
|
+
return "inline_query";
|
|
38
|
+
if (update.message)
|
|
39
|
+
return "message";
|
|
40
|
+
if (update.edited_message)
|
|
41
|
+
return "edited_message";
|
|
42
|
+
if (update.channel_post)
|
|
43
|
+
return "channel_post";
|
|
44
|
+
if (update.edited_channel_post)
|
|
45
|
+
return "edited_channel_post";
|
|
46
|
+
if (update.my_chat_member)
|
|
47
|
+
return "my_chat_member";
|
|
48
|
+
if (update.chat_member)
|
|
49
|
+
return "chat_member";
|
|
50
|
+
if (update.chat_join_request)
|
|
51
|
+
return "chat_join_request";
|
|
52
|
+
if (update.poll)
|
|
53
|
+
return "poll";
|
|
54
|
+
if (update.poll_answer)
|
|
55
|
+
return "poll_answer";
|
|
56
|
+
return "unknown";
|
|
57
|
+
}
|
|
58
|
+
function summarizeUpdate(update, includeContent = false) {
|
|
59
|
+
const callback = update.callback_query;
|
|
60
|
+
const message = update.message ?? update.edited_message ?? update.channel_post ?? update.edited_channel_post ?? update.business_message ?? update.edited_business_message ?? callback?.message;
|
|
61
|
+
const summary = { updateId: update.update_id, type: updateType(update) };
|
|
62
|
+
if (message?.chat?.id !== undefined)
|
|
63
|
+
summary.chatId = message.chat.id;
|
|
64
|
+
if (message?.from?.id !== undefined)
|
|
65
|
+
summary.fromUserId = message.from.id;
|
|
66
|
+
if (message?.message_id !== undefined)
|
|
67
|
+
summary.messageId = message.message_id;
|
|
68
|
+
if (includeContent) {
|
|
69
|
+
const text = message?.text ?? message?.caption;
|
|
70
|
+
if (text !== undefined)
|
|
71
|
+
summary.text = text;
|
|
72
|
+
if (callback?.data !== undefined)
|
|
73
|
+
summary.callbackData = callback.data;
|
|
74
|
+
}
|
|
75
|
+
return summary;
|
|
76
|
+
}
|
|
77
|
+
function defaultSink(entry) {
|
|
78
|
+
const line = JSON.stringify(entry);
|
|
79
|
+
if (entry.level === "error")
|
|
80
|
+
console.error(line);
|
|
81
|
+
else if (entry.level === "warn")
|
|
82
|
+
console.warn(line);
|
|
83
|
+
else
|
|
84
|
+
console.log(line);
|
|
85
|
+
}
|
|
86
|
+
class Logger {
|
|
87
|
+
level;
|
|
88
|
+
includeUpdateContent;
|
|
89
|
+
sink;
|
|
90
|
+
redactKeys;
|
|
91
|
+
baseContext;
|
|
92
|
+
constructor(options = {}) {
|
|
93
|
+
this.level = options.level ?? "info";
|
|
94
|
+
this.includeUpdateContent = options.includeUpdateContent ?? false;
|
|
95
|
+
this.sink = options.sink ?? defaultSink;
|
|
96
|
+
this.redactKeys = options.redactKeys ?? defaultRedactKeys;
|
|
97
|
+
this.baseContext = options.context ?? {};
|
|
98
|
+
}
|
|
99
|
+
child(context) { return new Logger({ level: this.level, sink: this.sink, includeUpdateContent: this.includeUpdateContent, redactKeys: this.redactKeys, context: { ...this.baseContext, ...context } }); }
|
|
100
|
+
trace(event, context) { this.write("trace", event, context); }
|
|
101
|
+
debug(event, context) { this.write("debug", event, context); }
|
|
102
|
+
info(event, context) { this.write("info", event, context); }
|
|
103
|
+
warn(event, context) { this.write("warn", event, context); }
|
|
104
|
+
error(event, context) { this.write("error", event, context); }
|
|
105
|
+
write(level, event, context = {}) {
|
|
106
|
+
if (priorities[level] > priorities[this.level])
|
|
107
|
+
return;
|
|
108
|
+
const merged = { ...this.baseContext, ...context };
|
|
109
|
+
const safe = redact(merged, this.redactKeys);
|
|
110
|
+
const entry = { timestamp: new Date().toISOString(), level, event };
|
|
111
|
+
if (Object.keys(safe).length)
|
|
112
|
+
entry.context = safe;
|
|
113
|
+
this.sink(entry);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.Logger = Logger;
|
|
117
|
+
function createLogger(options) { return new Logger(options); }
|
package/docs/API.id.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
[English](API.md) · **Bahasa Indonesia** · [简体中文](API.zh-CN.md)
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|
|
|
7
|
-
Dokumen ini adalah referensi API untuk `@xbibzlibrary/telebibz@0.1.
|
|
7
|
+
Dokumen ini adalah referensi API untuk `@xbibzlibrary/telebibz@0.1.4`. Seluruh signature dan perilaku yang dijelaskan di sini dipetakan dari source TypeScript yang diekspor package. Jika suatu tipe Telegram belum memiliki pemetaan parameter/result khusus, package tetap menyediakan akses runtime melalui API dinamis, tetapi tipe parameternya masih generik.
|
|
8
8
|
|
|
9
|
-
> **Status implementasi.** Dokumentasi ini menjelaskan kemampuan yang
|
|
9
|
+
> **Status implementasi.** Dokumentasi ini menjelaskan kemampuan yang tersedia pada rilis saat ini. `JsonFileStorage`, storage Redis/SQL/Mongo berbasis driver, session/conversation berbasis Storage, cron lima field lengkap, `MenuController`, approval message branded, structured logging dengan redaction, validasi Web App, `PaymentsClient`, dan declaration `TelegramTypes` sudah tersedia. Core method map tetap khusus untuk inferensi request/result tertentu, sedangkan `api.raw()` tersedia untuk method Telegram berikutnya.
|
|
10
10
|
|
|
11
11
|
## Instalasi dan import
|
|
12
12
|
|
|
@@ -1780,7 +1780,7 @@ const bot = new Bot({ token: process.env.TELEGRAM_BOT_TOKEN!, session });
|
|
|
1780
1780
|
|
|
1781
1781
|
### Namespace deklarasi Telegram lengkap
|
|
1782
1782
|
|
|
1783
|
-
Package memvendorkan declaration Telegram berlisensi MIT dan mengeksposnya sebagai type-only export melalui `TelegramTypes`, serta alias seperti `TelegramUser`, `TelegramMessage`, `TelegramUpdate`, dan `TelegramApiMethods`. Declaration ini mencakup surface object, union, enum, dan method tanpa runtime dependency tambahan. Map method inti telebibz tetap khusus untuk method yang memiliki pemetaan parameter/result langsung.
|
|
1783
|
+
Package memvendorkan declaration Telegram berlisensi MIT dan mengeksposnya sebagai type-only export melalui `TelegramTypes`, serta alias seperti `TelegramUser`, `TelegramMessage`, `TelegramUpdate`, dan `TelegramApiMethods`. Approval notification memakai kotak Unicode berwarna dengan attribution `Library Bot Telegram By @xbibzofficial`. `Logger` menghasilkan JSON terstruktur dengan level, redaction, ringkasan update, dan opt-in untuk isi pesan user/callback. Declaration ini mencakup surface object, union, enum, dan method tanpa runtime dependency tambahan. Map method inti telebibz tetap khusus untuk method yang memiliki pemetaan parameter/result langsung.
|
|
1784
1784
|
|
|
1785
1785
|
---
|
|
1786
1786
|
|
package/docs/API.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# telebibz API Reference — English
|
|
2
2
|
[English](API.md) · [Bahasa Indonesia](API.id.md) · [简体中文](API.zh-CN.md)
|
|
3
3
|
|
|
4
|
-

|
|
5
5
|
|
|
6
|
-
This document is the API reference for `@xbibzlibrary/telebibz@0.1.
|
|
6
|
+
This document is the API reference for `@xbibzlibrary/telebibz@0.1.4`. All signatures and behaviors described here are mapped from the package's exported TypeScript source. If a Telegram type does not have a specific parameter/result mapping, the package still provides runtime access via a dynamic API, but the parameter types remain generic.
|
|
7
7
|
|
|
8
|
-
> **Implementation status.** This documentation describes the capabilities
|
|
8
|
+
> **Implementation status.** This documentation describes the capabilities available in the current release. `JsonFileStorage`, driver-based Redis/SQL/Mongo storage, storage-backed sessions/conversations, full five-field cron, `MenuController`, branded approval messages, structured redacted logging, Web App validation, PaymentsClient, and vendored `TelegramTypes` declarations are included. The core method map remains specialized for selected request/result inference, while `api.raw()` remains available for future Telegram methods.
|
|
9
9
|
|
|
10
10
|
## Installation and import
|
|
11
11
|
|
|
@@ -1780,7 +1780,7 @@ const bot = new Bot({ token: process.env.TELEGRAM_BOT_TOKEN!, session });
|
|
|
1780
1780
|
|
|
1781
1781
|
### Complete Telegram declaration namespace
|
|
1782
1782
|
|
|
1783
|
-
The package vendors MIT-licensed Telegram declarations and exposes them as type-only exports through `TelegramTypes`, plus aliases such as `TelegramUser`, `TelegramMessage`, `TelegramUpdate`, and `TelegramApiMethods`. These declarations cover the complete object, union, enum, and method declaration surface without adding a runtime dependency. Core telebibz method maps remain specialized for the methods with direct request/result mappings.
|
|
1783
|
+
The package vendors MIT-licensed Telegram declarations and exposes them as type-only exports through `TelegramTypes`, plus aliases such as `TelegramUser`, `TelegramMessage`, `TelegramUpdate`, and `TelegramApiMethods`. Approval notifications use a colored Unicode box and the attribution `Library Bot Telegram By @xbibzofficial`. `Logger` emits structured JSON entries with configurable levels, redaction, update summaries, and opt-in user message/callback content. These declarations cover the complete object, union, enum, and method declaration surface without adding a runtime dependency. Core telebibz method maps remain specialized for the methods with direct request/result mappings.
|
|
1784
1784
|
|
|
1785
1785
|
---
|
|
1786
1786
|
## 19. Compatibility and limitations to be aware of
|
package/docs/API.zh-CN.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
[English](API.md) · [Bahasa Indonesia](API.id.md) · **简体中文**
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|
|
|
7
|
-
本文件是 `@xbibzlibrary/telebibz@0.1.
|
|
7
|
+
本文件是 `@xbibzlibrary/telebibz@0.1.4` 的 API 参考。此处描述的所有签名和行为均映射自该包导出的 TypeScript 源代码。如果某个 Telegram 类型尚未有特定的参数/结果映射,该包仍通过动态 API 提供运行时访问,但其参数类型仍为通用类型。
|
|
8
8
|
|
|
9
|
-
> **实现状态。**
|
|
9
|
+
> **实现状态。** 本文档说明当前版本中可用的功能。`JsonFileStorage`、基于 driver 的 Redis/SQL/Mongo storage、基于 Storage 的 session/conversation、完整五字段 cron、`MenuController`、带 branding 的 approval message、带 redaction 的 structured logging、Web App 验证、`PaymentsClient` 和 `TelegramTypes` declaration 均已提供。core method map 仍主要为特定 request/result inference 提供类型,未来 Telegram method 可通过 `api.raw()` 访问。
|
|
10
10
|
|
|
11
11
|
## 安装与导入
|
|
12
12
|
|
|
@@ -1774,7 +1774,7 @@ const bot = new Bot({ token: process.env.TELEGRAM_BOT_TOKEN!, session });
|
|
|
1774
1774
|
|
|
1775
1775
|
### 完整 Telegram declaration namespace
|
|
1776
1776
|
|
|
1777
|
-
Package 内置 MIT 许可的 Telegram declaration,并通过 type-only export 暴露 `TelegramTypes`,同时提供 `TelegramUser`、`TelegramMessage`、`TelegramUpdate` 和 `TelegramApiMethods` 等 alias。这些 declaration 覆盖完整的 object、union、enum 和 method surface,不增加 runtime dependency。telebibz core method map 仍专门为具有直接参数/结果映射的 method 提供类型。
|
|
1777
|
+
Package 内置 MIT 许可的 Telegram declaration,并通过 type-only export 暴露 `TelegramTypes`,同时提供 `TelegramUser`、`TelegramMessage`、`TelegramUpdate` 和 `TelegramApiMethods` 等 alias。Approval notification 使用带颜色的 Unicode box,并包含 attribution `Library Bot Telegram By @xbibzofficial`。`Logger` 输出带 level、redaction、update summary 的结构化 JSON,并支持 opt-in 记录 user message/callback content。这些 declaration 覆盖完整的 object、union、enum 和 method surface,不增加 runtime dependency。telebibz core method map 仍专门为具有直接参数/结果映射的 method 提供类型。
|
|
1778
1778
|
|
|
1779
1779
|
---
|
|
1780
1780
|
|
package/docs/README.md
CHANGED
|
@@ -8,7 +8,7 @@ The default documentation language is **English**. Translated README and API ref
|
|
|
8
8
|
| Bahasa Indonesia | [`README.id.md`](../README.id.md) | [`API.id.md`](API.id.md) |
|
|
9
9
|
| 简体中文 | [`README.zh-CN.md`](../README.zh-CN.md) | [`API.zh-CN.md`](API.zh-CN.md) |
|
|
10
10
|
|
|
11
|
-

|
|
12
12
|
|
|
13
13
|
The API references are organized by lifecycle: bot startup and shutdown, API client and transport, update routing, middleware and context, state/session, interaction UI, background work, deployment, testing, and migration boundaries.
|
|
14
14
|
|