@wlindabla/file_uploader 1.0.0 → 2.0.1

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 (110) hide show
  1. package/README.md +54 -28
  2. package/dist/cjs/cache/index.d.ts +198 -0
  3. package/dist/cjs/cache/index.js +318 -0
  4. package/dist/cjs/cache/index.js.map +1 -0
  5. package/dist/cjs/core/index.d.ts +271 -0
  6. package/dist/cjs/core/index.js +762 -0
  7. package/dist/cjs/core/index.js.map +1 -0
  8. package/dist/cjs/events/chunk/index.d.ts +27 -0
  9. package/dist/cjs/events/chunk/index.js +70 -0
  10. package/dist/cjs/events/chunk/index.js.map +1 -0
  11. package/dist/cjs/events/complete/index.d.ts +64 -0
  12. package/dist/cjs/events/complete/index.js +152 -0
  13. package/dist/cjs/events/complete/index.js.map +1 -0
  14. package/dist/cjs/events/index.d.ts +95 -0
  15. package/dist/cjs/events/index.js +85 -0
  16. package/dist/cjs/events/index.js.map +1 -0
  17. package/dist/cjs/events/initialize/index.d.ts +45 -0
  18. package/dist/cjs/events/initialize/index.js +105 -0
  19. package/dist/cjs/events/initialize/index.js.map +1 -0
  20. package/dist/cjs/events/state/index.d.ts +67 -0
  21. package/dist/cjs/events/state/index.js +145 -0
  22. package/dist/cjs/events/state/index.js.map +1 -0
  23. package/dist/cjs/exceptions/index.d.ts +84 -0
  24. package/dist/{exceptions → cjs/exceptions}/index.js +38 -18
  25. package/dist/cjs/exceptions/index.js.map +1 -0
  26. package/dist/cjs/index.d.ts +14 -0
  27. package/dist/cjs/index.js +33 -0
  28. package/dist/cjs/index.js.map +1 -0
  29. package/dist/cjs/subscribers/index.d.ts +34 -0
  30. package/dist/cjs/subscribers/index.js +187 -0
  31. package/dist/cjs/subscribers/index.js.map +1 -0
  32. package/dist/cjs/types/index.d.ts +110 -0
  33. package/dist/cjs/types/index.js +53 -0
  34. package/dist/cjs/types/index.js.map +1 -0
  35. package/dist/cjs/utils/index.d.ts +72 -0
  36. package/dist/cjs/utils/index.js +208 -0
  37. package/dist/cjs/utils/index.js.map +1 -0
  38. package/dist/esm/cache/index.d.mts +198 -0
  39. package/dist/esm/cache/index.js +4 -0
  40. package/dist/{index.js.map → esm/cache/index.js.map} +1 -1
  41. package/dist/{events/initialize/index.js → esm/chunk-3JTTZCSQ.js} +25 -19
  42. package/dist/esm/chunk-3JTTZCSQ.js.map +1 -0
  43. package/dist/{events/state/index.js → esm/chunk-6225YMFE.js} +38 -20
  44. package/dist/esm/chunk-6225YMFE.js.map +1 -0
  45. package/dist/esm/chunk-7QVYU63E.js +6 -0
  46. package/dist/esm/chunk-7QVYU63E.js.map +1 -0
  47. package/dist/{events/complete/index.js → esm/chunk-BNMI7DW3.js} +25 -19
  48. package/dist/esm/chunk-BNMI7DW3.js.map +1 -0
  49. package/dist/{subscribers/index.js → esm/chunk-HYNJBWW5.js} +36 -34
  50. package/dist/esm/chunk-HYNJBWW5.js.map +1 -0
  51. package/dist/{events/index.js → esm/chunk-JDL3U4OX.js} +7 -37
  52. package/dist/esm/chunk-JDL3U4OX.js.map +1 -0
  53. package/dist/{events/chunk/index.js → esm/chunk-LD2DWZRJ.js} +14 -11
  54. package/dist/esm/chunk-LD2DWZRJ.js.map +1 -0
  55. package/dist/{utils/index.js → esm/chunk-MFYC4PBP.js} +15 -22
  56. package/dist/esm/chunk-MFYC4PBP.js.map +1 -0
  57. package/dist/esm/chunk-NXYS73I4.js +125 -0
  58. package/dist/esm/chunk-NXYS73I4.js.map +1 -0
  59. package/dist/{cache/index.js → esm/chunk-PFALORWQ.js} +10 -11
  60. package/dist/esm/chunk-PFALORWQ.js.map +1 -0
  61. package/dist/{core/index.js → esm/chunk-TONVXBLH.js} +239 -231
  62. package/dist/esm/chunk-TONVXBLH.js.map +1 -0
  63. package/dist/{types/index.js → esm/chunk-X757PBC5.js} +5 -7
  64. package/dist/esm/chunk-X757PBC5.js.map +1 -0
  65. package/dist/esm/core/index.d.mts +271 -0
  66. package/dist/esm/core/index.js +12 -0
  67. package/dist/esm/core/index.js.map +1 -0
  68. package/dist/esm/events/chunk/index.d.mts +27 -0
  69. package/dist/esm/events/chunk/index.js +4 -0
  70. package/dist/esm/events/chunk/index.js.map +1 -0
  71. package/dist/esm/events/complete/index.d.mts +64 -0
  72. package/dist/esm/events/complete/index.js +4 -0
  73. package/dist/esm/events/complete/index.js.map +1 -0
  74. package/dist/esm/events/index.d.mts +95 -0
  75. package/dist/esm/events/index.js +8 -0
  76. package/dist/esm/events/index.js.map +1 -0
  77. package/dist/esm/events/initialize/index.d.mts +45 -0
  78. package/dist/esm/events/initialize/index.js +4 -0
  79. package/dist/esm/events/initialize/index.js.map +1 -0
  80. package/dist/esm/events/state/index.d.mts +67 -0
  81. package/dist/esm/events/state/index.js +4 -0
  82. package/dist/esm/events/state/index.js.map +1 -0
  83. package/dist/esm/exceptions/index.d.mts +84 -0
  84. package/dist/esm/exceptions/index.js +4 -0
  85. package/dist/esm/exceptions/index.js.map +1 -0
  86. package/dist/esm/index.d.mts +14 -0
  87. package/dist/esm/index.js +14 -0
  88. package/dist/esm/index.js.map +1 -0
  89. package/dist/esm/subscribers/index.d.mts +34 -0
  90. package/dist/esm/subscribers/index.js +10 -0
  91. package/dist/esm/subscribers/index.js.map +1 -0
  92. package/dist/esm/types/index.d.mts +110 -0
  93. package/dist/esm/types/index.js +4 -0
  94. package/dist/esm/types/index.js.map +1 -0
  95. package/dist/esm/utils/index.d.mts +72 -0
  96. package/dist/esm/utils/index.js +5 -0
  97. package/dist/esm/utils/index.js.map +1 -0
  98. package/package.json +165 -14
  99. package/dist/cache/index.js.map +0 -1
  100. package/dist/core/index.js.map +0 -1
  101. package/dist/events/chunk/index.js.map +0 -1
  102. package/dist/events/complete/index.js.map +0 -1
  103. package/dist/events/index.js.map +0 -1
  104. package/dist/events/initialize/index.js.map +0 -1
  105. package/dist/events/state/index.js.map +0 -1
  106. package/dist/exceptions/index.js.map +0 -1
  107. package/dist/index.js +0 -49
  108. package/dist/subscribers/index.js.map +0 -1
  109. package/dist/types/index.js.map +0 -1
  110. package/dist/utils/index.js.map +0 -1
