@voltras/node-sdk 0.1.2 → 0.2.0

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.
Files changed (158) hide show
  1. package/README.md +122 -31
  2. package/dist/cjs/bluetooth/adapters/native.js +36 -34
  3. package/dist/cjs/bluetooth/adapters/native.js.map +1 -1
  4. package/dist/cjs/bluetooth/adapters/node.js +9 -7
  5. package/dist/cjs/bluetooth/adapters/node.js.map +1 -1
  6. package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js +6 -4
  7. package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js.map +1 -1
  8. package/dist/cjs/bluetooth/adapters/web.js +7 -5
  9. package/dist/cjs/bluetooth/adapters/web.js.map +1 -1
  10. package/dist/cjs/bluetooth/controllers/scanner-controller.js +0 -2
  11. package/dist/cjs/bluetooth/controllers/scanner-controller.js.map +1 -1
  12. package/dist/cjs/index.js +19 -10
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/react/hooks.js +2 -6
  15. package/dist/cjs/react/hooks.js.map +1 -1
  16. package/dist/cjs/sdk/notification-dispatcher.js +47 -0
  17. package/dist/cjs/sdk/notification-dispatcher.js.map +1 -0
  18. package/dist/cjs/sdk/reconnect-handler.js +61 -0
  19. package/dist/cjs/sdk/reconnect-handler.js.map +1 -0
  20. package/dist/cjs/sdk/voltra-client.js +206 -72
  21. package/dist/cjs/sdk/voltra-client.js.map +1 -1
  22. package/dist/cjs/shared/index.js +5 -1
  23. package/dist/cjs/shared/index.js.map +1 -1
  24. package/dist/cjs/shared/logger.js +54 -0
  25. package/dist/cjs/shared/logger.js.map +1 -0
  26. package/dist/cjs/voltra/index.js +15 -12
  27. package/dist/cjs/voltra/index.js.map +1 -1
  28. package/dist/cjs/voltra/models/device.js +13 -0
  29. package/dist/cjs/voltra/models/device.js.map +1 -1
  30. package/dist/cjs/voltra/protocol/commands.js +127 -210
  31. package/dist/cjs/voltra/protocol/commands.js.map +1 -1
  32. package/dist/cjs/voltra/protocol/constants/ble-config.js +24 -0
  33. package/dist/cjs/voltra/protocol/constants/ble-config.js.map +1 -0
  34. package/dist/cjs/voltra/protocol/constants/connection-commands.js +55 -0
  35. package/dist/cjs/voltra/protocol/constants/connection-commands.js.map +1 -0
  36. package/dist/cjs/voltra/protocol/constants/enums.js +117 -0
  37. package/dist/cjs/voltra/protocol/constants/enums.js.map +1 -0
  38. package/dist/cjs/voltra/protocol/constants/index.js +32 -0
  39. package/dist/cjs/voltra/protocol/constants/index.js.map +1 -0
  40. package/dist/cjs/voltra/protocol/constants/message-types.js +70 -0
  41. package/dist/cjs/voltra/protocol/constants/message-types.js.map +1 -0
  42. package/dist/cjs/voltra/protocol/constants/timing.js +21 -0
  43. package/dist/cjs/voltra/protocol/constants/timing.js.map +1 -0
  44. package/dist/cjs/voltra/protocol/data/protocol-data.generated.js +7 -0
  45. package/dist/cjs/voltra/protocol/data/protocol-data.generated.js.map +1 -0
  46. package/dist/cjs/voltra/protocol/telemetry-decoder.js +122 -6
  47. package/dist/cjs/voltra/protocol/telemetry-decoder.js.map +1 -1
  48. package/dist/cjs/voltra/protocol/types.js +9 -0
  49. package/dist/cjs/voltra/protocol/types.js.map +1 -0
  50. package/dist/esm/bluetooth/adapters/native.js +36 -34
  51. package/dist/esm/bluetooth/adapters/native.js.map +1 -1
  52. package/dist/esm/bluetooth/adapters/node.js +9 -7
  53. package/dist/esm/bluetooth/adapters/node.js.map +1 -1
  54. package/dist/esm/bluetooth/adapters/web-bluetooth-base.js +6 -4
  55. package/dist/esm/bluetooth/adapters/web-bluetooth-base.js.map +1 -1
  56. package/dist/esm/bluetooth/adapters/web.js +7 -5
  57. package/dist/esm/bluetooth/adapters/web.js.map +1 -1
  58. package/dist/esm/bluetooth/controllers/scanner-controller.js +0 -2
  59. package/dist/esm/bluetooth/controllers/scanner-controller.js.map +1 -1
  60. package/dist/esm/index.js +3 -6
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/react/hooks.js +1 -5
  63. package/dist/esm/react/hooks.js.map +1 -1
  64. package/dist/esm/sdk/notification-dispatcher.js +44 -0
  65. package/dist/esm/sdk/notification-dispatcher.js.map +1 -0
  66. package/dist/esm/sdk/reconnect-handler.js +57 -0
  67. package/dist/esm/sdk/reconnect-handler.js.map +1 -0
  68. package/dist/esm/sdk/voltra-client.js +204 -70
  69. package/dist/esm/sdk/voltra-client.js.map +1 -1
  70. package/dist/esm/shared/index.js +1 -0
  71. package/dist/esm/shared/index.js.map +1 -1
  72. package/dist/esm/shared/logger.js +49 -0
  73. package/dist/esm/shared/logger.js.map +1 -0
  74. package/dist/esm/voltra/index.js +3 -8
  75. package/dist/esm/voltra/index.js.map +1 -1
  76. package/dist/esm/voltra/models/device.js +13 -0
  77. package/dist/esm/voltra/models/device.js.map +1 -1
  78. package/dist/esm/voltra/protocol/commands.js +117 -209
  79. package/dist/esm/voltra/protocol/commands.js.map +1 -1
  80. package/dist/esm/voltra/protocol/constants/ble-config.js +18 -0
  81. package/dist/esm/voltra/protocol/constants/ble-config.js.map +1 -0
  82. package/dist/esm/voltra/protocol/constants/connection-commands.js +49 -0
  83. package/dist/esm/voltra/protocol/constants/connection-commands.js.map +1 -0
  84. package/dist/esm/voltra/protocol/constants/enums.js +114 -0
  85. package/dist/esm/voltra/protocol/constants/enums.js.map +1 -0
  86. package/dist/esm/voltra/protocol/constants/index.js +12 -0
  87. package/dist/esm/voltra/protocol/constants/index.js.map +1 -0
  88. package/dist/esm/voltra/protocol/constants/message-types.js +64 -0
  89. package/dist/esm/voltra/protocol/constants/message-types.js.map +1 -0
  90. package/dist/esm/voltra/protocol/constants/timing.js +18 -0
  91. package/dist/esm/voltra/protocol/constants/timing.js.map +1 -0
  92. package/dist/esm/voltra/protocol/data/protocol-data.generated.js +5 -0
  93. package/dist/esm/voltra/protocol/data/protocol-data.generated.js.map +1 -0
  94. package/dist/esm/voltra/protocol/telemetry-decoder.js +124 -8
  95. package/dist/esm/voltra/protocol/telemetry-decoder.js.map +1 -1
  96. package/dist/esm/voltra/protocol/types.js +8 -0
  97. package/dist/esm/voltra/protocol/types.js.map +1 -0
  98. package/dist/types/bluetooth/adapters/native.d.ts.map +1 -1
  99. package/dist/types/bluetooth/adapters/node.d.ts.map +1 -1
  100. package/dist/types/bluetooth/adapters/web-bluetooth-base.d.ts.map +1 -1
  101. package/dist/types/bluetooth/adapters/web.d.ts.map +1 -1
  102. package/dist/types/bluetooth/controllers/scanner-controller.d.ts.map +1 -1
  103. package/dist/types/index.d.ts +4 -3
  104. package/dist/types/index.d.ts.map +1 -1
  105. package/dist/types/react/hooks.d.ts.map +1 -1
  106. package/dist/types/sdk/index.d.ts +2 -1
  107. package/dist/types/sdk/index.d.ts.map +1 -1
  108. package/dist/types/sdk/notification-dispatcher.d.ts +29 -0
  109. package/dist/types/sdk/notification-dispatcher.d.ts.map +1 -0
  110. package/dist/types/sdk/reconnect-handler.d.ts +55 -0
  111. package/dist/types/sdk/reconnect-handler.d.ts.map +1 -0
  112. package/dist/types/sdk/types.d.ts +35 -0
  113. package/dist/types/sdk/types.d.ts.map +1 -1
  114. package/dist/types/sdk/voltra-client.d.ts +77 -2
  115. package/dist/types/sdk/voltra-client.d.ts.map +1 -1
  116. package/dist/types/shared/index.d.ts +1 -0
  117. package/dist/types/shared/index.d.ts.map +1 -1
  118. package/dist/types/shared/logger.d.ts +39 -0
  119. package/dist/types/shared/logger.d.ts.map +1 -0
  120. package/dist/types/voltra/index.d.ts +3 -3
  121. package/dist/types/voltra/index.d.ts.map +1 -1
  122. package/dist/types/voltra/models/device.d.ts +11 -1
  123. package/dist/types/voltra/models/device.d.ts.map +1 -1
  124. package/dist/types/voltra/protocol/commands.d.ts +47 -87
  125. package/dist/types/voltra/protocol/commands.d.ts.map +1 -1
  126. package/dist/types/voltra/protocol/constants/ble-config.d.ts +16 -0
  127. package/dist/types/voltra/protocol/constants/ble-config.d.ts.map +1 -0
  128. package/dist/types/voltra/protocol/constants/connection-commands.d.ts +37 -0
  129. package/dist/types/voltra/protocol/constants/connection-commands.d.ts.map +1 -0
  130. package/dist/types/voltra/protocol/constants/enums.d.ts +72 -0
  131. package/dist/types/voltra/protocol/constants/enums.d.ts.map +1 -0
  132. package/dist/types/voltra/protocol/constants/index.d.ts +12 -0
  133. package/dist/types/voltra/protocol/constants/index.d.ts.map +1 -0
  134. package/dist/types/voltra/protocol/constants/message-types.d.ts +52 -0
  135. package/dist/types/voltra/protocol/constants/message-types.d.ts.map +1 -0
  136. package/dist/types/voltra/protocol/constants/timing.d.ts +18 -0
  137. package/dist/types/voltra/protocol/constants/timing.d.ts.map +1 -0
  138. package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts +3 -0
  139. package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts.map +1 -0
  140. package/dist/types/voltra/protocol/telemetry-decoder.d.ts +15 -2
  141. package/dist/types/voltra/protocol/telemetry-decoder.d.ts.map +1 -1
  142. package/dist/types/voltra/protocol/types.d.ts +247 -0
  143. package/dist/types/voltra/protocol/types.d.ts.map +1 -0
  144. package/package.json +8 -7
  145. package/dist/cjs/voltra/protocol/constants.js +0 -136
  146. package/dist/cjs/voltra/protocol/constants.js.map +0 -1
  147. package/dist/cjs/voltra/protocol/data/chains.json +0 -830
  148. package/dist/cjs/voltra/protocol/data/eccentric.json +0 -1598
  149. package/dist/cjs/voltra/protocol/data/protocol.json +0 -54
  150. package/dist/cjs/voltra/protocol/data/weights.json +0 -62
  151. package/dist/esm/voltra/protocol/constants.js +0 -130
  152. package/dist/esm/voltra/protocol/constants.js.map +0 -1
  153. package/dist/esm/voltra/protocol/data/chains.json +0 -830
  154. package/dist/esm/voltra/protocol/data/eccentric.json +0 -1598
  155. package/dist/esm/voltra/protocol/data/protocol.json +0 -54
  156. package/dist/esm/voltra/protocol/data/weights.json +0 -62
  157. package/dist/types/voltra/protocol/constants.d.ts +0 -103
  158. package/dist/types/voltra/protocol/constants.d.ts.map +0 -1
