@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
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "BluetoothError", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _errors.BluetoothError;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "BotaClient", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _BotaClient.BotaClient;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "BotaError", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _errors.BotaError;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "DeviceError", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _errors.DeviceError;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "DeviceManager", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _managers.DeviceManager;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "OTAManager", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _managers.OTAManager;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "ProvisioningError", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _errors.ProvisioningError;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "RecordingManager", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _managers.RecordingManager;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "SdkError", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _errors.SdkError;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "TransferError", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _errors.TransferError;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "UploadError", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _errors.UploadError;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "isBotaError", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _errors.isBotaError;
76
+ }
77
+ });
78
+ var _BotaClient = require("./BotaClient");
79
+ var _managers = require("./managers");
80
+ var _errors = require("./utils/errors");
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_BotaClient","require","_managers","_errors"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAAA,WAAA,GAAAC,OAAA;AAIA,IAAAC,SAAA,GAAAD,OAAA;AAyCA,IAAAE,OAAA,GAAAF,OAAA","ignoreList":[]}
@@ -0,0 +1,437 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DeviceManager = void 0;
7
+ var _buffer = require("buffer");
8
+ var _eventemitter = _interopRequireDefault(require("eventemitter3"));
9
+ var _BleManager = require("../ble/BleManager");
10
+ var _constants = require("../ble/constants");
11
+ var _parsers = require("../ble/parsers");
12
+ var _errors = require("../utils/errors");
13
+ var _logger = require("../utils/logger");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ /**
16
+ * Device Manager - Handles device discovery, connection, and provisioning
17
+ */
18
+
19
+ const log = _logger.logger.tag('DeviceManager');
20
+
21
+ /**
22
+ * Device Manager class
23
+ */
24
+ class DeviceManager extends _eventemitter.default {
25
+ connectedDevices = new Map();
26
+ statusSubscriptions = new Map();
27
+ isInitialized = false;
28
+ constructor() {
29
+ super();
30
+ this.bleManager = (0, _BleManager.getBleManager)();
31
+ this.setupBleListeners();
32
+ }
33
+
34
+ /**
35
+ * Initialize the device manager
36
+ */
37
+ initialize() {
38
+ if (this.isInitialized) {
39
+ return;
40
+ }
41
+ this.isInitialized = true;
42
+ log.info('DeviceManager initialized');
43
+ }
44
+
45
+ /**
46
+ * Set up BLE event listeners
47
+ */
48
+ setupBleListeners() {
49
+ this.bleManager.on('deviceDiscovered', device => {
50
+ this.emit('deviceDiscovered', device);
51
+ });
52
+ this.bleManager.on('deviceConnected', deviceId => {
53
+ const device = this.connectedDevices.get(deviceId);
54
+ if (device) {
55
+ this.emit('deviceConnected', device);
56
+ }
57
+ });
58
+ this.bleManager.on('deviceDisconnected', (deviceId, error) => {
59
+ const device = this.connectedDevices.get(deviceId);
60
+ if (device) {
61
+ // Update connection state
62
+ device.connectionState = 'disconnected';
63
+ }
64
+ this.connectedDevices.delete(deviceId);
65
+
66
+ // Clean up status subscription
67
+ this.statusSubscriptions.get(deviceId)?.remove();
68
+ this.statusSubscriptions.delete(deviceId);
69
+ this.emit('deviceDisconnected', deviceId, error);
70
+ });
71
+ }
72
+
73
+ /**
74
+ * Start scanning for Bota devices
75
+ */
76
+ async startScan(options = {}) {
77
+ log.info('Starting device scan', options);
78
+ this.emit('scanStarted');
79
+ try {
80
+ await this.bleManager.startScan(options);
81
+ } catch (error) {
82
+ this.emit('scanError', error);
83
+ throw error;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Stop scanning for devices
89
+ */
90
+ stopScan() {
91
+ log.info('Stopping device scan');
92
+ this.bleManager.stopScan();
93
+ this.emit('scanStopped');
94
+ }
95
+
96
+ /**
97
+ * Get list of discovered devices
98
+ */
99
+ getDiscoveredDevices() {
100
+ return this.bleManager.getDiscoveredDevices();
101
+ }
102
+
103
+ /**
104
+ * Get list of connected devices
105
+ */
106
+ getConnectedDevices() {
107
+ return Array.from(this.connectedDevices.values());
108
+ }
109
+
110
+ /**
111
+ * Connect to a discovered device
112
+ */
113
+ async connect(device) {
114
+ log.info('Connecting to device', {
115
+ deviceId: device.id,
116
+ name: device.name
117
+ });
118
+
119
+ // Check if already connected
120
+ const existing = this.connectedDevices.get(device.id);
121
+ if (existing && existing.connectionState === 'connected') {
122
+ log.debug('Device already connected', {
123
+ deviceId: device.id
124
+ });
125
+ return existing;
126
+ }
127
+
128
+ // Emit connecting state
129
+ this.emit('connectionStateChanged', device.id, 'connecting');
130
+ try {
131
+ // Connect via BLE manager
132
+ await this.bleManager.connect(device.id);
133
+
134
+ // Read device information
135
+ const serialNumber = await this.readSerialNumber(device.id);
136
+ const firmwareVersion = await this.readFirmwareVersion(device.id);
137
+ const hardwareRevision = await this.readHardwareRevision(device.id);
138
+ const pairingState = await this.readPairingState(device.id);
139
+ const mtu = await this.bleManager.getMtu(device.id);
140
+ const connectedDevice = {
141
+ id: device.id,
142
+ serialNumber,
143
+ deviceType: device.deviceType,
144
+ firmwareVersion,
145
+ hardwareRevision,
146
+ isProvisioned: pairingState === 'paired',
147
+ connectionState: 'connected',
148
+ mtu
149
+ };
150
+ this.connectedDevices.set(device.id, connectedDevice);
151
+ log.info('Device connected successfully', {
152
+ deviceId: device.id,
153
+ serialNumber,
154
+ isProvisioned: connectedDevice.isProvisioned
155
+ });
156
+ this.emit('connectionStateChanged', device.id, 'connected');
157
+ return connectedDevice;
158
+ } catch (error) {
159
+ this.emit('connectionStateChanged', device.id, 'disconnected');
160
+ throw error;
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Disconnect from a device
166
+ */
167
+ async disconnect(device) {
168
+ log.info('Disconnecting from device', {
169
+ deviceId: device.id
170
+ });
171
+ this.emit('connectionStateChanged', device.id, 'disconnecting');
172
+
173
+ // Clean up status subscription
174
+ this.statusSubscriptions.get(device.id)?.remove();
175
+ this.statusSubscriptions.delete(device.id);
176
+ await this.bleManager.disconnect(device.id);
177
+ this.connectedDevices.delete(device.id);
178
+ this.emit('connectionStateChanged', device.id, 'disconnected');
179
+ }
180
+
181
+ /**
182
+ * Check if a device is connected
183
+ */
184
+ isConnected(deviceId) {
185
+ return this.bleManager.isConnected(deviceId);
186
+ }
187
+
188
+ /**
189
+ * Provision a device with a token
190
+ */
191
+ async provision(device, deviceToken, environment = 'production') {
192
+ log.info('Provisioning device', {
193
+ deviceId: device.id,
194
+ environment
195
+ });
196
+ if (!this.isConnected(device.id)) {
197
+ throw _errors.DeviceError.notConnected(device.id);
198
+ }
199
+
200
+ // Check current pairing state
201
+ const pairingState = await this.readPairingState(device.id);
202
+ if (pairingState === 'paired') {
203
+ log.warn('Device is already provisioned', {
204
+ deviceId: device.id
205
+ });
206
+ throw _errors.ProvisioningError.alreadyProvisioned(device.id);
207
+ }
208
+
209
+ // Set up provisioning result listener
210
+ const resultPromise = this.waitForProvisioningResult(device.id);
211
+ try {
212
+ // Write API endpoint
213
+ await this.writeApiEndpoint(device.id, environment);
214
+
215
+ // Write device token (chunked)
216
+ await this.writeDeviceToken(device.id, deviceToken);
217
+
218
+ // Wait for provisioning result
219
+ const result = await resultPromise;
220
+ if (!result.success) {
221
+ switch (result.error) {
222
+ case 'invalid_token':
223
+ throw _errors.ProvisioningError.invalidToken(device.id);
224
+ case 'storage_error':
225
+ throw _errors.ProvisioningError.storageError(device.id);
226
+ case 'chunk_error':
227
+ throw _errors.ProvisioningError.chunkError(device.id);
228
+ default:
229
+ throw new _errors.ProvisioningError('Provisioning failed', 'PROVISIONING_FAILED', device.id);
230
+ }
231
+ }
232
+
233
+ // Sync time to device
234
+ await this.syncTime(device.id);
235
+
236
+ // Update device state
237
+ device.isProvisioned = true;
238
+ log.info('Device provisioned successfully', {
239
+ deviceId: device.id
240
+ });
241
+ } catch (error) {
242
+ log.error('Provisioning failed', error, {
243
+ deviceId: device.id
244
+ });
245
+ throw error;
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Check if a device is provisioned
251
+ */
252
+ async isProvisioned(device) {
253
+ const pairingState = await this.readPairingState(device.id);
254
+ return pairingState === 'paired';
255
+ }
256
+
257
+ /**
258
+ * Get device status
259
+ */
260
+ async getStatus(device) {
261
+ if (!this.isConnected(device.id)) {
262
+ throw _errors.DeviceError.notConnected(device.id);
263
+ }
264
+ const data = await this.bleManager.readCharacteristic(device.id, _constants.SERVICE_BOTA_CONTROL, _constants.CHAR_DEVICE_STATUS);
265
+ return (0, _parsers.parseDeviceStatus)(data);
266
+ }
267
+
268
+ /**
269
+ * Subscribe to device status updates
270
+ */
271
+ subscribeToStatus(device, callback) {
272
+ if (!this.isConnected(device.id)) {
273
+ throw _errors.DeviceError.notConnected(device.id);
274
+ }
275
+
276
+ // Remove existing subscription
277
+ this.statusSubscriptions.get(device.id)?.remove();
278
+ const subscription = this.bleManager.subscribeToCharacteristic(device.id, _constants.SERVICE_BOTA_CONTROL, _constants.CHAR_DEVICE_STATUS, data => {
279
+ try {
280
+ const status = (0, _parsers.parseDeviceStatus)(data);
281
+ this.emit('deviceStatusUpdated', device.id, status);
282
+ callback(status);
283
+ } catch (error) {
284
+ log.error('Failed to parse status update', error);
285
+ }
286
+ }, error => {
287
+ log.error('Status subscription error', error);
288
+ });
289
+ this.statusSubscriptions.set(device.id, subscription);
290
+ return () => {
291
+ subscription.remove();
292
+ this.statusSubscriptions.delete(device.id);
293
+ };
294
+ }
295
+
296
+ /**
297
+ * Sync time to device
298
+ */
299
+ async syncTime(deviceId) {
300
+ log.debug('Syncing time to device', {
301
+ deviceId
302
+ });
303
+ const timeSyncData = (0, _parsers.createTimeSyncData)();
304
+ await this.bleManager.writeCharacteristic(deviceId, _constants.SERVICE_BOTA_CONTROL, _constants.CHAR_TIME_SYNC, timeSyncData);
305
+ }
306
+
307
+ // Private helper methods
308
+
309
+ async readSerialNumber(deviceId) {
310
+ const data = await this.bleManager.readCharacteristic(deviceId, _constants.SERVICE_DEVICE_INFO, _constants.CHAR_SERIAL_NUMBER);
311
+ return data.toString('utf8').replace(/\0/g, '');
312
+ }
313
+ async readFirmwareVersion(deviceId) {
314
+ const data = await this.bleManager.readCharacteristic(deviceId, _constants.SERVICE_DEVICE_INFO, _constants.CHAR_FIRMWARE_REVISION);
315
+ return data.toString('utf8').replace(/\0/g, '');
316
+ }
317
+ async readHardwareRevision(deviceId) {
318
+ try {
319
+ const data = await this.bleManager.readCharacteristic(deviceId, _constants.SERVICE_DEVICE_INFO, _constants.CHAR_HARDWARE_REVISION);
320
+ return data.toString('utf8').replace(/\0/g, '');
321
+ } catch {
322
+ return undefined;
323
+ }
324
+ }
325
+ async readPairingState(deviceId) {
326
+ const data = await this.bleManager.readCharacteristic(deviceId, _constants.SERVICE_BOTA_PROVISIONING, _constants.CHAR_PAIRING_STATE);
327
+ if (data.length < 1) {
328
+ return 'unpaired';
329
+ }
330
+ return (0, _parsers.parsePairingState)(data[0]);
331
+ }
332
+ async writeApiEndpoint(deviceId, environment) {
333
+ const endpointByte = environment === 'production' ? _constants.API_ENDPOINT_PRODUCTION : _constants.API_ENDPOINT_SANDBOX;
334
+ await this.bleManager.writeCharacteristic(deviceId, _constants.SERVICE_BOTA_PROVISIONING, _constants.CHAR_API_ENDPOINT, _buffer.Buffer.from([endpointByte]));
335
+ }
336
+ async writeDeviceToken(deviceId, token) {
337
+ const mtu = await this.bleManager.getMtu(deviceId);
338
+ const maxChunkSize = mtu - 5; // Account for BLE overhead + chunk header
339
+
340
+ const tokenBuffer = _buffer.Buffer.from(token, 'utf8');
341
+ const totalChunks = Math.ceil(tokenBuffer.length / (maxChunkSize - 2));
342
+ log.debug('Writing device token', {
343
+ deviceId,
344
+ tokenLength: token.length,
345
+ totalChunks,
346
+ mtu
347
+ });
348
+ for (let i = 0; i < totalChunks; i++) {
349
+ const start = i * (maxChunkSize - 2);
350
+ const end = Math.min(start + (maxChunkSize - 2), tokenBuffer.length);
351
+ const chunkData = tokenBuffer.slice(start, end);
352
+
353
+ // Create chunk with header: [chunk_index, total_chunks, ...data]
354
+ const chunk = _buffer.Buffer.alloc(2 + chunkData.length);
355
+ chunk.writeUInt8(i, 0);
356
+ chunk.writeUInt8(totalChunks, 1);
357
+ chunkData.copy(chunk, 2);
358
+ await this.bleManager.writeCharacteristic(deviceId, _constants.SERVICE_BOTA_PROVISIONING, _constants.CHAR_DEVICE_TOKEN, chunk);
359
+ log.debug('Wrote token chunk', {
360
+ chunk: i + 1,
361
+ total: totalChunks
362
+ });
363
+ }
364
+ }
365
+ waitForProvisioningResult(deviceId) {
366
+ return new Promise((resolve, reject) => {
367
+ const timeout = setTimeout(() => {
368
+ subscription.remove();
369
+ reject(_errors.ProvisioningError.timeout(deviceId));
370
+ }, _constants.OPERATION_TIMEOUT);
371
+ const subscription = this.bleManager.subscribeToCharacteristic(deviceId, _constants.SERVICE_BOTA_PROVISIONING, _constants.CHAR_PROVISIONING_RESULT, data => {
372
+ clearTimeout(timeout);
373
+ subscription.remove();
374
+ if (data.length < 1) {
375
+ resolve({
376
+ success: false,
377
+ error: 'unknown'
378
+ });
379
+ return;
380
+ }
381
+ const resultCode = data[0];
382
+ switch (resultCode) {
383
+ case _constants.PROVISIONING_SUCCESS:
384
+ resolve({
385
+ success: true
386
+ });
387
+ break;
388
+ case _constants.PROVISIONING_INVALID_TOKEN:
389
+ resolve({
390
+ success: false,
391
+ error: 'invalid_token'
392
+ });
393
+ break;
394
+ case _constants.PROVISIONING_STORAGE_ERROR:
395
+ resolve({
396
+ success: false,
397
+ error: 'storage_error'
398
+ });
399
+ break;
400
+ case _constants.PROVISIONING_CHUNK_ERROR:
401
+ resolve({
402
+ success: false,
403
+ error: 'chunk_error'
404
+ });
405
+ break;
406
+ default:
407
+ resolve({
408
+ success: false,
409
+ error: 'unknown'
410
+ });
411
+ }
412
+ }, error => {
413
+ clearTimeout(timeout);
414
+ subscription.remove();
415
+ reject(new _errors.ProvisioningError(`Provisioning notification error: ${error.message}`, 'NOTIFICATION_ERROR', deviceId, error));
416
+ });
417
+ });
418
+ }
419
+
420
+ /**
421
+ * Clean up resources
422
+ */
423
+ destroy() {
424
+ log.info('Destroying DeviceManager');
425
+
426
+ // Clean up all status subscriptions
427
+ for (const sub of this.statusSubscriptions.values()) {
428
+ sub.remove();
429
+ }
430
+ this.statusSubscriptions.clear();
431
+ this.connectedDevices.clear();
432
+ this.removeAllListeners();
433
+ this.isInitialized = false;
434
+ }
435
+ }
436
+ exports.DeviceManager = DeviceManager;
437
+ //# sourceMappingURL=DeviceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_buffer","require","_eventemitter","_interopRequireDefault","_BleManager","_constants","_parsers","_errors","_logger","e","__esModule","default","log","logger","tag","DeviceManager","EventEmitter","connectedDevices","Map","statusSubscriptions","isInitialized","constructor","bleManager","getBleManager","setupBleListeners","initialize","info","on","device","emit","deviceId","get","error","connectionState","delete","remove","startScan","options","stopScan","getDiscoveredDevices","getConnectedDevices","Array","from","values","connect","id","name","existing","debug","serialNumber","readSerialNumber","firmwareVersion","readFirmwareVersion","hardwareRevision","readHardwareRevision","pairingState","readPairingState","mtu","getMtu","connectedDevice","deviceType","isProvisioned","set","disconnect","isConnected","provision","deviceToken","environment","DeviceError","notConnected","warn","ProvisioningError","alreadyProvisioned","resultPromise","waitForProvisioningResult","writeApiEndpoint","writeDeviceToken","result","success","invalidToken","storageError","chunkError","syncTime","getStatus","data","readCharacteristic","SERVICE_BOTA_CONTROL","CHAR_DEVICE_STATUS","parseDeviceStatus","subscribeToStatus","callback","subscription","subscribeToCharacteristic","status","timeSyncData","createTimeSyncData","writeCharacteristic","CHAR_TIME_SYNC","SERVICE_DEVICE_INFO","CHAR_SERIAL_NUMBER","toString","replace","CHAR_FIRMWARE_REVISION","CHAR_HARDWARE_REVISION","undefined","SERVICE_BOTA_PROVISIONING","CHAR_PAIRING_STATE","length","parsePairingState","endpointByte","API_ENDPOINT_PRODUCTION","API_ENDPOINT_SANDBOX","CHAR_API_ENDPOINT","Buffer","token","maxChunkSize","tokenBuffer","totalChunks","Math","ceil","tokenLength","i","start","end","min","chunkData","slice","chunk","alloc","writeUInt8","copy","CHAR_DEVICE_TOKEN","total","Promise","resolve","reject","timeout","setTimeout","OPERATION_TIMEOUT","CHAR_PROVISIONING_RESULT","clearTimeout","resultCode","PROVISIONING_SUCCESS","PROVISIONING_INVALID_TOKEN","PROVISIONING_STORAGE_ERROR","PROVISIONING_CHUNK_ERROR","message","destroy","sub","clear","removeAllListeners","exports"],"sourceRoot":"../../../src","sources":["managers/DeviceManager.ts"],"mappings":"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","ignoreList":[]}