import type { TurboModule } from 'react-native' import { TurboModuleRegistry } from 'react-native' type DeviceId = string type Identifier = number type UUID = string type Base64 = string type TransactionId = string type ConnectionPriority = number type CharacteristicSubscriptionType = 'notification' | 'indication' type NativeState = 'Unknown' | 'Resetting' | 'Unsupported' | 'Unauthorized' | 'PoweredOff' | 'PoweredOn' type NativeLogLevel = 'None' | 'Verbose' | 'Debug' | 'Info' | 'Warning' | 'Error' type ScanOptions = { allowDuplicates?: boolean scanMode?: number callbackType?: number legacyScan?: boolean } type ConnectionOptions = { autoConnect?: boolean requestMTU?: number refreshGatt?: 'OnConnected' timeout?: number } type BackgroundModeOptions = { notificationTitle?: string notificationText?: string } type NativeDevice = { id: DeviceId name: string | null rssi: number | null mtu: number manufacturerData: Base64 | null rawScanRecord: Base64 serviceData: { [uuid: string]: Base64 } | null serviceUUIDs: Array | null localName: string | null txPowerLevel: number | null solicitedServiceUUIDs: Array | null isConnectable: boolean | null overflowServiceUUIDs: Array | null } type NativeService = { id: Identifier uuid: UUID deviceID: DeviceId isPrimary: boolean } type NativeCharacteristic = { id: Identifier uuid: UUID serviceID: Identifier serviceUUID: UUID deviceID: DeviceId isReadable: boolean isWritableWithResponse: boolean isWritableWithoutResponse: boolean isNotifiable: boolean isNotifying: boolean isIndicatable: boolean value: Base64 | null } type NativeDescriptor = { id: Identifier uuid: UUID characteristicID: Identifier characteristicUUID: UUID serviceID: Identifier serviceUUID: UUID deviceID: DeviceId value: Base64 | null } export type NativeBlePlxConstants = { ScanEvent: string ReadEvent: string StateChangeEvent: string RestoreStateEvent: string DisconnectionEvent: string } export type RestorationStatus = { blePlxRestorationAdapterFound: boolean bleRestorationRegistryFound: boolean hasRegisterSelector: boolean initializeWasCalled: boolean } export interface Spec extends TurboModule { getConstants(): NativeBlePlxConstants addListener(eventType: string): void removeListeners(count: number): void createClient(restoreIdentifierKey: string | null): void checkRestorationStatus(): Promise destroyClient(): Promise state(): Promise startDeviceScan(filteredUUIDs: Array | null, options: ScanOptions | null): Promise stopDeviceScan(): Promise requestConnectionPriorityForDevice( deviceIdentifier: DeviceId, connectionPriority: ConnectionPriority, transactionId: TransactionId ): Promise readRSSIForDevice(deviceIdentifier: DeviceId, transactionId: TransactionId): Promise requestMTUForDevice(deviceIdentifier: DeviceId, mtu: number, transactionId: TransactionId): Promise devices(deviceIdentifiers: Array): Promise> connectedDevices(serviceUUIDs: Array): Promise> connectToDevice(deviceIdentifier: DeviceId, options: ConnectionOptions | null): Promise cancelDeviceConnection(deviceIdentifier: DeviceId): Promise isDeviceConnected(deviceIdentifier: DeviceId): Promise discoverAllServicesAndCharacteristicsForDevice( deviceIdentifier: DeviceId, transactionId: TransactionId ): Promise servicesForDevice(deviceIdentifier: DeviceId): Promise> characteristicsForDevice(deviceIdentifier: DeviceId, serviceUUID: UUID): Promise> characteristicsForService(serviceIdentifier: Identifier): Promise> descriptorsForDevice( deviceIdentifier: DeviceId, serviceUUID: UUID, characteristicUUID: UUID ): Promise> descriptorsForService(serviceIdentifier: Identifier, characteristicUUID: UUID): Promise> descriptorsForCharacteristic(characteristicIdentifier: Identifier): Promise> readCharacteristicForDevice( deviceIdentifier: DeviceId, serviceUUID: UUID, characteristicUUID: UUID, transactionId: TransactionId ): Promise readCharacteristicForService( serviceIdentifier: Identifier, characteristicUUID: UUID, transactionId: TransactionId ): Promise readCharacteristic(characteristicIdentifier: Identifier, transactionId: TransactionId): Promise writeCharacteristicForDevice( deviceIdentifier: DeviceId, serviceUUID: UUID, characteristicUUID: UUID, valueBase64: Base64, withResponse: boolean, transactionId: TransactionId ): Promise writeCharacteristicForService( serviceIdentifier: Identifier, characteristicUUID: UUID, valueBase64: Base64, withResponse: boolean, transactionId: TransactionId ): Promise writeCharacteristic( characteristicIdentifier: Identifier, valueBase64: Base64, withResponse: boolean, transactionId: TransactionId ): Promise monitorCharacteristicForDevice( deviceIdentifier: DeviceId, serviceUUID: UUID, characteristicUUID: UUID, transactionId: TransactionId, subscriptionType: CharacteristicSubscriptionType | null ): Promise monitorCharacteristicForService( serviceIdentifier: Identifier, characteristicUUID: UUID, transactionId: TransactionId, subscriptionType: CharacteristicSubscriptionType | null ): Promise monitorCharacteristic( characteristicIdentifier: Identifier, transactionId: TransactionId, subscriptionType: CharacteristicSubscriptionType | null ): Promise readDescriptorForDevice( deviceIdentifier: DeviceId, serviceUUID: UUID, characteristicUUID: UUID, descriptorUUID: UUID, transactionId: TransactionId ): Promise readDescriptorForService( serviceIdentifier: Identifier, characteristicUUID: UUID, descriptorUUID: UUID, transactionId: TransactionId ): Promise readDescriptorForCharacteristic( characteristicIdentifier: Identifier, descriptorUUID: UUID, transactionId: TransactionId ): Promise readDescriptor(descriptorIdentifier: Identifier, transactionId: TransactionId): Promise writeDescriptorForDevice( deviceIdentifier: DeviceId, serviceUUID: UUID, characteristicUUID: UUID, descriptorUUID: UUID, valueBase64: Base64, transactionId: TransactionId ): Promise writeDescriptorForService( serviceIdentifier: Identifier, characteristicUUID: UUID, descriptorUUID: UUID, valueBase64: Base64, transactionId: TransactionId ): Promise writeDescriptorForCharacteristic( characteristicIdentifier: Identifier, descriptorUUID: UUID, valueBase64: Base64, transactionId: TransactionId ): Promise writeDescriptor( descriptorIdentifier: Identifier, valueBase64: Base64, transactionId: TransactionId ): Promise enableBackgroundMode(options: BackgroundModeOptions | null): Promise disableBackgroundMode(): Promise updateBackgroundNotification(options: BackgroundModeOptions | null): Promise isBackgroundModeEnabled(): Promise cancelTransaction(transactionId: TransactionId): Promise setLogLevel(logLevel: NativeLogLevel): Promise logLevel(): Promise } export default TurboModuleRegistry.getEnforcing('BlePlx')