package/README.md CHANGED
@@ -7,8 +7,9 @@ SDK for connecting to and controlling Voltra fitness devices.
7
7
 
8
8
  ## Features
9
9
 
10
- - **Device Control**: Configure weight (5-200 lbs), chains (0-100 lbs), and eccentric load (-195% to +195%)
10
+ - **Device Control**: Configure weight (5-200 lbs, any integer), chains (0-100 lbs), inverse chains (0-100 lbs), and eccentric load (-195% to +195%)
11
11
  - **Real-time Telemetry**: Stream position, velocity, and force data during workouts
12
+ - **Device Notifications**: Rep/set boundaries, mode confirmations, settings updates, battery level
12
13
  - **Recording Lifecycle**: Prepare, start, and stop recording with motor engagement control
13
14
  - **Cross-platform**: Web browsers, Node.js, and React Native
14
15
  - **Multi-device**: Connect to and control multiple devices simultaneously
@@ -48,9 +49,10 @@ const selectedDevice = devices[0]; // In a real app, user would choose
48
49
  const client = await manager.connect(selectedDevice);
49
50
 
50
51
  // 4. Configure resistance settings
51
- await client.setWeight(50); // 5-200 lbs (increments of 5)
52
- await client.setChains(25); // 0-100 lbs (reverse resistance)
53
- await client.setEccentric(10); // -195 to +195 (eccentric load %)
52
+ await client.setWeight(50); // 5-200 lbs (any integer)
53
+ await client.setChains(25); // 0-100 lbs (reverse resistance)
54
+ await client.setInverseChains(15); // 0-100 lbs (progressive resistance)
55
+ await client.setEccentric(10); // -195 to +195 (eccentric load %)
54
56
 
