@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.
- package/README.md +279 -0
- package/lib/commonjs/BotaClient.js +223 -0
- package/lib/commonjs/BotaClient.js.map +1 -0
- package/lib/commonjs/ble/BleManager.js +494 -0
- package/lib/commonjs/ble/BleManager.js.map +1 -0
- package/lib/commonjs/ble/constants.js +166 -0
- package/lib/commonjs/ble/constants.js.map +1 -0
- package/lib/commonjs/ble/index.js +54 -0
- package/lib/commonjs/ble/index.js.map +1 -0
- package/lib/commonjs/ble/parsers.js +345 -0
- package/lib/commonjs/ble/parsers.js.map +1 -0
- package/lib/commonjs/index.js +81 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/managers/DeviceManager.js +437 -0
- package/lib/commonjs/managers/DeviceManager.js.map +1 -0
- package/lib/commonjs/managers/OTAManager.js +227 -0
- package/lib/commonjs/managers/OTAManager.js.map +1 -0
- package/lib/commonjs/managers/RecordingManager.js +384 -0
- package/lib/commonjs/managers/RecordingManager.js.map +1 -0
- package/lib/commonjs/managers/index.js +27 -0
- package/lib/commonjs/managers/index.js.map +1 -0
- package/lib/commonjs/models/Device.js +2 -0
- package/lib/commonjs/models/Device.js.map +1 -0
- package/lib/commonjs/models/Recording.js +2 -0
- package/lib/commonjs/models/Recording.js.map +1 -0
- package/lib/commonjs/models/Status.js +6 -0
- package/lib/commonjs/models/Status.js.map +1 -0
- package/lib/commonjs/models/index.js +39 -0
- package/lib/commonjs/models/index.js.map +1 -0
- package/lib/commonjs/protocol/ProtocolHandler.js +343 -0
- package/lib/commonjs/protocol/ProtocolHandler.js.map +1 -0
- package/lib/commonjs/protocol/index.js +13 -0
- package/lib/commonjs/protocol/index.js.map +1 -0
- package/lib/commonjs/storage/StorageManager.js +333 -0
- package/lib/commonjs/storage/StorageManager.js.map +1 -0
- package/lib/commonjs/storage/index.js +19 -0
- package/lib/commonjs/storage/index.js.map +1 -0
- package/lib/commonjs/upload/S3Uploader.js +133 -0
- package/lib/commonjs/upload/S3Uploader.js.map +1 -0
- package/lib/commonjs/upload/UploadQueue.js +280 -0
- package/lib/commonjs/upload/UploadQueue.js.map +1 -0
- package/lib/commonjs/upload/index.js +20 -0
- package/lib/commonjs/upload/index.js.map +1 -0
- package/lib/commonjs/utils/errors.js +187 -0
- package/lib/commonjs/utils/errors.js.map +1 -0
- package/lib/commonjs/utils/index.js +40 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/utils/logger.js +135 -0
- package/lib/commonjs/utils/logger.js.map +1 -0
- package/lib/commonjs/utils/retry.js +160 -0
- package/lib/commonjs/utils/retry.js.map +1 -0
- package/lib/module/BotaClient.js +216 -0
- package/lib/module/BotaClient.js.map +1 -0
- package/lib/module/ble/BleManager.js +484 -0
- package/lib/module/ble/BleManager.js.map +1 -0
- package/lib/module/ble/constants.js +159 -0
- package/lib/module/ble/constants.js.map +1 -0
- package/lib/module/ble/index.js +8 -0
- package/lib/module/ble/index.js.map +1 -0
- package/lib/module/ble/parsers.js +328 -0
- package/lib/module/ble/parsers.js.map +1 -0
- package/lib/module/index.js +22 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/managers/DeviceManager.js +429 -0
- package/lib/module/managers/DeviceManager.js.map +1 -0
- package/lib/module/managers/OTAManager.js +219 -0
- package/lib/module/managers/OTAManager.js.map +1 -0
- package/lib/module/managers/RecordingManager.js +376 -0
- package/lib/module/managers/RecordingManager.js.map +1 -0
- package/lib/module/managers/index.js +8 -0
- package/lib/module/managers/index.js.map +1 -0
- package/lib/module/models/Device.js +2 -0
- package/lib/module/models/Device.js.map +1 -0
- package/lib/module/models/Recording.js +2 -0
- package/lib/module/models/Recording.js.map +1 -0
- package/lib/module/models/Status.js +2 -0
- package/lib/module/models/Status.js.map +1 -0
- package/lib/module/models/index.js +8 -0
- package/lib/module/models/index.js.map +1 -0
- package/lib/module/protocol/ProtocolHandler.js +336 -0
- package/lib/module/protocol/ProtocolHandler.js.map +1 -0
- package/lib/module/protocol/index.js +6 -0
- package/lib/module/protocol/index.js.map +1 -0
- package/lib/module/storage/StorageManager.js +324 -0
- package/lib/module/storage/StorageManager.js.map +1 -0
- package/lib/module/storage/index.js +6 -0
- package/lib/module/storage/index.js.map +1 -0
- package/lib/module/upload/S3Uploader.js +126 -0
- package/lib/module/upload/S3Uploader.js.map +1 -0
- package/lib/module/upload/UploadQueue.js +272 -0
- package/lib/module/upload/UploadQueue.js.map +1 -0
- package/lib/module/upload/index.js +7 -0
- package/lib/module/upload/index.js.map +1 -0
- package/lib/module/utils/errors.js +173 -0
- package/lib/module/utils/errors.js.map +1 -0
- package/lib/module/utils/index.js +8 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/module/utils/logger.js +129 -0
- package/lib/module/utils/logger.js.map +1 -0
- package/lib/module/utils/retry.js +149 -0
- package/lib/module/utils/retry.js.map +1 -0
- package/lib/typescript/src/BotaClient.d.ts +77 -0
- package/lib/typescript/src/BotaClient.d.ts.map +1 -0
- package/lib/typescript/src/ble/BleManager.d.ts +111 -0
- package/lib/typescript/src/ble/BleManager.d.ts.map +1 -0
- package/lib/typescript/src/ble/constants.d.ts +111 -0
- package/lib/typescript/src/ble/constants.d.ts.map +1 -0
- package/lib/typescript/src/ble/index.d.ts +7 -0
- package/lib/typescript/src/ble/index.d.ts.map +1 -0
- package/lib/typescript/src/ble/parsers.d.ts +100 -0
- package/lib/typescript/src/ble/parsers.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +16 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/managers/DeviceManager.d.ts +84 -0
- package/lib/typescript/src/managers/DeviceManager.d.ts.map +1 -0
- package/lib/typescript/src/managers/OTAManager.d.ts +78 -0
- package/lib/typescript/src/managers/OTAManager.d.ts.map +1 -0
- package/lib/typescript/src/managers/RecordingManager.d.ts +90 -0
- package/lib/typescript/src/managers/RecordingManager.d.ts.map +1 -0
- package/lib/typescript/src/managers/index.d.ts +7 -0
- package/lib/typescript/src/managers/index.d.ts.map +1 -0
- package/lib/typescript/src/models/Device.d.ts +139 -0
- package/lib/typescript/src/models/Device.d.ts.map +1 -0
- package/lib/typescript/src/models/Recording.d.ts +110 -0
- package/lib/typescript/src/models/Recording.d.ts.map +1 -0
- package/lib/typescript/src/models/Status.d.ts +104 -0
- package/lib/typescript/src/models/Status.d.ts.map +1 -0
- package/lib/typescript/src/models/index.d.ts +7 -0
- package/lib/typescript/src/models/index.d.ts.map +1 -0
- package/lib/typescript/src/protocol/ProtocolHandler.d.ts +69 -0
- package/lib/typescript/src/protocol/ProtocolHandler.d.ts.map +1 -0
- package/lib/typescript/src/protocol/index.d.ts +5 -0
- package/lib/typescript/src/protocol/index.d.ts.map +1 -0
- package/lib/typescript/src/storage/StorageManager.d.ts +116 -0
- package/lib/typescript/src/storage/StorageManager.d.ts.map +1 -0
- package/lib/typescript/src/storage/index.d.ts +5 -0
- package/lib/typescript/src/storage/index.d.ts.map +1 -0
- package/lib/typescript/src/upload/S3Uploader.d.ts +38 -0
- package/lib/typescript/src/upload/S3Uploader.d.ts.map +1 -0
- package/lib/typescript/src/upload/UploadQueue.d.ts +95 -0
- package/lib/typescript/src/upload/UploadQueue.d.ts.map +1 -0
- package/lib/typescript/src/upload/index.d.ts +6 -0
- package/lib/typescript/src/upload/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/errors.d.ts +82 -0
- package/lib/typescript/src/utils/errors.d.ts.map +1 -0
- package/lib/typescript/src/utils/index.d.ts +7 -0
- package/lib/typescript/src/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/logger.d.ts +68 -0
- package/lib/typescript/src/utils/logger.d.ts.map +1 -0
- package/lib/typescript/src/utils/retry.d.ts +53 -0
- package/lib/typescript/src/utils/retry.d.ts.map +1 -0
- package/package.json +95 -0
- package/src/BotaClient.ts +238 -0
- package/src/ble/BleManager.ts +573 -0
- package/src/ble/constants.ts +158 -0
- package/src/ble/index.ts +7 -0
- package/src/ble/parsers.ts +395 -0
- package/src/index.ts +64 -0
- package/src/managers/DeviceManager.ts +545 -0
- package/src/managers/OTAManager.ts +263 -0
- package/src/managers/RecordingManager.ts +434 -0
- package/src/managers/index.ts +12 -0
- package/src/models/Device.ts +164 -0
- package/src/models/Recording.ts +123 -0
- package/src/models/Status.ts +126 -0
- package/src/models/index.ts +7 -0
- package/src/protocol/ProtocolHandler.ts +459 -0
- package/src/protocol/index.ts +5 -0
- package/src/storage/StorageManager.ts +343 -0
- package/src/storage/index.ts +5 -0
- package/src/upload/S3Uploader.ts +164 -0
- package/src/upload/UploadQueue.ts +310 -0
- package/src/upload/index.ts +6 -0
- package/src/utils/errors.ts +310 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +137 -0
- 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"}
|