@bota-dev/react-native-sdk 0.0.2

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 (177) hide show
  1. package/README.md +279 -0
  2. package/lib/commonjs/BotaClient.js +223 -0
  3. package/lib/commonjs/BotaClient.js.map +1 -0
  4. package/lib/commonjs/ble/BleManager.js +494 -0
  5. package/lib/commonjs/ble/BleManager.js.map +1 -0
  6. package/lib/commonjs/ble/constants.js +166 -0
  7. package/lib/commonjs/ble/constants.js.map +1 -0
  8. package/lib/commonjs/ble/index.js +54 -0
  9. package/lib/commonjs/ble/index.js.map +1 -0
  10. package/lib/commonjs/ble/parsers.js +345 -0
  11. package/lib/commonjs/ble/parsers.js.map +1 -0
  12. package/lib/commonjs/index.js +81 -0
  13. package/lib/commonjs/index.js.map +1 -0
  14. package/lib/commonjs/managers/DeviceManager.js +437 -0
  15. package/lib/commonjs/managers/DeviceManager.js.map +1 -0
  16. package/lib/commonjs/managers/OTAManager.js +227 -0
  17. package/lib/commonjs/managers/OTAManager.js.map +1 -0
  18. package/lib/commonjs/managers/RecordingManager.js +384 -0
  19. package/lib/commonjs/managers/RecordingManager.js.map +1 -0
  20. package/lib/commonjs/managers/index.js +27 -0
  21. package/lib/commonjs/managers/index.js.map +1 -0
  22. package/lib/commonjs/models/Device.js +2 -0
  23. package/lib/commonjs/models/Device.js.map +1 -0
  24. package/lib/commonjs/models/Recording.js +2 -0
  25. package/lib/commonjs/models/Recording.js.map +1 -0
  26. package/lib/commonjs/models/Status.js +6 -0
  27. package/lib/commonjs/models/Status.js.map +1 -0
  28. package/lib/commonjs/models/index.js +39 -0
  29. package/lib/commonjs/models/index.js.map +1 -0
  30. package/lib/commonjs/protocol/ProtocolHandler.js +343 -0
  31. package/lib/commonjs/protocol/ProtocolHandler.js.map +1 -0
  32. package/lib/commonjs/protocol/index.js +13 -0
  33. package/lib/commonjs/protocol/index.js.map +1 -0
  34. package/lib/commonjs/storage/StorageManager.js +333 -0
  35. package/lib/commonjs/storage/StorageManager.js.map +1 -0
  36. package/lib/commonjs/storage/index.js +19 -0
  37. package/lib/commonjs/storage/index.js.map +1 -0
  38. package/lib/commonjs/upload/S3Uploader.js +133 -0
  39. package/lib/commonjs/upload/S3Uploader.js.map +1 -0
  40. package/lib/commonjs/upload/UploadQueue.js +280 -0
  41. package/lib/commonjs/upload/UploadQueue.js.map +1 -0
  42. package/lib/commonjs/upload/index.js +20 -0
  43. package/lib/commonjs/upload/index.js.map +1 -0
  44. package/lib/commonjs/utils/errors.js +187 -0
  45. package/lib/commonjs/utils/errors.js.map +1 -0
  46. package/lib/commonjs/utils/index.js +40 -0
  47. package/lib/commonjs/utils/index.js.map +1 -0
  48. package/lib/commonjs/utils/logger.js +135 -0
  49. package/lib/commonjs/utils/logger.js.map +1 -0
  50. package/lib/commonjs/utils/retry.js +160 -0
  51. package/lib/commonjs/utils/retry.js.map +1 -0
  52. package/lib/module/BotaClient.js +216 -0
  53. package/lib/module/BotaClient.js.map +1 -0
  54. package/lib/module/ble/BleManager.js +484 -0
  55. package/lib/module/ble/BleManager.js.map +1 -0
  56. package/lib/module/ble/constants.js +159 -0
  57. package/lib/module/ble/constants.js.map +1 -0
  58. package/lib/module/ble/index.js +8 -0
  59. package/lib/module/ble/index.js.map +1 -0
  60. package/lib/module/ble/parsers.js +328 -0
  61. package/lib/module/ble/parsers.js.map +1 -0
  62. package/lib/module/index.js +22 -0
  63. package/lib/module/index.js.map +1 -0
  64. package/lib/module/managers/DeviceManager.js +429 -0
  65. package/lib/module/managers/DeviceManager.js.map +1 -0
  66. package/lib/module/managers/OTAManager.js +219 -0
  67. package/lib/module/managers/OTAManager.js.map +1 -0
  68. package/lib/module/managers/RecordingManager.js +376 -0
  69. package/lib/module/managers/RecordingManager.js.map +1 -0
  70. package/lib/module/managers/index.js +8 -0
  71. package/lib/module/managers/index.js.map +1 -0
  72. package/lib/module/models/Device.js +2 -0
  73. package/lib/module/models/Device.js.map +1 -0
  74. package/lib/module/models/Recording.js +2 -0
  75. package/lib/module/models/Recording.js.map +1 -0
  76. package/lib/module/models/Status.js +2 -0
  77. package/lib/module/models/Status.js.map +1 -0
  78. package/lib/module/models/index.js +8 -0
  79. package/lib/module/models/index.js.map +1 -0
  80. package/lib/module/protocol/ProtocolHandler.js +336 -0
  81. package/lib/module/protocol/ProtocolHandler.js.map +1 -0
  82. package/lib/module/protocol/index.js +6 -0
  83. package/lib/module/protocol/index.js.map +1 -0
  84. package/lib/module/storage/StorageManager.js +324 -0
  85. package/lib/module/storage/StorageManager.js.map +1 -0
  86. package/lib/module/storage/index.js +6 -0
  87. package/lib/module/storage/index.js.map +1 -0
  88. package/lib/module/upload/S3Uploader.js +126 -0
  89. package/lib/module/upload/S3Uploader.js.map +1 -0
  90. package/lib/module/upload/UploadQueue.js +272 -0
  91. package/lib/module/upload/UploadQueue.js.map +1 -0
  92. package/lib/module/upload/index.js +7 -0
  93. package/lib/module/upload/index.js.map +1 -0
  94. package/lib/module/utils/errors.js +173 -0
  95. package/lib/module/utils/errors.js.map +1 -0
  96. package/lib/module/utils/index.js +8 -0
  97. package/lib/module/utils/index.js.map +1 -0
  98. package/lib/module/utils/logger.js +129 -0
  99. package/lib/module/utils/logger.js.map +1 -0
  100. package/lib/module/utils/retry.js +149 -0
  101. package/lib/module/utils/retry.js.map +1 -0
  102. package/lib/typescript/src/BotaClient.d.ts +77 -0
  103. package/lib/typescript/src/BotaClient.d.ts.map +1 -0
  104. package/lib/typescript/src/ble/BleManager.d.ts +111 -0
  105. package/lib/typescript/src/ble/BleManager.d.ts.map +1 -0
  106. package/lib/typescript/src/ble/constants.d.ts +111 -0
  107. package/lib/typescript/src/ble/constants.d.ts.map +1 -0
  108. package/lib/typescript/src/ble/index.d.ts +7 -0
  109. package/lib/typescript/src/ble/index.d.ts.map +1 -0
  110. package/lib/typescript/src/ble/parsers.d.ts +100 -0
  111. package/lib/typescript/src/ble/parsers.d.ts.map +1 -0
  112. package/lib/typescript/src/index.d.ts +16 -0
  113. package/lib/typescript/src/index.d.ts.map +1 -0
  114. package/lib/typescript/src/managers/DeviceManager.d.ts +84 -0
  115. package/lib/typescript/src/managers/DeviceManager.d.ts.map +1 -0
  116. package/lib/typescript/src/managers/OTAManager.d.ts +78 -0
  117. package/lib/typescript/src/managers/OTAManager.d.ts.map +1 -0
  118. package/lib/typescript/src/managers/RecordingManager.d.ts +90 -0
  119. package/lib/typescript/src/managers/RecordingManager.d.ts.map +1 -0
  120. package/lib/typescript/src/managers/index.d.ts +7 -0
  121. package/lib/typescript/src/managers/index.d.ts.map +1 -0
  122. package/lib/typescript/src/models/Device.d.ts +139 -0
  123. package/lib/typescript/src/models/Device.d.ts.map +1 -0
  124. package/lib/typescript/src/models/Recording.d.ts +110 -0
  125. package/lib/typescript/src/models/Recording.d.ts.map +1 -0
  126. package/lib/typescript/src/models/Status.d.ts +104 -0
  127. package/lib/typescript/src/models/Status.d.ts.map +1 -0
  128. package/lib/typescript/src/models/index.d.ts +7 -0
  129. package/lib/typescript/src/models/index.d.ts.map +1 -0
  130. package/lib/typescript/src/protocol/ProtocolHandler.d.ts +69 -0
  131. package/lib/typescript/src/protocol/ProtocolHandler.d.ts.map +1 -0
  132. package/lib/typescript/src/protocol/index.d.ts +5 -0
  133. package/lib/typescript/src/protocol/index.d.ts.map +1 -0
  134. package/lib/typescript/src/storage/StorageManager.d.ts +116 -0
  135. package/lib/typescript/src/storage/StorageManager.d.ts.map +1 -0
  136. package/lib/typescript/src/storage/index.d.ts +5 -0
  137. package/lib/typescript/src/storage/index.d.ts.map +1 -0
  138. package/lib/typescript/src/upload/S3Uploader.d.ts +38 -0
  139. package/lib/typescript/src/upload/S3Uploader.d.ts.map +1 -0
  140. package/lib/typescript/src/upload/UploadQueue.d.ts +95 -0
  141. package/lib/typescript/src/upload/UploadQueue.d.ts.map +1 -0
  142. package/lib/typescript/src/upload/index.d.ts +6 -0
  143. package/lib/typescript/src/upload/index.d.ts.map +1 -0
  144. package/lib/typescript/src/utils/errors.d.ts +82 -0
  145. package/lib/typescript/src/utils/errors.d.ts.map +1 -0
  146. package/lib/typescript/src/utils/index.d.ts +7 -0
  147. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  148. package/lib/typescript/src/utils/logger.d.ts +68 -0
  149. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  150. package/lib/typescript/src/utils/retry.d.ts +53 -0
  151. package/lib/typescript/src/utils/retry.d.ts.map +1 -0
  152. package/package.json +95 -0
  153. package/src/BotaClient.ts +238 -0
  154. package/src/ble/BleManager.ts +573 -0
  155. package/src/ble/constants.ts +158 -0
  156. package/src/ble/index.ts +7 -0
  157. package/src/ble/parsers.ts +395 -0
  158. package/src/index.ts +64 -0
  159. package/src/managers/DeviceManager.ts +545 -0
  160. package/src/managers/OTAManager.ts +263 -0
  161. package/src/managers/RecordingManager.ts +434 -0
  162. package/src/managers/index.ts +12 -0
  163. package/src/models/Device.ts +164 -0
  164. package/src/models/Recording.ts +123 -0
  165. package/src/models/Status.ts +126 -0
  166. package/src/models/index.ts +7 -0
  167. package/src/protocol/ProtocolHandler.ts +459 -0
  168. package/src/protocol/index.ts +5 -0
  169. package/src/storage/StorageManager.ts +343 -0
  170. package/src/storage/index.ts +5 -0
  171. package/src/upload/S3Uploader.ts +164 -0
  172. package/src/upload/UploadQueue.ts +310 -0
  173. package/src/upload/index.ts +6 -0
  174. package/src/utils/errors.ts +310 -0
  175. package/src/utils/index.ts +7 -0
  176. package/src/utils/logger.ts +137 -0
  177. package/src/utils/retry.ts +177 -0
