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

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 (125) hide show
  1. package/README.md +104 -3
  2. package/android/build.gradle +1 -0
  3. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidDevices.kt +22 -0
  4. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidDiagnostics.kt +53 -0
  5. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLogs.kt +16 -0
  6. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingUploads.kt +144 -14
  7. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordings.kt +150 -29
  8. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKEncryptedUploadV2Materials.kt +27 -0
  9. package/android/src/main/java/dev/bota/sdk/reactnative/BotaDeviceSDKModule.kt +86 -3
  10. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidDevicesTest.kt +35 -0
  11. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidLogsTest.kt +33 -0
  12. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingUploadsTest.kt +135 -6
  13. package/android/src/test/java/dev/bota/sdk/reactnative/BotaDeviceSDKAndroidRecordingsTest.kt +236 -10
  14. package/generated/codegen-contract.json +568 -8
  15. package/ios/BotaDeviceSDK.mm +114 -0
  16. package/ios/BotaDeviceSDKAppleBridge.swift +141 -4
  17. package/ios/BotaDeviceSDKAppleDevices.swift +11 -0
  18. package/ios/BotaDeviceSDKAppleDiagnostics.swift +40 -0
  19. package/ios/BotaDeviceSDKAppleLogs.swift +18 -0
  20. package/ios/BotaDeviceSDKAppleRecordingUploads.swift +138 -6
  21. package/ios/BotaDeviceSDKAppleRecordings.swift +113 -5
  22. package/ios/BotaDeviceSDKEncryptedUploadV2Materials.swift +40 -0
  23. package/lib/commonjs/BotaClient.js +16 -2
  24. package/lib/commonjs/BotaClient.js.map +1 -1
  25. package/lib/commonjs/ble/constants.js +5 -1
  26. package/lib/commonjs/ble/constants.js.map +1 -1
  27. package/lib/commonjs/ble/deviceDiagnostics.js +240 -0
  28. package/lib/commonjs/ble/deviceDiagnostics.js.map +1 -0
  29. package/lib/commonjs/client.js +183 -28
  30. package/lib/commonjs/client.js.map +1 -1
  31. package/lib/commonjs/clientPresence.js +26 -0
  32. package/lib/commonjs/clientPresence.js.map +1 -0
  33. package/lib/commonjs/index.js +29 -0
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/commonjs/managers/DeviceManager.js +23 -0
  36. package/lib/commonjs/managers/DeviceManager.js.map +1 -1
  37. package/lib/commonjs/managers/NativeUploadQueue.js +386 -0
  38. package/lib/commonjs/managers/NativeUploadQueue.js.map +1 -0
  39. package/lib/commonjs/managers/RecordingManager.js +83 -102
  40. package/lib/commonjs/managers/RecordingManager.js.map +1 -1
  41. package/lib/commonjs/managers/uploadRecoveryMetadata.js +83 -0
  42. package/lib/commonjs/managers/uploadRecoveryMetadata.js.map +1 -0
  43. package/lib/commonjs/sdkIdentity.js +10 -0
  44. package/lib/commonjs/sdkIdentity.js.map +1 -0
  45. package/lib/commonjs/specs/NativeBotaDeviceSDK.js.map +1 -1
  46. package/lib/commonjs/uploadRecovery.js +68 -0
  47. package/lib/commonjs/uploadRecovery.js.map +1 -0
  48. package/lib/module/BotaClient.js +16 -2
  49. package/lib/module/BotaClient.js.map +1 -1
  50. package/lib/module/ble/constants.js +4 -0
  51. package/lib/module/ble/constants.js.map +1 -1
  52. package/lib/module/ble/deviceDiagnostics.js +234 -0
  53. package/lib/module/ble/deviceDiagnostics.js.map +1 -0
  54. package/lib/module/client.js +183 -28
  55. package/lib/module/client.js.map +1 -1
  56. package/lib/module/clientPresence.js +22 -0
  57. package/lib/module/clientPresence.js.map +1 -0
  58. package/lib/module/index.js +4 -0
  59. package/lib/module/index.js.map +1 -1
  60. package/lib/module/managers/DeviceManager.js +23 -0
  61. package/lib/module/managers/DeviceManager.js.map +1 -1
  62. package/lib/module/managers/NativeUploadQueue.js +380 -0
  63. package/lib/module/managers/NativeUploadQueue.js.map +1 -0
  64. package/lib/module/managers/RecordingManager.js +83 -102
  65. package/lib/module/managers/RecordingManager.js.map +1 -1
  66. package/lib/module/managers/uploadRecoveryMetadata.js +77 -0
  67. package/lib/module/managers/uploadRecoveryMetadata.js.map +1 -0
  68. package/lib/module/sdkIdentity.js +6 -0
  69. package/lib/module/sdkIdentity.js.map +1 -0
  70. package/lib/module/specs/NativeBotaDeviceSDK.js.map +1 -1
  71. package/lib/module/uploadRecovery.js +64 -0
  72. package/lib/module/uploadRecovery.js.map +1 -0
  73. package/lib/typescript/BotaClient.d.ts +2 -0
  74. package/lib/typescript/BotaClient.d.ts.map +1 -1
  75. package/lib/typescript/ble/constants.d.ts +4 -0
  76. package/lib/typescript/ble/constants.d.ts.map +1 -1
  77. package/lib/typescript/ble/deviceDiagnostics.d.ts +10 -0
  78. package/lib/typescript/ble/deviceDiagnostics.d.ts.map +1 -0
  79. package/lib/typescript/client.d.ts +24 -3
  80. package/lib/typescript/client.d.ts.map +1 -1
  81. package/lib/typescript/clientPresence.d.ts +26 -0
  82. package/lib/typescript/clientPresence.d.ts.map +1 -0
  83. package/lib/typescript/index.d.ts +10 -4
  84. package/lib/typescript/index.d.ts.map +1 -1
  85. package/lib/typescript/managers/DeviceManager.d.ts +5 -1
  86. package/lib/typescript/managers/DeviceManager.d.ts.map +1 -1
  87. package/lib/typescript/managers/NativeUploadQueue.d.ts +41 -0
  88. package/lib/typescript/managers/NativeUploadQueue.d.ts.map +1 -0
  89. package/lib/typescript/managers/RecordingManager.d.ts +3 -8
  90. package/lib/typescript/managers/RecordingManager.d.ts.map +1 -1
  91. package/lib/typescript/managers/types.d.ts +6 -1
  92. package/lib/typescript/managers/types.d.ts.map +1 -1
  93. package/lib/typescript/managers/uploadRecoveryMetadata.d.ts +6 -0
  94. package/lib/typescript/managers/uploadRecoveryMetadata.d.ts.map +1 -0
  95. package/lib/typescript/models/Device.d.ts +42 -0
  96. package/lib/typescript/models/Device.d.ts.map +1 -1
  97. package/lib/typescript/models/Recording.d.ts +47 -0
  98. package/lib/typescript/models/Recording.d.ts.map +1 -1
  99. package/lib/typescript/models/Status.d.ts +5 -1
  100. package/lib/typescript/models/Status.d.ts.map +1 -1
  101. package/lib/typescript/sdkIdentity.d.ts +3 -0
  102. package/lib/typescript/sdkIdentity.d.ts.map +1 -0
  103. package/lib/typescript/specs/NativeBotaDeviceSDK.d.ts +70 -0
  104. package/lib/typescript/specs/NativeBotaDeviceSDK.d.ts.map +1 -1
  105. package/lib/typescript/uploadRecovery.d.ts +27 -0
  106. package/lib/typescript/uploadRecovery.d.ts.map +1 -0
  107. package/package.json +1 -1
  108. package/scripts/bota_device_sdk_spm_workaround.rb +26 -15
  109. package/src/BotaClient.ts +17 -3
  110. package/src/ble/constants.ts +5 -0
  111. package/src/ble/deviceDiagnostics.ts +238 -0
  112. package/src/client.ts +189 -18
  113. package/src/clientPresence.ts +33 -0
  114. package/src/index.ts +18 -0
  115. package/src/managers/DeviceManager.ts +23 -0
  116. package/src/managers/NativeUploadQueue.ts +330 -0
  117. package/src/managers/RecordingManager.ts +83 -116
  118. package/src/managers/types.ts +7 -1
  119. package/src/managers/uploadRecoveryMetadata.ts +59 -0
  120. package/src/models/Device.ts +43 -0
  121. package/src/models/Recording.ts +52 -0
  122. package/src/models/Status.ts +5 -1
  123. package/src/sdkIdentity.ts +3 -0
  124. package/src/specs/NativeBotaDeviceSDK.ts +66 -0
  125. package/src/uploadRecovery.ts +66 -0
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NativeUploadQueue = void 0;
7
+ var _eventemitter = _interopRequireDefault(require("eventemitter3"));
8
+ var _uploadRecoveryMetadata = require("./uploadRecoveryMetadata");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const journalOperations = new WeakMap();
11
+ const journalOwners = new WeakMap();
12
+ const retryDelays = [30_000, 120_000, 600_000, 3_600_000, 14_400_000];
13
+ const cancelled = () => new Error('Upload cancelled');
14
+ const dispose = info => {
15
+ try {
16
+ info?.dispose?.();
17
+ } catch {/* Cleanup cannot change an acknowledged result. */}
18
+ };
19
+ /** Races application callbacks, not native teardown. Late credentials still release their lease. */
20
+ const abortable = (promise, signal, late) => new Promise((resolve, reject) => {
21
+ let settled = false;
22
+ const abort = () => {
23
+ if (!settled) {
24
+ settled = true;
25
+ reject(cancelled());
26
+ }
27
+ };
28
+ signal.addEventListener('abort', abort, {
29
+ once: true
30
+ });
31
+ if (signal.aborted) abort();
32
+ void promise.then(value => {
33
+ signal.removeEventListener('abort', abort);
34
+ if (settled) {
35
+ late?.(value);
36
+ return;
37
+ }
38
+ settled = true;
39
+ resolve(value);
40
+ }, error => {
41
+ signal.removeEventListener('abort', abort);
42
+ if (!settled) {
43
+ settled = true;
44
+ reject(error);
45
+ }
46
+ });
47
+ });
48
+
49
+ /** Only metadata crosses this owner. Native hosts retain and upload every byte. */
50
+ class NativeUploadQueue extends _eventemitter.default {
51
+ tasks = [];
52
+ active = new Map();
53
+ credentials = new Map();
54
+ cancelledTasks = new Set();
55
+ paused = false;
56
+ destroyed = false;
57
+ initialized = false;
58
+ constructor(client, provider) {
59
+ super();
60
+ this.client = client;
61
+ this.provider = provider;
62
+ }
63
+ initialize() {
64
+ if (this.initialization) return this.initialization;
65
+ if (this.destroyed) return Promise.reject(cancelled());
66
+ const owner = journalOwners.get(this.client);
67
+ if (owner && owner !== this) return Promise.reject(new Error('Upload recovery journal is already owned by another RecordingManager'));
68
+ journalOwners.set(this.client, this);
69
+ this.initialization = this.serialize(async () => {
70
+ this.checkAlive();
71
+ const loaded = await this.client.loadUploadQueue();
72
+ this.checkAlive();
73
+ const restored = (0, _uploadRecoveryMetadata.restoreUploadQueue)(loaded);
74
+ if (restored.length > 0) await this.client.saveUploadQueue(restored);
75
+ this.checkAlive();
76
+ this.tasks = restored;
77
+ this.initialized = true;
78
+ }).then(() => {
79
+ for (const task of this.tasks.filter(value => value.status === 'completed')) {
80
+ void this.release(task).catch(() => undefined);
81
+ }
82
+ this.schedule();
83
+ }).catch(error => {
84
+ if (journalOwners.get(this.client) === this) journalOwners.delete(this.client);
85
+ throw error;
86
+ });
87
+ return this.initialization;
88
+ }
89
+ all() {
90
+ return this.tasks.map(task => ({
91
+ ...task,
92
+ createdAt: new Date(task.createdAt),
93
+ updatedAt: new Date(task.updatedAt)
94
+ }));
95
+ }
96
+ get(id) {
97
+ return this.all().find(task => task.id === id);
98
+ }
99
+ async add(task, info) {
100
+ await this.mutate(tasks => [...tasks, ...(0, _uploadRecoveryMetadata.persistedUploadQueue)([task])]);
101
+ this.credentials.set(task.id, info);
102
+ }
103
+ offerCredentials(id, info) {
104
+ if (this.active.has(id) || this.get(id)?.status === 'completed' || this.paused) return false;
105
+ this.discardCredentials(id);
106
+ this.credentials.set(id, info);
107
+ return true;
108
+ }
109
+ async update(id, patch, check) {
110
+ await this.mutate(tasks => {
111
+ check?.();
112
+ if (!tasks.some(task => task.id === id) || this.cancelledTasks.has(id)) throw cancelled();
113
+ return tasks.map(task => task.id === id ? {
114
+ ...task,
115
+ ...patch,
116
+ updatedAt: new Date()
117
+ } : task);
118
+ });
119
+ const info = this.credentials.get(id);
120
+ if (info && patch.relayUpload === false) this.credentials.set(id, {
121
+ ...info,
122
+ relay: undefined
123
+ });
124
+ }
125
+ run(id, onProgress) {
126
+ if (this.active.has(id)) return this.active.get(id).promise;
127
+ if (this.get(id)?.status === 'completed') return Promise.resolve();
128
+ if (this.paused || this.destroyed || this.cancelledTasks.has(id)) return Promise.reject(cancelled());
129
+ const attempt = {
130
+ controller: new AbortController(),
131
+ nativeId: `${id}_${Date.now()}_${Math.random().toString(36).slice(2)}`,
132
+ promise: Promise.resolve()
133
+ };
134
+ this.active.set(id, attempt);
135
+ attempt.promise = this.perform(id, attempt, onProgress).finally(() => {
136
+ if (this.active.get(id) === attempt) this.active.delete(id);
137
+ this.schedule();
138
+ });
139
+ return attempt.promise;
140
+ }
141
+ async perform(id, attempt, onProgress) {
142
+ const signal = attempt.controller.signal;
143
+ const check = () => {
144
+ if (this.destroyed || signal.aborted || this.cancelledTasks.has(id) || !this.get(id) || this.active.get(id) !== attempt) throw cancelled();
145
+ };
146
+ let info;
147
+ let hostAbort;
148
+ let initialSignal;
149
+ const initialAbort = () => attempt.controller.abort();
150
+ let nativeStarted = false;
151
+ let nativeCancellation;
152
+ const cancelNative = () => {
153
+ if (nativeStarted && !nativeCancellation) {
154
+ nativeCancellation = this.client.cancelRecordingUpload(attempt.nativeId);
155
+ void nativeCancellation.catch(() => undefined);
156
+ }
157
+ };
158
+ signal.addEventListener('abort', cancelNative);
159
+ try {
160
+ check();
161
+ const task = this.get(id);
162
+ info = this.credentials.get(id);
163
+ this.credentials.delete(id);
164
+ initialSignal = info?.signal;
165
+ initialSignal?.addEventListener('abort', initialAbort, {
166
+ once: true
167
+ });
168
+ if (initialSignal?.aborted) initialAbort();
169
+ check();
170
+ if (info?.expiresAt && info.expiresAt.getTime() <= Date.now() && !info.alreadyUploaded && this.provider && !info.signal?.aborted) {
171
+ dispose(info);
172
+ info = undefined;
173
+ }
174
+ if (!info) {
175
+ if (!this.provider || !task.recordingUuid) throw new Error('Upload recovery requires a provider and recordingUuid');
176
+ info = await abortable(Promise.resolve().then(() => {
177
+ check();
178
+ return this.provider({
179
+ taskId: id,
180
+ recordingId: task.recordingId,
181
+ deviceId: task.deviceId,
182
+ recordingUuid: task.recordingUuid,
183
+ recoveryScope: task.recoveryScope,
184
+ fileSizeBytes: task.fileSizeBytes,
185
+ relayUpload: !!task.relayUpload,
186
+ contentType: task.contentType,
187
+ contentSha256: task.contentSha256,
188
+ signal
189
+ });
190
+ }), signal, dispose);
191
+ }
192
+ check();
193
+ if (!info) {
194
+ await this.update(id, {
195
+ status: 'pending',
196
+ nextAttemptAt: Date.now() + 30_000
197
+ }, check);
198
+ throw new Error('Upload waiting for its original account');
199
+ }
200
+ if (info.recordingId !== task.recordingId || info.recoveryScope !== task.recoveryScope) {
201
+ throw new Error('Upload recovery identity changed');
202
+ }
203
+ if (!info.alreadyUploaded && !!info.relay !== !!task.relayUpload) throw new Error('Upload recovery route changed');
204
+ hostAbort = () => attempt.controller.abort();
205
+ info.signal?.addEventListener('abort', hostAbort, {
206
+ once: true
207
+ });
208
+ if (info.signal?.aborted) hostAbort();
209
+ check();
210
+ if (info.expiresAt && info.expiresAt.getTime() <= Date.now() && !info.alreadyUploaded) throw new Error('Upload credentials expired');
211
+ await this.update(id, {
212
+ status: 'uploading',
213
+ errorMessage: undefined,
214
+ nextAttemptAt: undefined
215
+ }, check);
216
+ check();
217
+ this.emit('uploadStarted', id);
218
+ check();
219
+ if (!info.alreadyUploaded) {
220
+ nativeStarted = true;
221
+ await this.client.uploadRecordingFile({
222
+ ...task,
223
+ id: attempt.nativeId,
224
+ uploadUrl: info.uploadUrl,
225
+ contentType: info.contentType ?? task.contentType,
226
+ uploadToken: info.complete ? undefined : info.uploadToken,
227
+ completeUrl: info.complete ? undefined : info.completeUrl,
228
+ relay: info.relay
229
+ }, value => {
230
+ try {
231
+ check();
232
+ } catch {
233
+ return;
234
+ }
235
+ onProgress?.(value);
236
+ this.emit('uploadProgress', id, value.totalBytes > 0 ? Math.min(value.completedBytes / value.totalBytes, 1) : 0);
237
+ });
238
+ check();
239
+ }
240
+ if (info.complete) {
241
+ if (task.fileSizeBytes === undefined) throw new Error('Upload completion requires known file size');
242
+ await abortable(Promise.resolve().then(() => {
243
+ check();
244
+ return info.complete({
245
+ fileSizeBytes: task.fileSizeBytes,
246
+ contentSha256: task.contentSha256,
247
+ signal
248
+ });
249
+ }), signal);
250
+ } else if (info.alreadyUploaded || this.provider && !info.relay && !(info.completeUrl && info.uploadToken)) {
251
+ throw new Error('Recoverable upload requires durable host completion acknowledgement');
252
+ }
253
+ check();
254
+ await this.update(id, {
255
+ status: 'completed',
256
+ errorMessage: undefined,
257
+ nextAttemptAt: undefined
258
+ }, check);
259
+ check();
260
+ await this.release(this.get(id)).catch(() => undefined);
261
+ check();
262
+ this.emit('uploadCompleted', id, task.recordingId);
263
+ } catch (error) {
264
+ if (!this.destroyed && !this.cancelledTasks.has(id) && this.get(id)?.status !== 'completed') {
265
+ const task = this.get(id);
266
+ const parked = info === null || signal.aborted;
267
+ const retry = !!this.provider && task.retryCount < 6 && Date.now() - task.createdAt.getTime() < 86_400_000;
268
+ await this.update(id, {
269
+ status: parked || retry ? 'pending' : 'failed',
270
+ retryCount: task.retryCount + (parked ? 0 : 1),
271
+ nextAttemptAt: parked ? Date.now() + 30_000 : retry ? Date.now() + retryDelays[Math.min(task.retryCount, 4)] : undefined,
272
+ errorMessage: parked ? 'Upload waiting for its original account' : 'Upload attempt failed'
273
+ }).catch(() => {
274
+ this.pause();
275
+ });
276
+ if (!this.destroyed) this.emit('uploadFailed', id, new Error(parked ? 'Upload paused' : 'Upload attempt failed'));
277
+ }
278
+ throw error;
279
+ } finally {
280
+ signal.removeEventListener('abort', cancelNative);
281
+ initialSignal?.removeEventListener('abort', initialAbort);
282
+ if (hostAbort) info?.signal?.removeEventListener('abort', hostAbort);
283
+ // Credential-only legacy callers can explicitly retry during this process.
284
+ if (!this.provider && info && !info.dispose && !info.signal && !this.destroyed && !this.cancelledTasks.has(id) && this.get(id)?.status !== 'completed') this.credentials.set(id, info);
285
+ dispose(info);
286
+ await nativeCancellation?.catch(() => {
287
+ this.pause();
288
+ });
289
+ }
290
+ }
291
+ async release(task) {
292
+ this.checkAlive();
293
+ await this.client.releaseRecordingFile(task.id, task.localPath);
294
+ }
295
+ async cancel(id) {
296
+ this.cancelledTasks.add(id);
297
+ const active = this.active.get(id);
298
+ active?.controller.abort();
299
+ this.discardCredentials(id);
300
+ if (!active) await this.client.cancelRecordingUpload(id);
301
+ await this.mutate(tasks => tasks.filter(task => task.id !== id));
302
+ }
303
+ discardCredentials(id) {
304
+ const credential = this.credentials.get(id);
305
+ this.credentials.delete(id);
306
+ dispose(credential);
307
+ }
308
+ async clearCompleted() {
309
+ const snapshot = this.all().filter(value => value.status === 'completed');
310
+ for (const task of snapshot) await this.release(task);
311
+ await this.mutate(tasks => tasks.filter(task => !snapshot.some(released => task.status === 'completed' && task.id === released.id && task.localPath === released.localPath && task.recordingId === released.recordingId && task.deviceId === released.deviceId && task.recordingUuid === released.recordingUuid && task.recoveryScope === released.recoveryScope)));
312
+ }
313
+ async clearAll() {
314
+ for (const task of this.all()) await this.cancel(task.id);
315
+ }
316
+ async retryFailed() {
317
+ const retry = this.all().filter(task => (task.status === 'failed' || task.status === 'pending' && task.nextAttemptAt) && !this.active.has(task.id) && !!task.localPath);
318
+ for (const task of retry) await this.update(task.id, {
319
+ status: 'pending',
320
+ retryCount: 0,
321
+ nextAttemptAt: undefined,
322
+ createdAt: new Date()
323
+ });
324
+ if (!this.paused) for (const task of retry) await this.run(task.id).catch(() => undefined);
325
+ }
326
+ pause() {
327
+ this.paused = true;
328
+ if (this.timer) clearTimeout(this.timer);
329
+ }
330
+ resume() {
331
+ this.checkAlive();
332
+ this.paused = false;
333
+ this.schedule();
334
+ }
335
+ destroy() {
336
+ if (this.destroyed) return;
337
+ this.destroyed = true;
338
+ if (journalOwners.get(this.client) === this) {
339
+ // New owners must read only after old persistence and native stop have settled.
340
+ const stopped = this.client.destroyCompatibilityOperations();
341
+ void stopped.catch(() => undefined);
342
+ void this.serialize(() => stopped).catch(() => undefined);
343
+ journalOwners.delete(this.client);
344
+ }
345
+ this.pause();
346
+ for (const attempt of this.active.values()) attempt.controller.abort();
347
+ for (const info of this.credentials.values()) dispose(info);
348
+ this.credentials.clear();
349
+ this.removeAllListeners();
350
+ }
351
+ schedule() {
352
+ if (!this.initialized || this.destroyed || this.paused) return;
353
+ if (this.timer) clearTimeout(this.timer);
354
+ let wake = Infinity;
355
+ for (const task of this.tasks) {
356
+ if (task.status !== 'pending' || !task.localPath || this.active.has(task.id) || this.cancelledTasks.has(task.id) || !this.provider && !this.credentials.has(task.id)) continue;
357
+ if ((task.nextAttemptAt ?? 0) > Date.now()) {
358
+ wake = Math.min(wake, task.nextAttemptAt);
359
+ continue;
360
+ }
361
+ if (this.active.size >= 2) continue;
362
+ void this.run(task.id).catch(() => undefined);
363
+ }
364
+ if (Number.isFinite(wake)) this.timer = setTimeout(() => this.schedule(), Math.max(1, wake - Date.now()));
365
+ }
366
+ serialize(operation) {
367
+ const next = (journalOperations.get(this.client) ?? Promise.resolve()).catch(() => undefined).then(operation);
368
+ journalOperations.set(this.client, next.catch(() => undefined));
369
+ return next;
370
+ }
371
+ mutate(change) {
372
+ return this.serialize(async () => {
373
+ this.checkAlive();
374
+ const next = change(this.tasks);
375
+ await this.client.saveUploadQueue((0, _uploadRecoveryMetadata.persistedUploadQueue)(next));
376
+ this.checkAlive();
377
+ this.tasks = next;
378
+ this.emit('queueUpdated', this.all());
379
+ });
380
+ }
381
+ checkAlive() {
382
+ if (this.destroyed) throw cancelled();
383
+ }
384
+ }
385
+ exports.NativeUploadQueue = NativeUploadQueue;
386
+ //# sourceMappingURL=NativeUploadQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_eventemitter","_interopRequireDefault","require","_uploadRecoveryMetadata","e","__esModule","default","journalOperations","WeakMap","journalOwners","retryDelays","cancelled","Error","dispose","info","abortable","promise","signal","late","Promise","resolve","reject","settled","abort","addEventListener","once","aborted","then","value","removeEventListener","error","NativeUploadQueue","EventEmitter","tasks","active","Map","credentials","cancelledTasks","Set","paused","destroyed","initialized","constructor","client","provider","initialize","initialization","owner","get","set","serialize","checkAlive","loaded","loadUploadQueue","restored","restoreUploadQueue","length","saveUploadQueue","task","filter","status","release","catch","undefined","schedule","delete","all","map","createdAt","Date","updatedAt","id","find","add","mutate","persistedUploadQueue","offerCredentials","has","discardCredentials","update","patch","check","some","relayUpload","relay","run","onProgress","attempt","controller","AbortController","nativeId","now","Math","random","toString","slice","perform","finally","hostAbort","initialSignal","initialAbort","nativeStarted","nativeCancellation","cancelNative","cancelRecordingUpload","expiresAt","getTime","alreadyUploaded","recordingUuid","taskId","recordingId","deviceId","recoveryScope","fileSizeBytes","contentType","contentSha256","nextAttemptAt","errorMessage","emit","uploadRecordingFile","uploadUrl","uploadToken","complete","completeUrl","totalBytes","min","completedBytes","parked","retry","retryCount","pause","releaseRecordingFile","localPath","cancel","credential","clearCompleted","snapshot","released","clearAll","retryFailed","timer","clearTimeout","resume","destroy","stopped","destroyCompatibilityOperations","values","clear","removeAllListeners","wake","Infinity","size","Number","isFinite","setTimeout","max","operation","next","change","exports"],"sourceRoot":"../../../src","sources":["managers/NativeUploadQueue.ts"],"mappings":"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","ignoreList":[]}