import EventEmitter from 'node:events';
import Packet from './packet.js';
import Client from '../client.js';
import Socket from './socket.js';
export declare class PrematurePacketError extends Error {
    packet: Packet;
    constructor(packet: Packet);
}
export declare class LateTransportError extends Error {
    constructor();
}
/**
 * enforce EventEmitter typing
 */
interface IEmissions {
    end: () => void;
    error: (data: Error) => void;
}
export default class Service extends EventEmitter {
    private client;
    private serial;
    private localId;
    private remoteId;
    private socket;
    static PrematurePacketError: typeof PrematurePacketError;
    static LateTransportError: typeof LateTransportError;
    private opened;
    private ended;
    private transport?;
    private needAck;
    constructor(client: Client, serial: string, localId: number, remoteId: number, socket: Socket);
    on: <K extends keyof IEmissions>(event: K, listener: IEmissions[K]) => this;
    off: <K extends keyof IEmissions>(event: K, listener: IEmissions[K]) => this;
    once: <K extends keyof IEmissions>(event: K, listener: IEmissions[K]) => this;
    emit: <K extends keyof IEmissions>(event: K, ...args: Parameters<IEmissions[K]>) => boolean;
    end(): this;
    handle(packet: Packet): Promise<boolean>;
    private _handleOpenPacket;
    private _handleOkayPacket;
    private _handleWritePacket;
    private _handleClosePacket;
    private _tryPush;
    private _readChunk;
}
export {};
//# sourceMappingURL=service.d.ts.map