import { type Update } from "../types.js"; type MaybePromise = T | Promise; /** * Abstraction over a request-response cycle, providing access to the update, as * well as a mechanism for responding to the request and to end it. */ export interface ReqResHandler { /** * The update object sent from Telegram, usually resolves the request's JSON * body */ update: MaybePromise; /** * X-Telegram-Bot-Api-Secret-Token header of the request, or undefined if * not present */ header?: string; /** * Ends the request immediately without body, called after every request * unless a webhook reply was performed */ end?: () => void; /** * Sends the specified JSON as a payload in the body, used for webhook * replies */ respond: (json: string) => unknown | Promise; /** * Responds that the request is unauthorized due to mismatching * X-Telegram-Bot-Api-Secret-Token headers */ unauthorized: () => unknown | Promise; /** * Some frameworks (e.g. Deno's std/http `listenAndServe`) assume that * handler returns something */ handlerReturn?: Promise; } /** * Middleware for a web framework. Creates a request-response handler for a * request. The handler will be used to integrate with the compatible framework. */ export type FrameworkAdapter = (...args: any[]) => ReqResHandler; export type LambdaAdapter = (event: { body?: string; headers: Record; }, _context: unknown, callback: (arg0: unknown, arg1: Record) => Promise) => ReqResHandler; export type LambdaAsyncAdapter = (event: { body?: string; headers: Record; }, _context: unknown) => ReqResHandler; export type AzureAdapter = (context: { res?: { [key: string]: any; }; }, request: { body?: unknown; }) => ReqResHandler; export type AzureAdapterV4 = (request: { headers: { get(name: string): string | null; }; json(): Promise; }) => ReqResHandler<{ status: number; body?: string; } | { jsonBody: string; }>; export type BunAdapter = (request: { headers: Headers; json: () => Promise; }) => ReqResHandler; export type CloudflareAdapter = (event: { request: Body & { method: string; url: string; headers: Headers; }; respondWith: (response: Promise) => void; }) => ReqResHandler; export type CloudflareModuleAdapter = (request: Body & { method: string; url: string; headers: Headers; }) => ReqResHandler; export type ElysiaAdapter = (ctx: { body: unknown; headers: Record; set: { headers: Record; status?: string | number; }; }) => ReqResHandler; export type ExpressAdapter = (req: { body: Update; header: (header: string) => string | undefined; }, res: { end: (cb?: () => void) => typeof res; set: (field: string, value?: string | string[]) => typeof res; send: (json: string) => typeof res; status: (code: number) => typeof res; }) => ReqResHandler; export type FastifyAdapter = (request: { body: unknown; headers: any; }, reply: { status: (code: number) => typeof reply; headers: (headers: Record) => typeof reply; code: (code: number) => typeof reply; send: { (): typeof reply; (json: string): typeof reply; }; }) => ReqResHandler; export type HonoAdapter = (c: { req: { json: () => Promise; header: (header: string) => string | undefined; }; body(data: string): Response; body(data: null, status: 204): Response; status: (status: any) => void; json: (json: string) => Response; }) => ReqResHandler; export type HttpAdapter = (req: { headers: Record; on: (event: string, listener: (chunk: unknown) => void) => typeof req; once: (event: string, listener: () => void) => typeof req; }, res: { writeHead: { (status: number): typeof res; (status: number, headers: Record): typeof res; }; end: (json?: string) => void; }) => ReqResHandler; export type KoaAdapter = (ctx: { get: (header: string) => string | undefined; set: (key: string, value: string) => void; status: number; body: string; request: { body?: unknown; }; response: { body: unknown; status: number; }; }) => ReqResHandler; export type NextAdapter = (req: { body: Update; headers: Record; }, res: { end: (cb?: () => void) => typeof res; status: (code: number) => typeof res; json: (json: string) => any; send: (json: string) => any; }) => ReqResHandler; export type NHttpAdapter = (rev: { body: unknown; headers: { get: (header: string) => string | null; }; response: { sendStatus: (status: number) => void; status: (status: number) => { send: (json: string) => void; }; }; }) => ReqResHandler; export type OakAdapter = (ctx: { request: { body: { json: () => Promise; }; headers: { get: (header: string) => string | null; }; }; response: { status: number; type: string | undefined; body: unknown; }; }) => ReqResHandler; export type ServeHttpAdapter = (requestEvent: { request: Request; respondWith: (response: Response) => void; }) => ReqResHandler; export type StdHttpAdapter = (req: Request) => ReqResHandler; export type SveltekitAdapter = ({ request }: { request: Request; }) => ReqResHandler; export type WorktopAdapter = (req: { json: () => Promise; headers: { get: (header: string) => string | null; }; }, res: { end: (data: BodyInit | null) => void; send: (status: number, json: string) => void; }) => ReqResHandler; export declare const adapters: { "aws-lambda": LambdaAdapter; "aws-lambda-async": LambdaAsyncAdapter; azure: AzureAdapter; "azure-v4": AzureAdapterV4; bun: BunAdapter; cloudflare: CloudflareAdapter; "cloudflare-mod": CloudflareModuleAdapter; elysia: ElysiaAdapter; express: ExpressAdapter; fastify: FastifyAdapter; hono: HonoAdapter; http: HttpAdapter; https: HttpAdapter; koa: KoaAdapter; "next-js": NextAdapter; nhttp: NHttpAdapter; oak: OakAdapter; serveHttp: ServeHttpAdapter; "std/http": StdHttpAdapter; sveltekit: SveltekitAdapter; worktop: WorktopAdapter; }; export {};