@wlindabla/file_uploader 1.0.0 → 2.0.0

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 (109) hide show
  1. package/README.md +51 -20
  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 +267 -0
  6. package/dist/cjs/core/index.js +753 -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 +63 -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 +94 -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 +13 -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 +33 -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/{subscribers/index.js → esm/chunk-332NNKOW.js} +36 -34
  42. package/dist/esm/chunk-332NNKOW.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/{core/index.js → esm/chunk-6DIKDA6J.js} +226 -227
  46. package/dist/esm/chunk-6DIKDA6J.js.map +1 -0
  47. package/dist/esm/chunk-7QVYU63E.js +6 -0
  48. package/dist/esm/chunk-7QVYU63E.js.map +1 -0
  49. package/dist/{events/initialize/index.js → esm/chunk-DN5B6PRW.js} +25 -19
  50. package/dist/esm/chunk-DN5B6PRW.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/{events/complete/index.js → esm/chunk-LTYMA4U4.js} +25 -19
  56. package/dist/{events/complete/index.js.map → esm/chunk-LTYMA4U4.js.map} +1 -1
  57. package/dist/{utils/index.js → esm/chunk-MFYC4PBP.js} +15 -22
  58. package/dist/esm/chunk-MFYC4PBP.js.map +1 -0
  59. package/dist/esm/chunk-NXYS73I4.js +125 -0
  60. package/dist/esm/chunk-NXYS73I4.js.map +1 -0
  61. package/dist/{cache/index.js → esm/chunk-PFALORWQ.js} +10 -11
  62. package/dist/esm/chunk-PFALORWQ.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 +267 -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 +63 -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 +94 -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 +13 -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 +33 -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/index.js.map +0 -1
  103. package/dist/events/initialize/index.js.map +0 -1
  104. package/dist/events/state/index.js.map +0 -1
  105. package/dist/exceptions/index.js.map +0 -1
  106. package/dist/index.js +0 -49
  107. package/dist/subscribers/index.js.map +0 -1
  108. package/dist/types/index.js.map +0 -1
  109. package/dist/utils/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/index.ts"],"names":[],"mappings":"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","file":"chunk-6DIKDA6J.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 BrowserEventDispatcher,\n EventDispatcherInterface\n} from \"@wlindabla/event_dispatcher\";\n\nimport {\n FetchResponseInterface,\n safeFetch,\n HttpFetchError\n} from \"@wlindabla/http_client\";\n\nimport {\n ChunkError,\n ChunkInfo,\n ResumeData,\n UploadEndpoints,\n UploadOptions,\n UploadProgress,\n UploadResult,\n UploadState\n} from \"../types\";\n\nimport { UploadResumeCacheInterface } from \"../cache\";\nimport {\n FileUtils,\n createChunkFormData\n} from \"../utils\";\n\nimport {\n ChunkUploadHttpErrorResponseEvent,\n HttpFileUploaderEvents,\n InitializingUploadEvent,\n UploadCancelledEvent,\n UploadProgressEvent,\n UploadStateChangedEvent,\n UploadChunkStartedEvent,\n UploadPausedEvent,\n UploadResumedEvent,\n ResumeUploadEvent,\n FinalizeUploadEvent,\n UploadMediaCompleteEvent\n} from \"../events\";\n\nimport { ChunkUploadHttpErrorException, FileUploadChunkError } from \"../exceptions\";\n\nimport pLimit from 'p-limit';\n\n\n/**\n * ChunkedFileUploader\n *\n * A production-ready, event-driven chunked file upload engine for Browser and Node.js.\n *\n * Designed and developed by **AGBOKOUDJO Franck** at\n * **INTERNATIONALES WEB APPS & SERVICES**, this class provides a robust,\n * framework-agnostic solution for uploading large files to a remote server\n * by splitting them into smaller chunks and sending them in parallel with\n * configurable concurrency control.\n *\n * ---\n *\n * ### How It Works\n *\n * The upload process follows a strict three-phase lifecycle:\n *\n * 1. **Initialization** — A session is opened with the server via the `init` endpoint.\n * The file is identified by its name, size, type, and a SHA-256 hash of its\n * first megabyte. The server returns a unique `mediaId` that identifies the session.\n *\n * 2. **Chunk Upload** — The file is sliced into fixed-size chunks and uploaded\n * concurrently using `p-limit`. Each chunk carries its index, the total number\n * of chunks, and the session `mediaId`. Failed chunks are retried automatically\n * with exponential backoff up to `maxRetries` attempts.\n *\n * 3. **Finalization** — Once all chunks are successfully uploaded, the `finalize`\n * endpoint is called to instruct the server to assemble the chunks into the\n * final file.\n *\n * ---\n *\n * ### Event-Driven Architecture\n *\n * This class follows the **Symfony EventDispatcher pattern** via\n * `@wlindabla/event_dispatcher`. Every meaningful moment in the upload\n * lifecycle emits a typed event that your application can listen to:\n *\n * ```\n * IDLE → INITIALIZING → UPLOADING → FINALIZING → COMPLETED\n * ↓ ↓\n * FAILED PAUSED ↔ UPLOADING\n * ↓\n * CANCELLED\n * ```\n *\n * All event name constants are centralized in {@link HttpFileUploaderEvents}.\n *\n * ---\n *\n * ### Subscriber Registration (Required)\n *\n * Before calling `.upload()`, you **must** register the two built-in subscribers\n * on your dispatcher. They handle the HTTP communication for the init and finalize phases:\n *\n * ```typescript\n * // Browser\n * const dispatcher = new BrowserEventDispatcher(document);\n * dispatcher.addSubscriber(new InitializeUploadSubscriber(dispatcher));\n * dispatcher.addSubscriber(new FinalizeUploadSubscriber(dispatcher));\n *\n * // Node.js\n * const dispatcher = new NodeEventDispatcher();\n * dispatcher.addSubscriber(new InitializeUploadSubscriber(dispatcher));\n * dispatcher.addSubscriber(new FinalizeUploadSubscriber(dispatcher));\n * ```\n *\n * ---\n *\n * ### Fluent Builder API\n *\n * The class exposes a fluent API to configure the upload before starting:\n *\n * ```typescript\n * const uploader = new ChunkedFileUploader(dispatcher, cache, options);\n *\n * await uploader\n * .withFile(file)\n * .withEndpoints({\n * init: 'https://api.example.com/upload/init',\n * upload: 'https://api.example.com/upload/chunk',\n * finalize: 'https://api.example.com/upload/finalize'\n * })\n * .upload();\n * ```\n *\n * ---\n *\n * ### Resumable Uploads\n *\n * When `autoSave: true` is set in options, the upload progress is persisted\n * after each successful chunk via the {@link UploadResumeCacheInterface}.\n * A failed or interrupted upload can be resumed later:\n *\n * ```typescript\n * const resumeData = await uploader.loadResumeData(file.name);\n *\n * if (resumeData) {\n * await uploader\n * .withFile(file)\n * .withEndpoints(endpoints)\n * .resumeUpload(resumeData);\n * }\n * ```\n *\n * ---\n *\n * ### Concurrency\n *\n * Multiple chunks can be uploaded simultaneously. The `concurrency` option\n * controls how many parallel uploads are active at any given time.\n * The default value is `3`, which provides a good balance between speed\n * and server/network load:\n *\n * ```typescript\n * // Upload 5 chunks in parallel\n * new ChunkedFileUploader(dispatcher, cache, { concurrency: 5 });\n * ```\n *\n * ---\n *\n * ### Pause, Resume and Cancel\n *\n * The upload can be paused, resumed, or cancelled at any time:\n *\n * ```typescript\n * uploader.pause(); // Pauses after the current chunk finishes\n * uploader.resume(); // Resumes from where it was paused\n * uploader.cancel(); // Aborts immediately via AbortController\n * ```\n *\n * ---\n *\n * ### Cache\n *\n * The library does **not** provide a built-in cache implementation to stay\n * lightweight and environment-agnostic. You must implement\n * {@link UploadResumeCacheInterface} with your preferred storage backend\n * (localStorage, IndexedDB, Redis, filesystem, etc.).\n *\n * ---\n *\n * @author AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * @company INTERNATIONALES WEB APPS & SERVICES\n * @phone +229 0167 25 18 86\n * @linkedin https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * @github https://github.com/Agbokoudjo/file_uploader\n *\n * @version 1.0.0\n * @since 1.0.0\n * @license MIT\n *\n * @see {@link HttpFileUploaderEvents} All event name constants\n * @see {@link UploadResumeCacheInterface} Cache interface to implement\n * @see {@link InitializeUploadSubscriber} Handles the init HTTP phase\n * @see {@link FinalizeUploadSubscriber} Handles the finalize HTTP phase\n * @see {@link UploadOptions} Full configuration reference\n * @see {@link https://github.com/Agbokoudjo/file_uploader | GitHub Repository}\n */\nexport class ChunkedFileUploader {\n private _file: File |null;\n private _endpoints: UploadEndpoints|null;\n \n private isPaused: boolean;\n private startTime: number;\n private uploadedBytes: number;\n private abortController: AbortController;\n private state: UploadState;\n private totalChunks: number;\n private percentage: number;\n private uploadedChunks: number;\n private lastUploadedChunkIndex: number; \n\n public constructor(\n private readonly _uploadEventDispatcher: EventDispatcherInterface = new BrowserEventDispatcher(), //or new NodeJSEventDispatcher() if you have an environment NodeJs\n private readonly uploadResumeData: UploadResumeCacheInterface,\n private options: UploadOptions\n ) {\n \n this._file = null;\n this._endpoints = null;\n this.isPaused = false;\n this.startTime = 0;\n this.uploadedBytes = 0;\n this.abortController = new AbortController();\n this.state = UploadState.IDLE;\n this.totalChunks = 0;\n this.percentage = 0;\n this.uploadedChunks = 0;\n this.lastUploadedChunkIndex = -1; \n }\n\n /**\n * Starts the chunked file upload process.\n * \n * @throws {Error} If file or endpoints are not set\n * @throws {InitializeUploadFailureException} If server initialization fails\n * @throws {FileUploadChunkError} If a chunk fails after all retries\n * \n * @example\n * ```typescript\n * const uploader = new ChunkedFileUploader(dispatcher, cache, options);\n * \n * uploader\n * .withFile(file)\n * .withEndpoints({ init, upload, finalize });\n * \n * await uploader.upload();\n * ```\n */\n public async upload(): Promise<void>{\n this.setState(UploadState.INITIALIZING);\n\n const { maxRetries = 3, config, speedMbps, metadata,\n headerInitialzingUpload, concurrency = 3\n } = this.options;\n\n const file = this.file;\n // Generate file hash for integrity check\n const fileHash = await FileUtils.generateFileHash(file) ;\n let fileId: string;\n\n try {\n const initializationEvent = await this._uploadEventDispatcher.dispatchAsync(\n new InitializingUploadEvent(\n {\n fileHash: fileHash,\n fileName: this.file.name,\n fileSize: this.file.size,\n fileType: this.file.type,\n metadata: metadata,\n endpointInit: this.endPointOptions.init,\n headers: headerInitialzingUpload\n }),\n HttpFileUploaderEvents.INITIALIZE_UPLOAD\n )\n\n fileId = initializationEvent.mediaId;\n } catch (error) {\n this.setState(UploadState.FAILED);\n throw error;\n }\n\n this.setState(UploadState.UPLOADING);\n this.startTime = Date.now();\n this.uploadedBytes = 0;\n this.uploadedChunks = 0;\n this.lastUploadedChunkIndex = -1;\n\n const chunkSize = this.options.chunkSize || FileUtils.calculateChunkSize(file.size, speedMbps, config);\n this.totalChunks = Math.ceil(file.size / chunkSize);\n try {\n await this.uploadChunksWithConcurrency(\n file,\n chunkSize,\n fileId,\n fileHash,\n maxRetries,\n concurrency,\n 0\n );\n\n await this.finalizeUpload(fileId, fileHash);\n \n } catch (error) {\n this.handleUploadFailure(error as Error);\n throw error;\n }\n }\n\n public withFile(file: File): this {\n if (!file) {\n throw new Error('File is required');\n }\n if (file.size === 0) {\n throw new Error('Cannot upload empty file');\n }\n if (!(file instanceof File) || !(file instanceof Blob)) {\n throw new TypeError('Expected File or Blob instance');\n }\n this._file = file;\n return this;\n }\n\n public withEndpoints(endpoints: UploadEndpoints): this {\n if (!endpoints.init || !endpoints.upload || !endpoints.finalize) {\n throw new Error('All endpoints (init, upload, finalize) are required');\n }\n this._endpoints = endpoints;\n return this;\n }\n\n private get endPointOptions():UploadEndpoints {\n if (!this._endpoints) {\n throw new Error('Endpoint URL is required');\n }\n\n return this._endpoints;\n }\n\n private get file(): File{ \n if (!this._file) {\n throw new Error(`\n This operation requires a mandatory file.Did you forget to upload the file? \n Use the withFile(file: File|Blob) function of the ChunkedFileUploader ${this} class that you instantiated.\n `)\n }\n\n return this._file;\n }\n\n /**\n * Upload all chunks with concurrency control using p-limit\n * \n * @param file - File to upload\n * @param chunkSize - Size of each chunk\n * @param fileId - Server file ID\n * @param fileHash - File hash\n * @param maxRetries - Max retry attempts per chunk\n * @param concurrency - Number of concurrent uploads (default: 3)\n */\n private async uploadChunksWithConcurrency(\n file: File,\n chunkSize: number,\n fileId: string,\n fileHash: string,\n maxRetries: number,\n concurrency: number,\n startIndex:number=0\n ): Promise<void> {\n try {\n const limit = pLimit(concurrency);\n\n // Créer toutes les promesses avec limite\n const uploadPromises: Promise<void>[] = [];\n\n for (let chunkIndex = startIndex; chunkIndex < this.totalChunks; chunkIndex++) {\n // Wrapper chaque upload dans le limiteur\n const limitedUpload = limit(() =>\n this.processChunk(\n file,\n chunkIndex,\n chunkSize,\n fileId,\n fileHash,\n maxRetries\n )\n );\n\n uploadPromises.push(limitedUpload);\n }\n\n // Attendre que tous les chunks soient uploadés\n await Promise.all(uploadPromises);\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Process a single chunk: slice, upload with retry, and save progress.\n * \n * @param file - The file being uploaded\n * @param currentChunkIndex - Index of the current chunk (0-based)\n * @param chunkSize - Size of each chunk in bytes\n * @param fileId - Server-provided file/session ID\n * @param fileHash - SHA-256 hash of the file\n * @param maxRetries - Maximum number of retry attempts\n * \n * @throws {UploadCancelledException} If upload is cancelled\n * @throws {FileUploadChunkError} If chunk upload fails after all retries\n */\n private async processChunk(\n file:File,\n currentChunkIndex: number,\n chunkSize:number,\n fileId: string,\n fileHash:string,\n maxRetries:number\n ): Promise<void>{\n try {\n if (this.abortController.signal.aborted) {\n this._uploadEventDispatcher.dispatch(\n new UploadCancelledEvent(\n file.name,\n this.totalChunks,\n this.uploadedBytes,\n this.percentage,\n currentChunkIndex,\n 'Upload cancelled by user',\n Date.now()\n ),\n HttpFileUploaderEvents.UPLOAD_CANCELLED\n )\n \n return;\n }\n\n while (this.isPaused) {\n await this.sleep(100);\n }\n // Calcule où commencer dans le fichier\n const start = currentChunkIndex * chunkSize;\n // chunkIndex=0 → start=0\n // chunkIndex=1 → start=300\n // chunkIndex=2 → start=600\n // chunkIndex=3 → start=900\n\n // Calcule où finir (sans depasser la fin du fichier)\n const end = Math.min(file.size, start + chunkSize);\n // chunkIndex=0 → end=min(1000, 300)=300\n // chunkIndex=1 → end=min(1000, 600)=600\n // chunkIndex=2 → end=min(1000, 900)=900\n // chunkIndex=3 → end=min(1000, 1200)=1000 ← Limité !\n\n // Découpe le morceau\n const chunk = file.slice(start, end);\n // chunkIndex=0 → slice(0, 300) → 300 bytes\n // chunkIndex=1 → slice(300, 600) → 300 bytes\n // chunkIndex=2 → slice(600, 900) → 300 bytes\n // chunkIndex=3 → slice(900, 1000)→ 100 bytes ← Plus petit !\n const chunkInfo: ChunkInfo = {\n index: currentChunkIndex,\n start,\n end,\n size: chunk.size,\n attempt: 0,\n status: 'pending'\n };\n\n this._uploadEventDispatcher.dispatch(\n new UploadChunkStartedEvent(chunkInfo),\n HttpFileUploaderEvents.MEDIA_CHUNK_UPLOAD_STARTED\n );\n // Upload with retry\n await this.uploadChunkWithRetry(\n chunk,\n chunkInfo,\n fileId,\n fileHash,\n this.totalChunks,\n maxRetries\n );\n\n // Auto-save progress\n if (this.options.autoSave) {\n await this.saveResumeData(fileId,chunkSize);\n }\n } catch (error) {\n throw error;\n \n }\n }\n\n private async uploadChunkWithRetry(\n chunk: Blob,\n chunkInfo: ChunkInfo,\n fileId: string,\n fileHash: string,\n totalChunks: number,\n maxRetries: number\n ): Promise<void> {\n let success = false;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < maxRetries && !success; attempt++) {\n chunkInfo.attempt = attempt + 1;\n chunkInfo.status = 'uploading';\n\n try {\n const response = await this.uploadChunk(chunk, chunkInfo, fileId, fileHash, totalChunks);\n success = true;\n chunkInfo.status = 'success';\n\n this.updateProgress(chunk.size, chunkInfo.index)\n\n this.notifyProgress(\n this.uploadedChunks,\n totalChunks,\n this.file.size,\n response\n );\n return;\n } catch (error) {\n if (error instanceof ChunkUploadHttpErrorException) {\n this._uploadEventDispatcher.dispatch(\n new ChunkUploadHttpErrorResponseEvent(\n error.errorPayload,\n error.statusResponse,\n this.endPointOptions.upload,\n chunkInfo),\n HttpFileUploaderEvents.MEDIA_CHUNK_UPLOAD_HTTP_ERROR_RESPONSE\n )\n }\n\n lastError = error as Error;\n chunkInfo.status = 'error';\n\n const chunkError: ChunkError= {\n chunk: chunkInfo,\n error: lastError,\n attempt: attempt + 1,\n willRetry: attempt < maxRetries - 1\n };\n\n if(error instanceof HttpFetchError){\n this._uploadEventDispatcher.dispatch(chunkError,HttpFileUploaderEvents.MEDIA_CHUNK_UPLOAD_FAILED)\n }\n\n if (attempt < maxRetries - 1) {\n const delay = Math.pow(2, attempt) * 1000;\n await this.sleep(delay);\n\n console.info(`Retry #${attempt + 2} in ${delay / 1000}s...`);\n }\n }\n }\n\n if (!success) {\n const fileUploadChunkError = new FileUploadChunkError(\n `Failed to upload chunk ${chunkInfo.index} after ${maxRetries} attempts`,\n {\n chunk: chunkInfo,\n error: lastError!,\n attempt: maxRetries,\n willRetry: false\n }\n );\n\n this._uploadEventDispatcher.dispatch(\n fileUploadChunkError,\n HttpFileUploaderEvents.MEDIA_CHUNK_UPLOAD_MAXRETRY_EXPIRE\n )\n throw fileUploadChunkError;\n }\n\n }\n\n private async uploadChunk(\n chunk: Blob,\n chunkInfo: ChunkInfo,\n mediaIdFromServer: string,\n fileHash: string,\n totalChunks: number\n ): Promise<FetchResponseInterface> {\n const media = this.file;\n const chunkFormData = createChunkFormData(\n chunk,\n {\n chunkIndex: chunkInfo.index,\n mediaId: mediaIdFromServer,\n fileSize: media.size,\n fileName: media.name,\n fileHash: fileHash,\n totalChunks: totalChunks\n }\n );\n\n try {\n const response_of_server = await safeFetch({\n url: this.endPointOptions.upload,\n headers: this.options.headers,\n data: chunkFormData,\n methodSend: \"POST\",\n responseType: \"json\",\n timeout: this.options.timeout ?? 60000,\n retryCount: 2,\n retryOnStatusCode: false,\n signal: this.createChunkAbortSignal()\n })\n const statusResponse = response_of_server.status;\n //if the server send a response which not success with status code(>=4XX ou >=5XX)\n if (response_of_server.failed) {\n throw new ChunkUploadHttpErrorException(response_of_server.data, statusResponse)\n }\n\n return response_of_server;\n } catch (error) {\n throw error;\n }\n\n }\n\n private createChunkAbortSignal(): AbortSignal {\n const chunkController = new AbortController();\n\n this.abortController.signal.addEventListener('abort', () => {\n chunkController.abort();\n });\n\n return chunkController.signal;\n }\n\n private notifyProgress(\n uploadedChunks: number,\n totalChunks: number,\n totalBytes: number,\n httpResponse: FetchResponseInterface): void {\n // Temps écoulé (minimum 0.1s pour éviter division par zéro)\n const elapsed = Math.max((Date.now() - this.startTime) / 1000, 0.1);\n const speed = this.uploadedBytes / elapsed; // Vitesse instantanée\n const remainingBytes = totalBytes - this.uploadedBytes; // Bytes restants\n // Temps restant (null si pas assez de données)\n const estimatedTimeRemaining = uploadedChunks < 2 ? null : remainingBytes / speed;\n\n this.percentage = Math.round((this.uploadedBytes / totalBytes) * 100);\n\n const progress: UploadProgress = {\n uploadedChunks,\n totalChunks,\n uploadedBytes: this.uploadedBytes,\n totalBytes,\n percentage: this.percentage,\n currentChunk: uploadedChunks,\n speed, // bytes/seconde\n estimatedTimeRemaining, // secondes (ou null)\n elapsed // secondes écoulées\n };\n\n this._uploadEventDispatcher.dispatch(\n new UploadProgressEvent(\n progress,\n httpResponse.data,\n httpResponse.status\n )\n )\n \n console.info(\n `Progress: ${this.percentage}% | ` +\n `Speed: ${FileUtils.formatBytes(speed)}/s | ` +\n `ETA: ${estimatedTimeRemaining ? FileUtils.formatDuration(estimatedTimeRemaining) : 'Calculating...'}`\n );\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n /**\n * Save current upload progress to cache for resume capability\n * \n * @param fileId - Server-provided file/session ID\n * @param chunkSize - Size of each chunk in bytes\n * @returns Saved resume data\n */\n private async saveResumeData(fileId: string, chunkSize: number): Promise<ResumeData> {\n const data: ResumeData = {\n fileId: fileId,\n fileName: this.file.name,\n fileSize: this.file.size,\n uploadedChunks: this.uploadedChunks,\n lastChunkIndex: this.lastUploadedChunkIndex,\n lastBytePosition: this.uploadedBytes,\n chunkSize: chunkSize,\n concurrency:this.options.concurrency || 3\n };\n\n await this.uploadResumeData.setItem(`upload_${this.file.name}`, data);\n\n console.info(\n `Resume data saved: ${this.uploadedChunks}/${Math.ceil(this.file.size / chunkSize)} chunks, ` +\n `last chunk index: ${this.lastUploadedChunkIndex}`\n );\n\n return data;\n }\n\n private setState(newState: UploadState): void {\n const oldState = this.state;\n this.state = newState;\n\n this._uploadEventDispatcher.dispatch(\n new UploadStateChangedEvent(\n oldState,\n newState,\n Date.now()\n ),\n HttpFileUploaderEvents.UPLOAD_STATE_CHANGED\n )\n \n }\n\n public getState(): UploadState {\n return this.state;\n }\n\n private handleUploadFailure(error: Error): void {\n this.setState(UploadState.FAILED);\n\n this._uploadEventDispatcher.dispatch(error, HttpFileUploaderEvents.DOWNLOAD_MEDIA_FAILURE);\n console.error('Upload failed:', error);\n }\n\n public cancel(): void {\n this.abortController.abort();\n this.setState(UploadState.CANCELLED);\n }\n\n public pause(): void {\n this.isPaused = true;\n this.setState(UploadState.PAUSED);\n this._uploadEventDispatcher.dispatch(\n new UploadPausedEvent(\n this.file.name,\n this.totalChunks,\n this.uploadedBytes,\n this.percentage,\n Date.now()\n ),\n HttpFileUploaderEvents.UPLOAD_PAUSED\n );\n }\n\n\n public resume(): void {\n this.isPaused = false;\n this.setState(UploadState.UPLOADING);\n this._uploadEventDispatcher.dispatch(\n new UploadResumedEvent(\n this.file.name,\n this.totalChunks,\n this.uploadedBytes, \n this.percentage),\n HttpFileUploaderEvents.UPLOAD_RESUMED,\n );\n }\n\n /**\n * Load previously saved resume data\n * \n * @param fileName - Name of the file to resume\n * @returns Resume data or null if not found\n */\n async loadResumeData(fileName: string): Promise<ResumeData | null> {\n try {\n const data = await this.uploadResumeData.getItem(`upload_${fileName}`);\n\n if (data) {\n console.info(\n `Resume data loaded: ${data.uploadedChunks} chunks uploaded, ` +\n `last index: ${data.lastChunkIndex}`\n );\n }\n return data;\n } catch (error) {\n console.warn(`No resume data found for ${fileName}`);\n return null;\n }\n }\n\n /**\n * Resume upload from saved state\n * \n * @param resumeData - Previously saved resume data\n * @returns Upload result\n */\n public async resumeUpload(resumeData: ResumeData): Promise<void> {\n const __message = `Resuming upload from chunk ${resumeData.lastChunkIndex + 1} ` +\n `(${resumeData.uploadedChunks} chunks already uploaded)`;\n\n // Restore state\n this.uploadedBytes = resumeData.lastBytePosition;\n this.uploadedChunks = resumeData.uploadedChunks;\n this.lastUploadedChunkIndex = resumeData.lastChunkIndex;\n\n // Calculate adjusted start time for accurate speed calculation\n const assumedSpeed = 500000; // 500 KB/s assumed\n const timeAlreadySpent = resumeData.lastBytePosition / assumedSpeed;\n this.startTime = Date.now() - (timeAlreadySpent * 1000);\n\n const { maxRetries = 3 } = this.options;\n const fileHash = await FileUtils.generateFileHash(this.file);\n const chunkSize = resumeData.chunkSize;\n this.totalChunks = Math.ceil(this.file.size / chunkSize);\n\n try {\n this._uploadEventDispatcher.dispatch(\n new ResumeUploadEvent(resumeData,__message),\n HttpFileUploaderEvents.MEDIA_CHUNK_UPLOAD_RESUME\n )\n await this.uploadChunksWithConcurrency(\n this.file,\n chunkSize,\n resumeData.fileId,\n fileHash,\n maxRetries,\n resumeData.concurrency,\n resumeData.lastChunkIndex + 1\n )\n ;\n await this.finalizeUpload(resumeData.fileId, fileHash);\n\n } catch (error) {\n this.handleUploadFailure(error as Error);\n throw error;\n }\n }\n\n private updateProgress(chunkSize: number, chunkIndex: number): void {\n this.uploadedBytes += chunkSize;\n this.uploadedChunks++;\n this.lastUploadedChunkIndex = Math.max(this.lastUploadedChunkIndex,chunkIndex);\n }\n \n private async finalizeUpload(mediaId: string, fileHash: string): Promise<void> {\n try {\n \n const finalizeUploadEvent = await this._uploadEventDispatcher.dispatchAsync(\n new FinalizeUploadEvent(\n this.endPointOptions.finalize,\n mediaId,\n fileHash,\n this.options.headerFinalezingUpload)\n ,\n HttpFileUploaderEvents.FINALIZE_UPLOAD\n )\n\n this.setState(UploadState.FINALIZING);\n\n\n const duration = (Date.now() - this.startTime) / 1000;\n\n const uploadResult: UploadResult = {\n success: true,\n finalizeUploadResponse: finalizeUploadEvent.hasResponse() ? finalizeUploadEvent.getResponse() : null ,\n totalChunks: this.totalChunks,\n totalBytes: this.file.size,\n duration,\n averageSpeed: this.file.size / duration,\n fileId: mediaId\n };\n\n this.setState(UploadState.COMPLETED);\n\n this._uploadEventDispatcher.dispatch(\n new UploadMediaCompleteEvent(uploadResult),HttpFileUploaderEvents.DOWNLOAD_MEDIA_COMPLETE\n )\n\n } catch (error) {\n throw error;\n }\n }\n}"]}