@@ -1,21 +1,21 @@
1
- 'use strict';
1
+ import { InitializeUploadFailureException } from './chunk-NXYS73I4.js';
2
+ import { HttpFileUploaderEvents } from './chunk-JDL3U4OX.js';
3
+ import { FinalizeUploadFailureEvent } from './chunk-BNMI7DW3.js';
4
+ import { InitializeUploadStartedEvent, InitializeUploadFailureEvent, InitializeUploadSuccessEvent } from './chunk-3JTTZCSQ.js';
5
+ import { __name } from './chunk-7QVYU63E.js';
6
+ import { safeFetch, HttpFetchError } from '@wlindabla/http_client/core';
2
7
 
3
- var events = require('../events');
4
- var http_client = require('@wlindabla/http_client');
5
- var exceptions = require('../exceptions');
6
-
7
- var __defProp = Object.defineProperty;
8
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
- class InitializeUploadSubscriber {
8
+ var InitializeUploadSubscriber = class {
10
9
  constructor(eventDispatcher) {
11
10
  this.eventDispatcher = eventDispatcher;
12
11
  }
12
+ eventDispatcher;
13
13
  static {
14
14
  __name(this, "InitializeUploadSubscriber");
15
15
  }
16
16
  getSubscribedEvents() {
17
17
  return {
18
- [events.HttpFileUploaderEvents.INITIALIZE_UPLOAD]: { listener: "onInitializeUpload", priority: 100 }
18
+ [HttpFileUploaderEvents.INITIALIZE_UPLOAD]: { listener: "onInitializeUpload", priority: 100 }
19
19
  };
20
20
  }
21
21
  /**
@@ -29,15 +29,15 @@ class InitializeUploadSubscriber {
29
29
  event.stopPropagation();
30
30
  const initialzeUploadRequestOptions = event.initUploadOptions;
31
31
  this.eventDispatcher.dispatch(
32
- new events.InitializeUploadStartedEvent(
32
+ new InitializeUploadStartedEvent(
33
33
  initialzeUploadRequestOptions.fileName,
34
34
  initialzeUploadRequestOptions.fileSize,
35
35
  initialzeUploadRequestOptions.fileHash
36
36
  ),
37
- events.HttpFileUploaderEvents.INITIALIZE_UPLOAD_STARTED
37
+ HttpFileUploaderEvents.INITIALIZE_UPLOAD_STARTED
38
38
  );
39
39
  try {
40
- const response = await http_client.safeFetch({
40
+ const response = await safeFetch({
41
41
  url: initialzeUploadRequestOptions.endpointInit,
42
42
  methodSend: "POST",
43
43
  headers: {
@@ -59,17 +59,17 @@ class InitializeUploadSubscriber {
59
59
  const status = response.status;
60
60
  if (response.failed) {
61
61
  console.error(`Initialize upload failed (HTTP ${status}):`, response);
62
- const errorUploadFailure = new exceptions.InitializeUploadFailureException(
62
+ const errorUploadFailure = new InitializeUploadFailureException(
63
63
  response,
64
64
  `Server returned error: HTTP ${response.status}`
65
65
  );
66
66
  this.eventDispatcher.dispatch(
67
- new events.InitializeUploadFailureEvent(
67
+ new InitializeUploadFailureEvent(
68
68
  errorUploadFailure,
69
69
  status,
70
70
  response.data
71
71
  ),
72
- events.HttpFileUploaderEvents.INITIALIZE_UPLOAD_FAILURE
72
+ HttpFileUploaderEvents.INITIALIZE_UPLOAD_FAILURE
73
73
  );
74
74
  throw errorUploadFailure;
75
75
  }
@@ -77,39 +77,41 @@ class InitializeUploadSubscriber {
77
77
  if (!responseData || typeof responseData !== "object") {
78
78
  const validationError = "Invalid server response: expected object, got " + typeof responseData;
79
79
  console.error("Invalid response structure:", responseData);
80
- throw new exceptions.InitializeUploadFailureException(
80
+ const err = new InitializeUploadFailureException(
81
81
  responseData,
82
82
  validationError
83
83
  );
84
+ throw err;
84
85
  }
85
86
  let sessionId = responseData.mediaId || responseData.mediaIdFromServer || responseData.sessionId || responseData.uploadId;
86
87
  if (!sessionId) {
87
88
  const missingKeyError = 'Server response missing required field: "mediaId","mediaIdFromServer", "sessionId", or "uploadId"';
88
89
  console.error("Missing session ID in response:", responseData);
89
- throw new exceptions.InitializeUploadFailureException(
90
+ const err = new InitializeUploadFailureException(
90
91
  responseData,
91
92
  missingKeyError
92
93
  );
94
+ throw err;
93
95
  }
94
96
  if (typeof sessionId === "number") {
95
97
  sessionId = sessionId.toString();
96
98
  }
97
99
  event.setMediaId(sessionId);
98
100
  this.eventDispatcher.dispatch(
99
- new events.InitializeUploadSuccessEvent(
101
+ new InitializeUploadSuccessEvent(
100
102
  status,
101
103
  sessionId,
102
104
  responseData
103
105
  ),
104
- events.HttpFileUploaderEvents.INITIALIZE_UPLOAD_SUCCESS
106
+ HttpFileUploaderEvents.INITIALIZE_UPLOAD_SUCCESS
105
107
  );
106
108
  } catch (error) {
107
- if (error instanceof http_client.HttpFetchError) {
109
+ if (error instanceof HttpFetchError) {
108
110
  this.eventDispatcher.dispatch(
109
- new events.InitializeUploadFailureEvent(
111
+ new InitializeUploadFailureEvent(
110
112
  error instanceof Error ? error : new Error(String(error))
111
113
  ),
112
- events.HttpFileUploaderEvents.INITIALIZE_UPLOAD_FAILURE
114
+ HttpFileUploaderEvents.INITIALIZE_UPLOAD_FAILURE
113
115
  );
114
116
  return;
115
117
  }
@@ -117,23 +119,24 @@ class InitializeUploadSubscriber {
117
119
  throw error;
118
120
  }
119
121
  }
120
- }
121
- class FinalizeUploadSubscriber {
122
+ };
123
+ var FinalizeUploadSubscriber = class {
122
124
  constructor(eventDispatcher) {
123
125
  this.eventDispatcher = eventDispatcher;
124
126
  }
127
+ eventDispatcher;
125
128
  static {
126
129
  __name(this, "FinalizeUploadSubscriber");
127
130
  }
128
131
  getSubscribedEvents() {
129
132
  return {
130
- [events.HttpFileUploaderEvents.FINALIZE_UPLOAD]: { listener: "onFinalizeUpload", priority: 100 }
133
+ [HttpFileUploaderEvents.FINALIZE_UPLOAD]: { listener: "onFinalizeUpload", priority: 100 }
131
134
  };
132
135
  }
133
136
  async onFinalizeUpload(event) {
134
137
  event.stopPropagation();
135
138
  try {
136
- const responseFinalizeUpload = await http_client.safeFetch({
139
+ const responseFinalizeUpload = await safeFetch({
137
140
  url: event.endPoint,
138
141
  methodSend: "POST",
139
142
  headers: {
@@ -144,19 +147,18 @@ class FinalizeUploadSubscriber {
144
147
  });
145
148
  event.setResponse(responseFinalizeUpload);
146
149
  } catch (error) {
147
- if (error instanceof http_client.HttpFetchError) {
150
+ if (error instanceof HttpFetchError) {
148
151
  this.eventDispatcher.dispatch(
149
- new events.FinalizeUploadFailureEvent(error),
150
- events.HttpFileUploaderEvents.FINALIZE_UPLOAD_FAILURE
152
+ new FinalizeUploadFailureEvent(error),
153
+ HttpFileUploaderEvents.FINALIZE_UPLOAD_FAILURE
151
154
  );
152
155
  return;
153
156
  }
154
157
  throw error;
155
158
  }
156
159
  }
157
- }
160
+ };
158
161
 
159
- exports.FinalizeUploadSubscriber = FinalizeUploadSubscriber;
160
- exports.InitializeUploadSubscriber = InitializeUploadSubscriber;
161
- //# sourceMappingURL=index.js.map
162
- //# sourceMappingURL=index.js.map
162
+ export { FinalizeUploadSubscriber, InitializeUploadSubscriber };
163
+ //# sourceMappingURL=chunk-HYNJBWW5.js.map
164
+ //# sourceMappingURL=chunk-HYNJBWW5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/subscribers/index.ts"],"names":[],"mappings":"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","file":"chunk-HYNJBWW5.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\n\nimport {\n EventSubscriberInterface,\n EventDispatcherInterface\n} from \"@wlindabla/event_dispatcher\";\n\nimport {\n HttpFileUploaderEvents,\n InitializingUploadEvent,\n InitializeUploadStartedEvent,\n InitializeUploadSuccessEvent,\n InitializeUploadFailureEvent,\n FinalizeUploadEvent,\n FinalizeUploadFailureEvent\n} from \"../events\";\n\nimport {\n HttpFetchError,\n safeFetch\n} from \"@wlindabla/http_client/core\";\n\nimport { InitializeUploadResponse } from \"../types\";\n\nimport { InitializeUploadFailureException } from \"../exceptions\";\n\nexport class InitializeUploadSubscriber implements EventSubscriberInterface {\n constructor(private readonly eventDispatcher: EventDispatcherInterface) {}\n\n public getSubscribedEvents(): Record<string, string | { listener: string; priority?: number | undefined; }> {\n return {\n [HttpFileUploaderEvents.INITIALIZE_UPLOAD]: { listener: \"onInitializeUpload\", priority: 100}\n }\n }\n\n /**\n * Initializes upload session with the server.\n * \n * @param fileHash - SHA-256 hash of the file (first 1MB)\n * @returns Session ID from server, or null if initialization failed\n * @throws {FileUploadInitializationError} If server returns error or network fails\n */\n public async onInitializeUpload(event:InitializingUploadEvent):Promise<void>{\n event.stopPropagation();\n const initialzeUploadRequestOptions = event.initUploadOptions;\n\n this.eventDispatcher.dispatch(\n new InitializeUploadStartedEvent(\n initialzeUploadRequestOptions.fileName,\n initialzeUploadRequestOptions.fileSize,\n initialzeUploadRequestOptions.fileHash\n ),\n HttpFileUploaderEvents.INITIALIZE_UPLOAD_STARTED\n );\n \n try {\n const response = await safeFetch({\n url:initialzeUploadRequestOptions.endpointInit,\n methodSend: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...initialzeUploadRequestOptions.headers\n },\n data: {\n fileName:initialzeUploadRequestOptions.fileName,\n fileSize:initialzeUploadRequestOptions.fileSize,\n fileHash:initialzeUploadRequestOptions.fileHash,\n fileType: initialzeUploadRequestOptions.fileType,\n metadata: initialzeUploadRequestOptions.metadata,\n },\n responseType: \"json\",\n retryCount: 3,\n retryOnStatusCode: true,\n timeout: 45000\n });\n\n const status = response.status;\n \n // Handle error responses (4xx, 5xx)\n if (response.failed) {\n console.error(`Initialize upload failed (HTTP ${status}):`, response);\n\n const errorUploadFailure =new InitializeUploadFailureException(\n response,\n `Server returned error: HTTP ${response.status}`\n );\n\n this.eventDispatcher.dispatch(\n new InitializeUploadFailureEvent(\n errorUploadFailure,\n status,\n response.data),\n HttpFileUploaderEvents.INITIALIZE_UPLOAD_FAILURE\n\n );\n \n throw errorUploadFailure;\n }\n\n const responseData = response.data as InitializeUploadResponse;\n\n // Validate server response struct\n if (!responseData || typeof responseData !== 'object') {\n const validationError = 'Invalid server response: expected object, got ' + typeof responseData\n console.error('Invalid response structure:', responseData);\n\n const err=new InitializeUploadFailureException(\n responseData,\n validationError\n );\n throw err;\n }\n // Extract session ID\n let sessionId =\n responseData.mediaId ||\n responseData.mediaIdFromServer ||\n responseData.sessionId ||\n responseData.uploadId;\n\n if (!sessionId) {\n const missingKeyError = 'Server response missing required field: \"mediaId\",\"mediaIdFromServer\", \"sessionId\", or \"uploadId\"';\n\n console.error('Missing session ID in response:', responseData);\n const err=new InitializeUploadFailureException(\n responseData,\n missingKeyError\n );\n throw err;\n }\n\n if (typeof sessionId === \"number\") { sessionId = sessionId.toString(); }\n\n event.setMediaId(sessionId);\n\n this.eventDispatcher.dispatch(\n new InitializeUploadSuccessEvent(\n status,\n sessionId,\n responseData\n ),\n HttpFileUploaderEvents.INITIALIZE_UPLOAD_SUCCESS\n );\n\n } catch (error) {\n if (error instanceof HttpFetchError) {\n this.eventDispatcher.dispatch(\n new InitializeUploadFailureEvent(\n error instanceof Error ? error : new Error(String(error)),\n ),\n HttpFileUploaderEvents.INITIALIZE_UPLOAD_FAILURE\n );\n return;\n }\n console.error('Initialize upload exception:', error);\n\n throw error;\n }\n }\n}\n\nexport class FinalizeUploadSubscriber implements EventSubscriberInterface{\n\n constructor(private readonly eventDispatcher: EventDispatcherInterface) {}\n\n public getSubscribedEvents(): Record<string, string | { listener: string; priority?: number | undefined; }> {\n return {\n [HttpFileUploaderEvents.FINALIZE_UPLOAD]: { listener: \"onFinalizeUpload\", priority: 100 }\n }\n }\n\n public async onFinalizeUpload(event: FinalizeUploadEvent): Promise<void>{\n event.stopPropagation();\n try {\n const responseFinalizeUpload = await safeFetch({\n url: event.endPoint,\n methodSend: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...event.headers\n },\n data: { mediaId: event.mediaId, mediaHash: event.mediaHash }\n });\n\n event.setResponse(responseFinalizeUpload)\n } catch (error) {\n if (error instanceof HttpFetchError) {\n this.eventDispatcher.dispatch(\n new FinalizeUploadFailureEvent(error),\n HttpFileUploaderEvents.FINALIZE_UPLOAD_FAILURE\n );\n return;\n }\n\n throw error;\n }\n }\n}"]}
@@ -1,13 +1,7 @@
1
- 'use strict';
1
+ import { __name } from './chunk-7QVYU63E.js';
2
2
 
3
- var initialize = require('./initialize');
4
- var state = require('./state');
5
- var chunk = require('./chunk');
6
- var complete = require('./complete');
7
-
8
- var __defProp = Object.defineProperty;
9
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
- class HttpFileUploaderEvents {
3
+ // src/events/index.ts
4
+ var HttpFileUploaderEvents = class {
11
5
  static {
12
6
  __name(this, "HttpFileUploaderEvents");
13
7
  }
@@ -53,32 +47,8 @@ class HttpFileUploaderEvents {
53
47
  constructor() {
54
48
  throw new Error("HttpFileUploaderEvents is an abstract class and cannot be instantiated");
55
49
  }
56
- }
50
+ };
57
51
 
58
- exports.HttpFileUploaderEvents = HttpFileUploaderEvents;
59
- Object.keys(initialize).forEach(function (k) {
60
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
61
- enumerable: true,
62
- get: function () { return initialize[k]; }
63
- });
64
- });
65
- Object.keys(state).forEach(function (k) {
66
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
67
- enumerable: true,
68
- get: function () { return state[k]; }
69
- });
70
- });
71
- Object.keys(chunk).forEach(function (k) {
72
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
73
- enumerable: true,
74
- get: function () { return chunk[k]; }
75
- });
76
- });
77
- Object.keys(complete).forEach(function (k) {
78
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
79
- enumerable: true,
80
- get: function () { return complete[k]; }
81
- });
82
- });
83
- //# sourceMappingURL=index.js.map
84
- //# sourceMappingURL=index.js.map
52
+ export { HttpFileUploaderEvents };
53
+ //# sourceMappingURL=chunk-JDL3U4OX.js.map
54
+ //# sourceMappingURL=chunk-JDL3U4OX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/events/index.ts"],"names":[],"mappings":";;;AAqDO,IAAe,yBAAf,MAAsC;AAAA,EArD7C;AAqD6C,IAAA,MAAA,CAAA,IAAA,EAAA,wBAAA,CAAA;AAAA;AAAA,EAEzC,OAAgB,iBAAA,GAAoB,oBAAA;AAAA;AAAA,EAGpC,OAAgB,yBAAA,GAA4B,yBAAA;AAAA;AAAA,EAG5C,OAAgB,yBAAA,GAA4B,yBAAA;AAAA;AAAA,EAG5C,OAAgB,yBAAA,GAA4B,yBAAA;AAAA;AAAA,EAG5C,OAAgB,0BAAA,GAA6B,yBAAA;AAAA;AAAA,EAG7C,OAAgB,0BAAA,GAA6B,yBAAA;AAAA;AAAA,EAG7C,OAAgB,yBAAA,GAA4B,wBAAA;AAAA;AAAA,EAG5C,OAAgB,sCAAA,GAAyC,mCAAA;AAAA;AAAA,EAGzD,OAAgB,yBAAA,GAA4B,wBAAA;AAAA;AAAA,EAG5C,OAAgB,kCAAA,GAAqC,gCAAA;AAAA;AAAA,EAGrD,OAAgB,yBAAA,GAA4B,wBAAA;AAAA;AAAA,EAG5C,OAAgB,aAAA,GAAgB,cAAA;AAAA;AAAA,EAGhC,OAAgB,cAAA,GAAiB,eAAA;AAAA;AAAA,EAGjC,OAAgB,gBAAA,GAAmB,iBAAA;AAAA;AAAA,EAGnC,OAAgB,oBAAA,GAAuB,oBAAA;AAAA;AAAA,EAGvC,OAAgB,uBAAA,GAA0B,uBAAA;AAAA;AAAA,EAG1C,OAAgB,sBAAA,GAAyB,sBAAA;AAAA;AAAA,EAGzC,OAAgB,qBAAA,GAAwB,qBAAA;AAAA,EAExC,OAAgB,eAAA,GAAkB,gBAAA;AAAA,EAElC,OAAgB,uBAAA,GAA0B,uBAAA;AAAA;AAAA,EAG1C,OAAgB,2BAAA,GAA8B,0BAAA;AAAA,EAEtC,WAAA,GAAc;AAElB,IAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,EAC5F;AACJ","file":"chunk-JDL3U4OX.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\n\n/**\n * HttpFileUploaderEvents - Event Constants for File Upload Operations\n * \n * This abstract class provides a centralized collection of event name constants\n * used throughout the file upload lifecycle. It follows the Symfony event\n * dispatcher pattern, providing a type-safe way to reference events.\n * \n * The events are organized into five categories:\n * - **Initialize Events**: Events related to upload session initialization\n * - **Chunk Upload Events**: Events fired during individual chunk uploads\n * - **Upload State Events**: Events tracking upload state changes (pause, resume, cancel)\n * - **Completion Events**: Events fired when upload completes or fails\n * - **Metadata Events**: Events related to media metadata operations\n * \n * @example\n * ```typescript\n * import { HttpFileUploaderEvents } from '@wlindabla/file_uploader';\n * \n * // Listen to chunk upload success\n * dispatcher.addListener(\n * HttpFileUploaderEvents.MEDIA_CHUNK_UPLOAD_SUCCESS,\n * (event: ChunkUploadSuccessEvent) => {\n * console.log('Chunk uploaded:', event.progress);\n * }\n * );\n * \n * // Listen to upload state changes\n * dispatcher.addListener(\n * HttpFileUploaderEvents.UPLOAD_STATE_CHANGED,\n * (event: UploadStateChangedEvent) => {\n * console.log(`State changed: ${event.oldState} → ${event.newState}`);\n * }\n * );\n * ```\n * \n * @author AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * @version 1.0.0\n * @since 1.0.0\n * \n * @see {@link https://github.com/Agbokoudjo/file_uploader | GitHub Repository}\n * @see {@link EventDispatcherInterface} for event dispatcher usage\n */\nexport abstract class HttpFileUploaderEvents {\n\n static readonly INITIALIZE_UPLOAD = \"initializingUpload\"\n \n /** Dispatched when upload initialization starts */\n static readonly INITIALIZE_UPLOAD_STARTED = \"initializeUploadStarted\";\n\n /** Dispatched when upload initialization succeeds */\n static readonly INITIALIZE_UPLOAD_SUCCESS = \"initializeUploadSuccess\";\n\n /** Dispatched when upload initialization fails */\n static readonly INITIALIZE_UPLOAD_FAILURE = \"initializeUploadFailure\";\n\n /** Dispatched when a chunk upload starts */\n static readonly MEDIA_CHUNK_UPLOAD_STARTED = \"mediaChunkUploadStarted\";\n\n /** Dispatched when a chunk is uploaded successfully */\n static readonly MEDIA_CHUNK_UPLOAD_SUCCESS = \"mediaChunkUploadSuccess\";\n\n /** Dispatched when a chunk upload fails */\n static readonly MEDIA_CHUNK_UPLOAD_FAILED = \"mediaChunkUploadFailed\";\n\n /** Dispatched when the server returns an HTTP error for a chunk */\n static readonly MEDIA_CHUNK_UPLOAD_HTTP_ERROR_RESPONSE = \"mediaChunkUploadHttpErrorResponse\";\n\n /** Dispatched to provide the status of a chunk */\n static readonly MEDIA_CHUNK_UPLOAD_STATUS = \"mediaChunkUploadStatus\";\n\n /** Dispatched when maximum retry attempts are exceeded for a chunk */\n static readonly MEDIA_CHUNK_UPLOAD_MAXRETRY_EXPIRE = \"mediaChunkUploadMaxRetryExpire\";\n\n /** Dispatched when a chunk upload resumes */\n static readonly MEDIA_CHUNK_UPLOAD_RESUME = \"mediaChunkUploadResume\";\n\n /** Dispatched when the upload is paused */\n static readonly UPLOAD_PAUSED = \"uploadPaused\";\n\n /** Dispatched when the upload resumes after being paused */\n static readonly UPLOAD_RESUMED = \"uploadResumed\";\n\n /** Dispatched when the upload is cancelled */\n static readonly UPLOAD_CANCELLED = \"uploadCancelled\";\n\n /** Dispatched when the upload state changes */\n static readonly UPLOAD_STATE_CHANGED = \"uploadStateChanged\";\n\n /** Dispatched when the upload completes successfully */\n static readonly DOWNLOAD_MEDIA_COMPLETE = \"downloadMediaComplete\";\n\n /** Dispatched when the upload fails completely */\n static readonly DOWNLOAD_MEDIA_FAILURE = \"downloadMediaFailure\";\n\n /** Dispatched when the upload resumes from a saved state */\n static readonly DOWNLOAD_MEDIA_RESUME = \"downloadMediaResume\";\n\n static readonly FINALIZE_UPLOAD = \"finalizeUpload\";\n\n static readonly FINALIZE_UPLOAD_FAILURE = \"finalizeUploadFailure\";\n\n /** Dispatched when media metadata is saved successfully */\n static readonly MEDIA_METADATA_SAVE_SUCCESS = \"mediaMetadataSaveSuccess\";\n\n private constructor() {\n // This class cannot be instantiated\n throw new Error('HttpFileUploaderEvents is an abstract class and cannot be instantiated');\n }\n}\n\nexport * from \"./initialize\"\nexport * from \"./state\";\nexport * from \"./chunk\";\nexport * from \"./complete\";"]}
@@ -1,25 +1,29 @@
1
- 'use strict';
1
+ import { __name } from './chunk-7QVYU63E.js';
2
2
 