55
57
  // 5. Subscribe to real-time telemetry
56
58
  client.onFrame((frame: TelemetryFrame) => {
@@ -90,24 +92,27 @@ Control the device's resistance in three ways:
90
92
 
91
93
  | Setting | Range | Description |
92
94
  |---------|-------|-------------|
93
- | **Weight** | 5-200 lbs | Primary resistance (increments of 5) |
95
+ | **Weight** | 5-200 lbs | Primary resistance (any integer value) |
94
96
  | **Chains** | 0-100 lbs | Reverse resistance - reduces load as you extend |
97
+ | **Inverse Chains** | 0-100 lbs | Progressive resistance - increases load as you extend |
95
98
  | **Eccentric** | -195% to +195% | Adjusts eccentric (lowering) phase relative to concentric |
96
99
 
97
100
  ```typescript
98
101
  // Set all resistance parameters
99
- await client.setWeight(75); // 75 lbs primary resistance
100
- await client.setChains(20); // 20 lbs chain reduction
101
- await client.setEccentric(-25); // 25% less resistance on eccentric
102
+ await client.setWeight(75); // 75 lbs primary resistance
103
+ await client.setChains(20); // 20 lbs chain reduction
104
+ await client.setInverseChains(10); // 10 lbs progressive resistance
105
+ await client.setEccentric(-25); // 25% less resistance on eccentric
102
106
 
103
107
  // Query current settings
104
108
  console.log(client.settings);
105
- // { weight: 75, chains: 20, eccentric: -25 }
109
+ // { weight: 75, chains: 20, inverseChains: 10, eccentric: -25, mode: 1, battery: 85 }
106
110
 
107
111
  // Get available values for each setting
108
- const weights = client.getAvailableWeights(); // [5, 10, 15, ..., 200]
109
- const chains = client.getAvailableChains(); // [0, 1, 2, ..., 100]
110
- const eccentric = client.getAvailableEccentric(); // [-195, -190, ..., 195]
112
+ const weights = client.getAvailableWeights(); // [5, 6, 7, ..., 200]
113
+ const chains = client.getAvailableChains(); // [0, 1, 2, ..., 100]
114
+ const inverseChains = client.getAvailableInverseChains(); // [0, 1, 2, ..., 100]
115
+ const eccentric = client.getAvailableEccentric(); // [-195, -190, ..., 195]
111
116
  ```
112
117
 
113
118
  ### Recording Lifecycle
@@ -134,7 +139,7 @@ console.log(client.isRecording); // true when state === 'active'
134
139
 
135
140
  ### Real-time Telemetry
136
141
 
137
- Receive movement data at ~100Hz when recording:
142
+ Receive movement data at ~11 Hz when recording:
138
143
 
139
144
  ```typescript
140
145
  // Subscribe to telemetry frames
@@ -142,7 +147,7 @@ const unsubscribe = client.onFrame((frame) => {
142
147
  console.log({
143
148
  sequence: frame.sequence, // Packet sequence number
144
149
  timestamp: frame.timestamp, // Unix ms when received
145
- phase: frame.phase, // Movement phase (0-4)
150
+ phase: frame.phase, // MovementPhase enum
146
151
  position: frame.position, // Position in movement (0-600)
147
152
  velocity: frame.velocity, // Current velocity
148
153
  force: frame.force, // Force being applied
@@ -153,34 +158,108 @@ const unsubscribe = client.onFrame((frame) => {
153
158
  unsubscribe();
154
159
  ```
155
160
 
156
- ### Connection States
161
+ ### Events and Notifications
157
162
 
158
- Monitor the connection lifecycle:
163
+ The SDK provides a comprehensive event system for real-time device notifications:
159
164
 
160
165
  ```typescript
161
- // Subscribe to all events
166
+ // Subscribe to all events with full type safety
162
167
  client.subscribe((event) => {
163
168
  switch (event.type) {
169
+ // Connection events
164
170
  case 'connectionStateChanged':
165
171
  console.log('State:', event.state);
166
172
  // 'disconnected' | 'connecting' | 'authenticating' | 'connected'
167
173
  break;
174
+ case 'connected':
175
+ console.log(`Connected to ${event.deviceName}`);
176
+ break;
177
+ case 'disconnected':
178
+ console.log(`Disconnected from ${event.deviceId}`);
179
+ break;
180
+
181
+ // Recording events
168
182
  case 'recordingStateChanged':
169
183
  console.log('Recording:', event.state);
170
184
  break;
185
+
186
+ // Telemetry events
171
187
  case 'frame':
172
188
  console.log('Telemetry:', event.frame);
173
189
  break;
190
+
191
+ // Workout boundary events (device-detected)
192
+ case 'repBoundary':
193
+ console.log('Rep completed!');
194
+ break;
195
+ case 'setBoundary':
196
+ console.log('Set completed!');
197
+ break;
198
+
199
+ // Device notification events
200
+ case 'modeConfirmed':
201
+ console.log('Mode confirmed:', event.mode);
202
+ break;
203
+ case 'settingsUpdate':
204
+ console.log('Device settings:', event.settings);
205
+ break;
206
+ case 'batteryUpdate':
207
+ console.log('Battery:', event.battery, '%');
208
+ break;
209
+
174
210
  case 'error':
175
211
  console.error('Error:', event.error);
176
212
  break;
177
213
  }
178
214
  });
215
+ ```
216
+
217
+ #### Convenience Subscription Methods
218
+
219
+ Subscribe to specific event types with dedicated methods:
220
+
221
+ ```typescript
222
+ // Telemetry frames (~11 Hz during recording)
223
+ const unsubFrame = client.onFrame((frame) => {
224
+ updateUI(frame.position, frame.velocity, frame.force);
225
+ });
226
+
227
+ // Rep boundaries (device detects rep completion)
228
+ const unsubRep = client.onRepBoundary(() => {
229
+ repCount++;
230
+ playRepSound();
231
+ });
232
+
233
+ // Set boundaries (device detects set completion)
234
+ const unsubSet = client.onSetBoundary(() => {
235
+ logSetComplete();
236
+ });
237
+
238
+ // Mode confirmations (after setMode())
239
+ const unsubMode = client.onModeConfirmed((mode) => {
240
+ console.log('Mode now active:', mode);
241
+ });
242
+
243
+ // Settings updates (device reports current state)
244
+ const unsubSettings = client.onSettingsUpdate((settings) => {
245
+ // settings: { baseWeight?, chains?, eccentric?, trainingMode? }
246
+ syncUIWithDevice(settings);
247
+ });
179
248
 
180
- // Or subscribe to specific events
181
- client.onConnectionStateChange((state) => {
182
- console.log('Connection state:', state);
249
+ // Battery level updates
250
+ const unsubBattery = client.onBatteryUpdate((battery) => {
251
+ showBatteryIndicator(battery);
183
252
  });
253
+
254
+ // Connection state changes
255
+ const unsubConnection = client.onConnectionStateChange((state) => {
256
+ updateConnectionUI(state);
257
+ });
258
+
259
+ // Unsubscribe when done
260
+ unsubFrame();
261
+ unsubRep();
262
+ // ... etc
184
263
  ```
185
264
 
186
265
  ## Platform-Specific Setup
@@ -323,7 +402,7 @@ try {
323
402
  } catch (error) {
324
403
  if (error instanceof InvalidSettingError) {
325
404
  console.log(`Invalid ${error.setting}: ${error.value}`);
326
- console.log('Available values:', error.availableValues);
405
+ console.log('Available values:', error.validValues);
327
406
  }
328
407
  }
329
408
  ```
@@ -372,15 +451,23 @@ Controls a single connected device.
372
451
 
373
452
  | Method | Description |
374
453
  |--------|-------------|
375
- | `setWeight(lbs)` | Set weight (5-200 in increments of 5) |
454
+ | `setWeight(lbs)` | Set weight (5-200, any integer) |
376
455
  | `setChains(lbs)` | Set chains (0-100) |
456
+ | `setInverseChains(lbs)` | Set inverse chains (0-100) |
377
457
  | `setEccentric(percent)` | Set eccentric (-195 to +195) |
458
+ | `setMode(mode)` | Set training mode |
378
459
  | `prepareRecording()` | Pre-engage motor for low-latency start |
379
460
  | `startRecording()` | Start recording (engages motor) |
380
461
  | `stopRecording()` | Stop recording (disengages motor) |
381
462
  | `endSet()` | End set but stay prepared |
382
- | `onFrame(callback)` | Subscribe to telemetry frames |
383
463
  | `subscribe(callback)` | Subscribe to all events |
464
+ | `onFrame(callback)` | Subscribe to telemetry frames |
465
+ | `onRepBoundary(callback)` | Subscribe to rep completion events |
466
+ | `onSetBoundary(callback)` | Subscribe to set completion events |
467
+ | `onModeConfirmed(callback)` | Subscribe to mode confirmation events |
468
+ | `onSettingsUpdate(callback)` | Subscribe to device settings updates |
469
+ | `onBatteryUpdate(callback)` | Subscribe to battery level updates |
470
+ | `onConnectionStateChange(callback)` | Subscribe to connection state changes |
384
471
  | `disconnect()` | Disconnect from device |
385
472
  | `dispose()` | Clean up resources |
386
473
 
@@ -390,21 +477,26 @@ Controls a single connected device.
390
477
  | `isConnected` | boolean | Whether connected |
391
478
  | `recordingState` | string | 'idle' \| 'preparing' \| 'ready' \| 'active' \| 'stopping' |
392
479
  | `isRecording` | boolean | Whether recording is active |
393
- | `settings` | object | Current { weight, chains, eccentric } |
480
+ | `settings` | object | Current { weight, chains, inverseChains, eccentric, mode, battery } |
394
481
  | `connectedDeviceId` | string | Connected device ID |
395
482
  | `connectedDeviceName` | string | Connected device name |
396
483
 
397
484
  ### TelemetryFrame
398
485
 
399
486
  ```typescript
487
+ import { MovementPhase } from '@voltras/node-sdk';
488
+
400
489
  interface TelemetryFrame {
401
- sequence: number; // Packet sequence number
402
- timestamp: number; // Unix ms when received
403
- phase: number; // Movement phase (0-4)
404
- position: number; // Position in movement (0-600)
405
- velocity: number; // Current velocity
406
- force: number; // Force being applied (signed)
490
+ sequence: number; // Packet sequence number
491
+ timestamp: number; // Unix ms when received
492
+ phase: MovementPhase; // Movement phase (see MovementPhase enum)
493
+ position: number; // Position in movement (0-600)
494
+ velocity: number; // Current velocity
495
+ force: number; // Force being applied (signed)
407
496
  }
497
+
498
+ // MovementPhase enum values:
499
+ // IDLE = 0, CONCENTRIC = 1, HOLD = 2, ECCENTRIC = 3, UNKNOWN = -1
408
500
  ```
409
501
 
410
502
  ## Documentation
@@ -419,7 +511,6 @@ Step-by-step tutorials for using the SDK in your app:
419
511
 
420
512
  ### Technical Deep-Dives
421
513
 
422
- - [Bluetooth Protocol](./docs/concepts/bluetooth-protocol.md) - BLE protocol, commands, telemetry format
423
514
  - [Platform Adapters](./docs/concepts/platform-adapters.md) - How adapters work across platforms
424
515
 
425
516
  ### Other
@@ -18,6 +18,8 @@ const react_native_ble_plx_1 = require("react-native-ble-plx");
18
18
  // @ts-ignore - React Native imports may not be available in all environments
19
19
  const react_native_1 = require("react-native");
20
20
  const base_1 = require("./base");
21
+ const logger_1 = require("../../shared/logger");
22
+ const log = (0, logger_1.createLogger)('NativeBLE');
21
23
  /**
22
24
  * Request Android Bluetooth permissions at runtime.
23
25
  * Android 12+ requires BLUETOOTH_SCAN and BLUETOOTH_CONNECT.
@@ -28,7 +30,7 @@ async function requestAndroidBLEPermissions() {
28
30
  return true;
29
31
  }
30
32
  const apiLevel = react_native_1.Platform.Version;
31
- console.log('[NativeBLE] Android API level:', apiLevel);
33
+ log.debug('Android API level:', apiLevel);
32
34
  try {
33
35
  if (typeof apiLevel === 'number' && apiLevel >= 31) {
34
36
  // Android 12+ (API 31+)
@@ -39,7 +41,7 @@ async function requestAndroidBLEPermissions() {
39
41
  ]);
40
42
  const allGranted = Object.values(results).every((result) => result === react_native_1.PermissionsAndroid.RESULTS.GRANTED);
41
43
  if (!allGranted) {
42
- console.warn('[NativeBLE] Not all permissions granted:', results);
44
+ log.warn('Not all permissions granted:', results);
43
45
  }
44
46
  return allGranted;
45
47
  }
@@ -54,7 +56,7 @@ async function requestAndroidBLEPermissions() {
54
56
  }
55
57
  }
56
58
  catch (error) {
57
- console.error('[NativeBLE] Permission request error:', error);
59
+ log.error('Permission request error:', error);
58
60
  return false;
59
61
  }
60
62
  }
@@ -121,19 +123,19 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
121
123
  async handleAppStateChange(nextAppState) {
122
124
  if (nextAppState === 'active') {
123
125
  // App came to foreground
124
- console.log('[NativeBLE] App became active');
126
+ log.debug('App became active');
125
127
  // Check if we were connected and got disconnected
126
128
  if (this.lastConnectedDeviceId &&
127
129
  this.connectionState === 'disconnected' &&
128
130
  !this.isReconnecting) {
129
- console.log('[NativeBLE] Was connected before, attempting auto-reconnect...');
131
+ log.debug('Was connected before, attempting auto-reconnect...');
130
132
  await this.attemptReconnect();
131
133
  }
132
134
  else if (this.device) {
133
135
  // Check if device is still connected
134
136
  const isConnected = await this.device.isConnected();
135
137
  if (!isConnected) {
136
- console.log('[NativeBLE] Device disconnected while in background, attempting reconnect...');
138
+ log.debug('Device disconnected while in background, attempting reconnect...');
137
139
  this.setConnectionState('disconnected');
138
140
  await this.attemptReconnect();
139
141
  }
@@ -152,31 +154,31 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
152
154
  this.onReconnectStart?.();
153
155
  while (this.reconnectAttempts < this.maxReconnectAttempts) {
154
156
  this.reconnectAttempts++;
155
- console.log(`[NativeBLE] Reconnect attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts}`);
157
+ log.debug(`Reconnect attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts}`);
156
158
  try {
157
159
  await this.connect(this.lastConnectedDeviceId);
158
- console.log('[NativeBLE] Reconnect successful');
160
+ log.debug('Reconnect successful');
159
161
  this.isReconnecting = false;
160
162
  this.reconnectAttempts = 0;
161
163
  this.onReconnectSuccess?.();
162
164
  return;
163
165
  }
164
166
  catch (error) {
165
- console.warn(`[NativeBLE] Reconnect attempt ${this.reconnectAttempts} failed:`, error);
167
+ log.warn(`Reconnect attempt ${this.reconnectAttempts} failed:`, error);
166
168
  if (this.reconnectAttempts < this.maxReconnectAttempts) {
167
169
  await new Promise((resolve) => setTimeout(resolve, this.reconnectDelayMs));
168
170
  }
169
171
  }
170
172
  }
171
173
  // All attempts failed
172
- console.error('[NativeBLE] Auto-reconnect failed after all attempts');
174
+ log.error('Auto-reconnect failed after all attempts');
173
175
  this.isReconnecting = false;
174
176
  this.onReconnectFailed?.(new Error('Auto-reconnect failed'));
175
177
  }
176
178
  async waitForPoweredOn() {
177
179
  return new Promise((resolve, reject) => {
178
180
  const subscription = this.manager.onStateChange((state) => {
179
- console.log('[NativeBLE] Bluetooth state:', state);
181
+ log.debug('Bluetooth state:', state);
180
182
  if (state === react_native_ble_plx_1.State.PoweredOn) {
181
183
  subscription.remove();
182
184
  resolve();
@@ -191,7 +193,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
191
193
  }
192
194
  else if (state === react_native_ble_plx_1.State.PoweredOff) {
193
195
  // Don't reject yet - user might turn it on
194
- console.log('[NativeBLE] Bluetooth is off - waiting for user to enable');
196
+ log.debug('Bluetooth is off - waiting for user to enable');
195
197
  }
196
198
  }, true);
197
199
  // Timeout after 10 seconds
@@ -202,19 +204,19 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
202
204
  });
203
205
  }
204
206
  async scan(timeout) {
205
- console.log('[NativeBLE] Starting scan...');
206
- console.log('[NativeBLE] Looking for service:', this.bleConfig.serviceUUID);
207
+ log.debug('Starting scan...');
208
+ log.debug('Looking for service:', this.bleConfig.serviceUUID);
207
209
  if (this.bleConfig.deviceNamePrefix) {
208
- console.log('[NativeBLE] Device name prefix:', this.bleConfig.deviceNamePrefix);
210
+ log.debug('Device name prefix:', this.bleConfig.deviceNamePrefix);
209
211
  }
210
212
  // Request Android permissions first
211
213
  const hasPermissions = await requestAndroidBLEPermissions();
212
214
  if (!hasPermissions) {
213
215
  throw new Error('Bluetooth permissions not granted. Please enable in Settings.');
214
216
  }
215
- console.log('[NativeBLE] Permissions granted');
217
+ log.debug('Permissions granted');
216
218
  await this.waitForPoweredOn();
217
- console.log('[NativeBLE] Bluetooth is powered on');
219
+ log.debug('Bluetooth is powered on');
218
220
  const devices = [];
219
221
  const seen = new Set();
220
222
  const prefix = this.bleConfig.deviceNamePrefix;
@@ -223,18 +225,18 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
223
225
  this.manager.startDeviceScan(null, // No service filter - scan for all devices
224
226
  { allowDuplicates: false }, (error, device) => {
225
227
  if (error) {
226
- console.error('[NativeBLE] Scan error:', error);
228
+ log.error('Scan error:', error);
227
229
  return;
228
230
  }
229
231
  if (device) {
230
232
  // Log all devices with names for debugging
231
233
  if (device.name) {
232
- console.log(`[NativeBLE] Found device: ${device.name} (${device.id})`);
234
+ log.debug(`Found device: ${device.name} (${device.id})`);
233
235
  }
234
236
  // Check if device matches filter (if prefix is configured)
235
237
  const matchesFilter = !prefix || device.name?.startsWith(prefix) || device.localName?.startsWith(prefix);
236
238
  if (matchesFilter && !seen.has(device.id) && (device.name || device.localName)) {
237
- console.log(`[NativeBLE] ✓ Found matching device: ${device.name || device.localName}`);
239
+ log.debug(`Found matching device: ${device.name || device.localName}`);
238
240
  seen.add(device.id);
239
241
  devices.push({
240
242
  id: device.id,
@@ -247,7 +249,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
247
249
  // Stop scan after timeout
248
250
  setTimeout(() => {
249
251
  this.manager.stopDeviceScan();
250
- console.log(`[NativeBLE] Scan complete. Found ${devices.length} device(s)`);
252
+ log.debug(`Scan complete. Found ${devices.length} device(s)`);
251
253
  resolve(devices);
252
254
  }, timeout * 1000);
253
255
  });
@@ -273,22 +275,22 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
273
275
  // If immediate write is provided, send it NOW before anything else
274
276
  // This is critical for devices that require fast authentication
275
277
  if (options?.immediateWrite) {
276
- console.log('[NativeBLE] Sending immediate auth write...');
278
+ log.debug('Sending immediate auth write...');
277
279
  const base64 = bytesToBase64(options.immediateWrite);
278
280
  await device.writeCharacteristicWithResponseForService(this.bleConfig.serviceUUID, this.bleConfig.writeCharUUID, base64);
279
- console.log('[NativeBLE] Immediate auth write sent');
281
+ log.debug('Immediate auth write sent');
280
282
  }
281
283
  // Now request MTU (optional, may fail on some devices)
282
284
  try {
283
285
  await device.requestMTU(512);
284
286
  }
285
287
  catch (mtuError) {
286
- console.log('[NativeBLE] MTU request failed (non-fatal):', mtuError);
288
+ log.debug('MTU request failed (non-fatal):', mtuError);
287
289
  }
288
290
  // Set up disconnect listener BEFORE setting up characteristic monitors
289
291
  // This ensures we can clean up subscriptions before the error propagates
290
292
  this.disconnectSubscription = device.onDisconnected((error, _disconnectedDevice) => {
291
- console.log('[NativeBLE] Device disconnected', error ? `(error: ${error.message})` : '');
293
+ log.debug('Device disconnected', error ? `(error: ${error.message})` : '');
292
294
  // Mark as disconnecting to prevent monitor errors from crashing
293
295
  this.isDisconnecting = true;
294
296
  // Clean up subscriptions IMMEDIATELY to prevent RxJava crash
@@ -304,10 +306,10 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
304
306
  if (error) {
305
307
  // Ignore errors if we're disconnecting - this prevents the Android crash
306
308
  if (this.isDisconnecting || !this.device) {
307
- console.log('[NativeBLE] Notification error during disconnect (ignored):', error.message);
309
+ log.debug('Notification error during disconnect (ignored):', error.message);
308
310
  return;
309
311
  }
310
- console.error('[NativeBLE] Notification error:', error);
312
+ log.error('Notification error:', error);
311
313
  return;
312
314
  }
313
315
  if (characteristic?.value) {
@@ -321,10 +323,10 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
321
323
  if (error) {
322
324
  // Ignore errors if we're disconnecting - this prevents the Android crash
323
325
  if (this.isDisconnecting || !this.device) {
324
- console.log('[NativeBLE] Write char error during disconnect (ignored):', error.message);
326
+ log.debug('Write char error during disconnect (ignored):', error.message);
325
327
  return;
326
328
  }
327
- console.error('[NativeBLE] Write char notification error:', error);
329
+ log.error('Write char notification error:', error);
328
330
  return;
329
331
  }
330
332
  if (characteristic?.value) {
@@ -335,7 +337,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
335
337
  this.setConnectionState('connected');
336
338
  }
337
339
  catch (error) {
338
- console.error('[NativeBLE] Connect error:', error);
340
+ log.error('Connect error:', error);
339
341
  this.setConnectionState('disconnected');
340
342
  throw error;
341
343
  }
@@ -348,7 +350,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
348
350
  this.notifySubscription.remove();
349
351
  }
350
352
  catch (e) {
351
- console.log('[NativeBLE] Error removing notify subscription:', e);
353
+ log.debug('Error removing notify subscription:', e);
352
354
  }
353
355
  this.notifySubscription = null;
354
356
  }
@@ -357,7 +359,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
357
359
  this.writeSubscription.remove();
358
360
  }
359
361
  catch (e) {
360
- console.log('[NativeBLE] Error removing write subscription:', e);
362
+ log.debug('Error removing write subscription:', e);
361
363
  }
362
364
  this.writeSubscription = null;
363
365
  }
@@ -369,7 +371,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
369
371
  this.disconnectSubscription.remove();
370
372
  }
371
373
  catch (e) {
372
- console.log('[NativeBLE] Error removing disconnect subscription:', e);
374
+ log.debug('Error removing disconnect subscription:', e);
373
375
  }
374
376
  this.disconnectSubscription = null;
375
377
  }
@@ -386,7 +388,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
386
388
  await this.device.cancelConnection();
387
389
  }
388
390
  catch (error) {
389
- console.error('[NativeBLE] Disconnect error:', error);
391
+ log.error('Disconnect error:', error);
390
392
  }
391
393
  this.device = null;
392
394
  }
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../../../src/bluetooth/adapters/native.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,+DAAmF;AACnF,6DAA6D;AAC7D,6EAA6E;AAC7E,+CAA2F;AAC3F,iCAAwC;AAMxC;;;;GAIG;AACH,KAAK,UAAU,4BAA4B;IACzC,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,uBAAQ,CAAC,OAAO,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YACnD,wBAAwB;YACxB,MAAM,OAAO,GAAG,MAAM,iCAAkB,CAAC,eAAe,CAAC;gBACvD,iCAAkB,CAAC,WAAW,CAAC,cAAc;gBAC7C,iCAAkB,CAAC,WAAW,CAAC,iBAAiB;gBAChD,iCAAkB,CAAC,WAAW,CAAC,oBAAoB;aACpD,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAC7C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,iCAAkB,CAAC,OAAO,CAAC,OAAO,CAC1D,CAAC;YAEF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,MAAM,OAAO,GAAG,MAAM,iCAAkB,CAAC,OAAO,CAC9C,iCAAkB,CAAC,WAAW,CAAC,oBAAoB,EACnD;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,OAAO,EAAE,uEAAuE;gBAChF,cAAc,EAAE,IAAI;aACrB,CACF,CAAC;YAEF,OAAO,OAAO,KAAK,iCAAkB,CAAC,OAAO,CAAC,OAAO,CAAC;QACxD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAgBD,MAAM,wBAAwB,GAAG;IAC/B,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,CAAC;IACvB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,qBAAc;IA0BlD,YAAY,MAA2B;QACrC,KAAK,EAAE,CAAC;QAzBF,WAAM,GAAqB,IAAI,CAAC;QAChC,uBAAkB,GAAkC,IAAI,CAAC;QACzD,sBAAiB,GAAkC,IAAI,CAAC;QAMhE,uBAAuB;QACf,0BAAqB,GAAkB,IAAI,CAAC;QAC5C,4BAAuB,GAAkB,IAAI,CAAC;QAC9C,mBAAc,GAAY,KAAK,CAAC;QAChC,sBAAiB,GAAW,CAAC,CAAC;QAC9B,yBAAoB,GAAkC,IAAI,CAAC;QAEnE,kFAAkF;QAC1E,oBAAe,GAAY,KAAK,CAAC;QACjC,2BAAsB,GAAkC,IAAI,CAAC;QASnE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,wBAAwB,CAAC,aAAa,CAAC;QACpF,IAAI,CAAC,oBAAoB;YACvB,MAAM,CAAC,oBAAoB,IAAI,wBAAwB,CAAC,oBAAoB,CAAC;QAC/E,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,wBAAwB,CAAC,gBAAgB,CAAC;QAC7F,IAAI,CAAC,OAAO,GAAG,IAAI,iCAAU,EAAE,CAAC;QAEhC,+CAA+C;QAC/C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,IAAI,CAAC,oBAAoB,GAAG,uBAAQ,CAAC,gBAAgB,CACnD,QAAQ,EACR,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,YAA4B;QAC7D,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,yBAAyB;YACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAE7C,kDAAkD;YAClD,IACE,IAAI,CAAC,qBAAqB;gBAC1B,IAAI,CAAC,eAAe,KAAK,cAAc;gBACvC,CAAC,IAAI,CAAC,cAAc,EACpB,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAChC,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvB,qCAAqC;gBACrC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACpD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CACT,8EAA8E,CAC/E,CAAC;oBACF,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;oBACxC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAE1B,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CACT,iCAAiC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CACvF,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,iBAAiB,UAAU,EAAE,KAAK,CAAC,CAAC;gBAEvF,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACvD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxD,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACnD,IAAI,KAAK,KAAK,4BAAK,CAAC,SAAS,EAAE,CAAC;oBAC9B,YAAY,CAAC,MAAM,EAAE,CAAC;oBACtB,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,IAAI,KAAK,KAAK,4BAAK,CAAC,YAAY,EAAE,CAAC;oBACxC,YAAY,CAAC,MAAM,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC,CAAC;gBAC/E,CAAC;qBAAM,IAAI,KAAK,KAAK,4BAAK,CAAC,WAAW,EAAE,CAAC;oBACvC,YAAY,CAAC,MAAM,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,IAAI,KAAK,KAAK,4BAAK,CAAC,UAAU,EAAE,CAAC;oBACtC,2CAA2C;oBAC3C,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,2BAA2B;YAC3B,UAAU,CAAC,GAAG,EAAE;gBACd,YAAY,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC,CAAC;YAC1F,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAClF,CAAC;QAED,oCAAoC;QACpC,MAAM,cAAc,GAAG,MAAM,4BAA4B,EAAE,CAAC;QAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAE/C,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;QAE/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACtC,wEAAwE;YACxE,IAAI,CAAC,OAAO,CAAC,eAAe,CAC1B,IAAI,EAAE,2CAA2C;YACjD,EAAE,eAAe,EAAE,KAAK,EAAE,EAC1B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAChB,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;oBAChD,OAAO;gBACT,CAAC;gBAED,IAAI,MAAM,EAAE,CAAC;oBACX,2CAA2C;oBAC3C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;wBAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;oBACzE,CAAC;oBAED,2DAA2D;oBAC3D,MAAM,aAAa,GACjB,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;oBAErF,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/E,OAAO,CAAC,GAAG,CACT,wCAAwC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAC1E,CAAC;wBACF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACpB,OAAO,CAAC,IAAI,CAAC;4BACX,EAAE,EAAE,MAAM,CAAC,EAAE;4BACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,IAAI,gBAAgB;4BACzD,IAAI,EAAE,MAAM,CAAC,IAAI;yBAClB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC,CACF,CAAC;YAEF,0BAA0B;YAC1B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;gBAC5E,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,OAAwB;QACtD,oCAAoC;QACpC,MAAM,cAAc,GAAG,MAAM,4BAA4B,EAAE,CAAC;QAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAEtC,IAAI,CAAC;YACH,2EAA2E;YAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAC1D,WAAW,EAAE,KAAK,EAAE,sDAAsD;aAC3E,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;YACtC,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC;YAE3C,2EAA2E;YAC3E,MAAM,MAAM,CAAC,qCAAqC,EAAE,CAAC;YAErD,mEAAmE;YACnE,gEAAgE;YAChE,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACrD,MAAM,MAAM,CAAC,yCAAyC,CACpD,IAAI,CAAC,SAAS,CAAC,WAAW,EAC1B,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,MAAM,CACP,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACvD,CAAC;YAED,uDAAuD;YACvD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,QAAQ,CAAC,CAAC;YACvE,CAAC;YAED,uEAAuE;YACvE,yEAAyE;YACzE,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE;gBACjF,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEzF,gEAAgE;gBAChE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAE5B,6DAA6D;gBAC7D,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAE5B,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAE7B,kEAAkE;YACpE,CAAC,CAAC,CAAC;YAEH,sDAAsD;YACtD,0EAA0E;YAC1E,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,+BAA+B,CAC9D,IAAI,CAAC,SAAS,CAAC,WAAW,EAC1B,IAAI,CAAC,SAAS,CAAC,cAAc,EAC7B,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACV,yEAAyE;oBACzE,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACzC,OAAO,CAAC,GAAG,CACT,6DAA6D,EAC7D,KAAK,CAAC,OAAO,CACd,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;oBACxD,OAAO;gBACT,CAAC;gBACD,IAAI,cAAc,EAAE,KAAK,EAAE,CAAC;oBAC1B,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAClD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC,CACF,CAAC;YAEF,uEAAuE;YACvE,0EAA0E;YAC1E,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAC7D,IAAI,CAAC,SAAS,CAAC,WAAW,EAC1B,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACV,yEAAyE;oBACzE,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACzC,OAAO,CAAC,GAAG,CACT,2DAA2D,EAC3D,KAAK,CAAC,OAAO,CACd,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;oBACnE,OAAO;gBACT,CAAC;gBACD,IAAI,cAAc,EAAE,KAAK,EAAE,CAAC;oBAC1B,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAClD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC,CACF,CAAC;YAEF,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,gDAAgD;QAChD,gEAAgE;QAChE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;YACnC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAClC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAEzC,gEAAgE;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,yDAAyD;QACzD,4CAA4C;QAC5C,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAE7B,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAEnC,MAAM,IAAI,CAAC,MAAM,CAAC,yCAAyC,CACzD,IAAI,CAAC,SAAS,CAAC,WAAW,EAC1B,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,MAAM,CACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACM,WAAW;QAClB,OAAO,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,EAAE,iCAAiC;SAC9C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,wBAAwB;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,SAIrB;QACC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,QAAgB,EAAE,UAAmB;QAC1D,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QACtC,IAAI,CAAC,uBAAuB,GAAG,UAAU,IAAI,IAAI,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;CACF;AAleD,4CAkeC"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../../../src/bluetooth/adapters/native.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,8 @@ var __importStar = (this && this.__importStar) || (function () {
46
46
  Object.defineProperty(exports, "__esModule", { value: true });
47
47
  exports.NodeBLEAdapter = void 0;
48
48
  const web_bluetooth_base_1 = require("./web-bluetooth-base");
49
+ const logger_1 = require("../../shared/logger");
50
+ const log = (0, logger_1.createLogger)('NodeBLE');
49
51
  // Dynamic import for webbluetooth to avoid bundling issues in non-Node environments
50
52
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
53
  let BluetoothClass = null;
@@ -111,7 +113,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
111
113
  return new Promise((resolve, reject) => {
112
114
  const timeoutId = setTimeout(() => {
113
115
  // Timeout - return discovered devices
114
- console.log(`[NodeBLE] Scan timeout. Found ${this.discoveredDevices.length} device(s)`);
116
+ log.debug(`Scan timeout. Found ${this.discoveredDevices.length} device(s)`);
115
117
  resolve(this.discoveredDevices);
116
118
  }, timeout * 1000);
117
119
  // Create a new Bluetooth instance with deviceFound in constructor
@@ -132,7 +134,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
132
134
  // Add to discovered list
133
135
  if (!this.discoveredDevices.find((d) => d.id === device.id)) {
134
136
  this.discoveredDevices.push(discoveredDevice);
135
- console.log(`[NodeBLE] Found device: ${device.name}`);
137
+ log.debug(`Found device: ${device.name}`);
136
138
  }
137
139
  // Check if we should select this device
138
140
  let shouldSelect = false;
@@ -146,7 +148,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
146
148
  shouldSelect = true;
147
149
  }
148
150
  if (shouldSelect) {
149
- console.log(`[NodeBLE] Selected device: ${device.name}`);
151
+ log.debug(`Selected device: ${device.name}`);
150
152
  this.selectedDevice = device;
151
153
  clearTimeout(timeoutId);
152
154
  selectFn();
@@ -171,7 +173,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
171
173
  clearTimeout(timeoutId);
172
174
  if (error.name === 'NotFoundError') {
173
175
  // No device selected
174
- console.log('[NodeBLE] No device selected');
176
+ log.debug('No device selected');
175
177
  resolve(this.discoveredDevices);
176
178
  }
177
179
  else {
@@ -192,15 +194,15 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
192
194
  throw new Error('No device selected. Call scan() first.');
193
195
  }
194
196
  if (this.selectedDevice.id !== deviceId) {
195
- console.warn(`[NodeBLE] Device ID mismatch: expected ${this.selectedDevice.id}, got ${deviceId}`);
197
+ log.warn(`Device ID mismatch: expected ${this.selectedDevice.id}, got ${deviceId}`);
196
198
  }
197
199
  // Connect to GATT server
198
200
  await this.connectToDevice(this.selectedDevice);
199
201
  // Handle immediate write if provided (for authentication)
200
202
  if (options?.immediateWrite) {
201
- console.log('[NodeBLE] Sending immediate auth write...');
203
+ log.debug('Sending immediate auth write...');
202
204
  await this.write(options.immediateWrite);
203
- console.log('[NodeBLE] Immediate auth write sent');
205
+ log.debug('Immediate auth write sent');
204
206
  }
205
207
  }
206
208
  /**