diff --git a/src/convenience/frameworks.ts b/src/convenience/frameworks.ts index 3d362e21..abfc6d8b 100644 --- a/src/convenience/frameworks.ts +++ b/src/convenience/frameworks.ts @@ -80,20 +80,18 @@ export type LambdaAsyncAdapter = ( _context: unknown, ) => ReqResHandler; -export type AzureAdapter = (request: { - body?: unknown; -}, context: { +export type AzureAdapter = (context: { res?: { - status: number; - body: string; - headers?: Record; - set?: (key: string, value: string) => void; - send?: { - (body: unknown): void; - (status: number, body: unknown): void; - }; + // deno-lint-ignore no-explicit-any + [key: string]: any; }; -}) => ReqResHandler; +}, 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; @@ -273,8 +271,8 @@ const awsLambdaAsync: LambdaAsyncAdapter = (event, _context) => { }; }; -/** Azure Functions */ -const azure: AzureAdapter = (request, context) => ({ +/** Azure Functions v3 and v4 */ +const azure: AzureAdapter = (context, request) => ({ update: Promise.resolve(request.body as Update), header: context.res?.headers?.[SECRET_HEADER], end: () => (context.res = { @@ -289,6 +287,23 @@ const azure: AzureAdapter = (request, context) => ({ context.res?.send?.(401, WRONG_TOKEN_ERROR); }, }); +const azureV4: AzureAdapterV4 = (request) => { + type Res = NonNullable< + Awaited["handlerReturn"]> + >; + let resolveResponse: (response: Res) => void; + return { + update: Promise.resolve(request.json()) as Promise, + header: request.headers.get(SECRET_HEADER) || undefined, + end: () => resolveResponse({ status: 204 }), + respond: (json) => resolveResponse({ jsonBody: json }), + unauthorized: () => + resolveResponse({ status: 401, body: WRONG_TOKEN_ERROR }), + handlerReturn: new Promise((resolve) => { + resolveResponse = resolve; + }), + }; +}; /** Bun.serve */ const bun: BunAdapter = (request) => { @@ -544,6 +559,7 @@ export const adapters = { "aws-lambda": awsLambda, "aws-lambda-async": awsLambdaAsync, azure, + "azure-v4": azureV4, bun, cloudflare, "cloudflare-mod": cloudflareModule,