3
- var __defProp = Object.defineProperty;
4
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
- class ChunkUploadHttpErrorResponseEvent {
3
+ // src/events/chunk/index.ts
4
+ var ChunkUploadHttpErrorResponseEvent = class {
6
5
  constructor(errorPayload, statusResponse, urlEndpoint, chunkInfo) {
7
6
  this.errorPayload = errorPayload;
8
7
  this.statusResponse = statusResponse;
9
8
  this.urlEndpoint = urlEndpoint;
10
9
  this.chunkInfo = chunkInfo;
11
10
  }
11
+ errorPayload;
12
+ statusResponse;
13
+ urlEndpoint;
14
+ chunkInfo;
12
15
  static {
13
16
  __name(this, "ChunkUploadHttpErrorResponseEvent");
14
17
  }
15
18
  get chunkIndex() {
16
19
  return this.chunkInfo.index;
17
20
  }
18
- }
19
- class UploadChunkStartedEvent {
21
+ };
22
+ var UploadChunkStartedEvent = class {
20
23
  constructor(_chunkInfo) {
21
24
  this._chunkInfo = _chunkInfo;
22
25
  }
26
+ _chunkInfo;
23
27
  static {
24
28
  __name(this, "UploadChunkStartedEvent");
25
29
  }
@@ -35,9 +39,8 @@ class UploadChunkStartedEvent {
35
39
  get chunkIndex() {
36
40
  return this._chunkInfo.index;
37
41
  }
38
- }
42
+ };
39
43
 
40
- exports.ChunkUploadHttpErrorResponseEvent = ChunkUploadHttpErrorResponseEvent;
41
- exports.UploadChunkStartedEvent = UploadChunkStartedEvent;
42
- //# sourceMappingURL=index.js.map
43
- //# sourceMappingURL=index.js.map
44
+ export { ChunkUploadHttpErrorResponseEvent, UploadChunkStartedEvent };
45
+ //# sourceMappingURL=chunk-LD2DWZRJ.js.map
46
+ //# sourceMappingURL=chunk-LD2DWZRJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/events/chunk/index.ts"],"names":[],"mappings":";;;AAeO,IAAM,oCAAN,MAAwC;AAAA,EAC3C,WAAA,CACoB,YAAA,EACA,cAAA,EACA,WAAA,EACA,SAAA,EAClB;AAJkB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA,EAChB;AAAA,EAJgB,YAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EApBxB;AAe+C,IAAA,MAAA,CAAA,IAAA,EAAA,mCAAA,CAAA;AAAA;AAAA,EAQ3C,IAAW,UAAA,GAAqB;AAAE,IAAA,OAAO,KAAK,SAAA,CAAU,KAAA;AAAA,EAAO;AACnE;AAKO,IAAM,0BAAN,MAA8B;AAAA,EACjC,YAA6B,UAAA,EAAuB;AAAvB,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAAyB;AAAA,EAAzB,UAAA;AAAA,EA9BjC;AA6BqC,IAAA,MAAA,CAAA,IAAA,EAAA,yBAAA,CAAA;AAAA;AAAA,EAGjC,IAAW,KAAA,GAAgB;AAAE,IAAA,OAAO,KAAK,UAAA,CAAW,KAAA;AAAA,EAAO;AAAA,EAE3D,IAAW,GAAA,GAAc;AAAE,IAAA,OAAO,KAAK,UAAA,CAAW,GAAA;AAAA,EAAK;AAAA,EAEvD,IAAW,YAAA,GAA6B;AAAE,IAAA,OAAO,KAAK,UAAA,CAAW,MAAA;AAAA,EAAQ;AAAA,EAEzE,IAAW,UAAA,GAAqB;AAAE,IAAA,OAAO,KAAK,UAAA,CAAW,KAAA;AAAA,EAAO;AACpE","file":"chunk-LD2DWZRJ.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\nimport { ChunkInfo, UploadStatus } from \"../../types\";\n\n/**\n * Event data for MEDIA_CHUNK_UPLOAD_HTTP_ERROR_RESPONSE\n */\nexport class ChunkUploadHttpErrorResponseEvent {\n constructor(\n public readonly errorPayload: string | Record<string, string | unknown> | unknown,\n public readonly statusResponse: number,\n public readonly urlEndpoint: string | URL | Request,\n public readonly chunkInfo: ChunkInfo\n ) { }\n\n public get chunkIndex(): number { return this.chunkInfo.index; }\n}\n\n/**\n * Event data for MEDIA_CHUNK_UPLOAD_STARTED\n */\nexport class UploadChunkStartedEvent {\n constructor(private readonly _chunkInfo: ChunkInfo) { }\n\n public get start(): number { return this._chunkInfo.start; }\n\n public get end(): number { return this._chunkInfo.end; }\n\n public get uploadStatus(): UploadStatus { return this._chunkInfo.status; }\n\n public get chunkIndex(): number { return this._chunkInfo.index; }\n}"]}
@@ -1,10 +1,8 @@
1
- 'use strict';
1
+ import { DEFAULT_CONFIG } from './chunk-X757PBC5.js';
2
+ import { __name } from './chunk-7QVYU63E.js';
2
3
 
3
- var types = require('../types');
4
-
5
- var __defProp = Object.defineProperty;
6
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
- class FileUtils {
4
+ // src/utils/index.ts
5
+ var FileUtils = class {
8
6
  static {
9
7
  __name(this, "FileUtils");
10
8
  }
@@ -31,7 +29,7 @@ class FileUtils {
31
29
  if (minutes > 0) return `${minutes}m ${secs}s`;
32
30
  return `${secs}s`;
33
31
  }
34
- static calculateChunkSize(fileSize, speedMbps, config = types.DEFAULT_CONFIG) {
32
+ static calculateChunkSize(fileSize, speedMbps, config = DEFAULT_CONFIG) {
35
33
  const fileSizeMB = fileSize / this.MB;
36
34
  if (speedMbps && speedMbps < config.slowSpeedThresholdMbps) {
37
35
  return Math.min(
@@ -64,7 +62,7 @@ class FileUtils {
64
62
  reader.readAsArrayBuffer(file.slice(0, 1024 * 1024));
65
63
  });
66
64
  }
67
- }
65
+ };
68
66
  function updateProgressBarHTMLNotified(progress, media_id, filename, providerName = "LocalVideo") {
69
67
  const progressBarId = `progress-bar-item_${providerName}_${media_id}`;
70
68
  const progressBarContainer = document.querySelector(`#${progressBarId}`);
@@ -113,7 +111,7 @@ function createChunkFormData(chunk, options) {
113
111
  return formData;
114
112
  }
115
113
  __name(createChunkFormData, "createChunkFormData");
116
- class ChunkFormDataBuilder {
114
+ var ChunkFormDataBuilder = class {
117
115
  static {
118
116
  __name(this, "ChunkFormDataBuilder");
119
117
  }
@@ -149,8 +147,8 @@ class ChunkFormDataBuilder {
149
147
  build() {
150
148
  return this.formData;
151
149
  }
152
- }
153
- class ExponentialBackoffStrategy {
150
+ };
151
+ var ExponentialBackoffStrategy = class {
154
152
  static {
155
153
  __name(this, "ExponentialBackoffStrategy");
156
154
  }
@@ -160,8 +158,8 @@ class ExponentialBackoffStrategy {
160
158
  getDelay(attempt) {
161
159
  return Math.pow(2, attempt) * 1e3;
162
160
  }
163
- }
164
- class LinearBackoffStrategy {
161
+ };
162
+ var LinearBackoffStrategy = class {
165
163
  static {
166
164
  __name(this, "LinearBackoffStrategy");
167
165
  }
@@ -171,13 +169,8 @@ class LinearBackoffStrategy {
171
169
  getDelay(attempt) {
172
170
  return (attempt + 1) * 1e3;
173
171
  }
174
- }
172
+ };
175
173
 
176
- exports.ChunkFormDataBuilder = ChunkFormDataBuilder;
177
- exports.ExponentialBackoffStrategy = ExponentialBackoffStrategy;
178
- exports.FileUtils = FileUtils;
179
- exports.LinearBackoffStrategy = LinearBackoffStrategy;
180
- exports.createChunkFormData = createChunkFormData;
181
- exports.updateProgressBarHTMLNotified = updateProgressBarHTMLNotified;
182
- //# sourceMappingURL=index.js.map
183
- //# sourceMappingURL=index.js.map
174
+ export { ChunkFormDataBuilder, ExponentialBackoffStrategy, FileUtils, LinearBackoffStrategy, createChunkFormData, updateProgressBarHTMLNotified };
175
+ //# sourceMappingURL=chunk-MFYC4PBP.js.map
176
+ //# sourceMappingURL=chunk-MFYC4PBP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/index.ts"],"names":[],"mappings":"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","file":"chunk-MFYC4PBP.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\nimport {\n ChunkSizeConfig,\n DEFAULT_CONFIG\n} from \"../types\";\n\nexport class FileUtils {\n static readonly MB = 1024 * 1024;\n static readonly GB = 1024 * 1024 * 1024;\n\n static bytesToMB(bytes: number): number {\n return parseFloat((bytes / this.MB).toFixed(2));\n }\n\n static bytesToGB(bytes: number): number {\n return parseFloat((bytes / this.GB).toFixed(2));\n }\n\n static formatBytes(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n static formatDuration(seconds: number): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const secs = Math.floor(seconds % 60);\n\n if (hours > 0) return `${hours}h ${minutes}m ${secs}s`;\n if (minutes > 0) return `${minutes}m ${secs}s`;\n return `${secs}s`;\n }\n\n static calculateChunkSize(\n fileSize: number,\n speedMbps?: number,\n config: ChunkSizeConfig = DEFAULT_CONFIG\n ): number {\n const fileSizeMB = fileSize / this.MB;\n\n // Handle slow connections\n if (speedMbps && speedMbps < config.slowSpeedThresholdMbps) {\n return Math.min(\n config.defaultChunkSizeMB * this.MB,\n config.slowSpeedChunkSizeMB * this.MB\n );\n }\n\n // Adjust based on file size\n for (const threshold of config.fileSizeThresholds) {\n if (fileSizeMB <= threshold.maxSizeMB) {\n return threshold.chunkSizeMB * this.MB;\n }\n }\n\n return config.defaultChunkSizeMB * this.MB;\n }\n\n static generateFileHash(file: File|Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = async (e) => {\n try {\n const buffer = e.target?.result as ArrayBuffer;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer.slice(0, 1024 * 1024));\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n resolve(hashHex);\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = reject;\n reader.readAsArrayBuffer(file.slice(0, 1024 * 1024)); // Hash first 1MB\n });\n }\n}\n\nexport function updateProgressBarHTMLNotified(\n progress: number,\n media_id: number,\n filename: string,\n providerName = \"LocalVideo\"\n): string {\n const progressBarId = `progress-bar-item_${providerName}_${media_id}`;\n // On cherche la barre de progression interne (celle qui a la classe .progress-bar)\n const progressBarContainer = document.querySelector(`#${progressBarId}`);\n const progressBarInner = progressBarContainer?.querySelector('.progress-bar') as HTMLElement;\n\n if (progressBarInner) {\n // Mise à jour du DOM existant\n const roundedProgress = Math.round(progress);\n progressBarInner.style.width = `${progress}%`;\n progressBarInner.setAttribute('aria-valuenow', progress.toString());\n progressBarInner.innerText = `${roundedProgress}%`;\n\n return progressBarContainer!.innerHTML;\n } else {\n // Génération du template initial\n return `\n <div id=\"${progressBarId}\" class=\"mb-2\" style=\"width:100%;\">\n <small class=\"control-label text-dark fw-bolder filename-label w-100 d-block text-truncate\" title=\"${filename}\">\n ${filename}\n </small>\n <div class=\"progress\">\n <div class=\"progress-bar bg-success progress-bar-striped progress-bar-animated\"\n role=\"progressbar\"\n style=\"width: ${progress}%;\"\n aria-valuenow=\"${progress}\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\">${Math.round(progress)}%</div>\n </div>\n </div>`;\n }\n}\n\n/**\n * Options for creating chunk FormData\n */\nexport interface ChunkFormDataOptions {\n chunkIndex: number;\n totalChunks: number;\n mediaId: string;\n fileName: string;\n fileSize: number;\n fileHash: string;\n metadata?: Record<string, string | Blob>;\n}\n\n/**\n * Creates FormData for uploading a single file chunk.\n * \n * @param chunk - The chunk blob to upload\n * @param options - Chunk upload options\n * @returns FormData ready to be sent to the server\n * \n * @example\n * ```typescript\n * const formData = createChunkFormData(blob, {\n * chunkIndex: 5,\n * totalChunks: 10,\n * mediaId: 'abc123',\n * fileName: 'video.mp4',\n * fileSize: 104857600,\n * fileHash: 'sha256...'\n * });\n * ```\n */\nexport function createChunkFormData(\n chunk: Blob,\n options: ChunkFormDataOptions\n): FormData {\n const formData = new FormData();\n\n // Chunk data\n formData.append('chunk', chunk);\n formData.append('chunkIndex', options.chunkIndex.toString());\n formData.append('chunkSize', chunk.size.toString());\n formData.append('totalChunks', options.totalChunks.toString());\n\n // File metadata\n formData.append('fileName', options.fileName);\n formData.append('fileSize', options.fileSize.toString());\n formData.append('fileHash', options.fileHash);\n\n // Media ID (returned by server after metadata registration)\n formData.append('mediaId', options.mediaId);\n\n // Optional additional data\n if (options.metadata) {\n for (const [key, value] of Object.entries(options.metadata)) {\n if (typeof value === 'string' || value instanceof Blob) {\n formData.append(key, value);\n }\n }\n }\n\n return formData;\n}\n\n/**\n * Builder pattern for creating chunk FormData with fluent API.\n */\nexport class ChunkFormDataBuilder {\n private formData: FormData ;\n\n constructor(chunk: Blob) {\n this.formData = new FormData();\n\n this.formData.append('chunk', chunk);\n this.formData.append('chunkSize', chunk.size.toString());\n }\n\n withChunkInfo(chunkIndex: number, totalChunks: number): this {\n this.formData.append('chunkIndex', chunkIndex.toString());\n this.formData.append('totalChunks', totalChunks.toString());\n return this;\n }\n\n withFileInfo(fileName: string, fileSize: number, fileHash: string): this {\n this.formData.append('fileName', fileName);\n this.formData.append('fileSize', fileSize.toString());\n this.formData.append('fileHash', fileHash);\n return this;\n }\n\n withSessionId(sessionId: string): this {\n this.formData.append('sessionId', sessionId);\n return this;\n }\n\n withMetadata(metadata: Record<string, string | Blob>): this {\n for (const [key, value] of Object.entries(metadata)) {\n if (typeof value === 'string' || value instanceof Blob) {\n this.formData.append(key, value);\n }\n }\n return this;\n }\n\n build(): FormData {\n return this.formData;\n }\n}\n\n// Stratégie de retry configurable\ninterface RetryStrategyInterface {\n shouldRetry(attempt: number, maxRetries: number, error: Error): boolean;\n getDelay(attempt: number): number;\n}\n\nexport class ExponentialBackoffStrategy implements RetryStrategyInterface {\n shouldRetry(attempt: number, maxRetries: number): boolean {\n return attempt < maxRetries;\n }\n\n getDelay(attempt: number): number {\n return Math.pow(2, attempt) * 1000;\n }\n}\n\nexport class LinearBackoffStrategy implements RetryStrategyInterface {\n shouldRetry(attempt: number, maxRetries: number): boolean {\n return attempt < maxRetries;\n }\n\n getDelay(attempt: number): number {\n return (attempt + 1) * 1000; // 1s, 2s, 3s...\n }\n}\n"]}
@@ -0,0 +1,125 @@
1
+ import { __name } from './chunk-7QVYU63E.js';
2
+
3
+ // src/exceptions/index.ts
4
+ var InitializeUploadFailureException = class _InitializeUploadFailureException extends Error {
5
+ constructor(responseData, message) {
6
+ super(message);
7
+ this.responseData = responseData;
8
+ this.name = "InitializeUploadFailureException";
9
+ if (Error.captureStackTrace) {
10
+ Error.captureStackTrace(this, _InitializeUploadFailureException);
11
+ }
12
+ }
13
+ responseData;
14
+ static {
15
+ __name(this, "InitializeUploadFailureException");
16
+ }
17
+ };
18
+ var ChunkUploadHttpErrorException = class _ChunkUploadHttpErrorException extends Error {
19
+ constructor(errorPayload, statusResponse) {
20
+ super();
21
+ this.errorPayload = errorPayload;
22
+ this.statusResponse = statusResponse;
23
+ this.name = "ChunkUploadHttpErrorException";
24
+ if (Error.captureStackTrace) {
25
+ Error.captureStackTrace(this, _ChunkUploadHttpErrorException);
26
+ }
27
+ }
28
+ errorPayload;
29
+ statusResponse;
30
+ static {
31
+ __name(this, "ChunkUploadHttpErrorException");
32
+ }
33
+ };
34
+ var FileUploadChunkError = class _FileUploadChunkError extends Error {
35
+ static {
36
+ __name(this, "FileUploadChunkError");
37
+ }
38
+ /**
39
+ * The detailed chunk error information
40
+ */
41
+ chunkError;
42
+ /**
43
+ * Creates a new FileUploadChunkError
44
+ *
45
+ * @param message - Human-readable error message
46
+ * @param chunkError - Detailed information about the chunk failure
47
+ */
48
+ constructor(message, chunkError) {
49
+ super(message, { cause: chunkError.error });
50
+ this.name = "FileUploadChunkError";
51
+ this.chunkError = chunkError;
52
+ if (Error.captureStackTrace) {
53
+ Error.captureStackTrace(this, _FileUploadChunkError);
54
+ }
55
+ }
56
+ /**
57
+ * Gets the index of the chunk that failed
58
+ */
59
+ get chunkIndex() {
60
+ return this.chunkError.chunk.index;
61
+ }
62
+ /**
63
+ * Gets the attempt number when the chunk failed
64
+ */
65
+ get attemptNumber() {
66
+ return this.chunkError.attempt;
67
+ }
68
+ /**
69
+ * Indicates whether a retry will be attempted
70
+ */
71
+ get willRetry() {
72
+ return this.chunkError.willRetry;
73
+ }
74
+ /**
75
+ * Gets the underlying error that caused the chunk upload to fail
76
+ */
77
+ get underlyingError() {
78
+ return this.chunkError.error;
79
+ }
80
+ /**
81
+ * Gets the full chunk information
82
+ */
83
+ get chunk() {
84
+ return this.chunkError.chunk;
85
+ }
86
+ /**
87
+ * Returns a JSON representation of the error
88
+ */
89
+ toJSON() {
90
+ return {
91
+ name: this.name,
92
+ message: this.message,
93
+ chunkIndex: this.chunkIndex,
94
+ attempt: this.attemptNumber,
95
+ willRetry: this.willRetry,
96
+ underlyingError: {
97
+ name: this.underlyingError.name,
98
+ message: this.underlyingError.message
99
+ },
100
+ stack: this.stack
101
+ };
102
+ }
103
+ };
104
+ var UploadCancelledException = class _UploadCancelledException extends Error {
105
+ constructor(chunkIndex, totalChunks, uploadedBytes, message) {
106
+ super(message);
107
+ this.chunkIndex = chunkIndex;
108
+ this.totalChunks = totalChunks;
109
+ this.uploadedBytes = uploadedBytes;
110
+ this.name = "UploadCancelledException";
111
+ if (Error.captureStackTrace) {
112
+ Error.captureStackTrace(this, _UploadCancelledException);
113
+ }
114
+ }
115
+ chunkIndex;
116
+ totalChunks;
117
+ uploadedBytes;
118
+ static {
119
+ __name(this, "UploadCancelledException");
120
+ }
121
+ };
122
+
123
+ export { ChunkUploadHttpErrorException, FileUploadChunkError, InitializeUploadFailureException, UploadCancelledException };
124
+ //# sourceMappingURL=chunk-NXYS73I4.js.map
125
+ //# sourceMappingURL=chunk-NXYS73I4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"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","file":"chunk-NXYS73I4.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\n\nimport { ChunkInfo, ChunkError } from \"../types\";\n\nexport class InitializeUploadFailureException extends Error {\n constructor(public readonly responseData: any, message: string) {\n super(message);\n this.name = \"InitializeUploadFailureException\";\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, InitializeUploadFailureException);\n }\n }\n}\n\n/**\n * Exception data for MEDIA_CHUNK_UPLOAD_HTTP_ERROR_RESPONSE\n */\nexport class ChunkUploadHttpErrorException extends Error {\n constructor(\n public readonly errorPayload: string | Record<string, string | unknown> | unknown,\n public readonly statusResponse: number\n ) {\n super();\n\n this.name = \"ChunkUploadHttpErrorException\";\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ChunkUploadHttpErrorException);\n }\n }\n}\n\n/**\n * Custom error thrown during chunked file upload operations.\n * \n * This error provides detailed information about which chunk failed,\n * the underlying error, and whether a retry will be attempted.\n * \n * @example\n * ```typescript\n * try {\n * await uploadChunk(chunk);\n * } catch (error) {\n * throw new FileUploadChunkError(\n * `Failed to upload chunk ${chunkIndex}`,\n * chunkError\n * );\n * }\n * \n * // Later in error handler\n * if (error instanceof FileUploadChunkError) {\n * console.log(`Chunk ${error.chunkIndex} failed`);\n * console.log(`Will retry: ${error.willRetry}`);\n * }\n * ```\n */\nexport class FileUploadChunkError extends Error {\n\n /**\n * The detailed chunk error information\n */\n public readonly chunkError: ChunkError;\n\n /**\n * Creates a new FileUploadChunkError\n * \n * @param message - Human-readable error message\n * @param chunkError - Detailed information about the chunk failure\n */\n constructor(message: string, chunkError: ChunkError) {\n super(message, { cause: chunkError.error });\n\n this.name = \"FileUploadChunkError\";\n this.chunkError = chunkError;\n\n // Maintain proper stack trace in V8 engines (Chrome, Node.js)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FileUploadChunkError);\n }\n }\n\n /**\n * Gets the index of the chunk that failed\n */\n get chunkIndex(): number {\n return this.chunkError.chunk.index;\n }\n\n /**\n * Gets the attempt number when the chunk failed\n */\n get attemptNumber(): number {\n return this.chunkError.attempt;\n }\n\n /**\n * Indicates whether a retry will be attempted\n */\n get willRetry(): boolean {\n return this.chunkError.willRetry;\n }\n\n /**\n * Gets the underlying error that caused the chunk upload to fail\n */\n get underlyingError(): Error {\n return this.chunkError.error;\n }\n\n /**\n * Gets the full chunk information\n */\n get chunk(): ChunkInfo {\n return this.chunkError.chunk;\n }\n \n /**\n * Returns a JSON representation of the error\n */\n toJSON(): object {\n return {\n name: this.name,\n message: this.message,\n chunkIndex: this.chunkIndex,\n attempt: this.attemptNumber,\n willRetry: this.willRetry,\n underlyingError: {\n name: this.underlyingError.name,\n message: this.underlyingError.message\n },\n stack: this.stack\n };\n }\n}\n\n\nexport class UploadCancelledException extends Error {\n constructor(\n public readonly chunkIndex: number,\n public readonly totalChunks: number,\n public readonly uploadedBytes: number,\n message: string\n ) {\n super(message);\n this.name = \"UploadCancelledException\";\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, UploadCancelledException);\n }\n }\n}"]}
@@ -1,8 +1,7 @@
1
- 'use strict';
1
+ import { __name } from './chunk-7QVYU63E.js';
2
2
 
3
- var __defProp = Object.defineProperty;
4
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
- class DefaultUploadResumeCacheAdapter {
3
+ // src/cache/index.ts
4
+ var DefaultUploadResumeCacheAdapter = class {
6
5
  static {
7
6
  __name(this, "DefaultUploadResumeCacheAdapter");
8
7
  }
@@ -277,19 +276,19 @@ class DefaultUploadResumeCacheAdapter {
277
276
  get usage() {
278
277
  return this.cache.size / this.maxCacheSize * 100;
279
278
  }
280
- }
281
- class UploadCacheError extends Error {
279
+ };
280
+ var UploadCacheError = class extends Error {
282
281
  constructor(message, code) {
283
282
  super(message);
284
283
  this.code = code;
285
284
  this.name = "UploadCacheError";
286
285
  }
286
+ code;
287
287
  static {
288
288
  __name(this, "UploadCacheError");
289
289
  }
290
- }
290
+ };
291
291
 
292
- exports.DefaultUploadResumeCacheAdapter = DefaultUploadResumeCacheAdapter;
293
- exports.UploadCacheError = UploadCacheError;
294
- //# sourceMappingURL=index.js.map
295
- //# sourceMappingURL=index.js.map
292
+ export { DefaultUploadResumeCacheAdapter, UploadCacheError };
293
+ //# sourceMappingURL=chunk-PFALORWQ.js.map
294
+ //# sourceMappingURL=chunk-PFALORWQ.js.map