@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","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 @@
|
|
|
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
|
+
{"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":";;AAAA;AACA;AACA;;AAEA,SAASA,iCAAiC,QAAQ,kBAAkB;;AAEpE;AACA;AACA;AACA,OAAO,MAAMC,SAAS,SAASC,KAAK,CAAC;EACnCC,WAAWA,CACTC,OAAe,EACCC,IAAY,EACZC,KAAa,EAC7B;IACA,KAAK,CAACF,OAAO,CAAC;IAAC,KAHCC,IAAY,GAAZA,IAAY;IAAA,KACZC,KAAa,GAAbA,KAAa;IAG7B,IAAI,CAACC,IAAI,GAAG,WAAW;IACvBC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAER,SAAS,CAACS,SAAS,CAAC;EAClD;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,SAASV,SAAS,CAAC;EAC5CE,WAAWA,CAACC,OAAe,EAAEC,IAAY,EAAEC,KAAa,EAAE;IACxD,KAAK,CAACF,OAAO,EAAEC,IAAI,EAAEC,KAAK,CAAC;IAC3B,IAAI,CAACC,IAAI,GAAG,gBAAgB;IAC5BC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEE,cAAc,CAACD,SAAS,CAAC;EACvD;EAEA,OAAOE,WAAWA,CAAA,EAAmB;IACnC,OAAO,IAAID,cAAc,CACvB,2CAA2C,EAC3C,uBACF,CAAC;EACH;EAEA,OAAOE,YAAYA,CAAA,EAAmB;IACpC,OAAO,IAAIF,cAAc,CACvB,kCAAkC,EAClC,wBACF,CAAC;EACH;EAEA,OAAOG,UAAUA,CAAA,EAAmB;IAClC,OAAO,IAAIH,cAAc,CAAC,0BAA0B,EAAE,eAAe,CAAC;EACxE;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMI,WAAW,SAASd,SAAS,CAAC;EACzCE,WAAWA,CACTC,OAAe,EACfC,IAAY,EACIW,QAAiB,EACjCV,KAAa,EACb;IACA,KAAK,CAACF,OAAO,EAAEC,IAAI,EAAEC,KAAK,CAAC;IAAC,KAHZU,QAAiB,GAAjBA,QAAiB;IAIjC,IAAI,CAACT,IAAI,GAAG,aAAa;IACzBC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEM,WAAW,CAACL,SAAS,CAAC;EACpD;EAEA,OAAOO,QAAQA,CAACD,QAAgB,EAAe;IAC7C,OAAO,IAAID,WAAW,CACpB,UAAUC,QAAQ,YAAY,EAC9B,kBAAkB,EAClBA,QACF,CAAC;EACH;EAEA,OAAOE,gBAAgBA,CAACF,QAAgB,EAAEV,KAAa,EAAe;IACpE,OAAO,IAAIS,WAAW,CACpB,+BAA+BC,QAAQ,EAAE,EACzC,mBAAmB,EACnBA,QAAQ,EACRV,KACF,CAAC;EACH;EAEA,OAAOa,cAAcA,CAACH,QAAgB,EAAEI,MAAe,EAAe;IACpE,MAAMhB,OAAO,GAAGgB,MAAM,GAClB,wBAAwBJ,QAAQ,gBAAgBI,MAAM,EAAE,GACxD,wBAAwBJ,QAAQ,OAAO;IAC3C,OAAO,IAAID,WAAW,CAACX,OAAO,EAAE,iBAAiB,EAAEY,QAAQ,CAAC;EAC9D;EAEA,OAAOK,aAAaA,CAACL,QAAgB,EAAEV,KAAa,EAAe;IACjE,OAAO,IAAIS,WAAW,CACpB,6BAA6BC,QAAQ,EAAE,EACvC,gBAAgB,EAChBA,QAAQ,EACRV,KACF,CAAC;EACH;EAEA,OAAOgB,YAAYA,CAACN,QAAgB,EAAe;IACjD,OAAO,IAAID,WAAW,CACpB,UAAUC,QAAQ,mBAAmB,EACrC,eAAe,EACfA,QACF,CAAC;EACH;EAEA,OAAOO,gBAAgBA,CAACP,QAAgB,EAAe;IACrD,OAAO,IAAID,WAAW,CACpB,UAAUC,QAAQ,uBAAuB,EACzC,mBAAmB,EACnBA,QACF,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMQ,iBAAiB,SAASvB,SAAS,CAAC;EAC/CE,WAAWA,CACTC,OAAe,EACfC,IAAY,EACIW,QAAiB,EACjCV,KAAa,EACb;IACA,KAAK,CAACF,OAAO,EAAEC,IAAI,EAAEC,KAAK,CAAC;IAAC,KAHZU,QAAiB,GAAjBA,QAAiB;IAIjC,IAAI,CAACT,IAAI,GAAG,mBAAmB;IAC/BC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEe,iBAAiB,CAACd,SAAS,CAAC;EAC1D;EAEA,OAAOe,YAAYA,CAACT,QAAgB,EAAqB;IACvD,OAAO,IAAIQ,iBAAiB,CAC1B,sCAAsC,EACtC,eAAe,EACfR,QACF,CAAC;EACH;EAEA,OAAOU,YAAYA,CAACV,QAAgB,EAAqB;IACvD,OAAO,IAAIQ,iBAAiB,CAC1B,kCAAkC,EAClC,eAAe,EACfR,QACF,CAAC;EACH;EAEA,OAAOW,UAAUA,CAACX,QAAgB,EAAqB;IACrD,OAAO,IAAIQ,iBAAiB,CAC1B,6BAA6B,EAC7B,aAAa,EACbR,QACF,CAAC;EACH;EAEA,OAAOY,kBAAkBA,CAACZ,QAAgB,EAAqB;IAC7D,OAAO,IAAIQ,iBAAiB,CAC1B,+BAA+B,EAC/B,qBAAqB,EACrBR,QACF,CAAC;EACH;EAEA,OAAOa,aAAaA,CAACb,QAAgB,EAAqB;IACxD,OAAO,IAAIQ,iBAAiB,CAC1B,oGAAoG,EACpG,gBAAgB,EAChBR,QACF,CAAC;EACH;EAEA,OAAOc,OAAOA,CAACd,QAAgB,EAAqB;IAClD,OAAO,IAAIQ,iBAAiB,CAC1B,oDAAoD,EACpD,sBAAsB,EACtBR,QACF,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMe,aAAa,SAAS9B,SAAS,CAAC;EAC3CE,WAAWA,CACTC,OAAe,EACfC,IAAY,EACI2B,aAAsB,EACtC1B,KAAa,EACb;IACA,KAAK,CAACF,OAAO,EAAEC,IAAI,EAAEC,KAAK,CAAC;IAAC,KAHZ0B,aAAsB,GAAtBA,aAAsB;IAItC,IAAI,CAACzB,IAAI,GAAG,eAAe;IAC3BC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEsB,aAAa,CAACrB,SAAS,CAAC;EACtD;EAEA,OAAOuB,iBAAiBA,CAACC,IAAY,EAAiB;IACpD,OAAO,IAAIH,aAAa,CACtB,aAAaG,IAAI,sBAAsB,EACvC,qBAAqB,EACrBA,IACF,CAAC;EACH;EAEA,OAAOC,gBAAgBA,CAACD,IAAY,EAAiB;IACnD,OAAO,IAAIH,aAAa,CACtB,mCAAmCG,IAAI,EAAE,EACzC,mBAAmB,EACnBA,IACF,CAAC;EACH;EAEA,OAAOE,WAAWA,CAACF,IAAY,EAAE5B,KAAa,EAAiB;IAC7D,OAAO,IAAIyB,aAAa,CACtB,sCAAsCG,IAAI,EAAE,EAC5C,sBAAsB,EACtBA,IAAI,EACJ5B,KACF,CAAC;EACH;EAEA,OAAOwB,OAAOA,CAACI,IAAY,EAAiB;IAC1C,OAAO,IAAIH,aAAa,CACtB,oCAAoCG,IAAI,EAAE,EAC1C,kBAAkB,EAClBA,IACF,CAAC;EACH;EAEA,OAAOG,WAAWA,CAACH,IAAY,EAAEI,SAAiB,EAAiB;IACjE,IAAIA,SAAS,KAAKtC,iCAAiC,EAAE;MACnD,OAAO,IAAI+B,aAAa,CACtB,aAAaG,IAAI,oDAAoD,EACrE,yBAAyB,EACzBA,IACF,CAAC;IACH;IACA,OAAO,IAAIH,aAAa,CACtB,uBAAuBO,SAAS,wBAAwBJ,IAAI,EAAE,EAC9D,cAAc,EACdA,IACF,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMK,WAAW,SAAStC,SAAS,CAAC;EACzCE,WAAWA,CACTC,OAAe,EACfC,IAAY,EACImC,MAAe,EAC/BlC,KAAa,EACb;IACA,KAAK,CAACF,OAAO,EAAEC,IAAI,EAAEC,KAAK,CAAC;IAAC,KAHZkC,MAAe,GAAfA,MAAe;IAI/B,IAAI,CAACjC,IAAI,GAAG,aAAa;IACzBC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAE8B,WAAW,CAAC7B,SAAS,CAAC;EACpD;EAEA,OAAO+B,UAAUA,CAACD,MAAc,EAAe;IAC7C,OAAO,IAAID,WAAW,CACpB,wBAAwB,EACxB,aAAa,EACbC,MACF,CAAC;EACH;EAEA,OAAOE,kBAAkBA,CAAA,EAAgB;IACvC,OAAO,IAAIH,WAAW,CACpB,0BAA0B,EAC1B,qBACF,CAAC;EACH;EAEA,OAAOI,YAAYA,CAACH,MAAc,EAAElC,KAAa,EAAe;IAC9D,OAAO,IAAIiC,WAAW,CACpB,0BAA0BC,MAAM,EAAE,EAClC,eAAe,EACfA,MAAM,EACNlC,KACF,CAAC;EACH;EAEA,OAAOsC,gBAAgBA,CAACJ,MAAc,EAAElC,KAAa,EAAe;IAClE,OAAO,IAAIiC,WAAW,CACpB,wCAAwCC,MAAM,EAAE,EAChD,mBAAmB,EACnBA,MAAM,EACNlC,KACF,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMuC,QAAQ,SAAS5C,SAAS,CAAC;EACtCE,WAAWA,CAACC,OAAe,EAAEC,IAAY,EAAEC,KAAa,EAAE;IACxD,KAAK,CAACF,OAAO,EAAEC,IAAI,EAAEC,KAAK,CAAC;IAC3B,IAAI,CAACC,IAAI,GAAG,UAAU;IACtBC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEoC,QAAQ,CAACnC,SAAS,CAAC;EACjD;EAEA,OAAOoC,cAAcA,CAAA,EAAa;IAChC,OAAO,IAAID,QAAQ,CACjB,kEAAkE,EAClE,iBACF,CAAC;EACH;EAEA,OAAOE,YAAYA,CAACC,QAAgB,EAAEC,MAAc,EAAY;IAC9D,OAAO,IAAIJ,QAAQ,CACjB,2BAA2BG,QAAQ,SAASC,MAAM,EAAE,EACpD,eACF,CAAC;EACH;EAEA,OAAOnB,OAAOA,CAACoB,SAAiB,EAAY;IAC1C,OAAO,IAAIL,QAAQ,CAAC,wBAAwBK,SAAS,EAAE,EAAE,SAAS,CAAC;EACrE;AACF;;AAEA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAACC,KAAc,EAAsB;EAC9D,OAAOA,KAAK,YAAYnD,SAAS;AACnC","ignoreList":[]}
|