import { callbackKey } from '../constant';
import { TransportOptions, TransferableWorker, BaseInteraction } from '../interface';
import { Transport } from '../transport';
interface SharedWorkerPort extends TransferableWorker {
    _port?: MessagePort;
}
export interface SharedWorkerClientTransportOptions extends Partial<TransportOptions<TransferableWorker>> {
    /**
     * Pass a shared worker instance for data transport.
     */
    worker: SharedWorker;
}
type ClientCallback = () => void | Promise<void>;
type WorkerCallback = (clientId: string) => void | Promise<void>;
export interface SharedWorkerInternalTransportOptions extends Partial<TransportOptions<SharedWorkerPort>> {
}
export declare abstract class SharedWorkerClientTransport<T extends BaseInteraction = any> extends Transport<T> {
    constructor(_options: SharedWorkerClientTransportOptions);
    private _onConnectCallback;
    onConnect(callback: ClientCallback): () => void;
}
export declare abstract class SharedWorkerInternalTransport<T extends BaseInteraction = any> extends Transport<T> {
    protected ports: Map<string, MessagePort>;
    protected tempPorts: Set<MessagePort>;
    private [callbackKey];
    constructor(_options?: SharedWorkerInternalTransportOptions);
    private _onConnectCallback;
    onConnect(callback: WorkerCallback): () => void;
    private _onDisconnectCallback;
    onDisconnect(callback: WorkerCallback): () => void;
}
export declare const SharedWorkerTransport: {
    Client: typeof SharedWorkerClientTransport;
    Worker: typeof SharedWorkerInternalTransport;
};
export {};
//# sourceMappingURL=sharedWorkerTransport.d.ts.map