@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,8 @@
1
+ /**
2
+ * BLE module exports
3
+ */
4
+
5
+ export * from './constants';
6
+ export * from './parsers';
7
+ export { BleManager, getBleManager, resetBleManager } from './BleManager';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BleManager","getBleManager","resetBleManager"],"sourceRoot":"../../../src","sources":["ble/index.ts"],"mappings":"AAAA;AACA;AACA;;AAEA,cAAc,aAAa;AAC3B,cAAc,WAAW;AACzB,SAASA,UAAU,EAAEC,aAAa,EAAEC,eAAe,QAAQ,cAAc","ignoreList":[]}
@@ -0,0 +1,328 @@
1
+ /**
2
+ * BLE data parsers for Bota device protocol
3
+ */
4
+
5
+ import { Buffer } from 'buffer';
6
+ import { DEVICE_TYPE_PIN, DEVICE_TYPE_PIN_4G, DEVICE_TYPE_NOTE, PAIRING_STATE_UNPAIRED, PAIRING_STATE_PAIRING, PAIRING_STATE_PAIRED, PAIRING_STATE_ERROR, DEVICE_STATE_IDLE, DEVICE_STATE_RECORDING, DEVICE_STATE_SYNCING, DEVICE_STATE_UPLOADING, DEVICE_STATE_CHARGING, DEVICE_STATE_LOW_BATTERY, DEVICE_STATE_STORAGE_FULL, DEVICE_STATE_ERROR, FLAG_CHARGING, FLAG_USB_CONNECTED, FLAG_LOW_BATTERY, FLAG_CRITICAL_BATTERY, FLAG_STORAGE_WARNING, FLAG_STORAGE_FULL, FLAG_CELLULAR_AVAILABLE, FLAG_CELLULAR_ROAMING, FLAG_WIFI_CONNECTED, FLAG_RECORDING_ACTIVE, FLAG_SYNC_REQUIRED, FLAG_UPDATE_AVAILABLE, CODEC_PCM_16K, CODEC_PCM_8K, CODEC_OPUS_16K, CODEC_OPUS_8K, PACKET_TYPE_DATA, PACKET_TYPE_EOF, PACKET_TYPE_ERROR } from './constants';
7
+
8
+ /**
9
+ * Parse device type from manufacturer data byte
10
+ */
11
+ export function parseDeviceType(byte) {
12
+ switch (byte) {
13
+ case DEVICE_TYPE_PIN:
14
+ return 'bota_pin';
15
+ case DEVICE_TYPE_PIN_4G:
16
+ return 'bota_pin_4g';
17
+ case DEVICE_TYPE_NOTE:
18
+ return 'bota_note';
19
+ default:
20
+ return 'bota_pin';
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Parse pairing state from manufacturer data byte
26
+ */
27
+ export function parsePairingState(byte) {
28
+ switch (byte) {
29
+ case PAIRING_STATE_UNPAIRED:
30
+ return 'unpaired';
31
+ case PAIRING_STATE_PAIRING:
32
+ return 'pairing';
33
+ case PAIRING_STATE_PAIRED:
34
+ return 'paired';
35
+ case PAIRING_STATE_ERROR:
36
+ return 'error';
37
+ default:
38
+ return 'unpaired';
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Parse firmware version from major/minor bytes
44
+ */
45
+ export function parseFirmwareVersion(major, minor) {
46
+ return `${major}.${minor}.0`;
47
+ }
48
+
49
+ /**
50
+ * Parse device state from status byte
51
+ */
52
+ export function parseDeviceState(byte) {
53
+ switch (byte) {
54
+ case DEVICE_STATE_IDLE:
55
+ return 'idle';
56
+ case DEVICE_STATE_RECORDING:
57
+ return 'recording';
58
+ case DEVICE_STATE_SYNCING:
59
+ return 'syncing';
60
+ case DEVICE_STATE_UPLOADING:
61
+ return 'uploading';
62
+ case DEVICE_STATE_CHARGING:
63
+ return 'charging';
64
+ case DEVICE_STATE_LOW_BATTERY:
65
+ return 'lowBattery';
66
+ case DEVICE_STATE_STORAGE_FULL:
67
+ return 'storageFull';
68
+ case DEVICE_STATE_ERROR:
69
+ return 'error';
70
+ default:
71
+ return 'idle';
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Parse device flags from 16-bit value
77
+ */
78
+ export function parseDeviceFlags(value) {
79
+ return {
80
+ charging: (value & FLAG_CHARGING) !== 0,
81
+ usbConnected: (value & FLAG_USB_CONNECTED) !== 0,
82
+ lowBattery: (value & FLAG_LOW_BATTERY) !== 0,
83
+ criticalBattery: (value & FLAG_CRITICAL_BATTERY) !== 0,
84
+ storageWarning: (value & FLAG_STORAGE_WARNING) !== 0,
85
+ storageFull: (value & FLAG_STORAGE_FULL) !== 0,
86
+ cellularAvailable: (value & FLAG_CELLULAR_AVAILABLE) !== 0,
87
+ cellularRoaming: (value & FLAG_CELLULAR_ROAMING) !== 0,
88
+ wifiConnected: (value & FLAG_WIFI_CONNECTED) !== 0,
89
+ recordingActive: (value & FLAG_RECORDING_ACTIVE) !== 0,
90
+ syncRequired: (value & FLAG_SYNC_REQUIRED) !== 0,
91
+ updateAvailable: (value & FLAG_UPDATE_AVAILABLE) !== 0
92
+ };
93
+ }
94
+
95
+ /**
96
+ * Parse device status from 16-byte characteristic value
97
+ *
98
+ * Format:
99
+ * Bytes 0-3: Timestamp (Unix seconds)
100
+ * Byte 4: Battery % (0-100)
101
+ * Byte 5: State
102
+ * Byte 6: Storage % (0-100)
103
+ * Byte 7: Signal (0-5)
104
+ * Bytes 8-9: Pending recordings count
105
+ * Bytes 10-13: Last sync time (Unix seconds)
106
+ * Bytes 14-15: Flags
107
+ */
108
+ export function parseDeviceStatus(data) {
109
+ if (data.length < 16) {
110
+ throw new Error(`Invalid status data length: ${data.length}`);
111
+ }
112
+ const timestamp = data.readUInt32LE(0);
113
+ const batteryLevel = data.readUInt8(4);
114
+ const state = parseDeviceState(data.readUInt8(5));
115
+ const storageUsedPercent = data.readUInt8(6);
116
+ const signalStrength = data.readUInt8(7);
117
+ const pendingRecordings = data.readUInt16LE(8);
118
+ const lastSyncTimestamp = data.readUInt32LE(10);
119
+ const flagsValue = data.readUInt16LE(14);
120
+ const flags = parseDeviceFlags(flagsValue);
121
+ return {
122
+ batteryLevel,
123
+ storageUsedPercent,
124
+ state,
125
+ pendingRecordings,
126
+ lastSyncAt: lastSyncTimestamp > 0 ? new Date(lastSyncTimestamp * 1000) : null,
127
+ signalStrength,
128
+ flags,
129
+ timestamp
130
+ };
131
+ }
132
+
133
+ /**
134
+ * Parse storage info from 16-byte characteristic value
135
+ *
136
+ * Format:
137
+ * Bytes 0-3: Total storage (KB)
138
+ * Bytes 4-7: Used storage (KB)
139
+ * Bytes 8-9: Total recording count
140
+ * Bytes 10-11: Pending sync count
141
+ * Bytes 12-15: Reserved
142
+ */
143
+ export function parseStorageInfo(data) {
144
+ if (data.length < 12) {
145
+ throw new Error(`Invalid storage info length: ${data.length}`);
146
+ }
147
+ return {
148
+ totalKb: data.readUInt32LE(0),
149
+ usedKb: data.readUInt32LE(4),
150
+ totalRecordings: data.readUInt16LE(8),
151
+ pendingSyncCount: data.readUInt16LE(10)
152
+ };
153
+ }
154
+
155
+ /**
156
+ * Parse audio codec from byte value
157
+ */
158
+ export function parseAudioCodec(byte) {
159
+ switch (byte) {
160
+ case CODEC_PCM_16K:
161
+ return 'pcm_16k';
162
+ case CODEC_PCM_8K:
163
+ return 'pcm_8k';
164
+ case CODEC_OPUS_16K:
165
+ return 'opus_16k';
166
+ case CODEC_OPUS_8K:
167
+ return 'opus_8k';
168
+ default:
169
+ return 'opus_16k';
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Parse recording list from notification data
175
+ * Each recording entry is typically 24 bytes:
176
+ * - UUID: 16 bytes
177
+ * - Timestamp: 4 bytes (Unix seconds)
178
+ * - Duration: 2 bytes (seconds)
179
+ * - Size: 2 bytes (KB, or needs scaling)
180
+ */
181
+ export function parseRecordingList(data) {
182
+ const recordings = [];
183
+ const entrySize = 24;
184
+
185
+ // First byte might be count
186
+ let offset = 0;
187
+ if (data.length > 0 && data.length % entrySize !== 0) {
188
+ // Skip count byte
189
+ offset = 1;
190
+ }
191
+ while (offset + entrySize <= data.length) {
192
+ const uuid = formatUuid(data.slice(offset, offset + 16));
193
+ const timestamp = data.readUInt32LE(offset + 16);
194
+ const durationSeconds = data.readUInt16LE(offset + 20);
195
+ const sizeKb = data.readUInt16LE(offset + 22);
196
+ recordings.push({
197
+ uuid,
198
+ startedAt: new Date(timestamp * 1000),
199
+ durationMs: durationSeconds * 1000,
200
+ fileSizeBytes: sizeKb * 1024,
201
+ codec: 'opus_16k' // Default, actual codec read separately
202
+ });
203
+ offset += entrySize;
204
+ }
205
+ return recordings;
206
+ }
207
+
208
+ /**
209
+ * Format 16-byte UUID buffer to string
210
+ */
211
+ function formatUuid(data) {
212
+ const hex = data.toString('hex');
213
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
214
+ }
215
+
216
+ /**
217
+ * Parse transfer packet from device
218
+ *
219
+ * Format:
220
+ * Byte 0: Packet type (0x01=data, 0x02=EOF, 0xFF=error)
221
+ * Bytes 1-2: Sequence number
222
+ * Bytes 3-4: Chunk size (data) or CRC32 start (EOF)
223
+ * Bytes 5+: Audio data (data) or CRC32 remainder (EOF)
224
+ */
225
+ export function parseTransferPacket(data) {
226
+ if (data.length < 3) {
227
+ throw new Error(`Invalid transfer packet length: ${data.length}`);
228
+ }
229
+ const type = data.readUInt8(0);
230
+ const sequenceNumber = data.readUInt16LE(1);
231
+ switch (type) {
232
+ case PACKET_TYPE_DATA:
233
+ return {
234
+ type: 'data',
235
+ sequenceNumber,
236
+ data: data.slice(5) // Skip header
237
+ };
238
+ case PACKET_TYPE_EOF:
239
+ return {
240
+ type: 'eof',
241
+ sequenceNumber,
242
+ checksum: data.readUInt32LE(3)
243
+ };
244
+ case PACKET_TYPE_ERROR:
245
+ return {
246
+ type: 'error',
247
+ sequenceNumber,
248
+ errorCode: data.length > 3 ? data.readUInt8(3) : 0xff
249
+ };
250
+ default:
251
+ throw new Error(`Unknown packet type: ${type}`);
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Create time sync data buffer
257
+ *
258
+ * Format:
259
+ * Bytes 0-3: Unix timestamp (seconds)
260
+ * Bytes 4-5: Milliseconds (0-999)
261
+ * Bytes 6-7: Timezone offset (signed, minutes from UTC)
262
+ */
263
+ export function createTimeSyncData(date = new Date()) {
264
+ const buffer = Buffer.alloc(8);
265
+ const unixSeconds = Math.floor(date.getTime() / 1000);
266
+ const milliseconds = date.getMilliseconds();
267
+ const timezoneOffset = -date.getTimezoneOffset(); // getTimezoneOffset returns opposite sign
268
+
269
+ buffer.writeUInt32LE(unixSeconds, 0);
270
+ buffer.writeUInt16LE(milliseconds, 4);
271
+ buffer.writeInt16LE(timezoneOffset, 6);
272
+ return buffer;
273
+ }
274
+
275
+ /**
276
+ * Create ACK packet for transfer
277
+ *
278
+ * Format:
279
+ * Byte 0: ACK type (0x10=ACK, 0x11=NACK, 0x12=Abort)
280
+ * Bytes 1-2: Sequence number
281
+ */
282
+ export function createAckPacket(ackType, sequenceNumber) {
283
+ const buffer = Buffer.alloc(3);
284
+ switch (ackType) {
285
+ case 'ack':
286
+ buffer.writeUInt8(0x10, 0);
287
+ break;
288
+ case 'nack':
289
+ buffer.writeUInt8(0x11, 0);
290
+ break;
291
+ case 'abort':
292
+ buffer.writeUInt8(0x12, 0);
293
+ break;
294
+ }
295
+ buffer.writeUInt16LE(sequenceNumber, 1);
296
+ return buffer;
297
+ }
298
+
299
+ /**
300
+ * Create transfer control command
301
+ *
302
+ * Format:
303
+ * Byte 0: Command (0x01=list, 0x02=start, 0x07=confirm)
304
+ * Bytes 1+: Recording UUID (for start/confirm)
305
+ */
306
+ export function createTransferCommand(command, recordingUuid) {
307
+ let cmdByte;
308
+ switch (command) {
309
+ case 'list':
310
+ cmdByte = 0x01;
311
+ break;
312
+ case 'start':
313
+ cmdByte = 0x02;
314
+ break;
315
+ case 'confirm':
316
+ cmdByte = 0x07;
317
+ break;
318
+ }
319
+ if (recordingUuid) {
320
+ const uuidBuffer = Buffer.from(recordingUuid.replace(/-/g, ''), 'hex');
321
+ const buffer = Buffer.alloc(1 + uuidBuffer.length);
322
+ buffer.writeUInt8(cmdByte, 0);
323
+ uuidBuffer.copy(buffer, 1);
324
+ return buffer;
325
+ }
326
+ return Buffer.from([cmdByte]);
327
+ }
328
+ //# sourceMappingURL=parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Buffer","DEVICE_TYPE_PIN","DEVICE_TYPE_PIN_4G","DEVICE_TYPE_NOTE","PAIRING_STATE_UNPAIRED","PAIRING_STATE_PAIRING","PAIRING_STATE_PAIRED","PAIRING_STATE_ERROR","DEVICE_STATE_IDLE","DEVICE_STATE_RECORDING","DEVICE_STATE_SYNCING","DEVICE_STATE_UPLOADING","DEVICE_STATE_CHARGING","DEVICE_STATE_LOW_BATTERY","DEVICE_STATE_STORAGE_FULL","DEVICE_STATE_ERROR","FLAG_CHARGING","FLAG_USB_CONNECTED","FLAG_LOW_BATTERY","FLAG_CRITICAL_BATTERY","FLAG_STORAGE_WARNING","FLAG_STORAGE_FULL","FLAG_CELLULAR_AVAILABLE","FLAG_CELLULAR_ROAMING","FLAG_WIFI_CONNECTED","FLAG_RECORDING_ACTIVE","FLAG_SYNC_REQUIRED","FLAG_UPDATE_AVAILABLE","CODEC_PCM_16K","CODEC_PCM_8K","CODEC_OPUS_16K","CODEC_OPUS_8K","PACKET_TYPE_DATA","PACKET_TYPE_EOF","PACKET_TYPE_ERROR","parseDeviceType","byte","parsePairingState","parseFirmwareVersion","major","minor","parseDeviceState","parseDeviceFlags","value","charging","usbConnected","lowBattery","criticalBattery","storageWarning","storageFull","cellularAvailable","cellularRoaming","wifiConnected","recordingActive","syncRequired","updateAvailable","parseDeviceStatus","data","length","Error","timestamp","readUInt32LE","batteryLevel","readUInt8","state","storageUsedPercent","signalStrength","pendingRecordings","readUInt16LE","lastSyncTimestamp","flagsValue","flags","lastSyncAt","Date","parseStorageInfo","totalKb","usedKb","totalRecordings","pendingSyncCount","parseAudioCodec","parseRecordingList","recordings","entrySize","offset","uuid","formatUuid","slice","durationSeconds","sizeKb","push","startedAt","durationMs","fileSizeBytes","codec","hex","toString","parseTransferPacket","type","sequenceNumber","checksum","errorCode","createTimeSyncData","date","buffer","alloc","unixSeconds","Math","floor","getTime","milliseconds","getMilliseconds","timezoneOffset","getTimezoneOffset","writeUInt32LE","writeUInt16LE","writeInt16LE","createAckPacket","ackType","writeUInt8","createTransferCommand","command","recordingUuid","cmdByte","uuidBuffer","from","replace","copy"],"sourceRoot":"../../../src","sources":["ble/parsers.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Bota React Native SDK
3
+ *
4
+ * SDK for communicating with Bota wearable devices via BLE.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+
9
+ // Main client
10
+ export { BotaClient } from './BotaClient';
11
+ // Managers
12
+ export { DeviceManager, RecordingManager, OTAManager } from './managers';
13
+
14
+ // Models - Device
15
+
16
+ // Models - Recording
17
+
18
+ // Models - Status & Events
19
+
20
+ // Errors
21
+ export { BotaError, BluetoothError, DeviceError, ProvisioningError, TransferError, UploadError, SdkError, isBotaError } from './utils/errors';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BotaClient","DeviceManager","RecordingManager","OTAManager","BotaError","BluetoothError","DeviceError","ProvisioningError","TransferError","UploadError","SdkError","isBotaError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASA,UAAU,QAAQ,cAAc;AAGzC;AACA,SAASC,aAAa,EAAEC,gBAAgB,EAAEC,UAAU,QAAQ,YAAY;;AAGxE;;AAgBA;;AAYA;;AASA;AACA,SACEC,SAAS,EACTC,cAAc,EACdC,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,WAAW,EACXC,QAAQ,EACRC,WAAW,QACN,gBAAgB","ignoreList":[]}