balebaazoo 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +12 -3
- package/README.md +58 -27
- package/dist/index.cjs +162 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -7
- package/dist/index.d.ts +31 -7
- package/dist/index.js +162 -36
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/file/input-file.ts","../src/api/client.ts","../src/middleware/types.ts","../src/filters/query.ts","../src/composer.ts","../src/context.ts","../src/middleware/auto-answer-callback.ts","../src/runner/polling.ts","../src/bot.ts","../src/formatting/markdown.ts","../src/keyboard/inline.ts","../src/keyboard/reply.ts"],"names":["path","createReadStream","basename","Readable","stat","sleep"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ResponseParameters } from \"./types/index.js\";\n\nexport class BaleError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"BaleError\";\n }\n}\n\nexport class BaleAPIError extends BaleError {\n readonly errorCode: number;\n readonly description: string;\n readonly parameters?: ResponseParameters;\n\n constructor(\n errorCode: number,\n description: string,\n parameters?: ResponseParameters,\n ) {\n super(`Bale API error ${errorCode}: ${description}`);\n this.name = \"BaleAPIError\";\n this.errorCode = errorCode;\n this.description = description;\n this.parameters = parameters;\n }\n}\n\nexport class BaleNetworkError extends BaleError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"BaleNetworkError\";\n }\n}\n","import { createReadStream } from \"node:fs\";\nimport { stat } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { Readable } from \"node:stream\";\n\nexport type InputFileSource =\n | Buffer\n | Uint8Array\n | Blob\n | ReadableStream<Uint8Array>\n | Readable\n | string;\n\nexport class InputFile {\n readonly source: InputFileSource;\n readonly filename: string;\n\n constructor(source: InputFileSource, filename?: string) {\n this.source = source;\n this.filename = filename ?? inferFilename(source);\n }\n\n static fromPath(path: string, filename?: string): InputFile {\n return new InputFile(createReadStream(path), filename ?? basename(path));\n }\n\n async toBlob(): Promise<Blob> {\n if (this.source instanceof Blob) {\n return this.source;\n }\n\n if (typeof this.source === \"string\") {\n if (this.source.startsWith(\"http://\") || this.source.startsWith(\"https://\")) {\n throw new Error(\"URL sources cannot be converted to Blob for upload\");\n }\n return new Blob([this.source]);\n }\n\n if (Buffer.isBuffer(this.source) || this.source instanceof Uint8Array) {\n const bytes = Buffer.isBuffer(this.source)\n ? this.source\n : Buffer.from(this.source);\n return new Blob([bytes]);\n }\n\n if (this.source instanceof Readable) {\n const chunks: Buffer[] = [];\n for await (const chunk of this.source) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return new Blob(chunks);\n }\n\n if (this.source instanceof ReadableStream) {\n const reader = this.source.getReader();\n const chunks: Uint8Array[] = [];\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) chunks.push(value);\n }\n return new Blob(chunks);\n }\n\n throw new Error(\"Unsupported InputFile source\");\n }\n}\n\nfunction inferFilename(source: InputFileSource): string {\n if (typeof source === \"string\") {\n if (source.includes(\"/\") || source.includes(\"\\\\\")) {\n return basename(source);\n }\n return \"file.bin\";\n }\n\n if (source instanceof Readable && \"path\" in source) {\n const path = (source as Readable & { path?: string }).path;\n if (typeof path === \"string\") {\n return basename(path);\n }\n }\n\n return \"file.bin\";\n}\n\nexport async function isFilePath(source: InputFileSource): Promise<boolean> {\n if (typeof source !== \"string\") return false;\n if (source.startsWith(\"http://\") || source.startsWith(\"https://\")) {\n return false;\n }\n try {\n const info = await stat(source);\n return info.isFile();\n } catch {\n return false;\n }\n}\n","import { BaleAPIError, BaleNetworkError } from \"../errors.js\";\nimport { InputFile, isFilePath } from \"../file/input-file.js\";\nimport type { BaleApiResponse } from \"../types/index.js\";\nimport type { ApiMethod, ApiMethodResultMap } from \"../types/methods.js\";\n\nexport const DEFAULT_API_BASE = \"https://tapi.bale.ai\";\n\nexport interface ApiClientOptions {\n token: string;\n baseUrl?: string;\n fetch?: typeof fetch;\n maxRetries?: number;\n retryDelayMs?: number;\n}\n\ntype RequestBody =\n | Record<string, unknown>\n | FormData\n | undefined;\n\nexport class Api {\n readonly token: string;\n private readonly baseUrl: string;\n private readonly fetchFn: typeof fetch;\n private readonly maxRetries: number;\n private readonly retryDelayMs: number;\n\n constructor(options: ApiClientOptions) {\n this.token = options.token;\n this.baseUrl = options.baseUrl ?? DEFAULT_API_BASE;\n this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.maxRetries = options.maxRetries ?? 3;\n this.retryDelayMs = options.retryDelayMs ?? 500;\n }\n\n get fileBaseUrl(): string {\n return `${this.baseUrl}/file/bot${this.token}`;\n }\n\n private methodUrl(method: string): string {\n return `${this.baseUrl}/bot${this.token}/${method}`;\n }\n\n async call<M extends ApiMethod>(\n method: M,\n params?: Record<string, unknown>,\n ): Promise<ApiMethodResultMap[M]> {\n let attempt = 0;\n\n while (true) {\n try {\n return await this.invoke<M>(method, params);\n } catch (error) {\n if (\n error instanceof BaleAPIError &&\n error.errorCode === 429 &&\n attempt < this.maxRetries\n ) {\n const retryAfter = (error.parameters?.retry_after ?? 1) * 1000;\n await sleep(retryAfter);\n attempt++;\n continue;\n }\n throw error;\n }\n }\n }\n\n private async invoke<M extends ApiMethod>(\n method: M,\n params?: Record<string, unknown>,\n ): Promise<ApiMethodResultMap[M]> {\n const { body } = await this.prepareBody(params ?? {});\n const headers: Record<string, string> = {};\n\n if (!(body instanceof FormData)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n return this.request<ApiMethodResultMap[M]>(method, {\n method: \"POST\",\n headers,\n body: body instanceof FormData ? body : JSON.stringify(body ?? {}),\n });\n }\n\n async downloadFile(filePath: string): Promise<ArrayBuffer> {\n const url = `${this.fileBaseUrl}/${filePath}`;\n const response = await this.fetchWithRetry(url, { method: \"GET\" });\n if (!response.ok) {\n throw new BaleNetworkError(\n `Failed to download file: HTTP ${response.status}`,\n );\n }\n return response.arrayBuffer();\n }\n\n private async prepareBody(\n params: Record<string, unknown>,\n ): Promise<{ body: RequestBody; isMultipart: boolean }> {\n const entries = Object.entries(params).filter(([, value]) => value !== undefined);\n const fileEntries: Array<[string, InputFile]> = [];\n\n for (const [key, value] of entries) {\n if (value instanceof InputFile) {\n fileEntries.push([key, value]);\n } else if (typeof value === \"string\" && (await isFilePath(value))) {\n fileEntries.push([key, InputFile.fromPath(value)]);\n }\n }\n\n if (fileEntries.length === 0) {\n const jsonBody: Record<string, unknown> = {};\n for (const [key, value] of entries) {\n jsonBody[key] = serializeValue(value);\n }\n return { body: jsonBody, isMultipart: false };\n }\n\n const formData = new FormData();\n for (const [key, value] of entries) {\n if (value instanceof InputFile || (typeof value === \"string\" && (await isFilePath(value)))) {\n continue;\n }\n appendFormValue(formData, key, value);\n }\n\n for (const [key, file] of fileEntries) {\n const blob = await file.toBlob();\n formData.append(key, blob, file.filename);\n }\n\n return { body: formData, isMultipart: true };\n }\n\n private async request<T>(\n method: string,\n init: RequestInit,\n ): Promise<T> {\n const response = await this.fetchWithRetry(this.methodUrl(method), init);\n const payload = (await response.json()) as BaleApiResponse<T>;\n\n if (!payload.ok) {\n throw new BaleAPIError(\n payload.error_code ?? response.status,\n payload.description ?? \"Unknown API error\",\n payload.parameters,\n );\n }\n\n return payload.result as T;\n }\n\n private async fetchWithRetry(\n url: string,\n init: RequestInit,\n ): Promise<Response> {\n let attempt = 0;\n let lastError: unknown;\n\n while (attempt <= this.maxRetries) {\n try {\n const response = await this.fetchFn(url, init);\n\n if (response.status === 429) {\n const retryAfter = Number(response.headers.get(\"retry-after\") ?? \"1\");\n await sleep(retryAfter * 1000);\n attempt++;\n continue;\n }\n\n if (!response.ok && response.status >= 500 && attempt < this.maxRetries) {\n await sleep(this.retryDelayMs * 2 ** attempt);\n attempt++;\n continue;\n }\n\n return response;\n } catch (error) {\n lastError = error;\n if (attempt >= this.maxRetries) {\n break;\n }\n await sleep(this.retryDelayMs * 2 ** attempt);\n attempt++;\n }\n }\n\n throw new BaleNetworkError(\n `Network request failed after ${this.maxRetries + 1} attempts`,\n { cause: lastError },\n );\n }\n\n getMe() {\n return this.call(\"getMe\");\n }\n\n getUpdates(params?: import(\"../types/methods.js\").GetUpdatesParams) {\n return this.call(\"getUpdates\", asParams(params));\n }\n\n setWebhook(params: import(\"../types/methods.js\").SetWebhookParams) {\n return this.call(\"setWebhook\", asParams(params));\n }\n\n deleteWebhook() {\n return this.call(\"deleteWebhook\");\n }\n\n getWebhookInfo() {\n return this.call(\"getWebhookInfo\");\n }\n\n sendMessage(params: import(\"../types/methods.js\").SendMessageParams) {\n return this.call(\"sendMessage\", asParams(params));\n }\n\n forwardMessage(params: import(\"../types/methods.js\").ForwardMessageParams) {\n return this.call(\"forwardMessage\", asParams(params));\n }\n\n copyMessage(params: import(\"../types/methods.js\").CopyMessageParams) {\n return this.call(\"copyMessage\", asParams(params));\n }\n\n sendPhoto(params: import(\"../types/methods.js\").SendPhotoParams) {\n return this.call(\"sendPhoto\", asParams(params));\n }\n\n sendAudio(params: import(\"../types/methods.js\").SendAudioParams) {\n return this.call(\"sendAudio\", asParams(params));\n }\n\n sendDocument(params: import(\"../types/methods.js\").SendDocumentParams) {\n return this.call(\"sendDocument\", asParams(params));\n }\n\n sendVideo(params: import(\"../types/methods.js\").SendVideoParams) {\n return this.call(\"sendVideo\", asParams(params));\n }\n\n sendAnimation(params: import(\"../types/methods.js\").SendAnimationParams) {\n return this.call(\"sendAnimation\", asParams(params));\n }\n\n sendVoice(params: import(\"../types/methods.js\").SendVoiceParams) {\n return this.call(\"sendVoice\", asParams(params));\n }\n\n sendMediaGroup(params: import(\"../types/methods.js\").SendMediaGroupParams) {\n return this.call(\"sendMediaGroup\", {\n ...params,\n media: JSON.stringify(params.media),\n } as Record<string, unknown>);\n }\n\n sendLocation(params: import(\"../types/methods.js\").SendLocationParams) {\n return this.call(\"sendLocation\", asParams(params));\n }\n\n sendContact(params: import(\"../types/methods.js\").SendContactParams) {\n return this.call(\"sendContact\", asParams(params));\n }\n\n sendChatAction(params: import(\"../types/methods.js\").SendChatActionParams) {\n return this.call(\"sendChatAction\", asParams(params));\n }\n\n getFile(params: import(\"../types/methods.js\").GetFileParams) {\n return this.call(\"getFile\", asParams(params));\n }\n\n answerCallbackQuery(\n params: import(\"../types/methods.js\").AnswerCallbackQueryParams,\n ) {\n return this.call(\"answerCallbackQuery\", asParams(params));\n }\n\n askReview(params: import(\"../types/methods.js\").AskReviewParams) {\n return this.call(\"askReview\", asParams(params));\n }\n\n banChatMember(params: import(\"../types/methods.js\").BanChatMemberParams) {\n return this.call(\"banChatMember\", asParams(params));\n }\n\n unbanChatMember(params: import(\"../types/methods.js\").UnbanChatMemberParams) {\n return this.call(\"unbanChatMember\", asParams(params));\n }\n\n promoteChatMember(\n params: import(\"../types/methods.js\").PromoteChatMemberParams,\n ) {\n return this.call(\"promoteChatMember\", asParams(params));\n }\n\n setChatPhoto(params: import(\"../types/methods.js\").SetChatPhotoParams) {\n return this.call(\"setChatPhoto\", asParams(params));\n }\n\n leaveChat(params: import(\"../types/methods.js\").LeaveChatParams) {\n return this.call(\"leaveChat\", asParams(params));\n }\n\n getChat(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"getChat\", asParams(params));\n }\n\n getChatAdministrators(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"getChatAdministrators\", asParams(params));\n }\n\n getChatMembersCount(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"getChatMembersCount\", asParams(params));\n }\n\n getChatMember(params: import(\"../types/methods.js\").GetChatMemberParams) {\n return this.call(\"getChatMember\", asParams(params));\n }\n\n pinChatMessage(params: import(\"../types/methods.js\").PinChatMessageParams) {\n return this.call(\"pinChatMessage\", asParams(params));\n }\n\n unPinChatMessage(params: import(\"../types/methods.js\").PinChatMessageParams) {\n return this.call(\"unPinChatMessage\", asParams(params));\n }\n\n unpinAllChatMessages(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"unpinAllChatMessages\", asParams(params));\n }\n\n setChatTitle(params: import(\"../types/methods.js\").SetChatTitleParams) {\n return this.call(\"setChatTitle\", asParams(params));\n }\n\n setChatDescription(\n params: import(\"../types/methods.js\").SetChatDescriptionParams,\n ) {\n return this.call(\"setChatDescription\", asParams(params));\n }\n\n deleteChatPhoto(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"deleteChatPhoto\", asParams(params));\n }\n\n createChatInviteLink(\n params: import(\"../types/methods.js\").CreateChatInviteLinkParams,\n ) {\n return this.call(\"createChatInviteLink\", asParams(params));\n }\n\n revokeChatInviteLink(\n params: import(\"../types/methods.js\").RevokeChatInviteLinkParams,\n ) {\n return this.call(\"revokeChatInviteLink\", asParams(params));\n }\n\n exportChatInviteLink(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"exportChatInviteLink\", asParams(params));\n }\n\n editMessageText(params: import(\"../types/methods.js\").EditMessageTextParams) {\n return this.call(\"editMessageText\", asParams(params));\n }\n\n editMessageCaption(\n params: import(\"../types/methods.js\").EditMessageCaptionParams,\n ) {\n return this.call(\"editMessageCaption\", asParams(params));\n }\n\n editMessageReplyMarkup(\n params: import(\"../types/methods.js\").EditMessageReplyMarkupParams,\n ) {\n return this.call(\"editMessageReplyMarkup\", asParams(params));\n }\n\n deleteMessage(params: import(\"../types/methods.js\").DeleteMessageParams) {\n return this.call(\"deleteMessage\", asParams(params));\n }\n\n uploadStickerFile(\n params: import(\"../types/methods.js\").UploadStickerFileParams,\n ) {\n return this.call(\"uploadStickerFile\", asParams(params));\n }\n\n createNewStickerSet(\n params: import(\"../types/methods.js\").CreateNewStickerSetParams,\n ) {\n return this.call(\"createNewStickerSet\", {\n ...params,\n sticker: JSON.stringify(params.sticker),\n } as Record<string, unknown>);\n }\n\n addStickerToSet(params: import(\"../types/methods.js\").AddStickerToSetParams) {\n return this.call(\"addStickerToSet\", {\n ...params,\n sticker: JSON.stringify(params.sticker),\n } as Record<string, unknown>);\n }\n\n sendInvoice(params: import(\"../types/methods.js\").SendInvoiceParams) {\n return this.call(\"sendInvoice\", {\n ...params,\n prices: JSON.stringify(params.prices),\n } as Record<string, unknown>);\n }\n\n createInvoiceLink(\n params: import(\"../types/methods.js\").CreateInvoiceLinkParams,\n ) {\n return this.call(\"createInvoiceLink\", {\n ...params,\n prices: JSON.stringify(params.prices),\n } as Record<string, unknown>);\n }\n\n answerPreCheckoutQuery(\n params: import(\"../types/methods.js\").AnswerPreCheckoutQueryParams,\n ) {\n return this.call(\"answerPreCheckoutQuery\", asParams(params));\n }\n\n inquireTransaction(\n params: import(\"../types/methods.js\").InquireTransactionParams,\n ) {\n return this.call(\"inquireTransaction\", asParams(params));\n }\n}\n\nfunction asParams(\n params?: Record<string, unknown> | object,\n): Record<string, unknown> | undefined {\n return params as Record<string, unknown> | undefined;\n}\n\nfunction serializeValue(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (Array.isArray(value) || typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n return value;\n}\n\nfunction appendFormValue(formData: FormData, key: string, value: unknown): void {\n if (value === undefined || value === null) return;\n\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n formData.append(key, String(value));\n return;\n }\n\n formData.append(key, JSON.stringify(value));\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type { Context } from \"../context.js\";\nimport type { Update } from \"../types/index.js\";\n\nexport type NextFunction = () => Promise<void>;\n\nexport type Middleware<C extends Context = Context> = (\n ctx: C,\n next: NextFunction,\n) => unknown | Promise<unknown>;\n\nexport type MiddlewareObject<C extends Context = Context> = {\n middleware: () => Middleware<C>;\n};\n\nexport type MiddlewareLike<C extends Context = Context> =\n | Middleware<C>\n | MiddlewareObject<C>;\n\nexport function isMiddlewareObject<C extends Context>(\n value: MiddlewareLike<C>,\n): value is MiddlewareObject<C> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"middleware\" in value &&\n typeof value.middleware === \"function\"\n );\n}\n\nexport function normalizeMiddleware<C extends Context>(\n middleware: MiddlewareLike<C>,\n): Middleware<C> {\n return isMiddlewareObject(middleware)\n ? middleware.middleware()\n : middleware;\n}\n\nexport async function runMiddleware<C extends Context>(\n middleware: Middleware<C>[],\n ctx: C,\n): Promise<void> {\n let index = -1;\n\n async function dispatch(current: number): Promise<void> {\n if (current <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = current;\n const handler = middleware[current];\n if (!handler) return;\n await handler(ctx, () => dispatch(current + 1));\n }\n\n await dispatch(0);\n}\n\nexport function matchUpdate(update: Update): string[] {\n const matches: string[] = [];\n\n if (update.message) {\n matches.push(\"message\");\n if (update.message.text !== undefined) matches.push(\"message:text\");\n if (update.message.photo) matches.push(\"message:photo\");\n if (update.message.document) matches.push(\"message:document\");\n if (update.message.voice) matches.push(\"message:voice\");\n if (update.message.audio) matches.push(\"message:audio\");\n if (update.message.video) matches.push(\"message:video\");\n if (update.message.location) matches.push(\"message:location\");\n if (update.message.contact) matches.push(\"message:contact\");\n if (update.message.sticker) matches.push(\"message:sticker\");\n if (update.message.successful_payment) {\n matches.push(\"message:successful_payment\");\n }\n if (update.message.web_app_data) matches.push(\"message:web_app_data\");\n if (update.message.text?.startsWith(\"/\")) {\n matches.push(\"message:command\");\n }\n }\n\n if (update.edited_message) {\n matches.push(\"edited_message\");\n if (update.edited_message.text !== undefined) {\n matches.push(\"edited_message:text\");\n }\n }\n\n if (update.callback_query) {\n matches.push(\"callback_query\");\n if (update.callback_query.data !== undefined) {\n matches.push(\"callback_query:data\");\n }\n }\n\n if (update.pre_checkout_query) {\n matches.push(\"pre_checkout_query\");\n }\n\n return matches;\n}\n\nexport function extractCommand(text: string): { command: string; args: string } | null {\n const match = text.trim().match(/^\\/([a-zA-Z0-9_]+)(?:@[\\w_]+)?(?:\\s+([\\s\\S]*))?$/);\n if (!match) return null;\n return {\n command: match[1]!.toLowerCase(),\n args: match[2]?.trim() ?? \"\",\n };\n}\n","import type { Context } from \"../context.js\";\nimport type { Chat } from \"../types/index.js\";\nimport { matchUpdate } from \"../middleware/types.js\";\n\nexport type FilterQuery =\n | \"message\"\n | \"message:text\"\n | \"message:photo\"\n | \"message:document\"\n | \"message:voice\"\n | \"message:audio\"\n | \"message:video\"\n | \"message:location\"\n | \"message:contact\"\n | \"message:sticker\"\n | \"message:command\"\n | \"message:successful_payment\"\n | \"message:web_app_data\"\n | \"edited_message\"\n | \"edited_message:text\"\n | \"callback_query\"\n | \"callback_query:data\"\n | \"pre_checkout_query\";\n\nexport type FilterContext<Q extends FilterQuery> = Q extends \"message\"\n ? Context & { message: NonNullable<Context[\"message\"]> }\n : Q extends \"message:text\"\n ? Context & { message: NonNullable<Context[\"message\"]> & { text: string } }\n : Q extends \"callback_query\"\n ? Context & { callbackQuery: NonNullable<Context[\"callbackQuery\"]> }\n : Q extends \"callback_query:data\"\n ? Context & {\n callbackQuery: NonNullable<Context[\"callbackQuery\"]> & {\n data: string;\n };\n }\n : Q extends \"pre_checkout_query\"\n ? Context & {\n preCheckoutQuery: NonNullable<Context[\"preCheckoutQuery\"]>;\n }\n : Context;\n\nexport function matchesFilter(ctx: Context, filter: FilterQuery): boolean {\n const updateMatches = matchUpdate(ctx.update);\n return updateMatches.includes(filter);\n}\n\nexport function matchesAnyFilter(\n ctx: Context,\n filters: FilterQuery[],\n): boolean {\n const updateMatches = matchUpdate(ctx.update);\n return filters.some((filter) => updateMatches.includes(filter));\n}\n\nexport function matchesChatType(\n ctx: Context,\n chatType: Chat[\"type\"] | Chat[\"type\"][],\n): boolean {\n const chat = ctx.chat;\n if (!chat) return false;\n const types = Array.isArray(chatType) ? chatType : [chatType];\n return types.includes(chat.type);\n}\n","import { Context } from \"./context.js\";\nimport {\n extractCommand,\n normalizeMiddleware,\n runMiddleware,\n type Middleware,\n type MiddlewareLike,\n} from \"./middleware/types.js\";\nimport type { FilterQuery } from \"./filters/query.js\";\nimport {\n matchesAnyFilter,\n matchesChatType,\n} from \"./filters/query.js\";\nimport type { Chat } from \"./types/index.js\";\n\nexport class Composer<C extends Context = Context> {\n private readonly handler: Middleware<C>;\n private readonly registered: Middleware<C>[] = [];\n\n constructor(...middleware: MiddlewareLike<C>[]) {\n this.registered.push(...middleware.map(normalizeMiddleware));\n this.handler = async (ctx, next) => {\n await runMiddleware(this.registered, ctx);\n await next();\n };\n }\n\n middleware(): Middleware<C> {\n return this.handler;\n }\n\n use(...middleware: MiddlewareLike<C>[]): this {\n this.registered.push(...middleware.map(normalizeMiddleware));\n return this;\n }\n\n on(\n filter: FilterQuery | FilterQuery[],\n ...middleware: Middleware<C>[]\n ): this {\n const filters = Array.isArray(filter) ? filter : [filter];\n return this.filter(\n (ctx) => matchesAnyFilter(ctx, filters),\n ...middleware,\n );\n }\n\n filter(\n predicate: (ctx: C) => boolean | Promise<boolean>,\n ...middleware: Middleware<C>[]\n ): this {\n const composer = new Composer<C>();\n this.registered.push(async (ctx, next) => {\n const matches = await predicate(ctx);\n if (!matches) {\n await next();\n return;\n }\n await runMiddleware(\n [...composer.registered, async (_ctx, innerNext) => innerNext()],\n ctx,\n );\n });\n composer.registered.push(...middleware);\n return this;\n }\n\n command(\n command: string | string[],\n ...middleware: Middleware<C>[]\n ): this {\n const commands = new Set(\n (Array.isArray(command) ? command : [command]).map((value) =>\n value.toLowerCase().replace(/^\\//, \"\"),\n ),\n );\n\n return this.filter((ctx) => {\n const text = ctx.text;\n if (!text) return false;\n const parsed = extractCommand(text);\n if (!parsed) return false;\n return commands.has(parsed.command);\n }, async (ctx) => {\n const text = ctx.text;\n if (text) {\n const parsed = extractCommand(text);\n if (parsed) {\n Object.defineProperty(ctx, \"match\", {\n value: [parsed.command, parsed.args],\n writable: true,\n configurable: true,\n });\n }\n }\n await runMiddleware(middleware, ctx);\n });\n }\n\n hears(pattern: string | RegExp, ...middleware: Middleware<C>[]): this {\n const regex =\n typeof pattern === \"string\" ? new RegExp(`^${escapeRegex(pattern)}$`) : pattern;\n\n return this.filter((ctx) => {\n const text = ctx.text;\n if (!text) return false;\n return regex.test(text);\n }, async (ctx) => {\n const text = ctx.text;\n if (text) {\n const match = text.match(regex);\n Object.defineProperty(ctx, \"match\", {\n value: match,\n writable: true,\n configurable: true,\n });\n }\n await runMiddleware(middleware, ctx);\n });\n }\n\n chatType(\n chatType: Chat[\"type\"] | Chat[\"type\"][],\n ...middleware: Middleware<C>[]\n ): this {\n return this.filter(\n (ctx) => matchesChatType(ctx, chatType),\n ...middleware,\n );\n }\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { Api } from \"./api/client.js\";\nimport { InputFile } from \"./file/input-file.js\";\nimport type {\n CallbackQuery,\n Chat,\n ChatId,\n Message,\n PreCheckoutQuery,\n ReplyMarkup,\n Update,\n User,\n UserId,\n} from \"./types/index.js\";\nimport type {\n AnswerCallbackQueryParams,\n AnswerPreCheckoutQueryParams,\n ChatAction,\n InquireTransactionParams,\n SendAnimationParams,\n SendAudioParams,\n SendContactParams,\n SendDocumentParams,\n SendInvoiceParams,\n SendLocationParams,\n SendMessageParams,\n SendPhotoParams,\n SendVideoParams,\n SendVoiceParams,\n} from \"./types/methods.js\";\n\nexport interface ContextOptions {\n api: Api;\n update: Update;\n botInfo?: User;\n}\n\nexport class Context {\n readonly api: Api;\n readonly update: Update;\n readonly botInfo?: User;\n\n callbackQueryAnswered = false;\n\n constructor(options: ContextOptions) {\n this.api = options.api;\n this.update = options.update;\n this.botInfo = options.botInfo;\n }\n\n get updateId(): number {\n return this.update.update_id;\n }\n\n get message(): Message | undefined {\n return this.update.message ?? this.update.edited_message;\n }\n\n get editedMessage(): Message | undefined {\n return this.update.edited_message;\n }\n\n get callbackQuery(): CallbackQuery | undefined {\n return this.update.callback_query;\n }\n\n get preCheckoutQuery(): PreCheckoutQuery | undefined {\n return this.update.pre_checkout_query;\n }\n\n get from(): User | undefined {\n return (\n this.message?.from ??\n this.callbackQuery?.from ??\n this.preCheckoutQuery?.from\n );\n }\n\n get chat(): Chat | undefined {\n return this.message?.chat ?? this.callbackQuery?.message?.chat;\n }\n\n get chatId(): ChatId | undefined {\n return this.chat?.id;\n }\n\n get text(): string | undefined {\n return this.message?.text;\n }\n\n get match(): RegExpMatchArray | null {\n return null;\n }\n\n set match(value: RegExpMatchArray | null) {\n Object.defineProperty(this, \"match\", {\n value,\n writable: true,\n configurable: true,\n });\n }\n\n async reply(\n text: string,\n extra?: Omit<SendMessageParams, \"chat_id\" | \"text\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendMessage({ chat_id: chatId, text, ...extra });\n }\n\n async replyWithPhoto(\n photo: SendPhotoParams[\"photo\"],\n extra?: Omit<SendPhotoParams, \"chat_id\" | \"photo\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendPhoto({ chat_id: chatId, photo, ...extra });\n }\n\n async replyWithAudio(\n audio: SendAudioParams[\"audio\"],\n extra?: Omit<SendAudioParams, \"chat_id\" | \"audio\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendAudio({ chat_id: chatId, audio, ...extra });\n }\n\n async replyWithDocument(\n document: SendDocumentParams[\"document\"],\n extra?: Omit<SendDocumentParams, \"chat_id\" | \"document\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendDocument({ chat_id: chatId, document, ...extra });\n }\n\n async replyWithVideo(\n video: SendVideoParams[\"video\"],\n extra?: Omit<SendVideoParams, \"chat_id\" | \"video\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendVideo({ chat_id: chatId, video, ...extra });\n }\n\n async replyWithAnimation(\n animation: SendAnimationParams[\"animation\"],\n extra?: Omit<SendAnimationParams, \"chat_id\" | \"animation\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendAnimation({ chat_id: chatId, animation, ...extra });\n }\n\n async replyWithVoice(\n voice: SendVoiceParams[\"voice\"],\n extra?: Omit<SendVoiceParams, \"chat_id\" | \"voice\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendVoice({ chat_id: chatId, voice, ...extra });\n }\n\n async replyWithLocation(\n latitude: number,\n longitude: number,\n extra?: Omit<SendLocationParams, \"chat_id\" | \"latitude\" | \"longitude\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendLocation({\n chat_id: chatId,\n latitude,\n longitude,\n ...extra,\n });\n }\n\n async replyWithContact(\n phoneNumber: string,\n firstName: string,\n extra?: Omit<SendContactParams, \"chat_id\" | \"phone_number\" | \"first_name\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendContact({\n chat_id: chatId,\n phone_number: phoneNumber,\n first_name: firstName,\n ...extra,\n });\n }\n\n async replyWithInvoice(\n params: Omit<SendInvoiceParams, \"chat_id\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendInvoice({ chat_id: chatId, ...params });\n }\n\n async sendChatAction(action: ChatAction) {\n const chatId = this.requireChatId();\n return this.api.sendChatAction({ chat_id: chatId, action });\n }\n\n async answerCallbackQuery(\n params?: Omit<AnswerCallbackQueryParams, \"callback_query_id\">,\n ) {\n const callbackQuery = this.callbackQuery;\n if (!callbackQuery) {\n throw new Error(\"No callback query in context\");\n }\n\n if (callbackQuery.id.startsWith(\"1\")) {\n console.warn(\n \"[balebaazoo] callback_query_id starts with '1' — client may not support answerCallbackQuery\",\n );\n }\n\n this.callbackQueryAnswered = true;\n return this.api.answerCallbackQuery({\n callback_query_id: callbackQuery.id,\n ...params,\n });\n }\n\n async answerPreCheckoutQuery(\n params: Omit<AnswerPreCheckoutQueryParams, \"pre_checkout_query_id\">,\n ) {\n const query = this.preCheckoutQuery;\n if (!query) {\n throw new Error(\"No pre_checkout_query in context\");\n }\n\n return this.api.answerPreCheckoutQuery({\n pre_checkout_query_id: query.id,\n ...params,\n });\n }\n\n async askReview(userId: UserId, delaySeconds: number) {\n return this.api.askReview({ user_id: userId, delay_seconds: delaySeconds });\n }\n\n async inquireTransaction(\n params: InquireTransactionParams,\n ) {\n return this.api.inquireTransaction(params);\n }\n\n async downloadFile(fileId: string): Promise<ArrayBuffer> {\n const file = await this.api.getFile({ file_id: fileId });\n if (!file.file_path) {\n throw new Error(\"File path not available\");\n }\n return this.api.downloadFile(file.file_path);\n }\n\n async downloadToBuffer(fileId: string): Promise<Buffer> {\n const data = await this.downloadFile(fileId);\n return Buffer.from(data);\n }\n\n requireChatId(): ChatId {\n const chatId = this.chatId;\n if (chatId === undefined) {\n throw new Error(\"No chat_id available in context\");\n }\n return chatId;\n }\n\n requireFrom(): User {\n const from = this.from;\n if (!from) {\n throw new Error(\"No user available in context\");\n }\n return from;\n }\n}\n\nexport type ReplyOptions = {\n reply_markup?: ReplyMarkup;\n reply_to_message_id?: number;\n};\n\nexport { InputFile };\n","import type { Context } from \"../context.js\";\nimport type { Middleware } from \"./types.js\";\n\nexport function autoAnswerCallback(): Middleware<Context> {\n return async (ctx, next) => {\n try {\n await next();\n } finally {\n if (ctx.callbackQuery && !ctx.callbackQueryAnswered) {\n await ctx.answerCallbackQuery().catch(() => undefined);\n }\n }\n };\n}\n\nexport function errorHandler(\n onError: (error: unknown, ctx: Context) => Promise<void> | void,\n): Middleware<Context> {\n return async (ctx, next) => {\n try {\n await next();\n } catch (error) {\n await onError(error, ctx);\n }\n };\n}\n","import type { Bot } from \"../bot.js\";\nimport type { Update } from \"../types/index.js\";\n\nexport interface PollingBot {\n api: Bot[\"api\"];\n handleUpdate(update: Update): Promise<void>;\n init(): Promise<unknown>;\n}\n\nexport interface PollingOptions {\n limit?: number;\n timeout?: number;\n allowedUpdates?: string[];\n onError?: (error: unknown) => void;\n signal?: AbortSignal;\n}\n\nexport class PollingRunner {\n private running = false;\n private abortController?: AbortController;\n private offset = 0;\n\n async start(bot: PollingBot, options: PollingOptions = {}): Promise<void> {\n if (this.running) {\n throw new Error(\"Polling is already running\");\n }\n\n this.running = true;\n this.abortController = new AbortController();\n const signal = options.signal ?? this.abortController.signal;\n\n const onError = options.onError ?? ((error: unknown) => {\n console.error(\"[balebaazoo] polling error:\", error);\n });\n\n while (this.running && !signal.aborted) {\n try {\n const updates = await bot.api.getUpdates({\n offset: this.offset,\n limit: options.limit ?? 100,\n timeout: options.timeout ?? 30,\n allowed_updates: options.allowedUpdates,\n });\n\n for (const update of updates) {\n this.offset = update.update_id + 1;\n try {\n await bot.handleUpdate(update);\n } catch (error) {\n onError(error);\n }\n }\n\n if (updates.length === 0 && signal.aborted) {\n break;\n }\n } catch (error) {\n if (signal.aborted) break;\n onError(error);\n await sleep(1000);\n }\n }\n }\n\n async stop(): Promise<void> {\n this.running = false;\n this.abortController?.abort();\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function createWebhookHandler(\n bot: PollingBot,\n getUpdate: (request: Request) => Promise<Update>,\n options: { secretToken?: string; maxBodyBytes?: number } = {},\n): Promise<(request: Request) => Promise<Response>> {\n await bot.init();\n const maxBodyBytes = options.maxBodyBytes ?? 1024 * 1024;\n\n return async (request: Request) => {\n if (request.method !== \"POST\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n if (options.secretToken) {\n const token = request.headers.get(\"x-telegram-bot-api-secret-token\");\n if (token !== options.secretToken) {\n return new Response(\"Unauthorized\", { status: 401 });\n }\n }\n\n try {\n const rawBody = await request.text();\n if (rawBody.length > maxBodyBytes) {\n return new Response(\"Payload Too Large\", { status: 413 });\n }\n\n const syntheticRequest = new Request(request.url, {\n method: \"POST\",\n headers: request.headers,\n body: rawBody,\n });\n\n const update = await getUpdate(syntheticRequest);\n await bot.handleUpdate(update);\n return new Response(\"OK\", { status: 200 });\n } catch (error) {\n console.error(\"[balebaazoo] webhook error:\", error);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n };\n}\n\nexport async function webhookFromJson(bot: PollingBot): Promise<\n (request: Request) => Promise<Response>\n> {\n return createWebhookHandler(bot, async (request) => {\n return (await request.json()) as Update;\n });\n}\n","import { Api, type ApiClientOptions } from \"./api/client.js\";\nimport { Composer } from \"./composer.js\";\nimport { Context } from \"./context.js\";\nimport { autoAnswerCallback } from \"./middleware/auto-answer-callback.js\";\nimport type { Middleware, MiddlewareLike } from \"./middleware/types.js\";\nimport { PollingRunner, type PollingOptions } from \"./runner/polling.js\";\nimport type { Update, User } from \"./types/index.js\";\n\nexport interface BotOptions extends ApiClientOptions {\n botInfo?: User;\n autoAnswerCallback?: boolean;\n}\n\nexport class Bot<C extends Context = Context> extends Composer<C> {\n readonly api: Api;\n private botInfo?: User;\n private readonly polling = new PollingRunner();\n private readonly autoAnswer: boolean;\n\n constructor(token: string, options: Omit<BotOptions, \"token\"> = {}) {\n const api = new Api({ token, ...options });\n super();\n this.api = api;\n this.botInfo = options.botInfo;\n this.autoAnswer = options.autoAnswerCallback ?? true;\n\n if (this.autoAnswer) {\n this.use(autoAnswerCallback() as Middleware<C>);\n }\n }\n\n async init(): Promise<User> {\n if (!this.botInfo) {\n this.botInfo = await this.api.getMe();\n }\n return this.botInfo;\n }\n\n async handleUpdate(update: Update): Promise<void> {\n const ctx = this.createContext(update);\n await this.middleware()(ctx as C, async () => undefined);\n }\n\n createContext(update: Update): Context {\n return new Context({\n api: this.api,\n update,\n botInfo: this.botInfo,\n });\n }\n\n async start(options: PollingOptions = {}): Promise<void> {\n await this.init();\n await this.polling.start(this, options);\n }\n\n async stop(): Promise<void> {\n await this.polling.stop();\n }\n\n webhookCallback(): (update: Update) => Promise<void> {\n return async (update: Update) => {\n await this.handleUpdate(update);\n };\n }\n\n override use(...middleware: MiddlewareLike<C>[]): this {\n return super.use(...middleware);\n }\n}\n","export const bold = (text: string): string => ` *${text}* `;\nexport const italic = (text: string): string => ` _${text}_ `;\nexport const link = (text: string, url: string): string => `[${text}](${url})`;\nexport const spoiler = (text: string, description: string): string =>\n `\\`\\`\\`[${text}]${description}\\`\\`\\``;\n\nexport const md = {\n bold,\n italic,\n link,\n spoiler,\n};\n","import type {\n CopyTextButton,\n InlineKeyboardButton,\n InlineKeyboardMarkup,\n WebAppInfo,\n} from \"../types/index.js\";\n\nexport class InlineKeyboard implements InlineKeyboardMarkup {\n inline_keyboard: InlineKeyboardButton[][];\n\n constructor(rows: InlineKeyboardButton[][] = []) {\n this.inline_keyboard = rows;\n }\n\n row(...buttons: InlineKeyboardButton[]): this {\n this.inline_keyboard.push(buttons);\n return this;\n }\n\n text(text: string, callbackData: string): this {\n return this.row({ text, callback_data: callbackData });\n }\n\n url(text: string, url: string): this {\n return this.row({ text, url });\n }\n\n webApp(text: string, webApp: WebAppInfo): this {\n return this.row({ text, web_app: webApp });\n }\n\n copyText(text: string, copyText: CopyTextButton): this {\n return this.row({ text, copy_text: copyText });\n }\n\n toJSON(): InlineKeyboardMarkup {\n return { inline_keyboard: this.inline_keyboard };\n }\n}\n","import type {\n KeyboardButton,\n ReplyKeyboardMarkup,\n ReplyKeyboardRemove,\n WebAppInfo,\n} from \"../types/index.js\";\n\nexport class ReplyKeyboard implements ReplyKeyboardMarkup {\n keyboard: KeyboardButton[][];\n resize_keyboard?: boolean;\n one_time_keyboard?: boolean;\n selective?: boolean;\n\n constructor(rows: KeyboardButton[][] = []) {\n this.keyboard = rows;\n }\n\n row(...buttons: KeyboardButton[]): this {\n this.keyboard.push(buttons);\n return this;\n }\n\n text(text: string): this {\n return this.row({ text });\n }\n\n webApp(text: string, webApp: WebAppInfo): this {\n return this.row({ text, web_app: webApp });\n }\n\n resized(value = true): this {\n this.resize_keyboard = value;\n return this;\n }\n\n oneTime(value = true): this {\n this.one_time_keyboard = value;\n return this;\n }\n\n onlySelective(value = true): this {\n this.selective = value;\n return this;\n }\n\n toJSON(): ReplyKeyboardMarkup {\n return {\n keyboard: this.keyboard,\n resize_keyboard: this.resize_keyboard,\n one_time_keyboard: this.one_time_keyboard,\n selective: this.selective,\n };\n }\n}\n\nexport function removeKeyboard(): ReplyKeyboardRemove {\n return { remove_keyboard: true };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/file/input-file.ts","../src/api/client.ts","../src/middleware/types.ts","../src/filters/query.ts","../src/composer.ts","../src/context.ts","../src/middleware/auto-answer-callback.ts","../src/runner/polling.ts","../src/bot.ts","../src/formatting/markdown.ts","../src/keyboard/inline.ts","../src/keyboard/reply.ts","../src/middleware/error-handler.ts","../src/runner/shutdown.ts"],"names":["path","createReadStream","basename","Readable","stat","isAbortError","sleep"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ResponseParameters } from \"./types/index.js\";\n\nexport class BaleError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"BaleError\";\n }\n}\n\nexport class BaleAPIError extends BaleError {\n readonly errorCode: number;\n readonly description: string;\n readonly parameters?: ResponseParameters;\n\n constructor(\n errorCode: number,\n description: string,\n parameters?: ResponseParameters,\n ) {\n super(`Bale API error ${errorCode}: ${description}`);\n this.name = \"BaleAPIError\";\n this.errorCode = errorCode;\n this.description = description;\n this.parameters = parameters;\n }\n}\n\nexport class BaleNetworkError extends BaleError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"BaleNetworkError\";\n }\n}\n","import { createReadStream } from \"node:fs\";\nimport { stat } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { Readable } from \"node:stream\";\n\nexport type InputFileSource =\n | Buffer\n | Uint8Array\n | Blob\n | ReadableStream<Uint8Array>\n | Readable\n | string;\n\nexport class InputFile {\n readonly source: InputFileSource;\n readonly filename: string;\n\n constructor(source: InputFileSource, filename?: string) {\n this.source = source;\n this.filename = filename ?? inferFilename(source);\n }\n\n static fromPath(path: string, filename?: string): InputFile {\n return new InputFile(createReadStream(path), filename ?? basename(path));\n }\n\n async toBlob(): Promise<Blob> {\n if (this.source instanceof Blob) {\n return this.source;\n }\n\n if (typeof this.source === \"string\") {\n if (this.source.startsWith(\"http://\") || this.source.startsWith(\"https://\")) {\n throw new Error(\"URL sources cannot be converted to Blob for upload\");\n }\n return new Blob([this.source]);\n }\n\n if (Buffer.isBuffer(this.source) || this.source instanceof Uint8Array) {\n const bytes = Buffer.isBuffer(this.source)\n ? this.source\n : Buffer.from(this.source);\n return new Blob([bytes]);\n }\n\n if (this.source instanceof Readable) {\n const chunks: Buffer[] = [];\n for await (const chunk of this.source) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return new Blob(chunks);\n }\n\n if (this.source instanceof ReadableStream) {\n const reader = this.source.getReader();\n const chunks: Uint8Array[] = [];\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) chunks.push(value);\n }\n return new Blob(chunks);\n }\n\n throw new Error(\"Unsupported InputFile source\");\n }\n}\n\nfunction inferFilename(source: InputFileSource): string {\n if (typeof source === \"string\") {\n if (source.includes(\"/\") || source.includes(\"\\\\\")) {\n return basename(source);\n }\n return \"file.bin\";\n }\n\n if (source instanceof Readable && \"path\" in source) {\n const path = (source as Readable & { path?: string }).path;\n if (typeof path === \"string\") {\n return basename(path);\n }\n }\n\n return \"file.bin\";\n}\n\nexport async function isFilePath(source: InputFileSource): Promise<boolean> {\n if (typeof source !== \"string\") return false;\n if (source.startsWith(\"http://\") || source.startsWith(\"https://\")) {\n return false;\n }\n if (!looksLikePath(source)) {\n return false;\n }\n try {\n const info = await stat(source);\n return info.isFile();\n } catch {\n return false;\n }\n}\n\nfunction looksLikePath(source: string): boolean {\n return (\n source.startsWith(\"./\") ||\n source.startsWith(\"../\") ||\n source.includes(\"/\") ||\n source.includes(\"\\\\\")\n );\n}\n","import { BaleAPIError, BaleNetworkError } from \"../errors.js\";\nimport { InputFile, isFilePath } from \"../file/input-file.js\";\nimport type { BaleApiResponse } from \"../types/index.js\";\nimport type { ApiMethod, ApiMethodResultMap } from \"../types/methods.js\";\n\nexport const DEFAULT_API_BASE = \"https://tapi.bale.ai\";\n\nexport interface ApiClientOptions {\n token: string;\n baseUrl?: string;\n fetch?: typeof fetch;\n maxRetries?: number;\n retryDelayMs?: number;\n}\n\nexport interface CallOptions {\n signal?: AbortSignal;\n}\n\ntype RequestBody =\n | Record<string, unknown>\n | FormData\n | undefined;\n\nexport class Api {\n readonly token: string;\n private readonly baseUrl: string;\n private readonly fetchFn: typeof fetch;\n private readonly maxRetries: number;\n private readonly retryDelayMs: number;\n\n constructor(options: ApiClientOptions) {\n this.token = options.token;\n this.baseUrl = options.baseUrl ?? DEFAULT_API_BASE;\n this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.maxRetries = options.maxRetries ?? 3;\n this.retryDelayMs = options.retryDelayMs ?? 500;\n }\n\n get fileBaseUrl(): string {\n return `${this.baseUrl}/file/bot${this.token}`;\n }\n\n private methodUrl(method: string): string {\n return `${this.baseUrl}/bot${this.token}/${method}`;\n }\n\n async call<M extends ApiMethod>(\n method: M,\n params?: Record<string, unknown>,\n options?: CallOptions,\n ): Promise<ApiMethodResultMap[M]> {\n let attempt = 0;\n\n while (true) {\n try {\n return await this.invoke<M>(method, params, options);\n } catch (error) {\n if (options?.signal?.aborted || isAbortError(error)) {\n throw error;\n }\n if (\n error instanceof BaleAPIError &&\n error.errorCode === 429 &&\n attempt < this.maxRetries\n ) {\n const retryAfter = (error.parameters?.retry_after ?? 1) * 1000;\n await sleep(retryAfter);\n attempt++;\n continue;\n }\n throw error;\n }\n }\n }\n\n private async invoke<M extends ApiMethod>(\n method: M,\n params?: Record<string, unknown>,\n options?: CallOptions,\n ): Promise<ApiMethodResultMap[M]> {\n const { body } = await this.prepareBody(params ?? {});\n const headers: Record<string, string> = {};\n\n if (!(body instanceof FormData)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n return this.request<ApiMethodResultMap[M]>(method, {\n method: \"POST\",\n headers,\n body: body instanceof FormData ? body : JSON.stringify(body ?? {}),\n }, options);\n }\n\n async downloadFile(filePath: string): Promise<ArrayBuffer> {\n const url = `${this.fileBaseUrl}/${filePath}`;\n const response = await this.fetchWithRetry(url, { method: \"GET\" });\n if (!response.ok) {\n throw new BaleNetworkError(\n `Failed to download file: HTTP ${response.status}`,\n );\n }\n return response.arrayBuffer();\n }\n\n private async prepareBody(\n params: Record<string, unknown>,\n ): Promise<{ body: RequestBody; isMultipart: boolean }> {\n const entries = Object.entries(params).filter(([, value]) => value !== undefined);\n const fileEntries: Array<[string, InputFile]> = [];\n\n for (const [key, value] of entries) {\n if (value instanceof InputFile) {\n fileEntries.push([key, value]);\n } else if (typeof value === \"string\" && (await isFilePath(value))) {\n fileEntries.push([key, InputFile.fromPath(value)]);\n }\n }\n\n if (fileEntries.length === 0) {\n const jsonBody: Record<string, unknown> = {};\n for (const [key, value] of entries) {\n jsonBody[key] = serializeValue(value);\n }\n return { body: jsonBody, isMultipart: false };\n }\n\n const formData = new FormData();\n for (const [key, value] of entries) {\n if (value instanceof InputFile || (typeof value === \"string\" && (await isFilePath(value)))) {\n continue;\n }\n appendFormValue(formData, key, value);\n }\n\n for (const [key, file] of fileEntries) {\n const blob = await file.toBlob();\n formData.append(key, blob, file.filename);\n }\n\n return { body: formData, isMultipart: true };\n }\n\n private async request<T>(\n method: string,\n init: RequestInit,\n options?: CallOptions,\n ): Promise<T> {\n const response = await this.fetchWithRetry(this.methodUrl(method), init, options);\n const payload = (await response.json()) as BaleApiResponse<T>;\n\n if (!payload.ok) {\n throw new BaleAPIError(\n payload.error_code ?? response.status,\n payload.description ?? \"Unknown API error\",\n payload.parameters,\n );\n }\n\n return payload.result as T;\n }\n\n private async fetchWithRetry(\n url: string,\n init: RequestInit,\n options?: CallOptions,\n ): Promise<Response> {\n let attempt = 0;\n let lastError: unknown;\n\n while (attempt <= this.maxRetries) {\n if (options?.signal?.aborted) {\n throw new DOMException(\"The operation was aborted\", \"AbortError\");\n }\n\n try {\n const response = await this.fetchFn(url, {\n ...init,\n signal: options?.signal,\n });\n\n if (response.status === 429) {\n const retryAfter = Number(response.headers.get(\"retry-after\") ?? \"1\");\n await sleep(retryAfter * 1000);\n attempt++;\n continue;\n }\n\n if (!response.ok && response.status >= 500 && attempt < this.maxRetries) {\n await sleep(this.retryDelayMs * 2 ** attempt);\n attempt++;\n continue;\n }\n\n return response;\n } catch (error) {\n lastError = error;\n if (isAbortError(error) || options?.signal?.aborted) {\n throw error;\n }\n if (attempt >= this.maxRetries) {\n break;\n }\n await sleep(this.retryDelayMs * 2 ** attempt);\n attempt++;\n }\n }\n\n throw new BaleNetworkError(\n `Network request failed after ${this.maxRetries + 1} attempts`,\n { cause: lastError },\n );\n }\n\n getMe() {\n return this.call(\"getMe\");\n }\n\n getUpdates(\n params?: import(\"../types/methods.js\").GetUpdatesParams,\n options?: CallOptions,\n ) {\n return this.call(\"getUpdates\", asParams(params), options);\n }\n\n setWebhook(params: import(\"../types/methods.js\").SetWebhookParams) {\n return this.call(\"setWebhook\", asParams(params));\n }\n\n deleteWebhook() {\n return this.call(\"deleteWebhook\");\n }\n\n getWebhookInfo() {\n return this.call(\"getWebhookInfo\");\n }\n\n sendMessage(params: import(\"../types/methods.js\").SendMessageParams) {\n return this.call(\"sendMessage\", asParams(params));\n }\n\n forwardMessage(params: import(\"../types/methods.js\").ForwardMessageParams) {\n return this.call(\"forwardMessage\", asParams(params));\n }\n\n copyMessage(params: import(\"../types/methods.js\").CopyMessageParams) {\n return this.call(\"copyMessage\", asParams(params));\n }\n\n sendPhoto(params: import(\"../types/methods.js\").SendPhotoParams) {\n return this.call(\"sendPhoto\", asParams(params));\n }\n\n sendAudio(params: import(\"../types/methods.js\").SendAudioParams) {\n return this.call(\"sendAudio\", asParams(params));\n }\n\n sendDocument(params: import(\"../types/methods.js\").SendDocumentParams) {\n return this.call(\"sendDocument\", asParams(params));\n }\n\n sendVideo(params: import(\"../types/methods.js\").SendVideoParams) {\n return this.call(\"sendVideo\", asParams(params));\n }\n\n sendAnimation(params: import(\"../types/methods.js\").SendAnimationParams) {\n return this.call(\"sendAnimation\", asParams(params));\n }\n\n sendVoice(params: import(\"../types/methods.js\").SendVoiceParams) {\n return this.call(\"sendVoice\", asParams(params));\n }\n\n sendMediaGroup(params: import(\"../types/methods.js\").SendMediaGroupParams) {\n return this.call(\"sendMediaGroup\", {\n ...params,\n media: JSON.stringify(params.media),\n } as Record<string, unknown>);\n }\n\n sendLocation(params: import(\"../types/methods.js\").SendLocationParams) {\n return this.call(\"sendLocation\", asParams(params));\n }\n\n sendContact(params: import(\"../types/methods.js\").SendContactParams) {\n return this.call(\"sendContact\", asParams(params));\n }\n\n sendChatAction(params: import(\"../types/methods.js\").SendChatActionParams) {\n return this.call(\"sendChatAction\", asParams(params));\n }\n\n getFile(params: import(\"../types/methods.js\").GetFileParams) {\n return this.call(\"getFile\", asParams(params));\n }\n\n answerCallbackQuery(\n params: import(\"../types/methods.js\").AnswerCallbackQueryParams,\n ) {\n return this.call(\"answerCallbackQuery\", asParams(params));\n }\n\n askReview(params: import(\"../types/methods.js\").AskReviewParams) {\n return this.call(\"askReview\", asParams(params));\n }\n\n banChatMember(params: import(\"../types/methods.js\").BanChatMemberParams) {\n return this.call(\"banChatMember\", asParams(params));\n }\n\n unbanChatMember(params: import(\"../types/methods.js\").UnbanChatMemberParams) {\n return this.call(\"unbanChatMember\", asParams(params));\n }\n\n promoteChatMember(\n params: import(\"../types/methods.js\").PromoteChatMemberParams,\n ) {\n return this.call(\"promoteChatMember\", asParams(params));\n }\n\n setChatPhoto(params: import(\"../types/methods.js\").SetChatPhotoParams) {\n return this.call(\"setChatPhoto\", asParams(params));\n }\n\n leaveChat(params: import(\"../types/methods.js\").LeaveChatParams) {\n return this.call(\"leaveChat\", asParams(params));\n }\n\n getChat(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"getChat\", asParams(params));\n }\n\n getChatAdministrators(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"getChatAdministrators\", asParams(params));\n }\n\n getChatMembersCount(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"getChatMembersCount\", asParams(params));\n }\n\n getChatMember(params: import(\"../types/methods.js\").GetChatMemberParams) {\n return this.call(\"getChatMember\", asParams(params));\n }\n\n pinChatMessage(params: import(\"../types/methods.js\").PinChatMessageParams) {\n return this.call(\"pinChatMessage\", asParams(params));\n }\n\n unPinChatMessage(params: import(\"../types/methods.js\").PinChatMessageParams) {\n return this.call(\"unPinChatMessage\", asParams(params));\n }\n\n unpinAllChatMessages(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"unpinAllChatMessages\", asParams(params));\n }\n\n setChatTitle(params: import(\"../types/methods.js\").SetChatTitleParams) {\n return this.call(\"setChatTitle\", asParams(params));\n }\n\n setChatDescription(\n params: import(\"../types/methods.js\").SetChatDescriptionParams,\n ) {\n return this.call(\"setChatDescription\", asParams(params));\n }\n\n deleteChatPhoto(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"deleteChatPhoto\", asParams(params));\n }\n\n createChatInviteLink(\n params: import(\"../types/methods.js\").CreateChatInviteLinkParams,\n ) {\n return this.call(\"createChatInviteLink\", asParams(params));\n }\n\n revokeChatInviteLink(\n params: import(\"../types/methods.js\").RevokeChatInviteLinkParams,\n ) {\n return this.call(\"revokeChatInviteLink\", asParams(params));\n }\n\n exportChatInviteLink(params: import(\"../types/methods.js\").GetChatParams) {\n return this.call(\"exportChatInviteLink\", asParams(params));\n }\n\n editMessageText(params: import(\"../types/methods.js\").EditMessageTextParams) {\n return this.call(\"editMessageText\", asParams(params));\n }\n\n editMessageCaption(\n params: import(\"../types/methods.js\").EditMessageCaptionParams,\n ) {\n return this.call(\"editMessageCaption\", asParams(params));\n }\n\n editMessageReplyMarkup(\n params: import(\"../types/methods.js\").EditMessageReplyMarkupParams,\n ) {\n return this.call(\"editMessageReplyMarkup\", asParams(params));\n }\n\n deleteMessage(params: import(\"../types/methods.js\").DeleteMessageParams) {\n return this.call(\"deleteMessage\", asParams(params));\n }\n\n uploadStickerFile(\n params: import(\"../types/methods.js\").UploadStickerFileParams,\n ) {\n return this.call(\"uploadStickerFile\", asParams(params));\n }\n\n createNewStickerSet(\n params: import(\"../types/methods.js\").CreateNewStickerSetParams,\n ) {\n return this.call(\"createNewStickerSet\", {\n ...params,\n sticker: JSON.stringify(params.sticker),\n } as Record<string, unknown>);\n }\n\n addStickerToSet(params: import(\"../types/methods.js\").AddStickerToSetParams) {\n return this.call(\"addStickerToSet\", {\n ...params,\n sticker: JSON.stringify(params.sticker),\n } as Record<string, unknown>);\n }\n\n sendInvoice(params: import(\"../types/methods.js\").SendInvoiceParams) {\n return this.call(\"sendInvoice\", {\n ...params,\n prices: JSON.stringify(params.prices),\n } as Record<string, unknown>);\n }\n\n createInvoiceLink(\n params: import(\"../types/methods.js\").CreateInvoiceLinkParams,\n ) {\n return this.call(\"createInvoiceLink\", {\n ...params,\n prices: JSON.stringify(params.prices),\n } as Record<string, unknown>);\n }\n\n answerPreCheckoutQuery(\n params: import(\"../types/methods.js\").AnswerPreCheckoutQueryParams,\n ) {\n return this.call(\"answerPreCheckoutQuery\", asParams(params));\n }\n\n inquireTransaction(\n params: import(\"../types/methods.js\").InquireTransactionParams,\n ) {\n return this.call(\"inquireTransaction\", asParams(params));\n }\n}\n\nfunction asParams(\n params?: Record<string, unknown> | object,\n): Record<string, unknown> | undefined {\n return params as Record<string, unknown> | undefined;\n}\n\nfunction serializeValue(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (Array.isArray(value) || typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n return value;\n}\n\nfunction appendFormValue(formData: FormData, key: string, value: unknown): void {\n if (value === undefined || value === null) return;\n\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n formData.append(key, String(value));\n return;\n }\n\n formData.append(key, JSON.stringify(value));\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isAbortError(error: unknown): boolean {\n return (\n error instanceof Error &&\n (error.name === \"AbortError\" || error.message.includes(\"aborted\"))\n );\n}\n","import type { Context } from \"../context.js\";\nimport type { Update } from \"../types/index.js\";\n\nexport type NextFunction = () => Promise<void>;\n\nexport type Middleware<C extends Context = Context> = (\n ctx: C,\n next: NextFunction,\n) => unknown | Promise<unknown>;\n\nexport type MiddlewareObject<C extends Context = Context> = {\n middleware: () => Middleware<C>;\n};\n\nexport type MiddlewareLike<C extends Context = Context> =\n | Middleware<C>\n | MiddlewareObject<C>;\n\nexport function isMiddlewareObject<C extends Context>(\n value: MiddlewareLike<C>,\n): value is MiddlewareObject<C> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"middleware\" in value &&\n typeof value.middleware === \"function\"\n );\n}\n\nexport function normalizeMiddleware<C extends Context>(\n middleware: MiddlewareLike<C>,\n): Middleware<C> {\n return isMiddlewareObject(middleware)\n ? middleware.middleware()\n : middleware;\n}\n\nexport async function runMiddleware<C extends Context>(\n middleware: Middleware<C>[],\n ctx: C,\n): Promise<void> {\n let index = -1;\n\n async function dispatch(current: number): Promise<void> {\n if (current <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = current;\n const handler = middleware[current];\n if (!handler) return;\n await handler(ctx, () => dispatch(current + 1));\n }\n\n await dispatch(0);\n}\n\nexport function matchUpdate(update: Update): string[] {\n const matches: string[] = [];\n\n if (update.message) {\n matches.push(\"message\");\n if (update.message.text !== undefined) matches.push(\"message:text\");\n if (update.message.photo) matches.push(\"message:photo\");\n if (update.message.document) matches.push(\"message:document\");\n if (update.message.voice) matches.push(\"message:voice\");\n if (update.message.audio) matches.push(\"message:audio\");\n if (update.message.video) matches.push(\"message:video\");\n if (update.message.location) matches.push(\"message:location\");\n if (update.message.contact) matches.push(\"message:contact\");\n if (update.message.sticker) matches.push(\"message:sticker\");\n if (update.message.successful_payment) {\n matches.push(\"message:successful_payment\");\n }\n if (update.message.web_app_data) matches.push(\"message:web_app_data\");\n if (update.message.text?.startsWith(\"/\")) {\n matches.push(\"message:command\");\n }\n }\n\n if (update.edited_message) {\n matches.push(\"edited_message\");\n if (update.edited_message.text !== undefined) {\n matches.push(\"edited_message:text\");\n }\n }\n\n if (update.callback_query) {\n matches.push(\"callback_query\");\n if (update.callback_query.data !== undefined) {\n matches.push(\"callback_query:data\");\n }\n }\n\n if (update.pre_checkout_query) {\n matches.push(\"pre_checkout_query\");\n }\n\n return matches;\n}\n\nexport function extractCommand(text: string): { command: string; args: string } | null {\n const match = text.trim().match(/^\\/([a-zA-Z0-9_]+)(?:@[\\w_]+)?(?:\\s+([\\s\\S]*))?$/);\n if (!match) return null;\n return {\n command: match[1]!.toLowerCase(),\n args: match[2]?.trim() ?? \"\",\n };\n}\n","import type { Context } from \"../context.js\";\nimport type { Chat } from \"../types/index.js\";\n\nexport type FilterQuery =\n | \"message\"\n | \"message:text\"\n | \"message:photo\"\n | \"message:document\"\n | \"message:voice\"\n | \"message:audio\"\n | \"message:video\"\n | \"message:location\"\n | \"message:contact\"\n | \"message:sticker\"\n | \"message:command\"\n | \"message:successful_payment\"\n | \"message:web_app_data\"\n | \"edited_message\"\n | \"edited_message:text\"\n | \"callback_query\"\n | \"callback_query:data\"\n | \"pre_checkout_query\";\n\nexport type FilterContext<Q extends FilterQuery> = Q extends \"message\"\n ? Context & { message: NonNullable<Context[\"message\"]> }\n : Q extends \"message:text\"\n ? Context & { message: NonNullable<Context[\"message\"]> & { text: string } }\n : Q extends \"callback_query\"\n ? Context & { callbackQuery: NonNullable<Context[\"callbackQuery\"]> }\n : Q extends \"callback_query:data\"\n ? Context & {\n callbackQuery: NonNullable<Context[\"callbackQuery\"]> & {\n data: string;\n };\n }\n : Q extends \"pre_checkout_query\"\n ? Context & {\n preCheckoutQuery: NonNullable<Context[\"preCheckoutQuery\"]>;\n }\n : Context;\n\nexport function matchesFilter(ctx: Context, filter: FilterQuery): boolean {\n return ctx.updateTypes.includes(filter);\n}\n\nexport function matchesAnyFilter(\n ctx: Context,\n filters: FilterQuery[],\n): boolean {\n return filters.some((filter) => ctx.updateTypes.includes(filter));\n}\n\nexport function matchesChatType(\n ctx: Context,\n chatType: Chat[\"type\"] | Chat[\"type\"][],\n): boolean {\n const chat = ctx.chat;\n if (!chat) return false;\n const types = Array.isArray(chatType) ? chatType : [chatType];\n return types.includes(chat.type);\n}\n","import { Context } from \"./context.js\";\nimport {\n extractCommand,\n normalizeMiddleware,\n runMiddleware,\n type Middleware,\n type MiddlewareLike,\n} from \"./middleware/types.js\";\nimport type { FilterQuery } from \"./filters/query.js\";\nimport {\n matchesAnyFilter,\n matchesChatType,\n} from \"./filters/query.js\";\nimport type { Chat } from \"./types/index.js\";\n\nexport class Composer<C extends Context = Context> {\n private readonly handler: Middleware<C>;\n private readonly registered: Middleware<C>[] = [];\n\n constructor(...middleware: MiddlewareLike<C>[]) {\n this.registered.push(...middleware.map(normalizeMiddleware));\n this.handler = async (ctx, next) => {\n await runMiddleware(this.registered, ctx);\n await next();\n };\n }\n\n middleware(): Middleware<C> {\n return this.handler;\n }\n\n use(...middleware: MiddlewareLike<C>[]): this {\n this.registered.push(...middleware.map(normalizeMiddleware));\n return this;\n }\n\n on(\n filter: FilterQuery | FilterQuery[],\n ...middleware: Middleware<C>[]\n ): this {\n const filters = Array.isArray(filter) ? filter : [filter];\n return this.filter(\n (ctx) => matchesAnyFilter(ctx, filters),\n ...middleware,\n );\n }\n\n filter(\n predicate: (ctx: C) => boolean | Promise<boolean>,\n ...middleware: Middleware<C>[]\n ): this {\n const composer = new Composer<C>();\n this.registered.push(async (ctx, next) => {\n const matches = await predicate(ctx);\n if (!matches) {\n await next();\n return;\n }\n await runMiddleware(\n [...composer.registered, async (_ctx, innerNext) => innerNext()],\n ctx,\n );\n });\n composer.registered.push(...middleware);\n return this;\n }\n\n command(\n command: string | string[],\n ...middleware: Middleware<C>[]\n ): this {\n const commands = new Set(\n (Array.isArray(command) ? command : [command]).map((value) =>\n value.toLowerCase().replace(/^\\//, \"\"),\n ),\n );\n\n return this.filter((ctx) => {\n const text = ctx.text;\n if (!text) return false;\n const parsed = extractCommand(text);\n if (!parsed) return false;\n return commands.has(parsed.command);\n }, async (ctx) => {\n const text = ctx.text;\n if (text) {\n const parsed = extractCommand(text);\n if (parsed) {\n Object.defineProperty(ctx, \"match\", {\n value: [parsed.command, parsed.args],\n writable: true,\n configurable: true,\n });\n }\n }\n await runMiddleware(middleware, ctx);\n });\n }\n\n hears(pattern: string | RegExp, ...middleware: Middleware<C>[]): this {\n const regex =\n typeof pattern === \"string\" ? new RegExp(`^${escapeRegex(pattern)}$`) : pattern;\n\n return this.filter((ctx) => {\n const text = ctx.text;\n if (!text) return false;\n return regex.test(text);\n }, async (ctx) => {\n const text = ctx.text;\n if (text) {\n const match = text.match(regex);\n Object.defineProperty(ctx, \"match\", {\n value: match,\n writable: true,\n configurable: true,\n });\n }\n await runMiddleware(middleware, ctx);\n });\n }\n\n chatType(\n chatType: Chat[\"type\"] | Chat[\"type\"][],\n ...middleware: Middleware<C>[]\n ): this {\n return this.filter(\n (ctx) => matchesChatType(ctx, chatType),\n ...middleware,\n );\n }\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { Api } from \"./api/client.js\";\nimport { InputFile } from \"./file/input-file.js\";\nimport { matchUpdate } from \"./middleware/types.js\";\nimport type {\n CallbackQuery,\n Chat,\n ChatId,\n Message,\n PreCheckoutQuery,\n ReplyMarkup,\n Update,\n User,\n UserId,\n} from \"./types/index.js\";\nimport type {\n AnswerCallbackQueryParams,\n AnswerPreCheckoutQueryParams,\n ChatAction,\n InquireTransactionParams,\n SendAnimationParams,\n SendAudioParams,\n SendContactParams,\n SendDocumentParams,\n SendInvoiceParams,\n SendLocationParams,\n SendMessageParams,\n SendPhotoParams,\n SendVideoParams,\n SendVoiceParams,\n} from \"./types/methods.js\";\n\nexport interface ContextOptions {\n api: Api;\n update: Update;\n botInfo?: User;\n}\n\nexport class Context {\n readonly api: Api;\n readonly update: Update;\n readonly botInfo?: User;\n\n callbackQueryAnswered = false;\n private _updateTypes?: string[];\n\n constructor(options: ContextOptions) {\n this.api = options.api;\n this.update = options.update;\n this.botInfo = options.botInfo;\n }\n\n get updateId(): number {\n return this.update.update_id;\n }\n\n get updateTypes(): string[] {\n if (!this._updateTypes) {\n this._updateTypes = matchUpdate(this.update);\n }\n return this._updateTypes;\n }\n\n get message(): Message | undefined {\n return this.update.message ?? this.update.edited_message;\n }\n\n get editedMessage(): Message | undefined {\n return this.update.edited_message;\n }\n\n get callbackQuery(): CallbackQuery | undefined {\n return this.update.callback_query;\n }\n\n get preCheckoutQuery(): PreCheckoutQuery | undefined {\n return this.update.pre_checkout_query;\n }\n\n get from(): User | undefined {\n return (\n this.message?.from ??\n this.callbackQuery?.from ??\n this.preCheckoutQuery?.from\n );\n }\n\n get chat(): Chat | undefined {\n return this.message?.chat ?? this.callbackQuery?.message?.chat;\n }\n\n get chatId(): ChatId | undefined {\n return this.chat?.id;\n }\n\n get text(): string | undefined {\n return this.message?.text;\n }\n\n get match(): RegExpMatchArray | null {\n return null;\n }\n\n set match(value: RegExpMatchArray | null) {\n Object.defineProperty(this, \"match\", {\n value,\n writable: true,\n configurable: true,\n });\n }\n\n async reply(\n text: string,\n extra?: Omit<SendMessageParams, \"chat_id\" | \"text\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendMessage({ chat_id: chatId, text, ...extra });\n }\n\n async replyWithPhoto(\n photo: SendPhotoParams[\"photo\"],\n extra?: Omit<SendPhotoParams, \"chat_id\" | \"photo\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendPhoto({ chat_id: chatId, photo, ...extra });\n }\n\n async replyWithAudio(\n audio: SendAudioParams[\"audio\"],\n extra?: Omit<SendAudioParams, \"chat_id\" | \"audio\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendAudio({ chat_id: chatId, audio, ...extra });\n }\n\n async replyWithDocument(\n document: SendDocumentParams[\"document\"],\n extra?: Omit<SendDocumentParams, \"chat_id\" | \"document\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendDocument({ chat_id: chatId, document, ...extra });\n }\n\n async replyWithVideo(\n video: SendVideoParams[\"video\"],\n extra?: Omit<SendVideoParams, \"chat_id\" | \"video\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendVideo({ chat_id: chatId, video, ...extra });\n }\n\n async replyWithAnimation(\n animation: SendAnimationParams[\"animation\"],\n extra?: Omit<SendAnimationParams, \"chat_id\" | \"animation\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendAnimation({ chat_id: chatId, animation, ...extra });\n }\n\n async replyWithVoice(\n voice: SendVoiceParams[\"voice\"],\n extra?: Omit<SendVoiceParams, \"chat_id\" | \"voice\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendVoice({ chat_id: chatId, voice, ...extra });\n }\n\n async replyWithLocation(\n latitude: number,\n longitude: number,\n extra?: Omit<SendLocationParams, \"chat_id\" | \"latitude\" | \"longitude\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendLocation({\n chat_id: chatId,\n latitude,\n longitude,\n ...extra,\n });\n }\n\n async replyWithContact(\n phoneNumber: string,\n firstName: string,\n extra?: Omit<SendContactParams, \"chat_id\" | \"phone_number\" | \"first_name\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendContact({\n chat_id: chatId,\n phone_number: phoneNumber,\n first_name: firstName,\n ...extra,\n });\n }\n\n async replyWithInvoice(\n params: Omit<SendInvoiceParams, \"chat_id\">,\n ) {\n const chatId = this.requireChatId();\n return this.api.sendInvoice({ chat_id: chatId, ...params });\n }\n\n async sendChatAction(action: ChatAction) {\n const chatId = this.requireChatId();\n return this.api.sendChatAction({ chat_id: chatId, action });\n }\n\n async answerCallbackQuery(\n params?: Omit<AnswerCallbackQueryParams, \"callback_query_id\">,\n ) {\n const callbackQuery = this.callbackQuery;\n if (!callbackQuery) {\n throw new Error(\"No callback query in context\");\n }\n\n if (callbackQuery.id.startsWith(\"1\")) {\n console.warn(\n \"[balebaazoo] callback_query_id starts with '1' — client may not support answerCallbackQuery\",\n );\n }\n\n this.callbackQueryAnswered = true;\n return this.api.answerCallbackQuery({\n callback_query_id: callbackQuery.id,\n ...params,\n });\n }\n\n async answerPreCheckoutQuery(\n params: Omit<AnswerPreCheckoutQueryParams, \"pre_checkout_query_id\">,\n ) {\n const query = this.preCheckoutQuery;\n if (!query) {\n throw new Error(\"No pre_checkout_query in context\");\n }\n\n return this.api.answerPreCheckoutQuery({\n pre_checkout_query_id: query.id,\n ...params,\n });\n }\n\n async askReview(userId: UserId, delaySeconds: number) {\n return this.api.askReview({ user_id: userId, delay_seconds: delaySeconds });\n }\n\n async inquireTransaction(\n params: InquireTransactionParams,\n ) {\n return this.api.inquireTransaction(params);\n }\n\n async downloadFile(fileId: string): Promise<ArrayBuffer> {\n const file = await this.api.getFile({ file_id: fileId });\n if (!file.file_path) {\n throw new Error(\"File path not available\");\n }\n return this.api.downloadFile(file.file_path);\n }\n\n async downloadToBuffer(fileId: string): Promise<Buffer> {\n const data = await this.downloadFile(fileId);\n return Buffer.from(data);\n }\n\n requireChatId(): ChatId {\n const chatId = this.chatId;\n if (chatId === undefined) {\n throw new Error(\"No chat_id available in context\");\n }\n return chatId;\n }\n\n requireFrom(): User {\n const from = this.from;\n if (!from) {\n throw new Error(\"No user available in context\");\n }\n return from;\n }\n}\n\nexport type ReplyOptions = {\n reply_markup?: ReplyMarkup;\n reply_to_message_id?: number;\n};\n\nexport { InputFile };\n","import type { Context } from \"../context.js\";\nimport type { Middleware } from \"./types.js\";\n\nexport function autoAnswerCallback(): Middleware<Context> {\n return async (ctx, next) => {\n try {\n await next();\n } finally {\n if (ctx.callbackQuery && !ctx.callbackQueryAnswered) {\n await ctx.answerCallbackQuery().catch(() => undefined);\n }\n }\n };\n}\n","import { BaleAPIError } from \"../errors.js\";\nimport type { Bot } from \"../bot.js\";\nimport type { Update, User } from \"../types/index.js\";\n\nexport interface PollingBot {\n api: Bot[\"api\"];\n handleUpdate(update: Update): Promise<void>;\n init(): Promise<unknown>;\n}\n\nexport interface PollingOptions {\n limit?: number;\n timeout?: number;\n allowedUpdates?: string[];\n dropPendingUpdates?: boolean;\n onStart?: (botInfo: User) => void | Promise<void>;\n onError?: (error: unknown) => void;\n signal?: AbortSignal;\n}\n\nexport interface WebhookHandlerOptions {\n secretToken?: string;\n maxBodyBytes?: number;\n onError?: (error: unknown) => Response | void;\n}\n\nexport class PollingRunner {\n private running = false;\n private abortController?: AbortController;\n private offset = 0;\n private loopPromise?: Promise<void>;\n private backoffAttempt = 0;\n\n async start(bot: PollingBot, options: PollingOptions = {}): Promise<void> {\n if (this.running) {\n throw new Error(\"Polling is already running\");\n }\n\n this.running = true;\n this.abortController = new AbortController();\n const signal = options.signal ?? this.abortController.signal;\n const onError = options.onError ?? ((error: unknown) => {\n console.error(\"[balebaazoo] polling error:\", error);\n });\n\n this.loopPromise = this.runLoop(bot, options, signal, onError);\n await this.loopPromise;\n }\n\n private async runLoop(\n bot: PollingBot,\n options: PollingOptions,\n signal: AbortSignal,\n onError: (error: unknown) => void,\n ): Promise<void> {\n while (this.running && !signal.aborted) {\n try {\n const updates = await bot.api.getUpdates(\n {\n offset: this.offset,\n limit: options.limit ?? 100,\n timeout: options.timeout ?? 30,\n allowed_updates: options.allowedUpdates,\n },\n { signal },\n );\n\n this.backoffAttempt = 0;\n\n for (const update of updates) {\n this.offset = update.update_id + 1;\n try {\n await bot.handleUpdate(update);\n } catch (error) {\n onError(error);\n }\n }\n\n if (updates.length === 0 && signal.aborted) {\n break;\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) {\n break;\n }\n\n if (error instanceof BaleAPIError && error.errorCode === 401) {\n onError(error);\n this.running = false;\n break;\n }\n\n onError(error);\n await sleep(backoffDelay(this.backoffAttempt));\n this.backoffAttempt++;\n }\n }\n }\n\n setOffset(offset: number): void {\n this.offset = offset;\n }\n\n async stop(): Promise<void> {\n this.running = false;\n this.abortController?.abort();\n await this.loopPromise;\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return (\n error instanceof Error &&\n (error.name === \"AbortError\" || error.message.includes(\"aborted\"))\n );\n}\n\nfunction backoffDelay(attempt: number): number {\n const base = 1000;\n const max = 30_000;\n const exponential = Math.min(base * 2 ** attempt, max);\n const jitter = Math.random() * 0.3 * exponential;\n return Math.floor(exponential + jitter);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function createWebhookHandler(\n bot: PollingBot,\n getUpdate: (request: Request) => Promise<Update>,\n options: WebhookHandlerOptions = {},\n): Promise<(request: Request) => Promise<Response>> {\n await bot.init();\n const maxBodyBytes = options.maxBodyBytes ?? 1024 * 1024;\n const onError =\n options.onError ??\n ((error: unknown) => {\n console.error(\"[balebaazoo] webhook error:\", error);\n return new Response(\"Internal Server Error\", { status: 500 });\n });\n\n return async (request: Request) => {\n if (request.method !== \"POST\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n if (options.secretToken) {\n const token = request.headers.get(\"x-telegram-bot-api-secret-token\");\n if (token !== options.secretToken) {\n return new Response(\"Unauthorized\", { status: 401 });\n }\n }\n\n try {\n const rawBody = await request.text();\n if (rawBody.length > maxBodyBytes) {\n return new Response(\"Payload Too Large\", { status: 413 });\n }\n\n const syntheticRequest = new Request(request.url, {\n method: \"POST\",\n headers: request.headers,\n body: rawBody,\n });\n\n const update = await getUpdate(syntheticRequest);\n await bot.handleUpdate(update);\n return new Response(\"OK\", { status: 200 });\n } catch (error) {\n const response = onError(error);\n return response ?? new Response(\"Internal Server Error\", { status: 500 });\n }\n };\n}\n\nexport async function webhookFromJson(bot: PollingBot): Promise<\n (request: Request) => Promise<Response>\n> {\n return createWebhookHandler(bot, async (request) => {\n return (await request.json()) as Update;\n });\n}\n","import { Api, type ApiClientOptions } from \"./api/client.js\";\nimport { Composer } from \"./composer.js\";\nimport { Context } from \"./context.js\";\nimport { autoAnswerCallback } from \"./middleware/auto-answer-callback.js\";\nimport type { Middleware, MiddlewareLike } from \"./middleware/types.js\";\nimport { PollingRunner, type PollingOptions } from \"./runner/polling.js\";\nimport type { Update, User } from \"./types/index.js\";\n\nexport interface BotOptions extends ApiClientOptions {\n botInfo?: User;\n autoAnswerCallback?: boolean;\n}\n\nexport type { PollingOptions };\n\nexport class Bot<C extends Context = Context> extends Composer<C> {\n readonly api: Api;\n private botInfo?: User;\n private readonly polling = new PollingRunner();\n private readonly autoAnswer: boolean;\n private catchHandler?: (error: unknown, ctx: C) => void | Promise<void>;\n\n constructor(token: string, options: Omit<BotOptions, \"token\"> = {}) {\n const api = new Api({ token, ...options });\n super();\n this.api = api;\n this.botInfo = options.botInfo;\n this.autoAnswer = options.autoAnswerCallback ?? true;\n\n if (this.autoAnswer) {\n this.use(autoAnswerCallback() as Middleware<C>);\n }\n }\n\n async init(): Promise<User> {\n if (!this.botInfo) {\n this.botInfo = await this.api.getMe();\n }\n return this.botInfo;\n }\n\n catch(handler: (error: unknown, ctx: C) => void | Promise<void>): this {\n this.catchHandler = handler;\n return this;\n }\n\n async handleUpdate(update: Update): Promise<void> {\n await this.init();\n const ctx = this.createContext(update);\n try {\n await this.middleware()(ctx as C, async () => undefined);\n } catch (error) {\n if (this.catchHandler) {\n await this.catchHandler(error, ctx as C);\n return;\n }\n throw error;\n }\n }\n\n createContext(update: Update): Context {\n return new Context({\n api: this.api,\n update,\n botInfo: this.botInfo,\n });\n }\n\n async start(options: PollingOptions = {}): Promise<void> {\n const onError =\n options.onError ??\n ((error: unknown) => {\n console.error(\"[balebaazoo] polling error:\", error);\n });\n\n try {\n await this.init();\n } catch (error) {\n onError(error);\n return;\n }\n\n if (options.dropPendingUpdates) {\n try {\n const updates = await this.api.getUpdates({\n offset: -1,\n limit: 1,\n timeout: 0,\n });\n if (updates.length > 0) {\n const last = updates[updates.length - 1]!;\n this.polling.setOffset(last.update_id + 1);\n }\n } catch (error) {\n onError(error);\n return;\n }\n }\n\n if (options.onStart) {\n try {\n await options.onStart(this.botInfo!);\n } catch (error) {\n onError(error);\n return;\n }\n }\n\n await this.polling.start(this, options);\n }\n\n launch(options?: PollingOptions): Promise<void> {\n return this.start(options);\n }\n\n async stop(): Promise<void> {\n await this.polling.stop();\n }\n\n webhookCallback(): (update: Update) => Promise<void> {\n return async (update: Update) => {\n await this.handleUpdate(update);\n };\n }\n\n override use(...middleware: MiddlewareLike<C>[]): this {\n return super.use(...middleware);\n }\n}\n","export const bold = (text: string): string => ` *${text}* `;\nexport const italic = (text: string): string => ` _${text}_ `;\nexport const link = (text: string, url: string): string => `[${text}](${url})`;\nexport const spoiler = (text: string, description: string): string =>\n `\\`\\`\\`[${text}]${description}\\`\\`\\``;\n\nexport const md = {\n bold,\n italic,\n link,\n spoiler,\n};\n","import type {\n CopyTextButton,\n InlineKeyboardButton,\n InlineKeyboardMarkup,\n WebAppInfo,\n} from \"../types/index.js\";\n\nexport class InlineKeyboard implements InlineKeyboardMarkup {\n inline_keyboard: InlineKeyboardButton[][];\n\n constructor(rows: InlineKeyboardButton[][] = []) {\n this.inline_keyboard = rows;\n }\n\n row(...buttons: InlineKeyboardButton[]): this {\n this.inline_keyboard.push(buttons);\n return this;\n }\n\n text(text: string, callbackData: string): this {\n return this.row({ text, callback_data: callbackData });\n }\n\n url(text: string, url: string): this {\n return this.row({ text, url });\n }\n\n webApp(text: string, webApp: WebAppInfo): this {\n return this.row({ text, web_app: webApp });\n }\n\n copyText(text: string, copyText: CopyTextButton): this {\n return this.row({ text, copy_text: copyText });\n }\n\n toJSON(): InlineKeyboardMarkup {\n return { inline_keyboard: this.inline_keyboard };\n }\n}\n","import type {\n KeyboardButton,\n ReplyKeyboardMarkup,\n ReplyKeyboardRemove,\n WebAppInfo,\n} from \"../types/index.js\";\n\nexport class ReplyKeyboard implements ReplyKeyboardMarkup {\n keyboard: KeyboardButton[][];\n resize_keyboard?: boolean;\n one_time_keyboard?: boolean;\n selective?: boolean;\n\n constructor(rows: KeyboardButton[][] = []) {\n this.keyboard = rows;\n }\n\n row(...buttons: KeyboardButton[]): this {\n this.keyboard.push(buttons);\n return this;\n }\n\n text(text: string): this {\n return this.row({ text });\n }\n\n webApp(text: string, webApp: WebAppInfo): this {\n return this.row({ text, web_app: webApp });\n }\n\n resized(value = true): this {\n this.resize_keyboard = value;\n return this;\n }\n\n oneTime(value = true): this {\n this.one_time_keyboard = value;\n return this;\n }\n\n onlySelective(value = true): this {\n this.selective = value;\n return this;\n }\n\n toJSON(): ReplyKeyboardMarkup {\n return {\n keyboard: this.keyboard,\n resize_keyboard: this.resize_keyboard,\n one_time_keyboard: this.one_time_keyboard,\n selective: this.selective,\n };\n }\n}\n\nexport function removeKeyboard(): ReplyKeyboardRemove {\n return { remove_keyboard: true };\n}\n","import type { Context } from \"../context.js\";\nimport type { Middleware } from \"./types.js\";\n\nexport function errorHandler(\n onError: (error: unknown, ctx: Context) => Promise<void> | void,\n): Middleware<Context> {\n return async (ctx, next) => {\n try {\n await next();\n } catch (error) {\n await onError(error, ctx);\n }\n };\n}\n","import type { Bot } from \"../bot.js\";\n\nexport interface GracefulShutdownOptions {\n signals?: NodeJS.Signals[];\n onShutdown?: () => void | Promise<void>;\n}\n\nexport function setupGracefulShutdown(\n bot: Bot,\n options: GracefulShutdownOptions = {},\n): void {\n const signals = options.signals ?? [\"SIGINT\", \"SIGTERM\"];\n\n for (const signal of signals) {\n process.once(signal, () => {\n void (async () => {\n await bot.stop();\n await options.onShutdown?.();\n })();\n });\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -593,6 +593,9 @@ interface ApiClientOptions {
|
|
|
593
593
|
maxRetries?: number;
|
|
594
594
|
retryDelayMs?: number;
|
|
595
595
|
}
|
|
596
|
+
interface CallOptions {
|
|
597
|
+
signal?: AbortSignal;
|
|
598
|
+
}
|
|
596
599
|
declare class Api {
|
|
597
600
|
readonly token: string;
|
|
598
601
|
private readonly baseUrl;
|
|
@@ -602,14 +605,14 @@ declare class Api {
|
|
|
602
605
|
constructor(options: ApiClientOptions);
|
|
603
606
|
get fileBaseUrl(): string;
|
|
604
607
|
private methodUrl;
|
|
605
|
-
call<M extends ApiMethod>(method: M, params?: Record<string, unknown
|
|
608
|
+
call<M extends ApiMethod>(method: M, params?: Record<string, unknown>, options?: CallOptions): Promise<ApiMethodResultMap[M]>;
|
|
606
609
|
private invoke;
|
|
607
610
|
downloadFile(filePath: string): Promise<ArrayBuffer>;
|
|
608
611
|
private prepareBody;
|
|
609
612
|
private request;
|
|
610
613
|
private fetchWithRetry;
|
|
611
614
|
getMe(): Promise<User>;
|
|
612
|
-
getUpdates(params?: GetUpdatesParams): Promise<Update[]>;
|
|
615
|
+
getUpdates(params?: GetUpdatesParams, options?: CallOptions): Promise<Update[]>;
|
|
613
616
|
setWebhook(params: SetWebhookParams): Promise<boolean>;
|
|
614
617
|
deleteWebhook(): Promise<boolean>;
|
|
615
618
|
getWebhookInfo(): Promise<WebhookInfo>;
|
|
@@ -674,8 +677,10 @@ declare class Context {
|
|
|
674
677
|
readonly update: Update;
|
|
675
678
|
readonly botInfo?: User;
|
|
676
679
|
callbackQueryAnswered: boolean;
|
|
680
|
+
private _updateTypes?;
|
|
677
681
|
constructor(options: ContextOptions);
|
|
678
682
|
get updateId(): number;
|
|
683
|
+
get updateTypes(): string[];
|
|
679
684
|
get message(): Message | undefined;
|
|
680
685
|
get editedMessage(): Message | undefined;
|
|
681
686
|
get callbackQuery(): CallbackQuery | undefined;
|
|
@@ -768,36 +773,48 @@ interface PollingOptions {
|
|
|
768
773
|
limit?: number;
|
|
769
774
|
timeout?: number;
|
|
770
775
|
allowedUpdates?: string[];
|
|
776
|
+
dropPendingUpdates?: boolean;
|
|
777
|
+
onStart?: (botInfo: User) => void | Promise<void>;
|
|
771
778
|
onError?: (error: unknown) => void;
|
|
772
779
|
signal?: AbortSignal;
|
|
773
780
|
}
|
|
781
|
+
interface WebhookHandlerOptions {
|
|
782
|
+
secretToken?: string;
|
|
783
|
+
maxBodyBytes?: number;
|
|
784
|
+
onError?: (error: unknown) => Response | void;
|
|
785
|
+
}
|
|
774
786
|
declare class PollingRunner {
|
|
775
787
|
private running;
|
|
776
788
|
private abortController?;
|
|
777
789
|
private offset;
|
|
790
|
+
private loopPromise?;
|
|
791
|
+
private backoffAttempt;
|
|
778
792
|
start(bot: PollingBot, options?: PollingOptions): Promise<void>;
|
|
793
|
+
private runLoop;
|
|
794
|
+
setOffset(offset: number): void;
|
|
779
795
|
stop(): Promise<void>;
|
|
780
796
|
}
|
|
781
|
-
declare function createWebhookHandler(bot: PollingBot, getUpdate: (request: Request) => Promise<Update>, options?:
|
|
782
|
-
secretToken?: string;
|
|
783
|
-
maxBodyBytes?: number;
|
|
784
|
-
}): Promise<(request: Request) => Promise<Response>>;
|
|
797
|
+
declare function createWebhookHandler(bot: PollingBot, getUpdate: (request: Request) => Promise<Update>, options?: WebhookHandlerOptions): Promise<(request: Request) => Promise<Response>>;
|
|
785
798
|
declare function webhookFromJson(bot: PollingBot): Promise<(request: Request) => Promise<Response>>;
|
|
786
799
|
|
|
787
800
|
interface BotOptions extends ApiClientOptions {
|
|
788
801
|
botInfo?: User;
|
|
789
802
|
autoAnswerCallback?: boolean;
|
|
790
803
|
}
|
|
804
|
+
|
|
791
805
|
declare class Bot<C extends Context = Context> extends Composer<C> {
|
|
792
806
|
readonly api: Api;
|
|
793
807
|
private botInfo?;
|
|
794
808
|
private readonly polling;
|
|
795
809
|
private readonly autoAnswer;
|
|
810
|
+
private catchHandler?;
|
|
796
811
|
constructor(token: string, options?: Omit<BotOptions, "token">);
|
|
797
812
|
init(): Promise<User>;
|
|
813
|
+
catch(handler: (error: unknown, ctx: C) => void | Promise<void>): this;
|
|
798
814
|
handleUpdate(update: Update): Promise<void>;
|
|
799
815
|
createContext(update: Update): Context;
|
|
800
816
|
start(options?: PollingOptions): Promise<void>;
|
|
817
|
+
launch(options?: PollingOptions): Promise<void>;
|
|
801
818
|
stop(): Promise<void>;
|
|
802
819
|
webhookCallback(): (update: Update) => Promise<void>;
|
|
803
820
|
use(...middleware: MiddlewareLike<C>[]): this;
|
|
@@ -855,6 +872,13 @@ declare class ReplyKeyboard implements ReplyKeyboardMarkup {
|
|
|
855
872
|
declare function removeKeyboard(): ReplyKeyboardRemove;
|
|
856
873
|
|
|
857
874
|
declare function autoAnswerCallback(): Middleware<Context>;
|
|
875
|
+
|
|
858
876
|
declare function errorHandler(onError: (error: unknown, ctx: Context) => Promise<void> | void): Middleware<Context>;
|
|
859
877
|
|
|
860
|
-
|
|
878
|
+
interface GracefulShutdownOptions {
|
|
879
|
+
signals?: NodeJS.Signals[];
|
|
880
|
+
onShutdown?: () => void | Promise<void>;
|
|
881
|
+
}
|
|
882
|
+
declare function setupGracefulShutdown(bot: Bot, options?: GracefulShutdownOptions): void;
|
|
883
|
+
|
|
884
|
+
export { type AddStickerToSetParams, type Animation, type AnswerCallbackQueryParams, type AnswerPreCheckoutQueryParams, Api, type ApiClientOptions, type ApiMethod, type ApiMethodResultMap, type AskReviewParams, type Audio, BaleAPIError, type BaleApiResponse, BaleError, BaleNetworkError, type BanChatMemberParams, Bot, type BotOptions, type CallOptions, type CallbackQuery, type Chat, type ChatAction, type ChatFullInfo, type ChatId, type ChatMember, type ChatMemberAdministrator, type ChatMemberMember, type ChatMemberOwner, type ChatMemberRestricted, type ChatPhoto, Composer, type Contact, Context, type ContextOptions, type CopyMessageParams, type CopyTextButton, type CreateChatInviteLinkParams, type CreateInvoiceLinkParams, type CreateNewStickerSetParams, DEFAULT_API_BASE, type DeleteMessageParams, type Document, type EditMessageCaptionParams, type EditMessageReplyMarkupParams, type EditMessageTextParams, type File, type FilterContext, type FilterQuery, type ForwardMessageParams, type GetChatMemberParams, type GetChatParams, type GetFileParams, type GetUpdatesParams, type GracefulShutdownOptions, InlineKeyboard, type InlineKeyboardButton, type InlineKeyboardMarkup, InputFile, type InputMedia, type InputMediaAnimation, type InputMediaAudio, type InputMediaDocument, type InputMediaPhoto, type InputMediaVideo, type InputSticker, type InquireTransactionParams, type Invoice, type KeyboardButton, type LabeledPrice, type LeaveChatParams, type Location, type Message, type MessageEntity, type MessageId, type Middleware, type MiddlewareLike, type MiddlewareObject, type NextFunction, type PhotoSize, type PinChatMessageParams, type PollingBot, type PollingOptions, PollingRunner, type PreCheckoutQuery, type PromoteChatMemberParams, ReplyKeyboard, type ReplyKeyboardMarkup, type ReplyKeyboardRemove, type ReplyMarkup, type ReplyOptions, type ResponseParameters, type RevokeChatInviteLinkParams, type SendAnimationParams, type SendAudioParams, type SendChatActionParams, type SendContactParams, type SendDocumentParams, type SendInvoiceParams, type SendLocationParams, type SendMediaGroupParams, type SendMediaParams, type SendMessageParams, type SendPhotoParams, type SendVideoParams, type SendVoiceParams, type SetChatDescriptionParams, type SetChatPhotoParams, type SetChatTitleParams, type SetWebhookParams, type Sticker, type StickerSet, type SuccessfulPayment, type Transaction, type UnbanChatMemberParams, type Update, type UploadStickerFileParams, type User, type UserId, type Video, type Voice, type WebAppData, type WebAppInfo, type WebhookHandlerOptions, type WebhookInfo, autoAnswerCallback, bold, createWebhookHandler, errorHandler, extractCommand, isFilePath, isMiddlewareObject, italic, link, matchUpdate, matchesAnyFilter, matchesChatType, matchesFilter, md, normalizeMiddleware, removeKeyboard, runMiddleware, setupGracefulShutdown, spoiler, webhookFromJson };
|