@@ -0,0 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ export { __name };
5
+ //# sourceMappingURL=chunk-7QVYU63E.js.map
6
+ //# sourceMappingURL=chunk-7QVYU63E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7QVYU63E.js"}
@@ -1,15 +1,13 @@
1
- 'use strict';
1
+ import { __name } from './chunk-7QVYU63E.js';
2
+ import { BaseEvent } from '@wlindabla/event_dispatcher';
2
3
 
3
- var event_dispatcher = require('@wlindabla/event_dispatcher');
4
-
5
- var __defProp = Object.defineProperty;
6
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
- class InitializingUploadEvent extends event_dispatcher.BaseEvent {
4
+ var InitializingUploadEvent = class extends BaseEvent {
8
5
  constructor(initUploadOptions) {
9
6
  super();
10
7
  this.initUploadOptions = initUploadOptions;
11
8
  this._mediaId = null;
12
9
  }
10
+ initUploadOptions;
13
11
  static {
14
12
  __name(this, "InitializingUploadEvent");
15
13
  }
@@ -25,30 +23,36 @@ class InitializingUploadEvent extends event_dispatcher.BaseEvent {
25
23
  }
26
24
  return this._mediaId;
27
25
  }
28
- }
29
- class InitializeUploadStartedEvent extends event_dispatcher.BaseEvent {
26
+ };
27
+ var InitializeUploadStartedEvent = class extends BaseEvent {
30
28
  constructor(fileName, fileSize, fileHash) {
31
29
  super();
32
30
  this.fileName = fileName;
33
31
  this.fileSize = fileSize;
34
32
  this.fileHash = fileHash;
35
33
  }
34
+ fileName;
35
+ fileSize;
36
+ fileHash;
36
37
  static {
37
38
  __name(this, "InitializeUploadStartedEvent");
38
39
  }
39
- }
40
- class InitializeUploadSuccessEvent extends event_dispatcher.BaseEvent {
40
+ };
41
+ var InitializeUploadSuccessEvent = class extends BaseEvent {
41
42
  constructor(status, sessionId, responseData) {
42
43
  super();
43
44
  this.status = status;
44
45
  this.sessionId = sessionId;
45
46
  this.responseData = responseData;
46
47
  }
48
+ status;
49
+ sessionId;
50
+ responseData;
47
51
  static {
48
52
  __name(this, "InitializeUploadSuccessEvent");
49
53
  }
50
- }
51
- class InitializeUploadFailureEvent extends event_dispatcher.BaseEvent {
54
+ };
55
+ var InitializeUploadFailureEvent = class extends BaseEvent {
52
56
  constructor(error, status, errorData, responseData, isNetworkError) {
53
57
  super();
54
58
  this.error = error;
@@ -57,14 +61,16 @@ class InitializeUploadFailureEvent extends event_dispatcher.BaseEvent {
57
61
  this.responseData = responseData;
58
62
  this.isNetworkError = isNetworkError;
59
63
  }
64
+ error;
65
+ status;
66
+ errorData;
67
+ responseData;
68
+ isNetworkError;
60
69
  static {
61
70
  __name(this, "InitializeUploadFailureEvent");
62
71
  }
63
- }
72
+ };
64
73
 
