import { Request, Response, Router, RouterOptions } from 'express'; import { Observable } from 'rxjs'; export declare class ExpressApiRouterError extends Error { constructor(message: string); } export declare class ApiError extends Error { statusCode: number; constructor(data: string, statusCode: number); } export declare const ApiNext: unique symbol; declare type SimpleApiResult = string | boolean | number | object | { [key: string]: string; } | typeof ApiNext | undefined; export declare class ApiResponse { apiResult: SimpleApiResult; code: number; constructor(apiResult: SimpleApiResult, code?: number); } export declare type ApiResult = SimpleApiResult | ApiResponse; export declare type AsyncApiResult = Observable | Promise; export declare type ErrorFormatter = (this: ExpressApiRouter, err: Error, req: Request, res: Response) => AsyncApiResult | ApiResult; export declare type SuccessFormatter = (this: ExpressApiRouter, data: ApiResult, req: Request, res: Response) => AsyncApiResult | ApiResult; export interface ApiRouterOptions extends RouterOptions { errorFormatter?: ErrorFormatter; successFormatter?: SuccessFormatter; silenceExpressApiRouterError?: boolean; internalServerError?: string; } export interface ExpressApiRouter extends Router { errorFormatter: ErrorFormatter; successFormatter: SuccessFormatter; setErrorFormatter(formatter: ErrorFormatter): void; setSuccessFormatter(formatter: SuccessFormatter): void; } export declare function ExpressApiRouter(options?: ApiRouterOptions): ExpressApiRouter; export {};