2023-08-13 16:48:04 +03:00

67 lines
2.1 KiB
TypeScript

import { type Update } from "../types.js";
/**
* HTTP Web frameworks for which grammY provides compatible callback out of the
* box.
*/
export type SupportedFrameworks = keyof typeof adapters;
/**
* 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: Promise<Update>;
/**
* 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<unknown>;
/**
* Responds that the request is unauthorized due to mismatching
* X-Telegram-Bot-Api-Secret-Token headers
*/
unauthorized: () => unknown | Promise<unknown>;
/**
* Some frameworks (e.g. Deno's std/http `listenAndServe`) assume that
* handler returns something
*/
handlerReturn?: any;
}
/**
* 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 declare const adapters: {
express: FrameworkAdapter;
koa: FrameworkAdapter;
fastify: FrameworkAdapter;
serveHttp: FrameworkAdapter;
"std/http": FrameworkAdapter;
oak: FrameworkAdapter;
http: FrameworkAdapter;
https: FrameworkAdapter;
"aws-lambda": FrameworkAdapter;
"aws-lambda-async": FrameworkAdapter;
azure: FrameworkAdapter;
"next-js": FrameworkAdapter;
sveltekit: FrameworkAdapter;
cloudflare: FrameworkAdapter;
"cloudflare-mod": FrameworkAdapter;
hono: FrameworkAdapter;
worktop: FrameworkAdapter;
};