import type { HttpContractConfig } from "../contracts/index.js"; import type { HttpRequestLike, HttpResponseLike, MaybePromise, } from "./http.js"; export const responseFinalizerHook = Symbol( "@beignet/core/server/responseFinalizer", ); export type ResponseFinalizerResponseOwner = | "route" | "framework" | "transport"; export type ResponseFinalizerValidationState = | "validated" | "disabled" | "not-applicable"; export type ResponseFinalizerHookArgs = { req: HttpRequestLike; ctx?: Ctx; contract: HttpContractConfig; path?: unknown; query?: unknown; headers?: unknown; body?: unknown; response: HttpResponseLike; error?: unknown; native?: boolean; owner: ResponseFinalizerResponseOwner; responseValidation: ResponseFinalizerValidationState; }; export type ResponseFinalizerHook = ( args: ResponseFinalizerHookArgs, ) => MaybePromise; export type ResponseFinalizerServerHook = { [responseFinalizerHook]?: ResponseFinalizerHook; }; export function getResponseFinalizerHook( hook: unknown, ): ResponseFinalizerHook | undefined { return (hook as ResponseFinalizerServerHook)[responseFinalizerHook]; }