@capacitor-community/bluetooth-le 2.2.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -557,9 +557,9 @@ Uses [retrievePeripherals](https://developer.apple.com/documentation/corebluetoo
557
557
  [getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.
558
558
  On Android, you can directly connect to the device with the deviceId.
559
559
 
560
- | Param | Type | Description |
561
- | --------------- | --------------------- | --------------------------------------------------------------------------- |
562
- | **`deviceIds`** | <code>string[]</code> | List of device IDs, e.g. saved from a previous app run. No used on **web**. |
560
+ | Param | Type | Description |
561
+ | --------------- | --------------------- | ------------------------------------------------------- |
562
+ | **`deviceIds`** | <code>string[]</code> | List of device IDs, e.g. saved from a previous app run. |
563
563
 
564
564
  **Returns:** <code>Promise&lt;BleDevice[]&gt;</code>
565
565
 
package/dist/docs.json CHANGED
@@ -220,7 +220,7 @@
220
220
  "parameters": [
221
221
  {
222
222
  "name": "deviceIds",
223
- "docs": "List of device IDs, e.g. saved from a previous app run. No used on **web**.",
223
+ "docs": "List of device IDs, e.g. saved from a previous app run.",
224
224
  "type": "string[]"
225
225
  }
226
226
  ],
@@ -228,7 +228,7 @@
228
228
  "tags": [
229
229
  {
230
230
  "name": "param",
231
- "text": "deviceIds List of device IDs, e.g. saved from a previous app run. No used on **web**."
231
+ "text": "deviceIds List of device IDs, e.g. saved from a previous app run."
232
232
  }
233
233
  ],
234
234
  "docs": "On iOS and web, if you want to connect to a previously connected device without scanning first, you can use `getDevice`.\nUses [retrievePeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1519127-retrieveperipherals) on iOS and\n[getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.\nOn Android, you can directly connect to the device with the deviceId.",
@@ -83,7 +83,7 @@ export interface BleClientInterface {
83
83
  * Uses [retrievePeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1519127-retrieveperipherals) on iOS and
84
84
  * [getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.
85
85
  * On Android, you can directly connect to the device with the deviceId.
86
- * @param deviceIds List of device IDs, e.g. saved from a previous app run. No used on **web**.
86
+ * @param deviceIds List of device IDs, e.g. saved from a previous app run.
87
87
  */
88
88
  getDevices(deviceIds: string[]): Promise<BleDevice[]>;
89
89
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"bleClient.js","sourceRoot":"","sources":["../../src/bleClient.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\nimport { Capacitor } from '@capacitor/core';\n\nimport type { DisplayStrings } from './config';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport type {\n BleDevice,\n BleService,\n ConnectionPriority,\n Data,\n InitializeOptions,\n ReadResult,\n RequestBleDeviceOptions,\n ScanResult,\n ScanResultInternal,\n TimeoutOptions,\n} from './definitions';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\n\nexport interface BleClientInterface {\n /**\n * Initialize Bluetooth Low Energy (BLE). If it fails, BLE might be unavailable on this device.\n * On **Android** it will ask for the location permission. On **iOS** it will ask for the Bluetooth permission.\n * For an example, see [usage](#usage).\n */\n initialize(options?: InitializeOptions): Promise<void>;\n\n /**\n * Reports whether Bluetooth is enabled on this device.\n * Always returns `true` on **web**.\n */\n isEnabled(): Promise<boolean>;\n\n /**\n * Enable Bluetooth.\n * Only available on **Android**.\n */\n enable(): Promise<void>;\n\n /**\n * Disable Bluetooth.\n * Only available on **Android**.\n */\n disable(): Promise<void>;\n\n /**\n * Register a callback function that will be invoked when Bluetooth is enabled (true) or disabled (false) on this device.\n * Not available on **web** (the callback will never be invoked).\n * @param callback Callback function to use when the Bluetooth state changes.\n */\n startEnabledNotifications(callback: (value: boolean) => void): Promise<void>;\n\n /**\n * Stop the enabled notifications registered with `startEnabledNotifications`.\n */\n stopEnabledNotifications(): Promise<void>;\n\n /**\n * Reports whether Location Services are enabled on this device.\n * Only available on **Android**.\n */\n isLocationEnabled(): Promise<boolean>;\n\n /**\n * Open Location settings.\n * Only available on **Android**.\n */\n openLocationSettings(): Promise<void>;\n\n /**\n * Open Bluetooth settings.\n * Only available on **Android**.\n */\n openBluetoothSettings(): Promise<void>;\n\n /**\n * Open App settings.\n * Not available on **web**.\n * On **iOS** when a user declines the request to use Bluetooth on the first call of `initialize`, it is not possible\n * to request for Bluetooth again from within the app. In this case Bluetooth has to be enabled in the app settings\n * for the app to be able use it.\n */\n openAppSettings(): Promise<void>;\n\n /**\n * Set the strings that are displayed in the `requestDevice` dialog.\n * @param displayStrings\n */\n setDisplayStrings(displayStrings: DisplayStrings): Promise<void>;\n\n /**\n * Request a peripheral BLE device to interact with. This will scan for available devices according to the filters in the options and show a dialog to pick a device.\n * For an example, see [usage](#usage).\n * @param options Device filters, see [RequestBleDeviceOptions](#RequestBleDeviceOptions)\n */\n requestDevice(options?: RequestBleDeviceOptions): Promise<BleDevice>;\n\n /**\n * Start scanning for BLE devices to interact with according to the filters in the options. The callback will be invoked on each device that is found.\n * Scanning will continue until `stopLEScan` is called. For an example, see [usage](#usage).\n * **NOTE**: Use with care on **web** platform, the required API is still behind a flag in most browsers.\n * @param options\n * @param callback\n */\n requestLEScan(options: RequestBleDeviceOptions, callback: (result: ScanResult) => void): Promise<void>;\n\n /**\n * Stop scanning for BLE devices. For an example, see [usage](#usage).\n */\n stopLEScan(): Promise<void>;\n\n /**\n * On iOS and web, if you want to connect to a previously connected device without scanning first, you can use `getDevice`.\n * Uses [retrievePeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1519127-retrieveperipherals) on iOS and\n * [getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.\n * On Android, you can directly connect to the device with the deviceId.\n * @param deviceIds List of device IDs, e.g. saved from a previous app run. No used on **web**.\n */\n getDevices(deviceIds: string[]): Promise<BleDevice[]>;\n\n /**\n * Get a list of currently connected devices.\n * Uses [retrieveConnectedPeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1518924-retrieveconnectedperipherals) on iOS,\n * [getConnectedDevices](https://developer.android.com/reference/android/bluetooth/BluetoothManager#getConnectedDevices(int)) on Android\n * and [getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.\n * @param services List of services to filter the devices by. If no service is specified, no devices will be returned. Only applies to iOS.\n */\n getConnectedDevices(services: string[]): Promise<BleDevice[]>;\n\n /**\n * Connect to a peripheral BLE device. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param onDisconnect Optional disconnect callback function that will be used when the device disconnects\n * @param options Options for plugin call\n */\n connect(deviceId: string, onDisconnect?: (deviceId: string) => void, options?: TimeoutOptions): Promise<void>;\n\n /**\n * Create a bond with a peripheral BLE device.\n * Only available on **Android**. On iOS bonding is handled by the OS.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n createBond(deviceId: string): Promise<void>;\n\n /**\n * Report whether a peripheral BLE device is bonded.\n * Only available on **Android**. On iOS bonding is handled by the OS.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n isBonded(deviceId: string): Promise<boolean>;\n\n /**\n * Disconnect from a peripheral BLE device. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n disconnect(deviceId: string): Promise<void>;\n\n /**\n * Get services, characteristics and descriptors of a device.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n getServices(deviceId: string): Promise<BleService[]>;\n\n /**\n * Discover services, characteristics and descriptors of a device.\n * You only need this method if your peripheral device changes its services and characteristics at runtime.\n * If the discovery was successful, the remote services can be retrieved using the getServices function.\n * Not available on **web**.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n discoverServices(deviceId: string): Promise<void>;\n\n /**\n * Get the MTU of a connected device. Note that the maximum write value length is 3 bytes less than the MTU.\n * Not available on **web**.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n getMtu(deviceId: string): Promise<number>;\n\n /**\n * Request a connection parameter update.\n * Only available on **Android**. https://developer.android.com/reference/android/bluetooth/BluetoothGatt#requestConnectionPriority(int)\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param connectionPriority Request a specific connection priority. See [ConnectionPriority](#connectionpriority)\n */\n requestConnectionPriority(deviceId: string, connectionPriority: ConnectionPriority): Promise<void>;\n\n /**\n * Read the RSSI value of a connected device.\n * Not available on **web**.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n readRssi(deviceId: string): Promise<number>;\n\n /**\n * Read the value of a characteristic. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param options Options for plugin call\n */\n read(deviceId: string, service: string, characteristic: string, options?: TimeoutOptions): Promise<DataView>;\n\n /**\n * Write a value to a characteristic. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param value The value to write as a DataView. To create a DataView from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0])\n * @param options Options for plugin call\n */\n write(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void>;\n\n /**\n * Write a value to a characteristic without waiting for a response.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param value The value to write as a DataView. To create a DataView from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0])\n * @param options Options for plugin call\n */\n writeWithoutResponse(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void>;\n\n /**\n * Read the value of a descriptor.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param descriptor UUID of the descriptor (see [UUID format](#uuid-format))\n * @param options Options for plugin call\n */\n readDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n options?: TimeoutOptions\n ): Promise<DataView>;\n\n /**\n * Write a value to a descriptor.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param descriptor UUID of the descriptor (see [UUID format](#uuid-format))\n * @param value The value to write as a DataView. To create a DataView from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0])\n * @param options Options for plugin call\n */\n writeDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void>;\n\n /**\n * Start listening to changes of the value of a characteristic.\n * Note that you should only start the notifications once per characteristic in your app and share the data and\n * not call `startNotifications` in every component that needs the data.\n * For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param callback Callback function to use when the value of the characteristic changes\n */\n startNotifications(\n deviceId: string,\n service: string,\n characteristic: string,\n callback: (value: DataView) => void\n ): Promise<void>;\n\n /**\n * Stop listening to the changes of the value of a characteristic. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n */\n stopNotifications(deviceId: string, service: string, characteristic: string): Promise<void>;\n}\n\nclass BleClientClass implements BleClientInterface {\n private scanListener: PluginListenerHandle | null = null;\n private eventListeners = new Map<string, PluginListenerHandle>();\n private queue = getQueue(true);\n\n enableQueue() {\n this.queue = getQueue(true);\n }\n\n disableQueue() {\n this.queue = getQueue(false);\n }\n\n async initialize(options?: InitializeOptions): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n\n /**\n * Reports whether BLE is enabled on this device.\n * Always returns `true` on **web**.\n * @deprecated Use `isEnabled` instead.\n */\n async getEnabled(): Promise<boolean> {\n return this.isEnabled();\n }\n\n async isEnabled(): Promise<boolean> {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n\n async enable(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n\n async disable(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n\n async startEnabledNotifications(callback: (value: boolean) => void): Promise<void> {\n await this.queue(async () => {\n const key = `onEnabledChanged`;\n await this.eventListeners.get(key)?.remove();\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n\n async stopEnabledNotifications(): Promise<void> {\n await this.queue(async () => {\n const key = `onEnabledChanged`;\n await this.eventListeners.get(key)?.remove();\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n\n async isLocationEnabled(): Promise<boolean> {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n\n async openLocationSettings(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n\n async openBluetoothSettings(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n\n async openAppSettings(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n\n async setDisplayStrings(displayStrings: DisplayStrings): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n\n async requestDevice(options?: RequestBleDeviceOptions): Promise<BleDevice> {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n\n async requestLEScan(options: RequestBleDeviceOptions, callback: (result: ScanResult) => void): Promise<void> {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n await this.scanListener?.remove();\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal: ScanResultInternal) => {\n const result: ScanResult = {\n ...resultInternal,\n manufacturerData: this.convertObject(resultInternal.manufacturerData),\n serviceData: this.convertObject(resultInternal.serviceData),\n rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined,\n };\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n\n async stopLEScan(): Promise<void> {\n await this.queue(async () => {\n await this.scanListener?.remove();\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n\n async getDevices(deviceIds: string[]): Promise<BleDevice[]> {\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n\n async getConnectedDevices(services: string[]): Promise<BleDevice[]> {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n\n async connect(deviceId: string, onDisconnect?: (deviceId: string) => void, options?: TimeoutOptions): Promise<void> {\n await this.queue(async () => {\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await this.eventListeners.get(key)?.remove();\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect({ deviceId, ...options });\n });\n }\n\n async createBond(deviceId: string): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.createBond({ deviceId });\n });\n }\n\n async isBonded(deviceId: string): Promise<boolean> {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n\n async disconnect(deviceId: string): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n\n async getServices(deviceId: string): Promise<BleService[]> {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n\n async discoverServices(deviceId: string): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n\n async getMtu(deviceId: string): Promise<number> {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n\n async requestConnectionPriority(deviceId: string, connectionPriority: ConnectionPriority): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n\n async readRssi(deviceId: string): Promise<number> {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n\n async read(deviceId: string, service: string, characteristic: string, options?: TimeoutOptions): Promise<DataView> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read({\n deviceId,\n service,\n characteristic,\n ...options,\n });\n return this.convertValue(result.value);\n });\n return value;\n }\n\n async write(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!value?.buffer) {\n throw new Error('Invalid data.');\n }\n let writeValue: DataView | string = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write({\n deviceId,\n service,\n characteristic,\n value: writeValue,\n ...options,\n });\n });\n }\n\n async writeWithoutResponse(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!value?.buffer) {\n throw new Error('Invalid data.');\n }\n let writeValue: DataView | string = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse({\n deviceId,\n service,\n characteristic,\n value: writeValue,\n ...options,\n });\n });\n }\n\n async readDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n options?: TimeoutOptions\n ): Promise<DataView> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor({\n deviceId,\n service,\n characteristic,\n descriptor,\n ...options,\n });\n return this.convertValue(result.value);\n });\n return value;\n }\n\n async writeDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!value?.buffer) {\n throw new Error('Invalid data.');\n }\n let writeValue: DataView | string = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor({\n deviceId,\n service,\n characteristic,\n descriptor,\n value: writeValue,\n ...options,\n });\n });\n }\n\n async startNotifications(\n deviceId: string,\n service: string,\n characteristic: string,\n callback: (value: DataView) => void\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await this.eventListeners.get(key)?.remove();\n const listener = await BluetoothLe.addListener(key, (event: ReadResult) => {\n callback(this.convertValue(event?.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n\n async stopNotifications(deviceId: string, service: string, characteristic: string): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await this.eventListeners.get(key)?.remove();\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n\n private validateRequestBleDeviceOptions(options: RequestBleDeviceOptions): RequestBleDeviceOptions {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n\n private convertValue(value?: Data): DataView {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n } else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n\n private convertObject(obj?: { [key: string]: Data }): { [key: string]: DataView } | undefined {\n if (obj === undefined) {\n return undefined;\n }\n const result: { [key: string]: DataView } = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\n\nexport const BleClient = new BleClientClass();\n"]}
1
+ {"version":3,"file":"bleClient.js","sourceRoot":"","sources":["../../src/bleClient.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\nimport { Capacitor } from '@capacitor/core';\n\nimport type { DisplayStrings } from './config';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport type {\n BleDevice,\n BleService,\n ConnectionPriority,\n Data,\n InitializeOptions,\n ReadResult,\n RequestBleDeviceOptions,\n ScanResult,\n ScanResultInternal,\n TimeoutOptions,\n} from './definitions';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\n\nexport interface BleClientInterface {\n /**\n * Initialize Bluetooth Low Energy (BLE). If it fails, BLE might be unavailable on this device.\n * On **Android** it will ask for the location permission. On **iOS** it will ask for the Bluetooth permission.\n * For an example, see [usage](#usage).\n */\n initialize(options?: InitializeOptions): Promise<void>;\n\n /**\n * Reports whether Bluetooth is enabled on this device.\n * Always returns `true` on **web**.\n */\n isEnabled(): Promise<boolean>;\n\n /**\n * Enable Bluetooth.\n * Only available on **Android**.\n */\n enable(): Promise<void>;\n\n /**\n * Disable Bluetooth.\n * Only available on **Android**.\n */\n disable(): Promise<void>;\n\n /**\n * Register a callback function that will be invoked when Bluetooth is enabled (true) or disabled (false) on this device.\n * Not available on **web** (the callback will never be invoked).\n * @param callback Callback function to use when the Bluetooth state changes.\n */\n startEnabledNotifications(callback: (value: boolean) => void): Promise<void>;\n\n /**\n * Stop the enabled notifications registered with `startEnabledNotifications`.\n */\n stopEnabledNotifications(): Promise<void>;\n\n /**\n * Reports whether Location Services are enabled on this device.\n * Only available on **Android**.\n */\n isLocationEnabled(): Promise<boolean>;\n\n /**\n * Open Location settings.\n * Only available on **Android**.\n */\n openLocationSettings(): Promise<void>;\n\n /**\n * Open Bluetooth settings.\n * Only available on **Android**.\n */\n openBluetoothSettings(): Promise<void>;\n\n /**\n * Open App settings.\n * Not available on **web**.\n * On **iOS** when a user declines the request to use Bluetooth on the first call of `initialize`, it is not possible\n * to request for Bluetooth again from within the app. In this case Bluetooth has to be enabled in the app settings\n * for the app to be able use it.\n */\n openAppSettings(): Promise<void>;\n\n /**\n * Set the strings that are displayed in the `requestDevice` dialog.\n * @param displayStrings\n */\n setDisplayStrings(displayStrings: DisplayStrings): Promise<void>;\n\n /**\n * Request a peripheral BLE device to interact with. This will scan for available devices according to the filters in the options and show a dialog to pick a device.\n * For an example, see [usage](#usage).\n * @param options Device filters, see [RequestBleDeviceOptions](#RequestBleDeviceOptions)\n */\n requestDevice(options?: RequestBleDeviceOptions): Promise<BleDevice>;\n\n /**\n * Start scanning for BLE devices to interact with according to the filters in the options. The callback will be invoked on each device that is found.\n * Scanning will continue until `stopLEScan` is called. For an example, see [usage](#usage).\n * **NOTE**: Use with care on **web** platform, the required API is still behind a flag in most browsers.\n * @param options\n * @param callback\n */\n requestLEScan(options: RequestBleDeviceOptions, callback: (result: ScanResult) => void): Promise<void>;\n\n /**\n * Stop scanning for BLE devices. For an example, see [usage](#usage).\n */\n stopLEScan(): Promise<void>;\n\n /**\n * On iOS and web, if you want to connect to a previously connected device without scanning first, you can use `getDevice`.\n * Uses [retrievePeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1519127-retrieveperipherals) on iOS and\n * [getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.\n * On Android, you can directly connect to the device with the deviceId.\n * @param deviceIds List of device IDs, e.g. saved from a previous app run.\n */\n getDevices(deviceIds: string[]): Promise<BleDevice[]>;\n\n /**\n * Get a list of currently connected devices.\n * Uses [retrieveConnectedPeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1518924-retrieveconnectedperipherals) on iOS,\n * [getConnectedDevices](https://developer.android.com/reference/android/bluetooth/BluetoothManager#getConnectedDevices(int)) on Android\n * and [getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.\n * @param services List of services to filter the devices by. If no service is specified, no devices will be returned. Only applies to iOS.\n */\n getConnectedDevices(services: string[]): Promise<BleDevice[]>;\n\n /**\n * Connect to a peripheral BLE device. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param onDisconnect Optional disconnect callback function that will be used when the device disconnects\n * @param options Options for plugin call\n */\n connect(deviceId: string, onDisconnect?: (deviceId: string) => void, options?: TimeoutOptions): Promise<void>;\n\n /**\n * Create a bond with a peripheral BLE device.\n * Only available on **Android**. On iOS bonding is handled by the OS.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n createBond(deviceId: string): Promise<void>;\n\n /**\n * Report whether a peripheral BLE device is bonded.\n * Only available on **Android**. On iOS bonding is handled by the OS.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n isBonded(deviceId: string): Promise<boolean>;\n\n /**\n * Disconnect from a peripheral BLE device. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n disconnect(deviceId: string): Promise<void>;\n\n /**\n * Get services, characteristics and descriptors of a device.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n getServices(deviceId: string): Promise<BleService[]>;\n\n /**\n * Discover services, characteristics and descriptors of a device.\n * You only need this method if your peripheral device changes its services and characteristics at runtime.\n * If the discovery was successful, the remote services can be retrieved using the getServices function.\n * Not available on **web**.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n discoverServices(deviceId: string): Promise<void>;\n\n /**\n * Get the MTU of a connected device. Note that the maximum write value length is 3 bytes less than the MTU.\n * Not available on **web**.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n getMtu(deviceId: string): Promise<number>;\n\n /**\n * Request a connection parameter update.\n * Only available on **Android**. https://developer.android.com/reference/android/bluetooth/BluetoothGatt#requestConnectionPriority(int)\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param connectionPriority Request a specific connection priority. See [ConnectionPriority](#connectionpriority)\n */\n requestConnectionPriority(deviceId: string, connectionPriority: ConnectionPriority): Promise<void>;\n\n /**\n * Read the RSSI value of a connected device.\n * Not available on **web**.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n */\n readRssi(deviceId: string): Promise<number>;\n\n /**\n * Read the value of a characteristic. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param options Options for plugin call\n */\n read(deviceId: string, service: string, characteristic: string, options?: TimeoutOptions): Promise<DataView>;\n\n /**\n * Write a value to a characteristic. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param value The value to write as a DataView. To create a DataView from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0])\n * @param options Options for plugin call\n */\n write(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void>;\n\n /**\n * Write a value to a characteristic without waiting for a response.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param value The value to write as a DataView. To create a DataView from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0])\n * @param options Options for plugin call\n */\n writeWithoutResponse(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void>;\n\n /**\n * Read the value of a descriptor.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param descriptor UUID of the descriptor (see [UUID format](#uuid-format))\n * @param options Options for plugin call\n */\n readDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n options?: TimeoutOptions\n ): Promise<DataView>;\n\n /**\n * Write a value to a descriptor.\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param descriptor UUID of the descriptor (see [UUID format](#uuid-format))\n * @param value The value to write as a DataView. To create a DataView from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0])\n * @param options Options for plugin call\n */\n writeDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void>;\n\n /**\n * Start listening to changes of the value of a characteristic.\n * Note that you should only start the notifications once per characteristic in your app and share the data and\n * not call `startNotifications` in every component that needs the data.\n * For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n * @param callback Callback function to use when the value of the characteristic changes\n */\n startNotifications(\n deviceId: string,\n service: string,\n characteristic: string,\n callback: (value: DataView) => void\n ): Promise<void>;\n\n /**\n * Stop listening to the changes of the value of a characteristic. For an example, see [usage](#usage).\n * @param deviceId The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))\n * @param service UUID of the service (see [UUID format](#uuid-format))\n * @param characteristic UUID of the characteristic (see [UUID format](#uuid-format))\n */\n stopNotifications(deviceId: string, service: string, characteristic: string): Promise<void>;\n}\n\nclass BleClientClass implements BleClientInterface {\n private scanListener: PluginListenerHandle | null = null;\n private eventListeners = new Map<string, PluginListenerHandle>();\n private queue = getQueue(true);\n\n enableQueue() {\n this.queue = getQueue(true);\n }\n\n disableQueue() {\n this.queue = getQueue(false);\n }\n\n async initialize(options?: InitializeOptions): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n\n /**\n * Reports whether BLE is enabled on this device.\n * Always returns `true` on **web**.\n * @deprecated Use `isEnabled` instead.\n */\n async getEnabled(): Promise<boolean> {\n return this.isEnabled();\n }\n\n async isEnabled(): Promise<boolean> {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n\n async enable(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n\n async disable(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n\n async startEnabledNotifications(callback: (value: boolean) => void): Promise<void> {\n await this.queue(async () => {\n const key = `onEnabledChanged`;\n await this.eventListeners.get(key)?.remove();\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n\n async stopEnabledNotifications(): Promise<void> {\n await this.queue(async () => {\n const key = `onEnabledChanged`;\n await this.eventListeners.get(key)?.remove();\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n\n async isLocationEnabled(): Promise<boolean> {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n\n async openLocationSettings(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n\n async openBluetoothSettings(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n\n async openAppSettings(): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n\n async setDisplayStrings(displayStrings: DisplayStrings): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n\n async requestDevice(options?: RequestBleDeviceOptions): Promise<BleDevice> {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n\n async requestLEScan(options: RequestBleDeviceOptions, callback: (result: ScanResult) => void): Promise<void> {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n await this.scanListener?.remove();\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal: ScanResultInternal) => {\n const result: ScanResult = {\n ...resultInternal,\n manufacturerData: this.convertObject(resultInternal.manufacturerData),\n serviceData: this.convertObject(resultInternal.serviceData),\n rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined,\n };\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n\n async stopLEScan(): Promise<void> {\n await this.queue(async () => {\n await this.scanListener?.remove();\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n\n async getDevices(deviceIds: string[]): Promise<BleDevice[]> {\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n\n async getConnectedDevices(services: string[]): Promise<BleDevice[]> {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n\n async connect(deviceId: string, onDisconnect?: (deviceId: string) => void, options?: TimeoutOptions): Promise<void> {\n await this.queue(async () => {\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await this.eventListeners.get(key)?.remove();\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect({ deviceId, ...options });\n });\n }\n\n async createBond(deviceId: string): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.createBond({ deviceId });\n });\n }\n\n async isBonded(deviceId: string): Promise<boolean> {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n\n async disconnect(deviceId: string): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n\n async getServices(deviceId: string): Promise<BleService[]> {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n\n async discoverServices(deviceId: string): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n\n async getMtu(deviceId: string): Promise<number> {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n\n async requestConnectionPriority(deviceId: string, connectionPriority: ConnectionPriority): Promise<void> {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n\n async readRssi(deviceId: string): Promise<number> {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n\n async read(deviceId: string, service: string, characteristic: string, options?: TimeoutOptions): Promise<DataView> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read({\n deviceId,\n service,\n characteristic,\n ...options,\n });\n return this.convertValue(result.value);\n });\n return value;\n }\n\n async write(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!value?.buffer) {\n throw new Error('Invalid data.');\n }\n let writeValue: DataView | string = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write({\n deviceId,\n service,\n characteristic,\n value: writeValue,\n ...options,\n });\n });\n }\n\n async writeWithoutResponse(\n deviceId: string,\n service: string,\n characteristic: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!value?.buffer) {\n throw new Error('Invalid data.');\n }\n let writeValue: DataView | string = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse({\n deviceId,\n service,\n characteristic,\n value: writeValue,\n ...options,\n });\n });\n }\n\n async readDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n options?: TimeoutOptions\n ): Promise<DataView> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor({\n deviceId,\n service,\n characteristic,\n descriptor,\n ...options,\n });\n return this.convertValue(result.value);\n });\n return value;\n }\n\n async writeDescriptor(\n deviceId: string,\n service: string,\n characteristic: string,\n descriptor: string,\n value: DataView,\n options?: TimeoutOptions\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!value?.buffer) {\n throw new Error('Invalid data.');\n }\n let writeValue: DataView | string = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor({\n deviceId,\n service,\n characteristic,\n descriptor,\n value: writeValue,\n ...options,\n });\n });\n }\n\n async startNotifications(\n deviceId: string,\n service: string,\n characteristic: string,\n callback: (value: DataView) => void\n ): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await this.eventListeners.get(key)?.remove();\n const listener = await BluetoothLe.addListener(key, (event: ReadResult) => {\n callback(this.convertValue(event?.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n\n async stopNotifications(deviceId: string, service: string, characteristic: string): Promise<void> {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await this.eventListeners.get(key)?.remove();\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n\n private validateRequestBleDeviceOptions(options: RequestBleDeviceOptions): RequestBleDeviceOptions {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n\n private convertValue(value?: Data): DataView {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n } else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n\n private convertObject(obj?: { [key: string]: Data }): { [key: string]: DataView } | undefined {\n if (obj === undefined) {\n return undefined;\n }\n const result: { [key: string]: DataView } = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\n\nexport const BleClient = new BleClientClass();\n"]}
package/dist/esm/web.d.ts CHANGED
@@ -22,7 +22,7 @@ export declare class BluetoothLeWeb extends WebPlugin implements BluetoothLePlug
22
22
  private onAdvertisementReceivedCallback;
23
23
  private onAdvertisementReceived;
24
24
  stopLEScan(): Promise<void>;
25
- getDevices(_options: GetDevicesOptions): Promise<GetDevicesResult>;
25
+ getDevices(options: GetDevicesOptions): Promise<GetDevicesResult>;
26
26
  getConnectedDevices(_options: GetConnectedDevicesOptions): Promise<GetDevicesResult>;
27
27
  connect(options: DeviceIdOptions & TimeoutOptions): Promise<void>;
28
28
  private onDisconnectedCallback;
package/dist/esm/web.js CHANGED
@@ -103,9 +103,11 @@ export class BluetoothLeWeb extends WebPlugin {
103
103
  }
104
104
  this.scan = null;
105
105
  }
106
- async getDevices(_options) {
106
+ async getDevices(options) {
107
107
  const devices = await navigator.bluetooth.getDevices();
108
- const bleDevices = devices.map((device) => {
108
+ const bleDevices = devices
109
+ .filter((device) => options.deviceIds.includes(device.id))
110
+ .map((device) => {
109
111
  this.deviceMap.set(device.id, device);
110
112
  const bleDevice = this.getBleDevice(device);
111
113
  return bleDevice;
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport type {\n BleCharacteristic,\n BleCharacteristicProperties,\n BleDescriptor,\n BleService,\n TimeoutOptions,\n BleDevice,\n BleServices,\n BluetoothLePlugin,\n BooleanResult,\n DeviceIdOptions,\n GetConnectedDevicesOptions,\n GetDevicesOptions,\n GetDevicesResult,\n ReadDescriptorOptions,\n ReadOptions,\n ReadResult,\n ReadRssiResult,\n RequestBleDeviceOptions,\n ScanResultInternal,\n WriteOptions,\n WriteDescriptorOptions,\n GetMtuResult,\n RequestConnectionPriorityOptions,\n} from './definitions';\nimport { runWithTimeout } from './timeout';\n\nexport class BluetoothLeWeb extends WebPlugin implements BluetoothLePlugin {\n private deviceMap = new Map<string, BluetoothDevice>();\n private discoveredDevices = new Map<string, boolean>();\n private scan: BluetoothLEScan | null = null;\n private requestBleDeviceOptions: RequestBleDeviceOptions | undefined;\n private DEFAULT_CONNECTION_TIMEOUT = 10000;\n\n async initialize(): Promise<void> {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n\n async isEnabled(): Promise<BooleanResult> {\n // not available on web\n return { value: true };\n }\n\n async enable(): Promise<void> {\n throw this.unavailable('enable is not available on web.');\n }\n\n async disable(): Promise<void> {\n throw this.unavailable('disable is not available on web.');\n }\n\n async startEnabledNotifications(): Promise<void> {\n // not available on web\n }\n\n async stopEnabledNotifications(): Promise<void> {\n // not available on web\n }\n\n async isLocationEnabled(): Promise<BooleanResult> {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n\n async openLocationSettings(): Promise<void> {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n\n async openBluetoothSettings(): Promise<void> {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n\n async openAppSettings(): Promise<void> {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n\n async setDisplayStrings(): Promise<void> {\n // not available on web\n }\n\n async requestDevice(options?: RequestBleDeviceOptions): Promise<BleDevice> {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options?.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n\n async requestLEScan(options?: RequestBleDeviceOptions): Promise<void> {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map<string, boolean>();\n navigator.bluetooth.removeEventListener(\n 'advertisementreceived',\n this.onAdvertisementReceivedCallback as EventListener\n );\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options?.allowDuplicates,\n });\n }\n\n private onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n\n private onAdvertisementReceived(event: BluetoothAdvertisingEvent): void {\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || this.requestBleDeviceOptions?.allowDuplicates) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result: ScanResultInternal = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: event.uuids?.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n\n async stopLEScan(): Promise<void> {\n if (this.scan?.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n\n async getDevices(_options: GetDevicesOptions): Promise<GetDevicesResult> {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices.map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n\n async getConnectedDevices(_options: GetConnectedDevicesOptions): Promise<GetDevicesResult> {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n return device.gatt?.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n\n async connect(options: DeviceIdOptions & TimeoutOptions): Promise<void> {\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = options.timeout ?? this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n } catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await device.gatt?.disconnect();\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n } else {\n throw error;\n }\n }\n }\n\n private onDisconnectedCallback = this.onDisconnected.bind(this);\n\n private onDisconnected(event: Event): void {\n const deviceId = (event.target as BluetoothDevice).id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n\n async createBond(_options: DeviceIdOptions): Promise<void> {\n throw this.unavailable('createBond is not available on web.');\n }\n\n async isBonded(_options: DeviceIdOptions): Promise<BooleanResult> {\n throw this.unavailable('isBonded is not available on web.');\n }\n\n async disconnect(options: DeviceIdOptions): Promise<void> {\n this.getDeviceFromMap(options.deviceId).gatt?.disconnect();\n }\n\n async getServices(options: DeviceIdOptions): Promise<BleServices> {\n const services = (await this.getDeviceFromMap(options.deviceId).gatt?.getPrimaryServices()) ?? [];\n const bleServices: BleService[] = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics: BleCharacteristic[] = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n\n private async getDescriptors(characteristic: BluetoothRemoteGATTCharacteristic): Promise<BleDescriptor[]> {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n } catch {\n return [];\n }\n }\n\n private getProperties(characteristic: BluetoothRemoteGATTCharacteristic): BleCharacteristicProperties {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n\n private async getCharacteristic(\n options: ReadOptions | WriteOptions\n ): Promise<BluetoothRemoteGATTCharacteristic | undefined> {\n const service = await this.getDeviceFromMap(options.deviceId).gatt?.getPrimaryService(options?.service);\n return service?.getCharacteristic(options?.characteristic);\n }\n\n private async getDescriptor(\n options: ReadDescriptorOptions | WriteDescriptorOptions\n ): Promise<BluetoothRemoteGATTDescriptor | undefined> {\n const characteristic = await this.getCharacteristic(options);\n return characteristic?.getDescriptor(options?.descriptor);\n }\n\n async discoverServices(_options: DeviceIdOptions): Promise<void> {\n throw this.unavailable('discoverServices is not available on web.');\n }\n\n async getMtu(_options: DeviceIdOptions): Promise<GetMtuResult> {\n throw this.unavailable('getMtu is not available on web.');\n }\n\n async requestConnectionPriority(_options: RequestConnectionPriorityOptions): Promise<void> {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n\n async readRssi(_options: DeviceIdOptions): Promise<ReadRssiResult> {\n throw this.unavailable('readRssi is not available on web.');\n }\n\n async read(options: ReadOptions): Promise<ReadResult> {\n const characteristic = await this.getCharacteristic(options);\n const value = await characteristic?.readValue();\n return { value };\n }\n\n async write(options: WriteOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n let dataView: DataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n } else {\n dataView = options.value;\n }\n await characteristic?.writeValueWithResponse(dataView);\n }\n\n async writeWithoutResponse(options: WriteOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n let dataView: DataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n } else {\n dataView = options.value;\n }\n await characteristic?.writeValueWithoutResponse(dataView);\n }\n\n async readDescriptor(options: ReadDescriptorOptions): Promise<ReadResult> {\n const descriptor = await this.getDescriptor(options);\n const value = await descriptor?.readValue();\n return { value };\n }\n\n async writeDescriptor(options: WriteDescriptorOptions): Promise<void> {\n const descriptor = await this.getDescriptor(options);\n let dataView: DataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n } else {\n dataView = options.value;\n }\n await descriptor?.writeValue(dataView);\n }\n\n async startNotifications(options: ReadOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n characteristic?.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic?.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await characteristic?.startNotifications();\n }\n\n private onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n\n private onCharacteristicValueChanged(event: Event): void {\n const characteristic = event.target as BluetoothRemoteGATTCharacteristic;\n const key = `notification|${characteristic.service?.device.id}|${characteristic.service?.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n\n async stopNotifications(options: ReadOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n await characteristic?.stopNotifications();\n }\n\n private getFilters(options?: RequestBleDeviceOptions): BluetoothLEScanFilter[] {\n const filters: BluetoothLEScanFilter[] = [];\n for (const service of options?.services ?? []) {\n filters.push({\n services: [service],\n name: options?.name,\n namePrefix: options?.namePrefix,\n });\n }\n if ((options?.name || options?.namePrefix) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n\n private getDeviceFromMap(deviceId: string): BluetoothDevice {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n\n private getBleDevice(device: BluetoothDevice): BleDevice {\n const bleDevice: BleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: device.name ?? undefined,\n };\n return bleDevice;\n }\n}\n"]}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AA0BjF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,cAAe,SAAQ,SAAS;IAA7C;;QACU,cAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC/C,sBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC/C,SAAI,GAA2B,IAAI,CAAC;QAEpC,+BAA0B,GAAG,KAAK,CAAC;QAkFnC,oCAA+B,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QA8E1E,2BAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAiJxD,yCAAoC,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAiD9F,CAAC;IAhWC,KAAK,CAAC,UAAU;QACd,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,kDAAkD,CAAC,CAAC;SAC5E;QACD,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;SACzD;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,uBAAuB;QACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,uBAAuB;IACzB,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,uBAAuB;IACzB,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,IAAI,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,uBAAuB;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAiC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;YACrD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC7C,gBAAgB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB;YAC3C,gBAAgB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAiC;QACnD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;QACpD,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACrC,uBAAuB,EACvB,IAAI,CAAC,+BAAgD,CACtD,CAAC;QACF,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACpG,IAAI,CAAC,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;YAClD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC7C,uBAAuB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;YAC7C,mBAAmB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe;SAC9C,CAAC,CAAC;IACL,CAAC;IAIO,uBAAuB,CAAC,KAAgC;;QAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,KAAK,KAAI,MAAA,IAAI,CAAC,uBAAuB,0CAAE,eAAe,CAAA,EAAE;YAC1D,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAuB;gBACjC,MAAM;gBACN,SAAS,EAAE,MAAM,CAAC,IAAI;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,gBAAgB,EAAE,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBACrD,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC3C,KAAK,EAAE,MAAA,KAAK,CAAC,KAAK,0CAAE,GAAG,CAAC,eAAe,CAAC;aACzC,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;SAC9C;IACH,CAAC;IAED,KAAK,CAAC,UAAU;;QACd,IAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAClB;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAA0B;QACzC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,OAAO;aACvB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACzD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC5C,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QACL,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAoC;QAC5D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,OAAO;aACvB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;;YACjB,OAAO,MAAA,MAAM,CAAC,IAAI,0CAAE,SAAS,CAAC;QAChC,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC5C,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QACL,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAyC;;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClF,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/E,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QACD,IAAI;YACF,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,IAAI,CAAC,0BAA0B,CAAC;YACnE,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;SACpE;QAAC,OAAO,KAAK,EAAE;YACd,+EAA+E;YAC/E,+DAA+D;YAC/D,MAAM,CAAA,MAAA,MAAM,CAAC,IAAI,0CAAE,UAAU,EAAE,CAAA,CAAC;YAChC,IAAI,KAAK,KAAK,YAAY,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACvC;iBAAM;gBACL,MAAM,KAAK,CAAC;aACb;SACF;IACH,CAAC;IAIO,cAAc,CAAC,KAAY;QACjC,MAAM,QAAQ,GAAI,KAAK,CAAC,MAA0B,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,gBAAgB,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAyB;QACxC,MAAM,IAAI,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAyB;QACtC,MAAM,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAwB;;QACvC,MAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,0CAAE,UAAU,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAwB;;QACxC,MAAM,QAAQ,GAAG,MAAA,CAAC,MAAM,CAAA,MAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,0CAAE,kBAAkB,EAAE,CAAA,CAAC,mCAAI,EAAE,CAAC;QAClG,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC3D,MAAM,kBAAkB,GAAwB,EAAE,CAAC;YACnD,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;gBAC5C,kBAAkB,CAAC,IAAI,CAAC;oBACtB,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;oBAC9C,WAAW,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;iBACvD,CAAC,CAAC;aACJ;YACD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC,CAAC;SAC/E;QACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,cAAiD;QAC5E,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;YAC1D,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,UAAU,CAAC,IAAI;aACtB,CAAC,CAAC,CAAC;SACL;QAAC,WAAM;YACN,OAAO,EAAE,CAAC;SACX;IACH,CAAC;IAEO,aAAa,CAAC,cAAiD;QACrE,OAAO;YACL,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,SAAS;YAC9C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,IAAI;YACpC,oBAAoB,EAAE,cAAc,CAAC,UAAU,CAAC,oBAAoB;YACpE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK;YACtC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM;YACxC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ;YAC5C,yBAAyB,EAAE,cAAc,CAAC,UAAU,CAAC,yBAAyB;YAC9E,aAAa,EAAE,cAAc,CAAC,UAAU,CAAC,aAAa;YACtD,mBAAmB,EAAE,cAAc,CAAC,UAAU,CAAC,mBAAmB;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,OAAmC;;QAEnC,MAAM,OAAO,GAAG,MAAM,CAAA,MAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,0CAAE,iBAAiB,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,CAAA,CAAC;QACxG,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,OAAuD;QAEvD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,aAAa,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAyB;QAC9C,MAAM,IAAI,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAyB;QACpC,MAAM,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,QAA0C;QACxE,MAAM,IAAI,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAyB;QACtC,MAAM,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,SAAS,EAAE,CAAA,CAAC;QAChD,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAqB;QAC/B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,QAAkB,CAAC;QACvB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;YACrC,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/C;aAAM;YACL,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;SAC1B;QACD,MAAM,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAA,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAAqB;QAC9C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,QAAkB,CAAC;QACvB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;YACrC,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/C;aAAM;YACL,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;SAC1B;QACD,MAAM,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAA8B;QACjD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,EAAE,CAAA,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA+B;QACnD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,QAAkB,CAAC;QACvB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;YACrC,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/C;aAAM;YACL,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;SAC1B;QACD,MAAM,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,CAAC,QAAQ,CAAC,CAAA,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAoB;QAC3C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7D,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC7G,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC1G,MAAM,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,kBAAkB,EAAE,CAAA,CAAC;IAC7C,CAAC;IAIO,4BAA4B,CAAC,KAAY;;QAC/C,MAAM,cAAc,GAAG,KAAK,CAAC,MAA2C,CAAC;QACzE,MAAM,GAAG,GAAG,gBAAgB,MAAA,cAAc,CAAC,OAAO,0CAAE,MAAM,CAAC,EAAE,IAAI,MAAA,cAAc,CAAC,OAAO,0CAAE,IAAI,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;QACvH,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;YACxB,KAAK,EAAE,cAAc,CAAC,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAoB;QAC1C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,iBAAiB,EAAE,CAAA,CAAC;IAC5C,CAAC;IAEO,UAAU,CAAC,OAAiC;;QAClD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,EAAE,EAAE;YAC7C,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,CAAC,OAAO,CAAC;gBACnB,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI;gBACnB,UAAU,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU;aAChC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAA,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAClE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;SACJ;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;SACnG;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY,CAAC,MAAuB;;QAC1C,MAAM,SAAS,GAAc;YAC3B,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,yDAAyD;YACzD,IAAI,EAAE,MAAA,MAAM,CAAC,IAAI,mCAAI,SAAS;SAC/B,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport type {\n BleCharacteristic,\n BleCharacteristicProperties,\n BleDescriptor,\n BleService,\n TimeoutOptions,\n BleDevice,\n BleServices,\n BluetoothLePlugin,\n BooleanResult,\n DeviceIdOptions,\n GetConnectedDevicesOptions,\n GetDevicesOptions,\n GetDevicesResult,\n ReadDescriptorOptions,\n ReadOptions,\n ReadResult,\n ReadRssiResult,\n RequestBleDeviceOptions,\n ScanResultInternal,\n WriteOptions,\n WriteDescriptorOptions,\n GetMtuResult,\n RequestConnectionPriorityOptions,\n} from './definitions';\nimport { runWithTimeout } from './timeout';\n\nexport class BluetoothLeWeb extends WebPlugin implements BluetoothLePlugin {\n private deviceMap = new Map<string, BluetoothDevice>();\n private discoveredDevices = new Map<string, boolean>();\n private scan: BluetoothLEScan | null = null;\n private requestBleDeviceOptions: RequestBleDeviceOptions | undefined;\n private DEFAULT_CONNECTION_TIMEOUT = 10000;\n\n async initialize(): Promise<void> {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n\n async isEnabled(): Promise<BooleanResult> {\n // not available on web\n return { value: true };\n }\n\n async enable(): Promise<void> {\n throw this.unavailable('enable is not available on web.');\n }\n\n async disable(): Promise<void> {\n throw this.unavailable('disable is not available on web.');\n }\n\n async startEnabledNotifications(): Promise<void> {\n // not available on web\n }\n\n async stopEnabledNotifications(): Promise<void> {\n // not available on web\n }\n\n async isLocationEnabled(): Promise<BooleanResult> {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n\n async openLocationSettings(): Promise<void> {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n\n async openBluetoothSettings(): Promise<void> {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n\n async openAppSettings(): Promise<void> {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n\n async setDisplayStrings(): Promise<void> {\n // not available on web\n }\n\n async requestDevice(options?: RequestBleDeviceOptions): Promise<BleDevice> {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options?.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n\n async requestLEScan(options?: RequestBleDeviceOptions): Promise<void> {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map<string, boolean>();\n navigator.bluetooth.removeEventListener(\n 'advertisementreceived',\n this.onAdvertisementReceivedCallback as EventListener\n );\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options?.allowDuplicates,\n });\n }\n\n private onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n\n private onAdvertisementReceived(event: BluetoothAdvertisingEvent): void {\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || this.requestBleDeviceOptions?.allowDuplicates) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result: ScanResultInternal = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: event.uuids?.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n\n async stopLEScan(): Promise<void> {\n if (this.scan?.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n\n async getDevices(options: GetDevicesOptions): Promise<GetDevicesResult> {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => options.deviceIds.includes(device.id))\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n\n async getConnectedDevices(_options: GetConnectedDevicesOptions): Promise<GetDevicesResult> {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n return device.gatt?.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n\n async connect(options: DeviceIdOptions & TimeoutOptions): Promise<void> {\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = options.timeout ?? this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n } catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await device.gatt?.disconnect();\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n } else {\n throw error;\n }\n }\n }\n\n private onDisconnectedCallback = this.onDisconnected.bind(this);\n\n private onDisconnected(event: Event): void {\n const deviceId = (event.target as BluetoothDevice).id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n\n async createBond(_options: DeviceIdOptions): Promise<void> {\n throw this.unavailable('createBond is not available on web.');\n }\n\n async isBonded(_options: DeviceIdOptions): Promise<BooleanResult> {\n throw this.unavailable('isBonded is not available on web.');\n }\n\n async disconnect(options: DeviceIdOptions): Promise<void> {\n this.getDeviceFromMap(options.deviceId).gatt?.disconnect();\n }\n\n async getServices(options: DeviceIdOptions): Promise<BleServices> {\n const services = (await this.getDeviceFromMap(options.deviceId).gatt?.getPrimaryServices()) ?? [];\n const bleServices: BleService[] = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics: BleCharacteristic[] = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n\n private async getDescriptors(characteristic: BluetoothRemoteGATTCharacteristic): Promise<BleDescriptor[]> {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n } catch {\n return [];\n }\n }\n\n private getProperties(characteristic: BluetoothRemoteGATTCharacteristic): BleCharacteristicProperties {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n\n private async getCharacteristic(\n options: ReadOptions | WriteOptions\n ): Promise<BluetoothRemoteGATTCharacteristic | undefined> {\n const service = await this.getDeviceFromMap(options.deviceId).gatt?.getPrimaryService(options?.service);\n return service?.getCharacteristic(options?.characteristic);\n }\n\n private async getDescriptor(\n options: ReadDescriptorOptions | WriteDescriptorOptions\n ): Promise<BluetoothRemoteGATTDescriptor | undefined> {\n const characteristic = await this.getCharacteristic(options);\n return characteristic?.getDescriptor(options?.descriptor);\n }\n\n async discoverServices(_options: DeviceIdOptions): Promise<void> {\n throw this.unavailable('discoverServices is not available on web.');\n }\n\n async getMtu(_options: DeviceIdOptions): Promise<GetMtuResult> {\n throw this.unavailable('getMtu is not available on web.');\n }\n\n async requestConnectionPriority(_options: RequestConnectionPriorityOptions): Promise<void> {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n\n async readRssi(_options: DeviceIdOptions): Promise<ReadRssiResult> {\n throw this.unavailable('readRssi is not available on web.');\n }\n\n async read(options: ReadOptions): Promise<ReadResult> {\n const characteristic = await this.getCharacteristic(options);\n const value = await characteristic?.readValue();\n return { value };\n }\n\n async write(options: WriteOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n let dataView: DataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n } else {\n dataView = options.value;\n }\n await characteristic?.writeValueWithResponse(dataView);\n }\n\n async writeWithoutResponse(options: WriteOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n let dataView: DataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n } else {\n dataView = options.value;\n }\n await characteristic?.writeValueWithoutResponse(dataView);\n }\n\n async readDescriptor(options: ReadDescriptorOptions): Promise<ReadResult> {\n const descriptor = await this.getDescriptor(options);\n const value = await descriptor?.readValue();\n return { value };\n }\n\n async writeDescriptor(options: WriteDescriptorOptions): Promise<void> {\n const descriptor = await this.getDescriptor(options);\n let dataView: DataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n } else {\n dataView = options.value;\n }\n await descriptor?.writeValue(dataView);\n }\n\n async startNotifications(options: ReadOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n characteristic?.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic?.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await characteristic?.startNotifications();\n }\n\n private onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n\n private onCharacteristicValueChanged(event: Event): void {\n const characteristic = event.target as BluetoothRemoteGATTCharacteristic;\n const key = `notification|${characteristic.service?.device.id}|${characteristic.service?.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n\n async stopNotifications(options: ReadOptions): Promise<void> {\n const characteristic = await this.getCharacteristic(options);\n await characteristic?.stopNotifications();\n }\n\n private getFilters(options?: RequestBleDeviceOptions): BluetoothLEScanFilter[] {\n const filters: BluetoothLEScanFilter[] = [];\n for (const service of options?.services ?? []) {\n filters.push({\n services: [service],\n name: options?.name,\n namePrefix: options?.namePrefix,\n });\n }\n if ((options?.name || options?.namePrefix) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n\n private getDeviceFromMap(deviceId: string): BluetoothDevice {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n\n private getBleDevice(device: BluetoothDevice): BleDevice {\n const bleDevice: BleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: device.name ?? undefined,\n };\n return bleDevice;\n }\n}\n"]}
@@ -601,9 +601,11 @@ class BluetoothLeWeb extends core.WebPlugin {
601
601
  }
602
602
  this.scan = null;
603
603
  }
604
- async getDevices(_options) {
604
+ async getDevices(options) {
605
605
  const devices = await navigator.bluetooth.getDevices();
606
- const bleDevices = devices.map((device) => {
606
+ const bleDevices = devices
607
+ .filter((device) => options.deviceIds.includes(device.id))
608
+ .map((device) => {
607
609
  this.deviceMap.set(device.id, device);
608
610
  const bleDevice = this.getBleDevice(device);
609
611
  return bleDevice;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/conversion.js","esm/plugin.js","esm/queue.js","esm/validators.js","esm/bleClient.js","esm/timeout.js","esm/web.js"],"sourcesContent":["/**\n * Android scan mode\n */\nexport var ScanMode;\n(function (ScanMode) {\n /**\n * Perform Bluetooth LE scan in low power mode. This mode is enforced if the scanning application is not in foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_POWER\"] = 0] = \"SCAN_MODE_LOW_POWER\";\n /**\n * Perform Bluetooth LE scan in balanced power mode. (default) Scan results are returned at a rate that provides a good trade-off between scan frequency and power consumption.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_BALANCED\n */\n ScanMode[ScanMode[\"SCAN_MODE_BALANCED\"] = 1] = \"SCAN_MODE_BALANCED\";\n /**\n * Scan using highest duty cycle. It's recommended to only use this mode when the application is running in the foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_LATENCY\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_LATENCY\"] = 2] = \"SCAN_MODE_LOW_LATENCY\";\n})(ScanMode || (ScanMode = {}));\n/**\n * Android connection priority used in `requestConnectionPriority`\n */\nexport var ConnectionPriority;\n(function (ConnectionPriority) {\n /**\n * Use the connection parameters recommended by the Bluetooth SIG. This is the default value if no connection parameter update is requested.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_BALANCED\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_BALANCED\"] = 0] = \"CONNECTION_PRIORITY_BALANCED\";\n /**\n * Request a high priority, low latency connection. An application should only request high priority connection parameters to transfer large amounts of data over LE quickly. Once the transfer is complete, the application should request CONNECTION_PRIORITY_BALANCED connection parameters to reduce energy use.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_HIGH\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_HIGH\"] = 1] = \"CONNECTION_PRIORITY_HIGH\";\n /**\n * Request low power, reduced data rate connection parameters.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_LOW_POWER\"] = 2] = \"CONNECTION_PRIORITY_LOW_POWER\";\n})(ConnectionPriority || (ConnectionPriority = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Convert an array of numbers into a DataView.\n */\nexport function numbersToDataView(value) {\n return new DataView(Uint8Array.from(value).buffer);\n}\n/**\n * Convert a DataView into an array of numbers.\n */\nexport function dataViewToNumbers(value) {\n return Array.from(new Uint8Array(value.buffer));\n}\n/**\n * Convert a string into a DataView.\n */\nexport function textToDataView(value) {\n return numbersToDataView(value.split('').map((s) => s.charCodeAt(0)));\n}\n/**\n * Convert a DataView into a string.\n */\nexport function dataViewToText(value) {\n return String.fromCharCode(...dataViewToNumbers(value));\n}\n/**\n * Convert a 16 bit UUID into a 128 bit UUID string\n * @param value number, e.g. 0x180d\n * @return string, e.g. '0000180d-0000-1000-8000-00805f9b34fb'\n */\nexport function numberToUUID(value) {\n return `0000${value.toString(16).padStart(4, '0')}-0000-1000-8000-00805f9b34fb`;\n}\nexport function hexStringToDataView(value) {\n const numbers = value\n .trim()\n .split(' ')\n .filter((e) => e !== '')\n .map((s) => parseInt(s, 16));\n return numbersToDataView(numbers);\n}\nexport function dataViewToHexString(value) {\n return dataViewToNumbers(value)\n .map((n) => {\n let s = n.toString(16);\n if (s.length == 1) {\n s = '0' + s;\n }\n return s;\n })\n .join(' ');\n}\nexport function webUUIDToString(uuid) {\n if (typeof uuid === 'string') {\n return uuid;\n }\n else if (typeof uuid === 'number') {\n return numberToUUID(uuid);\n }\n else {\n throw new Error('Invalid UUID');\n }\n}\nexport function mapToObject(map) {\n const obj = {};\n if (!map) {\n return undefined;\n }\n map.forEach((value, key) => {\n obj[key.toString()] = value;\n });\n return obj;\n}\n//# sourceMappingURL=conversion.js.map","import { registerPlugin } from '@capacitor/core';\nexport const BluetoothLe = registerPlugin('BluetoothLe', {\n web: () => import('./web').then((m) => new m.BluetoothLeWeb()),\n});\n//# sourceMappingURL=plugin.js.map","import throat from 'throat';\nexport function getQueue(enabled) {\n if (enabled) {\n return throat(1);\n }\n else {\n return (fn) => fn();\n }\n}\n//# sourceMappingURL=queue.js.map","export function parseUUID(uuid) {\n if (typeof uuid !== 'string') {\n throw new Error(`Invalid UUID type ${typeof uuid}. Expected string.`);\n }\n uuid = uuid.toLowerCase();\n const is128BitUuid = uuid.search(/^[0-9a-f]{8}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{12}$/) >= 0;\n if (!is128BitUuid) {\n throw new Error(`Invalid UUID format ${uuid}. Expected 128 bit string (e.g. \"0000180d-0000-1000-8000-00805f9b34fb\").`);\n }\n return uuid;\n}\n//# sourceMappingURL=validators.js.map","import { Capacitor } from '@capacitor/core';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\nclass BleClientClass {\n constructor() {\n this.scanListener = null;\n this.eventListeners = new Map();\n this.queue = getQueue(true);\n }\n enableQueue() {\n this.queue = getQueue(true);\n }\n disableQueue() {\n this.queue = getQueue(false);\n }\n async initialize(options) {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n /**\n * Reports whether BLE is enabled on this device.\n * Always returns `true` on **web**.\n * @deprecated Use `isEnabled` instead.\n */\n async getEnabled() {\n return this.isEnabled();\n }\n async isEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n async enable() {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n async disable() {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n async startEnabledNotifications(callback) {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n async stopEnabledNotifications() {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n async isLocationEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n async openLocationSettings() {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n async openBluetoothSettings() {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n async openAppSettings() {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n async setDisplayStrings(displayStrings) {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n async requestDevice(options) {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n async requestLEScan(options, callback) {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal) => {\n const result = Object.assign(Object.assign({}, resultInternal), { manufacturerData: this.convertObject(resultInternal.manufacturerData), serviceData: this.convertObject(resultInternal.serviceData), rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined });\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n async stopLEScan() {\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n async getDevices(deviceIds) {\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n async getConnectedDevices(services) {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n async connect(deviceId, onDisconnect, options) {\n await this.queue(async () => {\n var _a;\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect(Object.assign({ deviceId }, options));\n });\n }\n async createBond(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.createBond({ deviceId });\n });\n }\n async isBonded(deviceId) {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n async disconnect(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n async getServices(deviceId) {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n async discoverServices(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n async getMtu(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n async requestConnectionPriority(deviceId, connectionPriority) {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n async readRssi(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n async read(deviceId, service, characteristic, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read(Object.assign({ deviceId,\n service,\n characteristic }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async write(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async writeWithoutResponse(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async readDescriptor(deviceId, service, characteristic, descriptor, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async writeDescriptor(deviceId, service, characteristic, descriptor, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor, value: writeValue }, options));\n });\n }\n async startNotifications(deviceId, service, characteristic, callback) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (event) => {\n callback(this.convertValue(event === null || event === void 0 ? void 0 : event.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n async stopNotifications(deviceId, service, characteristic) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n validateRequestBleDeviceOptions(options) {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n convertValue(value) {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n }\n else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n convertObject(obj) {\n if (obj === undefined) {\n return undefined;\n }\n const result = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\nexport const BleClient = new BleClientClass();\n//# sourceMappingURL=bleClient.js.map","export async function runWithTimeout(promise, time, exception) {\n let timer;\n return Promise.race([\n promise,\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(exception), time);\n }),\n ]).finally(() => clearTimeout(timer));\n}\n//# sourceMappingURL=timeout.js.map","import { WebPlugin } from '@capacitor/core';\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport { runWithTimeout } from './timeout';\nexport class BluetoothLeWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.deviceMap = new Map();\n this.discoveredDevices = new Map();\n this.scan = null;\n this.DEFAULT_CONNECTION_TIMEOUT = 10000;\n this.onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n this.onDisconnectedCallback = this.onDisconnected.bind(this);\n this.onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n }\n async initialize() {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n async isEnabled() {\n // not available on web\n return { value: true };\n }\n async enable() {\n throw this.unavailable('enable is not available on web.');\n }\n async disable() {\n throw this.unavailable('disable is not available on web.');\n }\n async startEnabledNotifications() {\n // not available on web\n }\n async stopEnabledNotifications() {\n // not available on web\n }\n async isLocationEnabled() {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n async openLocationSettings() {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n async openBluetoothSettings() {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n async openAppSettings() {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n async setDisplayStrings() {\n // not available on web\n }\n async requestDevice(options) {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options === null || options === void 0 ? void 0 : options.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n async requestLEScan(options) {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map();\n navigator.bluetooth.removeEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options === null || options === void 0 ? void 0 : options.allowDuplicates,\n });\n }\n onAdvertisementReceived(event) {\n var _a, _b;\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a === void 0 ? void 0 : _a.allowDuplicates)) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: (_b = event.uuids) === null || _b === void 0 ? void 0 : _b.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n async stopLEScan() {\n var _a;\n if ((_a = this.scan) === null || _a === void 0 ? void 0 : _a.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n async getDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices.map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getConnectedDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n var _a;\n return (_a = device.gatt) === null || _a === void 0 ? void 0 : _a.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async connect(options) {\n var _a, _b;\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n }\n catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await ((_b = device.gatt) === null || _b === void 0 ? void 0 : _b.disconnect());\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n }\n else {\n throw error;\n }\n }\n }\n onDisconnected(event) {\n const deviceId = event.target.id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n async createBond(_options) {\n throw this.unavailable('createBond is not available on web.');\n }\n async isBonded(_options) {\n throw this.unavailable('isBonded is not available on web.');\n }\n async disconnect(options) {\n var _a;\n (_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n async getServices(options) {\n var _a, _b;\n const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryServices()))) !== null && _b !== void 0 ? _b : [];\n const bleServices = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n async getDescriptors(characteristic) {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n }\n catch (_a) {\n return [];\n }\n }\n getProperties(characteristic) {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n async getCharacteristic(options) {\n var _a;\n const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryService(options === null || options === void 0 ? void 0 : options.service));\n return service === null || service === void 0 ? void 0 : service.getCharacteristic(options === null || options === void 0 ? void 0 : options.characteristic);\n }\n async getDescriptor(options) {\n const characteristic = await this.getCharacteristic(options);\n return characteristic === null || characteristic === void 0 ? void 0 : characteristic.getDescriptor(options === null || options === void 0 ? void 0 : options.descriptor);\n }\n async discoverServices(_options) {\n throw this.unavailable('discoverServices is not available on web.');\n }\n async getMtu(_options) {\n throw this.unavailable('getMtu is not available on web.');\n }\n async requestConnectionPriority(_options) {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n async readRssi(_options) {\n throw this.unavailable('readRssi is not available on web.');\n }\n async read(options) {\n const characteristic = await this.getCharacteristic(options);\n const value = await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.readValue());\n return { value };\n }\n async write(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithResponse(dataView));\n }\n async writeWithoutResponse(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithoutResponse(dataView));\n }\n async readDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n const value = await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.readValue());\n return { value };\n }\n async writeDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.writeValue(dataView));\n }\n async startNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.startNotifications());\n }\n onCharacteristicValueChanged(event) {\n var _a, _b;\n const characteristic = event.target;\n const key = `notification|${(_a = characteristic.service) === null || _a === void 0 ? void 0 : _a.device.id}|${(_b = characteristic.service) === null || _b === void 0 ? void 0 : _b.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n async stopNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.stopNotifications());\n }\n getFilters(options) {\n var _a;\n const filters = [];\n for (const service of (_a = options === null || options === void 0 ? void 0 : options.services) !== null && _a !== void 0 ? _a : []) {\n filters.push({\n services: [service],\n name: options === null || options === void 0 ? void 0 : options.name,\n namePrefix: options === null || options === void 0 ? void 0 : options.namePrefix,\n });\n }\n if (((options === null || options === void 0 ? void 0 : options.name) || (options === null || options === void 0 ? void 0 : options.namePrefix)) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n getDeviceFromMap(deviceId) {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n getBleDevice(device) {\n var _a;\n const bleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: (_a = device.name) !== null && _a !== void 0 ? _a : undefined,\n };\n return bleDevice;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["ScanMode","ConnectionPriority","registerPlugin","throat","Capacitor","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/conversion.js","esm/plugin.js","esm/queue.js","esm/validators.js","esm/bleClient.js","esm/timeout.js","esm/web.js"],"sourcesContent":["/**\n * Android scan mode\n */\nexport var ScanMode;\n(function (ScanMode) {\n /**\n * Perform Bluetooth LE scan in low power mode. This mode is enforced if the scanning application is not in foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_POWER\"] = 0] = \"SCAN_MODE_LOW_POWER\";\n /**\n * Perform Bluetooth LE scan in balanced power mode. (default) Scan results are returned at a rate that provides a good trade-off between scan frequency and power consumption.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_BALANCED\n */\n ScanMode[ScanMode[\"SCAN_MODE_BALANCED\"] = 1] = \"SCAN_MODE_BALANCED\";\n /**\n * Scan using highest duty cycle. It's recommended to only use this mode when the application is running in the foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_LATENCY\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_LATENCY\"] = 2] = \"SCAN_MODE_LOW_LATENCY\";\n})(ScanMode || (ScanMode = {}));\n/**\n * Android connection priority used in `requestConnectionPriority`\n */\nexport var ConnectionPriority;\n(function (ConnectionPriority) {\n /**\n * Use the connection parameters recommended by the Bluetooth SIG. This is the default value if no connection parameter update is requested.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_BALANCED\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_BALANCED\"] = 0] = \"CONNECTION_PRIORITY_BALANCED\";\n /**\n * Request a high priority, low latency connection. An application should only request high priority connection parameters to transfer large amounts of data over LE quickly. Once the transfer is complete, the application should request CONNECTION_PRIORITY_BALANCED connection parameters to reduce energy use.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_HIGH\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_HIGH\"] = 1] = \"CONNECTION_PRIORITY_HIGH\";\n /**\n * Request low power, reduced data rate connection parameters.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_LOW_POWER\"] = 2] = \"CONNECTION_PRIORITY_LOW_POWER\";\n})(ConnectionPriority || (ConnectionPriority = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Convert an array of numbers into a DataView.\n */\nexport function numbersToDataView(value) {\n return new DataView(Uint8Array.from(value).buffer);\n}\n/**\n * Convert a DataView into an array of numbers.\n */\nexport function dataViewToNumbers(value) {\n return Array.from(new Uint8Array(value.buffer));\n}\n/**\n * Convert a string into a DataView.\n */\nexport function textToDataView(value) {\n return numbersToDataView(value.split('').map((s) => s.charCodeAt(0)));\n}\n/**\n * Convert a DataView into a string.\n */\nexport function dataViewToText(value) {\n return String.fromCharCode(...dataViewToNumbers(value));\n}\n/**\n * Convert a 16 bit UUID into a 128 bit UUID string\n * @param value number, e.g. 0x180d\n * @return string, e.g. '0000180d-0000-1000-8000-00805f9b34fb'\n */\nexport function numberToUUID(value) {\n return `0000${value.toString(16).padStart(4, '0')}-0000-1000-8000-00805f9b34fb`;\n}\nexport function hexStringToDataView(value) {\n const numbers = value\n .trim()\n .split(' ')\n .filter((e) => e !== '')\n .map((s) => parseInt(s, 16));\n return numbersToDataView(numbers);\n}\nexport function dataViewToHexString(value) {\n return dataViewToNumbers(value)\n .map((n) => {\n let s = n.toString(16);\n if (s.length == 1) {\n s = '0' + s;\n }\n return s;\n })\n .join(' ');\n}\nexport function webUUIDToString(uuid) {\n if (typeof uuid === 'string') {\n return uuid;\n }\n else if (typeof uuid === 'number') {\n return numberToUUID(uuid);\n }\n else {\n throw new Error('Invalid UUID');\n }\n}\nexport function mapToObject(map) {\n const obj = {};\n if (!map) {\n return undefined;\n }\n map.forEach((value, key) => {\n obj[key.toString()] = value;\n });\n return obj;\n}\n//# sourceMappingURL=conversion.js.map","import { registerPlugin } from '@capacitor/core';\nexport const BluetoothLe = registerPlugin('BluetoothLe', {\n web: () => import('./web').then((m) => new m.BluetoothLeWeb()),\n});\n//# sourceMappingURL=plugin.js.map","import throat from 'throat';\nexport function getQueue(enabled) {\n if (enabled) {\n return throat(1);\n }\n else {\n return (fn) => fn();\n }\n}\n//# sourceMappingURL=queue.js.map","export function parseUUID(uuid) {\n if (typeof uuid !== 'string') {\n throw new Error(`Invalid UUID type ${typeof uuid}. Expected string.`);\n }\n uuid = uuid.toLowerCase();\n const is128BitUuid = uuid.search(/^[0-9a-f]{8}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{12}$/) >= 0;\n if (!is128BitUuid) {\n throw new Error(`Invalid UUID format ${uuid}. Expected 128 bit string (e.g. \"0000180d-0000-1000-8000-00805f9b34fb\").`);\n }\n return uuid;\n}\n//# sourceMappingURL=validators.js.map","import { Capacitor } from '@capacitor/core';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\nclass BleClientClass {\n constructor() {\n this.scanListener = null;\n this.eventListeners = new Map();\n this.queue = getQueue(true);\n }\n enableQueue() {\n this.queue = getQueue(true);\n }\n disableQueue() {\n this.queue = getQueue(false);\n }\n async initialize(options) {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n /**\n * Reports whether BLE is enabled on this device.\n * Always returns `true` on **web**.\n * @deprecated Use `isEnabled` instead.\n */\n async getEnabled() {\n return this.isEnabled();\n }\n async isEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n async enable() {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n async disable() {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n async startEnabledNotifications(callback) {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n async stopEnabledNotifications() {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n async isLocationEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n async openLocationSettings() {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n async openBluetoothSettings() {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n async openAppSettings() {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n async setDisplayStrings(displayStrings) {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n async requestDevice(options) {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n async requestLEScan(options, callback) {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal) => {\n const result = Object.assign(Object.assign({}, resultInternal), { manufacturerData: this.convertObject(resultInternal.manufacturerData), serviceData: this.convertObject(resultInternal.serviceData), rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined });\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n async stopLEScan() {\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n async getDevices(deviceIds) {\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n async getConnectedDevices(services) {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n async connect(deviceId, onDisconnect, options) {\n await this.queue(async () => {\n var _a;\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect(Object.assign({ deviceId }, options));\n });\n }\n async createBond(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.createBond({ deviceId });\n });\n }\n async isBonded(deviceId) {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n async disconnect(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n async getServices(deviceId) {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n async discoverServices(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n async getMtu(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n async requestConnectionPriority(deviceId, connectionPriority) {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n async readRssi(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n async read(deviceId, service, characteristic, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read(Object.assign({ deviceId,\n service,\n characteristic }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async write(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async writeWithoutResponse(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async readDescriptor(deviceId, service, characteristic, descriptor, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async writeDescriptor(deviceId, service, characteristic, descriptor, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor, value: writeValue }, options));\n });\n }\n async startNotifications(deviceId, service, characteristic, callback) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (event) => {\n callback(this.convertValue(event === null || event === void 0 ? void 0 : event.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n async stopNotifications(deviceId, service, characteristic) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n validateRequestBleDeviceOptions(options) {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n convertValue(value) {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n }\n else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n convertObject(obj) {\n if (obj === undefined) {\n return undefined;\n }\n const result = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\nexport const BleClient = new BleClientClass();\n//# sourceMappingURL=bleClient.js.map","export async function runWithTimeout(promise, time, exception) {\n let timer;\n return Promise.race([\n promise,\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(exception), time);\n }),\n ]).finally(() => clearTimeout(timer));\n}\n//# sourceMappingURL=timeout.js.map","import { WebPlugin } from '@capacitor/core';\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport { runWithTimeout } from './timeout';\nexport class BluetoothLeWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.deviceMap = new Map();\n this.discoveredDevices = new Map();\n this.scan = null;\n this.DEFAULT_CONNECTION_TIMEOUT = 10000;\n this.onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n this.onDisconnectedCallback = this.onDisconnected.bind(this);\n this.onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n }\n async initialize() {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n async isEnabled() {\n // not available on web\n return { value: true };\n }\n async enable() {\n throw this.unavailable('enable is not available on web.');\n }\n async disable() {\n throw this.unavailable('disable is not available on web.');\n }\n async startEnabledNotifications() {\n // not available on web\n }\n async stopEnabledNotifications() {\n // not available on web\n }\n async isLocationEnabled() {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n async openLocationSettings() {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n async openBluetoothSettings() {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n async openAppSettings() {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n async setDisplayStrings() {\n // not available on web\n }\n async requestDevice(options) {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options === null || options === void 0 ? void 0 : options.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n async requestLEScan(options) {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map();\n navigator.bluetooth.removeEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options === null || options === void 0 ? void 0 : options.allowDuplicates,\n });\n }\n onAdvertisementReceived(event) {\n var _a, _b;\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a === void 0 ? void 0 : _a.allowDuplicates)) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: (_b = event.uuids) === null || _b === void 0 ? void 0 : _b.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n async stopLEScan() {\n var _a;\n if ((_a = this.scan) === null || _a === void 0 ? void 0 : _a.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n async getDevices(options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => options.deviceIds.includes(device.id))\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getConnectedDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n var _a;\n return (_a = device.gatt) === null || _a === void 0 ? void 0 : _a.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async connect(options) {\n var _a, _b;\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n }\n catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await ((_b = device.gatt) === null || _b === void 0 ? void 0 : _b.disconnect());\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n }\n else {\n throw error;\n }\n }\n }\n onDisconnected(event) {\n const deviceId = event.target.id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n async createBond(_options) {\n throw this.unavailable('createBond is not available on web.');\n }\n async isBonded(_options) {\n throw this.unavailable('isBonded is not available on web.');\n }\n async disconnect(options) {\n var _a;\n (_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n async getServices(options) {\n var _a, _b;\n const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryServices()))) !== null && _b !== void 0 ? _b : [];\n const bleServices = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n async getDescriptors(characteristic) {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n }\n catch (_a) {\n return [];\n }\n }\n getProperties(characteristic) {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n async getCharacteristic(options) {\n var _a;\n const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryService(options === null || options === void 0 ? void 0 : options.service));\n return service === null || service === void 0 ? void 0 : service.getCharacteristic(options === null || options === void 0 ? void 0 : options.characteristic);\n }\n async getDescriptor(options) {\n const characteristic = await this.getCharacteristic(options);\n return characteristic === null || characteristic === void 0 ? void 0 : characteristic.getDescriptor(options === null || options === void 0 ? void 0 : options.descriptor);\n }\n async discoverServices(_options) {\n throw this.unavailable('discoverServices is not available on web.');\n }\n async getMtu(_options) {\n throw this.unavailable('getMtu is not available on web.');\n }\n async requestConnectionPriority(_options) {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n async readRssi(_options) {\n throw this.unavailable('readRssi is not available on web.');\n }\n async read(options) {\n const characteristic = await this.getCharacteristic(options);\n const value = await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.readValue());\n return { value };\n }\n async write(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithResponse(dataView));\n }\n async writeWithoutResponse(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithoutResponse(dataView));\n }\n async readDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n const value = await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.readValue());\n return { value };\n }\n async writeDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.writeValue(dataView));\n }\n async startNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.startNotifications());\n }\n onCharacteristicValueChanged(event) {\n var _a, _b;\n const characteristic = event.target;\n const key = `notification|${(_a = characteristic.service) === null || _a === void 0 ? void 0 : _a.device.id}|${(_b = characteristic.service) === null || _b === void 0 ? void 0 : _b.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n async stopNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.stopNotifications());\n }\n getFilters(options) {\n var _a;\n const filters = [];\n for (const service of (_a = options === null || options === void 0 ? void 0 : options.services) !== null && _a !== void 0 ? _a : []) {\n filters.push({\n services: [service],\n name: options === null || options === void 0 ? void 0 : options.name,\n namePrefix: options === null || options === void 0 ? void 0 : options.namePrefix,\n });\n }\n if (((options === null || options === void 0 ? void 0 : options.name) || (options === null || options === void 0 ? void 0 : options.namePrefix)) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n getDeviceFromMap(deviceId) {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n getBleDevice(device) {\n var _a;\n const bleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: (_a = device.name) !== null && _a !== void 0 ? _a : undefined,\n };\n return bleDevice;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["ScanMode","ConnectionPriority","registerPlugin","throat","Capacitor","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -597,9 +597,11 @@ var capacitorCommunityBluetoothLe = (function (exports, core, throat) {
597
597
  }
598
598
  this.scan = null;
599
599
  }
600
- async getDevices(_options) {
600
+ async getDevices(options) {
601
601
  const devices = await navigator.bluetooth.getDevices();
602
- const bleDevices = devices.map((device) => {
602
+ const bleDevices = devices
603
+ .filter((device) => options.deviceIds.includes(device.id))
604
+ .map((device) => {
603
605
  this.deviceMap.set(device.id, device);
604
606
  const bleDevice = this.getBleDevice(device);
605
607
  return bleDevice;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/conversion.js","esm/plugin.js","esm/queue.js","esm/validators.js","esm/bleClient.js","esm/timeout.js","esm/web.js"],"sourcesContent":["/**\n * Android scan mode\n */\nexport var ScanMode;\n(function (ScanMode) {\n /**\n * Perform Bluetooth LE scan in low power mode. This mode is enforced if the scanning application is not in foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_POWER\"] = 0] = \"SCAN_MODE_LOW_POWER\";\n /**\n * Perform Bluetooth LE scan in balanced power mode. (default) Scan results are returned at a rate that provides a good trade-off between scan frequency and power consumption.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_BALANCED\n */\n ScanMode[ScanMode[\"SCAN_MODE_BALANCED\"] = 1] = \"SCAN_MODE_BALANCED\";\n /**\n * Scan using highest duty cycle. It's recommended to only use this mode when the application is running in the foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_LATENCY\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_LATENCY\"] = 2] = \"SCAN_MODE_LOW_LATENCY\";\n})(ScanMode || (ScanMode = {}));\n/**\n * Android connection priority used in `requestConnectionPriority`\n */\nexport var ConnectionPriority;\n(function (ConnectionPriority) {\n /**\n * Use the connection parameters recommended by the Bluetooth SIG. This is the default value if no connection parameter update is requested.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_BALANCED\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_BALANCED\"] = 0] = \"CONNECTION_PRIORITY_BALANCED\";\n /**\n * Request a high priority, low latency connection. An application should only request high priority connection parameters to transfer large amounts of data over LE quickly. Once the transfer is complete, the application should request CONNECTION_PRIORITY_BALANCED connection parameters to reduce energy use.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_HIGH\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_HIGH\"] = 1] = \"CONNECTION_PRIORITY_HIGH\";\n /**\n * Request low power, reduced data rate connection parameters.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_LOW_POWER\"] = 2] = \"CONNECTION_PRIORITY_LOW_POWER\";\n})(ConnectionPriority || (ConnectionPriority = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Convert an array of numbers into a DataView.\n */\nexport function numbersToDataView(value) {\n return new DataView(Uint8Array.from(value).buffer);\n}\n/**\n * Convert a DataView into an array of numbers.\n */\nexport function dataViewToNumbers(value) {\n return Array.from(new Uint8Array(value.buffer));\n}\n/**\n * Convert a string into a DataView.\n */\nexport function textToDataView(value) {\n return numbersToDataView(value.split('').map((s) => s.charCodeAt(0)));\n}\n/**\n * Convert a DataView into a string.\n */\nexport function dataViewToText(value) {\n return String.fromCharCode(...dataViewToNumbers(value));\n}\n/**\n * Convert a 16 bit UUID into a 128 bit UUID string\n * @param value number, e.g. 0x180d\n * @return string, e.g. '0000180d-0000-1000-8000-00805f9b34fb'\n */\nexport function numberToUUID(value) {\n return `0000${value.toString(16).padStart(4, '0')}-0000-1000-8000-00805f9b34fb`;\n}\nexport function hexStringToDataView(value) {\n const numbers = value\n .trim()\n .split(' ')\n .filter((e) => e !== '')\n .map((s) => parseInt(s, 16));\n return numbersToDataView(numbers);\n}\nexport function dataViewToHexString(value) {\n return dataViewToNumbers(value)\n .map((n) => {\n let s = n.toString(16);\n if (s.length == 1) {\n s = '0' + s;\n }\n return s;\n })\n .join(' ');\n}\nexport function webUUIDToString(uuid) {\n if (typeof uuid === 'string') {\n return uuid;\n }\n else if (typeof uuid === 'number') {\n return numberToUUID(uuid);\n }\n else {\n throw new Error('Invalid UUID');\n }\n}\nexport function mapToObject(map) {\n const obj = {};\n if (!map) {\n return undefined;\n }\n map.forEach((value, key) => {\n obj[key.toString()] = value;\n });\n return obj;\n}\n//# sourceMappingURL=conversion.js.map","import { registerPlugin } from '@capacitor/core';\nexport const BluetoothLe = registerPlugin('BluetoothLe', {\n web: () => import('./web').then((m) => new m.BluetoothLeWeb()),\n});\n//# sourceMappingURL=plugin.js.map","import throat from 'throat';\nexport function getQueue(enabled) {\n if (enabled) {\n return throat(1);\n }\n else {\n return (fn) => fn();\n }\n}\n//# sourceMappingURL=queue.js.map","export function parseUUID(uuid) {\n if (typeof uuid !== 'string') {\n throw new Error(`Invalid UUID type ${typeof uuid}. Expected string.`);\n }\n uuid = uuid.toLowerCase();\n const is128BitUuid = uuid.search(/^[0-9a-f]{8}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{12}$/) >= 0;\n if (!is128BitUuid) {\n throw new Error(`Invalid UUID format ${uuid}. Expected 128 bit string (e.g. \"0000180d-0000-1000-8000-00805f9b34fb\").`);\n }\n return uuid;\n}\n//# sourceMappingURL=validators.js.map","import { Capacitor } from '@capacitor/core';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\nclass BleClientClass {\n constructor() {\n this.scanListener = null;\n this.eventListeners = new Map();\n this.queue = getQueue(true);\n }\n enableQueue() {\n this.queue = getQueue(true);\n }\n disableQueue() {\n this.queue = getQueue(false);\n }\n async initialize(options) {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n /**\n * Reports whether BLE is enabled on this device.\n * Always returns `true` on **web**.\n * @deprecated Use `isEnabled` instead.\n */\n async getEnabled() {\n return this.isEnabled();\n }\n async isEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n async enable() {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n async disable() {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n async startEnabledNotifications(callback) {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n async stopEnabledNotifications() {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n async isLocationEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n async openLocationSettings() {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n async openBluetoothSettings() {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n async openAppSettings() {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n async setDisplayStrings(displayStrings) {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n async requestDevice(options) {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n async requestLEScan(options, callback) {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal) => {\n const result = Object.assign(Object.assign({}, resultInternal), { manufacturerData: this.convertObject(resultInternal.manufacturerData), serviceData: this.convertObject(resultInternal.serviceData), rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined });\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n async stopLEScan() {\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n async getDevices(deviceIds) {\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n async getConnectedDevices(services) {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n async connect(deviceId, onDisconnect, options) {\n await this.queue(async () => {\n var _a;\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect(Object.assign({ deviceId }, options));\n });\n }\n async createBond(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.createBond({ deviceId });\n });\n }\n async isBonded(deviceId) {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n async disconnect(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n async getServices(deviceId) {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n async discoverServices(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n async getMtu(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n async requestConnectionPriority(deviceId, connectionPriority) {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n async readRssi(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n async read(deviceId, service, characteristic, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read(Object.assign({ deviceId,\n service,\n characteristic }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async write(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async writeWithoutResponse(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async readDescriptor(deviceId, service, characteristic, descriptor, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async writeDescriptor(deviceId, service, characteristic, descriptor, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor, value: writeValue }, options));\n });\n }\n async startNotifications(deviceId, service, characteristic, callback) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (event) => {\n callback(this.convertValue(event === null || event === void 0 ? void 0 : event.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n async stopNotifications(deviceId, service, characteristic) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n validateRequestBleDeviceOptions(options) {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n convertValue(value) {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n }\n else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n convertObject(obj) {\n if (obj === undefined) {\n return undefined;\n }\n const result = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\nexport const BleClient = new BleClientClass();\n//# sourceMappingURL=bleClient.js.map","export async function runWithTimeout(promise, time, exception) {\n let timer;\n return Promise.race([\n promise,\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(exception), time);\n }),\n ]).finally(() => clearTimeout(timer));\n}\n//# sourceMappingURL=timeout.js.map","import { WebPlugin } from '@capacitor/core';\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport { runWithTimeout } from './timeout';\nexport class BluetoothLeWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.deviceMap = new Map();\n this.discoveredDevices = new Map();\n this.scan = null;\n this.DEFAULT_CONNECTION_TIMEOUT = 10000;\n this.onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n this.onDisconnectedCallback = this.onDisconnected.bind(this);\n this.onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n }\n async initialize() {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n async isEnabled() {\n // not available on web\n return { value: true };\n }\n async enable() {\n throw this.unavailable('enable is not available on web.');\n }\n async disable() {\n throw this.unavailable('disable is not available on web.');\n }\n async startEnabledNotifications() {\n // not available on web\n }\n async stopEnabledNotifications() {\n // not available on web\n }\n async isLocationEnabled() {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n async openLocationSettings() {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n async openBluetoothSettings() {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n async openAppSettings() {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n async setDisplayStrings() {\n // not available on web\n }\n async requestDevice(options) {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options === null || options === void 0 ? void 0 : options.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n async requestLEScan(options) {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map();\n navigator.bluetooth.removeEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options === null || options === void 0 ? void 0 : options.allowDuplicates,\n });\n }\n onAdvertisementReceived(event) {\n var _a, _b;\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a === void 0 ? void 0 : _a.allowDuplicates)) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: (_b = event.uuids) === null || _b === void 0 ? void 0 : _b.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n async stopLEScan() {\n var _a;\n if ((_a = this.scan) === null || _a === void 0 ? void 0 : _a.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n async getDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices.map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getConnectedDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n var _a;\n return (_a = device.gatt) === null || _a === void 0 ? void 0 : _a.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async connect(options) {\n var _a, _b;\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n }\n catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await ((_b = device.gatt) === null || _b === void 0 ? void 0 : _b.disconnect());\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n }\n else {\n throw error;\n }\n }\n }\n onDisconnected(event) {\n const deviceId = event.target.id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n async createBond(_options) {\n throw this.unavailable('createBond is not available on web.');\n }\n async isBonded(_options) {\n throw this.unavailable('isBonded is not available on web.');\n }\n async disconnect(options) {\n var _a;\n (_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n async getServices(options) {\n var _a, _b;\n const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryServices()))) !== null && _b !== void 0 ? _b : [];\n const bleServices = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n async getDescriptors(characteristic) {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n }\n catch (_a) {\n return [];\n }\n }\n getProperties(characteristic) {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n async getCharacteristic(options) {\n var _a;\n const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryService(options === null || options === void 0 ? void 0 : options.service));\n return service === null || service === void 0 ? void 0 : service.getCharacteristic(options === null || options === void 0 ? void 0 : options.characteristic);\n }\n async getDescriptor(options) {\n const characteristic = await this.getCharacteristic(options);\n return characteristic === null || characteristic === void 0 ? void 0 : characteristic.getDescriptor(options === null || options === void 0 ? void 0 : options.descriptor);\n }\n async discoverServices(_options) {\n throw this.unavailable('discoverServices is not available on web.');\n }\n async getMtu(_options) {\n throw this.unavailable('getMtu is not available on web.');\n }\n async requestConnectionPriority(_options) {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n async readRssi(_options) {\n throw this.unavailable('readRssi is not available on web.');\n }\n async read(options) {\n const characteristic = await this.getCharacteristic(options);\n const value = await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.readValue());\n return { value };\n }\n async write(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithResponse(dataView));\n }\n async writeWithoutResponse(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithoutResponse(dataView));\n }\n async readDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n const value = await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.readValue());\n return { value };\n }\n async writeDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.writeValue(dataView));\n }\n async startNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.startNotifications());\n }\n onCharacteristicValueChanged(event) {\n var _a, _b;\n const characteristic = event.target;\n const key = `notification|${(_a = characteristic.service) === null || _a === void 0 ? void 0 : _a.device.id}|${(_b = characteristic.service) === null || _b === void 0 ? void 0 : _b.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n async stopNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.stopNotifications());\n }\n getFilters(options) {\n var _a;\n const filters = [];\n for (const service of (_a = options === null || options === void 0 ? void 0 : options.services) !== null && _a !== void 0 ? _a : []) {\n filters.push({\n services: [service],\n name: options === null || options === void 0 ? void 0 : options.name,\n namePrefix: options === null || options === void 0 ? void 0 : options.namePrefix,\n });\n }\n if (((options === null || options === void 0 ? void 0 : options.name) || (options === null || options === void 0 ? void 0 : options.namePrefix)) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n getDeviceFromMap(deviceId) {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n getBleDevice(device) {\n var _a;\n const bleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: (_a = device.name) !== null && _a !== void 0 ? _a : undefined,\n };\n return bleDevice;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["ScanMode","ConnectionPriority","registerPlugin","throat","Capacitor","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/conversion.js","esm/plugin.js","esm/queue.js","esm/validators.js","esm/bleClient.js","esm/timeout.js","esm/web.js"],"sourcesContent":["/**\n * Android scan mode\n */\nexport var ScanMode;\n(function (ScanMode) {\n /**\n * Perform Bluetooth LE scan in low power mode. This mode is enforced if the scanning application is not in foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_POWER\"] = 0] = \"SCAN_MODE_LOW_POWER\";\n /**\n * Perform Bluetooth LE scan in balanced power mode. (default) Scan results are returned at a rate that provides a good trade-off between scan frequency and power consumption.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_BALANCED\n */\n ScanMode[ScanMode[\"SCAN_MODE_BALANCED\"] = 1] = \"SCAN_MODE_BALANCED\";\n /**\n * Scan using highest duty cycle. It's recommended to only use this mode when the application is running in the foreground.\n * https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_LATENCY\n */\n ScanMode[ScanMode[\"SCAN_MODE_LOW_LATENCY\"] = 2] = \"SCAN_MODE_LOW_LATENCY\";\n})(ScanMode || (ScanMode = {}));\n/**\n * Android connection priority used in `requestConnectionPriority`\n */\nexport var ConnectionPriority;\n(function (ConnectionPriority) {\n /**\n * Use the connection parameters recommended by the Bluetooth SIG. This is the default value if no connection parameter update is requested.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_BALANCED\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_BALANCED\"] = 0] = \"CONNECTION_PRIORITY_BALANCED\";\n /**\n * Request a high priority, low latency connection. An application should only request high priority connection parameters to transfer large amounts of data over LE quickly. Once the transfer is complete, the application should request CONNECTION_PRIORITY_BALANCED connection parameters to reduce energy use.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_HIGH\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_HIGH\"] = 1] = \"CONNECTION_PRIORITY_HIGH\";\n /**\n * Request low power, reduced data rate connection parameters.\n * https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER\n */\n ConnectionPriority[ConnectionPriority[\"CONNECTION_PRIORITY_LOW_POWER\"] = 2] = \"CONNECTION_PRIORITY_LOW_POWER\";\n})(ConnectionPriority || (ConnectionPriority = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Convert an array of numbers into a DataView.\n */\nexport function numbersToDataView(value) {\n return new DataView(Uint8Array.from(value).buffer);\n}\n/**\n * Convert a DataView into an array of numbers.\n */\nexport function dataViewToNumbers(value) {\n return Array.from(new Uint8Array(value.buffer));\n}\n/**\n * Convert a string into a DataView.\n */\nexport function textToDataView(value) {\n return numbersToDataView(value.split('').map((s) => s.charCodeAt(0)));\n}\n/**\n * Convert a DataView into a string.\n */\nexport function dataViewToText(value) {\n return String.fromCharCode(...dataViewToNumbers(value));\n}\n/**\n * Convert a 16 bit UUID into a 128 bit UUID string\n * @param value number, e.g. 0x180d\n * @return string, e.g. '0000180d-0000-1000-8000-00805f9b34fb'\n */\nexport function numberToUUID(value) {\n return `0000${value.toString(16).padStart(4, '0')}-0000-1000-8000-00805f9b34fb`;\n}\nexport function hexStringToDataView(value) {\n const numbers = value\n .trim()\n .split(' ')\n .filter((e) => e !== '')\n .map((s) => parseInt(s, 16));\n return numbersToDataView(numbers);\n}\nexport function dataViewToHexString(value) {\n return dataViewToNumbers(value)\n .map((n) => {\n let s = n.toString(16);\n if (s.length == 1) {\n s = '0' + s;\n }\n return s;\n })\n .join(' ');\n}\nexport function webUUIDToString(uuid) {\n if (typeof uuid === 'string') {\n return uuid;\n }\n else if (typeof uuid === 'number') {\n return numberToUUID(uuid);\n }\n else {\n throw new Error('Invalid UUID');\n }\n}\nexport function mapToObject(map) {\n const obj = {};\n if (!map) {\n return undefined;\n }\n map.forEach((value, key) => {\n obj[key.toString()] = value;\n });\n return obj;\n}\n//# sourceMappingURL=conversion.js.map","import { registerPlugin } from '@capacitor/core';\nexport const BluetoothLe = registerPlugin('BluetoothLe', {\n web: () => import('./web').then((m) => new m.BluetoothLeWeb()),\n});\n//# sourceMappingURL=plugin.js.map","import throat from 'throat';\nexport function getQueue(enabled) {\n if (enabled) {\n return throat(1);\n }\n else {\n return (fn) => fn();\n }\n}\n//# sourceMappingURL=queue.js.map","export function parseUUID(uuid) {\n if (typeof uuid !== 'string') {\n throw new Error(`Invalid UUID type ${typeof uuid}. Expected string.`);\n }\n uuid = uuid.toLowerCase();\n const is128BitUuid = uuid.search(/^[0-9a-f]{8}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{4}\\b-[0-9a-f]{12}$/) >= 0;\n if (!is128BitUuid) {\n throw new Error(`Invalid UUID format ${uuid}. Expected 128 bit string (e.g. \"0000180d-0000-1000-8000-00805f9b34fb\").`);\n }\n return uuid;\n}\n//# sourceMappingURL=validators.js.map","import { Capacitor } from '@capacitor/core';\nimport { dataViewToHexString, hexStringToDataView } from './conversion';\nimport { BluetoothLe } from './plugin';\nimport { getQueue } from './queue';\nimport { parseUUID } from './validators';\nclass BleClientClass {\n constructor() {\n this.scanListener = null;\n this.eventListeners = new Map();\n this.queue = getQueue(true);\n }\n enableQueue() {\n this.queue = getQueue(true);\n }\n disableQueue() {\n this.queue = getQueue(false);\n }\n async initialize(options) {\n await this.queue(async () => {\n await BluetoothLe.initialize(options);\n });\n }\n /**\n * Reports whether BLE is enabled on this device.\n * Always returns `true` on **web**.\n * @deprecated Use `isEnabled` instead.\n */\n async getEnabled() {\n return this.isEnabled();\n }\n async isEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isEnabled();\n return result.value;\n });\n return enabled;\n }\n async enable() {\n await this.queue(async () => {\n await BluetoothLe.enable();\n });\n }\n async disable() {\n await this.queue(async () => {\n await BluetoothLe.disable();\n });\n }\n async startEnabledNotifications(callback) {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (result) => {\n callback(result.value);\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startEnabledNotifications();\n });\n }\n async stopEnabledNotifications() {\n await this.queue(async () => {\n var _a;\n const key = `onEnabledChanged`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopEnabledNotifications();\n });\n }\n async isLocationEnabled() {\n const enabled = await this.queue(async () => {\n const result = await BluetoothLe.isLocationEnabled();\n return result.value;\n });\n return enabled;\n }\n async openLocationSettings() {\n await this.queue(async () => {\n await BluetoothLe.openLocationSettings();\n });\n }\n async openBluetoothSettings() {\n await this.queue(async () => {\n await BluetoothLe.openBluetoothSettings();\n });\n }\n async openAppSettings() {\n await this.queue(async () => {\n await BluetoothLe.openAppSettings();\n });\n }\n async setDisplayStrings(displayStrings) {\n await this.queue(async () => {\n await BluetoothLe.setDisplayStrings(displayStrings);\n });\n }\n async requestDevice(options) {\n options = options ? this.validateRequestBleDeviceOptions(options) : undefined;\n const result = await this.queue(async () => {\n const device = await BluetoothLe.requestDevice(options);\n return device;\n });\n return result;\n }\n async requestLEScan(options, callback) {\n options = this.validateRequestBleDeviceOptions(options);\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = await BluetoothLe.addListener('onScanResult', (resultInternal) => {\n const result = Object.assign(Object.assign({}, resultInternal), { manufacturerData: this.convertObject(resultInternal.manufacturerData), serviceData: this.convertObject(resultInternal.serviceData), rawAdvertisement: resultInternal.rawAdvertisement\n ? this.convertValue(resultInternal.rawAdvertisement)\n : undefined });\n callback(result);\n });\n await BluetoothLe.requestLEScan(options);\n });\n }\n async stopLEScan() {\n await this.queue(async () => {\n var _a;\n await ((_a = this.scanListener) === null || _a === void 0 ? void 0 : _a.remove());\n this.scanListener = null;\n await BluetoothLe.stopLEScan();\n });\n }\n async getDevices(deviceIds) {\n return this.queue(async () => {\n const result = await BluetoothLe.getDevices({ deviceIds });\n return result.devices;\n });\n }\n async getConnectedDevices(services) {\n if (!Array.isArray(services)) {\n throw new Error('services must be an array');\n }\n services = services.map(parseUUID);\n return this.queue(async () => {\n const result = await BluetoothLe.getConnectedDevices({ services });\n return result.devices;\n });\n }\n async connect(deviceId, onDisconnect, options) {\n await this.queue(async () => {\n var _a;\n if (onDisconnect) {\n const key = `disconnected|${deviceId}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, () => {\n onDisconnect(deviceId);\n });\n this.eventListeners.set(key, listener);\n }\n await BluetoothLe.connect(Object.assign({ deviceId }, options));\n });\n }\n async createBond(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.createBond({ deviceId });\n });\n }\n async isBonded(deviceId) {\n const isBonded = await this.queue(async () => {\n const result = await BluetoothLe.isBonded({ deviceId });\n return result.value;\n });\n return isBonded;\n }\n async disconnect(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.disconnect({ deviceId });\n });\n }\n async getServices(deviceId) {\n const services = await this.queue(async () => {\n const result = await BluetoothLe.getServices({ deviceId });\n return result.services;\n });\n return services;\n }\n async discoverServices(deviceId) {\n await this.queue(async () => {\n await BluetoothLe.discoverServices({ deviceId });\n });\n }\n async getMtu(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.getMtu({ deviceId });\n return result.value;\n });\n return value;\n }\n async requestConnectionPriority(deviceId, connectionPriority) {\n await this.queue(async () => {\n await BluetoothLe.requestConnectionPriority({ deviceId, connectionPriority });\n });\n }\n async readRssi(deviceId) {\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readRssi({ deviceId });\n return parseFloat(result.value);\n });\n return value;\n }\n async read(deviceId, service, characteristic, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.read(Object.assign({ deviceId,\n service,\n characteristic }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async write(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.write(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async writeWithoutResponse(deviceId, service, characteristic, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeWithoutResponse(Object.assign({ deviceId,\n service,\n characteristic, value: writeValue }, options));\n });\n }\n async readDescriptor(deviceId, service, characteristic, descriptor, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n const value = await this.queue(async () => {\n const result = await BluetoothLe.readDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor }, options));\n return this.convertValue(result.value);\n });\n return value;\n }\n async writeDescriptor(deviceId, service, characteristic, descriptor, value, options) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n descriptor = parseUUID(descriptor);\n return this.queue(async () => {\n if (!(value === null || value === void 0 ? void 0 : value.buffer)) {\n throw new Error('Invalid data.');\n }\n let writeValue = value;\n if (Capacitor.getPlatform() !== 'web') {\n // on native we can only write strings\n writeValue = dataViewToHexString(value);\n }\n await BluetoothLe.writeDescriptor(Object.assign({ deviceId,\n service,\n characteristic,\n descriptor, value: writeValue }, options));\n });\n }\n async startNotifications(deviceId, service, characteristic, callback) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n const listener = await BluetoothLe.addListener(key, (event) => {\n callback(this.convertValue(event === null || event === void 0 ? void 0 : event.value));\n });\n this.eventListeners.set(key, listener);\n await BluetoothLe.startNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n async stopNotifications(deviceId, service, characteristic) {\n service = parseUUID(service);\n characteristic = parseUUID(characteristic);\n await this.queue(async () => {\n var _a;\n const key = `notification|${deviceId}|${service}|${characteristic}`;\n await ((_a = this.eventListeners.get(key)) === null || _a === void 0 ? void 0 : _a.remove());\n this.eventListeners.delete(key);\n await BluetoothLe.stopNotifications({\n deviceId,\n service,\n characteristic,\n });\n });\n }\n validateRequestBleDeviceOptions(options) {\n if (options.services) {\n options.services = options.services.map(parseUUID);\n }\n if (options.optionalServices) {\n options.optionalServices = options.optionalServices.map(parseUUID);\n }\n return options;\n }\n convertValue(value) {\n if (typeof value === 'string') {\n return hexStringToDataView(value);\n }\n else if (value === undefined) {\n return new DataView(new ArrayBuffer(0));\n }\n return value;\n }\n convertObject(obj) {\n if (obj === undefined) {\n return undefined;\n }\n const result = {};\n for (const key of Object.keys(obj)) {\n result[key] = this.convertValue(obj[key]);\n }\n return result;\n }\n}\nexport const BleClient = new BleClientClass();\n//# sourceMappingURL=bleClient.js.map","export async function runWithTimeout(promise, time, exception) {\n let timer;\n return Promise.race([\n promise,\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(exception), time);\n }),\n ]).finally(() => clearTimeout(timer));\n}\n//# sourceMappingURL=timeout.js.map","import { WebPlugin } from '@capacitor/core';\nimport { hexStringToDataView, mapToObject, webUUIDToString } from './conversion';\nimport { runWithTimeout } from './timeout';\nexport class BluetoothLeWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.deviceMap = new Map();\n this.discoveredDevices = new Map();\n this.scan = null;\n this.DEFAULT_CONNECTION_TIMEOUT = 10000;\n this.onAdvertisementReceivedCallback = this.onAdvertisementReceived.bind(this);\n this.onDisconnectedCallback = this.onDisconnected.bind(this);\n this.onCharacteristicValueChangedCallback = this.onCharacteristicValueChanged.bind(this);\n }\n async initialize() {\n if (typeof navigator === 'undefined' || !navigator.bluetooth) {\n throw this.unavailable('Web Bluetooth API not available in this browser.');\n }\n const isAvailable = await navigator.bluetooth.getAvailability();\n if (!isAvailable) {\n throw this.unavailable('No Bluetooth radio available.');\n }\n }\n async isEnabled() {\n // not available on web\n return { value: true };\n }\n async enable() {\n throw this.unavailable('enable is not available on web.');\n }\n async disable() {\n throw this.unavailable('disable is not available on web.');\n }\n async startEnabledNotifications() {\n // not available on web\n }\n async stopEnabledNotifications() {\n // not available on web\n }\n async isLocationEnabled() {\n throw this.unavailable('isLocationEnabled is not available on web.');\n }\n async openLocationSettings() {\n throw this.unavailable('openLocationSettings is not available on web.');\n }\n async openBluetoothSettings() {\n throw this.unavailable('openBluetoothSettings is not available on web.');\n }\n async openAppSettings() {\n throw this.unavailable('openAppSettings is not available on web.');\n }\n async setDisplayStrings() {\n // not available on web\n }\n async requestDevice(options) {\n const filters = this.getFilters(options);\n const device = await navigator.bluetooth.requestDevice({\n filters: filters.length ? filters : undefined,\n optionalServices: options === null || options === void 0 ? void 0 : options.optionalServices,\n acceptAllDevices: filters.length === 0,\n });\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n }\n async requestLEScan(options) {\n this.requestBleDeviceOptions = options;\n const filters = this.getFilters(options);\n await this.stopLEScan();\n this.discoveredDevices = new Map();\n navigator.bluetooth.removeEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n navigator.bluetooth.addEventListener('advertisementreceived', this.onAdvertisementReceivedCallback);\n this.scan = await navigator.bluetooth.requestLEScan({\n filters: filters.length ? filters : undefined,\n acceptAllAdvertisements: filters.length === 0,\n keepRepeatedDevices: options === null || options === void 0 ? void 0 : options.allowDuplicates,\n });\n }\n onAdvertisementReceived(event) {\n var _a, _b;\n const deviceId = event.device.id;\n this.deviceMap.set(deviceId, event.device);\n const isNew = !this.discoveredDevices.has(deviceId);\n if (isNew || ((_a = this.requestBleDeviceOptions) === null || _a === void 0 ? void 0 : _a.allowDuplicates)) {\n this.discoveredDevices.set(deviceId, true);\n const device = this.getBleDevice(event.device);\n const result = {\n device,\n localName: device.name,\n rssi: event.rssi,\n txPower: event.txPower,\n manufacturerData: mapToObject(event.manufacturerData),\n serviceData: mapToObject(event.serviceData),\n uuids: (_b = event.uuids) === null || _b === void 0 ? void 0 : _b.map(webUUIDToString),\n };\n this.notifyListeners('onScanResult', result);\n }\n }\n async stopLEScan() {\n var _a;\n if ((_a = this.scan) === null || _a === void 0 ? void 0 : _a.active) {\n this.scan.stop();\n }\n this.scan = null;\n }\n async getDevices(options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => options.deviceIds.includes(device.id))\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async getConnectedDevices(_options) {\n const devices = await navigator.bluetooth.getDevices();\n const bleDevices = devices\n .filter((device) => {\n var _a;\n return (_a = device.gatt) === null || _a === void 0 ? void 0 : _a.connected;\n })\n .map((device) => {\n this.deviceMap.set(device.id, device);\n const bleDevice = this.getBleDevice(device);\n return bleDevice;\n });\n return { devices: bleDevices };\n }\n async connect(options) {\n var _a, _b;\n const device = this.getDeviceFromMap(options.deviceId);\n device.removeEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n device.addEventListener('gattserverdisconnected', this.onDisconnectedCallback);\n const timeoutError = Symbol();\n if (device.gatt === undefined) {\n throw new Error('No gatt server available.');\n }\n try {\n const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.DEFAULT_CONNECTION_TIMEOUT;\n await runWithTimeout(device.gatt.connect(), timeout, timeoutError);\n }\n catch (error) {\n // cancel pending connect call, does not work yet in chromium because of a bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=684073\n await ((_b = device.gatt) === null || _b === void 0 ? void 0 : _b.disconnect());\n if (error === timeoutError) {\n throw new Error('Connection timeout');\n }\n else {\n throw error;\n }\n }\n }\n onDisconnected(event) {\n const deviceId = event.target.id;\n const key = `disconnected|${deviceId}`;\n this.notifyListeners(key, null);\n }\n async createBond(_options) {\n throw this.unavailable('createBond is not available on web.');\n }\n async isBonded(_options) {\n throw this.unavailable('isBonded is not available on web.');\n }\n async disconnect(options) {\n var _a;\n (_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n async getServices(options) {\n var _a, _b;\n const services = (_b = (await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryServices()))) !== null && _b !== void 0 ? _b : [];\n const bleServices = [];\n for (const service of services) {\n const characteristics = await service.getCharacteristics();\n const bleCharacteristics = [];\n for (const characteristic of characteristics) {\n bleCharacteristics.push({\n uuid: characteristic.uuid,\n properties: this.getProperties(characteristic),\n descriptors: await this.getDescriptors(characteristic),\n });\n }\n bleServices.push({ uuid: service.uuid, characteristics: bleCharacteristics });\n }\n return { services: bleServices };\n }\n async getDescriptors(characteristic) {\n try {\n const descriptors = await characteristic.getDescriptors();\n return descriptors.map((descriptor) => ({\n uuid: descriptor.uuid,\n }));\n }\n catch (_a) {\n return [];\n }\n }\n getProperties(characteristic) {\n return {\n broadcast: characteristic.properties.broadcast,\n read: characteristic.properties.read,\n writeWithoutResponse: characteristic.properties.writeWithoutResponse,\n write: characteristic.properties.write,\n notify: characteristic.properties.notify,\n indicate: characteristic.properties.indicate,\n authenticatedSignedWrites: characteristic.properties.authenticatedSignedWrites,\n reliableWrite: characteristic.properties.reliableWrite,\n writableAuxiliaries: characteristic.properties.writableAuxiliaries,\n };\n }\n async getCharacteristic(options) {\n var _a;\n const service = await ((_a = this.getDeviceFromMap(options.deviceId).gatt) === null || _a === void 0 ? void 0 : _a.getPrimaryService(options === null || options === void 0 ? void 0 : options.service));\n return service === null || service === void 0 ? void 0 : service.getCharacteristic(options === null || options === void 0 ? void 0 : options.characteristic);\n }\n async getDescriptor(options) {\n const characteristic = await this.getCharacteristic(options);\n return characteristic === null || characteristic === void 0 ? void 0 : characteristic.getDescriptor(options === null || options === void 0 ? void 0 : options.descriptor);\n }\n async discoverServices(_options) {\n throw this.unavailable('discoverServices is not available on web.');\n }\n async getMtu(_options) {\n throw this.unavailable('getMtu is not available on web.');\n }\n async requestConnectionPriority(_options) {\n throw this.unavailable('requestConnectionPriority is not available on web.');\n }\n async readRssi(_options) {\n throw this.unavailable('readRssi is not available on web.');\n }\n async read(options) {\n const characteristic = await this.getCharacteristic(options);\n const value = await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.readValue());\n return { value };\n }\n async write(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithResponse(dataView));\n }\n async writeWithoutResponse(options) {\n const characteristic = await this.getCharacteristic(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.writeValueWithoutResponse(dataView));\n }\n async readDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n const value = await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.readValue());\n return { value };\n }\n async writeDescriptor(options) {\n const descriptor = await this.getDescriptor(options);\n let dataView;\n if (typeof options.value === 'string') {\n dataView = hexStringToDataView(options.value);\n }\n else {\n dataView = options.value;\n }\n await (descriptor === null || descriptor === void 0 ? void 0 : descriptor.writeValue(dataView));\n }\n async startNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.removeEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n characteristic === null || characteristic === void 0 ? void 0 : characteristic.addEventListener('characteristicvaluechanged', this.onCharacteristicValueChangedCallback);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.startNotifications());\n }\n onCharacteristicValueChanged(event) {\n var _a, _b;\n const characteristic = event.target;\n const key = `notification|${(_a = characteristic.service) === null || _a === void 0 ? void 0 : _a.device.id}|${(_b = characteristic.service) === null || _b === void 0 ? void 0 : _b.uuid}|${characteristic.uuid}`;\n this.notifyListeners(key, {\n value: characteristic.value,\n });\n }\n async stopNotifications(options) {\n const characteristic = await this.getCharacteristic(options);\n await (characteristic === null || characteristic === void 0 ? void 0 : characteristic.stopNotifications());\n }\n getFilters(options) {\n var _a;\n const filters = [];\n for (const service of (_a = options === null || options === void 0 ? void 0 : options.services) !== null && _a !== void 0 ? _a : []) {\n filters.push({\n services: [service],\n name: options === null || options === void 0 ? void 0 : options.name,\n namePrefix: options === null || options === void 0 ? void 0 : options.namePrefix,\n });\n }\n if (((options === null || options === void 0 ? void 0 : options.name) || (options === null || options === void 0 ? void 0 : options.namePrefix)) && filters.length === 0) {\n filters.push({\n name: options.name,\n namePrefix: options.namePrefix,\n });\n }\n return filters;\n }\n getDeviceFromMap(deviceId) {\n const device = this.deviceMap.get(deviceId);\n if (device === undefined) {\n throw new Error('Device not found. Call \"requestDevice\", \"requestLEScan\" or \"getDevices\" first.');\n }\n return device;\n }\n getBleDevice(device) {\n var _a;\n const bleDevice = {\n deviceId: device.id,\n // use undefined instead of null if name is not available\n name: (_a = device.name) !== null && _a !== void 0 ? _a : undefined,\n };\n return bleDevice;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["ScanMode","ConnectionPriority","registerPlugin","throat","Capacitor","WebPlugin"],"mappings":"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"}
@@ -2,14 +2,15 @@ import Foundation
2
2
  import CoreBluetooth
3
3
 
4
4
  func descriptorValueToString(_ value: Any) -> String {
5
+ // https://developer.apple.com/documentation/corebluetooth/cbdescriptor
5
6
  if let str = value as? String {
6
- return str
7
+ return dataToString(Data(str.utf8))
7
8
  }
8
9
  if let data = value as? Data {
9
10
  return dataToString(data)
10
11
  }
11
- if let uuid = value as? CBUUID {
12
- return uuid.uuidString
12
+ if let num = value as? UInt16 {
13
+ return dataToString(Data([UInt8(truncatingIfNeeded: num), UInt8(truncatingIfNeeded: num >> 8)]))
13
14
  }
14
15
  return ""
15
16
  }
@@ -186,22 +186,14 @@ class DeviceManager: NSObject, CBCentralManagerDelegate {
186
186
 
187
187
  func getDevices(
188
188
  _ deviceUUIDs: [UUID]
189
- ) -> [Device] {
190
- let peripherals = self.centralManager.retrievePeripherals(withIdentifiers: deviceUUIDs)
191
- let devices = peripherals.map({peripheral in
192
- return Device(peripheral)
193
- })
194
- return devices
189
+ ) -> [CBPeripheral] {
190
+ return self.centralManager.retrievePeripherals(withIdentifiers: deviceUUIDs)
195
191
  }
196
192
 
197
193
  func getConnectedDevices(
198
194
  _ serviceUUIDs: [CBUUID]
199
- ) -> [Device] {
200
- let peripherals = self.centralManager.retrieveConnectedPeripherals(withServices: serviceUUIDs)
201
- let devices = peripherals.map({peripheral in
202
- return Device(peripheral)
203
- })
204
- return devices
195
+ ) -> [CBPeripheral] {
196
+ return self.centralManager.retrieveConnectedPeripherals(withServices: serviceUUIDs)
205
197
  }
206
198
 
207
199
  func connect(
@@ -175,9 +175,14 @@ public class BluetoothLe: CAPPlugin {
175
175
  let deviceUUIDs: [UUID] = deviceIds.compactMap({ deviceId in
176
176
  return UUID(uuidString: deviceId)
177
177
  })
178
- let devices: [Device] = deviceManager.getDevices(deviceUUIDs)
179
- let bleDevices: [BleDevice] = devices.map({device in
180
- self.deviceMap[device.getId()] = device
178
+ let peripherals = deviceManager.getDevices(deviceUUIDs)
179
+ let bleDevices: [BleDevice] = peripherals.map({peripheral in
180
+ let deviceId = peripheral.identifier.uuidString
181
+ guard let device = self.deviceMap[deviceId] else {
182
+ let newDevice = Device(peripheral)
183
+ self.deviceMap[newDevice.getId()] = newDevice
184
+ return self.getBleDevice(newDevice)
185
+ }
181
186
  return self.getBleDevice(device)
182
187
  })
183
188
  call.resolve(["devices": bleDevices])
@@ -192,9 +197,14 @@ public class BluetoothLe: CAPPlugin {
192
197
  let serviceUUIDs: [CBUUID] = services.compactMap({ service in
193
198
  return CBUUID(string: service)
194
199
  })
195
- let devices: [Device] = deviceManager.getConnectedDevices(serviceUUIDs)
196
- let bleDevices: [BleDevice] = devices.map({device in
197
- self.deviceMap[device.getId()] = device
200
+ let peripherals = deviceManager.getConnectedDevices(serviceUUIDs)
201
+ let bleDevices: [BleDevice] = peripherals.map({peripheral in
202
+ let deviceId = peripheral.identifier.uuidString
203
+ guard let device = self.deviceMap[deviceId] else {
204
+ let newDevice = Device(peripheral)
205
+ self.deviceMap[newDevice.getId()] = newDevice
206
+ return self.getBleDevice(newDevice)
207
+ }
198
208
  return self.getBleDevice(device)
199
209
  })
200
210
  call.resolve(["devices": bleDevices])
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capacitor-community/bluetooth-le",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "Capacitor plugin for Bluetooth Low Energy ",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",