import { EventEmitter } from 'node:events'; import { WebSocket } from 'ws'; import type { BaseRunnerConfig } from './config/base-runner-config'; import type { BrokerMessage, RunnerMessage } from './message-types'; import { TaskRunnerNodeTypes } from './node-types'; import type { TaskResultData } from './runner-types'; import { TaskState } from './task-state'; export interface TaskOffer { offerId: string; validUntil: bigint; } interface DataRequest { taskId: string; requestId: string; resolve: (data: unknown) => void; reject: (error: unknown) => void; } interface NodeTypesRequest { taskId: string; requestId: string; resolve: (data: unknown) => void; reject: (error: unknown) => void; } interface RPCCall { callId: string; resolve: (data: unknown) => void; reject: (error: unknown) => void; } export declare const noOp: () => void; export interface TaskParams { taskId: string; settings: T; } export interface TaskRunnerOpts extends BaseRunnerConfig { taskType: string; name?: string; } export declare abstract class TaskRunner extends EventEmitter { id: string; ws: WebSocket; canSendOffers: boolean; runningTasks: Map; offerInterval: NodeJS.Timeout | undefined; openOffers: Map; dataRequests: Map; nodeTypesRequests: Map; rpcCalls: Map; nodeTypes: TaskRunnerNodeTypes; taskType: string; maxConcurrency: number; name: string; private isShuttingDown; private idleTimer; protected readonly taskTimeout: number; private readonly idleTimeout; constructor(opts: TaskRunnerOpts); private resetIdleTimer; private receiveMessage; private onConnectionClose; private stopTaskOffers; private startTaskOffers; deleteStaleOffers(): void; sendOffers(): void; send(message: RunnerMessage.ToBroker.All): void; onMessage(message: BrokerMessage.ToRunner.All): void; processDataResponse(requestId: string, data: unknown): void; processNodeTypesResponse(requestId: string, nodeTypes: unknown): void; hasOpenTaskSlots(): boolean; offerAccepted(offerId: string, taskId: string): void; taskCancelled(taskId: string, reason: string): Promise; taskTimedOut(taskId: string): Promise; receivedSettings(taskId: string, settings: unknown): Promise; executeTask(_taskParams: TaskParams, _signal: AbortSignal): Promise; requestNodeTypes(taskId: TaskState['taskId'], requestParams: RunnerMessage.ToBroker.NodeTypesRequest['requestParams']): Promise; requestData(taskId: TaskState['taskId'], requestParams: RunnerMessage.ToBroker.TaskDataRequest['requestParams']): Promise; makeRpcCall(taskId: string, name: RunnerMessage.ToBroker.RPC['name'], params: unknown[]): Promise; handleRpcResponse(callId: string, status: BrokerMessage.ToRunner.RPCResponse['status'], data: unknown): void; stop(): Promise; clearIdleTimer(): void; private closeConnection; private waitUntilAllTasksAreDone; private taskExecutionSucceeded; private taskExecutionFailed; private cancelTaskRequests; private finishTask; } export {};