import type { INodeTypeBaseDescription } from 'n8n-workflow';
import type { NeededNodeType, AVAILABLE_RPC_METHODS, TaskDataRequestParams, TaskResultData } from './runner-types';
export declare namespace BrokerMessage {
    namespace ToRunner {
        interface InfoRequest {
            type: 'broker:inforequest';
        }
        interface RunnerRegistered {
            type: 'broker:runnerregistered';
        }
        interface TaskOfferAccept {
            type: 'broker:taskofferaccept';
            taskId: string;
            offerId: string;
        }
        interface TaskCancel {
            type: 'broker:taskcancel';
            taskId: string;
            reason: string;
        }
        interface TaskSettings {
            type: 'broker:tasksettings';
            taskId: string;
            settings: unknown;
        }
        interface RPCResponse {
            type: 'broker:rpcresponse';
            callId: string;
            taskId: string;
            status: 'success' | 'error';
            data: unknown;
        }
        interface TaskDataResponse {
            type: 'broker:taskdataresponse';
            taskId: string;
            requestId: string;
            data: unknown;
        }
        interface NodeTypes {
            type: 'broker:nodetypes';
            taskId: string;
            requestId: string;
            nodeTypes: INodeTypeBaseDescription[];
        }
        interface Drain {
            type: 'broker:drain';
        }
        type All = InfoRequest | TaskOfferAccept | TaskCancel | TaskSettings | RunnerRegistered | RPCResponse | TaskDataResponse | NodeTypes | Drain;
    }
    namespace ToRequester {
        interface TaskReady {
            type: 'broker:taskready';
            requestId: string;
            taskId: string;
        }
        interface TaskDone {
            type: 'broker:taskdone';
            taskId: string;
            data: TaskResultData;
        }
        interface TaskError {
            type: 'broker:taskerror';
            taskId: string;
            error: unknown;
        }
        interface RequestExpired {
            type: 'broker:requestexpired';
            requestId: string;
            reason: 'timeout' | 'draining';
        }
        interface TaskDataRequest {
            type: 'broker:taskdatarequest';
            taskId: string;
            requestId: string;
            requestParams: TaskDataRequestParams;
        }
        interface NodeTypesRequest {
            type: 'broker:nodetypesrequest';
            taskId: string;
            requestId: string;
            requestParams: NeededNodeType[];
        }
        interface RPC {
            type: 'broker:rpc';
            callId: string;
            taskId: string;
            name: (typeof AVAILABLE_RPC_METHODS)[number];
            params: unknown[];
        }
        type All = TaskReady | TaskDone | TaskError | RequestExpired | TaskDataRequest | NodeTypesRequest | RPC;
    }
}
export declare namespace RequesterMessage {
    namespace ToBroker {
        interface TaskSettings {
            type: 'requester:tasksettings';
            taskId: string;
            settings: unknown;
        }
        interface TaskCancel {
            type: 'requester:taskcancel';
            taskId: string;
            reason: string;
        }
        interface TaskDataResponse {
            type: 'requester:taskdataresponse';
            taskId: string;
            requestId: string;
            data: unknown;
        }
        interface NodeTypesResponse {
            type: 'requester:nodetypesresponse';
            taskId: string;
            requestId: string;
            nodeTypes: INodeTypeBaseDescription[];
        }
        interface RPCResponse {
            type: 'requester:rpcresponse';
            taskId: string;
            callId: string;
            status: 'success' | 'error';
            data: unknown;
        }
        interface TaskRequest {
            type: 'requester:taskrequest';
            requestId: string;
            taskType: string;
        }
        type All = TaskSettings | TaskCancel | RPCResponse | TaskDataResponse | NodeTypesResponse | TaskRequest;
    }
}
export declare namespace RunnerMessage {
    namespace ToBroker {
        interface Info {
            type: 'runner:info';
            name: string;
            types: string[];
        }
        interface TaskAccepted {
            type: 'runner:taskaccepted';
            taskId: string;
        }
        interface TaskRejected {
            type: 'runner:taskrejected';
            taskId: string;
            reason: string;
        }
        interface TaskDeferred {
            type: 'runner:taskdeferred';
            taskId: string;
        }
        interface TaskDone {
            type: 'runner:taskdone';
            taskId: string;
            data: TaskResultData;
        }
        interface TaskError {
            type: 'runner:taskerror';
            taskId: string;
            error: unknown;
        }
        interface TaskOffer {
            type: 'runner:taskoffer';
            offerId: string;
            taskType: string;
            validFor: number;
        }
        interface TaskDataRequest {
            type: 'runner:taskdatarequest';
            taskId: string;
            requestId: string;
            requestParams: TaskDataRequestParams;
        }
        interface NodeTypesRequest {
            type: 'runner:nodetypesrequest';
            taskId: string;
            requestId: string;
            requestParams: NeededNodeType[];
        }
        interface RPC {
            type: 'runner:rpc';
            callId: string;
            taskId: string;
            name: (typeof AVAILABLE_RPC_METHODS)[number];
            params: unknown[];
        }
        type All = Info | TaskDone | TaskError | TaskAccepted | TaskRejected | TaskDeferred | TaskOffer | RPC | TaskDataRequest | NodeTypesRequest;
    }
}
