import { Observable, BehaviorSubject, ReplaySubject } from "rxjs";
import { BluetoothTransport } from "../BluetoothTransport";
import { TextCodec } from "../utils/textCodec";
import { ActionOptions, SubscribeOptions } from "../types";
import { TRANSPORT_TYPE, BLUETOOTH_CONNECTION } from "../types";
import { BleManager } from "./types/BleManagerTypes";
import { Peripheral } from "./types/BleManagerTypes";
import { NativeEventEmitter } from "./types/ReactNativeTypes";
import { PlatformOSType } from "./types/ReactNativeTypes";
import { DeviceInfo } from "../../../types/deviceInfo";
declare type Characteristic = {
    characteristicUUID: string;
    serviceUUID: string;
    peripheralId: string;
};
declare type CharacteristicsByName = {
    [name: string]: Characteristic;
};
declare type Options = {
    BleManager: BleManager;
    bleManagerEmitter: NativeEventEmitter;
    platform: PlatformOSType;
    autoConnect?: boolean;
};
declare type BleManagerEvents = {
    stopScan$: Observable<void>;
    discoverPeripheral$: Observable<Peripheral>;
    connectPeripheral$: Observable<void>;
    disconnectPeripheral$: Observable<void>;
    didUpdateValueForCharacteristic$: Observable<any>;
    didUpdateState$: Observable<any>;
};
export declare class ReactNativeTransport implements BluetoothTransport {
    type: TRANSPORT_TYPE;
    textCodec: TextCodec;
    options: Options;
    BleManager: BleManager;
    bleManagerEmitter: NativeEventEmitter;
    platform: PlatformOSType;
    bleEvents: BleManagerEvents;
    device: Peripheral;
    characteristicsByName: CharacteristicsByName;
    connection$: BehaviorSubject<BLUETOOTH_CONNECTION>;
    pendingActions$: BehaviorSubject<any[]>;
    logs$: ReplaySubject<string>;
    onDisconnected$: Observable<void>;
    connectionStream$: Observable<BLUETOOTH_CONNECTION>;
    _isAutoConnectEnabled$: ReplaySubject<boolean>;
    constructor(options: Options);
    addLog(log: string): void;
    isConnected(): boolean;
    _autoConnect(selectedDevice$: Observable<DeviceInfo>): Observable<void>;
    enableAutoConnect(autoConnect: boolean): void;
    connection(): Observable<BLUETOOTH_CONNECTION>;
    _fromEvent(eventName: string): Observable<any>;
    scan(options?: {
        seconds?: number;
        once?: boolean;
        skipConnectionUpdate?: boolean;
    }): Observable<Peripheral[]>;
    connect(peripheral: Peripheral): Promise<void>;
    disconnect(): Promise<void>;
    getCharacteristicByName(characteristicName: string): Characteristic;
    subscribeToCharacteristic({ characteristicName, manageNotifications, skipJSONDecoding }: SubscribeOptions): Observable<any>;
    readCharacteristic(characteristicName: string, parse?: boolean): Promise<any>;
    writeCharacteristic(characteristicName: string, data: string): Promise<void>;
    _addPendingAction(actionId: number): void;
    _removePendingAction(actionId: number): void;
    _autoToggleActionNotifications(): Observable<any>;
    dispatchAction({ characteristicName, action }: ActionOptions): Promise<any>;
}
export {};
