import { KeelClient, type RequestFreshnessOptions } from "../client"; import type { Action, PermitRequest, PermitResponse, Resource, Subject } from "../types"; export interface MiddlewareResponseLike { status(code: number): MiddlewareResponseLike; json(payload: unknown): unknown; } export interface KeelMiddlewareOptions { baseUrl?: string; apiKey?: string; requestFreshness?: boolean | RequestFreshnessOptions; projectId: string; getSubject(req: TReq): Subject; getAction?(req: TReq): Action; getResource(req: TReq): Resource; getContext?(req: TReq): Record | null; idempotencyKey?(req: TReq): string; onDeny?(req: TReq, res: TRes, permit: PermitResponse): void; onChallenge?(req: TReq, res: TRes, permit: PermitResponse): void; } export interface MethodUrlLike { method?: string; originalUrl?: string; url?: string; } export interface MiddlewareFailure { httpStatus: number; body: { error: "keel_error"; message: string; status: number; }; } export declare function createKeelClientForMiddleware(options: { baseUrl?: string; apiKey?: string; requestFreshness?: boolean | RequestFreshnessOptions; }): KeelClient; export declare function buildPermitRequest(req: TReq, options: KeelMiddlewareOptions): PermitRequest; export declare function enforceDecision(req: TReq, res: TRes, permit: PermitResponse, options: Pick, "onDeny" | "onChallenge">, responseRequestId?: string): "allow" | "handled"; export declare function toMiddlewareFailure(error: unknown): MiddlewareFailure;