@adgytec/adgytec-web-utils 0.0.4 → 0.0.6

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 (52) hide show
  1. package/dist/chunks/create +24 -0
  2. package/dist/chunks/create.map +1 -0
  3. package/dist/chunks/decode +24 -23
  4. package/dist/chunks/decode.map +1 -0
  5. package/dist/chunks/formParse +1 -0
  6. package/dist/chunks/formParse.map +1 -0
  7. package/dist/chunks/parse +30 -12
  8. package/dist/chunks/parse.map +1 -0
  9. package/dist/chunks/schema +270 -244
  10. package/dist/chunks/schema.map +1 -0
  11. package/dist/chunks/server +148 -0
  12. package/dist/chunks/server.map +1 -0
  13. package/dist/chunks/{upload → uploadDetails} +120 -118
  14. package/dist/chunks/uploadDetails.map +1 -0
  15. package/dist/constants/index.d.ts +2 -1
  16. package/dist/constants/index.js +10 -7
  17. package/dist/constants/index.js.map +1 -0
  18. package/dist/constants/media_limits.d.ts +2 -0
  19. package/dist/errorCodes/auth.d.ts +3 -0
  20. package/dist/errorCodes/common.d.ts +2 -0
  21. package/dist/errorCodes/iam.d.ts +2 -0
  22. package/dist/errorCodes/index.d.ts +6 -5
  23. package/dist/errorCodes/index.js +32 -85
  24. package/dist/errorCodes/index.js.map +1 -0
  25. package/dist/errorCodes/media.d.ts +2 -0
  26. package/dist/errorCodes/overrides.d.ts +2 -0
  27. package/dist/errorCodes/pagination.d.ts +2 -0
  28. package/dist/errorCodes/reqBody.d.ts +2 -0
  29. package/dist/errorCodes/server.d.ts +2 -0
  30. package/dist/errorSchema/create.d.ts +2 -0
  31. package/dist/errorSchema/index.d.ts +7 -6
  32. package/dist/errorSchema/index.js +32 -28
  33. package/dist/errorSchema/index.js.map +1 -0
  34. package/dist/errorSchema/media.d.ts +1 -1
  35. package/dist/errorSchema/schema.d.ts +1 -1
  36. package/dist/errors/index.d.ts +2 -1
  37. package/dist/errors/index.js +5 -3
  38. package/dist/errors/index.js.map +1 -0
  39. package/dist/errors/normalization.d.ts +12 -0
  40. package/dist/errors/parse.d.ts +2 -3
  41. package/dist/index.js +115 -99
  42. package/dist/index.js.map +1 -0
  43. package/dist/media/index.d.ts +2 -2
  44. package/dist/media/index.js +2 -1
  45. package/dist/media/index.js.map +1 -0
  46. package/dist/media/mediaInfo.d.ts +1 -1
  47. package/dist/media/types/index.d.ts +3 -3
  48. package/dist/media/upload.d.ts +1 -1
  49. package/dist/response/index.js +1 -0
  50. package/dist/response/index.js.map +1 -0
  51. package/package.json +13 -6
  52. package/dist/chunks/applicationError +0 -28
