@whook/whook
Version:
Build strong and efficient REST web services.
283 lines (282 loc) • 6.91 kB
TypeScript
import { type AppEnvVars } from 'application-services';
import { type WhookResponseSpec } from '../libs/router.js';
import { type WhookStringifiers } from './httpRouter.js';
import { type JSONSchema } from 'ya-json-schema-types';
export type WhookErrorDescriptor = {
code: string;
description?: string;
uri?: string;
help?: string;
status?: number;
transmittedParams?: number[];
};
export type WhookErrorsDescriptors = {
[errorCode: 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 type WhookErrorHandlerConfig = {
DEBUG_NODE_ENVS: string[];
ERRORS_DESCRIPTORS: WhookErrorsDescriptors;
DEFAULT_ERROR_CODE?: string;
};
export type WhookErrorHandlerDependencies = WhookErrorHandlerConfig & {
ENV: AppEnvVars;
STRINGIFIERS?: WhookStringifiers;
};
export interface WhookErrorHandler {
(transactionId: string, responseSpec: WhookResponseSpec, err: Error): Promise<WhookErrorResponse>;
}
export type 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?: unknown[];
error_debug_data: {
guruMeditation: string;
code?: string;
stack?: string;
params?: unknown[];
};
};
};
export declare const whookErrorSchema: JSONSchema;
declare const _default: import("knifecycle").ServiceInitializer<WhookErrorHandlerDependencies, WhookErrorHandler>;
export default _default;