import { callbackKey } from '../constant';
import type { BaseInteraction, SendOptions, TransportOptions } from '../interface';
import { Transport } from '../transport';
type Browser = typeof global.browser | typeof global.chrome;
type Port = browser.runtime.Port | chrome.runtime.Port;
interface SendResponse {
    _sendResponse?: (response?: SendOptions<SendResponse>) => void;
}
export interface BrowserExtensionsGenericTransportOptions extends Partial<TransportOptions<SendResponse>> {
    /**
     * browser extension API.
     */
    browser?: Browser;
}
export interface BrowserExtensionsMainTransportOptions extends Partial<TransportOptions<BrowserExtensionsMainPort>> {
    /**
     * browser extension API.
     */
    browser?: Browser;
}
export interface BrowserExtensionsClientTransportOptions extends Partial<TransportOptions> {
    /**
     * browser extension API.
     */
    browser?: Browser;
    /**
     * browser extension client port.
     */
    port?: Port;
}
interface BrowserExtensionsMainPort {
    _port?: Port;
}
type ClientCallback = () => void | Promise<void>;
type MainCallback = (clientId: string) => void | Promise<void>;
export declare abstract class BrowserExtensionsGenericTransport<T extends BaseInteraction = any> extends Transport<T> {
    private [callbackKey];
    constructor(_options?: BrowserExtensionsGenericTransportOptions);
}
export declare abstract class BrowserExtensionsMainTransport<T extends BaseInteraction = any> extends Transport<T> {
    protected ports: Map<string, Port>;
    private [callbackKey];
    constructor(_options?: BrowserExtensionsMainTransportOptions);
    private _onConnectCallback;
    onConnect(callback: MainCallback): () => void;
    private _onDisconnectCallback;
    onDisconnect(callback: MainCallback): () => void;
}
export declare abstract class BrowserExtensionsClientTransport<T extends BaseInteraction = any> extends Transport<T> {
    constructor(_options?: BrowserExtensionsClientTransportOptions);
    private _onConnectCallback;
    onConnect(callback: ClientCallback): () => void;
}
export declare const BrowserExtensionsTransport: {
    Main: typeof BrowserExtensionsMainTransport;
    Client: typeof BrowserExtensionsClientTransport;
};
export {};
//# sourceMappingURL=browserExtensionsTransport.d.ts.map