import { type WhookStringifiers } from '../libs/constants.js';
import { type AppEnvVars } from 'application-services';
import { type WhookResponseBodySpec } from '../libs/body.js';
import { type JSONSchema } from 'ya-json-schema-types';
import { JsonValue } from 'type-fest';
export interface WhookErrorDescriptor {
    code: string;
    description?: string;
    uri?: string;
    help?: string;
    status?: number;
    transmittedParams?: number[];
}
export type WhookErrorsDescriptors = Record<string, WhookErrorDescriptor>;
export declare const DEFAULT_ERROR_URI = "https://stackoverflow.com/search?q=%5Bwhook%5D+$code";
export declare const DEFAULT_HELP_URI = "https://stackoverflow.com/questions/ask?tags=whook&title=How+to+debug+$code+whook+error+code";
export declare const DEFAULT_DEFAULT_ERROR_CODE = "E_UNEXPECTED";
export declare const DEFAULT_ERRORS_DESCRIPTORS: {
    E_UNEXPECTED: {
        code: string;
        description: string;
        status: number;
        help: string;
    };
    E_TRANSACTION_TIMEOUT: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_STRINGIFYER_LACK: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNDECLARED_PATH_PARAMETER: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_PATH: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_NO_OPERATION_ID: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_NO_HANDLER: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_OPEN_API: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNDECLARED_SECURITY_SCHEME: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_BODY_SCHEMA: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNSUPPORTED_HTTP_SCHEME: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNSUPPORTED_API_KEY_SOURCE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_PARAMETER_NAME: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNSUPPORTED_PARAMETER_DEFINITION: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_PARAMETER_SCHEMA: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_NO_RESPONSE_PROMISE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_NO_RESPONSE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_NO_RESPONSE_STATUS: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_NON_NUMERIC_STATUS: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_NOT_FOUND: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_REQUEST_CONTENT_TOO_LARGE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_BODY: {
        code: string;
        description: string;
        uri: string;
        help: string;
        transmittedParams: number[];
    };
    E_BAD_BODY_LENGTH: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNSUPPORTED_CHARSET: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_CONTENT_TYPE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_REQUEST_FAILURE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNSUPPORTED_MEDIA_TYPE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNACCEPTABLE_CHARSET: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_UNACCEPTABLE_MEDIA_TYPE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_REQUIRED_REQUEST_BODY: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_REQUEST_BODY: {
        code: string;
        description: string;
        uri: string;
        help: string;
        transmittedParams: number[];
    };
    E_NO_REQUEST_BODY: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_REQUIRED_PARAMETER: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_BAD_PARAMETER: {
        code: string;
        description: string;
        uri: string;
        help: string;
        transmittedParams: number[];
    };
    E_NON_REENTRANT_NUMBER: {
        code: string;
        description: string;
        uri: string;
        help: string;
        transmittedParams: number[];
    };
    E_BAD_BOOLEAN: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
    E_TRANSACTION_ID_NOT_UNIQUE: {
        code: string;
        description: string;
        uri: string;
        help: string;
    };
};
export interface WhookErrorHandlerConfig {
    DEBUG_NODE_ENVS: string[];
    ERRORS_DESCRIPTORS: WhookErrorsDescriptors;
    DEFAULT_ERROR_CODE?: string;
}
export type WhookErrorHandlerDependencies = WhookErrorHandlerConfig & {
    ENV: AppEnvVars;
    STRINGIFIERS?: WhookStringifiers;
};
export type WhookErrorHandler = (transactionId: string, responseSpec: WhookResponseBodySpec, err: Error) => Promise<WhookErrorResponse>;
export interface WhookErrorResponse {
    status: number;
    headers: {
        'cache-control': 'private';
        'content-type': string;
        [name: string]: string | string[];
    };
    body: {
        error: string;
        error_description?: string;
        error_uri?: string;
        error_help_uri?: string;
        error_params?: JsonValue[];
        error_debug_data: {
            guruMeditation: string;
            code?: string;
            stack?: string;
            params?: JsonValue[];
        };
    };
}
export declare const whookErrorSchema: JSONSchema;
declare const _default: import("knifecycle").ServiceInitializer<WhookErrorHandlerDependencies, WhookErrorHandler>;
export default _default;