@@ -0,0 +1,148 @@
1
+ const i = {
2
+ invalidApiKey: "invalid-api-key",
3
+ userNotFound: "user-not-found",
4
+ jwtNotAcceptable: "jwt-not-acceptable",
5
+ invalidSignedUrl: "invalid-signed-url",
6
+ hashMismatch: "hash-mismatch",
7
+ invalidAuthHeaderValue: "invalid-auth-header-value",
8
+ unsupportedAuthScheme: "unsupported-auth-scheme",
9
+ organizationStatusBad: "bad-org-status",
10
+ userNotExistsInOrganizationManagement: "user-not-exists-in-organization-management",
11
+ userNotExistInOrganization: "user-not-exists-in-organization",
12
+ userDisabled: "user-disabled",
13
+ tokenNotFound: "token-not-found"
14
+ }, d = {
15
+ code: "auth-error",
16
+ items: [
17
+ i.invalidApiKey,
18
+ i.jwtNotAcceptable,
19
+ i.invalidAuthHeaderValue,
20
+ i.unsupportedAuthScheme,
21
+ i.tokenNotFound
22
+ ]
23
+ }, s = {
24
+ code: i.invalidSignedUrl,
25
+ items: [i.hashMismatch]
26
+ }, e = {
27
+ invalidId: "invalid-id",
28
+ routeNotFound: "route-not-found",
29
+ methodNotAllowed: "method-not-allowed",
30
+ networkError: "network-error",
31
+ unexpectedError: "unexpected-error",
32
+ zodError: "zod-error"
33
+ }, l = {
34
+ code: e.unexpectedError,
35
+ items: [
36
+ e.invalidId,
37
+ e.routeNotFound,
38
+ e.methodNotAllowed,
39
+ e.zodError
40
+ ]
41
+ }, u = {
42
+ formValidationFailed: "validation-failed"
43
+ }, m = {
44
+ missing: "missing",
45
+ overflow: "overflow",
46
+ underflow: "underflow",
47
+ length: "length",
48
+ invalid: "invalid",
49
+ unknown: "unknown"
50
+ }, p = {
51
+ invalidValue: "invalid-value",
52
+ invalidEnumValue: "invalid-enum-value",
53
+ requireHttps: "require-https",
54
+ missingHost: "missing-host",
55
+ containsPath: "contains-path",
56
+ containsQuery: "contains-query",
57
+ containsFragment: "contains-fragment",
58
+ absoluteUrl: "absolute-url",
59
+ nilID: "nil-id",
60
+ invalidEmail: "invalid-email",
61
+ missingMxRecords: "missing-mx-records",
62
+ notDigit: "not-digit",
63
+ notBase64UrlEncoded: "not-base64-url-encoded",
64
+ invalidUrl: "invalid-url",
65
+ nullValue: "null-value"
66
+ }, r = {
67
+ selfPermissionMismatch: "self-permission-mismatch",
68
+ invalidActor: "invalid-actor",
69
+ permissionExplicitlyDenied: "permission-explicitly-denied",
70
+ missingPermission: "missing-permission"
71
+ }, c = {
72
+ code: "authorization-error",
73
+ items: [r.selfPermissionMismatch, r.invalidActor]
74
+ }, o = {
75
+ invalidMultipartNumber: "invalid-multipart-upload-part-number",
76
+ mediaObjectNotFound: "object-not-found",
77
+ mediaTooLarge: "media-too-large",
78
+ mediaItemsLimitExceeded: "media-items-limit-exceeded",
79
+ uploadAlreadyCompleted: "upload-already-completed",
80
+ unsupportedObjectUploaded: "unsupported-object-uploaded",
81
+ completeMultipartUploadCalledTooSoon: "complete-multipart-upload-called-too-soon",
82
+ singlepartUploadFailed: "singlepart-upload-failed",
83
+ multipartPartUploadFailed: "multipart-part-upload-failed",
84
+ missingETagValue: "missing-etag-value"
85
+ }, v = {
86
+ code: "media-upload-error",
87
+ items: [
88
+ o.invalidMultipartNumber,
89
+ o.uploadAlreadyCompleted,
90
+ o.unsupportedObjectUploaded,
91
+ o.completeMultipartUploadCalledTooSoon,
92
+ o.singlepartUploadFailed,
93
+ o.multipartPartUploadFailed,
94
+ o.missingETagValue
95
+ ]
96
+ }, t = {
97
+ invalidCursorValue: "invalid-cursor-value"
98
+ }, g = {
99
+ code: e.unexpectedError,
100
+ items: [t.invalidCursorValue]
101
+ }, a = {
102
+ invalidRequestBody: "invalid-request-body",
103
+ unknownFieldInRequestBody: "unknown-field-in-request-body",
104
+ emptyRequestBody: "empty-request-body",
105
+ requestBodyTooLarge: "request-body-too-large"
106
+ }, h = {
107
+ code: e.unexpectedError,
108
+ items: [
109
+ a.invalidRequestBody,
110
+ a.unknownFieldInRequestBody,
111
+ a.emptyRequestBody,
112
+ a.requestBodyTooLarge
113
+ ]
114
+ }, n = {
115
+ malformedResponseBody: "malformed-response-body",
116
+ malformedJsonFromServer: "malformed-json-from-server",
117
+ invalidResponseShape: "invalid-response-shape",
118
+ unknownServerError: "unknown-server-error",
119
+ internalServerError: "internal-server-error"
120
+ }, y = {
121
+ code: e.unexpectedError,
122
+ items: [
123
+ n.malformedJsonFromServer,
124
+ n.malformedResponseBody,
125
+ n.invalidResponseShape
126
+ ]
127
+ };
128
+ export {
129
+ i as a,
130
+ d as b,
131
+ e as c,
132
+ l as d,
133
+ p as e,
134
+ u as f,
135
+ m as g,
136
+ c as h,
137
+ r as i,
138
+ v as j,
139
+ g as k,
140
+ a as l,
141
+ o as m,
142
+ y as n,
143
+ s as o,
144
+ t as p,
145
+ h as r,
146
+ n as s
147
+ };
148
+ //# sourceMappingURL=server.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server","sources":["../../src/errorCodes/auth.ts","../../src/errorCodes/common.ts","../../src/errorCodes/form.ts","../../src/errorCodes/iam.ts","../../src/errorCodes/media.ts","../../src/errorCodes/pagination.ts","../../src/errorCodes/reqBody.ts","../../src/errorCodes/server.ts"],"sourcesContent":["import type { ErrorNormalization } from \"../errors\";\n\nexport const authCodes = {\n invalidApiKey: \"invalid-api-key\",\n userNotFound: \"user-not-found\",\n jwtNotAcceptable: \"jwt-not-acceptable\",\n invalidSignedUrl: \"invalid-signed-url\",\n hashMismatch: \"hash-mismatch\",\n invalidAuthHeaderValue: \"invalid-auth-header-value\",\n unsupportedAuthScheme: \"unsupported-auth-scheme\",\n organizationStatusBad: \"bad-org-status\",\n userNotExistsInOrganizationManagement:\n \"user-not-exists-in-organization-management\",\n userNotExistInOrganization: \"user-not-exists-in-organization\",\n userDisabled: \"user-disabled\",\n tokenNotFound: \"token-not-found\",\n} as const;\n\nexport const authOverrides: ErrorNormalization = {\n code: \"auth-error\",\n items: [\n authCodes.invalidApiKey,\n authCodes.jwtNotAcceptable,\n authCodes.invalidAuthHeaderValue,\n authCodes.unsupportedAuthScheme,\n authCodes.tokenNotFound,\n ],\n} as const;\n\nexport const signedURLOverrides: ErrorNormalization = {\n code: authCodes.invalidSignedUrl,\n items: [authCodes.hashMismatch],\n} as const;\n","import type { ErrorNormalization } from \"../errors\";\n\nexport const commonCodes = {\n invalidId: \"invalid-id\",\n routeNotFound: \"route-not-found\",\n methodNotAllowed: \"method-not-allowed\",\n networkError: \"network-error\",\n unexpectedError: \"unexpected-error\",\n zodError: \"zod-error\",\n} as const;\n\nexport const commonOverrides: ErrorNormalization = {\n code: commonCodes.unexpectedError,\n items: [\n commonCodes.invalidId,\n commonCodes.routeNotFound,\n commonCodes.methodNotAllowed,\n commonCodes.zodError,\n ],\n} as const;\n","export const formCodes = {\n formValidationFailed: \"validation-failed\",\n} as const;\n\nexport const formFieldTypes = {\n missing: \"missing\",\n overflow: \"overflow\",\n underflow: \"underflow\",\n length: \"length\",\n invalid: \"invalid\",\n unknown: \"unknown\",\n} as const;\n\nexport const formFieldInvalidTypeCauses = {\n invalidValue: \"invalid-value\",\n invalidEnumValue: \"invalid-enum-value\",\n requireHttps: \"require-https\",\n missingHost: \"missing-host\",\n containsPath: \"contains-path\",\n containsQuery: \"contains-query\",\n containsFragment: \"contains-fragment\",\n absoluteUrl: \"absolute-url\",\n nilID: \"nil-id\",\n invalidEmail: \"invalid-email\",\n missingMxRecords: \"missing-mx-records\",\n notDigit: \"not-digit\",\n notBase64UrlEncoded: \"not-base64-url-encoded\",\n invalidUrl: \"invalid-url\",\n nullValue: \"null-value\",\n} as const;\n","import type { ErrorNormalization } from \"../errors\";\n\nexport const iamCodes = {\n selfPermissionMismatch: \"self-permission-mismatch\",\n invalidActor: \"invalid-actor\",\n permissionExplicitlyDenied: \"permission-explicitly-denied\",\n missingPermission: \"missing-permission\",\n} as const;\n\nexport const iamOverrides: ErrorNormalization = {\n code: \"authorization-error\",\n items: [iamCodes.selfPermissionMismatch, iamCodes.invalidActor],\n} as const;\n","import type { ErrorNormalization } from \"../errors\";\n\nexport const mediaCodes = {\n invalidMultipartNumber: \"invalid-multipart-upload-part-number\",\n mediaObjectNotFound: \"object-not-found\",\n mediaTooLarge: \"media-too-large\",\n mediaItemsLimitExceeded: \"media-items-limit-exceeded\",\n uploadAlreadyCompleted: \"upload-already-completed\",\n unsupportedObjectUploaded: \"unsupported-object-uploaded\",\n completeMultipartUploadCalledTooSoon:\n \"complete-multipart-upload-called-too-soon\",\n\n singlepartUploadFailed: \"singlepart-upload-failed\",\n multipartPartUploadFailed: \"multipart-part-upload-failed\",\n missingETagValue: \"missing-etag-value\",\n} as const;\n\nexport const mediaOverrides: ErrorNormalization = {\n code: \"media-upload-error\",\n items: [\n mediaCodes.invalidMultipartNumber,\n mediaCodes.uploadAlreadyCompleted,\n mediaCodes.unsupportedObjectUploaded,\n mediaCodes.completeMultipartUploadCalledTooSoon,\n mediaCodes.singlepartUploadFailed,\n mediaCodes.multipartPartUploadFailed,\n mediaCodes.missingETagValue,\n ],\n} as const;\n","import type { ErrorNormalization } from \"../errors\";\nimport { commonCodes } from \"./common\";\n\nexport const paginationCodes = {\n invalidCursorValue: \"invalid-cursor-value\",\n} as const;\n\nexport const paginationOverrides: ErrorNormalization = {\n code: commonCodes.unexpectedError,\n items: [paginationCodes.invalidCursorValue],\n} as const;\n","import type { ErrorNormalization } from \"../errors\";\nimport { commonCodes } from \"./common\";\n\nexport const requestBodyCodes = {\n invalidRequestBody: \"invalid-request-body\",\n unknownFieldInRequestBody: \"unknown-field-in-request-body\",\n emptyRequestBody: \"empty-request-body\",\n requestBodyTooLarge: \"request-body-too-large\",\n} as const;\n\nexport const reqBodyOverrides: ErrorNormalization = {\n code: commonCodes.unexpectedError,\n items: [\n requestBodyCodes.invalidRequestBody,\n requestBodyCodes.unknownFieldInRequestBody,\n requestBodyCodes.emptyRequestBody,\n requestBodyCodes.requestBodyTooLarge,\n ],\n} as const;\n","import type { ErrorNormalization } from \"../errors\";\nimport { commonCodes } from \"./common\";\n\nexport const serverCodes = {\n malformedResponseBody: \"malformed-response-body\",\n malformedJsonFromServer: \"malformed-json-from-server\",\n invalidResponseShape: \"invalid-response-shape\",\n unknownServerError: \"unknown-server-error\",\n internalServerError: \"internal-server-error\",\n} as const;\n\nexport const serverOverrides: ErrorNormalization = {\n code: commonCodes.unexpectedError,\n items: [\n serverCodes.malformedJsonFromServer,\n serverCodes.malformedResponseBody,\n serverCodes.invalidResponseShape,\n ],\n} as const;\n"],"names":["authCodes","authOverrides","signedURLOverrides","commonCodes","commonOverrides","formCodes","formFieldTypes","formFieldInvalidTypeCauses","iamCodes","iamOverrides","mediaCodes","mediaOverrides","paginationCodes","paginationOverrides","requestBodyCodes","reqBodyOverrides","serverCodes","serverOverrides"],"mappings":"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"}
@@ -1,72 +1,49 @@
1
- import r from "zod";
2
- import { v7 as u } from "uuid";
3
- import { B as n, A as l } from "./applicationError";
4
- import { Queue as m } from "@datastructures-js/queue";
5
- import { d as y } from "./decode";
6
- import { httpMethods as c, httpReqHeaders as d, httpRequestCredentials as f } from "../constants/index.js";
7
- import { mediaCodes as p } from "../errorCodes/index.js";
8
- const w = r.object({
9
- presignPut: r.url(),
10
- partNumber: r.int().positive().lte(1e4),
11
- partSize: r.int().positive().gt(0)
12
- }), g = r.object({
13
- mediaID: r.uuidv7(),
14
- uploadType: r.literal("multipart"),
15
- multipartPresignPart: r.array(w).nonempty(),
16
- multipartSuccessCallback: r.url()
17
- }), U = r.object({
18
- mediaID: r.uuidv7(),
19
- uploadType: r.literal("singlepart"),
20
- presignPut: r.url(),
21
- singlepartSuccessCallback: r.url()
22
- }), I = r.discriminatedUnion("uploadType", [
23
- g,
24
- U
25
- ]), C = (a) => ({
26
- id: u(),
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 "./server";
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(),
27
11
  name: a.name,
28
12
  size: a.size,
29
13
  file: a
30
- }), k = (a) => a.map(C), P = (a) => ({
14
+ }), F = (a) => (a.length > h && g(a.length, h), a.map(P)), R = (a) => ({
31
15
  id: a.id,
32
16
  size: a.size,
33
17
  name: a.name
34
- }), q = (a) => a.map(P), R = (a, t) => {
35
- if (a.id !== t.mediaID)
36
- throw new n("media item and response id mismatch");
37
- return {
38
- ...t,
39
- file: a.file,
40
- size: a.size
41
- };
42
- }, $ = (a, t) => {
43
- if (a.length !== t.length)
44
- throw new n(
45
- `items mismatch: mediaInfos=${a.length}, apiResponses=${t.length}`
46
- );
47
- const e = new Map(
48
- t.map((i) => [i.mediaID, i])
49
- );
50
- return a.map((i) => {
51
- const s = e.get(i.id);
52
- if (!s)
53
- throw new n(
54
- `Could not find a matching API response for media info with id: ${i.id}`
55
- );
56
- return R(i, s);
57
- });
58
- };
59
- class S {
60
- #s;
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
35
+ ]);
36
+ class z {
37
+ #r;
61
38
  #t;
62
39
  #a;
63
40
  #i;
64
41
  #e;
65
42
  #n;
66
43
  #o;
67
- #r;
68
- constructor(t, e, i, s) {
69
- this.#s = t, this.#t = e, this.#a = [], this.#i = /* @__PURE__ */ new Set(), this.#e = s, this.#n = i, this.#o = !1, this.#r = !1;
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;
70
47
  }
71
48
  get failed() {
72
49
  return this.#o;
@@ -75,7 +52,7 @@ class S {
75
52
  this.#o = !0;
76
53
  }
77
54
  get id() {
78
- return this.#s;
55
+ return this.#r;
79
56
  }
80
57
  get completeURL() {
81
58
  return this.#n;
@@ -96,10 +73,10 @@ class S {
96
73
  return !this.failed && this.#i.size === this.#e;
97
74
  }
98
75
  tryStartComplete() {
99
- return this.#r || !this.canComplete ? !1 : (this.#r = !0, !0);
76
+ return this.#s || !this.canComplete ? !1 : (this.#s = !0, !0);
100
77
  }
101
78
  resetComplete() {
102
- this.#r = !1;
79
+ this.#s = !1;
103
80
  }
104
81
  get totalPartsCount() {
105
82
  return this.#e;
@@ -108,14 +85,14 @@ class S {
108
85
  return this.#i.size;
109
86
  }
110
87
  }
111
- class N {
112
- #s;
88
+ class b {
89
+ #r;
113
90
  #t;
114
91
  #a;
115
92
  #i;
116
93
  #e;
117
- constructor(t, e, i, s) {
118
- this.#s = t, this.#t = e, this.#i = s, this.#a = i, this.#e = !1;
94
+ constructor(t, e, i, r) {
95
+ this.#r = t, this.#t = e, this.#i = r, this.#a = i, this.#e = !1;
119
96
  }
120
97
  get canComplete() {
121
98
  return this.#e;
@@ -124,7 +101,7 @@ class N {
124
101
  this.#e = !0;
125
102
  }
126
103
  get id() {
127
- return this.#s;
104
+ return this.#r;
128
105
  }
129
106
  get blob() {
130
107
  return this.#t;
@@ -136,28 +113,28 @@ class N {
136
113
  return this.#a;
137
114
  }
138
115
  }
139
- const L = {
116
+ const D = {
140
117
  concurrentUploads: 4,
141
118
  retryLimit: 3
142
119
  };
143
- class z {
144
- #s;
120
+ class M {
121
+ #r;
145
122
  #t;
146
123
  #a;
147
124
  #i;
148
125
  #e;
149
126
  #n;
150
- constructor(t, e, i = L, s) {
151
- this.#s = t, this.#t = e, this.#a = i.concurrentUploads, this.#i = i.retryLimit, this.#e = new m(), this.#n = s;
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;
152
129
  }
153
130
  #o(t) {
154
131
  return t < this.#i;
155
132
  }
156
- #r(t) {
133
+ #s(t) {
157
134
  this.#e.enqueue(t);
158
135
  }
159
136
  async init() {
160
- this.#t.init(this.#s);
137
+ this.#t.init(this.#r);
161
138
  const t = /* @__PURE__ */ new Set();
162
139
  for await (const e of this.#m()) {
163
140
  const i = e().finally(() => t.delete(i));
@@ -167,7 +144,7 @@ class z {
167
144
  }
168
145
  async #l(t, e) {
169
146
  return await fetch(t, {
170
- method: c.put,
147
+ method: u.put,
171
148
  body: e
172
149
  });
173
150
  }
@@ -178,12 +155,12 @@ class z {
178
155
  t.uploadURL,
179
156
  t.blob
180
157
  )).ok)
181
- throw new l(p.singlepartUploadFailed, {
158
+ throw new p(d.singlepartUploadFailed, {
182
159
  mediaID: t.id
183
160
  });
184
161
  t.allowComplete(), await this.#h(t);
185
162
  } catch (i) {
186
- this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#r({
163
+ this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#s({
187
164
  type: "singlepart-upload",
188
165
  retryCount: e + 1,
189
166
  singlepartObj: t
@@ -193,21 +170,21 @@ class z {
193
170
  async #p(t, e, i = 0) {
194
171
  if (!(t.failed || t.contains(e.partNumber)))
195
172
  try {
196
- const s = await this.#l(
173
+ const r = await this.#l(
197
174
  e.uploadURL,
198
175
  t.blob.slice(e.startByte, e.endByte)
199
176
  );
200
- if (!s.ok)
201
- throw new l(
202
- p.multipartPartUploadFailed,
177
+ if (!r.ok)
178
+ throw new p(
179
+ d.multipartPartUploadFailed,
203
180
  {
204
181
  mediaID: t.id,
205
182
  partNumber: e.partNumber
206
183
  }
207
184
  );
208
- const o = s.headers.get("ETag");
185
+ const o = r.headers.get("ETag");
209
186
  if (!o)
210
- throw new l(p.missingETagValue, {
187
+ throw new p(d.missingETagValue, {
211
188
  mediaID: t.id,
212
189
  partNumber: e.partNumber
213
190
  });
@@ -220,39 +197,39 @@ class z {
220
197
  t.totalPartsCount
221
198
  ), !t.canComplete) return;
222
199
  await this.#u(t);
223
- } catch (s) {
200
+ } catch (r) {
224
201
  this.#o(i) ? (this.#t.multipartPartUploadRetrying(
225
202
  t.id,
226
203
  e.partNumber
227
- ), this.#r({
204
+ ), this.#s({
228
205
  type: "multipart-part-upload",
229
206
  retryCount: i + 1,
230
207
  multipartObj: t,
231
208
  partInfo: e
232
- })) : (t.fail(), this.#t.failed(t.id, s));
209
+ })) : (t.fail(), this.#t.failed(t.id, r));
233
210
  }
234
211
  }
235
212
  async #c(t, e) {
236
- let i, s;
213
+ let i, r;
237
214
  e && (i = JSON.stringify({
238
215
  partsInfo: e
239
- }), s = {
240
- [d.contentType.key]: d.contentType.valueApplicationJSON
241
- }), this.#n && (s = s || {}, s[d.userLocale.key] = this.#n);
216
+ }), r = {
217
+ [l.contentType.key]: l.contentType.valueApplicationJSON
218
+ }), this.#n && (r = r || {}, r[l.userLocale.key] = this.#n);
242
219
  const o = await fetch(t, {
243
- method: c.post,
220
+ method: u.post,
244
221
  body: i,
245
- headers: s,
222
+ headers: r,
246
223
  credentials: f.include
247
224
  });
248
- await y(o);
225
+ await C(o);
249
226
  }
