import EventEmitter from 'eventemitter3';
import type { Response } from 'express';
import type { Context } from 'hono';
import type { Socket } from 'socket.io';
import type { WebSocket } from 'ws';
import type { ZodTypeAny } from 'zod';
export declare const PROTOCOLs: {
    /** express.js */
    readonly express: "express";
    /** honojs */
    readonly hono: "hono";
    readonly 'socket.io': "io";
    /** @deprecated not recommend */
    readonly ws: "ws";
};
export type Protocol = keyof typeof PROTOCOLs;
export declare const PROTOCOL_KEYs: string[];
type ResponseSocket = Response | Context | Socket | WebSocket;
interface BasicAPIConfig {
    method: string;
    path: string;
    type: string;
    schema?: ZodTypeAny;
}
export interface ObjectLiteral {
    [key: string]: any;
}
export interface ProtocolType {
    request: string;
    response: string;
}
export declare function getRouteEventName(config: Pick<BasicAPIConfig, 'type' | 'method' | 'path'> & {
    protocol: Protocol;
}): string;
declare function sendFactory(protocol: Protocol, response: ResponseSocket, protocolType: ProtocolType, callback?: (result: any) => void): (payload: {
    _id: string;
    status?: number;
    result?: unknown;
    callback?: Function;
}) => void;
export declare function genRouteFactory<APIConfig, RequestInfo>(onErrorHandler: (error: unknown, params: {
    protocol: Protocol;
    msgId: string;
    send: ReturnType<typeof sendFactory>;
    config: APIConfig;
    payload?: any;
}) => void, protocolType: ProtocolType, middlewares?: ((protocol: Protocol, apiConfig: APIConfig & BasicAPIConfig, reqInfo: RequestInfo) => Promise<any>)[], 
/** API types */
types?: string[]): {
    routeBus: EventEmitter<string | symbol, any>;
    genRoute: <ReqData, ResData>(apiConfig: APIConfig & BasicAPIConfig, cb: (data: ReqData, reqInfo: Readonly<RequestInfo>, resOrSocket?: ResponseSocket) => Promise<ResData>) => void;
    getRouteEventName: typeof getRouteEventName;
};
export {};
