import { Logger } from '@n8n/backend-common'; import { GlobalConfig, TaskRunnersConfig } from '@n8n/config'; import type { BrokerMessage, RequesterMessage, RunnerMessage, TaskResultData } from '@n8n/task-runner'; import { TaskDeferredError } from '../../task-runners/task-broker/errors/task-deferred.error'; import { TaskRejectError } from '../../task-runners/task-broker/errors/task-reject.error'; import { TaskRunnerLifecycleEvents } from '../../task-runners/task-runner-lifecycle-events'; export interface TaskRunner { id: string; name?: string; taskTypes: string[]; lastSeen: Date; } export interface Task { id: string; runnerId: TaskRunner['id']; requesterId: string; taskType: string; timeout?: NodeJS.Timeout; } export interface TaskOffer { offerId: string; runnerId: TaskRunner['id']; taskType: string; validFor: number; validUntil: bigint; } export interface TaskRequest { requestId: string; requesterId: string; taskType: string; timeout?: NodeJS.Timeout; acceptInProgress?: boolean; } export type MessageCallback = (message: BrokerMessage.ToRunner.All) => Promise | void; export type RequesterMessageCallback = (message: BrokerMessage.ToRequester.All) => Promise | void; type RunnerAcceptCallback = () => void; type TaskRejectCallback = (reason: TaskRejectError | TaskDeferredError) => void; export declare class TaskBroker { private readonly logger; private readonly taskRunnersConfig; private readonly taskRunnerLifecycleEvents; private readonly globalConfig; private knownRunners; private requesters; private tasks; private isDraining; private runnerAcceptRejects; private requesterAcceptRejects; private pendingTaskOffers; private pendingTaskRequests; private mismatchWarned; constructor(logger: Logger, taskRunnersConfig: TaskRunnersConfig, taskRunnerLifecycleEvents: TaskRunnerLifecycleEvents, globalConfig: GlobalConfig); private createRequestTimeout; private handleRequestTimeout; expireTasks(): void; registerRunner(runner: TaskRunner, messageCallback: MessageCallback): void; deregisterRunner(runnerId: string, error: Error): void; registerRequester(requesterId: string, messageCallback: RequesterMessageCallback): void; deregisterRequester(requesterId: string): void; private messageRunner; private messageRequester; onRunnerMessage(runnerId: TaskRunner['id'], message: RunnerMessage.ToBroker.All): Promise; handleRpcRequest(taskId: Task['id'], callId: string, name: RunnerMessage.ToBroker.RPC['name'], params: unknown[]): Promise; handleRunnerAccept(taskId: Task['id']): void; handleRunnerReject(taskId: Task['id'], reason: string): void; handleRunnerDeferred(taskId: Task['id']): void; handleDataRequest(taskId: Task['id'], requestId: RunnerMessage.ToBroker.TaskDataRequest['requestId'], requestParams: RunnerMessage.ToBroker.TaskDataRequest['requestParams']): Promise; handleNodeTypesRequest(taskId: Task['id'], requestId: RunnerMessage.ToBroker.NodeTypesRequest['requestId'], requestParams: RunnerMessage.ToBroker.NodeTypesRequest['requestParams']): Promise; handleResponse(taskId: Task['id'], requestId: RunnerMessage.ToBroker.TaskDataRequest['requestId'], data: unknown): Promise; onRequesterMessage(requesterId: string, message: RequesterMessage.ToBroker.All): Promise; handleRequesterRpcResponse(taskId: string, callId: string, status: RequesterMessage.ToBroker.RPCResponse['status'], data: unknown): Promise; handleRequesterDataResponse(taskId: Task['id'], requestId: string, data: unknown): Promise; handleRequesterNodeTypesResponse(taskId: Task['id'], requestId: RequesterMessage.ToBroker.NodeTypesResponse['requestId'], nodeTypes: RequesterMessage.ToBroker.NodeTypesResponse['nodeTypes']): Promise; handleRequesterAccept(taskId: Task['id'], settings: RequesterMessage.ToBroker.TaskSettings['settings']): void; handleRequesterReject(taskId: Task['id'], reason: string): void; private cancelTask; private failTask; private getRunnerOrFailTask; sendTaskSettings(taskId: Task['id'], settings: unknown): Promise; private handleTaskTimeout; taskDoneHandler(taskId: Task['id'], data: TaskResultData): Promise; taskErrorHandler(taskId: Task['id'], error: unknown): Promise; acceptOffer(offer: TaskOffer, request: TaskRequest): Promise; settleTasks(): void; private warnOnTaskTypeMismatch; taskRequested(request: TaskRequest): void; taskOffered(offer: TaskOffer): void; startDraining(): void; hasActiveTasks(): boolean; stopDraining(): void; getTasks(): Map; getPendingTaskOffers(): TaskOffer[]; getPendingTaskRequests(): TaskRequest[]; getKnownRunners(): Map; getKnownRequesters(): Map; getRunnerAcceptRejects(): Map; setTasks(tasks: Record): void; setPendingTaskOffers(pendingTaskOffers: TaskOffer[]): void; setPendingTaskRequests(pendingTaskRequests: TaskRequest[]): void; setRunnerAcceptRejects(runnerAcceptRejects: Record): void; } export {};