import { MessagePort, Worker } from "node:worker_threads";
import { Thread } from "@chainsafe/threads";
import { Logger } from "@lodestar/logger";
import { Metrics } from "../metrics/metrics.js";
import { NetworkCoreWorkerMetrics } from "../network/core/metrics.js";
import { StrictEventEmitterSingleArg } from "./strictEvents.js";
export type WorkerBridgeEvent<EventData> = {
    type: string;
    event: keyof EventData;
    posted: [number, number];
    data: EventData[keyof EventData];
};
export declare enum EventDirection {
    workerToMain = 0,
    mainToWorker = 1,
    /** Event not emitted through worker boundary */
    none = 2
}
/**
 * Bridges events from worker to main thread
 * Each event can only have one direction:
 * - worker to main
 * - main to worker
 */
export declare function wireEventsOnWorkerThread<EventData>(mainEventName: string, events: StrictEventEmitterSingleArg<EventData>, parentPort: MessagePort, metrics: NetworkCoreWorkerMetrics | null, isWorkerToMain: {
    [K in keyof EventData]: EventDirection;
}): void;
export declare function wireEventsOnMainThread<EventData>(mainEventName: string, events: StrictEventEmitterSingleArg<EventData>, worker: Pick<Worker, "on" | "postMessage">, metrics: Metrics | null, isWorkerToMain: {
    [K in keyof EventData]: EventDirection;
}): void;
export declare function terminateWorkerThread({ worker, retryMs, retryCount, logger, }: {
    worker: Thread;
    retryMs: number;
    retryCount: number;
    logger?: Logger;
}): Promise<void>;
//# sourceMappingURL=workerEvents.d.ts.map