@bota.dev/react-native-app-sdk 2.0.0-beta.0

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 (173) hide show
  1. package/BotaDeviceSDK.podspec +55 -0
  2. package/LICENSE +21 -0
  3. package/README.md +101 -0
  4. package/android/build.gradle +76 -0
  5. package/android/src/main/AndroidManifest.xml +1 -0
  6. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidDevices.kt +172 -0
  7. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLifecycle.kt +100 -0
  8. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLogs.kt +82 -0
  9. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidModels.kt +476 -0
  10. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidOTA.kt +58 -0
  11. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingUploads.kt +180 -0
  12. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordings.kt +751 -0
  13. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidSecurity.kt +509 -0
  14. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidWiFi.kt +125 -0
  15. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKEncryptedUploadV2Materials.kt +46 -0
  16. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKModule.kt +723 -0
  17. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKPackage.kt +33 -0
  18. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidDevicesTest.kt +211 -0
  19. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLifecycleTest.kt +132 -0
  20. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLogsTest.kt +57 -0
  21. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidOTATest.kt +75 -0
  22. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingUploadsTest.kt +147 -0
  23. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingsTest.kt +355 -0
  24. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidSecurityTest.kt +523 -0
  25. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidWiFiTest.kt +100 -0
  26. package/generated/codegen-contract.json +3593 -0
  27. package/ios/BotaDeviceSDK.mm +1300 -0
  28. package/ios/BotaDeviceSDKAppleBridge.swift +2260 -0
  29. package/ios/BotaDeviceSDKAppleDevices.swift +191 -0
  30. package/ios/BotaDeviceSDKAppleLifecycle.swift +167 -0
  31. package/ios/BotaDeviceSDKAppleLogs.swift +79 -0
  32. package/ios/BotaDeviceSDKAppleOTA.swift +73 -0
  33. package/ios/BotaDeviceSDKAppleRecordingUploads.swift +178 -0
  34. package/ios/BotaDeviceSDKAppleRecordings.swift +670 -0
  35. package/ios/BotaDeviceSDKAppleSecurity.swift +586 -0
  36. package/ios/BotaDeviceSDKAppleWiFi.swift +128 -0
  37. package/ios/BotaDeviceSDKEncryptedUploadV2Materials.swift +99 -0
  38. package/lib/commonjs/BotaClient.js +194 -0
  39. package/lib/commonjs/BotaClient.js.map +1 -0
  40. package/lib/commonjs/ble/constants.js +10 -0
  41. package/lib/commonjs/ble/constants.js.map +1 -0
  42. package/lib/commonjs/ble/deviceLogs.js +50 -0
  43. package/lib/commonjs/ble/deviceLogs.js.map +1 -0
  44. package/lib/commonjs/cache/DeviceStateCache.js +6 -0
  45. package/lib/commonjs/cache/DeviceStateCache.js.map +1 -0
  46. package/lib/commonjs/client.js +746 -0
  47. package/lib/commonjs/client.js.map +1 -0
  48. package/lib/commonjs/compatibility/runtime.js +44 -0
  49. package/lib/commonjs/compatibility/runtime.js.map +1 -0
  50. package/lib/commonjs/index.js +123 -0
  51. package/lib/commonjs/index.js.map +1 -0
  52. package/lib/commonjs/managers/DeviceManager.js +647 -0
  53. package/lib/commonjs/managers/DeviceManager.js.map +1 -0
  54. package/lib/commonjs/managers/OTAManager.js +140 -0
  55. package/lib/commonjs/managers/OTAManager.js.map +1 -0
  56. package/lib/commonjs/managers/RecordingManager.js +444 -0
  57. package/lib/commonjs/managers/RecordingManager.js.map +1 -0
  58. package/lib/commonjs/managers/StreamingSession.js +175 -0
  59. package/lib/commonjs/managers/StreamingSession.js.map +1 -0
  60. package/lib/commonjs/managers/types.js +6 -0
  61. package/lib/commonjs/managers/types.js.map +1 -0
  62. package/lib/commonjs/models/Device.js +2 -0
  63. package/lib/commonjs/models/Device.js.map +1 -0
  64. package/lib/commonjs/models/Recording.js +2 -0
  65. package/lib/commonjs/models/Recording.js.map +1 -0
  66. package/lib/commonjs/models/Status.js +6 -0
  67. package/lib/commonjs/models/Status.js.map +1 -0
  68. package/lib/commonjs/package.json +1 -0
  69. package/lib/commonjs/specs/NativeBotaDeviceSDK.js +9 -0
  70. package/lib/commonjs/specs/NativeBotaDeviceSDK.js.map +1 -0
  71. package/lib/commonjs/sync/syncStatus.js +178 -0
  72. package/lib/commonjs/sync/syncStatus.js.map +1 -0
  73. package/lib/commonjs/utils/errors.js +194 -0
  74. package/lib/commonjs/utils/errors.js.map +1 -0
  75. package/lib/commonjs/utils/logger.js +84 -0
  76. package/lib/commonjs/utils/logger.js.map +1 -0
  77. package/lib/module/BotaClient.js +189 -0
  78. package/lib/module/BotaClient.js.map +1 -0
  79. package/lib/module/ble/constants.js +6 -0
  80. package/lib/module/ble/constants.js.map +1 -0
  81. package/lib/module/ble/deviceLogs.js +45 -0
  82. package/lib/module/ble/deviceLogs.js.map +1 -0
  83. package/lib/module/cache/DeviceStateCache.js +4 -0
  84. package/lib/module/cache/DeviceStateCache.js.map +1 -0
  85. package/lib/module/client.js +740 -0
  86. package/lib/module/client.js.map +1 -0
  87. package/lib/module/compatibility/runtime.js +35 -0
  88. package/lib/module/compatibility/runtime.js.map +1 -0
  89. package/lib/module/index.js +17 -0
  90. package/lib/module/index.js.map +1 -0
  91. package/lib/module/managers/DeviceManager.js +641 -0
  92. package/lib/module/managers/DeviceManager.js.map +1 -0
  93. package/lib/module/managers/OTAManager.js +134 -0
  94. package/lib/module/managers/OTAManager.js.map +1 -0
  95. package/lib/module/managers/RecordingManager.js +438 -0
  96. package/lib/module/managers/RecordingManager.js.map +1 -0
  97. package/lib/module/managers/StreamingSession.js +168 -0
  98. package/lib/module/managers/StreamingSession.js.map +1 -0
  99. package/lib/module/managers/types.js +4 -0
  100. package/lib/module/managers/types.js.map +1 -0
  101. package/lib/module/models/Device.js +2 -0
  102. package/lib/module/models/Device.js.map +1 -0
  103. package/lib/module/models/Recording.js +2 -0
  104. package/lib/module/models/Recording.js.map +1 -0
  105. package/lib/module/models/Status.js +4 -0
  106. package/lib/module/models/Status.js.map +1 -0
  107. package/lib/module/specs/NativeBotaDeviceSDK.js +5 -0
  108. package/lib/module/specs/NativeBotaDeviceSDK.js.map +1 -0
  109. package/lib/module/sync/syncStatus.js +174 -0
  110. package/lib/module/sync/syncStatus.js.map +1 -0
  111. package/lib/module/utils/errors.js +183 -0
  112. package/lib/module/utils/errors.js.map +1 -0
  113. package/lib/module/utils/logger.js +80 -0
  114. package/lib/module/utils/logger.js.map +1 -0
  115. package/lib/typescript/BotaClient.d.ts +40 -0
  116. package/lib/typescript/BotaClient.d.ts.map +1 -0
  117. package/lib/typescript/ble/constants.d.ts +4 -0
  118. package/lib/typescript/ble/constants.d.ts.map +1 -0
  119. package/lib/typescript/ble/deviceLogs.d.ts +10 -0
  120. package/lib/typescript/ble/deviceLogs.d.ts.map +1 -0
  121. package/lib/typescript/cache/DeviceStateCache.d.ts +14 -0
  122. package/lib/typescript/cache/DeviceStateCache.d.ts.map +1 -0
  123. package/lib/typescript/client.d.ts +208 -0
  124. package/lib/typescript/client.d.ts.map +1 -0
  125. package/lib/typescript/compatibility/runtime.d.ts +11 -0
  126. package/lib/typescript/compatibility/runtime.d.ts.map +1 -0
  127. package/lib/typescript/index.d.ts +19 -0
  128. package/lib/typescript/index.d.ts.map +1 -0
  129. package/lib/typescript/managers/DeviceManager.d.ts +117 -0
  130. package/lib/typescript/managers/DeviceManager.d.ts.map +1 -0
  131. package/lib/typescript/managers/OTAManager.d.ts +25 -0
  132. package/lib/typescript/managers/OTAManager.d.ts.map +1 -0
  133. package/lib/typescript/managers/RecordingManager.d.ts +54 -0
  134. package/lib/typescript/managers/RecordingManager.d.ts.map +1 -0
  135. package/lib/typescript/managers/StreamingSession.d.ts +35 -0
  136. package/lib/typescript/managers/StreamingSession.d.ts.map +1 -0
  137. package/lib/typescript/managers/types.d.ts +19 -0
  138. package/lib/typescript/managers/types.d.ts.map +1 -0
  139. package/lib/typescript/models/Device.d.ts +392 -0
  140. package/lib/typescript/models/Device.d.ts.map +1 -0
  141. package/lib/typescript/models/Recording.d.ts +259 -0
  142. package/lib/typescript/models/Recording.d.ts.map +1 -0
  143. package/lib/typescript/models/Status.d.ts +106 -0
  144. package/lib/typescript/models/Status.d.ts.map +1 -0
  145. package/lib/typescript/specs/NativeBotaDeviceSDK.d.ts +393 -0
  146. package/lib/typescript/specs/NativeBotaDeviceSDK.d.ts.map +1 -0
  147. package/lib/typescript/sync/syncStatus.d.ts +123 -0
  148. package/lib/typescript/sync/syncStatus.d.ts.map +1 -0
  149. package/lib/typescript/utils/errors.d.ts +83 -0
  150. package/lib/typescript/utils/errors.d.ts.map +1 -0
  151. package/lib/typescript/utils/logger.d.ts +36 -0
  152. package/lib/typescript/utils/logger.d.ts.map +1 -0
  153. package/package.json +100 -0
  154. package/scripts/bota_device_sdk_spm_workaround.rb +53 -0
  155. package/src/BotaClient.ts +231 -0
  156. package/src/ble/constants.ts +3 -0
  157. package/src/ble/deviceLogs.ts +61 -0
  158. package/src/cache/DeviceStateCache.ts +20 -0
  159. package/src/client.ts +1410 -0
  160. package/src/compatibility/runtime.ts +55 -0
  161. package/src/index.ts +146 -0
  162. package/src/managers/DeviceManager.ts +927 -0
  163. package/src/managers/OTAManager.ts +195 -0
  164. package/src/managers/RecordingManager.ts +578 -0
  165. package/src/managers/StreamingSession.ts +212 -0
  166. package/src/managers/types.ts +36 -0
  167. package/src/models/Device.ts +484 -0
  168. package/src/models/Recording.ts +281 -0
  169. package/src/models/Status.ts +128 -0
  170. package/src/specs/NativeBotaDeviceSDK.ts +542 -0
  171. package/src/sync/syncStatus.ts +243 -0
  172. package/src/utils/errors.ts +327 -0
  173. package/src/utils/logger.ts +122 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EventEmitter","getCompatibilityClient","StreamingSession","setStreamingSessionTerminalHandler","createTaskId","Date","now","Math","random","toString","slice","createOpaqueId","replace","value","floor","nibble","errorMessage","error","Error","message","String","observeProgress","start","queued","waiting","result","failure","settled","wake","splice","forEach","resolve","progress","push","then","next","length","Promise","shift","done","undefined","RecordingManager","tasks","initialized","paused","destroyed","activeStreamingSession","constructor","client","initialize","assertAlive","recordings","loadUploadQueue","map","task","createdAt","updatedAt","status","getStorageInfo","device","assertReady","all","devices","readStatus","listRecordings","totalKb","storageTotalMb","usedKb","storageUsedMb","totalRecordings","pendingSyncCount","pendingRecordings","syncRecording","recording","uploadInfo","emit","uuid","sinkId","id","recordingId","deviceId","localPath","uploadUrl","uploadToken","completeUrl","contentType","retryCount","persistTasks","emitQueueUpdated","emitSyncProgress","stage","totalBytes","fileSizeBytes","transfer","onProgress","transferResult","min","completedBytes","bytesTransferred","e2eEncrypted","relay","updateTask","contentSha256","bytesUploaded","upload","runUpload","confirmRecording","completed","requireTask","triggerDeviceUpload","observeUploadOwnership","recordingUuid","uploadId","destinationId","kind","accepted","monitorDeviceUpload","initialPendingCount","recordingIndex","syncAllRecordings","uploadInfoProvider","ownership","index","getPendingUploads","filter","getAllUploads","startStreamingSync","options","isActive","session","chunkSizeKb","flushIntervalMs","catch","getActiveStreamingSession","cancelUpload","taskId","cancelRecordingUpload","retryFailedUploads","clearCompletedUploads","clearAllUploads","ids","pauseUploads","resumeUploads","destroy","abort","destroyCompatibilityOperations","removeAllListeners","uploadRecordingFile","ratio","find","patch","findIndex","saveUploadQueue"],"sourceRoot":"../../../src","sources":["managers/RecordingManager.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ import EventEmitter from 'eventemitter3';
