@riseonly/sdk 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants.ts","../src/errors.ts","../src/client.ts","../src/webhook.ts","../src/bot.ts","../src/utils.ts"],"names":["createServer","createHmac","timingSafeEqual"],"mappings":"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","file":"index.cjs","sourcesContent":["export const DEFAULT_API_BASE = 'https://api.riseonly.net';\n\nexport const CANONICAL_API_PREFIX = '/api/bot/v1';\n\nexport const WEBHOOK_SECRET_HEADER = 'x-riseonly-bot-api-secret-token';\n\nexport const IDEMPOTENCY_HEADER = 'x-request-id';\n\nexport const SUPPORTED_METHODS = [\n 'getMe',\n 'sendMessage',\n 'sendPhoto',\n 'sendVideo',\n 'sendDocument',\n 'sendAudio',\n 'sendVoice',\n 'sendAnimation',\n 'editMessageText',\n 'deleteMessage',\n 'sendChatAction',\n 'getUpdates',\n 'setWebhook',\n 'deleteWebhook',\n 'getWebhookInfo',\n 'setMyCommands',\n 'getMyCommands',\n 'deleteMyCommands',\n 'answerCallbackQuery',\n 'getChat',\n] as const;\n\nexport type BotApiMethod = (typeof SUPPORTED_METHODS)[number];\n\nexport const UPDATE_TYPES = [\n 'message',\n 'edited_message',\n 'callback_query',\n 'chat_member',\n 'my_chat_member',\n] as const;\n\nexport type UpdateType = (typeof UPDATE_TYPES)[number];\n\nexport const CHAT_ACTIONS = [\n 'typing',\n 'upload_photo',\n 'record_video',\n 'upload_video',\n 'record_voice',\n 'upload_voice',\n 'upload_document',\n 'choose_sticker',\n 'find_location',\n 'record_video_note',\n 'upload_video_note',\n] as const;\n\nexport type ChatAction = (typeof CHAT_ACTIONS)[number];\n\nexport const COMMAND_SCOPES = [\n 'default',\n 'all_private_chats',\n 'all_group_chats',\n 'all_chat_administrators',\n] as const;\n\nexport type CommandScope = (typeof COMMAND_SCOPES)[number] | `chat:${string}` | `chat_administrators:${string}`;\n","export class RiseonlyError extends Error {\n readonly code: number;\n readonly retryAfter?: number;\n readonly response?: unknown;\n\n constructor(message: string, code: number, retryAfter?: number, response?: unknown) {\n super(message);\n this.name = 'RiseonlyError';\n this.code = code;\n this.retryAfter = retryAfter;\n this.response = response;\n }\n\n static fromApiResponse(body: {\n error_code: number;\n description: string;\n parameters?: { retry_after?: number };\n }): RiseonlyError {\n return new RiseonlyError(\n body.description,\n body.error_code,\n body.parameters?.retry_after,\n body,\n );\n }\n}\n\nexport class RiseonlyNetworkError extends RiseonlyError {\n override readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown, code = 0) {\n super(message, code);\n this.name = 'RiseonlyNetworkError';\n this.cause = cause;\n }\n}\n\nexport class RiseonlyTimeoutError extends RiseonlyNetworkError {\n constructor(message = 'Request timed out') {\n super(message, undefined, 408);\n this.name = 'RiseonlyTimeoutError';\n }\n}\n","import {\n CANONICAL_API_PREFIX,\n DEFAULT_API_BASE,\n IDEMPOTENCY_HEADER,\n} from './constants.js';\nimport { RiseonlyError, RiseonlyNetworkError, RiseonlyTimeoutError } from './errors.js';\nimport type {\n AnswerCallbackQueryOptions,\n ApiEnvelope,\n BotCommand,\n Capabilities,\n Chat,\n ClientOptions,\n DeleteMessageOptions,\n DeleteMyCommandsOptions,\n DeleteWebhookOptions,\n EditMessageTextOptions,\n GetChatOptions,\n GetMyCommandsOptions,\n GetUpdatesOptions,\n MediaInput,\n Message,\n RequestOptions,\n SendChatActionOptions,\n SendMediaOptions,\n SendMessageOptions,\n SetMyCommandsOptions,\n SetWebhookOptions,\n SetWebhookResult,\n Update,\n User,\n WebhookInfo,\n} from './types/index.js';\n\ntype QueryValue = string | number | boolean | undefined | null;\n\nexport class ApiClient {\n readonly token: string;\n readonly baseUrl: string;\n readonly fetchImpl: typeof fetch;\n readonly requestTimeoutMs: number;\n readonly useCompatibleEndpoint: boolean;\n\n constructor(token: string, options: ClientOptions = {}) {\n if (!token?.trim()) {\n throw new Error('bot token is required');\n }\n this.token = token.trim();\n this.baseUrl = (options.baseUrl ?? DEFAULT_API_BASE).replace(/\\/$/, '');\n this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.requestTimeoutMs = options.requestTimeoutMs ?? 60_000;\n this.useCompatibleEndpoint = options.useCompatibleEndpoint ?? false;\n }\n\n /**\n * Returns the platform capabilities document.\n */\n async getCapabilities(signal?: AbortSignal): Promise<Capabilities> {\n const url = `${this.baseUrl}${CANONICAL_API_PREFIX}/capabilities`;\n const response = await this.fetchImpl(url, {\n method: 'GET',\n headers: { Accept: 'application/json' },\n signal,\n });\n if (!response.ok) {\n throw new RiseonlyNetworkError(`capabilities request failed with status ${response.status}`);\n }\n return response.json() as Promise<Capabilities>;\n }\n\n /**\n * Calls a Bot API method and returns the typed result.\n */\n async callMethod<T>(\n method: string,\n payload: Record<string, unknown> = {},\n options: RequestOptions = {},\n ): Promise<T> {\n const envelope = await this.request<T>(method, payload, options);\n return envelope.result;\n }\n\n /**\n * Performs a raw Bot API request and returns the full envelope.\n */\n async request<T>(\n method: string,\n payload: Record<string, unknown> = {},\n options: RequestOptions = {},\n ): Promise<ApiEnvelope<T> & { ok: true; result: T }> {\n const url = this.buildMethodUrl(method);\n const headers: Record<string, string> = {\n Authorization: `Bot ${this.token}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n };\n if (options.requestId) {\n headers[IDEMPOTENCY_HEADER] = options.requestId;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.requestTimeoutMs);\n const signal = options.signal\n ? AbortSignal.any([options.signal, controller.signal])\n : controller.signal;\n\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n signal,\n });\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new RiseonlyTimeoutError();\n }\n throw new RiseonlyNetworkError('network request failed', error);\n } finally {\n clearTimeout(timeout);\n }\n\n const body = (await response.json()) as ApiEnvelope<T>;\n if (!body.ok) {\n throw RiseonlyError.fromApiResponse(body);\n }\n return body;\n }\n\n async getMe(options?: RequestOptions): Promise<User> {\n return this.callMethod<User>('getMe', {}, options);\n }\n\n async sendMessage(options: SendMessageOptions): Promise<Message> {\n const { requestId, ...payload } = options;\n return this.callMethod<Message>('sendMessage', payload, { requestId });\n }\n\n async sendPhoto(photo: MediaInput, options: SendMediaOptions): Promise<Message> {\n return this.sendMedia('sendPhoto', 'photo', photo, options);\n }\n\n async sendVideo(video: MediaInput, options: SendMediaOptions): Promise<Message> {\n return this.sendMedia('sendVideo', 'video', video, options);\n }\n\n async sendDocument(document: MediaInput, options: SendMediaOptions): Promise<Message> {\n return this.sendMedia('sendDocument', 'document', document, options);\n }\n\n async sendAudio(audio: MediaInput, options: SendMediaOptions): Promise<Message> {\n return this.sendMedia('sendAudio', 'audio', audio, options);\n }\n\n async sendVoice(voice: MediaInput, options: SendMediaOptions): Promise<Message> {\n return this.sendMedia('sendVoice', 'voice', voice, options);\n }\n\n async sendAnimation(animation: MediaInput, options: SendMediaOptions): Promise<Message> {\n return this.sendMedia('sendAnimation', 'animation', animation, options);\n }\n\n async editMessageText(options: EditMessageTextOptions): Promise<Message> {\n const { requestId, ...payload } = options;\n return this.callMethod<Message>('editMessageText', payload, { requestId });\n }\n\n async deleteMessage(options: DeleteMessageOptions): Promise<boolean> {\n const { requestId, ...payload } = options;\n return this.callMethod<boolean>('deleteMessage', payload, { requestId });\n }\n\n async sendChatAction(options: SendChatActionOptions): Promise<boolean> {\n const { requestId, ...payload } = options;\n return this.callMethod<boolean>('sendChatAction', payload, { requestId });\n }\n\n async getUpdates(options: GetUpdatesOptions = {}): Promise<Update[]> {\n const { requestId, ...payload } = options;\n return this.callMethod<Update[]>('getUpdates', payload, { requestId });\n }\n\n async setWebhook(options: SetWebhookOptions): Promise<SetWebhookResult> {\n const { requestId, ...payload } = options;\n return this.callMethod<SetWebhookResult>('setWebhook', payload, { requestId });\n }\n\n async deleteWebhook(options: DeleteWebhookOptions = {}): Promise<boolean> {\n const { requestId, ...payload } = options;\n return this.callMethod<boolean>('deleteWebhook', payload, { requestId });\n }\n\n async getWebhookInfo(options?: RequestOptions): Promise<WebhookInfo> {\n return this.callMethod<WebhookInfo>('getWebhookInfo', {}, options);\n }\n\n async setMyCommands(options: SetMyCommandsOptions): Promise<boolean> {\n const { requestId, ...payload } = options;\n return this.callMethod<boolean>('setMyCommands', payload, { requestId });\n }\n\n async getMyCommands(options: GetMyCommandsOptions = {}): Promise<BotCommand[]> {\n const { requestId, ...payload } = options;\n return this.callMethod<BotCommand[]>('getMyCommands', payload, { requestId });\n }\n\n async deleteMyCommands(options: DeleteMyCommandsOptions = {}): Promise<boolean> {\n const { requestId, ...payload } = options;\n return this.callMethod<boolean>('deleteMyCommands', payload, { requestId });\n }\n\n async answerCallbackQuery(options: AnswerCallbackQueryOptions): Promise<boolean> {\n const { requestId, ...payload } = options;\n return this.callMethod<boolean>('answerCallbackQuery', payload, { requestId });\n }\n\n async getChat(options: GetChatOptions): Promise<Chat> {\n const { requestId, ...payload } = options;\n return this.callMethod<Chat>('getChat', payload, { requestId });\n }\n\n private async sendMedia(\n method: string,\n field: string,\n media: MediaInput,\n options: SendMediaOptions,\n ): Promise<Message> {\n const { requestId, ...payload } = options;\n return this.callMethod<Message>(\n method,\n {\n ...payload,\n [field]: this.normalizeMedia(media),\n },\n { requestId },\n );\n }\n\n private normalizeMedia(media: MediaInput): string | Record<string, string> {\n if (typeof media === 'string') {\n return media;\n }\n if (media.file_id) {\n return media.file_id;\n }\n if (media.url) {\n return media.url;\n }\n throw new Error('media requires file_id or url');\n }\n\n private buildMethodUrl(method: string): string {\n if (this.useCompatibleEndpoint) {\n return `${this.baseUrl}/bot${this.token}/${method}`;\n }\n return `${this.baseUrl}${CANONICAL_API_PREFIX}/${method}`;\n }\n}\n\nexport function buildQuery(params: Record<string, QueryValue>): string {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null) {\n continue;\n }\n search.set(key, String(value));\n }\n const query = search.toString();\n return query ? `?${query}` : '';\n}\n","import { WEBHOOK_SECRET_HEADER } from './constants.js';\nimport type { Update } from './types/index.js';\n\nexport interface WebhookRequest {\n headers: Record<string, string | string[] | undefined>;\n body: unknown;\n}\n\n/**\n * Parses a webhook request body into an Update object.\n */\nexport function parseWebhookUpdate(body: unknown): Update {\n if (!body || typeof body !== 'object') {\n throw new Error('webhook body must be an object');\n }\n const update = body as Update;\n if (typeof update.update_id !== 'number') {\n throw new Error('webhook body is missing update_id');\n }\n return update;\n}\n\n/**\n * Verifies the webhook secret header sent by Riseonly.\n */\nexport function verifyWebhookSecret(\n headers: Record<string, string | string[] | undefined>,\n secretToken?: string,\n): boolean {\n if (!secretToken) {\n return true;\n }\n const headerValue = headers[WEBHOOK_SECRET_HEADER] ?? headers[WEBHOOK_SECRET_HEADER.toLowerCase()];\n if (!headerValue) {\n return false;\n }\n const received = Array.isArray(headerValue) ? headerValue[0] : headerValue;\n return received === secretToken;\n}\n\n/**\n * Creates a minimal request handler for frameworks like Express or Fastify.\n */\nexport function createWebhookHandler(options: {\n secretToken?: string;\n onUpdate: (update: Update) => void | Promise<void>;\n onError?: (error: unknown) => void | Promise<void>;\n}) {\n return async (request: WebhookRequest): Promise<{ status: number; body?: unknown }> => {\n try {\n if (!verifyWebhookSecret(request.headers, options.secretToken)) {\n return { status: 401, body: { ok: false, description: 'invalid webhook secret' } };\n }\n const update = parseWebhookUpdate(request.body);\n await options.onUpdate(update);\n return { status: 200, body: { ok: true } };\n } catch (error) {\n await options.onError?.(error);\n return { status: 400, body: { ok: false, description: 'invalid webhook payload' } };\n }\n };\n}\n","import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http';\n\nimport { ApiClient } from './client.js';\nimport { RiseonlyError } from './errors.js';\nimport { createWebhookHandler } from './webhook.js';\nimport type {\n BotEvent,\n BotEventMap,\n BotOptions,\n CallbackQuery,\n Message,\n PollingOptions,\n Update,\n WebhookServerOptions,\n} from './types/index.js';\n\ntype Listener<T extends BotEvent> = BotEventMap[T][];\n\nexport class RiseonlyBot extends ApiClient {\n private readonly listeners: { [K in BotEvent]: Listener<K> } = {\n message: [],\n edited_message: [],\n callback_query: [],\n update: [],\n polling_error: [],\n error: [],\n };\n\n private pollingOptions: PollingOptions;\n private webhookOptions?: WebhookServerOptions;\n private polling = false;\n private pollingAbort?: AbortController;\n private offset = 0;\n private webhookServer?: Server;\n\n constructor(token: string, options: BotOptions = {}) {\n super(token, options);\n this.pollingOptions = normalizePollingOptions(options.polling);\n this.webhookOptions = options.webhook === false ? undefined : options.webhook;\n if (options.allowed_updates) {\n this.pollingOptions.allowed_updates = options.allowed_updates;\n }\n if (this.pollingOptions.autoStart) {\n void this.startPolling();\n }\n }\n\n /**\n * Registers an event listener.\n */\n on<T extends BotEvent>(event: T, handler: BotEventMap[T]): this {\n this.listeners[event].push(handler);\n return this;\n }\n\n /**\n * Removes a previously registered listener.\n */\n off<T extends BotEvent>(event: T, handler: BotEventMap[T]): this {\n const bucket = this.listeners[event];\n const index = bucket.indexOf(handler);\n if (index >= 0) {\n bucket.splice(index, 1);\n }\n return this;\n }\n\n /**\n * Registers a one-time event listener.\n */\n once<T extends BotEvent>(event: T, handler: BotEventMap[T]): this {\n const wrapper = ((...args: Parameters<BotEventMap[T]>) => {\n this.off(event, wrapper as BotEventMap[T]);\n return (\n handler as unknown as (...inner: Parameters<BotEventMap[T]>) => void | Promise<void>\n )(...args);\n }) as unknown as BotEventMap[T];\n return this.on(event, wrapper);\n }\n\n /**\n * Starts long polling for bot updates.\n */\n async startPolling(options: PollingOptions = {}): Promise<void> {\n if (this.polling) {\n return;\n }\n this.polling = true;\n this.pollingOptions = { ...this.pollingOptions, ...options, autoStart: true };\n this.pollingAbort = new AbortController();\n void this.pollLoop();\n }\n\n /**\n * Stops long polling.\n */\n async stopPolling(): Promise<void> {\n this.polling = false;\n this.pollingAbort?.abort();\n this.pollingAbort = undefined;\n }\n\n /**\n * Starts a built-in HTTP server that receives webhook updates.\n */\n async startWebhook(options: WebhookServerOptions = {}): Promise<void> {\n const config = { ...this.webhookOptions, ...options };\n this.webhookOptions = config;\n const path = config.path ?? '/';\n const host = config.host ?? '0.0.0.0';\n const port = config.port ?? 3000;\n\n const handler = createWebhookHandler({\n secretToken: config.secretToken,\n onUpdate: (update) => this.processUpdate(update),\n onError: (error) => this.emit('error', error),\n });\n\n if (this.webhookServer) {\n return;\n }\n\n this.webhookServer = createServer(async (req, res) => {\n if (req.method !== 'POST' || req.url?.split('?')[0] !== path) {\n respond(res, 404, { ok: false });\n return;\n }\n try {\n const body = await readJsonBody(req);\n const result = await handler({\n headers: normalizeHeaders(req.headers),\n body,\n });\n respond(res, result.status, result.body);\n } catch (error) {\n await this.emit('error', error);\n respond(res, 500, { ok: false });\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n this.webhookServer!.once('error', reject);\n this.webhookServer!.listen(port, host, () => resolve());\n });\n }\n\n /**\n * Stops the built-in webhook server.\n */\n async stopWebhook(): Promise<void> {\n if (!this.webhookServer) {\n return;\n }\n const server = this.webhookServer;\n this.webhookServer = undefined;\n await new Promise<void>((resolve, reject) => {\n server.close((error) => (error ? reject(error) : resolve()));\n });\n }\n\n /**\n * Processes a single update and dispatches events.\n */\n async processUpdate(update: Update): Promise<void> {\n await this.emit('update', update);\n if (update.message) {\n await this.emit('message', update.message, update);\n }\n if (update.edited_message) {\n await this.emit('edited_message', update.edited_message, update);\n }\n if (update.callback_query) {\n await this.emit('callback_query', update.callback_query, update);\n }\n }\n\n /**\n * Sends a text message to a chat.\n */\n async reply(message: Message, text: string, extra: Record<string, unknown> = {}): Promise<Message> {\n return this.sendMessage({\n chat_id: message.chat.id,\n text,\n reply_to_message_id: message.message_id,\n ...extra,\n });\n }\n\n /**\n * Answers a callback query and optionally sends a toast.\n */\n async answer(query: CallbackQuery, text?: string, showAlert = false): Promise<boolean> {\n return this.answerCallbackQuery({\n callback_query_id: query.id,\n text,\n show_alert: showAlert,\n });\n }\n\n private async pollLoop(): Promise<void> {\n while (this.polling) {\n try {\n const updates = await this.getUpdates({\n offset: this.offset,\n timeout: this.pollingOptions.timeout,\n limit: this.pollingOptions.limit,\n allowed_updates: this.pollingOptions.allowed_updates,\n signal: this.pollingAbort?.signal,\n });\n let processed = 0;\n for (const update of updates) {\n if (update.update_id < this.offset) {\n continue;\n }\n this.offset = Math.max(this.offset, update.update_id + 1);\n await this.processUpdate(update);\n processed += 1;\n }\n if (processed === 0) {\n await sleep(this.pollingOptions.interval ?? 1000);\n }\n } catch (error) {\n if (!this.polling || isAbortError(error)) {\n return;\n }\n await this.emit('polling_error', error);\n if (error instanceof RiseonlyError && error.retryAfter) {\n await sleep(error.retryAfter * 1000);\n } else {\n await sleep(this.pollingOptions.interval ?? 1000);\n }\n }\n }\n }\n\n private async emit<T extends BotEvent>(\n event: T,\n ...args: Parameters<BotEventMap[T]>\n ): Promise<void> {\n for (const listener of [...this.listeners[event]]) {\n try {\n await (listener as (...inner: Parameters<BotEventMap[T]>) => void | Promise<void>)(...args);\n } catch (error) {\n await this.emit('error', error);\n }\n }\n }\n}\n\nfunction normalizePollingOptions(\n value: BotOptions['polling'],\n): PollingOptions & { autoStart: boolean } {\n if (!value) {\n return { interval: 1000, timeout: 30, limit: 100, autoStart: false };\n }\n if (value === true) {\n return { interval: 1000, timeout: 30, limit: 100, autoStart: true };\n }\n return {\n interval: 1000,\n timeout: 30,\n limit: 100,\n autoStart: true,\n ...value,\n };\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 error instanceof Error && error.name === 'AbortError';\n}\n\nfunction normalizeHeaders(\n headers: IncomingMessage['headers'],\n): Record<string, string | string[] | undefined> {\n const normalized: Record<string, string | string[] | undefined> = {};\n for (const [key, value] of Object.entries(headers)) {\n normalized[key] = value;\n }\n return normalized;\n}\n\nasync function readJsonBody(req: IncomingMessage): Promise<unknown> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n if (chunks.length === 0) {\n return {};\n }\n return JSON.parse(Buffer.concat(chunks).toString('utf8')) as unknown;\n}\n\nfunction respond(res: ServerResponse, status: number, body?: unknown): void {\n res.statusCode = status;\n res.setHeader('Content-Type', 'application/json');\n res.end(body === undefined ? undefined : JSON.stringify(body));\n}\n","import { createHmac, timingSafeEqual } from 'node:crypto';\n\nexport interface InitDataFields {\n [key: string]: string;\n}\n\nconst INIT_DATA_HASH_RE = /^[0-9a-f]{64}$/;\n\n/**\n * Parses URL-encoded init data into key/value fields.\n */\nexport function parseInitData(encoded: string): InitDataFields {\n const fields = Object.fromEntries(new URLSearchParams(encoded).entries());\n return fields;\n}\n\n/**\n * Builds the data check string used for init data signature verification.\n */\nexport function buildInitDataCheckString(fields: InitDataFields): string {\n return Object.entries(fields)\n .filter(([key]) => key !== 'hash')\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n');\n}\n\n/**\n * Derives the HMAC secret from a bot token.\n */\nexport function deriveInitDataSecret(botToken: string): Buffer {\n return createHmac('sha256', 'WebAppData').update(botToken).digest();\n}\n\n/**\n * Computes the expected init data hash for a bot token.\n */\nexport function signInitData(botToken: string, dataCheckString: string): string {\n const secret = deriveInitDataSecret(botToken);\n return createHmac('sha256', secret).update(dataCheckString).digest('hex');\n}\n\n/**\n * Verifies signed mini app init data.\n */\nexport function verifyInitData(botToken: string, encoded: string): InitDataFields {\n const fields = parseInitData(encoded);\n const hash = fields.hash;\n if (!hash) {\n throw new Error('init data hash is missing');\n }\n if (!INIT_DATA_HASH_RE.test(hash)) {\n throw new Error('init data signature is invalid');\n }\n\n const dataCheckString = buildInitDataCheckString(fields);\n const expected = signInitData(botToken, dataCheckString);\n\n const left = Buffer.from(hash, 'hex');\n const right = Buffer.from(expected, 'hex');\n if (left.length !== right.length || !timingSafeEqual(left, right)) {\n throw new Error('init data signature is invalid');\n }\n\n const expiresAt = fields.expires_at ? Number(fields.expires_at) : undefined;\n if (expiresAt !== undefined && Number.isFinite(expiresAt) && expiresAt < Date.now()) {\n throw new Error('init data has expired');\n }\n\n return fields;\n}\n\n/**\n * Extracts init data from a launch URL hash fragment.\n */\nexport function extractInitDataFromLaunchUrl(launchUrl: string): string | null {\n const url = new URL(launchUrl);\n const hash = url.hash.startsWith('#') ? url.hash.slice(1) : url.hash;\n if (!hash) {\n return null;\n }\n return new URLSearchParams(hash).get('riseonlyInitData');\n}\n\n/**\n * Creates a random idempotency key for Bot API requests.\n */\nexport function createRequestId(): string {\n return crypto.randomUUID();\n}\n"]}
@@ -0,0 +1,535 @@
1
+ declare const DEFAULT_API_BASE = "https://api.riseonly.net";
2
+ declare const CANONICAL_API_PREFIX = "/api/bot/v1";
3
+ declare const WEBHOOK_SECRET_HEADER = "x-riseonly-bot-api-secret-token";
4
+ declare const IDEMPOTENCY_HEADER = "x-request-id";
5
+ declare const SUPPORTED_METHODS: readonly ["getMe", "sendMessage", "sendPhoto", "sendVideo", "sendDocument", "sendAudio", "sendVoice", "sendAnimation", "editMessageText", "deleteMessage", "sendChatAction", "getUpdates", "setWebhook", "deleteWebhook", "getWebhookInfo", "setMyCommands", "getMyCommands", "deleteMyCommands", "answerCallbackQuery", "getChat"];
6
+ type BotApiMethod = (typeof SUPPORTED_METHODS)[number];
7
+ declare const UPDATE_TYPES: readonly ["message", "edited_message", "callback_query", "chat_member", "my_chat_member"];
8
+ type UpdateType = (typeof UPDATE_TYPES)[number];
9
+ declare const CHAT_ACTIONS: readonly ["typing", "upload_photo", "record_video", "upload_video", "record_voice", "upload_voice", "upload_document", "choose_sticker", "find_location", "record_video_note", "upload_video_note"];
10
+ type ChatAction = (typeof CHAT_ACTIONS)[number];
11
+ declare const COMMAND_SCOPES: readonly ["default", "all_private_chats", "all_group_chats", "all_chat_administrators"];
12
+ type CommandScope = (typeof COMMAND_SCOPES)[number] | `chat:${string}` | `chat_administrators:${string}`;
13
+
14
+ interface ApiResponse<T> {
15
+ ok: true;
16
+ result: T;
17
+ }
18
+ interface ApiErrorResponse {
19
+ ok: false;
20
+ error_code: number;
21
+ description: string;
22
+ parameters?: {
23
+ retry_after?: number;
24
+ };
25
+ }
26
+ type ApiEnvelope<T> = ApiResponse<T> | ApiErrorResponse;
27
+ interface Capabilities {
28
+ platform: string;
29
+ api_version: string;
30
+ canonical_endpoint: string;
31
+ compatible_endpoint: string;
32
+ authorization: string;
33
+ idempotency_header: string;
34
+ webhook_secret_header: string;
35
+ update_delivery: string[];
36
+ mini_app_production_scheme: string;
37
+ methods: BotApiMethod[];
38
+ }
39
+ interface ClientOptions {
40
+ baseUrl?: string;
41
+ fetch?: typeof fetch;
42
+ requestTimeoutMs?: number;
43
+ useCompatibleEndpoint?: boolean;
44
+ }
45
+ interface RequestOptions {
46
+ requestId?: string;
47
+ signal?: AbortSignal;
48
+ }
49
+ interface User {
50
+ id: string;
51
+ is_bot: boolean;
52
+ first_name: string;
53
+ name?: string;
54
+ username?: string;
55
+ description?: string;
56
+ avatar_url?: string;
57
+ banner_url?: string;
58
+ is_premium?: boolean;
59
+ is_official?: boolean;
60
+ is_online?: boolean;
61
+ last_seen?: string;
62
+ bot_owner_id?: string;
63
+ can_join_groups?: boolean;
64
+ supports_inline_queries?: boolean;
65
+ privacy_mode?: boolean;
66
+ }
67
+ interface Chat {
68
+ id: string;
69
+ type: 'private' | 'group' | 'channel' | string;
70
+ title?: string;
71
+ username?: string;
72
+ description?: string;
73
+ avatar_url?: string;
74
+ member_count?: number;
75
+ }
76
+ interface MediaVariant {
77
+ variant_type?: string;
78
+ width?: number;
79
+ height?: number;
80
+ size?: number;
81
+ file_url?: string;
82
+ file_id?: string;
83
+ bitrate?: number;
84
+ quality?: string;
85
+ }
86
+ interface MediaFile {
87
+ type?: string;
88
+ media_type?: string;
89
+ file_id?: string;
90
+ file_url?: string;
91
+ thumbnail_url?: string;
92
+ duration?: number;
93
+ width?: number;
94
+ height?: number;
95
+ file_name?: string;
96
+ file_size?: number;
97
+ mime_type?: string;
98
+ bitrate?: number;
99
+ fps?: number;
100
+ codec?: string;
101
+ sticker_id?: string;
102
+ pack_id?: string;
103
+ sticker_type?: string;
104
+ associated_emojis?: string[];
105
+ variants?: MediaVariant[];
106
+ }
107
+ interface MessageEntity {
108
+ type: string;
109
+ offset: number;
110
+ length: number;
111
+ url?: string;
112
+ user?: User;
113
+ }
114
+ interface WebAppInfo {
115
+ url: string;
116
+ bot_id?: string;
117
+ mini_app_id?: string;
118
+ }
119
+ interface InlineKeyboardButton {
120
+ text: string;
121
+ url?: string;
122
+ callback_data?: string;
123
+ web_app?: WebAppInfo;
124
+ }
125
+ interface ReplyKeyboardButton {
126
+ text: string;
127
+ request_contact?: boolean;
128
+ request_location?: boolean;
129
+ web_app?: WebAppInfo;
130
+ }
131
+ interface InlineKeyboardMarkup {
132
+ inline_keyboard: InlineKeyboardButton[][];
133
+ }
134
+ interface ReplyKeyboardMarkup {
135
+ keyboard: ReplyKeyboardButton[][];
136
+ resize_keyboard?: boolean;
137
+ one_time_keyboard?: boolean;
138
+ selective?: boolean;
139
+ }
140
+ interface ReplyKeyboardRemove {
141
+ remove_keyboard: true;
142
+ selective?: boolean;
143
+ }
144
+ interface ForceReply {
145
+ force_reply: true;
146
+ selective?: boolean;
147
+ }
148
+ type ReplyMarkup = InlineKeyboardMarkup | ReplyKeyboardMarkup | ReplyKeyboardRemove | ForceReply;
149
+ interface WebAppData {
150
+ data: string;
151
+ button_text: string;
152
+ }
153
+ interface ForwardOrigin {
154
+ chat_id: string;
155
+ message_id: string;
156
+ sender_id?: string;
157
+ sender_name?: string;
158
+ sender_logo?: string;
159
+ date?: number;
160
+ forward_chain_count?: number;
161
+ original_message_id?: string;
162
+ }
163
+ interface ReactionCount {
164
+ reaction: string;
165
+ count: number;
166
+ reacted_by_you?: boolean;
167
+ }
168
+ interface Message {
169
+ message_id: string;
170
+ date: number;
171
+ timestamp?: number;
172
+ chat: Chat;
173
+ from?: User;
174
+ text?: string;
175
+ content?: string;
176
+ original_content?: string;
177
+ content_type?: string;
178
+ is_edited?: boolean;
179
+ is_bot_message?: boolean;
180
+ edit_date?: number;
181
+ caption?: string;
182
+ entities?: MessageEntity[];
183
+ reply_markup?: ReplyMarkup;
184
+ web_app_data?: WebAppData;
185
+ reply_to_message?: Message;
186
+ forward_origin?: ForwardOrigin;
187
+ via_bot?: User;
188
+ message_thread_id?: string;
189
+ temp_id?: string;
190
+ media_items?: MediaFile[];
191
+ photo?: MediaFile[];
192
+ video?: MediaFile;
193
+ video_note?: MediaFile;
194
+ audio?: MediaFile;
195
+ voice?: MediaFile;
196
+ document?: MediaFile;
197
+ animation?: MediaFile;
198
+ sticker?: MediaFile;
199
+ reactions?: ReactionCount[];
200
+ }
201
+ interface CallbackQuery {
202
+ id: string;
203
+ from: User;
204
+ message?: Message;
205
+ inline_message_id?: string;
206
+ chat_instance?: string;
207
+ data?: string;
208
+ game_short_name?: string;
209
+ }
210
+ interface Update {
211
+ update_id: number;
212
+ message?: Message;
213
+ edited_message?: Message;
214
+ callback_query?: CallbackQuery;
215
+ chat_member?: unknown;
216
+ my_chat_member?: unknown;
217
+ }
218
+ interface BotCommand {
219
+ command: string;
220
+ description: string;
221
+ }
222
+ interface WebhookInfo {
223
+ url: string;
224
+ has_custom_certificate: boolean;
225
+ pending_update_count: number;
226
+ last_error_date?: number;
227
+ last_error_message?: string;
228
+ max_connections?: number;
229
+ allowed_updates?: UpdateType[];
230
+ enabled?: boolean;
231
+ }
232
+ interface SetWebhookResult {
233
+ url: string;
234
+ enabled: boolean;
235
+ }
236
+ interface SendMessageOptions {
237
+ chat_id: string;
238
+ text?: string;
239
+ caption?: string;
240
+ parse_mode?: string;
241
+ disable_notification?: boolean;
242
+ reply_to_message_id?: string;
243
+ reply_markup?: ReplyMarkup;
244
+ requestId?: string;
245
+ }
246
+ interface SendMediaOptions {
247
+ chat_id: string;
248
+ caption?: string;
249
+ disable_notification?: boolean;
250
+ reply_to_message_id?: string;
251
+ reply_markup?: ReplyMarkup;
252
+ requestId?: string;
253
+ }
254
+ interface EditMessageTextOptions {
255
+ chat_id?: string;
256
+ message_id?: string;
257
+ inline_message_id?: string;
258
+ text: string;
259
+ parse_mode?: string;
260
+ reply_markup?: ReplyMarkup;
261
+ requestId?: string;
262
+ }
263
+ interface DeleteMessageOptions {
264
+ chat_id: string;
265
+ message_id: string;
266
+ requestId?: string;
267
+ }
268
+ interface SendChatActionOptions {
269
+ chat_id: string;
270
+ action: ChatAction;
271
+ requestId?: string;
272
+ }
273
+ interface GetUpdatesOptions {
274
+ offset?: number;
275
+ limit?: number;
276
+ timeout?: number;
277
+ allowed_updates?: UpdateType[];
278
+ requestId?: string;
279
+ signal?: AbortSignal;
280
+ }
281
+ interface SetWebhookOptions {
282
+ url: string;
283
+ secret_token?: string;
284
+ max_connections?: number;
285
+ allowed_updates?: UpdateType[];
286
+ drop_pending_updates?: boolean;
287
+ requestId?: string;
288
+ }
289
+ interface DeleteWebhookOptions {
290
+ drop_pending_updates?: boolean;
291
+ requestId?: string;
292
+ }
293
+ interface SetMyCommandsOptions {
294
+ commands: BotCommand[];
295
+ scope?: CommandScope;
296
+ language_code?: string;
297
+ requestId?: string;
298
+ }
299
+ interface GetMyCommandsOptions {
300
+ scope?: CommandScope;
301
+ language_code?: string;
302
+ requestId?: string;
303
+ }
304
+ interface DeleteMyCommandsOptions {
305
+ scope?: CommandScope;
306
+ language_code?: string;
307
+ requestId?: string;
308
+ }
309
+ interface AnswerCallbackQueryOptions {
310
+ callback_query_id: string;
311
+ text?: string;
312
+ show_alert?: boolean;
313
+ url?: string;
314
+ requestId?: string;
315
+ }
316
+ interface GetChatOptions {
317
+ chat_id: string;
318
+ requestId?: string;
319
+ }
320
+ type MediaInput = string | {
321
+ file_id?: string;
322
+ url?: string;
323
+ };
324
+ interface PollingOptions {
325
+ interval?: number;
326
+ timeout?: number;
327
+ limit?: number;
328
+ allowed_updates?: UpdateType[];
329
+ autoStart?: boolean;
330
+ }
331
+ interface WebhookServerOptions {
332
+ path?: string;
333
+ host?: string;
334
+ port?: number;
335
+ secretToken?: string;
336
+ }
337
+ interface BotOptions extends ClientOptions {
338
+ polling?: boolean | PollingOptions;
339
+ webhook?: false | WebhookServerOptions;
340
+ allowed_updates?: UpdateType[];
341
+ }
342
+ type MessageHandler = (message: Message, update: Update) => void | Promise<void>;
343
+ type EditedMessageHandler = (message: Message, update: Update) => void | Promise<void>;
344
+ type CallbackQueryHandler = (query: CallbackQuery, update: Update) => void | Promise<void>;
345
+ type UpdateHandler = (update: Update) => void | Promise<void>;
346
+ type ErrorHandler = (error: unknown) => void | Promise<void>;
347
+ type PollingErrorHandler = (error: unknown) => void | Promise<void>;
348
+ type BotEventMap = {
349
+ message: MessageHandler;
350
+ edited_message: EditedMessageHandler;
351
+ callback_query: CallbackQueryHandler;
352
+ update: UpdateHandler;
353
+ polling_error: PollingErrorHandler;
354
+ error: ErrorHandler;
355
+ };
356
+ type BotEvent = keyof BotEventMap;
357
+
358
+ declare class ApiClient {
359
+ readonly token: string;
360
+ readonly baseUrl: string;
361
+ readonly fetchImpl: typeof fetch;
362
+ readonly requestTimeoutMs: number;
363
+ readonly useCompatibleEndpoint: boolean;
364
+ constructor(token: string, options?: ClientOptions);
365
+ /**
366
+ * Returns the platform capabilities document.
367
+ */
368
+ getCapabilities(signal?: AbortSignal): Promise<Capabilities>;
369
+ /**
370
+ * Calls a Bot API method and returns the typed result.
371
+ */
372
+ callMethod<T>(method: string, payload?: Record<string, unknown>, options?: RequestOptions): Promise<T>;
373
+ /**
374
+ * Performs a raw Bot API request and returns the full envelope.
375
+ */
376
+ request<T>(method: string, payload?: Record<string, unknown>, options?: RequestOptions): Promise<ApiEnvelope<T> & {
377
+ ok: true;
378
+ result: T;
379
+ }>;
380
+ getMe(options?: RequestOptions): Promise<User>;
381
+ sendMessage(options: SendMessageOptions): Promise<Message>;
382
+ sendPhoto(photo: MediaInput, options: SendMediaOptions): Promise<Message>;
383
+ sendVideo(video: MediaInput, options: SendMediaOptions): Promise<Message>;
384
+ sendDocument(document: MediaInput, options: SendMediaOptions): Promise<Message>;
385
+ sendAudio(audio: MediaInput, options: SendMediaOptions): Promise<Message>;
386
+ sendVoice(voice: MediaInput, options: SendMediaOptions): Promise<Message>;
387
+ sendAnimation(animation: MediaInput, options: SendMediaOptions): Promise<Message>;
388
+ editMessageText(options: EditMessageTextOptions): Promise<Message>;
389
+ deleteMessage(options: DeleteMessageOptions): Promise<boolean>;
390
+ sendChatAction(options: SendChatActionOptions): Promise<boolean>;
391
+ getUpdates(options?: GetUpdatesOptions): Promise<Update[]>;
392
+ setWebhook(options: SetWebhookOptions): Promise<SetWebhookResult>;
393
+ deleteWebhook(options?: DeleteWebhookOptions): Promise<boolean>;
394
+ getWebhookInfo(options?: RequestOptions): Promise<WebhookInfo>;
395
+ setMyCommands(options: SetMyCommandsOptions): Promise<boolean>;
396
+ getMyCommands(options?: GetMyCommandsOptions): Promise<BotCommand[]>;
397
+ deleteMyCommands(options?: DeleteMyCommandsOptions): Promise<boolean>;
398
+ answerCallbackQuery(options: AnswerCallbackQueryOptions): Promise<boolean>;
399
+ getChat(options: GetChatOptions): Promise<Chat>;
400
+ private sendMedia;
401
+ private normalizeMedia;
402
+ private buildMethodUrl;
403
+ }
404
+
405
+ declare class RiseonlyBot extends ApiClient {
406
+ private readonly listeners;
407
+ private pollingOptions;
408
+ private webhookOptions?;
409
+ private polling;
410
+ private pollingAbort?;
411
+ private offset;
412
+ private webhookServer?;
413
+ constructor(token: string, options?: BotOptions);
414
+ /**
415
+ * Registers an event listener.
416
+ */
417
+ on<T extends BotEvent>(event: T, handler: BotEventMap[T]): this;
418
+ /**
419
+ * Removes a previously registered listener.
420
+ */
421
+ off<T extends BotEvent>(event: T, handler: BotEventMap[T]): this;
422
+ /**
423
+ * Registers a one-time event listener.
424
+ */
425
+ once<T extends BotEvent>(event: T, handler: BotEventMap[T]): this;
426
+ /**
427
+ * Starts long polling for bot updates.
428
+ */
429
+ startPolling(options?: PollingOptions): Promise<void>;
430
+ /**
431
+ * Stops long polling.
432
+ */
433
+ stopPolling(): Promise<void>;
434
+ /**
435
+ * Starts a built-in HTTP server that receives webhook updates.
436
+ */
437
+ startWebhook(options?: WebhookServerOptions): Promise<void>;
438
+ /**
439
+ * Stops the built-in webhook server.
440
+ */
441
+ stopWebhook(): Promise<void>;
442
+ /**
443
+ * Processes a single update and dispatches events.
444
+ */
445
+ processUpdate(update: Update): Promise<void>;
446
+ /**
447
+ * Sends a text message to a chat.
448
+ */
449
+ reply(message: Message, text: string, extra?: Record<string, unknown>): Promise<Message>;
450
+ /**
451
+ * Answers a callback query and optionally sends a toast.
452
+ */
453
+ answer(query: CallbackQuery, text?: string, showAlert?: boolean): Promise<boolean>;
454
+ private pollLoop;
455
+ private emit;
456
+ }
457
+
458
+ declare class RiseonlyError extends Error {
459
+ readonly code: number;
460
+ readonly retryAfter?: number;
461
+ readonly response?: unknown;
462
+ constructor(message: string, code: number, retryAfter?: number, response?: unknown);
463
+ static fromApiResponse(body: {
464
+ error_code: number;
465
+ description: string;
466
+ parameters?: {
467
+ retry_after?: number;
468
+ };
469
+ }): RiseonlyError;
470
+ }
471
+ declare class RiseonlyNetworkError extends RiseonlyError {
472
+ readonly cause?: unknown;
473
+ constructor(message: string, cause?: unknown, code?: number);
474
+ }
475
+ declare class RiseonlyTimeoutError extends RiseonlyNetworkError {
476
+ constructor(message?: string);
477
+ }
478
+
479
+ interface WebhookRequest {
480
+ headers: Record<string, string | string[] | undefined>;
481
+ body: unknown;
482
+ }
483
+ /**
484
+ * Parses a webhook request body into an Update object.
485
+ */
486
+ declare function parseWebhookUpdate(body: unknown): Update;
487
+ /**
488
+ * Verifies the webhook secret header sent by Riseonly.
489
+ */
490
+ declare function verifyWebhookSecret(headers: Record<string, string | string[] | undefined>, secretToken?: string): boolean;
491
+ /**
492
+ * Creates a minimal request handler for frameworks like Express or Fastify.
493
+ */
494
+ declare function createWebhookHandler(options: {
495
+ secretToken?: string;
496
+ onUpdate: (update: Update) => void | Promise<void>;
497
+ onError?: (error: unknown) => void | Promise<void>;
498
+ }): (request: WebhookRequest) => Promise<{
499
+ status: number;
500
+ body?: unknown;
501
+ }>;
502
+
503
+ interface InitDataFields {
504
+ [key: string]: string;
505
+ }
506
+ /**
507
+ * Parses URL-encoded init data into key/value fields.
508
+ */
509
+ declare function parseInitData(encoded: string): InitDataFields;
510
+ /**
511
+ * Builds the data check string used for init data signature verification.
512
+ */
513
+ declare function buildInitDataCheckString(fields: InitDataFields): string;
514
+ /**
515
+ * Derives the HMAC secret from a bot token.
516
+ */
517
+ declare function deriveInitDataSecret(botToken: string): Buffer;
518
+ /**
519
+ * Computes the expected init data hash for a bot token.
520
+ */
521
+ declare function signInitData(botToken: string, dataCheckString: string): string;
522
+ /**
523
+ * Verifies signed mini app init data.
524
+ */
525
+ declare function verifyInitData(botToken: string, encoded: string): InitDataFields;
526
+ /**
527
+ * Extracts init data from a launch URL hash fragment.
528
+ */
529
+ declare function extractInitDataFromLaunchUrl(launchUrl: string): string | null;
530
+ /**
531
+ * Creates a random idempotency key for Bot API requests.
532
+ */
533
+ declare function createRequestId(): string;
534
+
535
+ export { type AnswerCallbackQueryOptions, ApiClient, type ApiEnvelope, type ApiErrorResponse, type ApiResponse, type BotCommand, type BotEvent, type BotEventMap, type BotOptions, CANONICAL_API_PREFIX, CHAT_ACTIONS, COMMAND_SCOPES, type CallbackQuery, type CallbackQueryHandler, type Capabilities, type Chat, type ClientOptions, DEFAULT_API_BASE, type DeleteMessageOptions, type DeleteMyCommandsOptions, type DeleteWebhookOptions, type EditMessageTextOptions, type EditedMessageHandler, type ErrorHandler, type ForceReply, type ForwardOrigin, type GetChatOptions, type GetMyCommandsOptions, type GetUpdatesOptions, IDEMPOTENCY_HEADER, type InlineKeyboardButton, type InlineKeyboardMarkup, type MediaFile, type MediaInput, type MediaVariant, type Message, type MessageEntity, type MessageHandler, type PollingErrorHandler, type PollingOptions, type ReactionCount, type ReplyKeyboardButton, type ReplyKeyboardMarkup, type ReplyKeyboardRemove, type ReplyMarkup, type RequestOptions, RiseonlyBot, RiseonlyError, RiseonlyNetworkError, RiseonlyTimeoutError, SUPPORTED_METHODS, type SendChatActionOptions, type SendMediaOptions, type SendMessageOptions, type SetMyCommandsOptions, type SetWebhookOptions, type SetWebhookResult, UPDATE_TYPES, type Update, type UpdateHandler, type User, WEBHOOK_SECRET_HEADER, type WebAppData, type WebAppInfo, type WebhookInfo, type WebhookServerOptions, buildInitDataCheckString, createRequestId, createWebhookHandler, deriveInitDataSecret, extractInitDataFromLaunchUrl, parseInitData, parseWebhookUpdate, signInitData, verifyInitData, verifyWebhookSecret };