65
- exports.InitializeUploadFailureEvent = InitializeUploadFailureEvent;
66
- exports.InitializeUploadStartedEvent = InitializeUploadStartedEvent;
67
- exports.InitializeUploadSuccessEvent = InitializeUploadSuccessEvent;
68
- exports.InitializingUploadEvent = InitializingUploadEvent;
69
- //# sourceMappingURL=index.js.map
70
- //# sourceMappingURL=index.js.map
74
+ export { InitializeUploadFailureEvent, InitializeUploadStartedEvent, InitializeUploadSuccessEvent, InitializingUploadEvent };
75
+ //# sourceMappingURL=chunk-DN5B6PRW.js.map
76
+ //# sourceMappingURL=chunk-DN5B6PRW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/events/initialize/index.ts"],"names":[],"mappings":";;;AAqBO,IAAM,uBAAA,GAAN,cAAsC,SAAA,CAAS;AAAA,EAElD,YACoB,iBAAA,EAClB;AACE,IAAA,KAAA,EAAM;AAFU,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA;AAGhB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA,EAJoB,iBAAA;AAAA,EAxBxB;AAqBsD,IAAA,MAAA,CAAA,IAAA,EAAA,yBAAA,CAAA;AAAA;AAAA,EAC1C,QAAA;AAAA,EAQD,WAAW,cAAA,EAAwB;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,cAAA;AAAA,EACpB;AAAA,EAEA,IAAW,OAAA,GAAkB;AACzB,IAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OAGJ;AAAA,IACJ;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AACJ;AAKO,IAAM,4BAAA,GAAN,cAA2C,SAAA,CAAU;AAAA,EACxD,WAAA,CACoB,QAAA,EACA,QAAA,EACA,QAAA,EAClB;AAAE,IAAA,KAAA,EAAM;AAHU,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EACP;AAAA,EAHO,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EArDxB;AAiD4D,IAAA,MAAA,CAAA,IAAA,EAAA,8BAAA,CAAA;AAAA;AAM5D;AAKO,IAAM,4BAAA,GAAN,cAA2C,SAAA,CAAS;AAAA,EACvD,WAAA,CACoB,MAAA,EACA,SAAA,EACA,YAAA,EAClB;AAAE,IAAA,KAAA,EAAM;AAHU,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EACP;AAAA,EAHO,MAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EAhExB;AA4D2D,IAAA,MAAA,CAAA,IAAA,EAAA,8BAAA,CAAA;AAAA;AAM3D;AAKO,IAAM,4BAAA,GAAN,cAA2C,SAAA,CAAU;AAAA,EACxD,WAAA,CACoB,KAAA,EACA,MAAA,EACA,SAAA,EACA,cACA,cAAA,EAClB;AAAE,IAAA,KAAA,EAAM;AALU,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAAA,EACP;AAAA,EALO,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EA7ExB;AAuE4D,IAAA,MAAA,CAAA,IAAA,EAAA,8BAAA,CAAA;AAAA;AAQ5D","file":"chunk-DN5B6PRW.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 InitializeUploadOptions,\n InitializeUploadResponse\n} from \"../../types\";\n\nimport { BaseEvent } from \"@wlindabla/event_dispatcher\";\n\n/**\n * Event data for Upload State INITIALIZE\n */\nexport class InitializingUploadEvent extends BaseEvent{\n private _mediaId: string | null;\n constructor(\n public readonly initUploadOptions: InitializeUploadOptions\n ) {\n super();\n this._mediaId = null;\n }\n\n public setMediaId(_mediaUploadId: string) {\n this._mediaId = _mediaUploadId;\n }\n\n public get mediaId(): string {\n if (this._mediaId === null) {\n throw new Error(\n 'MediaId has not been set. ' +\n 'This likely means the InitializeUploadSubscriber failed. ' +\n 'Check that INITIALIZE_UPLOAD event was properly handled.'\n );\n }\n return this._mediaId;\n }\n}\n\n/**\n * Event data for INITIALIZE_UPLOAD_STARTED\n */\nexport class InitializeUploadStartedEvent extends BaseEvent {\n constructor(\n public readonly fileName: string,\n public readonly fileSize: number,\n public readonly fileHash: string\n ) { super(); }\n}\n\n/**\n * Event data for INITIALIZE_UPLOAD_SUCCESS\n */\nexport class InitializeUploadSuccessEvent extends BaseEvent{\n constructor(\n public readonly status: number,\n public readonly sessionId: string,\n public readonly responseData: InitializeUploadResponse\n ) { super(); }\n}\n\n/**\n * Event data for INITIALIZE_UPLOAD_FAILURE\n */\nexport class InitializeUploadFailureEvent extends BaseEvent {\n constructor(\n public readonly error: Error,\n public readonly status?: number,\n public readonly errorData?: any,\n public readonly responseData?: any,\n public readonly isNetworkError?: boolean\n ) { super(); }\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,14 +1,13 @@
1
- 'use strict';
1
+ import { __name } from './chunk-7QVYU63E.js';
2
+ import { BaseEvent } from '@wlindabla/event_dispatcher';
2
3
 
