@liveblocks/node 3.23.0-file3 → 3.23.0-file4
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/dist/index.cjs +82 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +53 -10
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { detectDupes } from "@liveblocks/core";
|
|
|
3
3
|
|
|
4
4
|
// src/version.ts
|
|
5
5
|
var PKG_NAME = "@liveblocks/node";
|
|
6
|
-
var PKG_VERSION = "3.23.0-
|
|
6
|
+
var PKG_VERSION = "3.23.0-file4";
|
|
7
7
|
var PKG_FORMAT = "esm";
|
|
8
8
|
|
|
9
9
|
// src/client.ts
|
|
@@ -338,7 +338,23 @@ async function uploadStorageFile({
|
|
|
338
338
|
}
|
|
339
339
|
let uploadId;
|
|
340
340
|
const uploadedParts = [];
|
|
341
|
-
const multipartUpload = await
|
|
341
|
+
const multipartUpload = await autoRetry(
|
|
342
|
+
createMultipartUpload,
|
|
343
|
+
STORAGE_FILE_RETRY_ATTEMPTS,
|
|
344
|
+
STORAGE_FILE_RETRY_DELAYS,
|
|
345
|
+
handleRetryError
|
|
346
|
+
);
|
|
347
|
+
const partUploadController = new AbortController();
|
|
348
|
+
const partUploadSignal = partUploadController.signal;
|
|
349
|
+
const abortPartUploads = (reason) => {
|
|
350
|
+
partUploadController.abort(reason);
|
|
351
|
+
};
|
|
352
|
+
const handleExternalAbort = () => abortPartUploads();
|
|
353
|
+
if (signal?.aborted) {
|
|
354
|
+
handleExternalAbort();
|
|
355
|
+
} else {
|
|
356
|
+
signal?.addEventListener("abort", handleExternalAbort, { once: true });
|
|
357
|
+
}
|
|
342
358
|
try {
|
|
343
359
|
uploadId = multipartUpload.uploadId;
|
|
344
360
|
if (signal?.aborted) {
|
|
@@ -346,18 +362,43 @@ async function uploadStorageFile({
|
|
|
346
362
|
}
|
|
347
363
|
const batches = chunk(splitStorageFileIntoParts(file), 5);
|
|
348
364
|
for (const parts of batches) {
|
|
349
|
-
const
|
|
365
|
+
const firstPartUploadFailure = {};
|
|
366
|
+
const partUploads$ = [];
|
|
350
367
|
for (const { part, partNumber } of parts) {
|
|
351
|
-
|
|
368
|
+
partUploads$.push(
|
|
352
369
|
autoRetry(
|
|
353
|
-
() => uploadMultipartPart(
|
|
370
|
+
() => uploadMultipartPart(
|
|
371
|
+
multipartUpload.uploadId,
|
|
372
|
+
partNumber,
|
|
373
|
+
part,
|
|
374
|
+
partUploadSignal
|
|
375
|
+
),
|
|
354
376
|
STORAGE_FILE_RETRY_ATTEMPTS,
|
|
355
377
|
STORAGE_FILE_RETRY_DELAYS,
|
|
356
|
-
|
|
357
|
-
|
|
378
|
+
(error) => {
|
|
379
|
+
if (signal?.aborted) {
|
|
380
|
+
throw abortError;
|
|
381
|
+
}
|
|
382
|
+
return partUploadSignal.aborted || handleRetryError(error);
|
|
383
|
+
}
|
|
384
|
+
).catch((error) => {
|
|
385
|
+
if (firstPartUploadFailure.value === void 0) {
|
|
386
|
+
firstPartUploadFailure.value = { error };
|
|
387
|
+
abortPartUploads(error);
|
|
388
|
+
}
|
|
389
|
+
throw error;
|
|
390
|
+
})
|
|
358
391
|
);
|
|
359
392
|
}
|
|
360
|
-
|
|
393
|
+
const settledPartUploads = await Promise.allSettled(partUploads$);
|
|
394
|
+
if (firstPartUploadFailure.value !== void 0) {
|
|
395
|
+
throw firstPartUploadFailure.value.error;
|
|
396
|
+
}
|
|
397
|
+
for (const settledPartUpload of settledPartUploads) {
|
|
398
|
+
if (settledPartUpload.status === "fulfilled") {
|
|
399
|
+
uploadedParts.push(settledPartUpload.value);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
361
402
|
}
|
|
362
403
|
if (signal?.aborted) {
|
|
363
404
|
throw abortError;
|
|
@@ -379,6 +420,8 @@ async function uploadStorageFile({
|
|
|
379
420
|
}
|
|
380
421
|
}
|
|
381
422
|
throw err;
|
|
423
|
+
} finally {
|
|
424
|
+
signal?.removeEventListener("abort", handleExternalAbort);
|
|
382
425
|
}
|
|
383
426
|
}
|
|
384
427
|
function splitStorageFileIntoParts(file) {
|
|
@@ -1418,12 +1461,12 @@ var Liveblocks = class {
|
|
|
1418
1461
|
);
|
|
1419
1462
|
return await this.#readJsonResponse(res);
|
|
1420
1463
|
},
|
|
1421
|
-
uploadMultipartPart: async (uploadId, partNumber, part) => {
|
|
1464
|
+
uploadMultipartPart: async (uploadId, partNumber, part, signal) => {
|
|
1422
1465
|
const res = await this.#putBlob(
|
|
1423
1466
|
url2`/v2/rooms/${roomId}/storage/files/${fileId}/multipart/${uploadId}/${String(partNumber)}`,
|
|
1424
1467
|
part,
|
|
1425
1468
|
void 0,
|
|
1426
|
-
|
|
1469
|
+
{ signal }
|
|
1427
1470
|
);
|
|
1428
1471
|
return await this.#readJsonResponse(res);
|
|
1429
1472
|
},
|