4
+ import { getCompatibilityClient } from '../compatibility/runtime';
5
+ const terminalHandlers = new WeakMap();
6
+ export const setStreamingSessionTerminalHandler = (session, handler) => {
7
+ terminalHandlers.set(session, handler);
8
+ };
9
+ const createOpaqueId = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, value => {
10
+ const random = Math.floor(Math.random() * 16);
11
+ const nibble = value === 'x' ? random : random & 0x3 | 0x8;
12
+ return nibble.toString(16);
13
+ });
14
+ export class StreamingSession extends EventEmitter {
15
+ client = getCompatibilityClient();
16
+ sessionId = createOpaqueId();
17
+ currentState = 'idle';
18
+ receivedBytes = 0;
19
+ uploadedChunks = 0;
20
+ started = false;
21
+ terminal = false;
22
+ constructor(protocolHandler, _storageManager, device, recordingUuid, uploadProvider, chunkSizeKb = 256, flushIntervalMs = 60_000) {
23
+ super();
24
+ this.device = device;
25
+ this.recordingUuid = recordingUuid;
26
+ this.uploadProvider = uploadProvider;
27
+ this.chunkSizeKb = chunkSizeKb;
28
+ this.flushIntervalMs = flushIntervalMs;
29
+ void protocolHandler;
30
+ }
31
+ get state() {
32
+ return this.currentState;
33
+ }
34
+ get bytesReceived() {
35
+ return this.receivedBytes;
36
+ }
37
+ get chunksUploaded() {
38
+ return this.uploadedChunks;
39
+ }
40
+ get recordingId() {
41
+ return this.backendRecordingId;
42
+ }
43
+ get isActive() {
44
+ return this.started && !this.terminal;
45
+ }
46
+ async start() {
47
+ if (this.started) throw new Error('StreamingSession has already started');
48
+ this.started = true;
49
+ try {
50
+ const created = await this.uploadProvider.createRecording({
51
+ startedAt: new Date()
52
+ });
53
+ this.backendRecordingId = created.recordingId;
54
+ this.relay = created.relay;
55
+ const result = await this.client.streaming.startStreaming(this.device, {
56
+ sessionId: this.sessionId,
57
+ recordingUuid: this.recordingUuid,
58
+ recordingId: created.recordingId,
59
+ chunkSizeBytes: Math.min(1024, Math.max(64, this.chunkSizeKb)) * 1024,
60
+ flushIntervalMs: Math.max(0, this.flushIntervalMs)
61
+ }, {
62
+ onProgress: progress => this.handleProgress(progress),
63
+ resolveChunkDestination: async ({
64
+ sequence,
65
+ encrypted
66
+ }) => {
67
+ if (encrypted) {
68
+ if (!this.relay) {
69
+ throw new Error('Device delivered encrypted streaming data without an upload relay');
70
+ }
71
+ return {
72
+ url: this.relay.chunkUrl(sequence),
73
+ method: 'POST',
74
+ contentType: 'application/octet-stream',
75
+ bearerToken: this.relay.bearerToken
76
+ };
77
+ }
78
+ return {
79
+ url: await this.uploadProvider.getChunkUrl(created.recordingId, sequence),
80
+ method: 'PUT',
81
+ contentType: 'audio/ogg'
82
+ };
83
+ },
84
+ finalize: metadata => this.finalize(metadata)
85
+ });
86
+ this.receivedBytes = result.totalBytes;
87
+ this.currentState = 'completed';
88
+ this.terminal = true;
89
+ this.emit('completed', {
90
+ recordingId: created.recordingId,
91
+ totalBytes: result.totalBytes
92
+ });
93
+ this.releaseTerminal();
94
+ } catch (error) {
95
+ const failure = error instanceof Error ? error : new Error(String(error));
96
+ this.terminal = true;
97
+ if (/disconnect|not connected/i.test(failure.message)) {
98
+ this.currentState = 'disconnected';
99
+ this.emit('disconnected');
100
+ } else {
101
+ this.currentState = 'failed';
102
+ this.emit('error', failure);
103
+ }
104
+ this.releaseTerminal();
105
+ throw failure;
106
+ }
107
+ }
108
+ abort() {
109
+ if (this.terminal) return;
110
+ this.terminal = true;
111
+ this.currentState = 'failed';
112
+ void this.client.streaming.abortStreaming(this.sessionId).catch(() => undefined);
113
+ this.releaseTerminal();
114
+ }
115
+ handleProgress(progress) {
116
+ const previousState = this.currentState;
117
+ this.currentState = progress.state;
118
+ this.receivedBytes = progress.bytesReceived;
119
+ this.uploadedChunks = progress.chunksUploaded;
120
+ this.emit('chunk', {
121
+ state: this.currentState,
122
+ bytesReceived: this.receivedBytes,
123
+ chunksUploaded: this.uploadedChunks,
124
+ ...(this.backendRecordingId ? {
125
+ recordingId: this.backendRecordingId
126
+ } : {})
127
+ });
128
+ if (this.currentState === 'paused') this.emit('paused');
129
+ if (previousState === 'paused' && this.currentState === 'streaming') {
130
+ this.emit('resumed');
131
+ }
132
+ }
133
+ async finalize(metadata) {
134
+ if (!this.backendRecordingId) {
135
+ throw new Error('Streaming recording has not been created');
136
+ }
137
+ if (metadata.encrypted) {
138
+ if (!this.relay) throw new Error('Encrypted stream is missing relay metadata');
139
+ const response = await fetch(this.relay.finalizeUrl, {
140
+ method: 'POST',
141
+ headers: {
142
+ Authorization: `Bearer ${this.relay.bearerToken}`,
143
+ 'Content-Type': 'application/json'
144
+ },
145
+ body: JSON.stringify({
146
+ total_chunks: metadata.totalChunks,
147
+ duration_ms: metadata.durationMs,
148
+ file_size_bytes: metadata.fileSizeBytes
149
+ })
150
+ });
151
+ if (!response.ok) {
152
+ throw new Error(`Streaming relay finalize failed (${response.status})`);
153
+ }
154
+ return;
155
+ }
156
+ await this.uploadProvider.finalizeRecording(this.backendRecordingId, {
157
+ totalChunks: metadata.totalChunks,
158
+ durationMs: metadata.durationMs,
159
+ fileSizeBytes: metadata.fileSizeBytes
160
+ });
161
+ }
162
+ releaseTerminal() {
163
+ const handler = terminalHandlers.get(this);
164
+ terminalHandlers.delete(this);
165
+ handler?.();
166
+ }
167
+ }
168
+ //# sourceMappingURL=StreamingSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EventEmitter","getCompatibilityClient","terminalHandlers","WeakMap","setStreamingSessionTerminalHandler","session","handler","set","createOpaqueId","replace","value","random","Math","floor","nibble","toString","StreamingSession","client","sessionId","currentState","receivedBytes","uploadedChunks","started","terminal","constructor","protocolHandler","_storageManager","device","recordingUuid","uploadProvider","chunkSizeKb","flushIntervalMs","state","bytesReceived","chunksUploaded","recordingId","backendRecordingId","isActive","start","Error","created","createRecording","startedAt","Date","relay","result","streaming","startStreaming","chunkSizeBytes","min","max","onProgress","progress","handleProgress","resolveChunkDestination","sequence","encrypted","url","chunkUrl","method","contentType","bearerToken","getChunkUrl","finalize","metadata","totalBytes","emit","releaseTerminal","error","failure","String","test","message","abort","abortStreaming","catch","undefined","previousState","response","fetch","finalizeUrl","headers","Authorization","body","JSON","stringify","total_chunks","totalChunks","duration_ms","durationMs","file_size_bytes","fileSizeBytes","ok","status","finalizeRecording","get","delete"],"sourceRoot":"../../../src","sources":["managers/StreamingSession.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["managers/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=Device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/Device.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=Recording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/Recording.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=Status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/Status.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.get('BotaDeviceSDK');
5
+ //# sourceMappingURL=NativeBotaDeviceSDK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","get"],"sourceRoot":"../../../src","sources":["specs/NativeBotaDeviceSDK.ts"],"mappings":";;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AA2hBlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,eAAe,CAAC","ignoreList":[]}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Centralized sync-status derivation.
5
+ *
6
+ * Apps display "what's happening with the recordings on the device right now"
7
+ * in multiple places — sync banners, pending-recordings rows, recording detail
8
+ * pages, list-item subtitles. Without a shared rule set every screen tends to
9
+ * compute its own label from raw inputs, leading to screens that disagree
10
+ * (one shows "Bluetooth syncing", another shows "4G uploading").
11
+ *
12
+ * This module owns the *rules* (pure function over a typed input shape). Apps
13
+ * own the *subscription* (a thin hook that reads from whatever stores/queries
14
+ * they use and calls `deriveSyncStatus`). The label text returned here is the
15
+ * canonical surface — every consumer should read `label` / `shortLabel`
16
+ * verbatim rather than re-deriving from `kind`/`channel`.
17
+ *
18
+ * Precedence policy (when multiple signals are true simultaneously):
19
+ * 1. Live recording — if the device is actively recording AND streaming is
20
+ * enabled, show "Streaming via <channel>" regardless of pending uploads.
21
+ * 2. Actual device transport — if `device.syncActive` is set and a radio
22
+ * (WiFi / 4G) is up, the label reflects *that* transport, even if the
23
+ * app initiated the sync via BLE. This matches what bytes are actually
24
+ * moving and avoids the smart-sync handoff flicker where the app's
25
+ * "BLE pull" state lags the device's "4G upload" reality.
26
+ * 3. App-driven BLE pull — `appDriving.active` (e.g. the consumer's
27
+ * `useSyncAllRecordings` global) shows as "Bluetooth syncing N/M".
28
+ * 4. Device claims sync but no radio is up — `'waiting_channel'`, best-guess
29
+ * channel from `wifiAttempting` / `lteAttempting`.
30
+ * 5. Otherwise — `'idle'`.
31
+ */
32
+
33
+ /**
34
+ * Inputs to `deriveSyncStatus`. Every field is what the *consumer app* already
35
+ * has on hand — the SDK does not subscribe to any state itself.
36
+ *
37
+ * `appDriving` — populated from the consumer's app-level sync state (e.g. the
38
+ * global `isSyncing` + `syncAllProgress` exposed by their `useSyncAll*`
39
+ * hook). Set `active: false` if the app isn't currently pulling.
40
+ *
41
+ * `device` — flags reported by the device. For BLE-connected devices these
42
+ * come from `BotaClient.devices.on('statusUpdate', ...)`. For backend-only
43
+ * visibility (no BLE) they come from the heartbeat-derived state on the
44
+ * server, merged at the app layer.
45
+ *
46
+ * `bleConnected` — whether the app currently has a live BLE link to this
47
+ * device. Used to disambiguate `'ble_pull'` from `'4g/wifi_upload'`.
48
+ */
49
+
50
+ /**
51
+ * Resolve the channel a live stream is actually using. When the device's upload
52
+ * preference + enabled-connection flags are known, walk the preference order and
53
+ * pick the first channel that is enabled AND up (BLE is always available while
54
+ * the link is live) — this matches the firmware/app channel-selection rule. When
55
+ * those inputs are absent, fall back to "first connected radio wins".
56
+ */
57
+ function resolveStreamingChannel(device) {
58
+ const {
59
+ wifiConnected,
60
+ lteConnected,
61
+ uploadPreference,
62
+ enabledConnections
63
+ } = device;
64
+ if (uploadPreference && enabledConnections) {
65
+ for (const channel of uploadPreference) {
66
+ if (channel === 'ble') return 'Bluetooth';
67
+ if (channel === 'wifi' && enabledConnections.wifi && wifiConnected) return 'WiFi';
68
+ if (channel === 'cellular' && enabledConnections.cellular && lteConnected) return '4G';
69
+ }
70
+ return 'Bluetooth';
71
+ }
72
+ return wifiConnected ? 'WiFi' : lteConnected ? '4G' : 'Bluetooth';
73
+ }
74
+ const IDLE = {
75
+ kind: 'idle',
76
+ label: '',
77
+ shortLabel: ''
78
+ };
79
+ function progressFraction(currentIndex, total) {
80
+ if (currentIndex == null || total == null || total <= 0) return '';
81
+ return ` ${Math.min(currentIndex, total)}/${total}`;
82
+ }
83
+
84
+ /**
85
+ * Pure derivation: given a snapshot of app + device + link state, return the
86
+ * single canonical `SyncStatus`. Safe to call on every render (no I/O, no
87
+ * allocations beyond the return value and label strings).
88
+ */
89
+ export function deriveSyncStatus(inputs) {
90
+ const {
91
+ appDriving,
92
+ device,
93
+ bleConnected
94
+ } = inputs;
95
+
96
+ // 1. Live streaming wins — the user is recording right now and bytes are
97
+ // flowing as they're captured, not from queued files.
98
+ if (device.isRecording && device.streamingEnabled) {
99
+ const channel = resolveStreamingChannel(device);
100
+ return {
101
+ kind: 'streaming',
102
+ channel,
103
+ label: `Streaming via ${channel}`,
104
+ shortLabel: `Streaming (${channel})`
105
+ };
106
+ }
107
+
108
+ // 2. Device says it's syncing AND a radio is up — trust the device's own
109
+ // transport. This wins over `appDriving` so smart-sync handoff (BLE
110
+ // trigger → device 4G upload) doesn't flicker on the label.
111
+ if (device.syncActive && device.wifiConnected) {
112
+ const frac = progressFraction(appDriving.currentIndex, appDriving.total);
113
+ return {
114
+ kind: 'wifi_upload',
115
+ channel: 'WiFi',
116
+ currentIndex: appDriving.currentIndex,
117
+ total: appDriving.total,
118
+ label: `Uploading${frac} via WiFi...`,
119
+ shortLabel: `WiFi uploading${frac}`
120
+ };
121
+ }
122
+ if (device.syncActive && device.lteConnected && !bleConnected) {
123
+ // When BLE is up the app is in control — see rule 3 — so we let
124
+ // `appDriving` take over if it's active even though LTE is also flagged.
125
+ const frac = progressFraction(appDriving.currentIndex, appDriving.total);
126
+ return {
127
+ kind: 'lte_upload',
128
+ channel: '4G',
129
+ currentIndex: appDriving.currentIndex,
130
+ total: appDriving.total,
131
+ label: `Uploading${frac} via 4G...`,
132
+ shortLabel: `4G uploading${frac}`
133
+ };
134
+ }
135
+
136
+ // 3. App-driven BLE pull.
137
+ if (appDriving.active) {
138
+ const frac = progressFraction(appDriving.currentIndex, appDriving.total);
139
+ return {
140
+ kind: 'ble_pull',
141
+ channel: 'Bluetooth',
142
+ currentIndex: appDriving.currentIndex,
143
+ total: appDriving.total,
144
+ label: `Syncing${frac} via Bluetooth...`,
145
+ shortLabel: `Bluetooth syncing${frac}`
146
+ };
147
+ }
148
+
149
+ // 4. Device says it's syncing but no radio is up yet — typically a 4G
150
+ // cold-start (PDP attach in progress) or WiFi reconnect.
151
+ if (device.syncActive) {
152
+ const guess = device.wifiAttempting ? 'WiFi' : device.lteAttempting ? '4G' : undefined;
153
+ if (guess) {
154
+ const frac = progressFraction(appDriving.currentIndex, appDriving.total);
155
+ return {
156
+ kind: 'waiting_channel',
157
+ channel: guess,
158
+ currentIndex: appDriving.currentIndex,
159
+ total: appDriving.total,
160
+ label: `Uploading${frac} via ${guess}...`,
161
+ shortLabel: `${guess} uploading${frac}`
162
+ };
163
+ }
164
+ return {
165
+ kind: 'waiting_channel',
166
+ label: 'Waiting for upload channel...',
167
+ shortLabel: 'Waiting for channel'
168
+ };
169
+ }
170
+
171
+ // 5. Idle.
172
+ return IDLE;
173
+ }
174
+ //# sourceMappingURL=syncStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["resolveStreamingChannel","device","wifiConnected","lteConnected","uploadPreference","enabledConnections","channel","wifi","cellular","IDLE","kind","label","shortLabel","progressFraction","currentIndex","total","Math","min","deriveSyncStatus","inputs","appDriving","bleConnected","isRecording","streamingEnabled","syncActive","frac","active","guess","wifiAttempting","lteAttempting","undefined"],"sourceRoot":"../../../src","sources":["sync/syncStatus.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Custom error types for the Bota SDK
5
+ */
6
+
7
+ import { BLE_ERROR_STORAGE_KEY_UNAVAILABLE } from '../ble/constants';
8
+
9
+ /**
10
+ * Base error class for all Bota SDK errors
11
+ */
12
+ export class BotaError extends Error {
13
+ constructor(message, code, cause) {
14
+ super(message);
15
+ this.code = code;
16
+ this.cause = cause;
17
+ this.name = 'BotaError';
18
+ Object.setPrototypeOf(this, BotaError.prototype);
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Bluetooth-related errors
24
+ */
25
+ export class BluetoothError extends BotaError {
26
+ constructor(message, code, cause) {
27
+ super(message, code, cause);
28
+ this.name = 'BluetoothError';
29
+ Object.setPrototypeOf(this, BluetoothError.prototype);
30
+ }
31
+ static unavailable() {
32
+ return new BluetoothError('Bluetooth is not available on this device', 'BLUETOOTH_UNAVAILABLE');
33
+ }
34
+ static unauthorized() {
35
+ return new BluetoothError('Bluetooth permission not granted', 'BLUETOOTH_UNAUTHORIZED');
36
+ }
37
+ static poweredOff() {
38
+ return new BluetoothError('Bluetooth is powered off', 'BLUETOOTH_OFF');
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Device-related errors
44
+ */
45
+ export class DeviceError extends BotaError {
46
+ constructor(message, code, deviceId, cause) {
47
+ super(message, code, cause);
48
+ this.deviceId = deviceId;
49
+ this.name = 'DeviceError';
50
+ Object.setPrototypeOf(this, DeviceError.prototype);
51
+ }
52
+ static notFound(deviceId) {
53
+ return new DeviceError(`Device ${deviceId} not found`, 'DEVICE_NOT_FOUND', deviceId);
54
+ }
55
+ static connectionFailed(deviceId, cause) {
56
+ return new DeviceError(`Failed to connect to device ${deviceId}`, 'CONNECTION_FAILED', deviceId, cause);
57
+ }
58
+ static connectionLost(deviceId, during) {
59
+ const message = during ? `Connection to device ${deviceId} lost during ${during}` : `Connection to device ${deviceId} lost`;
60
+ return new DeviceError(message, 'CONNECTION_LOST', deviceId);
61
+ }
62
+ static bondingFailed(deviceId, cause) {
63
+ return new DeviceError(`Bonding failed for device ${deviceId}`, 'BONDING_FAILED', deviceId, cause);
64
+ }
65
+ static notConnected(deviceId) {
66
+ return new DeviceError(`Device ${deviceId} is not connected`, 'NOT_CONNECTED', deviceId);
67
+ }
68
+ static alreadyConnected(deviceId) {
69
+ return new DeviceError(`Device ${deviceId} is already connected`, 'ALREADY_CONNECTED', deviceId);
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Provisioning-related errors
75
+ */
76
+ export class ProvisioningError extends BotaError {
77
+ constructor(message, code, deviceId, cause) {
78
+ super(message, code, cause);
79
+ this.deviceId = deviceId;
80
+ this.name = 'ProvisioningError';
81
+ Object.setPrototypeOf(this, ProvisioningError.prototype);
82
+ }
83
+ static invalidToken(deviceId) {
84
+ return new ProvisioningError('Device rejected the token as invalid', 'INVALID_TOKEN', deviceId);
85
+ }
86
+ static storageError(deviceId) {
87
+ return new ProvisioningError('Device failed to store the token', 'STORAGE_ERROR', deviceId);
88
+ }
89
+ static chunkError(deviceId) {
90
+ return new ProvisioningError('Token chunk transfer failed', 'CHUNK_ERROR', deviceId);
91
+ }
92
+ static alreadyProvisioned(deviceId) {
93
+ return new ProvisioningError('Device is already provisioned', 'ALREADY_PROVISIONED', deviceId);
94
+ }
95
+ static alreadyPaired(deviceId) {
96
+ return new ProvisioningError('Device is already paired with another credential. Factory reset the device before re-provisioning.', 'ALREADY_PAIRED', deviceId);
97
+ }
98
+ static timeout(deviceId) {
99
+ return new ProvisioningError('Provisioning timed out waiting for device response', 'PROVISIONING_TIMEOUT', deviceId);
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Transfer-related errors
105
+ */
106
+ export class TransferError extends BotaError {
107
+ constructor(message, code, recordingUuid, cause) {
108
+ super(message, code, cause);
109
+ this.recordingUuid = recordingUuid;
110
+ this.name = 'TransferError';
111
+ Object.setPrototypeOf(this, TransferError.prototype);
112
+ }
113
+ static recordingNotFound(uuid) {
114
+ return new TransferError(`Recording ${uuid} not found on device`, 'RECORDING_NOT_FOUND', uuid);
115
+ }
116
+ static checksumMismatch(uuid) {
117
+ return new TransferError(`Checksum mismatch for recording ${uuid}`, 'CHECKSUM_MISMATCH', uuid);
118
+ }
119
+ static interrupted(uuid, cause) {
120
+ return new TransferError(`Transfer interrupted for recording ${uuid}`, 'TRANSFER_INTERRUPTED', uuid, cause);
121
+ }
122
+ static timeout(uuid) {
123
+ return new TransferError(`Transfer timed out for recording ${uuid}`, 'TRANSFER_TIMEOUT', uuid);
124
+ }
125
+ static deviceError(uuid, errorCode) {
126
+ if (errorCode === BLE_ERROR_STORAGE_KEY_UNAVAILABLE) {
127
+ return new TransferError(`Recording ${uuid} exists, but its device storage key is unavailable`, 'STORAGE_KEY_UNAVAILABLE', uuid);
128
+ }
129
+ return new TransferError(`Device error (code: ${errorCode}) during transfer of ${uuid}`, 'DEVICE_ERROR', uuid);
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Upload-related errors
135
+ */
136
+ export class UploadError extends BotaError {
137
+ constructor(message, code, taskId, cause) {
138
+ super(message, code, cause);
139
+ this.taskId = taskId;
140
+ this.name = 'UploadError';
141
+ Object.setPrototypeOf(this, UploadError.prototype);
142
+ }
143
+ static urlExpired(taskId) {
144
+ return new UploadError('Upload URL has expired', 'URL_EXPIRED', taskId);
145
+ }
146
+ static networkUnavailable() {
147
+ return new UploadError('Network is not available', 'NETWORK_UNAVAILABLE');
148
+ }
149
+ static uploadFailed(taskId, cause) {
150
+ return new UploadError(`Upload failed for task ${taskId}`, 'UPLOAD_FAILED', taskId, cause);
151
+ }
152
+ static completionFailed(taskId, cause) {
153
+ return new UploadError(`Failed to notify completion for task ${taskId}`, 'COMPLETION_FAILED', taskId, cause);
154
+ }
155
+ }
156
+
157
+ /**
158
+ * SDK state errors
159
+ */
160
+ export class SdkError extends BotaError {
161
+ constructor(message, code, cause) {
162
+ super(message, code, cause);
163
+ this.name = 'SdkError';
164
+ Object.setPrototypeOf(this, SdkError.prototype);
165
+ }
166
+ static notInitialized() {
167
+ return new SdkError('SDK has not been initialized. Call BotaClient.configure() first.', 'NOT_INITIALIZED');
168
+ }
169
+ static invalidState(expected, actual) {
170
+ return new SdkError(`Invalid state: expected ${expected}, got ${actual}`, 'INVALID_STATE');
171
+ }
172
+ static timeout(operation) {
173
+ return new SdkError(`Operation timed out: ${operation}`, 'TIMEOUT');
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Type guard to check if an error is a BotaError
179
+ */
180
+ export function isBotaError(error) {
181
+ return error instanceof BotaError;
182
+ }
183
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BLE_ERROR_STORAGE_KEY_UNAVAILABLE","BotaError","Error","constructor","message","code","cause","name","Object","setPrototypeOf","prototype","BluetoothError","unavailable","unauthorized","poweredOff","DeviceError","deviceId","notFound","connectionFailed","connectionLost","during","bondingFailed","notConnected","alreadyConnected","ProvisioningError","invalidToken","storageError","chunkError","alreadyProvisioned","alreadyPaired","timeout","TransferError","recordingUuid","recordingNotFound","uuid","checksumMismatch","interrupted","deviceError","errorCode","UploadError","taskId","urlExpired","networkUnavailable","uploadFailed","completionFailed","SdkError","notInitialized","invalidState","expected","actual","operation","isBotaError","error"],"sourceRoot":"../../../src","sources":["utils/errors.ts"],"mappings":"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","ignoreList":[]}