@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.
- package/BotaDeviceSDK.podspec +55 -0
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/android/build.gradle +76 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidDevices.kt +172 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLifecycle.kt +100 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLogs.kt +82 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidModels.kt +476 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidOTA.kt +58 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingUploads.kt +180 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordings.kt +751 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidSecurity.kt +509 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidWiFi.kt +125 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKEncryptedUploadV2Materials.kt +46 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKModule.kt +723 -0
- package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKPackage.kt +33 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidDevicesTest.kt +211 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLifecycleTest.kt +132 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLogsTest.kt +57 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidOTATest.kt +75 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingUploadsTest.kt +147 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingsTest.kt +355 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidSecurityTest.kt +523 -0
- package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidWiFiTest.kt +100 -0
- package/generated/codegen-contract.json +3593 -0
- package/ios/BotaDeviceSDK.mm +1300 -0
- package/ios/BotaDeviceSDKAppleBridge.swift +2260 -0
- package/ios/BotaDeviceSDKAppleDevices.swift +191 -0
- package/ios/BotaDeviceSDKAppleLifecycle.swift +167 -0
- package/ios/BotaDeviceSDKAppleLogs.swift +79 -0
- package/ios/BotaDeviceSDKAppleOTA.swift +73 -0
- package/ios/BotaDeviceSDKAppleRecordingUploads.swift +178 -0
- package/ios/BotaDeviceSDKAppleRecordings.swift +670 -0
- package/ios/BotaDeviceSDKAppleSecurity.swift +586 -0
- package/ios/BotaDeviceSDKAppleWiFi.swift +128 -0
- package/ios/BotaDeviceSDKEncryptedUploadV2Materials.swift +99 -0
- package/lib/commonjs/BotaClient.js +194 -0
- package/lib/commonjs/BotaClient.js.map +1 -0
- package/lib/commonjs/ble/constants.js +10 -0
- package/lib/commonjs/ble/constants.js.map +1 -0
- package/lib/commonjs/ble/deviceLogs.js +50 -0
- package/lib/commonjs/ble/deviceLogs.js.map +1 -0
- package/lib/commonjs/cache/DeviceStateCache.js +6 -0
- package/lib/commonjs/cache/DeviceStateCache.js.map +1 -0
- package/lib/commonjs/client.js +746 -0
- package/lib/commonjs/client.js.map +1 -0
- package/lib/commonjs/compatibility/runtime.js +44 -0
- package/lib/commonjs/compatibility/runtime.js.map +1 -0
- package/lib/commonjs/index.js +123 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/managers/DeviceManager.js +647 -0
- package/lib/commonjs/managers/DeviceManager.js.map +1 -0
- package/lib/commonjs/managers/OTAManager.js +140 -0
- package/lib/commonjs/managers/OTAManager.js.map +1 -0
- package/lib/commonjs/managers/RecordingManager.js +444 -0
- package/lib/commonjs/managers/RecordingManager.js.map +1 -0
- package/lib/commonjs/managers/StreamingSession.js +175 -0
- package/lib/commonjs/managers/StreamingSession.js.map +1 -0
- package/lib/commonjs/managers/types.js +6 -0
- package/lib/commonjs/managers/types.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/package.json +1 -0
- package/lib/commonjs/specs/NativeBotaDeviceSDK.js +9 -0
- package/lib/commonjs/specs/NativeBotaDeviceSDK.js.map +1 -0
- package/lib/commonjs/sync/syncStatus.js +178 -0
- package/lib/commonjs/sync/syncStatus.js.map +1 -0
- package/lib/commonjs/utils/errors.js +194 -0
- package/lib/commonjs/utils/errors.js.map +1 -0
- package/lib/commonjs/utils/logger.js +84 -0
- package/lib/commonjs/utils/logger.js.map +1 -0
- package/lib/module/BotaClient.js +189 -0
- package/lib/module/BotaClient.js.map +1 -0
- package/lib/module/ble/constants.js +6 -0
- package/lib/module/ble/constants.js.map +1 -0
- package/lib/module/ble/deviceLogs.js +45 -0
- package/lib/module/ble/deviceLogs.js.map +1 -0
- package/lib/module/cache/DeviceStateCache.js +4 -0
- package/lib/module/cache/DeviceStateCache.js.map +1 -0
- package/lib/module/client.js +740 -0
- package/lib/module/client.js.map +1 -0
- package/lib/module/compatibility/runtime.js +35 -0
- package/lib/module/compatibility/runtime.js.map +1 -0
- package/lib/module/index.js +17 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/managers/DeviceManager.js +641 -0
- package/lib/module/managers/DeviceManager.js.map +1 -0
- package/lib/module/managers/OTAManager.js +134 -0
- package/lib/module/managers/OTAManager.js.map +1 -0
- package/lib/module/managers/RecordingManager.js +438 -0
- package/lib/module/managers/RecordingManager.js.map +1 -0
- package/lib/module/managers/StreamingSession.js +168 -0
- package/lib/module/managers/StreamingSession.js.map +1 -0
- package/lib/module/managers/types.js +4 -0
- package/lib/module/managers/types.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 +4 -0
- package/lib/module/models/Status.js.map +1 -0
- package/lib/module/specs/NativeBotaDeviceSDK.js +5 -0
- package/lib/module/specs/NativeBotaDeviceSDK.js.map +1 -0
- package/lib/module/sync/syncStatus.js +174 -0
- package/lib/module/sync/syncStatus.js.map +1 -0
- package/lib/module/utils/errors.js +183 -0
- package/lib/module/utils/errors.js.map +1 -0
- package/lib/module/utils/logger.js +80 -0
- package/lib/module/utils/logger.js.map +1 -0
- package/lib/typescript/BotaClient.d.ts +40 -0
- package/lib/typescript/BotaClient.d.ts.map +1 -0
- package/lib/typescript/ble/constants.d.ts +4 -0
- package/lib/typescript/ble/constants.d.ts.map +1 -0
- package/lib/typescript/ble/deviceLogs.d.ts +10 -0
- package/lib/typescript/ble/deviceLogs.d.ts.map +1 -0
- package/lib/typescript/cache/DeviceStateCache.d.ts +14 -0
- package/lib/typescript/cache/DeviceStateCache.d.ts.map +1 -0
- package/lib/typescript/client.d.ts +208 -0
- package/lib/typescript/client.d.ts.map +1 -0
- package/lib/typescript/compatibility/runtime.d.ts +11 -0
- package/lib/typescript/compatibility/runtime.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +19 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/managers/DeviceManager.d.ts +117 -0
- package/lib/typescript/managers/DeviceManager.d.ts.map +1 -0
- package/lib/typescript/managers/OTAManager.d.ts +25 -0
- package/lib/typescript/managers/OTAManager.d.ts.map +1 -0
- package/lib/typescript/managers/RecordingManager.d.ts +54 -0
- package/lib/typescript/managers/RecordingManager.d.ts.map +1 -0
- package/lib/typescript/managers/StreamingSession.d.ts +35 -0
- package/lib/typescript/managers/StreamingSession.d.ts.map +1 -0
- package/lib/typescript/managers/types.d.ts +19 -0
- package/lib/typescript/managers/types.d.ts.map +1 -0
- package/lib/typescript/models/Device.d.ts +392 -0
- package/lib/typescript/models/Device.d.ts.map +1 -0
- package/lib/typescript/models/Recording.d.ts +259 -0
- package/lib/typescript/models/Recording.d.ts.map +1 -0
- package/lib/typescript/models/Status.d.ts +106 -0
- package/lib/typescript/models/Status.d.ts.map +1 -0
- package/lib/typescript/specs/NativeBotaDeviceSDK.d.ts +393 -0
- package/lib/typescript/specs/NativeBotaDeviceSDK.d.ts.map +1 -0
- package/lib/typescript/sync/syncStatus.d.ts +123 -0
- package/lib/typescript/sync/syncStatus.d.ts.map +1 -0
- package/lib/typescript/utils/errors.d.ts +83 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -0
- package/lib/typescript/utils/logger.d.ts +36 -0
- package/lib/typescript/utils/logger.d.ts.map +1 -0
- package/package.json +100 -0
- package/scripts/bota_device_sdk_spm_workaround.rb +53 -0
- package/src/BotaClient.ts +231 -0
- package/src/ble/constants.ts +3 -0
- package/src/ble/deviceLogs.ts +61 -0
- package/src/cache/DeviceStateCache.ts +20 -0
- package/src/client.ts +1410 -0
- package/src/compatibility/runtime.ts +55 -0
- package/src/index.ts +146 -0
- package/src/managers/DeviceManager.ts +927 -0
- package/src/managers/OTAManager.ts +195 -0
- package/src/managers/RecordingManager.ts +578 -0
- package/src/managers/StreamingSession.ts +212 -0
- package/src/managers/types.ts +36 -0
- package/src/models/Device.ts +484 -0
- package/src/models/Recording.ts +281 -0
- package/src/models/Status.ts +128 -0
- package/src/specs/NativeBotaDeviceSDK.ts +542 -0
- package/src/sync/syncStatus.ts +243 -0
- package/src/utils/errors.ts +327 -0
- package/src/utils/logger.ts +122 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_eventemitter","_interopRequireDefault","require","_runtime","_StreamingSession","e","__esModule","default","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","EventEmitter","tasks","initialized","paused","destroyed","activeStreamingSession","constructor","client","getCompatibilityClient","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","StreamingSession","chunkSizeKb","flushIntervalMs","setStreamingSessionTerminalHandler","catch","getActiveStreamingSession","cancelUpload","taskId","cancelRecordingUpload","retryFailedUploads","clearCompletedUploads","clearAllUploads","ids","pauseUploads","resumeUploads","destroy","abort","destroyCompatibilityOperations","removeAllListeners","uploadRecordingFile","ratio","find","patch","findIndex","saveUploadQueue","exports"],"sourceRoot":"../../../src","sources":["managers/RecordingManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.setStreamingSessionTerminalHandler = exports.StreamingSession = void 0;
|
|
7
|
+
var _eventemitter = _interopRequireDefault(require("eventemitter3"));
|
|
8
|
+
var _runtime = require("../compatibility/runtime");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
const terminalHandlers = new WeakMap();
|
|
11
|
+
const setStreamingSessionTerminalHandler = (session, handler) => {
|
|
12
|
+
terminalHandlers.set(session, handler);
|
|
13
|
+
};
|
|
14
|
+
exports.setStreamingSessionTerminalHandler = setStreamingSessionTerminalHandler;
|
|
15
|
+
const createOpaqueId = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, value => {
|
|
16
|
+
const random = Math.floor(Math.random() * 16);
|
|
17
|
+
const nibble = value === 'x' ? random : random & 0x3 | 0x8;
|
|
18
|
+
return nibble.toString(16);
|
|
19
|
+
});
|
|
20
|
+
class StreamingSession extends _eventemitter.default {
|
|
21
|
+
client = (0, _runtime.getCompatibilityClient)();
|
|
22
|
+
sessionId = createOpaqueId();
|
|
23
|
+
currentState = 'idle';
|
|
24
|
+
receivedBytes = 0;
|
|
25
|
+
uploadedChunks = 0;
|
|
26
|
+
started = false;
|
|
27
|
+
terminal = false;
|
|
28
|
+
constructor(protocolHandler, _storageManager, device, recordingUuid, uploadProvider, chunkSizeKb = 256, flushIntervalMs = 60_000) {
|
|
29
|
+
super();
|
|
30
|
+
this.device = device;
|
|
31
|
+
this.recordingUuid = recordingUuid;
|
|
32
|
+
this.uploadProvider = uploadProvider;
|
|
33
|
+
this.chunkSizeKb = chunkSizeKb;
|
|
34
|
+
this.flushIntervalMs = flushIntervalMs;
|
|
35
|
+
void protocolHandler;
|
|
36
|
+
}
|
|
37
|
+
get state() {
|
|
38
|
+
return this.currentState;
|
|
39
|
+
}
|
|
40
|
+
get bytesReceived() {
|
|
41
|
+
return this.receivedBytes;
|
|
42
|
+
}
|
|
43
|
+
get chunksUploaded() {
|
|
44
|
+
return this.uploadedChunks;
|
|
45
|
+
}
|
|
46
|
+
get recordingId() {
|
|
47
|
+
return this.backendRecordingId;
|
|
48
|
+
}
|
|
49
|
+
get isActive() {
|
|
50
|
+
return this.started && !this.terminal;
|
|
51
|
+
}
|
|
52
|
+
async start() {
|
|
53
|
+
if (this.started) throw new Error('StreamingSession has already started');
|
|
54
|
+
this.started = true;
|
|
55
|
+
try {
|
|
56
|
+
const created = await this.uploadProvider.createRecording({
|
|
57
|
+
startedAt: new Date()
|
|
58
|
+
});
|
|
59
|
+
this.backendRecordingId = created.recordingId;
|
|
60
|
+
this.relay = created.relay;
|
|
61
|
+
const result = await this.client.streaming.startStreaming(this.device, {
|
|
62
|
+
sessionId: this.sessionId,
|
|
63
|
+
recordingUuid: this.recordingUuid,
|
|
64
|
+
recordingId: created.recordingId,
|
|
65
|
+
chunkSizeBytes: Math.min(1024, Math.max(64, this.chunkSizeKb)) * 1024,
|
|
66
|
+
flushIntervalMs: Math.max(0, this.flushIntervalMs)
|
|
67
|
+
}, {
|
|
68
|
+
onProgress: progress => this.handleProgress(progress),
|
|
69
|
+
resolveChunkDestination: async ({
|
|
70
|
+
sequence,
|
|
71
|
+
encrypted
|
|
72
|
+
}) => {
|
|
73
|
+
if (encrypted) {
|
|
74
|
+
if (!this.relay) {
|
|
75
|
+
throw new Error('Device delivered encrypted streaming data without an upload relay');
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
url: this.relay.chunkUrl(sequence),
|
|
79
|
+
method: 'POST',
|
|
80
|
+
contentType: 'application/octet-stream',
|
|
81
|
+
bearerToken: this.relay.bearerToken
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
url: await this.uploadProvider.getChunkUrl(created.recordingId, sequence),
|
|
86
|
+
method: 'PUT',
|
|
87
|
+
contentType: 'audio/ogg'
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
finalize: metadata => this.finalize(metadata)
|
|
91
|
+
});
|
|
92
|
+
this.receivedBytes = result.totalBytes;
|
|
93
|
+
this.currentState = 'completed';
|
|
94
|
+
this.terminal = true;
|
|
95
|
+
this.emit('completed', {
|
|
96
|
+
recordingId: created.recordingId,
|
|
97
|
+
totalBytes: result.totalBytes
|
|
98
|
+
});
|
|
99
|
+
this.releaseTerminal();
|
|
100
|
+
} catch (error) {
|
|
101
|
+
const failure = error instanceof Error ? error : new Error(String(error));
|
|
102
|
+
this.terminal = true;
|
|
103
|
+
if (/disconnect|not connected/i.test(failure.message)) {
|
|
104
|
+
this.currentState = 'disconnected';
|
|
105
|
+
this.emit('disconnected');
|
|
106
|
+
} else {
|
|
107
|
+
this.currentState = 'failed';
|
|
108
|
+
this.emit('error', failure);
|
|
109
|
+
}
|
|
110
|
+
this.releaseTerminal();
|
|
111
|
+
throw failure;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
abort() {
|
|
115
|
+
if (this.terminal) return;
|
|
116
|
+
this.terminal = true;
|
|
117
|
+
this.currentState = 'failed';
|
|
118
|
+
void this.client.streaming.abortStreaming(this.sessionId).catch(() => undefined);
|
|
119
|
+
this.releaseTerminal();
|
|
120
|
+
}
|
|
121
|
+
handleProgress(progress) {
|
|
122
|
+
const previousState = this.currentState;
|
|
123
|
+
this.currentState = progress.state;
|
|
124
|
+
this.receivedBytes = progress.bytesReceived;
|
|
125
|
+
this.uploadedChunks = progress.chunksUploaded;
|
|
126
|
+
this.emit('chunk', {
|
|
127
|
+
state: this.currentState,
|
|
128
|
+
bytesReceived: this.receivedBytes,
|
|
129
|
+
chunksUploaded: this.uploadedChunks,
|
|
130
|
+
...(this.backendRecordingId ? {
|
|
131
|
+
recordingId: this.backendRecordingId
|
|
132
|
+
} : {})
|
|
133
|
+
});
|
|
134
|
+
if (this.currentState === 'paused') this.emit('paused');
|
|
135
|
+
if (previousState === 'paused' && this.currentState === 'streaming') {
|
|
136
|
+
this.emit('resumed');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async finalize(metadata) {
|
|
140
|
+
if (!this.backendRecordingId) {
|
|
141
|
+
throw new Error('Streaming recording has not been created');
|
|
142
|
+
}
|
|
143
|
+
if (metadata.encrypted) {
|
|
144
|
+
if (!this.relay) throw new Error('Encrypted stream is missing relay metadata');
|
|
145
|
+
const response = await fetch(this.relay.finalizeUrl, {
|
|
146
|
+
method: 'POST',
|
|
147
|
+
headers: {
|
|
148
|
+
Authorization: `Bearer ${this.relay.bearerToken}`,
|
|
149
|
+
'Content-Type': 'application/json'
|
|
150
|
+
},
|
|
151
|
+
body: JSON.stringify({
|
|
152
|
+
total_chunks: metadata.totalChunks,
|
|
153
|
+
duration_ms: metadata.durationMs,
|
|
154
|
+
file_size_bytes: metadata.fileSizeBytes
|
|
155
|
+
})
|
|
156
|
+
});
|
|
157
|
+
if (!response.ok) {
|
|
158
|
+
throw new Error(`Streaming relay finalize failed (${response.status})`);
|
|
159
|
+
}
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
await this.uploadProvider.finalizeRecording(this.backendRecordingId, {
|
|
163
|
+
totalChunks: metadata.totalChunks,
|
|
164
|
+
durationMs: metadata.durationMs,
|
|
165
|
+
fileSizeBytes: metadata.fileSizeBytes
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
releaseTerminal() {
|
|
169
|
+
const handler = terminalHandlers.get(this);
|
|
170
|
+
terminalHandlers.delete(this);
|
|
171
|
+
handler?.();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.StreamingSession = StreamingSession;
|
|
175
|
+
//# sourceMappingURL=StreamingSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_eventemitter","_interopRequireDefault","require","_runtime","e","__esModule","default","terminalHandlers","WeakMap","setStreamingSessionTerminalHandler","session","handler","set","exports","createOpaqueId","replace","value","random","Math","floor","nibble","toString","StreamingSession","EventEmitter","client","getCompatibilityClient","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 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["managers/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/Device.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/Recording.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/Status.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _default = exports.default = _reactNative.TurboModuleRegistry.get('BotaDeviceSDK');
|
|
9
|
+
//# sourceMappingURL=NativeBotaDeviceSDK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","get"],"sourceRoot":"../../../src","sources":["specs/NativeBotaDeviceSDK.ts"],"mappings":";;;;;;AAEA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GA2hBpCC,gCAAmB,CAACC,GAAG,CAAO,eAAe,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.deriveSyncStatus = deriveSyncStatus;
|
|
7
|
+
/**
|
|
8
|
+
* Centralized sync-status derivation.
|
|
9
|
+
*
|
|
10
|
+
* Apps display "what's happening with the recordings on the device right now"
|
|
11
|
+
* in multiple places — sync banners, pending-recordings rows, recording detail
|
|
12
|
+
* pages, list-item subtitles. Without a shared rule set every screen tends to
|
|
13
|
+
* compute its own label from raw inputs, leading to screens that disagree
|
|
14
|
+
* (one shows "Bluetooth syncing", another shows "4G uploading").
|
|
15
|
+
*
|
|
16
|
+
* This module owns the *rules* (pure function over a typed input shape). Apps
|
|
17
|
+
* own the *subscription* (a thin hook that reads from whatever stores/queries
|
|
18
|
+
* they use and calls `deriveSyncStatus`). The label text returned here is the
|
|
19
|
+
* canonical surface — every consumer should read `label` / `shortLabel`
|
|
20
|
+
* verbatim rather than re-deriving from `kind`/`channel`.
|
|
21
|
+
*
|
|
22
|
+
* Precedence policy (when multiple signals are true simultaneously):
|
|
23
|
+
* 1. Live recording — if the device is actively recording AND streaming is
|
|
24
|
+
* enabled, show "Streaming via <channel>" regardless of pending uploads.
|
|
25
|
+
* 2. Actual device transport — if `device.syncActive` is set and a radio
|
|
26
|
+
* (WiFi / 4G) is up, the label reflects *that* transport, even if the
|
|
27
|
+
* app initiated the sync via BLE. This matches what bytes are actually
|
|
28
|
+
* moving and avoids the smart-sync handoff flicker where the app's
|
|
29
|
+
* "BLE pull" state lags the device's "4G upload" reality.
|
|
30
|
+
* 3. App-driven BLE pull — `appDriving.active` (e.g. the consumer's
|
|
31
|
+
* `useSyncAllRecordings` global) shows as "Bluetooth syncing N/M".
|
|
32
|
+
* 4. Device claims sync but no radio is up — `'waiting_channel'`, best-guess
|
|
33
|
+
* channel from `wifiAttempting` / `lteAttempting`.
|
|
34
|
+
* 5. Otherwise — `'idle'`.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Inputs to `deriveSyncStatus`. Every field is what the *consumer app* already
|
|
39
|
+
* has on hand — the SDK does not subscribe to any state itself.
|
|
40
|
+
*
|
|
41
|
+
* `appDriving` — populated from the consumer's app-level sync state (e.g. the
|
|
42
|
+
* global `isSyncing` + `syncAllProgress` exposed by their `useSyncAll*`
|
|
43
|
+
* hook). Set `active: false` if the app isn't currently pulling.
|
|
44
|
+
*
|
|
45
|
+
* `device` — flags reported by the device. For BLE-connected devices these
|
|
46
|
+
* come from `BotaClient.devices.on('statusUpdate', ...)`. For backend-only
|
|
47
|
+
* visibility (no BLE) they come from the heartbeat-derived state on the
|
|
48
|
+
* server, merged at the app layer.
|
|
49
|
+
*
|
|
50
|
+
* `bleConnected` — whether the app currently has a live BLE link to this
|
|
51
|
+
* device. Used to disambiguate `'ble_pull'` from `'4g/wifi_upload'`.
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Resolve the channel a live stream is actually using. When the device's upload
|
|
56
|
+
* preference + enabled-connection flags are known, walk the preference order and
|
|
57
|
+
* pick the first channel that is enabled AND up (BLE is always available while
|
|
58
|
+
* the link is live) — this matches the firmware/app channel-selection rule. When
|
|
59
|
+
* those inputs are absent, fall back to "first connected radio wins".
|
|
60
|
+
*/
|
|
61
|
+
function resolveStreamingChannel(device) {
|
|
62
|
+
const {
|
|
63
|
+
wifiConnected,
|
|
64
|
+
lteConnected,
|
|
65
|
+
uploadPreference,
|
|
66
|
+
enabledConnections
|
|
67
|
+
} = device;
|
|
68
|
+
if (uploadPreference && enabledConnections) {
|
|
69
|
+
for (const channel of uploadPreference) {
|
|
70
|
+
if (channel === 'ble') return 'Bluetooth';
|
|
71
|
+
if (channel === 'wifi' && enabledConnections.wifi && wifiConnected) return 'WiFi';
|
|
72
|
+
if (channel === 'cellular' && enabledConnections.cellular && lteConnected) return '4G';
|
|
73
|
+
}
|
|
74
|
+
return 'Bluetooth';
|
|
75
|
+
}
|
|
76
|
+
return wifiConnected ? 'WiFi' : lteConnected ? '4G' : 'Bluetooth';
|
|
77
|
+
}
|
|
78
|
+
const IDLE = {
|
|
79
|
+
kind: 'idle',
|
|
80
|
+
label: '',
|
|
81
|
+
shortLabel: ''
|
|
82
|
+
};
|
|
83
|
+
function progressFraction(currentIndex, total) {
|
|
84
|
+
if (currentIndex == null || total == null || total <= 0) return '';
|
|
85
|
+
return ` ${Math.min(currentIndex, total)}/${total}`;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Pure derivation: given a snapshot of app + device + link state, return the
|
|
90
|
+
* single canonical `SyncStatus`. Safe to call on every render (no I/O, no
|
|
91
|
+
* allocations beyond the return value and label strings).
|
|
92
|
+
*/
|
|
93
|
+
function deriveSyncStatus(inputs) {
|
|
94
|
+
const {
|
|
95
|
+
appDriving,
|
|
96
|
+
device,
|
|
97
|
+
bleConnected
|
|
98
|
+
} = inputs;
|
|
99
|
+
|
|
100
|
+
// 1. Live streaming wins — the user is recording right now and bytes are
|
|
101
|
+
// flowing as they're captured, not from queued files.
|
|
102
|
+
if (device.isRecording && device.streamingEnabled) {
|
|
103
|
+
const channel = resolveStreamingChannel(device);
|
|
104
|
+
return {
|
|
105
|
+
kind: 'streaming',
|
|
106
|
+
channel,
|
|
107
|
+
label: `Streaming via ${channel}`,
|
|
108
|
+
shortLabel: `Streaming (${channel})`
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// 2. Device says it's syncing AND a radio is up — trust the device's own
|
|
113
|
+
// transport. This wins over `appDriving` so smart-sync handoff (BLE
|
|
114
|
+
// trigger → device 4G upload) doesn't flicker on the label.
|
|
115
|
+
if (device.syncActive && device.wifiConnected) {
|
|
116
|
+
const frac = progressFraction(appDriving.currentIndex, appDriving.total);
|
|
117
|
+
return {
|
|
118
|
+
kind: 'wifi_upload',
|
|
119
|
+
channel: 'WiFi',
|
|
120
|
+
currentIndex: appDriving.currentIndex,
|
|
121
|
+
total: appDriving.total,
|
|
122
|
+
label: `Uploading${frac} via WiFi...`,
|
|
123
|
+
shortLabel: `WiFi uploading${frac}`
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
if (device.syncActive && device.lteConnected && !bleConnected) {
|
|
127
|
+
// When BLE is up the app is in control — see rule 3 — so we let
|
|
128
|
+
// `appDriving` take over if it's active even though LTE is also flagged.
|
|
129
|
+
const frac = progressFraction(appDriving.currentIndex, appDriving.total);
|
|
130
|
+
return {
|
|
131
|
+
kind: 'lte_upload',
|
|
132
|
+
channel: '4G',
|
|
133
|
+
currentIndex: appDriving.currentIndex,
|
|
134
|
+
total: appDriving.total,
|
|
135
|
+
label: `Uploading${frac} via 4G...`,
|
|
136
|
+
shortLabel: `4G uploading${frac}`
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// 3. App-driven BLE pull.
|
|
141
|
+
if (appDriving.active) {
|
|
142
|
+
const frac = progressFraction(appDriving.currentIndex, appDriving.total);
|
|
143
|
+
return {
|
|
144
|
+
kind: 'ble_pull',
|
|
145
|
+
channel: 'Bluetooth',
|
|
146
|
+
currentIndex: appDriving.currentIndex,
|
|
147
|
+
total: appDriving.total,
|
|
148
|
+
label: `Syncing${frac} via Bluetooth...`,
|
|
149
|
+
shortLabel: `Bluetooth syncing${frac}`
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// 4. Device says it's syncing but no radio is up yet — typically a 4G
|
|
154
|
+
// cold-start (PDP attach in progress) or WiFi reconnect.
|
|
155
|
+
if (device.syncActive) {
|
|
156
|
+
const guess = device.wifiAttempting ? 'WiFi' : device.lteAttempting ? '4G' : undefined;
|
|
157
|
+
if (guess) {
|
|
158
|
+
const frac = progressFraction(appDriving.currentIndex, appDriving.total);
|
|
159
|
+
return {
|
|
160
|
+
kind: 'waiting_channel',
|
|
161
|
+
channel: guess,
|
|
162
|
+
currentIndex: appDriving.currentIndex,
|
|
163
|
+
total: appDriving.total,
|
|
164
|
+
label: `Uploading${frac} via ${guess}...`,
|
|
165
|
+
shortLabel: `${guess} uploading${frac}`
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
kind: 'waiting_channel',
|
|
170
|
+
label: 'Waiting for upload channel...',
|
|
171
|
+
shortLabel: 'Waiting for channel'
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// 5. Idle.
|
|
176
|
+
return IDLE;
|
|
177
|
+
}
|
|
178
|
+
//# 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":[]}
|