3
- var event_dispatcher = require('@wlindabla/event_dispatcher');
4
-
5
- var __defProp = Object.defineProperty;
6
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
- class ResumeUploadEvent {
4
+ var ResumeUploadEvent = class {
8
5
  constructor(__resumeData, message) {
9
6
  this.__resumeData = __resumeData;
10
7
  this.message = message;
11
8
  }
9
+ __resumeData;
10
+ message;
12
11
  static {
13
12
  __name(this, "ResumeUploadEvent");
14
13
  }
@@ -33,11 +32,12 @@ class ResumeUploadEvent {
33
32
  get fileSize() {
34
33
  return this.__resumeData.fileSize;
35
34
  }
36
- }
37
- class UploadMediaCompleteEvent {
35
+ };
36
+ var UploadMediaCompleteEvent = class {
38
37
  constructor(_uploadResult) {
39
38
  this._uploadResult = _uploadResult;
40
39
  }
40
+ _uploadResult;
41
41
  static {
42
42
  __name(this, "UploadMediaCompleteEvent");
43
43
  }
@@ -62,8 +62,8 @@ class UploadMediaCompleteEvent {
62
62
  get averageSpeed() {
63
63
  return this._uploadResult.averageSpeed;
64
64
  }
65
- }
66
- class FinalizeUploadFailureEvent extends event_dispatcher.BaseEvent {
65
+ };
66
+ var FinalizeUploadFailureEvent = class extends BaseEvent {
67
67
  constructor(error, status, errorData, responseData, isNetworkError) {
68
68
  super();
69
69
  this.error = error;
@@ -72,11 +72,16 @@ class FinalizeUploadFailureEvent extends event_dispatcher.BaseEvent {
72
72
  this.responseData = responseData;
73
73
  this.isNetworkError = isNetworkError;
74
74
  }
75
+ error;
76
+ status;
77
+ errorData;
78
+ responseData;
79
+ isNetworkError;
75
80
  static {
76
81
  __name(this, "FinalizeUploadFailureEvent");
77
82
  }
78
- }
79
- class FinalizeUploadEvent extends event_dispatcher.BaseEvent {
83
+ };
84
+ var FinalizeUploadEvent = class extends BaseEvent {
80
85
  constructor(endPoint, mediaId, mediaHash, headers) {
81
86
  super();
82
87
  this.endPoint = endPoint;
@@ -85,6 +90,10 @@ class FinalizeUploadEvent extends event_dispatcher.BaseEvent {
85
90
  this.headers = headers;
86
91
  this.fetchResponse = null;
87
92
  }
93
+ endPoint;
94
+ mediaId;
95
+ mediaHash;
96
+ headers;
88
97
  static {
89
98
  __name(this, "FinalizeUploadEvent");
90
99
  }
@@ -107,11 +116,8 @@ class FinalizeUploadEvent extends event_dispatcher.BaseEvent {
107
116
  hasResponse() {
108
117
  return this.fetchResponse !== null;
109
118
  }
110
- }
119
+ };
111
120
 
112
- exports.FinalizeUploadEvent = FinalizeUploadEvent;
113
- exports.FinalizeUploadFailureEvent = FinalizeUploadFailureEvent;
114
- exports.ResumeUploadEvent = ResumeUploadEvent;
115
- exports.UploadMediaCompleteEvent = UploadMediaCompleteEvent;
116
- //# sourceMappingURL=index.js.map
117
- //# sourceMappingURL=index.js.map
121
+ export { FinalizeUploadEvent, FinalizeUploadFailureEvent, ResumeUploadEvent, UploadMediaCompleteEvent };
122
+ //# sourceMappingURL=chunk-LTYMA4U4.js.map
123
+ //# sourceMappingURL=chunk-LTYMA4U4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/events/complete/index.ts"],"names":["BaseEvent"],"mappings":"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","file":"index.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 { BaseEvent } from \"@wlindabla/event_dispatcher\";\nimport { ResumeData,UploadResult } from \"../../types\";\nimport {\n ResponseEventInterface,\n FetchResponseInterface\n} from \"@wlindabla/http_client\";\n/**\n * Event data for MEDIA_CHUNK_UPLOAD_RESUME\n */\nexport class ResumeUploadEvent {\n constructor(\n private readonly __resumeData: ResumeData,\n public readonly message: string) { }\n\n public get mediaId(): string | number { return this.__resumeData.fileId; }\n\n public get fileName(): string { return this.__resumeData.fileName; }\n\n public get uploadedChunks(): number { return this.__resumeData.uploadedChunks; }\n\n public get lastChunkIndex(): number { return this.__resumeData.lastChunkIndex; }\n\n public get lastBytePosition(): number { return this.__resumeData.lastBytePosition; }\n\n public get chunkSize(): number { return this.__resumeData.chunkSize; }\n\n public get fileSize(): number { return this.__resumeData.fileSize; }\n}\n\n/**\n * Event data for DOWNLOAD_MEDIA_COMPLETE\n */\nexport class UploadMediaCompleteEvent {\n constructor(private readonly _uploadResult: UploadResult) { }\n\n public get success(): boolean { return this._uploadResult.success; }\n\n public get mediaId(): string | number { return this._uploadResult.fileId! }\n\n public get totalBytes(): number { return this._uploadResult.totalBytes; }\n\n public get totalChunks(): number { return this._uploadResult.totalChunks; }\n\n public get finalizeUploadHttpResponse(): any { return this._uploadResult.finalizeUploadResponse; }\n\n public get operationDuration(): number { return this._uploadResult.duration; }\n\n public get averageSpeed(): number { return this._uploadResult.averageSpeed; }\n}\n\nexport class FinalizeUploadFailureEvent extends BaseEvent{\n constructor(\n public readonly error: Error,\n public readonly status?: number,\n public readonly errorData?: any,\n public readonly responseData?: any,\n public readonly isNetworkError?: boolean\n ) { super(); }\n}\n\nexport class FinalizeUploadEvent extends BaseEvent implements ResponseEventInterface{\n private fetchResponse: FetchResponseInterface|null;\n\n constructor(\n public readonly endPoint:string|URL,\n public readonly mediaId: string,\n public readonly mediaHash: string,\n public readonly headers?: HeadersInit\n ) {\n super();\n this.fetchResponse = null;\n }\n\n /**\n * Returns the response\n */\n public getResponse(): FetchResponseInterface | null {\n return this.fetchResponse;\n }\n\n /**\n * Sets the response\n */\n public setResponse(response: FetchResponseInterface): void {\n this.fetchResponse = response;\n }\n\n /**\n * Returns whether a response was set\n */\n public hasResponse(): boolean {\n return this.fetchResponse !== null;\n }\n}"]}
1
+ {"version":3,"sources":["../../src/events/complete/index.ts"],"names":[],"mappings":"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","file":"chunk-LTYMA4U4.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 { BaseEvent } from \"@wlindabla/event_dispatcher\";\nimport { ResumeData,UploadResult } from \"../../types\";\nimport {\n ResponseEventInterface,\n FetchResponseInterface\n} from \"@wlindabla/http_client\";\n/**\n * Event data for MEDIA_CHUNK_UPLOAD_RESUME\n */\nexport class ResumeUploadEvent {\n constructor(\n private readonly __resumeData: ResumeData,\n public readonly message: string) { }\n\n public get mediaId(): string | number { return this.__resumeData.fileId; }\n\n public get fileName(): string { return this.__resumeData.fileName; }\n\n public get uploadedChunks(): number { return this.__resumeData.uploadedChunks; }\n\n public get lastChunkIndex(): number { return this.__resumeData.lastChunkIndex; }\n\n public get lastBytePosition(): number { return this.__resumeData.lastBytePosition; }\n\n public get chunkSize(): number { return this.__resumeData.chunkSize; }\n\n public get fileSize(): number { return this.__resumeData.fileSize; }\n}\n\n/**\n * Event data for DOWNLOAD_MEDIA_COMPLETE\n */\nexport class UploadMediaCompleteEvent {\n constructor(private readonly _uploadResult: UploadResult) { }\n\n public get success(): boolean { return this._uploadResult.success; }\n\n public get mediaId(): string | number { return this._uploadResult.fileId! }\n\n public get totalBytes(): number { return this._uploadResult.totalBytes; }\n\n public get totalChunks(): number { return this._uploadResult.totalChunks; }\n\n public get finalizeUploadHttpResponse(): any { return this._uploadResult.finalizeUploadResponse; }\n\n public get operationDuration(): number { return this._uploadResult.duration; }\n\n public get averageSpeed(): number { return this._uploadResult.averageSpeed; }\n}\n\nexport class FinalizeUploadFailureEvent extends BaseEvent{\n constructor(\n public readonly error: Error,\n public readonly status?: number,\n public readonly errorData?: any,\n public readonly responseData?: any,\n public readonly isNetworkError?: boolean\n ) { super(); }\n}\n\nexport class FinalizeUploadEvent extends BaseEvent implements ResponseEventInterface{\n private fetchResponse: FetchResponseInterface|null;\n\n constructor(\n public readonly endPoint:string|URL,\n public readonly mediaId: string,\n public readonly mediaHash: string,\n public readonly headers?: HeadersInit\n ) {\n super();\n this.fetchResponse = null;\n }\n\n /**\n * Returns the response\n */\n public getResponse(): FetchResponseInterface | null {\n return this.fetchResponse;\n }\n\n /**\n * Sets the response\n */\n public setResponse(response: FetchResponseInterface): void {\n this.fetchResponse = response;\n }\n\n /**\n * Returns whether a response was set\n */\n public hasResponse(): boolean {\n return this.fetchResponse !== null;\n }\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"]}