package/README.md ADDED
@@ -0,0 +1,279 @@
1
+ # @bota/react-native-sdk
2
+
3
+ Official React Native SDK for Bota wearable devices.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @bota/react-native-sdk react-native-ble-plx
9
+ # or
10
+ yarn add @bota/react-native-sdk react-native-ble-plx
11
+ ```
12
+
13
+ ### iOS Setup
14
+
15
+ 1. Add Bluetooth permissions to `ios/YourApp/Info.plist`:
16
+
17
+ ```xml
18
+ <key>NSBluetoothAlwaysUsageDescription</key>
19
+ <string>This app uses Bluetooth to connect to Bota recording devices</string>
20
+ <key>UIBackgroundModes</key>
21
+ <array>
22
+ <string>bluetooth-central</string>
23
+ </array>
24
+ ```
25
+
26
+ 2. Install pods:
27
+
28
+ ```bash
29
+ cd ios && pod install
30
+ ```
31
+
32
+ ### Android Setup
33
+
34
+ 1. Add permissions to `android/app/src/main/AndroidManifest.xml`:
35
+
36
+ ```xml
37
+ <uses-permission android:name="android.permission.BLUETOOTH" />
38
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
39
+ <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
40
+ <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
41
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
42
+ ```
43
+
44
+ ## Quick Start
45
+
46
+ ```typescript
47
+ import { BotaClient } from '@bota/react-native-sdk';
48
+
49
+ // Initialize SDK
50
+ await BotaClient.configure({
51
+ environment: 'production',
52
+ logLevel: 'info',
53
+ });
54
+
55
+ // Wait for Bluetooth
56
+ await BotaClient.waitForBluetooth();
57
+
58
+ // Scan for devices
59
+ BotaClient.devices.on('deviceDiscovered', (device) => {
60
+ console.log('Found device:', device.name);
61
+ });
62
+
63
+ BotaClient.devices.startScan();
64
+
65
+ // Connect to a device
66
+ const connectedDevice = await BotaClient.devices.connect(discoveredDevice);
67
+
68
+ // Provision with token from your backend
69
+ await BotaClient.devices.provision(connectedDevice, deviceToken, 'production');
70
+
71
+ // List recordings
72
+ const recordings = await BotaClient.recordings.listRecordings(connectedDevice);
73
+
74
+ // Sync a recording
75
+ for await (const progress of BotaClient.recordings.syncRecording(
76
+ connectedDevice,
77
+ recording,
78
+ uploadInfo // from your backend
79
+ )) {
80
+ console.log(`${progress.stage}: ${progress.progress * 100}%`);
81
+ }
82
+ ```
83
+
84
+ ## API Reference
85
+
86
+ ### BotaClient
87
+
88
+ Main entry point for the SDK.
89
+
90
+ ```typescript
91
+ // Configure SDK
92
+ await BotaClient.configure({
93
+ environment: 'production' | 'sandbox',
94
+ backgroundSyncEnabled: boolean,
95
+ wifiOnlyUpload: boolean,
96
+ logLevel: 'debug' | 'info' | 'warn' | 'error' | 'none',
97
+ });
98
+
99
+ // Access managers
100
+ BotaClient.devices // DeviceManager
101
+ BotaClient.recordings // RecordingManager
102
+ BotaClient.ota // OTAManager
103
+
104
+ // State
105
+ BotaClient.state // 'uninitialized' | 'initializing' | 'ready' | 'error'
106
+ BotaClient.bluetoothState // 'unknown' | 'poweredOn' | 'poweredOff' | ...
107
+ BotaClient.isBluetoothReady
108
+ ```
109
+
110
+ ### DeviceManager
111
+
112
+ Handles device discovery, connection, and provisioning.
113
+
114
+ ```typescript
115
+ // Scanning
116
+ BotaClient.devices.startScan({ timeout: 30000, deviceTypes: ['bota_pin'] });
117
+ BotaClient.devices.stopScan();
118
+ BotaClient.devices.getDiscoveredDevices();
119
+
120
+ // Connection
121
+ const device = await BotaClient.devices.connect(discoveredDevice);
122
+ await BotaClient.devices.disconnect(device);
123
+ BotaClient.devices.isConnected(deviceId);
124
+
125
+ // Provisioning
126
+ await BotaClient.devices.provision(device, token, 'production');
127
+ await BotaClient.devices.isProvisioned(device);
128
+
129
+ // Status
130
+ const status = await BotaClient.devices.getStatus(device);
131
+ const unsubscribe = BotaClient.devices.subscribeToStatus(device, (status) => {});
132
+
133
+ // Events
134
+ BotaClient.devices.on('deviceDiscovered', (device) => {});
135
+ BotaClient.devices.on('deviceConnected', (device) => {});
136
+ BotaClient.devices.on('deviceDisconnected', (deviceId, error) => {});
137
+ BotaClient.devices.on('deviceStatusUpdated', (deviceId, status) => {});
138
+ ```
139
+
140
+ ### RecordingManager
141
+
142
+ Handles recording transfer and upload.
143
+
144
+ ```typescript
145
+ // List recordings on device
146
+ const recordings = await BotaClient.recordings.listRecordings(device);
147
+
148
+ // Sync a recording (transfer + upload)
149
+ for await (const progress of BotaClient.recordings.syncRecording(
150
+ device,
151
+ recording,
152
+ uploadInfo
153
+ )) {
154
+ // progress.stage: 'preparing' | 'transferring' | 'uploading' | 'completing' | 'completed' | 'failed'
155
+ // progress.progress: 0.0 - 1.0
156
+ }
157
+
158
+ // Sync all recordings
159
+ for await (const progress of BotaClient.recordings.syncAllRecordings(
160
+ device,
161
+ async (recording) => {
162
+ // Get upload info from your backend
163
+ return await yourBackend.getUploadInfo(device.serialNumber, recording);
164
+ }
165
+ )) {
166
+ console.log(`Recording ${progress.recordingIndex}/${progress.totalRecordings}`);
167
+ }
168
+
169
+ // Upload queue management
170
+ BotaClient.recordings.getPendingUploads();
171
+ BotaClient.recordings.cancelUpload(taskId);
172
+ BotaClient.recordings.retryFailedUploads();
173
+ BotaClient.recordings.pauseUploads();
174
+ BotaClient.recordings.resumeUploads();
175
+
176
+ // Events
177
+ BotaClient.recordings.on('syncStarted', (uuid) => {});
178
+ BotaClient.recordings.on('syncCompleted', (uuid, recordingId) => {});
179
+ BotaClient.recordings.on('syncFailed', (uuid, error) => {});
180
+ BotaClient.recordings.on('uploadProgress', (taskId, progress) => {});
181
+ ```
182
+
183
+ ### Types
184
+
185
+ ```typescript
186
+ interface DiscoveredDevice {
187
+ id: string;
188
+ name: string;
189
+ deviceType: 'bota_pin' | 'bota_pin_4g' | 'bota_note';
190
+ firmwareVersion: string;
191
+ pairingState: 'unpaired' | 'pairing' | 'paired' | 'error';
192
+ rssi: number;
193
+ }
194
+
195
+ interface ConnectedDevice {
196
+ id: string;
197
+ serialNumber: string;
198
+ deviceType: DeviceType;
199
+ firmwareVersion: string;
200
+ isProvisioned: boolean;
201
+ connectionState: ConnectionState;
202
+ mtu: number;
203
+ }
204
+
205
+ interface DeviceStatus {
206
+ batteryLevel: number;
207
+ storageUsedPercent: number;
208
+ state: DeviceState;
209
+ pendingRecordings: number;
210
+ lastSyncAt: Date | null;
211
+ flags: DeviceFlags;
212
+ }
213
+
214
+ interface DeviceRecording {
215
+ uuid: string;
216
+ startedAt: Date;
217
+ durationMs: number;
218
+ fileSizeBytes: number;
219
+ codec: AudioCodec;
220
+ }
221
+
222
+ interface UploadInfo {
223
+ uploadUrl: string; // Pre-signed S3 URL
224
+ uploadToken: string; // Upload token (up_*)
225
+ recordingId: string; // Recording ID (rec_*)
226
+ completeUrl: string; // URL to call when complete
227
+ expiresAt: Date;
228
+ }
229
+
230
+ interface SyncProgress {
231
+ stage: SyncStage;
232
+ progress: number;
233
+ bytesTransferred?: number;
234
+ bytesUploaded?: number;
235
+ totalBytes?: number;
236
+ recordingId?: string;
237
+ error?: string;
238
+ }
239
+ ```
240
+
241
+ ## Error Handling
242
+
243
+ ```typescript
244
+ import {
245
+ BotaError,
246
+ BluetoothError,
247
+ DeviceError,
248
+ ProvisioningError,
249
+ TransferError,
250
+ UploadError,
251
+ } from '@bota/react-native-sdk';
252
+
253
+ try {
254
+ await BotaClient.devices.connect(device);
255
+ } catch (error) {
256
+ if (error instanceof BluetoothError) {
257
+ // Handle Bluetooth errors
258
+ } else if (error instanceof DeviceError) {
259
+ // Handle device errors (connection, not found, etc.)
260
+ } else if (error instanceof ProvisioningError) {
261
+ // Handle provisioning errors
262
+ }
263
+ }
264
+ ```
265
+
266
+ ## Integration with Your Backend
267
+
268
+ The SDK does not communicate directly with the Bota API. Your mobile app should:
269
+
270
+ 1. Authenticate users through your own backend
271
+ 2. Call your backend to register devices and get device tokens
272
+ 3. Call your backend to create recordings and get upload URLs
273
+ 4. The SDK uploads directly to S3 using the pre-signed URLs
274
+
275
+ See the [Bota API documentation](https://docs.bota.dev) for backend integration details.
276
+
277
+ ## License
278
+
279
+ MIT
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BotaClient = void 0;
7
+ var _reactNativeBlePlx = require("react-native-ble-plx");
8
+ var _eventemitter = _interopRequireDefault(require("eventemitter3"));
9
+ var _BleManager = require("./ble/BleManager");
10
+ var _DeviceManager = require("./managers/DeviceManager");
11
+ var _RecordingManager = require("./managers/RecordingManager");
12
+ var _OTAManager = require("./managers/OTAManager");
13
+ var _errors = require("./utils/errors");
14
+ var _logger = require("./utils/logger");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ /**
17
+ * Bota Client - Main entry point for the Bota React Native SDK
18
+ */
19
+
20
+ const log = _logger.logger.tag('BotaClient');
21
+
22
+ /**
23
+ * Map react-native-ble-plx State to BluetoothState
24
+ */
25
+ function mapBluetoothState(state) {
26
+ switch (state) {
27
+ case _reactNativeBlePlx.State.Unknown:
28
+ return 'unknown';
29
+ case _reactNativeBlePlx.State.Resetting:
30
+ return 'resetting';
31
+ case _reactNativeBlePlx.State.Unsupported:
32
+ return 'unsupported';
33
+ case _reactNativeBlePlx.State.Unauthorized:
34
+ return 'unauthorized';
35
+ case _reactNativeBlePlx.State.PoweredOff:
36
+ return 'poweredOff';
37
+ case _reactNativeBlePlx.State.PoweredOn:
38
+ return 'poweredOn';
39
+ default:
40
+ return 'unknown';
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Bota Client class - singleton SDK entry point
46
+ */
47
+ class BotaClientImpl extends _eventemitter.default {
48
+ _config = null;
49
+ _state = 'uninitialized';
50
+ _bluetoothState = 'unknown';
51
+ _bleManager = null;
52
+ _deviceManager = null;
53
+ _recordingManager = null;
54
+ _otaManager = null;
55
+
56
+ /**
57
+ * Get current SDK state
58
+ */
59
+ get state() {
60
+ return this._state;
61
+ }
62
+
63
+ /**
64
+ * Get current Bluetooth state
65
+ */
66
+ get bluetoothState() {
67
+ return this._bluetoothState;
68
+ }
69
+
70
+ /**
71
+ * Check if Bluetooth is ready
72
+ */
73
+ get isBluetoothReady() {
74
+ return this._bluetoothState === 'poweredOn';
75
+ }
76
+
77
+ /**
78
+ * Check if SDK is initialized
79
+ */
80
+ get isInitialized() {
81
+ return this._state === 'ready';
82
+ }
83
+
84
+ /**
85
+ * Get current configuration
86
+ */
87
+ get config() {
88
+ return this._config;
89
+ }
90
+
91
+ /**
92
+ * Get device manager
93
+ */
94
+ get devices() {
95
+ if (!this._deviceManager) {
96
+ throw _errors.SdkError.notInitialized();
97
+ }
98
+ return this._deviceManager;
99
+ }
100
+
101
+ /**
102
+ * Get recording manager
103
+ */
104
+ get recordings() {
105
+ if (!this._recordingManager) {
106
+ throw _errors.SdkError.notInitialized();
107
+ }
108
+ return this._recordingManager;
109
+ }
110
+
111
+ /**
112
+ * Get OTA manager
113
+ */
114
+ get ota() {
115
+ if (!this._otaManager) {
116
+ throw _errors.SdkError.notInitialized();
117
+ }
118
+ return this._otaManager;
119
+ }
120
+
121
+ /**
122
+ * Configure and initialize the SDK
123
+ */
124
+ async configure(config = {}) {
125
+ if (this._state === 'ready') {
126
+ log.warn('SDK already configured, reconfiguring');
127
+ await this.destroy();
128
+ }
129
+ log.info('Configuring SDK', config);
130
+ this._config = {
131
+ environment: config.environment ?? 'production',
132
+ backgroundSyncEnabled: config.backgroundSyncEnabled ?? true,
133
+ wifiOnlyUpload: config.wifiOnlyUpload ?? false,
134
+ logLevel: config.logLevel ?? 'warn',
135
+ debug: config.debug ?? false
136
+ };
137
+
138
+ // Set log level
139
+ _logger.logger.setLevel(this._config.logLevel);
140
+ this.setState('initializing');
141
+ try {
142
+ // Initialize BLE manager
143
+ this._bleManager = (0, _BleManager.getBleManager)();
144
+
145
+ // Set up Bluetooth state listener
146
+ this._bleManager.on('stateChange', state => {
147
+ const mappedState = mapBluetoothState(state);
148
+ if (mappedState !== this._bluetoothState) {
149
+ this._bluetoothState = mappedState;
150
+ this.emit('bluetoothStateChanged', mappedState);
151
+ }
152
+ });
153
+
154
+ // Get initial Bluetooth state
155
+ const initialState = await this._bleManager.getState();
156
+ this._bluetoothState = mapBluetoothState(initialState);
157
+
158
+ // Initialize managers
159
+ this._deviceManager = new _DeviceManager.DeviceManager();
160
+ this._deviceManager.initialize();
161
+ this._recordingManager = new _RecordingManager.RecordingManager();
162
+ await this._recordingManager.initialize();
163
+ this._otaManager = new _OTAManager.OTAManager();
164
+ this.setState('ready');
165
+ log.info('SDK configured successfully', {
166
+ environment: this._config.environment,
167
+ bluetoothState: this._bluetoothState
168
+ });
169
+ } catch (error) {
170
+ this.setState('error');
171
+ log.error('Failed to configure SDK', error);
172
+ throw error;
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Wait for Bluetooth to be ready
178
+ */
179
+ async waitForBluetooth(timeoutMs = 10000) {
180
+ if (!this._bleManager) {
181
+ throw _errors.SdkError.notInitialized();
182
+ }
183
+ await this._bleManager.waitForReady(timeoutMs);
184
+ }
185
+
186
+ /**
187
+ * Destroy the SDK and clean up resources
188
+ */
189
+ async destroy() {
190
+ log.info('Destroying SDK');
191
+ this._deviceManager?.destroy();
192
+ this._recordingManager?.destroy();
193
+ this._otaManager?.destroy();
194
+ (0, _BleManager.resetBleManager)();
195
+ this._deviceManager = null;
196
+ this._recordingManager = null;
197
+ this._otaManager = null;
198
+ this._bleManager = null;
199
+ this._config = null;
200
+ this.setState('uninitialized');
201
+ this.removeAllListeners();
202
+ }
203
+
204
+ /**
205
+ * Set SDK state and emit event
206
+ */
207
+ setState(state) {
208
+ if (state !== this._state) {
209
+ this._state = state;
210
+ this.emit('stateChanged', state);
211
+ }
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Singleton instance
217
+ */
218
+ const BotaClient = exports.BotaClient = new BotaClientImpl();
219
+
220
+ /**
221
+ * Export types
222
+ */
223
+ //# sourceMappingURL=BotaClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeBlePlx","require","_eventemitter","_interopRequireDefault","_BleManager","_DeviceManager","_RecordingManager","_OTAManager","_errors","_logger","e","__esModule","default","log","logger","tag","mapBluetoothState","state","State","Unknown","Resetting","Unsupported","Unauthorized","PoweredOff","PoweredOn","BotaClientImpl","EventEmitter","_config","_state","_bluetoothState","_bleManager","_deviceManager","_recordingManager","_otaManager","bluetoothState","isBluetoothReady","isInitialized","config","devices","SdkError","notInitialized","recordings","ota","configure","warn","destroy","info","environment","backgroundSyncEnabled","wifiOnlyUpload","logLevel","debug","setLevel","setState","getBleManager","on","mappedState","emit","initialState","getState","DeviceManager","initialize","RecordingManager","OTAManager","error","waitForBluetooth","timeoutMs","waitForReady","resetBleManager","removeAllListeners","BotaClient","exports"],"sourceRoot":"../../src","sources":["BotaClient.ts"],"mappings":"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","ignoreList":[]}