@xbibzlibrary/telebibz 0.4.4 → 3.0.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 +35 -138
- package/LICENSE +1 -1
- package/NOTICE.md +9 -4
- package/README.md +173 -242
- package/examples/01-quickstart.js +13 -0
- package/examples/02-menu-tombol.js +22 -0
- package/examples/03-wizard.js +29 -0
- package/examples/04-broadcast.js +25 -0
- package/examples/05-kirim-file.js +19 -0
- package/examples/06-menu.js +35 -0
- package/examples/07-inline-query.js +18 -0
- package/index.d.ts +81 -0
- package/index.js +42 -0
- package/lib/api.js +154 -0
- package/lib/broadcast.js +35 -0
- package/lib/composer.js +174 -0
- package/lib/context.js +190 -0
- package/lib/errors.js +35 -0
- package/lib/file.js +41 -0
- package/lib/inline-query.js +28 -0
- package/lib/keyboard.js +83 -0
- package/lib/logger.js +38 -0
- package/lib/menus.js +90 -0
- package/lib/net.js +115 -0
- package/lib/ratelimit.js +61 -0
- package/lib/runner.js +45 -0
- package/lib/session.js +36 -0
- package/lib/telebibz.js +190 -0
- package/lib/wizard.js +81 -0
- package/package.json +35 -97
- package/test/all.test.js +334 -0
- package/CODE_OF_CONDUCT.md +0 -37
- package/CONTRIBUTING.md +0 -59
- package/CONTRIBUTION_RULES.md +0 -41
- package/GOVERNANCE.md +0 -47
- package/README.id.md +0 -292
- package/README.zh-CN.md +0 -292
- package/RELEASE_AUTOMATION.md +0 -78
- package/RELEASE_POLICY.md +0 -32
- package/SECURITY.md +0 -47
- package/SHOWCASE.md +0 -29
- package/SUPPORT.md +0 -30
- package/assets/readme-preview.html +0 -75
- package/assets/telebibz-logo.png +0 -0
- package/assets/telebibz-readme-preview.png +0 -0
- package/bin/telebibz.mjs +0 -3
- package/dist/generated/api.d.ts +0 -13
- package/dist/generated/api.d.ts.map +0 -1
- package/dist/generated/api.js +0 -192
- package/dist/generated/api.js.map +0 -1
- package/dist/src/api/client.d.ts +0 -62
- package/dist/src/api/client.d.ts.map +0 -1
- package/dist/src/api/client.js +0 -104
- package/dist/src/api/client.js.map +0 -1
- package/dist/src/api/errors.d.ts +0 -45
- package/dist/src/api/errors.d.ts.map +0 -1
- package/dist/src/api/errors.js +0 -65
- package/dist/src/api/errors.js.map +0 -1
- package/dist/src/api/index.d.ts +0 -6
- package/dist/src/api/index.d.ts.map +0 -1
- package/dist/src/api/index.js +0 -6
- package/dist/src/api/index.js.map +0 -1
- package/dist/src/api/telegram-types/LICENSE +0 -21
- package/dist/src/api/telegram-types/api.d.ts +0 -22
- package/dist/src/api/telegram-types/checklist.d.ts +0 -72
- package/dist/src/api/telegram-types/inline.d.ts +0 -692
- package/dist/src/api/telegram-types/langs.d.ts +0 -193
- package/dist/src/api/telegram-types/manage.d.ts +0 -1144
- package/dist/src/api/telegram-types/markup.d.ts +0 -268
- package/dist/src/api/telegram-types/message.d.ts +0 -1537
- package/dist/src/api/telegram-types/methods.d.ts +0 -2870
- package/dist/src/api/telegram-types/mod.d.ts +0 -14
- package/dist/src/api/telegram-types/passport.d.ts +0 -163
- package/dist/src/api/telegram-types/payment.d.ts +0 -570
- package/dist/src/api/telegram-types/rich.d.ts +0 -1010
- package/dist/src/api/telegram-types/settings.d.ts +0 -120
- package/dist/src/api/telegram-types/story.d.ts +0 -89
- package/dist/src/api/telegram-types/update.d.ts +0 -84
- package/dist/src/api/telegram.d.ts +0 -7
- package/dist/src/api/telegram.d.ts.map +0 -1
- package/dist/src/api/telegram.js +0 -2
- package/dist/src/api/telegram.js.map +0 -1
- package/dist/src/api/transport.d.ts +0 -68
- package/dist/src/api/transport.d.ts.map +0 -1
- package/dist/src/api/transport.js +0 -264
- package/dist/src/api/transport.js.map +0 -1
- package/dist/src/api/types.d.ts +0 -466
- package/dist/src/api/types.d.ts.map +0 -1
- package/dist/src/api/types.js +0 -2
- package/dist/src/api/types.js.map +0 -1
- package/dist/src/branding/terminal.d.ts +0 -77
- package/dist/src/branding/terminal.d.ts.map +0 -1
- package/dist/src/branding/terminal.js +0 -328
- package/dist/src/branding/terminal.js.map +0 -1
- package/dist/src/broadcast/broadcast.d.ts +0 -50
- package/dist/src/broadcast/broadcast.d.ts.map +0 -1
- package/dist/src/broadcast/broadcast.js +0 -56
- package/dist/src/broadcast/broadcast.js.map +0 -1
- package/dist/src/cache/cache.d.ts +0 -34
- package/dist/src/cache/cache.d.ts.map +0 -1
- package/dist/src/cache/cache.js +0 -41
- package/dist/src/cache/cache.js.map +0 -1
- package/dist/src/cli.d.ts +0 -2
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -84
- package/dist/src/cli.js.map +0 -1
- package/dist/src/context/context.d.ts +0 -124
- package/dist/src/context/context.d.ts.map +0 -1
- package/dist/src/context/context.js +0 -302
- package/dist/src/context/context.js.map +0 -1
- package/dist/src/core/bot.d.ts +0 -204
- package/dist/src/core/bot.d.ts.map +0 -1
- package/dist/src/core/bot.js +0 -506
- package/dist/src/core/bot.js.map +0 -1
- package/dist/src/core/events.d.ts +0 -75
- package/dist/src/core/events.d.ts.map +0 -1
- package/dist/src/core/events.js +0 -35
- package/dist/src/core/events.js.map +0 -1
- package/dist/src/core/webhook-reply.d.ts +0 -34
- package/dist/src/core/webhook-reply.d.ts.map +0 -1
- package/dist/src/core/webhook-reply.js +0 -37
- package/dist/src/core/webhook-reply.js.map +0 -1
- package/dist/src/index.d.ts +0 -24
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -24
- package/dist/src/index.js.map +0 -1
- package/dist/src/keyboard/index.d.ts +0 -46
- package/dist/src/keyboard/index.d.ts.map +0 -1
- package/dist/src/keyboard/index.js +0 -55
- package/dist/src/keyboard/index.js.map +0 -1
- package/dist/src/middleware/compose.d.ts +0 -5
- package/dist/src/middleware/compose.d.ts.map +0 -1
- package/dist/src/middleware/compose.js +0 -17
- package/dist/src/middleware/compose.js.map +0 -1
- package/dist/src/observability/logger.d.ts +0 -78
- package/dist/src/observability/logger.d.ts.map +0 -1
- package/dist/src/observability/logger.js +0 -285
- package/dist/src/observability/logger.js.map +0 -1
- package/dist/src/plugins/plugin.d.ts +0 -38
- package/dist/src/plugins/plugin.d.ts.map +0 -1
- package/dist/src/plugins/plugin.js +0 -59
- package/dist/src/plugins/plugin.js.map +0 -1
- package/dist/src/queue/queue.d.ts +0 -77
- package/dist/src/queue/queue.d.ts.map +0 -1
- package/dist/src/queue/queue.js +0 -213
- package/dist/src/queue/queue.js.map +0 -1
- package/dist/src/router/router.d.ts +0 -61
- package/dist/src/router/router.d.ts.map +0 -1
- package/dist/src/router/router.js +0 -183
- package/dist/src/router/router.js.map +0 -1
- package/dist/src/state/conversation.d.ts +0 -56
- package/dist/src/state/conversation.d.ts.map +0 -1
- package/dist/src/state/conversation.js +0 -133
- package/dist/src/state/conversation.js.map +0 -1
- package/dist/src/state/forms.d.ts +0 -34
- package/dist/src/state/forms.d.ts.map +0 -1
- package/dist/src/state/forms.js +0 -44
- package/dist/src/state/forms.js.map +0 -1
- package/dist/src/state/menu.d.ts +0 -78
- package/dist/src/state/menu.d.ts.map +0 -1
- package/dist/src/state/menu.js +0 -127
- package/dist/src/state/menu.js.map +0 -1
- package/dist/src/storage/storage.d.ts +0 -146
- package/dist/src/storage/storage.d.ts.map +0 -1
- package/dist/src/storage/storage.js +0 -195
- package/dist/src/storage/storage.js.map +0 -1
- package/dist/src/telegram-features.d.ts +0 -33
- package/dist/src/telegram-features.d.ts.map +0 -1
- package/dist/src/telegram-features.js +0 -71
- package/dist/src/telegram-features.js.map +0 -1
- package/dist/src/testing.d.ts +0 -24
- package/dist/src/testing.d.ts.map +0 -1
- package/dist/src/testing.js +0 -38
- package/dist/src/testing.js.map +0 -1
- package/dist/src/utils/concurrency.d.ts +0 -25
- package/dist/src/utils/concurrency.d.ts.map +0 -1
- package/dist/src/utils/concurrency.js +0 -52
- package/dist/src/utils/concurrency.js.map +0 -1
- package/dist/src/utils/files.d.ts +0 -45
- package/dist/src/utils/files.d.ts.map +0 -1
- package/dist/src/utils/files.js +0 -53
- package/dist/src/utils/files.js.map +0 -1
- package/dist/src/utils/text.d.ts +0 -39
- package/dist/src/utils/text.d.ts.map +0 -1
- package/dist/src/utils/text.js +0 -56
- package/dist/src/utils/text.js.map +0 -1
- package/dist/src/webhook/handler.d.ts +0 -19
- package/dist/src/webhook/handler.d.ts.map +0 -1
- package/dist/src/webhook/handler.js +0 -141
- package/dist/src/webhook/handler.js.map +0 -1
- package/dist-cjs/generated/api.js +0 -194
- package/dist-cjs/package.json +0 -3
- package/dist-cjs/src/api/client.js +0 -107
- package/dist-cjs/src/api/errors.js +0 -74
- package/dist-cjs/src/api/index.js +0 -21
- package/dist-cjs/src/api/telegram-types/LICENSE +0 -21
- package/dist-cjs/src/api/telegram-types/api.d.ts +0 -22
- package/dist-cjs/src/api/telegram-types/checklist.d.ts +0 -72
- package/dist-cjs/src/api/telegram-types/inline.d.ts +0 -692
- package/dist-cjs/src/api/telegram-types/langs.d.ts +0 -193
- package/dist-cjs/src/api/telegram-types/manage.d.ts +0 -1144
- package/dist-cjs/src/api/telegram-types/markup.d.ts +0 -268
- package/dist-cjs/src/api/telegram-types/message.d.ts +0 -1537
- package/dist-cjs/src/api/telegram-types/methods.d.ts +0 -2870
- package/dist-cjs/src/api/telegram-types/mod.d.ts +0 -14
- package/dist-cjs/src/api/telegram-types/passport.d.ts +0 -163
- package/dist-cjs/src/api/telegram-types/payment.d.ts +0 -570
- package/dist-cjs/src/api/telegram-types/rich.d.ts +0 -1010
- package/dist-cjs/src/api/telegram-types/settings.d.ts +0 -120
- package/dist-cjs/src/api/telegram-types/story.d.ts +0 -89
- package/dist-cjs/src/api/telegram-types/update.d.ts +0 -84
- package/dist-cjs/src/api/telegram.js +0 -2
- package/dist-cjs/src/api/transport.js +0 -267
- package/dist-cjs/src/api/types.js +0 -2
- package/dist-cjs/src/branding/terminal.js +0 -338
- package/dist-cjs/src/broadcast/broadcast.js +0 -58
- package/dist-cjs/src/cache/cache.js +0 -45
- package/dist-cjs/src/cli.js +0 -86
- package/dist-cjs/src/context/context.js +0 -305
- package/dist-cjs/src/core/bot.js +0 -510
- package/dist-cjs/src/core/events.js +0 -38
- package/dist-cjs/src/core/webhook-reply.js +0 -42
- package/dist-cjs/src/index.js +0 -47
- package/dist-cjs/src/keyboard/index.js +0 -61
- package/dist-cjs/src/middleware/compose.js +0 -20
- package/dist-cjs/src/observability/logger.js +0 -293
- package/dist-cjs/src/plugins/plugin.js +0 -63
- package/dist-cjs/src/queue/queue.js +0 -219
- package/dist-cjs/src/router/router.js +0 -186
- package/dist-cjs/src/state/conversation.js +0 -139
- package/dist-cjs/src/state/forms.js +0 -47
- package/dist-cjs/src/state/menu.js +0 -133
- package/dist-cjs/src/storage/storage.js +0 -202
- package/dist-cjs/src/telegram-features.js +0 -76
- package/dist-cjs/src/testing.js +0 -45
- package/dist-cjs/src/utils/concurrency.js +0 -57
- package/dist-cjs/src/utils/files.js +0 -58
- package/dist-cjs/src/utils/text.js +0 -63
- package/dist-cjs/src/webhook/handler.js +0 -144
- package/docs/API.id.md +0 -1935
- package/docs/API.md +0 -1969
- package/docs/API.zh-CN.md +0 -1929
- package/docs/GETTING_STARTED.id.md +0 -85
- package/docs/GETTING_STARTED.md +0 -85
- package/docs/GETTING_STARTED.zh-CN.md +0 -85
- package/docs/GITHUB_PACKAGES.id.md +0 -82
- package/docs/GITHUB_PACKAGES.md +0 -82
- package/docs/GITHUB_PACKAGES.zh-CN.md +0 -82
- package/docs/README.md +0 -48
- package/docs/STORAGE.id.md +0 -105
- package/docs/STORAGE.md +0 -105
- package/docs/STORAGE.zh-CN.md +0 -105
- package/examples/README.md +0 -37
- package/examples/files.ts +0 -35
- package/examples/minimal.ts +0 -12
- package/examples/tsconfig.json +0 -9
- package/examples/webhook.ts +0 -42
- package/examples/wizard-registration.ts +0 -42
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
export const TERMINAL_BRAND_TEXT = "Library Bot Telegram By @xbibzofficial";
|
|
2
|
-
/** "Tele Bibz" rendered with the figlet Speed font. */
|
|
3
|
-
export const TELE_BIBZ_ASCII = [
|
|
4
|
-
"________ ______ ___________________ _______",
|
|
5
|
-
"___ __/_______ /____ ___ __ )__(_)__ /_______",
|
|
6
|
-
"__ / _ _ \\_ /_ _ \\ __ __ |_ /__ __ \\__ /",
|
|
7
|
-
"_ / / __/ / / __/ _ /_/ /_ / _ /_/ /_ /_",
|
|
8
|
-
"/_/ \\___//_/ \\___/ /_____/ /_/ /_.___/_____/",
|
|
9
|
-
];
|
|
10
|
-
const ANSI = {
|
|
11
|
-
reset: "\u001b[0m",
|
|
12
|
-
bold: "\u001b[1m",
|
|
13
|
-
clearLine: "\u001b[2K",
|
|
14
|
-
cursorUp: "\u001b[1A",
|
|
15
|
-
hideCursor: "\u001b[?25l",
|
|
16
|
-
showCursor: "\u001b[?25h",
|
|
17
|
-
blue: "\u001b[34m",
|
|
18
|
-
magenta: "\u001b[35m",
|
|
19
|
-
cyan: "\u001b[36m",
|
|
20
|
-
green: "\u001b[32m",
|
|
21
|
-
yellow: "\u001b[33m",
|
|
22
|
-
red: "\u001b[31m",
|
|
23
|
-
white: "\u001b[97m",
|
|
24
|
-
dim: "\u001b[2m",
|
|
25
|
-
};
|
|
26
|
-
function pad(value, width) {
|
|
27
|
-
return `${value}${" ".repeat(Math.max(0, width - [...value].length))}`;
|
|
28
|
-
}
|
|
29
|
-
function useColor(options, stream) {
|
|
30
|
-
return options.color ?? Boolean(stream.isTTY && !process.env.NO_COLOR);
|
|
31
|
-
}
|
|
32
|
-
function sleep(delayMs) {
|
|
33
|
-
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
34
|
-
}
|
|
35
|
-
function easeInOutCubic(progress) {
|
|
36
|
-
return progress < 0.5 ? 4 * progress ** 3 : 1 - (-2 * progress + 2) ** 3 / 2;
|
|
37
|
-
}
|
|
38
|
-
function hslToRgb(hue, saturation, lightness) {
|
|
39
|
-
const normalizedHue = ((hue % 360) + 360) % 360;
|
|
40
|
-
const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;
|
|
41
|
-
const hueSegment = normalizedHue / 60;
|
|
42
|
-
const secondary = chroma * (1 - Math.abs((hueSegment % 2) - 1));
|
|
43
|
-
let red = 0;
|
|
44
|
-
let green = 0;
|
|
45
|
-
let blue = 0;
|
|
46
|
-
if (hueSegment < 1) {
|
|
47
|
-
red = chroma;
|
|
48
|
-
green = secondary;
|
|
49
|
-
}
|
|
50
|
-
else if (hueSegment < 2) {
|
|
51
|
-
red = secondary;
|
|
52
|
-
green = chroma;
|
|
53
|
-
}
|
|
54
|
-
else if (hueSegment < 3) {
|
|
55
|
-
green = chroma;
|
|
56
|
-
blue = secondary;
|
|
57
|
-
}
|
|
58
|
-
else if (hueSegment < 4) {
|
|
59
|
-
green = secondary;
|
|
60
|
-
blue = chroma;
|
|
61
|
-
}
|
|
62
|
-
else if (hueSegment < 5) {
|
|
63
|
-
red = secondary;
|
|
64
|
-
blue = chroma;
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
red = chroma;
|
|
68
|
-
blue = secondary;
|
|
69
|
-
}
|
|
70
|
-
const shift = lightness - chroma / 2;
|
|
71
|
-
return [Math.round((red + shift) * 255), Math.round((green + shift) * 255), Math.round((blue + shift) * 255)];
|
|
72
|
-
}
|
|
73
|
-
function rgbForegroundColor(red, green, blue) {
|
|
74
|
-
return `\u001b[38;2;${red};${green};${blue}m`;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Paints multi-line text with a rainbow gradient across columns (the classic
|
|
78
|
-
* "Rainbow" color filter). Spaces stay unstyled so the art keeps its shape.
|
|
79
|
-
*/
|
|
80
|
-
export function paintRainbow(text, options = {}) {
|
|
81
|
-
if (!options.color)
|
|
82
|
-
return text;
|
|
83
|
-
const lines = text.split("\n");
|
|
84
|
-
const width = Math.max(...lines.map((line) => [...line].length), 1);
|
|
85
|
-
const offset = options.offset ?? 0;
|
|
86
|
-
const spread = options.spread ?? 340;
|
|
87
|
-
const saturation = options.saturation ?? 1;
|
|
88
|
-
const lightness = options.lightness ?? 0.58;
|
|
89
|
-
return lines
|
|
90
|
-
.map((line) => {
|
|
91
|
-
const characters = [...line];
|
|
92
|
-
let painted = "";
|
|
93
|
-
for (let index = 0; index < characters.length; index += 1) {
|
|
94
|
-
const character = characters[index];
|
|
95
|
-
if (character === " ") {
|
|
96
|
-
painted += character;
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
const hue = offset + (index / width) * spread;
|
|
100
|
-
const [red, green, blue] = hslToRgb(hue, saturation, lightness);
|
|
101
|
-
painted += `${rgbForegroundColor(red, green, blue)}${character}${ANSI.reset}`;
|
|
102
|
-
}
|
|
103
|
-
return painted;
|
|
104
|
-
})
|
|
105
|
-
.join("\n");
|
|
106
|
-
}
|
|
107
|
-
function renderGlassBar(progress, shinePosition, width, colored) {
|
|
108
|
-
const filled = Math.round(progress * width);
|
|
109
|
-
let bar = "";
|
|
110
|
-
for (let index = 0; index < width; index += 1) {
|
|
111
|
-
const isFilled = index < filled;
|
|
112
|
-
const shineDistance = Math.abs(index - shinePosition);
|
|
113
|
-
const isShine = shineDistance <= 1;
|
|
114
|
-
const character = isFilled ? "█" : "░";
|
|
115
|
-
if (!colored) {
|
|
116
|
-
bar += character;
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
if (isShine) {
|
|
120
|
-
bar += `${ANSI.bold}${ANSI.white}${character === "█" ? "█" : "▒"}${ANSI.reset}`;
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
if (isFilled) {
|
|
124
|
-
const hue = 190 + (index / width) * 150;
|
|
125
|
-
const [red, green, blue] = hslToRgb(hue, 0.85, 0.6);
|
|
126
|
-
bar += `${rgbForegroundColor(red, green, blue)}${character}${ANSI.reset}`;
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
bar += `${ANSI.dim}${character}${ANSI.reset}`;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return bar;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Plays the startup sequence on a TTY: a typing effect for the label
|
|
136
|
-
* (default "Installing Dependencies"), a trailing run of dots, and a
|
|
137
|
-
* glass progress bar with a sweeping highlight that fills to 100%.
|
|
138
|
-
* No-ops when the stream is not an interactive TTY.
|
|
139
|
-
*/
|
|
140
|
-
export async function runStartupSequence(options = {}) {
|
|
141
|
-
const stream = options.stream ?? process.stdout;
|
|
142
|
-
if (!stream.isTTY)
|
|
143
|
-
return;
|
|
144
|
-
const colored = useColor(options, stream);
|
|
145
|
-
const label = options.label ?? "Installing Dependencies";
|
|
146
|
-
const typeDelayMs = options.typeDelayMs ?? 24;
|
|
147
|
-
const dotDelayMs = options.dotDelayMs ?? 140;
|
|
148
|
-
const dots = options.dots ?? 6;
|
|
149
|
-
const barWidth = Math.max(10, options.barWidth ?? 44);
|
|
150
|
-
const barDurationMs = Math.max(0, options.barDurationMs ?? 1_400);
|
|
151
|
-
const barFrameMs = Math.max(16, options.barFrameMs ?? 40);
|
|
152
|
-
if (colored)
|
|
153
|
-
stream.write(`${ANSI.bold}${ANSI.cyan}`);
|
|
154
|
-
for (const character of label) {
|
|
155
|
-
stream.write(character);
|
|
156
|
-
if (typeDelayMs > 0)
|
|
157
|
-
await sleep(typeDelayMs);
|
|
158
|
-
}
|
|
159
|
-
for (let index = 0; index < dots; index += 1) {
|
|
160
|
-
if (dotDelayMs > 0)
|
|
161
|
-
await sleep(dotDelayMs);
|
|
162
|
-
stream.write(".");
|
|
163
|
-
}
|
|
164
|
-
if (colored)
|
|
165
|
-
stream.write(ANSI.reset);
|
|
166
|
-
stream.write("\n");
|
|
167
|
-
const startedAt = Date.now();
|
|
168
|
-
let frameIndex = 0;
|
|
169
|
-
while (true) {
|
|
170
|
-
const elapsed = Date.now() - startedAt;
|
|
171
|
-
const progress = barDurationMs === 0 ? 1 : Math.min(1, easeInOutCubic(elapsed / barDurationMs));
|
|
172
|
-
const sweep = (frameIndex * barFrameMs) % 1_600;
|
|
173
|
-
const triangle = sweep < 800 ? sweep / 800 : 2 - sweep / 800;
|
|
174
|
-
const shinePosition = triangle * (barWidth - 1);
|
|
175
|
-
const percentage = Math.round(progress * 100);
|
|
176
|
-
stream.write(`\r${ANSI.clearLine}${renderGlassBar(progress, shinePosition, barWidth, colored)} ${ANSI.dim}${String(percentage).padStart(3, " ")}%${ANSI.reset}`);
|
|
177
|
-
if (progress >= 1)
|
|
178
|
-
break;
|
|
179
|
-
frameIndex += 1;
|
|
180
|
-
await sleep(barFrameMs);
|
|
181
|
-
}
|
|
182
|
-
stream.write(` ${ANSI.green}${ANSI.bold}✓${ANSI.reset}\n`);
|
|
183
|
-
}
|
|
184
|
-
function bannerFrame(subtitle, offset, colored) {
|
|
185
|
-
const artWidth = Math.max(...TELE_BIBZ_ASCII.map((line) => [...line].length));
|
|
186
|
-
const leading = Math.max(0, Math.floor((artWidth - [...TERMINAL_BRAND_TEXT].length) / 2));
|
|
187
|
-
const tagline = " ".repeat(leading) + TERMINAL_BRAND_TEXT;
|
|
188
|
-
const lines = paintRainbow(TELE_BIBZ_ASCII.join("\n"), { color: colored, offset }).split("\n");
|
|
189
|
-
lines.push(colored ? `${ANSI.dim}${tagline}${ANSI.reset}` : tagline);
|
|
190
|
-
if (subtitle)
|
|
191
|
-
lines.push(colored ? `${ANSI.cyan}${ANSI.bold}${subtitle}${ANSI.reset}` : subtitle);
|
|
192
|
-
return lines;
|
|
193
|
-
}
|
|
194
|
-
function tonePrefix(tone, colored) {
|
|
195
|
-
if (!colored)
|
|
196
|
-
return "";
|
|
197
|
-
if (tone === "success")
|
|
198
|
-
return ANSI.green;
|
|
199
|
-
if (tone === "error")
|
|
200
|
-
return ANSI.red;
|
|
201
|
-
return ANSI.cyan;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Prints the static "Tele Bibz" banner (rainbow-painted once, no animation).
|
|
205
|
-
* Suitable for short-lived CLI commands and non-interactive streams.
|
|
206
|
-
*/
|
|
207
|
-
export function printTeleBibzBanner(options = {}) {
|
|
208
|
-
const stream = options.stream ?? process.stdout;
|
|
209
|
-
const colored = useColor(options, stream);
|
|
210
|
-
const lines = bannerFrame(options.subtitle, 0, colored);
|
|
211
|
-
if (options.message) {
|
|
212
|
-
const prefix = options.tone === "error" ? "✗ " : options.tone === "success" ? "✓ " : "";
|
|
213
|
-
lines.push(colored ? `${tonePrefix(options.tone ?? "info", colored)}${prefix}${options.message}${ANSI.reset}` : `${prefix}${options.message}`);
|
|
214
|
-
}
|
|
215
|
-
stream.write(`${lines.join("\n")}\n`);
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Prints the animated rainbow "Tele Bibz" banner. The rainbow flows until
|
|
219
|
-
* `stop()` is called (typically once the bot is connected), then the banner
|
|
220
|
-
* freezes and an optional status line is printed.
|
|
221
|
-
*/
|
|
222
|
-
export function startTeleBibzBanner(options = {}) {
|
|
223
|
-
const stream = options.stream ?? process.stdout;
|
|
224
|
-
const colored = useColor(options, stream);
|
|
225
|
-
const frameMs = Math.max(16, options.frameMs ?? 70);
|
|
226
|
-
const subtitle = options.subtitle;
|
|
227
|
-
if (!stream.isTTY) {
|
|
228
|
-
printTeleBibzBanner({ ...options, subtitle });
|
|
229
|
-
return { stop: () => undefined };
|
|
230
|
-
}
|
|
231
|
-
let stopped = false;
|
|
232
|
-
let linesPrinted = 0;
|
|
233
|
-
const writeFrame = (offset) => {
|
|
234
|
-
const lines = bannerFrame(subtitle, offset, colored);
|
|
235
|
-
linesPrinted = lines.length;
|
|
236
|
-
stream.write(lines.join("\n") + "\n");
|
|
237
|
-
};
|
|
238
|
-
const clearFrame = () => {
|
|
239
|
-
for (let index = 0; index < linesPrinted; index += 1)
|
|
240
|
-
stream.write(`${ANSI.cursorUp}${ANSI.clearLine}`);
|
|
241
|
-
stream.write("\r");
|
|
242
|
-
};
|
|
243
|
-
stream.write(ANSI.hideCursor);
|
|
244
|
-
writeFrame(0);
|
|
245
|
-
void (async () => {
|
|
246
|
-
let offset = 0;
|
|
247
|
-
while (!stopped) {
|
|
248
|
-
await sleep(frameMs);
|
|
249
|
-
if (stopped)
|
|
250
|
-
break;
|
|
251
|
-
offset = (offset + 14) % 360;
|
|
252
|
-
clearFrame();
|
|
253
|
-
writeFrame(offset);
|
|
254
|
-
}
|
|
255
|
-
})();
|
|
256
|
-
return {
|
|
257
|
-
stop(message, tone = "success") {
|
|
258
|
-
if (stopped)
|
|
259
|
-
return;
|
|
260
|
-
stopped = true;
|
|
261
|
-
clearFrame();
|
|
262
|
-
writeFrame(0);
|
|
263
|
-
if (message) {
|
|
264
|
-
const prefix = tone === "error" ? "✗ " : tone === "success" ? "✓ " : "";
|
|
265
|
-
const line = colored ? `${tonePrefix(tone, colored)}${ANSI.bold}${prefix}${message}${ANSI.reset}` : `${prefix}${message}`;
|
|
266
|
-
stream.write(`${line}\n`);
|
|
267
|
-
}
|
|
268
|
-
stream.write(ANSI.showCursor);
|
|
269
|
-
},
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
/** Prints a single dim status line (used for "Listening for updates..." style messages). */
|
|
273
|
-
export function printStatusLine(text, options = {}) {
|
|
274
|
-
const stream = options.stream ?? process.stdout;
|
|
275
|
-
const colored = useColor(options, stream);
|
|
276
|
-
stream.write(colored ? `${ANSI.dim}${text}${ANSI.reset}\n` : `${text}\n`);
|
|
277
|
-
}
|
|
278
|
-
export function buildTerminalBranding(options = {}) {
|
|
279
|
-
const stream = process.stdout;
|
|
280
|
-
const colored = useColor(options, stream);
|
|
281
|
-
const color = (value, code) => colored ? `${code}${value}${ANSI.reset}` : value;
|
|
282
|
-
const title = "TELEBIBZ CLI";
|
|
283
|
-
const width = Math.max([...title].length, [...TERMINAL_BRAND_TEXT].length);
|
|
284
|
-
const horizontal = "═".repeat(width + 2);
|
|
285
|
-
const line = (value) => `║ ${pad(value, width)} ║`;
|
|
286
|
-
return [
|
|
287
|
-
color(`╔${horizontal}╗`, ANSI.cyan),
|
|
288
|
-
color(line(title), ANSI.blue),
|
|
289
|
-
color(line(TERMINAL_BRAND_TEXT), ANSI.magenta),
|
|
290
|
-
color(`╚${horizontal}╝`, ANSI.cyan),
|
|
291
|
-
color("Runtime logs: colorful structured output.", ANSI.dim),
|
|
292
|
-
].join("\n");
|
|
293
|
-
}
|
|
294
|
-
export function printTerminalBranding(options = {}) {
|
|
295
|
-
process.stdout.write(`${buildTerminalBranding(options)}\n`);
|
|
296
|
-
}
|
|
297
|
-
export function startTerminalAnimation(message = "Starting telebibz", options = {}) {
|
|
298
|
-
const stream = options.stream ?? process.stdout;
|
|
299
|
-
const colored = useColor(options, stream);
|
|
300
|
-
const frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
301
|
-
const intervalMs = Math.max(60, options.intervalMs ?? 90);
|
|
302
|
-
let index = 0;
|
|
303
|
-
let stopped = false;
|
|
304
|
-
const paint = () => {
|
|
305
|
-
if (stopped || !stream.isTTY)
|
|
306
|
-
return;
|
|
307
|
-
const frame = frames[index++ % frames.length] ?? "⠋";
|
|
308
|
-
const text = `${frame} ${message}`;
|
|
309
|
-
stream.write(`\r${ANSI.clearLine}${colored ? ANSI.cyan : ""}${text}${colored ? ANSI.reset : ""}`);
|
|
310
|
-
};
|
|
311
|
-
if (!stream.isTTY)
|
|
312
|
-
return { stop: () => undefined };
|
|
313
|
-
stream.write(ANSI.hideCursor);
|
|
314
|
-
paint();
|
|
315
|
-
const timer = setInterval(paint, intervalMs);
|
|
316
|
-
timer.unref?.();
|
|
317
|
-
return {
|
|
318
|
-
stop(finalMessage = "Done") {
|
|
319
|
-
if (stopped)
|
|
320
|
-
return;
|
|
321
|
-
stopped = true;
|
|
322
|
-
clearInterval(timer);
|
|
323
|
-
const prefix = finalMessage.toLowerCase().includes("error") ? ANSI.yellow : ANSI.green;
|
|
324
|
-
stream.write(`\r${ANSI.clearLine}${colored ? prefix : ""}${finalMessage}${colored ? ANSI.reset : ""}\n${ANSI.showCursor}`);
|
|
325
|
-
},
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
//# sourceMappingURL=terminal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/branding/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { ChatId } from "../api/types.js";
|
|
2
|
-
/** One chat the broadcast could not deliver to. */
|
|
3
|
-
export interface BroadcastFailure {
|
|
4
|
-
chatId: ChatId;
|
|
5
|
-
attempts: number;
|
|
6
|
-
error: string;
|
|
7
|
-
errorKind?: string | undefined;
|
|
8
|
-
}
|
|
9
|
-
/** Live counters emitted through `onProgress` after each chat settles. */
|
|
10
|
-
export interface BroadcastProgress {
|
|
11
|
-
total: number;
|
|
12
|
-
processed: number;
|
|
13
|
-
delivered: number;
|
|
14
|
-
failed: number;
|
|
15
|
-
}
|
|
16
|
-
/** Final result of a broadcast run. */
|
|
17
|
-
export interface BroadcastReport {
|
|
18
|
-
total: number;
|
|
19
|
-
delivered: number;
|
|
20
|
-
failed: number;
|
|
21
|
-
durationMs: number;
|
|
22
|
-
failures: BroadcastFailure[];
|
|
23
|
-
}
|
|
24
|
-
export interface BroadcastOptions {
|
|
25
|
-
/**
|
|
26
|
-
* How many chats are messaged at the same time. Default `Infinity` — every
|
|
27
|
-
* chat is attempted immediately, with no proactive cooldown. Telegram's own
|
|
28
|
-
* 429 answers are honored automatically per chat.
|
|
29
|
-
*/
|
|
30
|
-
concurrency?: number;
|
|
31
|
-
/**
|
|
32
|
-
* Attempts per chat when Telegram answers 429 (rate limit). The wait between
|
|
33
|
-
* attempts is exactly what Telegram orders via `retry_after`. Default `10`.
|
|
34
|
-
*/
|
|
35
|
-
maxAttempts?: number;
|
|
36
|
-
/** Called after each chat settles, regardless of outcome. */
|
|
37
|
-
onProgress?: (progress: BroadcastProgress) => void;
|
|
38
|
-
/** Aborts pending sends; chats already delivered stay delivered. */
|
|
39
|
-
signal?: AbortSignal;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Sends to many chats in parallel with automatic 429 retry.
|
|
43
|
-
*
|
|
44
|
-
* There is no proactive cooldown: all chats (up to `concurrency`) are attempted
|
|
45
|
-
* at once. The only waiting ever done is the `retry_after` delay Telegram itself
|
|
46
|
-
* returns with a 429 answer, so bursts of 1000+ chats still deliver completely
|
|
47
|
-
* instead of failing.
|
|
48
|
-
*/
|
|
49
|
-
export declare function runBroadcast(chatIds: readonly ChatId[], send: (chatId: ChatId) => Promise<unknown>, options?: BroadcastOptions): Promise<BroadcastReport>;
|
|
50
|
-
//# sourceMappingURL=broadcast.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../../src/broadcast/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AASD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC1C,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAuC1B"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { TelegramError } from "../api/errors.js";
|
|
2
|
-
import { mapWithConcurrency } from "../utils/concurrency.js";
|
|
3
|
-
function sleep(delayMs) { return new Promise((resolve) => setTimeout(resolve, delayMs)); }
|
|
4
|
-
function describeError(error) {
|
|
5
|
-
if (error instanceof TelegramError)
|
|
6
|
-
return { message: error.message, kind: error.kind };
|
|
7
|
-
return { message: error instanceof Error ? error.message : String(error), kind: undefined };
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Sends to many chats in parallel with automatic 429 retry.
|
|
11
|
-
*
|
|
12
|
-
* There is no proactive cooldown: all chats (up to `concurrency`) are attempted
|
|
13
|
-
* at once. The only waiting ever done is the `retry_after` delay Telegram itself
|
|
14
|
-
* returns with a 429 answer, so bursts of 1000+ chats still deliver completely
|
|
15
|
-
* instead of failing.
|
|
16
|
-
*/
|
|
17
|
-
export async function runBroadcast(chatIds, send, options = {}) {
|
|
18
|
-
const startedAt = Date.now();
|
|
19
|
-
const maxAttempts = options.maxAttempts ?? 10;
|
|
20
|
-
const failures = [];
|
|
21
|
-
let delivered = 0;
|
|
22
|
-
let processed = 0;
|
|
23
|
-
const total = chatIds.length;
|
|
24
|
-
await mapWithConcurrency(chatIds, options.concurrency ?? Infinity, async (chatId) => {
|
|
25
|
-
let attempts = 0;
|
|
26
|
-
while (true) {
|
|
27
|
-
if (options.signal?.aborted) {
|
|
28
|
-
failures.push({ chatId, attempts, error: "aborted", errorKind: "aborted" });
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
attempts += 1;
|
|
32
|
-
try {
|
|
33
|
-
await send(chatId);
|
|
34
|
-
delivered += 1;
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
const telegram = error instanceof TelegramError ? error : undefined;
|
|
39
|
-
if (telegram?.kind === "rate-limit" && attempts < maxAttempts) {
|
|
40
|
-
// Telegram told us exactly how long to wait; honor it (plus a small
|
|
41
|
-
// jitter so retried chats do not fire as one synchronized wave).
|
|
42
|
-
const retryAfterMs = Math.max(0, (telegram.retryAfter ?? 1) * 1000);
|
|
43
|
-
await sleep(retryAfterMs + Math.random() * 250);
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
const { message, kind } = describeError(error);
|
|
47
|
-
failures.push({ chatId, attempts, error: message, errorKind: kind });
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
processed += 1;
|
|
52
|
-
options.onProgress?.({ total, processed, delivered, failed: failures.length });
|
|
53
|
-
});
|
|
54
|
-
return { total, delivered, failed: failures.length, durationMs: Date.now() - startedAt, failures };
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=broadcast.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../../src/broadcast/broadcast.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { type Storage } from "../storage/storage.js";
|
|
2
|
-
export interface Cache<K = string, V = unknown> {
|
|
3
|
-
get(key: K): Promise<V | undefined>;
|
|
4
|
-
set(key: K, value: V, ttlMs?: number): Promise<void>;
|
|
5
|
-
delete(key: K): Promise<boolean>;
|
|
6
|
-
invalidate(prefix?: string): Promise<void>;
|
|
7
|
-
getOrSet(key: K, factory: () => V | Promise<V>, ttlMs?: number): Promise<V>;
|
|
8
|
-
}
|
|
9
|
-
export declare class MemoryCache<V = unknown> implements Cache<string, V> {
|
|
10
|
-
private readonly storage;
|
|
11
|
-
private readonly namespace;
|
|
12
|
-
constructor(namespace?: string, storage?: Storage<string, V>);
|
|
13
|
-
private key;
|
|
14
|
-
get(key: string): Promise<V | undefined>;
|
|
15
|
-
set(key: string, value: V, ttlMs?: number): Promise<void>;
|
|
16
|
-
delete(key: string): Promise<boolean>;
|
|
17
|
-
invalidate(prefix?: string): Promise<void>;
|
|
18
|
-
getOrSet(key: string, factory: () => V | Promise<V>, ttlMs?: number): Promise<V>;
|
|
19
|
-
}
|
|
20
|
-
export interface RateLimitResult {
|
|
21
|
-
allowed: boolean;
|
|
22
|
-
remaining: number;
|
|
23
|
-
resetAt: number;
|
|
24
|
-
retryAfterMs?: number;
|
|
25
|
-
}
|
|
26
|
-
export declare class TokenBucketLimiter {
|
|
27
|
-
private readonly capacity;
|
|
28
|
-
private readonly refillPerSecond;
|
|
29
|
-
private readonly buckets;
|
|
30
|
-
constructor(capacity: number, refillPerSecond: number);
|
|
31
|
-
consume(key: string, cost?: number): RateLimitResult;
|
|
32
|
-
clear(key?: string): void;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,WAAW,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO;IAC5C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AAED,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAD5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBACvB,SAAS,SAAa,EAAmB,OAAO,GAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAkC;IACjH,OAAO,CAAC,GAAG;IACX,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACzD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC/B,UAAU,CAAC,MAAM,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CACvF;AAED,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;AAChH,qBAAa,kBAAkB;IAEjB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAU,OAAO,CAAC,QAAQ,CAAC,eAAe;IAD/E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4D;gBACvD,QAAQ,EAAE,MAAM,EAAmB,eAAe,EAAE,MAAM;IACvF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,eAAe;IAC/C,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAC1B"}
|
package/dist/src/cache/cache.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { MemoryStorage } from "../storage/storage.js";
|
|
2
|
-
export class MemoryCache {
|
|
3
|
-
storage;
|
|
4
|
-
namespace;
|
|
5
|
-
constructor(namespace = "telebibz", storage = new MemoryStorage()) {
|
|
6
|
-
this.storage = storage;
|
|
7
|
-
this.namespace = namespace;
|
|
8
|
-
}
|
|
9
|
-
key(key) { return `${this.namespace}:${key}`; }
|
|
10
|
-
get(key) { return this.storage.get(this.key(key)); }
|
|
11
|
-
set(key, value, ttlMs) { return this.storage.set(this.key(key), value, ttlMs === undefined ? {} : { ttlMs }); }
|
|
12
|
-
delete(key) { return this.storage.delete(this.key(key)); }
|
|
13
|
-
async invalidate(prefix = "") { const keys = []; for await (const key of this.storage.keys())
|
|
14
|
-
if (key.startsWith(this.key(prefix)))
|
|
15
|
-
keys.push(key); for (const key of keys)
|
|
16
|
-
await this.storage.delete(key); }
|
|
17
|
-
async getOrSet(key, factory, ttlMs) { const existing = await this.get(key); if (existing !== undefined)
|
|
18
|
-
return existing; const value = await factory(); await this.set(key, value, ttlMs); return value; }
|
|
19
|
-
}
|
|
20
|
-
export class TokenBucketLimiter {
|
|
21
|
-
capacity;
|
|
22
|
-
refillPerSecond;
|
|
23
|
-
buckets = new Map();
|
|
24
|
-
constructor(capacity, refillPerSecond) {
|
|
25
|
-
this.capacity = capacity;
|
|
26
|
-
this.refillPerSecond = refillPerSecond;
|
|
27
|
-
if (capacity <= 0 || refillPerSecond <= 0)
|
|
28
|
-
throw new RangeError("capacity and refillPerSecond must be positive");
|
|
29
|
-
}
|
|
30
|
-
consume(key, cost = 1) { if (!Number.isFinite(cost) || cost <= 0)
|
|
31
|
-
throw new RangeError("cost must be positive"); const now = Date.now(); const current = this.buckets.get(key) ?? { tokens: this.capacity, updatedAt: now }; const elapsedSeconds = (now - current.updatedAt) / 1000; current.tokens = Math.min(this.capacity, current.tokens + elapsedSeconds * this.refillPerSecond); current.updatedAt = now; if (current.tokens < cost) {
|
|
32
|
-
const retryAfterMs = Math.ceil(((cost - current.tokens) / this.refillPerSecond) * 1000);
|
|
33
|
-
this.buckets.set(key, current);
|
|
34
|
-
return { allowed: false, remaining: Math.floor(current.tokens), resetAt: now + retryAfterMs, retryAfterMs };
|
|
35
|
-
} current.tokens -= cost; this.buckets.set(key, current); return { allowed: true, remaining: Math.floor(current.tokens), resetAt: now + Math.ceil(((this.capacity - current.tokens) / this.refillPerSecond) * 1000) }; }
|
|
36
|
-
clear(key) { if (key === undefined)
|
|
37
|
-
this.buckets.clear();
|
|
38
|
-
else
|
|
39
|
-
this.buckets.delete(key); }
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/cache/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli.d.ts
DELETED
package/dist/src/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAyCA,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtE"}
|
package/dist/src/cli.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { access, mkdir, writeFile } from "node:fs/promises";
|
|
2
|
-
import { spawn } from "node:child_process";
|
|
3
|
-
import { createWebhookHandler } from "./webhook/handler.js";
|
|
4
|
-
import { Bot } from "./core/bot.js";
|
|
5
|
-
import { printTeleBibzBanner } from "./branding/terminal.js";
|
|
6
|
-
async function commandDoctor() {
|
|
7
|
-
printTeleBibzBanner({ subtitle: "telebibz doctor" });
|
|
8
|
-
const token = process.env.TELEGRAM_BOT_TOKEN;
|
|
9
|
-
console.log(JSON.stringify({ node: process.version, tokenPresent: Boolean(token), cwd: process.cwd(), package: "@xbibzlibrary/telebibz" }, null, 2));
|
|
10
|
-
if (token) {
|
|
11
|
-
const bot = new Bot({ token, branding: false });
|
|
12
|
-
const health = await bot.health();
|
|
13
|
-
console.log(JSON.stringify(health, null, 2));
|
|
14
|
-
if (!health.apiReachable)
|
|
15
|
-
process.exitCode = 1;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
async function commandStart() {
|
|
19
|
-
const token = process.env.TELEGRAM_BOT_TOKEN;
|
|
20
|
-
if (!token)
|
|
21
|
-
throw new Error("TELEGRAM_BOT_TOKEN is required");
|
|
22
|
-
const bot = new Bot(token);
|
|
23
|
-
await bot.start();
|
|
24
|
-
}
|
|
25
|
-
async function commandInit(name) {
|
|
26
|
-
const dir = name || "my-telebibz-bot";
|
|
27
|
-
printTeleBibzBanner({ subtitle: "telebibz init" });
|
|
28
|
-
await mkdir(dir, { recursive: true });
|
|
29
|
-
await writeFile(`${dir}/index.ts`, `import { Bot } from "@xbibzlibrary/telebibz";\n\nconst bot = new Bot(process.env.TELEGRAM_BOT_TOKEN!);\nbot.command("start", (ctx) => ctx.reply("Hello from telebibz"));\nawait bot.start();\n`);
|
|
30
|
-
await writeFile(`${dir}/.env.example`, "TELEGRAM_BOT_TOKEN=\n");
|
|
31
|
-
console.log(`Created ${dir}`);
|
|
32
|
-
}
|
|
33
|
-
async function run(name, args) {
|
|
34
|
-
return new Promise((resolve) => {
|
|
35
|
-
const child = spawn(name, args, { stdio: "inherit", shell: false });
|
|
36
|
-
child.on("exit", (code, signal) => resolve(signal ? 1 : code ?? 1));
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
export async function main(argv = process.argv.slice(2)) {
|
|
40
|
-
const [command, argument] = argv;
|
|
41
|
-
switch (command) {
|
|
42
|
-
case "start":
|
|
43
|
-
await commandStart();
|
|
44
|
-
break;
|
|
45
|
-
case "doctor":
|
|
46
|
-
await commandDoctor();
|
|
47
|
-
break;
|
|
48
|
-
case "init":
|
|
49
|
-
await commandInit(argument ?? "my-telebibz-bot");
|
|
50
|
-
break;
|
|
51
|
-
case "generate":
|
|
52
|
-
process.exitCode = await run("node", ["scripts/generate-api.mjs"]);
|
|
53
|
-
break;
|
|
54
|
-
case "build":
|
|
55
|
-
process.exitCode = await run("npm", ["run", "build"]);
|
|
56
|
-
break;
|
|
57
|
-
case "test":
|
|
58
|
-
process.exitCode = await run("npm", ["test"]);
|
|
59
|
-
break;
|
|
60
|
-
case "webhook": {
|
|
61
|
-
const token = process.env.TELEGRAM_BOT_TOKEN;
|
|
62
|
-
if (!token)
|
|
63
|
-
throw new Error("TELEGRAM_BOT_TOKEN is required");
|
|
64
|
-
const bot = new Bot({ token, branding: false });
|
|
65
|
-
printTeleBibzBanner({ subtitle: "telebibz webhook", message: "Webhook handler ready" });
|
|
66
|
-
const webhookOptions = process.env.TELEGRAM_WEBHOOK_SECRET ? { secretToken: process.env.TELEGRAM_WEBHOOK_SECRET } : {};
|
|
67
|
-
const handler = createWebhookHandler(bot, webhookOptions);
|
|
68
|
-
await access(".");
|
|
69
|
-
console.log(`Handler type: ${typeof handler}`);
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
case "inspect":
|
|
73
|
-
console.log(JSON.stringify({ cwd: process.cwd(), node: process.version }, null, 2));
|
|
74
|
-
break;
|
|
75
|
-
default: console.log("telebibz commands: start, init, dev, generate, webhook, doctor, test, inspect, build");
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (process.argv[1]?.endsWith("/cli.js") || process.argv[1]?.endsWith("/cli.ts"))
|
|
79
|
-
void main().catch((error) => {
|
|
80
|
-
const message = error instanceof Error ? error.message : "Unknown CLI error";
|
|
81
|
-
console.error(`telebibz: ${message}`);
|
|
82
|
-
process.exitCode = 1;
|
|
83
|
-
});
|
|
84
|
-
//# sourceMappingURL=cli.js.map
|