import { Device } from './device.js';
import type { Gateway, MapPortOptions, PortMapping, UPnPNATOptions } from '../index.js';
import type { Logger } from '@libp2p/logger';
import type { AbortOptions } from 'abort-error';
export interface RefreshableMapping {
    refreshTimeout?: ReturnType<typeof setTimeout>;
    ttl: number;
}
export declare abstract class InternetGatewayService<Mapping extends RefreshableMapping> implements Gateway {
    id: string;
    host: string;
    port: number;
    readonly family: 'IPv4' | 'IPv6';
    private gateway;
    protected readonly log: Logger;
    protected readonly mappings: Map<number, Mapping[]>;
    protected readonly options: UPnPNATOptions;
    constructor(gateway: Device, options?: UPnPNATOptions);
    protected getGateway(options?: AbortOptions): Promise<Device>;
    private setGateway;
    externalIp(options?: AbortOptions): Promise<string>;
    mapAll(localPort: number, options?: MapPortOptions): AsyncGenerator<PortMapping, void, unknown>;
    map(localPort: number, localHost: string, options?: MapPortOptions): Promise<PortMapping>;
    protected abstract mapPort(localPort: number, localHost: string, options?: MapPortOptions): Promise<number>;
    abstract unmap(localPort: number, options?: AbortOptions): Promise<void>;
    protected addMapping(localPort: number, mapping: Mapping): void;
    protected configureRefresh(localPort: number, mapping: Mapping, options?: MapPortOptions): void;
    protected abstract refreshPort(localPort: number, options?: AbortOptions): Promise<void>;
    stop(options?: AbortOptions): Promise<void>;
}
//# sourceMappingURL=internet-gateway-service.d.ts.map