import { DTIAction, ActionParam, DTIError, INonceStore, DTISignHeaderNames } from '@napp/dti-core'; import { Request, Response, Router } from 'express'; import { z } from 'zod'; type TActionSchema = z.ZodType; type TAnyAction = DTIAction; type InferActionSchema = TSchema extends TActionSchema ? z.infer : void; type DTIServerAuth = [AuthContext] extends [undefined] ? { auth?: undefined; } : { auth: AuthContext; }; type DTIServerMeta = [MetaContext] extends [undefined] ? { meta?: undefined; } : { meta: MetaContext; }; type DTIAuthParam = { action: TAction; req: Request; res: Response; }; type DTIAuthVerify = (param: DTIAuthParam) => AuthContext | Promise; type DTIMetaParam = { req: Request; res: Response; } & DTIServerAuth; type DTIMetaResolve = (param: DTIMetaParam) => MetaContext | Promise; type DTIMetaOption = MetaContext | DTIMetaResolve; type DTISignSecretParam = { keyId: string; req: Request; res: Response; }; type DTISignSecretProvider = (param: DTISignSecretParam) => string | Promise; type DTIServerSignOptions = { getSecret: DTISignSecretProvider; nonceStore: INonceStore; toleranceMs?: number; headerNames?: Partial; }; type DTIErrorParseParam = { error: unknown; action: TAction; req: Request; res: Response; }; type DTIErrorParser = (param: DTIErrorParseParam) => DTIError | undefined | Promise; type DTIServerErrorOptions = { parse?: DTIErrorParser; }; type DTIExpressRouterOptions = { auth?: DTIAuthVerify; error?: DTIServerErrorOptions; meta?: DTIMetaOption; sign?: DTIServerSignOptions; }; type DTIFileBody = Buffer | Uint8Array | ArrayBuffer | Blob | string; type DTITextResponse = { type: "text"; body: string; contentType?: string; headers?: Record; status?: number; }; type DTITextOptions = { contentType?: string; headers?: Record; status?: number; }; type DTIFileResponse = { type: "file"; body: DTIFileBody; filename?: string; contentType?: string; headers?: Record; status?: number; }; type DTIFileOptions = { body: DTIFileBody; filename?: string; contentType?: string; headers?: Record; status?: number; }; type DTIServerParam = TAction extends DTIAction ? ActionParam, InferActionSchema, InferActionSchema> & { req: Request; res: Response; } & DTIServerAuth & DTIServerMeta : never; type DTIServerResult = TAction extends DTIAction ? ResponseType extends "text" ? string | DTITextResponse : ResponseType extends "file" ? DTIFileResponse : InferActionSchema : never; type DTIActionHandler = (param: DTIServerParam) => DTIServerResult | Promise>; declare function dtiText(body: string, options?: DTITextOptions): DTITextResponse; declare function dtiFile(response: DTIFileOptions): DTIFileResponse; declare class DTIExpressRouter { private readonly options; private readonly expressRouter; private readonly actionNames; private readonly routeKeys; private readonly signHeaderNames; private readonly signToleranceMs; constructor(options?: DTIExpressRouterOptions); action(action: TAction, handler: DTIActionHandler): this; router(): Router; private createRouteHandler; private parseParam; private verifySignature; private getRequiredSignHeader; private validateSignTimestamp; private resolveSignTolerance; private createNonceKey; private verifyAuth; private resolveMeta; private parseJsonResult; private parseTextResult; private parseFileResult; private validateResult; private registerRoute; private assertUniqueAction; private createRouteKey; private normalizeRoutePath; private createBodyParser; private sendTextResponse; private sendFileResponse; private setHeaders; private createSuccessResponse; private createFailureResponse; private handleError; private parseError; private getErrorStatus; private isTextResponse; private isFileResponse; private createFileBlob; private normalizeFileBody; private isBlob; private createContentDisposition; private createAsciiFilenameFallback; private isBodylessStatus; } declare function createDTIExpressRouter(options?: DTIExpressRouterOptions): DTIExpressRouter; export { type DTIActionHandler, type DTIAuthParam, type DTIAuthVerify, type DTIErrorParseParam, type DTIErrorParser, DTIExpressRouter, type DTIExpressRouterOptions, type DTIFileBody, type DTIFileOptions, type DTIFileResponse, type DTIMetaOption, type DTIMetaParam, type DTIMetaResolve, type DTIServerErrorOptions, type DTIServerParam, type DTIServerResult, type DTIServerSignOptions, type DTISignSecretParam, type DTISignSecretProvider, type DTITextOptions, type DTITextResponse, createDTIExpressRouter, dtiFile, dtiText };