@adgytec/adgytec-web-utils 0.0.5 → 0.0.7
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/chunks/create +24 -0
- package/dist/chunks/create.map +1 -0
- package/dist/chunks/decode +15 -15
- package/dist/chunks/parse +29 -12
- package/dist/chunks/parse.map +1 -1
- package/dist/chunks/restrictions +151 -0
- package/dist/chunks/restrictions.map +1 -0
- package/dist/chunks/schema +227 -195
- package/dist/chunks/schema.map +1 -1
- package/dist/chunks/uploadDetails +92 -91
- package/dist/chunks/uploadDetails.map +1 -1
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +5 -3
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/media_limits.d.ts +2 -0
- package/dist/errorCodes/auth.d.ts +3 -0
- package/dist/errorCodes/common.d.ts +2 -0
- package/dist/errorCodes/iam.d.ts +2 -0
- package/dist/errorCodes/index.d.ts +2 -0
- package/dist/errorCodes/index.js +32 -85
- package/dist/errorCodes/index.js.map +1 -1
- package/dist/errorCodes/media.d.ts +2 -0
- package/dist/errorCodes/overrides.d.ts +2 -0
- package/dist/errorCodes/pagination.d.ts +2 -0
- package/dist/errorCodes/reqBody.d.ts +2 -0
- package/dist/errorCodes/restrictions.d.ts +3 -0
- package/dist/errorCodes/server.d.ts +2 -0
- package/dist/errorSchema/create.d.ts +2 -0
- package/dist/errorSchema/index.d.ts +2 -0
- package/dist/errorSchema/index.js +53 -49
- package/dist/errorSchema/index.js.map +1 -1
- package/dist/errorSchema/media.d.ts +1 -1
- package/dist/errorSchema/restrictions.d.ts +7 -0
- package/dist/errorSchema/schema.d.ts +6 -1
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.js +4 -3
- package/dist/errors/normalization.d.ts +12 -0
- package/dist/errors/parse.d.ts +1 -2
- package/dist/index.js +116 -99
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/applicationError +0 -28
- package/dist/chunks/applicationError.map +0 -1
|
@@ -1,48 +1,49 @@
|
|
|
1
|
-
import { v7 as
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { v7 as y } from "uuid";
|
|
2
|
+
import { MediaUploadLimit as c, MediaItemsLimit as h, httpMethods as u, httpReqHeaders as l, httpRequestCredentials as f } from "../constants/index.js";
|
|
3
|
+
import { a as w, n as g } from "./create";
|
|
4
|
+
import s from "zod";
|
|
5
|
+
import { Queue as U } from "@datastructures-js/queue";
|
|
6
|
+
import { m as d } from "./restrictions";
|
|
7
|
+
import { A as p, B as n } from "./schema";
|
|
8
|
+
import { d as C } from "./decode";
|
|
9
|
+
const P = (a) => (a.size > c && w(a.name, a.size, c), {
|
|
10
|
+
id: y(),
|
|
10
11
|
name: a.name,
|
|
11
12
|
size: a.size,
|
|
12
13
|
file: a
|
|
13
|
-
}),
|
|
14
|
+
}), F = (a) => (a.length > h && g(a.length, h), a.map(P)), R = (a) => ({
|
|
14
15
|
id: a.id,
|
|
15
16
|
size: a.size,
|
|
16
17
|
name: a.name
|
|
17
|
-
}),
|
|
18
|
-
presignPut:
|
|
19
|
-
partNumber:
|
|
20
|
-
partSize:
|
|
21
|
-
}),
|
|
22
|
-
mediaID:
|
|
23
|
-
uploadType:
|
|
24
|
-
multipartPresignPart:
|
|
25
|
-
multipartSuccessCallback:
|
|
26
|
-
}),
|
|
27
|
-
mediaID:
|
|
28
|
-
uploadType:
|
|
29
|
-
presignPut:
|
|
30
|
-
singlepartSuccessCallback:
|
|
31
|
-
}),
|
|
32
|
-
|
|
33
|
-
|
|
18
|
+
}), H = (a) => a.map(R), L = s.object({
|
|
19
|
+
presignPut: s.url(),
|
|
20
|
+
partNumber: s.int().positive().lte(1e4),
|
|
21
|
+
partSize: s.int().positive().gt(0)
|
|
22
|
+
}), S = s.object({
|
|
23
|
+
mediaID: s.uuidv7(),
|
|
24
|
+
uploadType: s.literal("multipart"),
|
|
25
|
+
multipartPresignPart: s.array(L).nonempty(),
|
|
26
|
+
multipartSuccessCallback: s.url()
|
|
27
|
+
}), N = s.object({
|
|
28
|
+
mediaID: s.uuidv7(),
|
|
29
|
+
uploadType: s.literal("singlepart"),
|
|
30
|
+
presignPut: s.url(),
|
|
31
|
+
singlepartSuccessCallback: s.url()
|
|
32
|
+
}), J = s.discriminatedUnion("uploadType", [
|
|
33
|
+
S,
|
|
34
|
+
N
|
|
34
35
|
]);
|
|
35
|
-
class
|
|
36
|
-
#
|
|
36
|
+
class z {
|
|
37
|
+
#r;
|
|
37
38
|
#t;
|
|
38
39
|
#a;
|
|
39
40
|
#i;
|
|
40
41
|
#e;
|
|
41
42
|
#n;
|
|
42
43
|
#o;
|
|
43
|
-
#
|
|
44
|
-
constructor(t, e, i,
|
|
45
|
-
this.#
|
|
44
|
+
#s;
|
|
45
|
+
constructor(t, e, i, r) {
|
|
46
|
+
this.#r = t, this.#t = e, this.#a = [], this.#i = /* @__PURE__ */ new Set(), this.#e = r, this.#n = i, this.#o = !1, this.#s = !1;
|
|
46
47
|
}
|
|
47
48
|
get failed() {
|
|
48
49
|
return this.#o;
|
|
@@ -51,7 +52,7 @@ class R {
|
|
|
51
52
|
this.#o = !0;
|
|
52
53
|
}
|
|
53
54
|
get id() {
|
|
54
|
-
return this.#
|
|
55
|
+
return this.#r;
|
|
55
56
|
}
|
|
56
57
|
get completeURL() {
|
|
57
58
|
return this.#n;
|
|
@@ -72,10 +73,10 @@ class R {
|
|
|
72
73
|
return !this.failed && this.#i.size === this.#e;
|
|
73
74
|
}
|
|
74
75
|
tryStartComplete() {
|
|
75
|
-
return this.#
|
|
76
|
+
return this.#s || !this.canComplete ? !1 : (this.#s = !0, !0);
|
|
76
77
|
}
|
|
77
78
|
resetComplete() {
|
|
78
|
-
this.#
|
|
79
|
+
this.#s = !1;
|
|
79
80
|
}
|
|
80
81
|
get totalPartsCount() {
|
|
81
82
|
return this.#e;
|
|
@@ -84,14 +85,14 @@ class R {
|
|
|
84
85
|
return this.#i.size;
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
|
-
class
|
|
88
|
-
#
|
|
88
|
+
class b {
|
|
89
|
+
#r;
|
|
89
90
|
#t;
|
|
90
91
|
#a;
|
|
91
92
|
#i;
|
|
92
93
|
#e;
|
|
93
|
-
constructor(t, e, i,
|
|
94
|
-
this.#
|
|
94
|
+
constructor(t, e, i, r) {
|
|
95
|
+
this.#r = t, this.#t = e, this.#i = r, this.#a = i, this.#e = !1;
|
|
95
96
|
}
|
|
96
97
|
get canComplete() {
|
|
97
98
|
return this.#e;
|
|
@@ -100,7 +101,7 @@ class S {
|
|
|
100
101
|
this.#e = !0;
|
|
101
102
|
}
|
|
102
103
|
get id() {
|
|
103
|
-
return this.#
|
|
104
|
+
return this.#r;
|
|
104
105
|
}
|
|
105
106
|
get blob() {
|
|
106
107
|
return this.#t;
|
|
@@ -112,28 +113,28 @@ class S {
|
|
|
112
113
|
return this.#a;
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
|
-
const
|
|
116
|
+
const D = {
|
|
116
117
|
concurrentUploads: 4,
|
|
117
118
|
retryLimit: 3
|
|
118
119
|
};
|
|
119
|
-
class
|
|
120
|
-
#
|
|
120
|
+
class M {
|
|
121
|
+
#r;
|
|
121
122
|
#t;
|
|
122
123
|
#a;
|
|
123
124
|
#i;
|
|
124
125
|
#e;
|
|
125
126
|
#n;
|
|
126
|
-
constructor(t, e, i =
|
|
127
|
-
this.#
|
|
127
|
+
constructor(t, e, i = D, r) {
|
|
128
|
+
this.#r = t, this.#t = e, this.#a = i.concurrentUploads, this.#i = i.retryLimit, this.#e = new U(), this.#n = r;
|
|
128
129
|
}
|
|
129
130
|
#o(t) {
|
|
130
131
|
return t < this.#i;
|
|
131
132
|
}
|
|
132
|
-
#
|
|
133
|
+
#s(t) {
|
|
133
134
|
this.#e.enqueue(t);
|
|
134
135
|
}
|
|
135
136
|
async init() {
|
|
136
|
-
this.#t.init(this.#
|
|
137
|
+
this.#t.init(this.#r);
|
|
137
138
|
const t = /* @__PURE__ */ new Set();
|
|
138
139
|
for await (const e of this.#m()) {
|
|
139
140
|
const i = e().finally(() => t.delete(i));
|
|
@@ -143,7 +144,7 @@ class L {
|
|
|
143
144
|
}
|
|
144
145
|
async #l(t, e) {
|
|
145
146
|
return await fetch(t, {
|
|
146
|
-
method:
|
|
147
|
+
method: u.put,
|
|
147
148
|
body: e
|
|
148
149
|
});
|
|
149
150
|
}
|
|
@@ -159,7 +160,7 @@ class L {
|
|
|
159
160
|
});
|
|
160
161
|
t.allowComplete(), await this.#h(t);
|
|
161
162
|
} catch (i) {
|
|
162
|
-
this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#
|
|
163
|
+
this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#s({
|
|
163
164
|
type: "singlepart-upload",
|
|
164
165
|
retryCount: e + 1,
|
|
165
166
|
singlepartObj: t
|
|
@@ -169,11 +170,11 @@ class L {
|
|
|
169
170
|
async #p(t, e, i = 0) {
|
|
170
171
|
if (!(t.failed || t.contains(e.partNumber)))
|
|
171
172
|
try {
|
|
172
|
-
const
|
|
173
|
+
const r = await this.#l(
|
|
173
174
|
e.uploadURL,
|
|
174
175
|
t.blob.slice(e.startByte, e.endByte)
|
|
175
176
|
);
|
|
176
|
-
if (!
|
|
177
|
+
if (!r.ok)
|
|
177
178
|
throw new p(
|
|
178
179
|
d.multipartPartUploadFailed,
|
|
179
180
|
{
|
|
@@ -181,7 +182,7 @@ class L {
|
|
|
181
182
|
partNumber: e.partNumber
|
|
182
183
|
}
|
|
183
184
|
);
|
|
184
|
-
const o =
|
|
185
|
+
const o = r.headers.get("ETag");
|
|
185
186
|
if (!o)
|
|
186
187
|
throw new p(d.missingETagValue, {
|
|
187
188
|
mediaID: t.id,
|
|
@@ -196,39 +197,39 @@ class L {
|
|
|
196
197
|
t.totalPartsCount
|
|
197
198
|
), !t.canComplete) return;
|
|
198
199
|
await this.#u(t);
|
|
199
|
-
} catch (
|
|
200
|
+
} catch (r) {
|
|
200
201
|
this.#o(i) ? (this.#t.multipartPartUploadRetrying(
|
|
201
202
|
t.id,
|
|
202
203
|
e.partNumber
|
|
203
|
-
), this.#
|
|
204
|
+
), this.#s({
|
|
204
205
|
type: "multipart-part-upload",
|
|
205
206
|
retryCount: i + 1,
|
|
206
207
|
multipartObj: t,
|
|
207
208
|
partInfo: e
|
|
208
|
-
})) : (t.fail(), this.#t.failed(t.id,
|
|
209
|
+
})) : (t.fail(), this.#t.failed(t.id, r));
|
|
209
210
|
}
|
|
210
211
|
}
|
|
211
212
|
async #c(t, e) {
|
|
212
|
-
let i,
|
|
213
|
+
let i, r;
|
|
213
214
|
e && (i = JSON.stringify({
|
|
214
215
|
partsInfo: e
|
|
215
|
-
}),
|
|
216
|
+
}), r = {
|
|
216
217
|
[l.contentType.key]: l.contentType.valueApplicationJSON
|
|
217
|
-
}), this.#n && (
|
|
218
|
+
}), this.#n && (r = r || {}, r[l.userLocale.key] = this.#n);
|
|
218
219
|
const o = await fetch(t, {
|
|
219
|
-
method:
|
|
220
|
+
method: u.post,
|
|
220
221
|
body: i,
|
|
221
|
-
headers:
|
|
222
|
-
credentials:
|
|
222
|
+
headers: r,
|
|
223
|
+
credentials: f.include
|
|
223
224
|
});
|
|
224
|
-
await
|
|
225
|
+
await C(o);
|
|
225
226
|
}
|
|
226
227
|
async #h(t, e = 0) {
|
|
227
228
|
if (t.canComplete)
|
|
228
229
|
try {
|
|
229
230
|
await this.#c(t.completeURL), this.#t.itemUploaded(t.id);
|
|
230
231
|
} catch (i) {
|
|
231
|
-
this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#
|
|
232
|
+
this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#s({
|
|
232
233
|
type: "singlepart-complete",
|
|
233
234
|
retryCount: e + 1,
|
|
234
235
|
singlepartObj: t
|
|
@@ -243,7 +244,7 @@ class L {
|
|
|
243
244
|
t.list
|
|
244
245
|
), this.#t.itemUploaded(t.id);
|
|
245
246
|
} catch (i) {
|
|
246
|
-
t.resetComplete(), this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#
|
|
247
|
+
t.resetComplete(), this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#s({
|
|
247
248
|
type: "multipart-complete",
|
|
248
249
|
retryCount: e + 1,
|
|
249
250
|
multipartObj: t
|
|
@@ -251,9 +252,9 @@ class L {
|
|
|
251
252
|
}
|
|
252
253
|
}
|
|
253
254
|
async *#m() {
|
|
254
|
-
for (const t of this.#
|
|
255
|
+
for (const t of this.#r) {
|
|
255
256
|
if (t.uploadType === "singlepart") {
|
|
256
|
-
const o = new
|
|
257
|
+
const o = new b(
|
|
257
258
|
t.mediaID,
|
|
258
259
|
t.file,
|
|
259
260
|
t.presignPut,
|
|
@@ -264,24 +265,24 @@ class L {
|
|
|
264
265
|
};
|
|
265
266
|
continue;
|
|
266
267
|
}
|
|
267
|
-
const e = new
|
|
268
|
+
const e = new z(
|
|
268
269
|
t.mediaID,
|
|
269
270
|
t.file,
|
|
270
271
|
t.multipartSuccessCallback,
|
|
271
272
|
t.multipartPresignPart.length
|
|
272
273
|
);
|
|
273
|
-
let i = 0,
|
|
274
|
+
let i = 0, r = 0;
|
|
274
275
|
for (const o of t.multipartPresignPart) {
|
|
275
|
-
|
|
276
|
-
const
|
|
276
|
+
r += o.partSize;
|
|
277
|
+
const m = {
|
|
277
278
|
partNumber: o.partNumber,
|
|
278
279
|
uploadURL: o.presignPut,
|
|
279
280
|
startByte: i,
|
|
280
|
-
endByte:
|
|
281
|
+
endByte: r
|
|
281
282
|
};
|
|
282
283
|
yield async () => {
|
|
283
|
-
await this.#p(e,
|
|
284
|
-
}, i =
|
|
284
|
+
await this.#p(e, m);
|
|
285
|
+
}, i = r;
|
|
285
286
|
}
|
|
286
287
|
}
|
|
287
288
|
}
|
|
@@ -329,11 +330,11 @@ class L {
|
|
|
329
330
|
}
|
|
330
331
|
}
|
|
331
332
|
}
|
|
332
|
-
const
|
|
333
|
-
await
|
|
334
|
-
},
|
|
335
|
-
await new
|
|
336
|
-
},
|
|
333
|
+
const Q = async (a, t, e, i) => {
|
|
334
|
+
await T([a], t, e, i);
|
|
335
|
+
}, T = async (a, t, e, i) => {
|
|
336
|
+
await new M(a, t, e, i).init();
|
|
337
|
+
}, E = (a, t) => {
|
|
337
338
|
if (a.id !== t.mediaID)
|
|
338
339
|
throw new n("media item and response id mismatch");
|
|
339
340
|
return {
|
|
@@ -341,7 +342,7 @@ const $ = async (a, t, e, i) => {
|
|
|
341
342
|
file: a.file,
|
|
342
343
|
size: a.size
|
|
343
344
|
};
|
|
344
|
-
},
|
|
345
|
+
}, V = (a, t) => {
|
|
345
346
|
if (a.length !== t.length)
|
|
346
347
|
throw new n(
|
|
347
348
|
`items mismatch: mediaInfos=${a.length}, apiResponses=${t.length}`
|
|
@@ -350,23 +351,23 @@ const $ = async (a, t, e, i) => {
|
|
|
350
351
|
t.map((i) => [i.mediaID, i])
|
|
351
352
|
);
|
|
352
353
|
return a.map((i) => {
|
|
353
|
-
const
|
|
354
|
-
if (!
|
|
354
|
+
const r = e.get(i.id);
|
|
355
|
+
if (!r)
|
|
355
356
|
throw new n(
|
|
356
357
|
`Could not find a matching API response for media info with id: ${i.id}`
|
|
357
358
|
);
|
|
358
|
-
return
|
|
359
|
+
return E(i, r);
|
|
359
360
|
});
|
|
360
361
|
};
|
|
361
362
|
export {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
363
|
+
J as U,
|
|
364
|
+
F as a,
|
|
365
|
+
E as b,
|
|
366
|
+
V as c,
|
|
367
|
+
H as d,
|
|
368
|
+
T as e,
|
|
369
|
+
P as n,
|
|
370
|
+
R as t,
|
|
371
|
+
Q as u
|
|
371
372
|
};
|
|
372
373
|
//# sourceMappingURL=uploadDetails.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadDetails","sources":["../../src/media/mediaInfo.ts","../../src/media/toUploadPayload.ts","../../src/media/types/apiResponse.ts","../../src/media/multipartUtil.ts","../../src/media/singlepartUtil.ts","../../src/media/uploadUtil.ts","../../src/media/upload.ts","../../src/media/uploadDetails.ts"],"sourcesContent":["import { v7 as uuidv7 } from \"uuid\";\nimport type { NewMediaInfo, NewMediaInfos } from \"./types\";\n\nexport const newMediaInfo: NewMediaInfo = (item) => {\n return {\n id: uuidv7(),\n name: item.name,\n size: item.size,\n file: item,\n };\n};\n\nexport const newMediaInfos: NewMediaInfos = (items) => {\n return items.map(newMediaInfo);\n};\n","import type { ToUploadPayload, ToUploadPayloads } from \"./types\";\n\nexport const toUploadPayload: ToUploadPayload = (item) => {\n return {\n id: item.id,\n size: item.size,\n name: item.name,\n };\n};\n\nexport const toUploadPayloads: ToUploadPayloads = (items) => {\n return items.map(toUploadPayload);\n};\n","import z from \"zod\";\n\nconst MultipartPartUploadSchema = z.object({\n presignPut: z.url(),\n partNumber: z.int().positive().lte(10000),\n partSize: z.int().positive().gt(0),\n});\n\nconst MultipartSchema = z.object({\n mediaID: z.uuidv7(),\n uploadType: z.literal(\"multipart\"),\n multipartPresignPart: z.array(MultipartPartUploadSchema).nonempty(),\n multipartSuccessCallback: z.url(),\n});\n\nconst SinglepartSchema = z.object({\n mediaID: z.uuidv7(),\n uploadType: z.literal(\"singlepart\"),\n presignPut: z.url(),\n singlepartSuccessCallback: z.url(),\n});\n\nexport const UploadDetailsAPIResSchema = z.discriminatedUnion(\"uploadType\", [\n MultipartSchema,\n SinglepartSchema,\n]);\n\nexport type UploadDetailsAPIRes = z.infer<typeof UploadDetailsAPIResSchema>;\n","import type { MultipartUploadedPartDetails } from \"./types\";\n\nexport class MultipartUtil {\n #id: string;\n #blob: Blob;\n #response: MultipartUploadedPartDetails[];\n #parts: Set<number>;\n #totalParts: number;\n #completeURL: string;\n #failed: boolean;\n #complete: boolean;\n\n constructor(\n id: string,\n blob: Blob,\n completeURL: string,\n totalParts: number\n ) {\n this.#id = id;\n this.#blob = blob;\n this.#response = [];\n this.#parts = new Set();\n this.#totalParts = totalParts;\n this.#completeURL = completeURL;\n this.#failed = false;\n this.#complete = false;\n }\n\n get failed(): boolean {\n return this.#failed;\n }\n\n fail() {\n this.#failed = true;\n }\n\n get id(): string {\n return this.#id;\n }\n\n get completeURL(): string {\n return this.#completeURL;\n }\n\n get blob(): Blob {\n return this.#blob;\n }\n\n add(itemRes: MultipartUploadedPartDetails) {\n if (this.contains(itemRes.partNumber)) {\n return;\n }\n\n this.#response.push(itemRes);\n this.#parts.add(itemRes.partNumber);\n }\n\n contains(partNumber: number): boolean {\n return this.#parts.has(partNumber);\n }\n\n get list(): MultipartUploadedPartDetails[] {\n return this.#response\n .slice()\n .sort((a, b) => a.partNumber - b.partNumber);\n }\n\n get canComplete(): boolean {\n return !this.failed && this.#parts.size === this.#totalParts;\n }\n\n tryStartComplete(): boolean {\n if (this.#complete || !this.canComplete) return false;\n\n this.#complete = true;\n return true;\n }\n\n resetComplete() {\n this.#complete = false;\n }\n\n get totalPartsCount(): number {\n return this.#totalParts;\n }\n\n get uploadedPartsCount(): number {\n return this.#parts.size;\n }\n}\n","export class SinglepartUtil {\n #id: string;\n #blob: Blob;\n #uploadURL: string;\n #completeURL: string;\n #canComplete: boolean;\n\n constructor(\n id: string,\n blob: Blob,\n uploadURL: string,\n completeURL: string\n ) {\n this.#id = id;\n this.#blob = blob;\n this.#completeURL = completeURL;\n this.#uploadURL = uploadURL;\n this.#canComplete = false;\n }\n\n get canComplete(): boolean {\n return this.#canComplete;\n }\n\n allowComplete() {\n this.#canComplete = true;\n }\n\n get id(): string {\n return this.#id;\n }\n\n get blob(): Blob {\n return this.#blob;\n }\n\n get completeURL(): string {\n return this.#completeURL;\n }\n\n get uploadURL(): string {\n return this.#uploadURL;\n }\n}\n","import { Queue } from \"@datastructures-js/queue\";\nimport {\n httpMethods,\n httpReqHeaders,\n httpRequestCredentials,\n} from \"../constants\";\nimport { mediaCodes } from \"../errorCodes\";\nimport { ApplicationError, BaseError } from \"../errors\";\nimport { decodeAPIResponse } from \"../response\";\nimport { MultipartUtil } from \"./multipartUtil\";\nimport { SinglepartUtil } from \"./singlepartUtil\";\nimport type {\n LifecycleHandler,\n MultipartPartInfo,\n MultipartUploadedPartDetails,\n Retry,\n UploadDetails,\n UploadLimits,\n} from \"./types\";\n\nconst defaultUploadLimit: UploadLimits = {\n concurrentUploads: 4,\n retryLimit: 3,\n};\n\nexport class Upload {\n #items: UploadDetails[];\n #lifecycleHandler: LifecycleHandler;\n #concurrentUploads: number;\n #retryLimit: number;\n #retryQueue: Queue<Retry>;\n #languageTag?: string;\n\n constructor(\n uploadItems: UploadDetails[],\n handler: LifecycleHandler,\n limits: UploadLimits = defaultUploadLimit,\n languageTag?: string\n ) {\n this.#items = uploadItems;\n this.#lifecycleHandler = handler;\n this.#concurrentUploads = limits.concurrentUploads;\n this.#retryLimit = limits.retryLimit;\n this.#retryQueue = new Queue();\n this.#languageTag = languageTag;\n }\n\n #canRetry(currentCount: number): boolean {\n return currentCount < this.#retryLimit;\n }\n\n #addRetry(task: Retry) {\n this.#retryQueue.enqueue(task);\n }\n\n async init() {\n this.#lifecycleHandler.init(this.#items);\n\n const running = new Set<Promise<void>>();\n for await (const task of this.#generateTasks()) {\n const p = task().finally(() => running.delete(p));\n running.add(p);\n\n if (running.size >= this.#concurrentUploads) {\n await Promise.race(running);\n }\n }\n\n // wait for all initial task to complete\n await Promise.all(running);\n\n // complete retry action\n await this.#handleRetries();\n\n this.#lifecycleHandler.completed();\n }\n\n async #blobUpload(uploadURL: string, blob: Blob): Promise<Response> {\n return await fetch(uploadURL, {\n method: httpMethods.put,\n body: blob,\n });\n }\n\n async #singlepartUpload(\n singlepartObj: SinglepartUtil,\n retryCount: number = 0\n ) {\n if (singlepartObj.canComplete) {\n return;\n }\n\n try {\n const res = await this.#blobUpload(\n singlepartObj.uploadURL,\n singlepartObj.blob\n );\n if (!res.ok) {\n throw new ApplicationError(mediaCodes.singlepartUploadFailed, {\n mediaID: singlepartObj.id,\n });\n }\n\n singlepartObj.allowComplete();\n await this.#completeSinglepartUpload(singlepartObj);\n } catch (err) {\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.uploadRetrying(singlepartObj.id);\n this.#addRetry({\n type: \"singlepart-upload\",\n retryCount: retryCount + 1,\n singlepartObj: singlepartObj,\n });\n } else {\n this.#lifecycleHandler.failed(singlepartObj.id, err);\n }\n }\n }\n\n async #multipartUpload(\n multipartObj: MultipartUtil,\n partInfo: MultipartPartInfo,\n retryCount: number = 0\n ) {\n if (multipartObj.failed || multipartObj.contains(partInfo.partNumber)) {\n return;\n }\n\n try {\n const res = await this.#blobUpload(\n partInfo.uploadURL,\n multipartObj.blob.slice(partInfo.startByte, partInfo.endByte)\n );\n if (!res.ok) {\n throw new ApplicationError(\n mediaCodes.multipartPartUploadFailed,\n {\n mediaID: multipartObj.id,\n partNumber: partInfo.partNumber,\n }\n );\n }\n\n const etag = res.headers.get(\"ETag\");\n if (!etag) {\n throw new ApplicationError(mediaCodes.missingETagValue, {\n mediaID: multipartObj.id,\n partNumber: partInfo.partNumber,\n });\n }\n\n multipartObj.add({\n partNumber: partInfo.partNumber,\n etag: etag,\n });\n\n this.#lifecycleHandler.multipartPartUploaded(\n multipartObj.id,\n multipartObj.uploadedPartsCount,\n multipartObj.totalPartsCount\n );\n\n if (!multipartObj.canComplete) return;\n await this.#completeMultipartUpload(multipartObj);\n } catch (err) {\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.multipartPartUploadRetrying(\n multipartObj.id,\n partInfo.partNumber\n );\n\n this.#addRetry({\n type: \"multipart-part-upload\",\n retryCount: retryCount + 1,\n multipartObj: multipartObj,\n partInfo: partInfo,\n });\n } else {\n multipartObj.fail();\n this.#lifecycleHandler.failed(multipartObj.id, err);\n }\n }\n }\n\n async #completeUpload(\n completeURL: string,\n body?: MultipartUploadedPartDetails[]\n ) {\n let reqBody: BodyInit | undefined;\n let headers: Record<string, string> | undefined;\n if (body) {\n reqBody = JSON.stringify({\n partsInfo: body,\n });\n\n headers = {\n [httpReqHeaders.contentType.key]:\n httpReqHeaders.contentType.valueApplicationJSON,\n };\n }\n\n if (this.#languageTag) {\n headers = headers || {};\n headers[httpReqHeaders.userLocale.key] = this.#languageTag;\n }\n\n const apiRes = await fetch(completeURL, {\n method: httpMethods.post,\n body: reqBody,\n headers: headers,\n credentials: httpRequestCredentials.include,\n });\n await decodeAPIResponse(apiRes);\n }\n\n async #completeSinglepartUpload(\n singlepartObj: SinglepartUtil,\n retryCount: number = 0\n ) {\n if (!singlepartObj.canComplete) {\n return;\n }\n\n try {\n await this.#completeUpload(singlepartObj.completeURL);\n\n this.#lifecycleHandler.itemUploaded(singlepartObj.id);\n } catch (err) {\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.uploadRetrying(singlepartObj.id);\n this.#addRetry({\n type: \"singlepart-complete\",\n retryCount: retryCount + 1,\n singlepartObj: singlepartObj,\n });\n } else {\n this.#lifecycleHandler.failed(singlepartObj.id, err);\n }\n }\n }\n\n async #completeMultipartUpload(\n multipartObj: MultipartUtil,\n retryCount: number = 0\n ) {\n if (!multipartObj.tryStartComplete()) {\n return;\n }\n\n try {\n await this.#completeUpload(\n multipartObj.completeURL,\n multipartObj.list\n );\n\n this.#lifecycleHandler.itemUploaded(multipartObj.id);\n } catch (err) {\n multipartObj.resetComplete();\n\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.uploadRetrying(multipartObj.id);\n this.#addRetry({\n type: \"multipart-complete\",\n retryCount: retryCount + 1,\n multipartObj: multipartObj,\n });\n } else {\n multipartObj.fail();\n this.#lifecycleHandler.failed(multipartObj.id, err);\n }\n }\n }\n\n async *#generateTasks(): AsyncGenerator<() => Promise<void>> {\n for (const item of this.#items) {\n if (item.uploadType === \"singlepart\") {\n const singlepartObj = new SinglepartUtil(\n item.mediaID,\n item.file,\n item.presignPut,\n item.singlepartSuccessCallback\n );\n\n yield async () => {\n await this.#singlepartUpload(singlepartObj);\n };\n continue;\n }\n\n // multipart\n const multipartObj = new MultipartUtil(\n item.mediaID,\n item.file,\n item.multipartSuccessCallback,\n item.multipartPresignPart.length\n );\n\n // file slice byte range\n let startByte = 0;\n let endByte = 0;\n\n for (const partDetails of item.multipartPresignPart) {\n endByte += partDetails.partSize;\n\n const partInfo: MultipartPartInfo = {\n partNumber: partDetails.partNumber,\n uploadURL: partDetails.presignPut,\n startByte: startByte,\n endByte: endByte,\n };\n\n yield async () => {\n await this.#multipartUpload(multipartObj, partInfo);\n };\n\n startByte = endByte;\n }\n }\n }\n\n #retryTask(task: Retry): Promise<void> {\n // promise assignment\n switch (task.type) {\n case \"singlepart-upload\":\n return this.#singlepartUpload(\n task.singlepartObj,\n task.retryCount\n );\n case \"singlepart-complete\":\n return this.#completeSinglepartUpload(\n task.singlepartObj,\n task.retryCount\n );\n case \"multipart-part-upload\":\n return this.#multipartUpload(\n task.multipartObj,\n task.partInfo,\n task.retryCount\n );\n case \"multipart-complete\":\n return this.#completeMultipartUpload(\n task.multipartObj,\n task.retryCount\n );\n default: {\n const _exhaustiveCheck: never = task;\n void _exhaustiveCheck;\n\n throw new BaseError(\n `Unhandled retry task type: ${(task as { type: string }).type}`\n );\n }\n }\n }\n\n async #handleRetries() {\n const running = new Set<Promise<void>>();\n\n while (true) {\n if (this.#retryQueue.isEmpty()) break;\n\n while (!this.#retryQueue.isEmpty()) {\n const task = this.#retryQueue.dequeue();\n if (!task) break;\n\n const p: Promise<void> = this.#retryTask(task).finally(() =>\n running.delete(p)\n );\n running.add(p);\n\n if (running.size >= this.#concurrentUploads) {\n await Promise.race(running);\n }\n }\n\n await Promise.all(running);\n }\n }\n}\n","import type { UploadItem, UploadItems } from \"./types\";\nimport { Upload } from \"./uploadUtil\";\n\nexport const uploadItem: UploadItem = async (\n item,\n handler,\n limits,\n languageTag\n) => {\n await uploadItems([item], handler, limits, languageTag);\n};\n\nexport const uploadItems: UploadItems = async (\n items,\n handler,\n limits,\n languageTag\n) => {\n const uploadObj = new Upload(items, handler, limits, languageTag);\n await uploadObj.init();\n};\n","import { BaseError } from \"../errors\";\nimport type { NewUploadDetails, NewUploadsDetails } from \"./types\";\n\nexport const newUploadDetails: NewUploadDetails = (mediaInfo, apiResponse) => {\n if (mediaInfo.id !== apiResponse.mediaID) {\n throw new BaseError(\"media item and response id mismatch\");\n }\n\n return {\n ...apiResponse,\n file: mediaInfo.file,\n size: mediaInfo.size,\n };\n};\n\nexport const newUploadsDetails: NewUploadsDetails = (\n mediaInfos,\n apiResponses\n) => {\n if (mediaInfos.length !== apiResponses.length) {\n throw new BaseError(\n `items mismatch: mediaInfos=${mediaInfos.length}, apiResponses=${apiResponses.length}`\n );\n }\n\n const apiResponseMap = new Map(\n apiResponses.map((response) => [response.mediaID, response])\n );\n\n return mediaInfos.map((mediaInfo) => {\n const apiResponse = apiResponseMap.get(mediaInfo.id);\n if (!apiResponse) {\n // This case should not happen if lengths are equal and IDs are unique,\n // but it's good practice to handle it defensively.\n throw new BaseError(\n `Could not find a matching API response for media info with id: ${mediaInfo.id}`\n );\n }\n return newUploadDetails(mediaInfo, apiResponse);\n });\n};\n"],"names":["newMediaInfo","item","uuidv7","newMediaInfos","items","toUploadPayload","toUploadPayloads","MultipartPartUploadSchema","z","MultipartSchema","SinglepartSchema","UploadDetailsAPIResSchema","MultipartUtil","#id","#blob","#response","#parts","#totalParts","#completeURL","#failed","#complete","id","blob","completeURL","totalParts","itemRes","partNumber","a","b","SinglepartUtil","#uploadURL","#canComplete","uploadURL","defaultUploadLimit","Upload","#items","#lifecycleHandler","#concurrentUploads","#retryLimit","#retryQueue","#languageTag","uploadItems","handler","limits","languageTag","Queue","#canRetry","currentCount","#addRetry","task","running","#generateTasks","p","#handleRetries","#blobUpload","httpMethods","#singlepartUpload","singlepartObj","retryCount","ApplicationError","mediaCodes","#completeSinglepartUpload","err","#multipartUpload","multipartObj","partInfo","res","etag","#completeMultipartUpload","#completeUpload","body","reqBody","headers","httpReqHeaders","apiRes","httpRequestCredentials","decodeAPIResponse","startByte","endByte","partDetails","#retryTask","BaseError","uploadItem","newUploadDetails","mediaInfo","apiResponse","newUploadsDetails","mediaInfos","apiResponses","apiResponseMap","response"],"mappings":";;;;;;;AAGO,MAAMA,IAA6B,CAACC,OAChC;AAAA,EACH,IAAIC,EAAA;AAAA,EACJ,MAAMD,EAAK;AAAA,EACX,MAAMA,EAAK;AAAA,EACX,MAAMA;AAAA,IAIDE,IAA+B,CAACC,MAClCA,EAAM,IAAIJ,CAAY,GCXpBK,IAAmC,CAACJ,OACtC;AAAA,EACH,IAAIA,EAAK;AAAA,EACT,MAAMA,EAAK;AAAA,EACX,MAAMA,EAAK;AAAA,IAINK,IAAqC,CAACF,MACxCA,EAAM,IAAIC,CAAe,GCT9BE,IAA4BC,EAAE,OAAO;AAAA,EACvC,YAAYA,EAAE,IAAA;AAAA,EACd,YAAYA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,GAAK;AAAA,EACxC,UAAUA,EAAE,IAAA,EAAM,SAAA,EAAW,GAAG,CAAC;AACrC,CAAC,GAEKC,IAAkBD,EAAE,OAAO;AAAA,EAC7B,SAASA,EAAE,OAAA;AAAA,EACX,YAAYA,EAAE,QAAQ,WAAW;AAAA,EACjC,sBAAsBA,EAAE,MAAMD,CAAyB,EAAE,SAAA;AAAA,EACzD,0BAA0BC,EAAE,IAAA;AAChC,CAAC,GAEKE,IAAmBF,EAAE,OAAO;AAAA,EAC9B,SAASA,EAAE,OAAA;AAAA,EACX,YAAYA,EAAE,QAAQ,YAAY;AAAA,EAClC,YAAYA,EAAE,IAAA;AAAA,EACd,2BAA2BA,EAAE,IAAA;AACjC,CAAC,GAEYG,IAA4BH,EAAE,mBAAmB,cAAc;AAAA,EACxEC;AAAA,EACAC;AACJ,CAAC;ACvBM,MAAME,EAAc;AAAA,EACvBC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EAEA,YACIC,GACAC,GACAC,GACAC,GACF;AACE,SAAKX,KAAMQ,GACX,KAAKP,KAAQQ,GACb,KAAKP,KAAY,CAAA,GACjB,KAAKC,yBAAa,IAAA,GAClB,KAAKC,KAAcO,GACnB,KAAKN,KAAeK,GACpB,KAAKJ,KAAU,IACf,KAAKC,KAAY;AAAA,EACrB;AAAA,EAEA,IAAI,SAAkB;AAClB,WAAO,KAAKD;AAAA,EAChB;AAAA,EAEA,OAAO;AACH,SAAKA,KAAU;AAAA,EACnB;AAAA,EAEA,IAAI,KAAa;AACb,WAAO,KAAKN;AAAA,EAChB;AAAA,EAEA,IAAI,cAAsB;AACtB,WAAO,KAAKK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAa;AACb,WAAO,KAAKJ;AAAA,EAChB;AAAA,EAEA,IAAIW,GAAuC;AACvC,IAAI,KAAK,SAASA,EAAQ,UAAU,MAIpC,KAAKV,GAAU,KAAKU,CAAO,GAC3B,KAAKT,GAAO,IAAIS,EAAQ,UAAU;AAAA,EACtC;AAAA,EAEA,SAASC,GAA6B;AAClC,WAAO,KAAKV,GAAO,IAAIU,CAAU;AAAA,EACrC;AAAA,EAEA,IAAI,OAAuC;AACvC,WAAO,KAAKX,GACP,MAAA,EACA,KAAK,CAACY,GAAGC,MAAMD,EAAE,aAAaC,EAAE,UAAU;AAAA,EACnD;AAAA,EAEA,IAAI,cAAuB;AACvB,WAAO,CAAC,KAAK,UAAU,KAAKZ,GAAO,SAAS,KAAKC;AAAA,EACrD;AAAA,EAEA,mBAA4B;AACxB,WAAI,KAAKG,MAAa,CAAC,KAAK,cAAoB,MAEhD,KAAKA,KAAY,IACV;AAAA,EACX;AAAA,EAEA,gBAAgB;AACZ,SAAKA,KAAY;AAAA,EACrB;AAAA,EAEA,IAAI,kBAA0B;AAC1B,WAAO,KAAKH;AAAA,EAChB;AAAA,EAEA,IAAI,qBAA6B;AAC7B,WAAO,KAAKD,GAAO;AAAA,EACvB;AACJ;ACzFO,MAAMa,EAAe;AAAA,EACxBhB;AAAA,EACAC;AAAA,EACAgB;AAAA,EACAZ;AAAA,EACAa;AAAA,EAEA,YACIV,GACAC,GACAU,GACAT,GACF;AACE,SAAKV,KAAMQ,GACX,KAAKP,KAAQQ,GACb,KAAKJ,KAAeK,GACpB,KAAKO,KAAaE,GAClB,KAAKD,KAAe;AAAA,EACxB;AAAA,EAEA,IAAI,cAAuB;AACvB,WAAO,KAAKA;AAAA,EAChB;AAAA,EAEA,gBAAgB;AACZ,SAAKA,KAAe;AAAA,EACxB;AAAA,EAEA,IAAI,KAAa;AACb,WAAO,KAAKlB;AAAA,EAChB;AAAA,EAEA,IAAI,OAAa;AACb,WAAO,KAAKC;AAAA,EAChB;AAAA,EAEA,IAAI,cAAsB;AACtB,WAAO,KAAKI;AAAA,EAChB;AAAA,EAEA,IAAI,YAAoB;AACpB,WAAO,KAAKY;AAAA,EAChB;AACJ;ACvBA,MAAMG,IAAmC;AAAA,EACrC,mBAAmB;AAAA,EACnB,YAAY;AAChB;AAEO,MAAMC,EAAO;AAAA,EAChBC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EAEA,YACIC,GACAC,GACAC,IAAuBV,GACvBW,GACF;AACE,SAAKT,KAASM,GACd,KAAKL,KAAoBM,GACzB,KAAKL,KAAqBM,EAAO,mBACjC,KAAKL,KAAcK,EAAO,YAC1B,KAAKJ,KAAc,IAAIM,EAAA,GACvB,KAAKL,KAAeI;AAAA,EACxB;AAAA,EAEAE,GAAUC,GAA+B;AACrC,WAAOA,IAAe,KAAKT;AAAA,EAC/B;AAAA,EAEAU,GAAUC,GAAa;AACnB,SAAKV,GAAY,QAAQU,CAAI;AAAA,EACjC;AAAA,EAEA,MAAM,OAAO;AACT,SAAKb,GAAkB,KAAK,KAAKD,EAAM;AAEvC,UAAMe,wBAAc,IAAA;AACpB,qBAAiBD,KAAQ,KAAKE,MAAkB;AAC5C,YAAMC,IAAIH,IAAO,QAAQ,MAAMC,EAAQ,OAAOE,CAAC,CAAC;AAChD,MAAAF,EAAQ,IAAIE,CAAC,GAETF,EAAQ,QAAQ,KAAKb,MACrB,MAAM,QAAQ,KAAKa,CAAO;AAAA,IAElC;AAGA,UAAM,QAAQ,IAAIA,CAAO,GAGzB,MAAM,KAAKG,GAAA,GAEX,KAAKjB,GAAkB,UAAA;AAAA,EAC3B;AAAA,EAEA,MAAMkB,GAAYtB,GAAmBV,GAA+B;AAChE,WAAO,MAAM,MAAMU,GAAW;AAAA,MAC1B,QAAQuB,EAAY;AAAA,MACpB,MAAMjC;AAAA,IAAA,CACT;AAAA,EACL;AAAA,EAEA,MAAMkC,GACFC,GACAC,IAAqB,GACvB;AACE,QAAI,CAAAD,EAAc;AAIlB,UAAI;AAKA,YAAI,EAJQ,MAAM,KAAKH;AAAA,UACnBG,EAAc;AAAA,UACdA,EAAc;AAAA,QAAA,GAET;AACL,gBAAM,IAAIE,EAAiBC,EAAW,wBAAwB;AAAA,YAC1D,SAASH,EAAc;AAAA,UAAA,CAC1B;AAGL,QAAAA,EAAc,cAAA,GACd,MAAM,KAAKI,GAA0BJ,CAAa;AAAA,MACtD,SAASK,GAAK;AACV,QAAI,KAAKhB,GAAUY,CAAU,KACzB,KAAKtB,GAAkB,eAAeqB,EAAc,EAAE,GACtD,KAAKT,GAAU;AAAA,UACX,MAAM;AAAA,UACN,YAAYU,IAAa;AAAA,UACzB,eAAAD;AAAA,QAAA,CACH,KAED,KAAKrB,GAAkB,OAAOqB,EAAc,IAAIK,CAAG;AAAA,MAE3D;AAAA,EACJ;AAAA,EAEA,MAAMC,GACFC,GACAC,GACAP,IAAqB,GACvB;AACE,QAAI,EAAAM,EAAa,UAAUA,EAAa,SAASC,EAAS,UAAU;AAIpE,UAAI;AACA,cAAMC,IAAM,MAAM,KAAKZ;AAAA,UACnBW,EAAS;AAAA,UACTD,EAAa,KAAK,MAAMC,EAAS,WAAWA,EAAS,OAAO;AAAA,QAAA;AAEhE,YAAI,CAACC,EAAI;AACL,gBAAM,IAAIP;AAAA,YACNC,EAAW;AAAA,YACX;AAAA,cACI,SAASI,EAAa;AAAA,cACtB,YAAYC,EAAS;AAAA,YAAA;AAAA,UACzB;AAIR,cAAME,IAAOD,EAAI,QAAQ,IAAI,MAAM;AACnC,YAAI,CAACC;AACD,gBAAM,IAAIR,EAAiBC,EAAW,kBAAkB;AAAA,YACpD,SAASI,EAAa;AAAA,YACtB,YAAYC,EAAS;AAAA,UAAA,CACxB;AAcL,YAXAD,EAAa,IAAI;AAAA,UACb,YAAYC,EAAS;AAAA,UACrB,MAAAE;AAAA,QAAA,CACH,GAED,KAAK/B,GAAkB;AAAA,UACnB4B,EAAa;AAAA,UACbA,EAAa;AAAA,UACbA,EAAa;AAAA,QAAA,GAGb,CAACA,EAAa,YAAa;AAC/B,cAAM,KAAKI,GAAyBJ,CAAY;AAAA,MACpD,SAASF,GAAK;AACV,QAAI,KAAKhB,GAAUY,CAAU,KACzB,KAAKtB,GAAkB;AAAA,UACnB4B,EAAa;AAAA,UACbC,EAAS;AAAA,QAAA,GAGb,KAAKjB,GAAU;AAAA,UACX,MAAM;AAAA,UACN,YAAYU,IAAa;AAAA,UACzB,cAAAM;AAAA,UACA,UAAAC;AAAA,QAAA,CACH,MAEDD,EAAa,KAAA,GACb,KAAK5B,GAAkB,OAAO4B,EAAa,IAAIF,CAAG;AAAA,MAE1D;AAAA,EACJ;AAAA,EAEA,MAAMO,GACF9C,GACA+C,GACF;AACE,QAAIC,GACAC;AACJ,IAAIF,MACAC,IAAU,KAAK,UAAU;AAAA,MACrB,WAAWD;AAAA,IAAA,CACd,GAEDE,IAAU;AAAA,MACN,CAACC,EAAe,YAAY,GAAG,GAC3BA,EAAe,YAAY;AAAA,IAAA,IAInC,KAAKjC,OACLgC,IAAUA,KAAW,CAAA,GACrBA,EAAQC,EAAe,WAAW,GAAG,IAAI,KAAKjC;AAGlD,UAAMkC,IAAS,MAAM,MAAMnD,GAAa;AAAA,MACpC,QAAQgC,EAAY;AAAA,MACpB,MAAMgB;AAAA,MACN,SAAAC;AAAA,MACA,aAAaG,EAAuB;AAAA,IAAA,CACvC;AACD,UAAMC,EAAkBF,CAAM;AAAA,EAClC;AAAA,EAEA,MAAMb,GACFJ,GACAC,IAAqB,GACvB;AACE,QAAKD,EAAc;AAInB,UAAI;AACA,cAAM,KAAKY,GAAgBZ,EAAc,WAAW,GAEpD,KAAKrB,GAAkB,aAAaqB,EAAc,EAAE;AAAA,MACxD,SAASK,GAAK;AACV,QAAI,KAAKhB,GAAUY,CAAU,KACzB,KAAKtB,GAAkB,eAAeqB,EAAc,EAAE,GACtD,KAAKT,GAAU;AAAA,UACX,MAAM;AAAA,UACN,YAAYU,IAAa;AAAA,UACzB,eAAAD;AAAA,QAAA,CACH,KAED,KAAKrB,GAAkB,OAAOqB,EAAc,IAAIK,CAAG;AAAA,MAE3D;AAAA,EACJ;AAAA,EAEA,MAAMM,GACFJ,GACAN,IAAqB,GACvB;AACE,QAAKM,EAAa;AAIlB,UAAI;AACA,cAAM,KAAKK;AAAA,UACPL,EAAa;AAAA,UACbA,EAAa;AAAA,QAAA,GAGjB,KAAK5B,GAAkB,aAAa4B,EAAa,EAAE;AAAA,MACvD,SAASF,GAAK;AACV,QAAAE,EAAa,cAAA,GAET,KAAKlB,GAAUY,CAAU,KACzB,KAAKtB,GAAkB,eAAe4B,EAAa,EAAE,GACrD,KAAKhB,GAAU;AAAA,UACX,MAAM;AAAA,UACN,YAAYU,IAAa;AAAA,UACzB,cAAAM;AAAA,QAAA,CACH,MAEDA,EAAa,KAAA,GACb,KAAK5B,GAAkB,OAAO4B,EAAa,IAAIF,CAAG;AAAA,MAE1D;AAAA,EACJ;AAAA,EAEA,OAAOX,KAAsD;AACzD,eAAWlD,KAAQ,KAAKkC,IAAQ;AAC5B,UAAIlC,EAAK,eAAe,cAAc;AAClC,cAAMwD,IAAgB,IAAI5B;AAAA,UACtB5B,EAAK;AAAA,UACLA,EAAK;AAAA,UACLA,EAAK;AAAA,UACLA,EAAK;AAAA,QAAA;AAGT,cAAM,YAAY;AACd,gBAAM,KAAKuD,GAAkBC,CAAa;AAAA,QAC9C;AACA;AAAA,MACJ;AAGA,YAAMO,IAAe,IAAIpD;AAAA,QACrBX,EAAK;AAAA,QACLA,EAAK;AAAA,QACLA,EAAK;AAAA,QACLA,EAAK,qBAAqB;AAAA,MAAA;AAI9B,UAAI4E,IAAY,GACZC,IAAU;AAEd,iBAAWC,KAAe9E,EAAK,sBAAsB;AACjD,QAAA6E,KAAWC,EAAY;AAEvB,cAAMd,IAA8B;AAAA,UAChC,YAAYc,EAAY;AAAA,UACxB,WAAWA,EAAY;AAAA,UACvB,WAAAF;AAAA,UACA,SAAAC;AAAA,QAAA;AAGJ,cAAM,YAAY;AACd,gBAAM,KAAKf,GAAiBC,GAAcC,CAAQ;AAAA,QACtD,GAEAY,IAAYC;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEAE,GAAW/B,GAA4B;AAEnC,YAAQA,EAAK,MAAA;AAAA,MACT,KAAK;AACD,eAAO,KAAKO;AAAA,UACRP,EAAK;AAAA,UACLA,EAAK;AAAA,QAAA;AAAA,MAEb,KAAK;AACD,eAAO,KAAKY;AAAA,UACRZ,EAAK;AAAA,UACLA,EAAK;AAAA,QAAA;AAAA,MAEb,KAAK;AACD,eAAO,KAAKc;AAAA,UACRd,EAAK;AAAA,UACLA,EAAK;AAAA,UACLA,EAAK;AAAA,QAAA;AAAA,MAEb,KAAK;AACD,eAAO,KAAKmB;AAAA,UACRnB,EAAK;AAAA,UACLA,EAAK;AAAA,QAAA;AAAA,MAEb;AAII,cAAM,IAAIgC;AAAA,UACN,8BAA+BhC,EAA0B,IAAI;AAAA,QAAA;AAAA,IAErE;AAAA,EAER;AAAA,EAEA,MAAMI,KAAiB;AACnB,UAAMH,wBAAc,IAAA;AAEpB,WACQ,MAAKX,GAAY,aADZ;AAGT,aAAO,CAAC,KAAKA,GAAY,aAAW;AAChC,cAAMU,IAAO,KAAKV,GAAY,QAAA;AAC9B,YAAI,CAACU,EAAM;AAEX,cAAMG,IAAmB,KAAK4B,GAAW/B,CAAI,EAAE;AAAA,UAAQ,MACnDC,EAAQ,OAAOE,CAAC;AAAA,QAAA;AAEpB,QAAAF,EAAQ,IAAIE,CAAC,GAETF,EAAQ,QAAQ,KAAKb,MACrB,MAAM,QAAQ,KAAKa,CAAO;AAAA,MAElC;AAEA,YAAM,QAAQ,IAAIA,CAAO;AAAA,IAC7B;AAAA,EACJ;AACJ;ACvXO,MAAMgC,IAAyB,OAClCjF,GACAyC,GACAC,GACAC,MACC;AACD,QAAMH,EAAY,CAACxC,CAAI,GAAGyC,GAASC,GAAQC,CAAW;AAC1D,GAEaH,IAA2B,OACpCrC,GACAsC,GACAC,GACAC,MACC;AAED,QADkB,IAAIV,EAAO9B,GAAOsC,GAASC,GAAQC,CAAW,EAChD,KAAA;AACpB,GCjBauC,IAAqC,CAACC,GAAWC,MAAgB;AAC1E,MAAID,EAAU,OAAOC,EAAY;AAC7B,UAAM,IAAIJ,EAAU,qCAAqC;AAG7D,SAAO;AAAA,IACH,GAAGI;AAAA,IACH,MAAMD,EAAU;AAAA,IAChB,MAAMA,EAAU;AAAA,EAAA;AAExB,GAEaE,IAAuC,CAChDC,GACAC,MACC;AACD,MAAID,EAAW,WAAWC,EAAa;AACnC,UAAM,IAAIP;AAAA,MACN,8BAA8BM,EAAW,MAAM,kBAAkBC,EAAa,MAAM;AAAA,IAAA;AAI5F,QAAMC,IAAiB,IAAI;AAAA,IACvBD,EAAa,IAAI,CAACE,MAAa,CAACA,EAAS,SAASA,CAAQ,CAAC;AAAA,EAAA;AAG/D,SAAOH,EAAW,IAAI,CAACH,MAAc;AACjC,UAAMC,IAAcI,EAAe,IAAIL,EAAU,EAAE;AACnD,QAAI,CAACC;AAGD,YAAM,IAAIJ;AAAA,QACN,kEAAkEG,EAAU,EAAE;AAAA,MAAA;AAGtF,WAAOD,EAAiBC,GAAWC,CAAW;AAAA,EAClD,CAAC;AACL;"}
|
|
1
|
+
{"version":3,"file":"uploadDetails","sources":["../../src/media/mediaInfo.ts","../../src/media/toUploadPayload.ts","../../src/media/types/apiResponse.ts","../../src/media/multipartUtil.ts","../../src/media/singlepartUtil.ts","../../src/media/uploadUtil.ts","../../src/media/upload.ts","../../src/media/uploadDetails.ts"],"sourcesContent":["import { v7 as uuidv7 } from \"uuid\";\nimport { MediaItemsLimit, MediaUploadLimit } from \"../constants\";\nimport {\n newMediaItemsLimitExceedError,\n newMediaTooLargeError,\n} from \"../errorSchema\";\nimport type { NewMediaInfo, NewMediaInfos } from \"./types\";\n\nexport const newMediaInfo: NewMediaInfo = (item) => {\n if (item.size > MediaUploadLimit) {\n newMediaTooLargeError(item.name, item.size, MediaUploadLimit);\n }\n\n return {\n id: uuidv7(),\n name: item.name,\n size: item.size,\n file: item,\n };\n};\n\nexport const newMediaInfos: NewMediaInfos = (items) => {\n if (items.length > MediaItemsLimit) {\n newMediaItemsLimitExceedError(items.length, MediaItemsLimit);\n }\n\n return items.map(newMediaInfo);\n};\n","import type { ToUploadPayload, ToUploadPayloads } from \"./types\";\n\nexport const toUploadPayload: ToUploadPayload = (item) => {\n return {\n id: item.id,\n size: item.size,\n name: item.name,\n };\n};\n\nexport const toUploadPayloads: ToUploadPayloads = (items) => {\n return items.map(toUploadPayload);\n};\n","import z from \"zod\";\n\nconst MultipartPartUploadSchema = z.object({\n presignPut: z.url(),\n partNumber: z.int().positive().lte(10000),\n partSize: z.int().positive().gt(0),\n});\n\nconst MultipartSchema = z.object({\n mediaID: z.uuidv7(),\n uploadType: z.literal(\"multipart\"),\n multipartPresignPart: z.array(MultipartPartUploadSchema).nonempty(),\n multipartSuccessCallback: z.url(),\n});\n\nconst SinglepartSchema = z.object({\n mediaID: z.uuidv7(),\n uploadType: z.literal(\"singlepart\"),\n presignPut: z.url(),\n singlepartSuccessCallback: z.url(),\n});\n\nexport const UploadDetailsAPIResSchema = z.discriminatedUnion(\"uploadType\", [\n MultipartSchema,\n SinglepartSchema,\n]);\n\nexport type UploadDetailsAPIRes = z.infer<typeof UploadDetailsAPIResSchema>;\n","import type { MultipartUploadedPartDetails } from \"./types\";\n\nexport class MultipartUtil {\n #id: string;\n #blob: Blob;\n #response: MultipartUploadedPartDetails[];\n #parts: Set<number>;\n #totalParts: number;\n #completeURL: string;\n #failed: boolean;\n #complete: boolean;\n\n constructor(\n id: string,\n blob: Blob,\n completeURL: string,\n totalParts: number\n ) {\n this.#id = id;\n this.#blob = blob;\n this.#response = [];\n this.#parts = new Set();\n this.#totalParts = totalParts;\n this.#completeURL = completeURL;\n this.#failed = false;\n this.#complete = false;\n }\n\n get failed(): boolean {\n return this.#failed;\n }\n\n fail() {\n this.#failed = true;\n }\n\n get id(): string {\n return this.#id;\n }\n\n get completeURL(): string {\n return this.#completeURL;\n }\n\n get blob(): Blob {\n return this.#blob;\n }\n\n add(itemRes: MultipartUploadedPartDetails) {\n if (this.contains(itemRes.partNumber)) {\n return;\n }\n\n this.#response.push(itemRes);\n this.#parts.add(itemRes.partNumber);\n }\n\n contains(partNumber: number): boolean {\n return this.#parts.has(partNumber);\n }\n\n get list(): MultipartUploadedPartDetails[] {\n return this.#response\n .slice()\n .sort((a, b) => a.partNumber - b.partNumber);\n }\n\n get canComplete(): boolean {\n return !this.failed && this.#parts.size === this.#totalParts;\n }\n\n tryStartComplete(): boolean {\n if (this.#complete || !this.canComplete) return false;\n\n this.#complete = true;\n return true;\n }\n\n resetComplete() {\n this.#complete = false;\n }\n\n get totalPartsCount(): number {\n return this.#totalParts;\n }\n\n get uploadedPartsCount(): number {\n return this.#parts.size;\n }\n}\n","export class SinglepartUtil {\n #id: string;\n #blob: Blob;\n #uploadURL: string;\n #completeURL: string;\n #canComplete: boolean;\n\n constructor(\n id: string,\n blob: Blob,\n uploadURL: string,\n completeURL: string\n ) {\n this.#id = id;\n this.#blob = blob;\n this.#completeURL = completeURL;\n this.#uploadURL = uploadURL;\n this.#canComplete = false;\n }\n\n get canComplete(): boolean {\n return this.#canComplete;\n }\n\n allowComplete() {\n this.#canComplete = true;\n }\n\n get id(): string {\n return this.#id;\n }\n\n get blob(): Blob {\n return this.#blob;\n }\n\n get completeURL(): string {\n return this.#completeURL;\n }\n\n get uploadURL(): string {\n return this.#uploadURL;\n }\n}\n","import { Queue } from \"@datastructures-js/queue\";\nimport {\n httpMethods,\n httpReqHeaders,\n httpRequestCredentials,\n} from \"../constants\";\nimport { mediaCodes } from \"../errorCodes\";\nimport { ApplicationError, BaseError } from \"../errors\";\nimport { decodeAPIResponse } from \"../response\";\nimport { MultipartUtil } from \"./multipartUtil\";\nimport { SinglepartUtil } from \"./singlepartUtil\";\nimport type {\n LifecycleHandler,\n MultipartPartInfo,\n MultipartUploadedPartDetails,\n Retry,\n UploadDetails,\n UploadLimits,\n} from \"./types\";\n\nconst defaultUploadLimit: UploadLimits = {\n concurrentUploads: 4,\n retryLimit: 3,\n};\n\nexport class Upload {\n #items: UploadDetails[];\n #lifecycleHandler: LifecycleHandler;\n #concurrentUploads: number;\n #retryLimit: number;\n #retryQueue: Queue<Retry>;\n #languageTag?: string;\n\n constructor(\n uploadItems: UploadDetails[],\n handler: LifecycleHandler,\n limits: UploadLimits = defaultUploadLimit,\n languageTag?: string\n ) {\n this.#items = uploadItems;\n this.#lifecycleHandler = handler;\n this.#concurrentUploads = limits.concurrentUploads;\n this.#retryLimit = limits.retryLimit;\n this.#retryQueue = new Queue();\n this.#languageTag = languageTag;\n }\n\n #canRetry(currentCount: number): boolean {\n return currentCount < this.#retryLimit;\n }\n\n #addRetry(task: Retry) {\n this.#retryQueue.enqueue(task);\n }\n\n async init() {\n this.#lifecycleHandler.init(this.#items);\n\n const running = new Set<Promise<void>>();\n for await (const task of this.#generateTasks()) {\n const p = task().finally(() => running.delete(p));\n running.add(p);\n\n if (running.size >= this.#concurrentUploads) {\n await Promise.race(running);\n }\n }\n\n // wait for all initial task to complete\n await Promise.all(running);\n\n // complete retry action\n await this.#handleRetries();\n\n this.#lifecycleHandler.completed();\n }\n\n async #blobUpload(uploadURL: string, blob: Blob): Promise<Response> {\n return await fetch(uploadURL, {\n method: httpMethods.put,\n body: blob,\n });\n }\n\n async #singlepartUpload(\n singlepartObj: SinglepartUtil,\n retryCount: number = 0\n ) {\n if (singlepartObj.canComplete) {\n return;\n }\n\n try {\n const res = await this.#blobUpload(\n singlepartObj.uploadURL,\n singlepartObj.blob\n );\n if (!res.ok) {\n throw new ApplicationError(mediaCodes.singlepartUploadFailed, {\n mediaID: singlepartObj.id,\n });\n }\n\n singlepartObj.allowComplete();\n await this.#completeSinglepartUpload(singlepartObj);\n } catch (err) {\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.uploadRetrying(singlepartObj.id);\n this.#addRetry({\n type: \"singlepart-upload\",\n retryCount: retryCount + 1,\n singlepartObj: singlepartObj,\n });\n } else {\n this.#lifecycleHandler.failed(singlepartObj.id, err);\n }\n }\n }\n\n async #multipartUpload(\n multipartObj: MultipartUtil,\n partInfo: MultipartPartInfo,\n retryCount: number = 0\n ) {\n if (multipartObj.failed || multipartObj.contains(partInfo.partNumber)) {\n return;\n }\n\n try {\n const res = await this.#blobUpload(\n partInfo.uploadURL,\n multipartObj.blob.slice(partInfo.startByte, partInfo.endByte)\n );\n if (!res.ok) {\n throw new ApplicationError(\n mediaCodes.multipartPartUploadFailed,\n {\n mediaID: multipartObj.id,\n partNumber: partInfo.partNumber,\n }\n );\n }\n\n const etag = res.headers.get(\"ETag\");\n if (!etag) {\n throw new ApplicationError(mediaCodes.missingETagValue, {\n mediaID: multipartObj.id,\n partNumber: partInfo.partNumber,\n });\n }\n\n multipartObj.add({\n partNumber: partInfo.partNumber,\n etag: etag,\n });\n\n this.#lifecycleHandler.multipartPartUploaded(\n multipartObj.id,\n multipartObj.uploadedPartsCount,\n multipartObj.totalPartsCount\n );\n\n if (!multipartObj.canComplete) return;\n await this.#completeMultipartUpload(multipartObj);\n } catch (err) {\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.multipartPartUploadRetrying(\n multipartObj.id,\n partInfo.partNumber\n );\n\n this.#addRetry({\n type: \"multipart-part-upload\",\n retryCount: retryCount + 1,\n multipartObj: multipartObj,\n partInfo: partInfo,\n });\n } else {\n multipartObj.fail();\n this.#lifecycleHandler.failed(multipartObj.id, err);\n }\n }\n }\n\n async #completeUpload(\n completeURL: string,\n body?: MultipartUploadedPartDetails[]\n ) {\n let reqBody: BodyInit | undefined;\n let headers: Record<string, string> | undefined;\n if (body) {\n reqBody = JSON.stringify({\n partsInfo: body,\n });\n\n headers = {\n [httpReqHeaders.contentType.key]:\n httpReqHeaders.contentType.valueApplicationJSON,\n };\n }\n\n if (this.#languageTag) {\n headers = headers || {};\n headers[httpReqHeaders.userLocale.key] = this.#languageTag;\n }\n\n const apiRes = await fetch(completeURL, {\n method: httpMethods.post,\n body: reqBody,\n headers: headers,\n credentials: httpRequestCredentials.include,\n });\n await decodeAPIResponse(apiRes);\n }\n\n async #completeSinglepartUpload(\n singlepartObj: SinglepartUtil,\n retryCount: number = 0\n ) {\n if (!singlepartObj.canComplete) {\n return;\n }\n\n try {\n await this.#completeUpload(singlepartObj.completeURL);\n\n this.#lifecycleHandler.itemUploaded(singlepartObj.id);\n } catch (err) {\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.uploadRetrying(singlepartObj.id);\n this.#addRetry({\n type: \"singlepart-complete\",\n retryCount: retryCount + 1,\n singlepartObj: singlepartObj,\n });\n } else {\n this.#lifecycleHandler.failed(singlepartObj.id, err);\n }\n }\n }\n\n async #completeMultipartUpload(\n multipartObj: MultipartUtil,\n retryCount: number = 0\n ) {\n if (!multipartObj.tryStartComplete()) {\n return;\n }\n\n try {\n await this.#completeUpload(\n multipartObj.completeURL,\n multipartObj.list\n );\n\n this.#lifecycleHandler.itemUploaded(multipartObj.id);\n } catch (err) {\n multipartObj.resetComplete();\n\n if (this.#canRetry(retryCount)) {\n this.#lifecycleHandler.uploadRetrying(multipartObj.id);\n this.#addRetry({\n type: \"multipart-complete\",\n retryCount: retryCount + 1,\n multipartObj: multipartObj,\n });\n } else {\n multipartObj.fail();\n this.#lifecycleHandler.failed(multipartObj.id, err);\n }\n }\n }\n\n async *#generateTasks(): AsyncGenerator<() => Promise<void>> {\n for (const item of this.#items) {\n if (item.uploadType === \"singlepart\") {\n const singlepartObj = new SinglepartUtil(\n item.mediaID,\n item.file,\n item.presignPut,\n item.singlepartSuccessCallback\n );\n\n yield async () => {\n await this.#singlepartUpload(singlepartObj);\n };\n continue;\n }\n\n // multipart\n const multipartObj = new MultipartUtil(\n item.mediaID,\n item.file,\n item.multipartSuccessCallback,\n item.multipartPresignPart.length\n );\n\n // file slice byte range\n let startByte = 0;\n let endByte = 0;\n\n for (const partDetails of item.multipartPresignPart) {\n endByte += partDetails.partSize;\n\n const partInfo: MultipartPartInfo = {\n partNumber: partDetails.partNumber,\n uploadURL: partDetails.presignPut,\n startByte: startByte,\n endByte: endByte,\n };\n\n yield async () => {\n await this.#multipartUpload(multipartObj, partInfo);\n };\n\n startByte = endByte;\n }\n }\n }\n\n #retryTask(task: Retry): Promise<void> {\n // promise assignment\n switch (task.type) {\n case \"singlepart-upload\":\n return this.#singlepartUpload(\n task.singlepartObj,\n task.retryCount\n );\n case \"singlepart-complete\":\n return this.#completeSinglepartUpload(\n task.singlepartObj,\n task.retryCount\n );\n case \"multipart-part-upload\":\n return this.#multipartUpload(\n task.multipartObj,\n task.partInfo,\n task.retryCount\n );\n case \"multipart-complete\":\n return this.#completeMultipartUpload(\n task.multipartObj,\n task.retryCount\n );\n default: {\n const _exhaustiveCheck: never = task;\n void _exhaustiveCheck;\n\n throw new BaseError(\n `Unhandled retry task type: ${(task as { type: string }).type}`\n );\n }\n }\n }\n\n async #handleRetries() {\n const running = new Set<Promise<void>>();\n\n while (true) {\n if (this.#retryQueue.isEmpty()) break;\n\n while (!this.#retryQueue.isEmpty()) {\n const task = this.#retryQueue.dequeue();\n if (!task) break;\n\n const p: Promise<void> = this.#retryTask(task).finally(() =>\n running.delete(p)\n );\n running.add(p);\n\n if (running.size >= this.#concurrentUploads) {\n await Promise.race(running);\n }\n }\n\n await Promise.all(running);\n }\n }\n}\n","import type { UploadItem, UploadItems } from \"./types\";\nimport { Upload } from \"./uploadUtil\";\n\nexport const uploadItem: UploadItem = async (\n item,\n handler,\n limits,\n languageTag\n) => {\n await uploadItems([item], handler, limits, languageTag);\n};\n\nexport const uploadItems: UploadItems = async (\n items,\n handler,\n limits,\n languageTag\n) => {\n const uploadObj = new Upload(items, handler, limits, languageTag);\n await uploadObj.init();\n};\n","import { BaseError } from \"../errors\";\nimport type { NewUploadDetails, NewUploadsDetails } from \"./types\";\n\nexport const newUploadDetails: NewUploadDetails = (mediaInfo, apiResponse) => {\n if (mediaInfo.id !== apiResponse.mediaID) {\n throw new BaseError(\"media item and response id mismatch\");\n }\n\n return {\n ...apiResponse,\n file: mediaInfo.file,\n size: mediaInfo.size,\n };\n};\n\nexport const newUploadsDetails: NewUploadsDetails = (\n mediaInfos,\n apiResponses\n) => {\n if (mediaInfos.length !== apiResponses.length) {\n throw new BaseError(\n `items mismatch: mediaInfos=${mediaInfos.length}, apiResponses=${apiResponses.length}`\n );\n }\n\n const apiResponseMap = new Map(\n apiResponses.map((response) => [response.mediaID, response])\n );\n\n return mediaInfos.map((mediaInfo) => {\n const apiResponse = apiResponseMap.get(mediaInfo.id);\n if (!apiResponse) {\n // This case should not happen if lengths are equal and IDs are unique,\n // but it's good practice to handle it defensively.\n throw new BaseError(\n `Could not find a matching API response for media info with id: ${mediaInfo.id}`\n );\n }\n return newUploadDetails(mediaInfo, apiResponse);\n });\n};\n"],"names":["newMediaInfo","item","MediaUploadLimit","newMediaTooLargeError","uuidv7","newMediaInfos","items","MediaItemsLimit","newMediaItemsLimitExceedError","toUploadPayload","toUploadPayloads","MultipartPartUploadSchema","z","MultipartSchema","SinglepartSchema","UploadDetailsAPIResSchema","MultipartUtil","#id","#blob","#response","#parts","#totalParts","#completeURL","#failed","#complete","id","blob","completeURL","totalParts","itemRes","partNumber","a","b","SinglepartUtil","#uploadURL","#canComplete","uploadURL","defaultUploadLimit","Upload","#items","#lifecycleHandler","#concurrentUploads","#retryLimit","#retryQueue","#languageTag","uploadItems","handler","limits","languageTag","Queue","#canRetry","currentCount","#addRetry","task","running","#generateTasks","p","#handleRetries","#blobUpload","httpMethods","#singlepartUpload","singlepartObj","retryCount","ApplicationError","mediaCodes","#completeSinglepartUpload","err","#multipartUpload","multipartObj","partInfo","res","etag","#completeMultipartUpload","#completeUpload","body","reqBody","headers","httpReqHeaders","apiRes","httpRequestCredentials","decodeAPIResponse","startByte","endByte","partDetails","#retryTask","BaseError","uploadItem","newUploadDetails","mediaInfo","apiResponse","newUploadsDetails","mediaInfos","apiResponses","apiResponseMap","response"],"mappings":"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"}
|
package/dist/constants/index.js
CHANGED
|
@@ -8,7 +8,7 @@ const e = {
|
|
|
8
8
|
include: "include",
|
|
9
9
|
sameOrigin: "same-origin",
|
|
10
10
|
omit: "omit"
|
|
11
|
-
},
|
|
11
|
+
}, i = {
|
|
12
12
|
contentType: {
|
|
13
13
|
key: "Content-Type",
|
|
14
14
|
valueApplicationJSON: "application/json"
|
|
@@ -21,10 +21,12 @@ const e = {
|
|
|
21
21
|
userLocale: {
|
|
22
22
|
key: "x-user-locale"
|
|
23
23
|
}
|
|
24
|
-
};
|
|
24
|
+
}, o = 100, a = 1e4 * (10 << 20);
|
|
25
25
|
export {
|
|
26
|
+
o as MediaItemsLimit,
|
|
27
|
+
a as MediaUploadLimit,
|
|
26
28
|
e as httpMethods,
|
|
27
|
-
|
|
29
|
+
i as httpReqHeaders,
|
|
28
30
|
t as httpRequestCredentials
|
|
29
31
|
};
|
|
30
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/constants/http_methods.ts","../../src/constants/httpRequestCredentials.ts","../../src/constants/httpRequestHeaders.ts"],"sourcesContent":["export const httpMethods = {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\",\n} as const;\n","export const httpRequestCredentials: Record<string, RequestCredentials> = {\n include: \"include\",\n sameOrigin: \"same-origin\",\n omit: \"omit\",\n} as const;\n","export const httpReqHeaders = {\n contentType: {\n key: \"Content-Type\",\n valueApplicationJSON: \"application/json\",\n },\n authorization: {\n key: \"Authorization\",\n schemeBearer: \"Bearer\",\n schemeBasic: \"Basic\",\n },\n userLocale: {\n key: \"x-user-locale\",\n },\n} as const;\n"],"names":["httpMethods","httpRequestCredentials","httpReqHeaders"],"mappings":"AAAO,MAAMA,IAAc;AAAA,EACvB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AACZ,GCNaC,IAA6D;AAAA,EACtE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,MAAM;AACV,GCJaC,IAAiB;AAAA,EAC1B,aAAa;AAAA,IACT,KAAK;AAAA,IACL,sBAAsB;AAAA,EAAA;AAAA,EAE1B,eAAe;AAAA,IACX,KAAK;AAAA,IACL,cAAc;AAAA,IACd,aAAa;AAAA,EAAA;AAAA,EAEjB,YAAY;AAAA,IACR,KAAK;AAAA,EAAA;AAEb;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/constants/http_methods.ts","../../src/constants/httpRequestCredentials.ts","../../src/constants/httpRequestHeaders.ts","../../src/constants/media_limits.ts"],"sourcesContent":["export const httpMethods = {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\",\n} as const;\n","export const httpRequestCredentials: Record<string, RequestCredentials> = {\n include: \"include\",\n sameOrigin: \"same-origin\",\n omit: \"omit\",\n} as const;\n","export const httpReqHeaders = {\n contentType: {\n key: \"Content-Type\",\n valueApplicationJSON: \"application/json\",\n },\n authorization: {\n key: \"Authorization\",\n schemeBearer: \"Bearer\",\n schemeBasic: \"Basic\",\n },\n userLocale: {\n key: \"x-user-locale\",\n },\n} as const;\n","export const MediaItemsLimit = 100;\n\n// 10k parts each part 10 mega byte\nexport const MediaUploadLimit = 10000 * (10 << 20);\n"],"names":["httpMethods","httpRequestCredentials","httpReqHeaders","MediaItemsLimit","MediaUploadLimit"],"mappings":"AAAO,MAAMA,IAAc;AAAA,EACvB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AACZ,GCNaC,IAA6D;AAAA,EACtE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,MAAM;AACV,GCJaC,IAAiB;AAAA,EAC1B,aAAa;AAAA,IACT,KAAK;AAAA,IACL,sBAAsB;AAAA,EAAA;AAAA,EAE1B,eAAe;AAAA,IACX,KAAK;AAAA,IACL,cAAc;AAAA,IACd,aAAa;AAAA,EAAA;AAAA,EAEjB,YAAY;AAAA,IACR,KAAK;AAAA,EAAA;AAEb,GCbaC,IAAkB,KAGlBC,IAAmB,OAAS,MAAM;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ErrorNormalization } from '../errors';
|
|
1
2
|
export declare const authCodes: {
|
|
2
3
|
readonly invalidApiKey: "invalid-api-key";
|
|
3
4
|
readonly userNotFound: "user-not-found";
|
|
@@ -12,3 +13,5 @@ export declare const authCodes: {
|
|
|
12
13
|
readonly userDisabled: "user-disabled";
|
|
13
14
|
readonly tokenNotFound: "token-not-found";
|
|
14
15
|
};
|
|
16
|
+
export declare const authOverrides: ErrorNormalization;
|
|
17
|
+
export declare const signedURLOverrides: ErrorNormalization;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ErrorNormalization } from '../errors';
|
|
1
2
|
export declare const commonCodes: {
|
|
2
3
|
readonly invalidId: "invalid-id";
|
|
3
4
|
readonly routeNotFound: "route-not-found";
|
|
@@ -6,3 +7,4 @@ export declare const commonCodes: {
|
|
|
6
7
|
readonly unexpectedError: "unexpected-error";
|
|
7
8
|
readonly zodError: "zod-error";
|
|
8
9
|
};
|
|
10
|
+
export declare const commonOverrides: ErrorNormalization;
|
package/dist/errorCodes/iam.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { ErrorNormalization } from '../errors';
|
|
1
2
|
export declare const iamCodes: {
|
|
2
3
|
readonly selfPermissionMismatch: "self-permission-mismatch";
|
|
3
4
|
readonly invalidActor: "invalid-actor";
|
|
4
5
|
readonly permissionExplicitlyDenied: "permission-explicitly-denied";
|
|
5
6
|
readonly missingPermission: "missing-permission";
|
|
6
7
|
};
|
|
8
|
+
export declare const iamOverrides: ErrorNormalization;
|