@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,100 @@
1
+ /**
2
+ * BLE data parsers for Bota device protocol
3
+ */
4
+ import { Buffer } from 'buffer';
5
+ import type { DeviceType, PairingState, DeviceState, DeviceStatus, DeviceFlags, StorageInfo } from '../models/Device';
6
+ import type { DeviceRecording, AudioCodec, TransferPacket } from '../models/Recording';
7
+ /**
8
+ * Parse device type from manufacturer data byte
9
+ */
10
+ export declare function parseDeviceType(byte: number): DeviceType;
11
+ /**
12
+ * Parse pairing state from manufacturer data byte
13
+ */
14
+ export declare function parsePairingState(byte: number): PairingState;
15
+ /**
16
+ * Parse firmware version from major/minor bytes
17
+ */
18
+ export declare function parseFirmwareVersion(major: number, minor: number): string;
19
+ /**
20
+ * Parse device state from status byte
21
+ */
22
+ export declare function parseDeviceState(byte: number): DeviceState;
23
+ /**
24
+ * Parse device flags from 16-bit value
25
+ */
26
+ export declare function parseDeviceFlags(value: number): DeviceFlags;
27
+ /**
28
+ * Parse device status from 16-byte characteristic value
29
+ *
30
+ * Format:
31
+ * Bytes 0-3: Timestamp (Unix seconds)
32
+ * Byte 4: Battery % (0-100)
33
+ * Byte 5: State
34
+ * Byte 6: Storage % (0-100)
35
+ * Byte 7: Signal (0-5)
36
+ * Bytes 8-9: Pending recordings count
37
+ * Bytes 10-13: Last sync time (Unix seconds)
38
+ * Bytes 14-15: Flags
39
+ */
40
+ export declare function parseDeviceStatus(data: Buffer): DeviceStatus;
41
+ /**
42
+ * Parse storage info from 16-byte characteristic value
43
+ *
44
+ * Format:
45
+ * Bytes 0-3: Total storage (KB)
46
+ * Bytes 4-7: Used storage (KB)
47
+ * Bytes 8-9: Total recording count
48
+ * Bytes 10-11: Pending sync count
49
+ * Bytes 12-15: Reserved
50
+ */
51
+ export declare function parseStorageInfo(data: Buffer): StorageInfo;
52
+ /**
53
+ * Parse audio codec from byte value
54
+ */
55
+ export declare function parseAudioCodec(byte: number): AudioCodec;
56
+ /**
57
+ * Parse recording list from notification data
58
+ * Each recording entry is typically 24 bytes:
59
+ * - UUID: 16 bytes
60
+ * - Timestamp: 4 bytes (Unix seconds)
61
+ * - Duration: 2 bytes (seconds)
62
+ * - Size: 2 bytes (KB, or needs scaling)
63
+ */
64
+ export declare function parseRecordingList(data: Buffer): DeviceRecording[];
65
+ /**
66
+ * Parse transfer packet from device
67
+ *
68
+ * Format:
69
+ * Byte 0: Packet type (0x01=data, 0x02=EOF, 0xFF=error)
70
+ * Bytes 1-2: Sequence number
71
+ * Bytes 3-4: Chunk size (data) or CRC32 start (EOF)
72
+ * Bytes 5+: Audio data (data) or CRC32 remainder (EOF)
73
+ */
74
+ export declare function parseTransferPacket(data: Buffer): TransferPacket;
75
+ /**
76
+ * Create time sync data buffer
77
+ *
78
+ * Format:
79
+ * Bytes 0-3: Unix timestamp (seconds)
80
+ * Bytes 4-5: Milliseconds (0-999)
81
+ * Bytes 6-7: Timezone offset (signed, minutes from UTC)
82
+ */
83
+ export declare function createTimeSyncData(date?: Date): Buffer;
84
+ /**
85
+ * Create ACK packet for transfer
86
+ *
87
+ * Format:
88
+ * Byte 0: ACK type (0x10=ACK, 0x11=NACK, 0x12=Abort)
89
+ * Bytes 1-2: Sequence number
90
+ */
91
+ export declare function createAckPacket(ackType: 'ack' | 'nack' | 'abort', sequenceNumber: number): Buffer;
92
+ /**
93
+ * Create transfer control command
94
+ *
95
+ * Format:
96
+ * Byte 0: Command (0x01=list, 0x02=start, 0x07=confirm)
97
+ * Bytes 1+: Recording UUID (for start/confirm)
98
+ */
99
+ export declare function createTransferCommand(command: 'list' | 'start' | 'confirm', recordingUuid?: string): Buffer;
100
+ //# sourceMappingURL=parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../../../src/ble/parsers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAsCvF;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAWxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAa5D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAqB1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAe3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAyB5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAW1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAaxD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CA6BlE;AAUD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAiChE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAWlE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,EACjC,cAAc,EAAE,MAAM,GACrB,MAAM,CAiBR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EACrC,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAuBR"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Bota React Native SDK
3
+ *
4
+ * SDK for communicating with Bota wearable devices via BLE.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { BotaClient } from './BotaClient';
9
+ export type { BotaConfig, SdkState, BluetoothState } from './BotaClient';
10
+ export { DeviceManager, RecordingManager, OTAManager } from './managers';
11
+ export type { UploadInfoProvider, FirmwareInfo, OtaStage, OtaProgress } from './managers';
12
+ export type { DeviceType, PairingState, ConnectionState, DeviceState, DeviceFlags, DiscoveredDevice, ConnectedDevice, DeviceStatus, StorageInfo, ScanOptions, Environment, ProvisioningResult, } from './models/Device';
13
+ export type { AudioCodec, DeviceRecording, UploadInfo, SyncStage, SyncProgress, UploadTaskStatus, UploadTask, TransferPacket, } from './models/Recording';
14
+ export type { LogLevel, SdkStatus, DeviceManagerEvents, RecordingManagerEvents, BotaClientEvents, } from './models/Status';
15
+ export { BotaError, BluetoothError, DeviceError, ProvisioningError, TransferError, UploadError, SdkError, isBotaError, } from './utils/errors';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG1F,YAAY,EACV,UAAU,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,UAAU,EACV,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,SAAS,EACT,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,QAAQ,EACR,WAAW,GACZ,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Device Manager - Handles device discovery, connection, and provisioning
3
+ */
4
+ import EventEmitter from 'eventemitter3';
5
+ import type { DiscoveredDevice, ConnectedDevice, DeviceStatus, ScanOptions, Environment } from '../models/Device';
6
+ import type { DeviceManagerEvents } from '../models/Status';
7
+ /**
8
+ * Device Manager class
9
+ */
10
+ export declare class DeviceManager extends EventEmitter<DeviceManagerEvents> {
11
+ private bleManager;
12
+ private connectedDevices;
13
+ private statusSubscriptions;
14
+ private isInitialized;
15
+ constructor();
16
+ /**
17
+ * Initialize the device manager
18
+ */
19
+ initialize(): void;
20
+ /**
21
+ * Set up BLE event listeners
22
+ */
23
+ private setupBleListeners;
24
+ /**
25
+ * Start scanning for Bota devices
26
+ */
27
+ startScan(options?: ScanOptions): Promise<void>;
28
+ /**
29
+ * Stop scanning for devices
30
+ */
31
+ stopScan(): void;
32
+ /**
33
+ * Get list of discovered devices
34
+ */
35
+ getDiscoveredDevices(): DiscoveredDevice[];
36
+ /**
37
+ * Get list of connected devices
38
+ */
39
+ getConnectedDevices(): ConnectedDevice[];
40
+ /**
41
+ * Connect to a discovered device
42
+ */
43
+ connect(device: DiscoveredDevice): Promise<ConnectedDevice>;
44
+ /**
45
+ * Disconnect from a device
46
+ */
47
+ disconnect(device: ConnectedDevice): Promise<void>;
48
+ /**
49
+ * Check if a device is connected
50
+ */
51
+ isConnected(deviceId: string): boolean;
52
+ /**
53
+ * Provision a device with a token
54
+ */
55
+ provision(device: ConnectedDevice, deviceToken: string, environment?: Environment): Promise<void>;
56
+ /**
57
+ * Check if a device is provisioned
58
+ */
59
+ isProvisioned(device: ConnectedDevice): Promise<boolean>;
60
+ /**
61
+ * Get device status
62
+ */
63
+ getStatus(device: ConnectedDevice): Promise<DeviceStatus>;
64
+ /**
65
+ * Subscribe to device status updates
66
+ */
67
+ subscribeToStatus(device: ConnectedDevice, callback: (status: DeviceStatus) => void): () => void;
68
+ /**
69
+ * Sync time to device
70
+ */
71
+ syncTime(deviceId: string): Promise<void>;
72
+ private readSerialNumber;
73
+ private readFirmwareVersion;
74
+ private readHardwareRevision;
75
+ private readPairingState;
76
+ private writeApiEndpoint;
77
+ private writeDeviceToken;
78
+ private waitForProvisioningResult;
79
+ /**
80
+ * Clean up resources
81
+ */
82
+ destroy(): void;
83
+ }
84
+ //# sourceMappingURL=DeviceManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeviceManager.d.ts","sourceRoot":"","sources":["../../../../src/managers/DeviceManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,YAAY,MAAM,eAAe,CAAC;AA6BzC,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EAEZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAS5D;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY,CAAC,mBAAmB,CAAC;IAClE,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,mBAAmB,CAAwC;IACnE,OAAO,CAAC,aAAa,CAAS;;IAQ9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACG,SAAS,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD;;OAEG;IACH,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,oBAAoB,IAAI,gBAAgB,EAAE;IAI1C;;OAEG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAIxC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAoDjE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAexD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACG,SAAS,CACb,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,WAA0B,GACtC,OAAO,CAAC,IAAI,CAAC;IA4DhB;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAK9D;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IAc/D;;OAEG;IACH,iBAAiB,CACf,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GACvC,MAAM,IAAI;IAkCb;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAejC,gBAAgB;YAShB,mBAAmB;YASnB,oBAAoB;YAapB,gBAAgB;YAchB,gBAAgB;YAehB,gBAAgB;IAuC9B,OAAO,CAAC,yBAAyB;IAoDjC;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * OTA Manager - Handles firmware over-the-air updates
3
+ *
4
+ * Note: Full Nordic DFU implementation requires native modules.
5
+ * This is a placeholder that handles version checking and update preparation.
6
+ * Actual DFU transfer would need react-native-nordic-dfu or similar.
7
+ */
8
+ import EventEmitter from 'eventemitter3';
9
+ import type { ConnectedDevice } from '../models/Device';
10
+ /**
11
+ * Firmware info
12
+ */
13
+ export interface FirmwareInfo {
14
+ version: string;
15
+ url: string;
16
+ checksum: string;
17
+ releaseNotes?: string;
18
+ size: number;
19
+ }
20
+ /**
21
+ * OTA progress stages
22
+ */
23
+ export type OtaStage = 'checking' | 'downloading' | 'preparing' | 'updating' | 'verifying' | 'completed' | 'failed';
24
+ /**
25
+ * OTA progress
26
+ */
27
+ export interface OtaProgress {
28
+ stage: OtaStage;
29
+ progress: number;
30
+ error?: string;
31
+ }
32
+ /**
33
+ * Events emitted by OTAManager
34
+ */
35
+ interface OTAManagerEvents {
36
+ updateAvailable: (firmware: FirmwareInfo) => void;
37
+ progress: (deviceId: string, progress: OtaProgress) => void;
38
+ completed: (deviceId: string, version: string) => void;
39
+ failed: (deviceId: string, error: Error) => void;
40
+ }
41
+ /**
42
+ * OTA Manager class
43
+ */
44
+ export declare class OTAManager extends EventEmitter<OTAManagerEvents> {
45
+ private firmwareCdnUrl;
46
+ constructor(firmwareCdnUrl?: string);
47
+ /**
48
+ * Check for available firmware updates
49
+ */
50
+ checkForUpdate(device: ConnectedDevice): Promise<FirmwareInfo | null>;
51
+ /**
52
+ * Download firmware package
53
+ */
54
+ downloadFirmware(firmware: FirmwareInfo): Promise<ArrayBuffer>;
55
+ /**
56
+ * Prepare device for DFU mode
57
+ */
58
+ enterDfuMode(device: ConnectedDevice): Promise<void>;
59
+ /**
60
+ * Perform firmware update
61
+ *
62
+ * Note: This is a placeholder. Full implementation requires:
63
+ * 1. react-native-nordic-dfu for actual DFU transfer
64
+ * 2. Native module integration
65
+ * 3. DFU package preparation
66
+ */
67
+ performUpdate(device: ConnectedDevice, firmware: FirmwareInfo): Promise<void>;
68
+ /**
69
+ * Compare semantic versions
70
+ */
71
+ private isNewerVersion;
72
+ /**
73
+ * Clean up resources
74
+ */
75
+ destroy(): void;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=OTAManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OTAManager.d.ts","sourceRoot":"","sources":["../../../../src/managers/OTAManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,YAAY,MAAM,eAAe,CAAC;AAQzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOxD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,aAAa,GACb,WAAW,GACX,UAAU,GACV,WAAW,GACX,WAAW,GACX,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,eAAe,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC5D,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,GAAE,MAAwC;IAKpE;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAmD3E;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAqBpE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1D;;;;;;;OAOG;IACG,aAAa,CACjB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC;IA+ChB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Recording Manager - Handles recording sync and upload operations
3
+ */
4
+ import EventEmitter from 'eventemitter3';
5
+ import type { ConnectedDevice, StorageInfo } from '../models/Device';
6
+ import type { DeviceRecording, UploadInfo, SyncProgress, UploadTask } from '../models/Recording';
7
+ import type { RecordingManagerEvents } from '../models/Status';
8
+ /**
9
+ * Upload info provider callback type
10
+ */
11
+ export type UploadInfoProvider = (recording: DeviceRecording) => Promise<UploadInfo>;
12
+ /**
13
+ * Recording Manager class
14
+ */
15
+ export declare class RecordingManager extends EventEmitter<RecordingManagerEvents> {
16
+ private protocolHandler;
17
+ private storage;
18
+ private uploadQueue;
19
+ private isInitialized;
20
+ constructor();
21
+ /**
22
+ * Initialize the recording manager
23
+ */
24
+ initialize(): Promise<void>;
25
+ /**
26
+ * Set up upload queue event listeners
27
+ */
28
+ private setupUploadQueueListeners;
29
+ /**
30
+ * Get storage info from device
31
+ */
32
+ getStorageInfo(device: ConnectedDevice): Promise<StorageInfo>;
33
+ /**
34
+ * List recordings on a device
35
+ */
36
+ listRecordings(device: ConnectedDevice): Promise<DeviceRecording[]>;
37
+ /**
38
+ * Sync a single recording from device
39
+ * Transfers from device, saves locally, and queues for upload
40
+ */
41
+ syncRecording(device: ConnectedDevice, recording: DeviceRecording, uploadInfo: UploadInfo): AsyncGenerator<SyncProgress>;
42
+ /**
43
+ * Wait for an upload task to complete
44
+ */
45
+ private waitForUpload;
46
+ /**
47
+ * Sync all recordings from a device
48
+ */
49
+ syncAllRecordings(device: ConnectedDevice, uploadInfoProvider: UploadInfoProvider): AsyncGenerator<SyncProgress & {
50
+ recordingIndex?: number;
51
+ totalRecordings?: number;
52
+ }>;
53
+ /**
54
+ * Get pending uploads
55
+ */
56
+ getPendingUploads(): UploadTask[];
57
+ /**
58
+ * Get all uploads
59
+ */
60
+ getAllUploads(): UploadTask[];
61
+ /**
62
+ * Cancel a pending upload
63
+ */
64
+ cancelUpload(taskId: string): Promise<void>;
65
+ /**
66
+ * Retry failed uploads
67
+ */
68
+ retryFailedUploads(): Promise<void>;
69
+ /**
70
+ * Clear completed uploads from queue
71
+ */
72
+ clearCompletedUploads(): Promise<void>;
73
+ /**
74
+ * Clear all uploads
75
+ */
76
+ clearAllUploads(): Promise<void>;
77
+ /**
78
+ * Pause upload processing
79
+ */
80
+ pauseUploads(): void;
81
+ /**
82
+ * Resume upload processing
83
+ */
84
+ resumeUploads(): void;
85
+ /**
86
+ * Clean up resources
87
+ */
88
+ destroy(): void;
89
+ }
90
+ //# sourceMappingURL=RecordingManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordingManager.d.ts","sourceRoot":"","sources":["../../../../src/managers/RecordingManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,YAAY,MAAM,eAAe,CAAC;AAKzC,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,YAAY,EACZ,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAO/D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,SAAS,EAAE,eAAe,KACvB,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;IACxE,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAS;;IAW9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAwBjC;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAQnE;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAiBzE;;;OAGG;IACI,aAAa,CAClB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,eAAe,EAC1B,UAAU,EAAE,UAAU,GACrB,cAAc,CAAC,YAAY,CAAC;IA2G/B;;OAEG;YACW,aAAa;IAwD3B;;OAEG;IACI,iBAAiB,CACtB,MAAM,EAAE,eAAe,EACvB,kBAAkB,EAAE,kBAAkB,GACrC,cAAc,CAAC,YAAY,GAAG;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA6DvF;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IAIjC;;OAEG;IACH,aAAa,IAAI,UAAU,EAAE;IAI7B;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Managers module exports
3
+ */
4
+ export { DeviceManager } from './DeviceManager';
5
+ export { RecordingManager, type UploadInfoProvider } from './RecordingManager';
6
+ export { OTAManager, type FirmwareInfo, type OtaStage, type OtaProgress, } from './OTAManager';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/managers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EACL,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,WAAW,GACjB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Device-related type definitions
3
+ */
4
+ /**
5
+ * Device type identifier
6
+ */
7
+ export type DeviceType = 'bota_pin' | 'bota_pin_4g' | 'bota_note';
8
+ /**
9
+ * Pairing state of a device
10
+ */
11
+ export type PairingState = 'unpaired' | 'pairing' | 'paired' | 'error';
12
+ /**
13
+ * Connection state of a device
14
+ */
15
+ export type ConnectionState = 'disconnected' | 'connecting' | 'bonding' | 'discovering' | 'connected' | 'disconnecting';
16
+ /**
17
+ * Device operational state
18
+ */
19
+ export type DeviceState = 'idle' | 'recording' | 'syncing' | 'uploading' | 'charging' | 'lowBattery' | 'storageFull' | 'error';
20
+ /**
21
+ * Device status flags
22
+ */
23
+ export interface DeviceFlags {
24
+ charging: boolean;
25
+ usbConnected: boolean;
26
+ lowBattery: boolean;
27
+ criticalBattery: boolean;
28
+ storageWarning: boolean;
29
+ storageFull: boolean;
30
+ cellularAvailable: boolean;
31
+ cellularRoaming: boolean;
32
+ wifiConnected: boolean;
33
+ recordingActive: boolean;
34
+ syncRequired: boolean;
35
+ updateAvailable: boolean;
36
+ }
37
+ /**
38
+ * Device discovered during BLE scan (not yet connected)
39
+ */
40
+ export interface DiscoveredDevice {
41
+ /** BLE device identifier (platform-specific UUID) */
42
+ id: string;
43
+ /** Device name from advertisement (e.g., "Bota-Pin-A1B2C3") */
44
+ name: string;
45
+ /** Device type parsed from advertisement */
46
+ deviceType: DeviceType;
47
+ /** Firmware version from manufacturer data */
48
+ firmwareVersion: string;
49
+ /** Pairing state from manufacturer data */
50
+ pairingState: PairingState;
51
+ /** Signal strength (RSSI) */
52
+ rssi: number;
53
+ /** Raw manufacturer data bytes */
54
+ manufacturerData?: Uint8Array;
55
+ /** Timestamp when discovered */
56
+ discoveredAt: Date;
57
+ }
58
+ /**
59
+ * Device after successful BLE connection
60
+ */
61
+ export interface ConnectedDevice {
62
+ /** BLE device identifier */
63
+ id: string;
64
+ /** Device serial number (read from Device Info service) */
65
+ serialNumber: string;
66
+ /** Device type */
67
+ deviceType: DeviceType;
68
+ /** Firmware version */
69
+ firmwareVersion: string;
70
+ /** Hardware revision (if available) */
71
+ hardwareRevision?: string;
72
+ /** Whether device has been provisioned with a token */
73
+ isProvisioned: boolean;
74
+ /** Current connection state */
75
+ connectionState: ConnectionState;
76
+ /** Negotiated MTU size */
77
+ mtu: number;
78
+ }
79
+ /**
80
+ * Device status information
81
+ */
82
+ export interface DeviceStatus {
83
+ /** Battery level (0-100) */
84
+ batteryLevel: number;
85
+ /** Storage used percentage (0-100) */
86
+ storageUsedPercent: number;
87
+ /** Current operational state */
88
+ state: DeviceState;
89
+ /** Number of pending recordings to sync */
90
+ pendingRecordings: number;
91
+ /** Last sync timestamp */
92
+ lastSyncAt: Date | null;
93
+ /** Signal strength (for 4G devices, 0-5) */
94
+ signalStrength?: number;
95
+ /** Status flags */
96
+ flags: DeviceFlags;
97
+ /** Raw timestamp from device */
98
+ timestamp: number;
99
+ }
100
+ /**
101
+ * Storage information from device
102
+ */
103
+ export interface StorageInfo {
104
+ /** Total storage in KB */
105
+ totalKb: number;
106
+ /** Used storage in KB */
107
+ usedKb: number;
108
+ /** Total recording count */
109
+ totalRecordings: number;
110
+ /** Pending sync count */
111
+ pendingSyncCount: number;
112
+ }
113
+ /**
114
+ * Configuration for device scanning
115
+ */
116
+ export interface ScanOptions {
117
+ /** Timeout in milliseconds (default: 30000) */
118
+ timeout?: number;
119
+ /** Filter by device types */
120
+ deviceTypes?: DeviceType[];
121
+ /** Filter by pairing state */
122
+ pairingState?: PairingState;
123
+ /** Minimum RSSI to include */
124
+ minRssi?: number;
125
+ /** Allow duplicates (same device reported multiple times) */
126
+ allowDuplicates?: boolean;
127
+ }
128
+ /**
129
+ * Environment for API endpoint configuration
130
+ */
131
+ export type Environment = 'production' | 'sandbox';
132
+ /**
133
+ * Provisioning result
134
+ */
135
+ export interface ProvisioningResult {
136
+ success: boolean;
137
+ error?: 'invalid_token' | 'storage_error' | 'chunk_error' | 'unknown';
138
+ }
139
+ //# sourceMappingURL=Device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../../../src/models/Device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Recording-related type definitions
3
+ */
4
+ /**
5
+ * Audio codec type
6
+ */
7
+ export type AudioCodec = 'pcm_16k' | 'pcm_8k' | 'opus_16k' | 'opus_8k';
8
+ /**
9
+ * Recording metadata from device
10
+ */
11
+ export interface DeviceRecording {
12
+ /** Unique identifier on device (UUID) */
13
+ uuid: string;
14
+ /** Recording start timestamp */
15
+ startedAt: Date;
16
+ /** Duration in milliseconds */
17
+ durationMs: number;
18
+ /** File size in bytes */
19
+ fileSizeBytes: number;
20
+ /** Audio codec used */
21
+ codec: AudioCodec;
22
+ }
23
+ /**
24
+ * Upload information provided by customer backend
25
+ * (obtained by calling customer's API, not Bota API directly)
26
+ */
27
+ export interface UploadInfo {
28
+ /** Pre-signed S3 URL for upload */
29
+ uploadUrl: string;
30
+ /** Upload token (up_*) for verification */
31
+ uploadToken: string;
32
+ /** Recording ID assigned by Bota API (rec_*) */
33
+ recordingId: string;
34
+ /** URL to call when upload is complete */
35
+ completeUrl: string;
36
+ /** Expiration time of the upload URL */
37
+ expiresAt: Date;
38
+ }
39
+ /**
40
+ * Sync progress stages
41
+ */
42
+ export type SyncStage = 'preparing' | 'transferring' | 'uploading' | 'completing' | 'completed' | 'failed';
43
+ /**
44
+ * Sync progress information
45
+ */
46
+ export interface SyncProgress {
47
+ /** Current stage */
48
+ stage: SyncStage;
49
+ /** Progress within current stage (0.0 - 1.0) */
50
+ progress: number;
51
+ /** Bytes transferred so far (for transferring stage) */
52
+ bytesTransferred?: number;
53
+ /** Total bytes to transfer */
54
+ totalBytes?: number;
55
+ /** Bytes uploaded so far (for uploading stage) */
56
+ bytesUploaded?: number;
57
+ /** Recording ID (set when completed) */
58
+ recordingId?: string;
59
+ /** Error message (set when failed) */
60
+ error?: string;
61
+ }
62
+ /**
63
+ * Upload task status
64
+ */
65
+ export type UploadTaskStatus = 'pending' | 'uploading' | 'completed' | 'failed';
66
+ /**
67
+ * Upload task in the queue
68
+ */
69
+ export interface UploadTask {
70
+ /** Unique task identifier */
71
+ id: string;
72
+ /** Recording ID from Bota API */
73
+ recordingId: string;
74
+ /** Device ID the recording came from */
75
+ deviceId: string;
76
+ /** Local file path */
77
+ localPath: string;
78
+ /** Pre-signed S3 upload URL */
79
+ uploadUrl: string;
80
+ /** Upload token */
81
+ uploadToken: string;
82
+ /** Complete URL to call after upload */
83
+ completeUrl: string;
84
+ /** Current status */
85
+ status: UploadTaskStatus;
86
+ /** Number of retry attempts */
87
+ retryCount: number;
88
+ /** Error message if failed */
89
+ errorMessage?: string;
90
+ /** Task creation time */
91
+ createdAt: Date;
92
+ /** Last update time */
93
+ updatedAt: Date;
94
+ }
95
+ /**
96
+ * Transfer packet from device
97
+ */
98
+ export interface TransferPacket {
99
+ /** Packet type: data, eof, or error */
100
+ type: 'data' | 'eof' | 'error';
101
+ /** Sequence number */
102
+ sequenceNumber: number;
103
+ /** Audio data (for data packets) */
104
+ data?: Uint8Array;
105
+ /** CRC32 checksum (for EOF packets) */
106
+ checksum?: number;
107
+ /** Error code (for error packets) */
108
+ errorCode?: number;
109
+ }
110
+ //# sourceMappingURL=Recording.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Recording.d.ts","sourceRoot":"","sources":["../../../../src/models/Recording.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,WAAW,GACX,cAAc,GACd,WAAW,GACX,YAAY,GACZ,WAAW,GACX,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,uBAAuB;IACvB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IAC/B,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}