import { subscribe as defaultSubscribe, validateSchema as defaultValidateSchema, validate as defaultValidate, parse as defaultParse, GraphQLSchema, ExecutionResult, ExecutionArgs, DocumentNode, ValidationRule } from "graphql";
import type { Server as IOServer, Socket as IOSocket } from "socket.io";
export declare type PromiseOrPlain<T> = T | Promise<T>;
declare type DocumentSourceString = string;
declare type MaybeDocumentNode = Record<string, unknown> | DocumentNode;
export declare type ExecuteFunction = (args: ExecutionArgs) => PromiseOrPlain<AsyncIterableIterator<ExecutionResult> | ExecutionResult>;
export declare type GetParameterFunctionParameter = {
    socket: IOSocket;
    graphQLPayload: {
        source: DocumentSourceString | MaybeDocumentNode;
        variableValues: {
            [key: string]: any;
        } | null;
        operationName: string | null;
        /** Additional extensions that can be used for authentication tokens etc. */
        extensions: {
            [key: string]: any;
        } | null;
    };
};
export declare type GetParameterFunction = (parameter: GetParameterFunctionParameter) => PromiseOrPlain<{
    graphQLExecutionParameter: {
        schema: GraphQLSchema;
        contextValue?: unknown;
        rootValue?: unknown;
        source?: DocumentSourceString | DocumentNode;
        variableValues?: {
            [key: string]: any;
        } | null;
        operationName?: string;
    };
    execute?: ExecuteFunction;
    subscribe?: typeof defaultSubscribe;
    parse?: typeof defaultParse;
    validateSchema?: typeof defaultValidateSchema;
    validate?: typeof defaultValidate;
    validationRules?: ValidationRule[];
}>;
export declare type DecodeErrorHandler = (error: Error) => void;
export declare type RegisterSocketIOGraphQLServerParameter = {
    socketServer: IOServer;
    getParameter: GetParameterFunction;
    onMessageDecodeError?: DecodeErrorHandler;
    isLazy?: boolean;
};
export declare type UnsubscribeHandler = () => void;
export declare type SocketIOGraphQLServer = {
    registerSocket: (socket: IOSocket) => UnsubscribeHandler;
    disposeSocket: (socket: IOSocket) => void;
    destroy: () => void;
};
export declare const registerSocketIOGraphQLServer: ({ socketServer, getParameter, onMessageDecodeError, isLazy, }: RegisterSocketIOGraphQLServerParameter) => SocketIOGraphQLServer;
export {};