250
227
  async #h(t, e = 0) {
251
228
  if (t.canComplete)
252
229
  try {
253
230
  await this.#c(t.completeURL), this.#t.itemUploaded(t.id);
254
231
  } catch (i) {
255
- this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#r({
232
+ this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#s({
256
233
  type: "singlepart-complete",
257
234
  retryCount: e + 1,
258
235
  singlepartObj: t
@@ -267,7 +244,7 @@ class z {
267
244
  t.list
268
245
  ), this.#t.itemUploaded(t.id);
269
246
  } catch (i) {
270
- t.resetComplete(), this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#r({
247
+ t.resetComplete(), this.#o(e) ? (this.#t.uploadRetrying(t.id), this.#s({
271
248
  type: "multipart-complete",
272
249
  retryCount: e + 1,
273
250
  multipartObj: t
@@ -275,9 +252,9 @@ class z {
275
252
  }
276
253
  }
277
254
  async *#m() {
278
- for (const t of this.#s) {
255
+ for (const t of this.#r) {
279
256
  if (t.uploadType === "singlepart") {
280
- const o = new N(
257
+ const o = new b(
281
258
  t.mediaID,
282
259
  t.file,
283
260
  t.presignPut,
@@ -288,24 +265,24 @@ class z {
288
265
  };
289
266
  continue;
290
267
  }
291
- const e = new S(
268
+ const e = new z(
292
269
  t.mediaID,
293
270
  t.file,
294
271
  t.multipartSuccessCallback,
295
272
  t.multipartPresignPart.length
296
273
  );
297
- let i = 0, s = 0;
274
+ let i = 0, r = 0;
298
275
  for (const o of t.multipartPresignPart) {
299
- s += o.partSize;
300
- const h = {
276
+ r += o.partSize;
277
+ const m = {
301
278
  partNumber: o.partNumber,
302
279
  uploadURL: o.presignPut,
303
280
  startByte: i,
304
- endByte: s
281
+ endByte: r
305
282
  };
306
283
  yield async () => {
307
- await this.#p(e, h);
308
- }, i = s;
284
+ await this.#p(e, m);
285
+ }, i = r;
309
286
  }
310
287
  }
311
288
  }
@@ -333,9 +310,8 @@ class z {
333
310
  t.retryCount
334
311
  );
335
312
  default:
336
- const e = t;
337
313
  throw new n(
338
- `Unhandled retry task type: ${e.type}`
314
+ `Unhandled retry task type: ${t.type}`
339
315
  );
340
316
  }
341
317
  }
@@ -344,7 +320,8 @@ class z {
344
320
  for (; !this.#e.isEmpty(); ) {
345
321
  for (; !this.#e.isEmpty(); ) {
346
322
  const e = this.#e.dequeue();
347
- let i = this.#y(e).finally(
323
+ if (!e) break;
324
+ const i = this.#y(e).finally(
348
325
  () => t.delete(i)
349
326
  );
350
327
  t.add(i), t.size >= this.#a && await Promise.race(t);
@@ -353,19 +330,44 @@ class z {
353
330
  }
354
331
  }
355
332
  }
356
- const x = async (a, t, e, i) => {
357
- await D([a], t, e, i);
358
- }, D = async (a, t, e, i) => {
359
- await new z(a, t, e, i).init();
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) => {
338
+ if (a.id !== t.mediaID)
339
+ throw new n("media item and response id mismatch");
340
+ return {
341
+ ...t,
342
+ file: a.file,
343
+ size: a.size
344
+ };
345
+ }, V = (a, t) => {
346
+ if (a.length !== t.length)
347
+ throw new n(
348
+ `items mismatch: mediaInfos=${a.length}, apiResponses=${t.length}`
349
+ );
350
+ const e = new Map(
351
+ t.map((i) => [i.mediaID, i])
352
+ );
353
+ return a.map((i) => {
354
+ const r = e.get(i.id);
355
+ if (!r)
356
+ throw new n(
357
+ `Could not find a matching API response for media info with id: ${i.id}`
358
+ );
359
+ return E(i, r);
360
+ });
360
361
  };
361
362
  export {
362
- I as U,
363
- k as a,
364
- R as b,
365
- $ as c,
366
- q as d,
367
- D as e,
368
- C as n,
369
- P as t,
370
- x as u
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
  };
373
+ //# sourceMappingURL=uploadDetails.map
@@ -0,0 +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 { 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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"}
@@ -1,3 +1,4 @@
1
1
  export * from './http_methods';
2
- export * from './httpRequestHeaders';
3
2
  export * from './httpRequestCredentials';
3
+ export * from './httpRequestHeaders';
4
+ export * from './media_limits';