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.js.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":["sleep"],"mappings":"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","file":"index.js","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":["isAbortError","sleep"],"mappings":"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","file":"index.js","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"]}
|