/// <reference types="node" />
import { AsyncSubject, Subject } from 'rxjs';
import EventEmitter from 'stream';
import { Sim800Command } from './classes/sim800-command';
import { Sim800Sms } from './classes/sim800-sms';
import { Sim800DeliveryEvent, Sim800DeliveryStatusDetail } from './interfaces/sim-800-delivery.interface';
import { Sim800ClientConfig } from './interfaces/sim800-client-config.interface';
import { Sim800ClientState } from './interfaces/sim800-client-state.enum';
import { Sim800EventEmitter } from './interfaces/sim800-event-emitter';
import { Sim800IncomingSms } from './interfaces/sim800-incoming-sms.interface';
import { Sim800MultipartSms } from './interfaces/sim800-multipart-sms.interface';
import { Sim800OutgoingSms, Sim800OutgoingSmsPart, Sim800OutgoingSmsStatus, Sim800OutgoingSmsStreamEvent } from './interfaces/sim800-outgoing-sms.interface';
import { NetworkStatus } from './interfaces';
export declare class Sim800Client implements Sim800EventEmitter {
    eventEmitter: EventEmitter;
    private nextJob$;
    private buffer;
    private port;
    private baudRate;
    private delimiter;
    private logger;
    private serial;
    private parser;
    private noInit;
    private pin?;
    private cnmi;
    ready$: AsyncSubject<boolean>;
    network$: AsyncSubject<boolean>;
    smsBusy$: AsyncSubject<boolean>;
    stream$: Subject<string>;
    inputStream$: Subject<string>;
    smsStream$: Subject<Sim800OutgoingSmsStreamEvent>;
    deliveryReportStream$: Subject<Sim800DeliveryEvent>;
    smsQueuePing$: Subject<void>;
    state: Sim800ClientState;
    incomingSms: Sim800MultipartSms[];
    preventWipe: boolean;
    outboxSpooler: Sim800OutgoingSms[];
    receivingDeliveryReport: boolean;
    smsQueue: Sim800Sms[];
    constructor({ port, baudRate, delimiter, logger, pin, preventWipe, noInit }: Sim800ClientConfig);
    private init;
    awaitDevice(): Promise<boolean>;
    isNetworkReady(): Promise<boolean>;
    send(command: Sim800Command, options?: {
        raw?: boolean;
    }): Promise<string | string[] | null>;
    sendSms(number: string, text: string, deliveryReport?: boolean): Promise<number[] | undefined>;
    private handlePinState;
    /**
     *
     * @deprecated will be removed from the next minor release
     */
    checkNetwork(network$: AsyncSubject<boolean>): void;
    monitorNetworkUntilReady(network$: AsyncSubject<boolean>): void;
    getNetworkStatus(): Promise<NetworkStatus>;
    private setNetworkReady;
    private setNetworkNotReady;
    private handleNetworkResult;
    private handleInputData;
    reset(emptyBuffers?: boolean, gracePeriodMs?: number): void;
    deleteAllStoredSms(): Promise<void>;
    on(event: 'deviceReady', listener: () => void): import('events');
    on(event: 'networkReady', listener: () => void): import('events');
    on(event: 'input', listener: (data: string) => void): import('events');
    on(event: 'incoming-sms', listener: (sms: Sim800IncomingSms) => void): EventEmitter;
    on(event: 'sms-sent', listener: (compositeId: number[]) => void): EventEmitter;
    on(event: 'delivery-report', listener: (compositeId: number[], status: Sim800OutgoingSmsStatus.Delivered, detail?: Omit<Sim800OutgoingSmsPart, 'belongsTo'>[]) => void): EventEmitter;
    on(event: 'delivery-report', listener: (compositeId: number[], status: Sim800OutgoingSmsStatus, detail?: Sim800DeliveryStatusDetail) => void): EventEmitter;
    on(event: 'error', listener: (error: Error) => void): EventEmitter;
}
