import { WebSocket } from 'mock-socket';
import { OutgoingRequest, RequestSuccessResponse, RequestErrorResponse } from '../../types/api_internal.js';
import { EventEmitter } from 'events';
import { LoggerOptions } from '../../NodeSocket.js';
interface MockFunctionCreator {
    fn: (...args: any[]) => any;
}
type RequestCallback = (requestData: object) => void;
type DelayF = () => number;
export interface MockServerOptions {
    url: string;
    reportMissingListeners?: boolean;
    mockF: MockFunctionCreator;
    delayMs: number | DelayF;
    loggerOptions: LoggerOptions;
}
type MockRequestResponseDataObject<DataT extends object | undefined> = Omit<RequestSuccessResponse<DataT>, 'callback_id'> | Omit<RequestErrorResponse, 'callback_id'>;
type MockRequestResponseDataHandler<DataT extends object | undefined> = (request: OutgoingRequest, s: WebSocket) => MockRequestResponseDataObject<DataT>;
declare const getMockServer: (initialOptions?: Partial<MockServerOptions>) => {
    addRequestHandler: <DataT extends object | undefined>(method: string, path: string, data?: DataT | MockRequestResponseDataHandler<DataT>, subscriptionCallback?: RequestCallback) => () => EventEmitter<[never]>;
    addErrorHandler: (method: string, path: string, errorStr: string | null, errorCode: number, subscriptionCallback?: RequestCallback) => () => EventEmitter<[never]>;
    addSubscriptionHandler: (moduleName: string, listenerName: string, entityId?: string | number) => {
        fire: (data: object, entityId?: string | number) => void;
        remove: () => void;
        subscribeFn: any;
        unsubscribeFn: any;
        path: string;
    };
    addHookHandler: (moduleName: string, listenerName: string) => {
        fire: (data: object, entityId?: string | number) => void;
        remove: () => void;
        subscribeFn: any;
        unsubscribeFn: any;
        path: string;
        addResolver: (completionId: number) => {
            fire: (data: object) => void;
            remove: () => void;
            resolveFn: any;
            rejectFn: any;
        };
    };
    ignoreMissingHandler: (method: string, path: string) => () => EventEmitter<[never]>;
    stop: () => void;
    send: (data: object) => void;
    url: string;
};
export { getMockServer };
