filemail-sdk 9.0.7 → 9.0.8

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 (86) hide show
  1. package/dist/src/client/downloader/node/nodeTransferDownloader.d.ts +2 -2
  2. package/dist/src/client/downloader/node/nodeTransferDownloader.d.ts.map +1 -1
  3. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  4. package/dist/src/client/downloader/transferDownloader.d.ts +2 -2
  5. package/dist/src/client/downloader/transferDownloader.d.ts.map +1 -1
  6. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  7. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorHealthyEventArgs.d.ts +9 -0
  8. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorHealthyEventArgs.d.ts.map +1 -0
  9. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorHealthyEventArgs.js +2 -0
  10. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorHealthyEventArgs.js.map +1 -0
  11. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorUnhealthyEventArgs.d.ts +19 -0
  12. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorUnhealthyEventArgs.d.ts.map +1 -0
  13. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorUnhealthyEventArgs.js +2 -0
  14. package/dist/src/client/uploader/healthMonitor/events/eventArgs/uploadHealthMonitorUnhealthyEventArgs.js.map +1 -0
  15. package/dist/src/client/uploader/healthMonitor/events/transferUploadHealthMonitorEvent.d.ts +6 -0
  16. package/dist/src/client/uploader/healthMonitor/events/transferUploadHealthMonitorEvent.d.ts.map +1 -0
  17. package/dist/src/client/uploader/healthMonitor/events/transferUploadHealthMonitorEvent.js +7 -0
  18. package/dist/src/client/uploader/healthMonitor/events/transferUploadHealthMonitorEvent.js.map +1 -0
  19. package/dist/src/client/uploader/healthMonitor/onlineChecker/nodeOnlineChecker.d.ts +5 -0
  20. package/dist/src/client/uploader/healthMonitor/onlineChecker/nodeOnlineChecker.d.ts.map +1 -0
  21. package/dist/src/client/uploader/healthMonitor/onlineChecker/nodeOnlineChecker.js +7 -0
  22. package/dist/src/client/uploader/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -0
  23. package/dist/src/client/uploader/healthMonitor/onlineChecker/onlineChecker.d.ts +14 -0
  24. package/dist/src/client/uploader/healthMonitor/onlineChecker/onlineChecker.d.ts.map +1 -0
  25. package/dist/src/client/uploader/healthMonitor/onlineChecker/onlineChecker.js +30 -0
  26. package/dist/src/client/uploader/healthMonitor/onlineChecker/onlineChecker.js.map +1 -0
  27. package/dist/src/client/uploader/healthMonitor/onlineChecker/webOnlineChecker.d.ts +5 -0
  28. package/dist/src/client/uploader/healthMonitor/onlineChecker/webOnlineChecker.d.ts.map +1 -0
  29. package/dist/src/client/uploader/healthMonitor/onlineChecker/webOnlineChecker.js +9 -0
  30. package/dist/src/client/uploader/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -0
  31. package/dist/src/client/uploader/healthMonitor/transferUploadHealthMonitor.d.ts +30 -0
  32. package/dist/src/client/uploader/healthMonitor/transferUploadHealthMonitor.d.ts.map +1 -0
  33. package/dist/src/client/uploader/healthMonitor/transferUploadHealthMonitor.js +158 -0
  34. package/dist/src/client/uploader/healthMonitor/transferUploadHealthMonitor.js.map +1 -0
  35. package/dist/src/client/uploader/node/nodeTransferUploader.d.ts.map +1 -1
  36. package/dist/src/client/uploader/node/nodeTransferUploader.js +4 -1
  37. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  38. package/dist/src/client/uploader/transferUploaderBase.d.ts +3 -1
  39. package/dist/src/client/uploader/transferUploaderBase.d.ts.map +1 -1
  40. package/dist/src/client/uploader/transferUploaderBase.js +8 -1
  41. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  42. package/dist/src/client/uploader/web/webTransferUploader.d.ts.map +1 -1
  43. package/dist/src/client/uploader/web/webTransferUploader.js +4 -1
  44. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  45. package/dist/src/downloader/downloadStatus/downloadState.d.ts +1 -1
  46. package/dist/src/downloader/downloadStatus/downloadState.d.ts.map +1 -1
  47. package/dist/src/downloader/downloadStatus/downloadState.js +2 -2
  48. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  49. package/dist/src/downloader/dtos/downloadEvent.d.ts +1 -1
  50. package/dist/src/downloader/dtos/downloadEvent.d.ts.map +1 -1
  51. package/dist/src/downloader/dtos/downloadEvent.js +1 -1
  52. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  53. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.d.ts +6 -0
  54. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.d.ts.map +1 -0
  55. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js +2 -0
  56. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -0
  57. package/dist/src/downloader/filesDownloader.js +1 -1
  58. package/dist/src/downloader/filesDownloader.js.map +1 -1
  59. package/dist/src/index.d.ts +8 -1
  60. package/dist/src/index.d.ts.map +1 -1
  61. package/dist/src/index.js +5 -0
  62. package/dist/src/index.js.map +1 -1
  63. package/dist/src/index.node.d.ts +1 -1
  64. package/dist/src/index.node.d.ts.map +1 -1
  65. package/dist/src/index.node.js.map +1 -1
  66. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.d.ts +7 -0
  67. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.d.ts.map +1 -0
  68. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js +2 -0
  69. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -0
  70. package/dist/src/uploader/transferUpload.d.ts +3 -3
  71. package/dist/src/uploader/transferUpload.d.ts.map +1 -1
  72. package/dist/src/uploader/transferUpload.js +9 -5
  73. package/dist/src/uploader/transferUpload.js.map +1 -1
  74. package/dist/src/uploader/transferUploadEvent.d.ts +1 -1
  75. package/dist/src/uploader/transferUploadEvent.d.ts.map +1 -1
  76. package/dist/src/uploader/transferUploadEvent.js +1 -1
  77. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  78. package/package.json +2 -1
  79. package/dist/src/downloader/eventArgs/downloadRegionDeterminedEventArgs.d.ts +0 -6
  80. package/dist/src/downloader/eventArgs/downloadRegionDeterminedEventArgs.d.ts.map +0 -1
  81. package/dist/src/downloader/eventArgs/downloadRegionDeterminedEventArgs.js +0 -2
  82. package/dist/src/downloader/eventArgs/downloadRegionDeterminedEventArgs.js.map +0 -1
  83. package/dist/src/uploader/eventArgs/transferRegionDeterminedEventArgs.d.ts +0 -5
  84. package/dist/src/uploader/eventArgs/transferRegionDeterminedEventArgs.d.ts.map +0 -1
  85. package/dist/src/uploader/eventArgs/transferRegionDeterminedEventArgs.js +0 -2
  86. package/dist/src/uploader/eventArgs/transferRegionDeterminedEventArgs.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferUploadHealthMonitor.js","sourceRoot":"","sources":["../../../../../src/client/uploader/healthMonitor/transferUploadHealthMonitor.ts"],"names":[],"mappings":"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","sourcesContent":["import TransferUploadEvent from \"../../../uploader/transferUploadEvent.js\";\r\n\r\nimport type EventsEngine from \"../../../utils/events/eventsEngine.js\";\r\nimport TransferUploadProgressedEventArgs from \"../../../uploader/eventArgs/transferUploadProgressedEventArgs.js\";\r\nimport TransferUploadHealthMonitorEvent from \"./events/transferUploadHealthMonitorEvent.js\";\r\nimport UploadHealthMonitorHealthyEventArgs from \"./events/eventArgs/uploadHealthMonitorHealthyEventArgs.js\";\r\nimport UploadHealthMonitorUnhealthyEventArgs from \"./events/eventArgs/uploadHealthMonitorUnhealthyEventArgs.js\";\r\nimport OnlineChecker, { OnlineCheckerResult } from \"./onlineChecker/onlineChecker.js\";\r\nimport { TransferMetadataDeterminedEventArgs } from \"../../../index.node.js\";\r\n\r\nexport default class TransferUploadHealthMonitor {\r\n readonly #onlineChecker: OnlineChecker;\r\n readonly #transferEventsEngine: EventsEngine;\r\n\r\n #healthCheckIntervalWhenHealthy: number;\r\n #healthCheckIntervalWhenUnhealthy: number;\r\n\r\n #timeout: NodeJS.Timeout | undefined;\r\n\r\n #fileServerUrl: string | undefined;\r\n\r\n #progressHistory: { time: number, eventArgs: TransferUploadProgressedEventArgs }[] = [];\r\n\r\n #lastProgressEvent: TransferUploadProgressedEventArgs | undefined;\r\n\r\n constructor(onlineChecker: OnlineChecker, transferEventsEngine: EventsEngine, healthCheckIntervalWhenHealthy = 15_000, healthCheckIntervalWhenUnhealthy = 5_000) {\r\n if (!onlineChecker)\r\n throw new Error(`Online checker can't be empty`);\r\n if (!transferEventsEngine)\r\n throw new Error(`Events engine can't be empty`);\r\n\r\n this.#onlineChecker = onlineChecker;\r\n this.#transferEventsEngine = transferEventsEngine;\r\n\r\n this.#healthCheckIntervalWhenHealthy = healthCheckIntervalWhenHealthy;\r\n this.#healthCheckIntervalWhenUnhealthy = healthCheckIntervalWhenUnhealthy;\r\n }\r\n\r\n start() {\r\n this.resetState();\r\n\r\n this.subscribeToTransferRunningEvents();\r\n\r\n this.#timeout = setTimeout(() => this.checkHealth(), this.#healthCheckIntervalWhenHealthy);\r\n }\r\n\r\n private resetState() {\r\n this.#progressHistory = [];\r\n }\r\n\r\n stop() {\r\n clearTimeout(this.#timeout);\r\n\r\n this.unsubscribeFromTransferRunningEvents();\r\n }\r\n\r\n private subscribeToTransferRunningEvents() {\r\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.TransferMetadataDetermined, this.transferMetadataDetermined);\r\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.TransferProgressed, this.transferProgressed);\r\n }\r\n\r\n private unsubscribeFromTransferRunningEvents() {\r\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.TransferMetadataDetermined, this.transferMetadataDetermined);\r\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.TransferProgressed, this.transferProgressed);\r\n }\r\n\r\n private transferMetadataDetermined = (eventArgs: TransferMetadataDeterminedEventArgs) => {\r\n this.#fileServerUrl = eventArgs.fileServerUrl;\r\n };\r\n\r\n private transferProgressed = (eventArgs: TransferUploadProgressedEventArgs) => {\r\n this.#progressHistory.push({ time: Date.now(), eventArgs });\r\n };\r\n\r\n private checkHealth = async (): Promise<void> => {\r\n const currentHistoryLastProgressEvent = this.#progressHistory.at(-1)?.eventArgs;\r\n\r\n this.#lastProgressEvent = currentHistoryLastProgressEvent || this.#lastProgressEvent;\r\n\r\n const isHealthy = this.determineIsHealthy(currentHistoryLastProgressEvent);\r\n\r\n if (isHealthy)\r\n this.notifyHealthy();\r\n else\r\n await this.figureOutUnhealthyReasonWithNotifications();\r\n\r\n this.resetState();\r\n\r\n const nextHealthCheck = this.getHealthCheckInterval(isHealthy);\r\n\r\n this.#timeout = setTimeout(() => this.checkHealth(), nextHealthCheck);\r\n };\r\n\r\n private determineIsHealthy(currentHistoryLastProgressEvent: TransferUploadProgressedEventArgs | undefined) {\r\n return currentHistoryLastProgressEvent !== undefined && currentHistoryLastProgressEvent.currentSpeedInBytesPerSecond > 0;\r\n }\r\n\r\n private async figureOutUnhealthyReasonWithNotifications(): Promise<void> {\r\n this.notifyStartedCheckingUnhealthyReason();\r\n\r\n const { isOnline: isInternetOnline, error: internetOnlineError } = await this.#onlineChecker.isInternetOnline();\r\n\r\n if (isInternetOnline)\r\n this.notifyUnhealthyInternetOkRestCheckingReason();\r\n else {\r\n this.notifyUnhealthyNoInternetReason(internetOnlineError);\r\n return;\r\n }\r\n\r\n const isApiOnlinePromise = this.#onlineChecker.isApiReachable();\r\n\r\n const isFileServerOnlinePromise = this.#fileServerUrl\r\n ? this.#onlineChecker.isFileServerReachable(this.#fileServerUrl)\r\n : Promise.resolve(undefined);\r\n\r\n const { isOnline: isApiOnline, error: apiOnlineError } = await isApiOnlinePromise;\r\n const isFileServerOnlineResult = await isFileServerOnlinePromise;\r\n\r\n if (isApiOnline && isFileServerOnlineResult?.isOnline === true)\r\n this.notifyUnhealthyAllOkReason();\r\n else {\r\n const fileServerStatus = this.isOnlineResultToStatus(isFileServerOnlineResult);\r\n\r\n this.notifyUnhealthyApiOrFileServerErrorReason(fileServerStatus, isFileServerOnlineResult?.error, apiOnlineError);\r\n }\r\n }\r\n\r\n private isOnlineResultToStatus(isFileServerOnlineResult: OnlineCheckerResult | undefined): `Ok` | `Error` | `Unknown` {\r\n if (!isFileServerOnlineResult)\r\n return `Unknown`;\r\n\r\n return isFileServerOnlineResult.isOnline ? `Ok` : `Error`;\r\n }\r\n\r\n private getHealthCheckInterval(isHealthy: boolean): number {\r\n return isHealthy ? this.#healthCheckIntervalWhenHealthy : this.#healthCheckIntervalWhenUnhealthy;\r\n }\r\n\r\n private notifyHealthy() {\r\n const eventArgs: UploadHealthMonitorHealthyEventArgs = {\r\n ...this.#lastProgressEvent,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferUploadHealthMonitorEvent.Healthy, eventArgs);\r\n }\r\n\r\n private notifyStartedCheckingUnhealthyReason() {\r\n const eventArgs: UploadHealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Checking` },\r\n api: { status: `Checking` },\r\n fileServer: { status: `Checking` },\r\n },\r\n ...this.#lastProgressEvent,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferUploadHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyInternetOkRestCheckingReason() {\r\n const eventArgs: UploadHealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Ok` },\r\n api: { status: `Checking` },\r\n fileServer: { status: `Checking` },\r\n },\r\n ...this.#lastProgressEvent,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferUploadHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyNoInternetReason(error?: Error) {\r\n const eventArgs: UploadHealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Error`, error },\r\n api: { status: `Unknown` },\r\n fileServer: { status: `Unknown` },\r\n },\r\n ...this.#lastProgressEvent,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferUploadHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyApiOrFileServerErrorReason(fileServerStatus: `Ok` | `Error` | `Unknown`, fileServerError: Error | undefined, apiError: Error | undefined) {\r\n const eventArgs: UploadHealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Ok` },\r\n api: apiError ? { status: `Error`, error: apiError } : { status: `Ok` },\r\n fileServer: fileServerError ? { status: `Error`, error: fileServerError } : { status: fileServerStatus },\r\n },\r\n ...this.#lastProgressEvent,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferUploadHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyAllOkReason() {\r\n const eventArgs: UploadHealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Ok` },\r\n api: { status: `Ok` },\r\n fileServer: { status: `Ok` },\r\n },\r\n ...this.#lastProgressEvent,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferUploadHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n addEventListener(eventName: TransferUploadHealthMonitorEvent.Healthy, handler: (event: UploadHealthMonitorHealthyEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadHealthMonitorEvent.Unhealthy, handler: (event: UploadHealthMonitorUnhealthyEventArgs) => void): void\r\n addEventListener(eventName: string, handler: (arg?: any) => void): void {\r\n this.#transferEventsEngine.addEventListener(eventName, handler);\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAUA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAG9D,OAAO,KAAK,eAAe,MAAM,mDAAmD,CAAC;AACrF,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAoB,CAAC,eAAe,CAAC;gBACvE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;gBAC9K,UAAU,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAkCrJ"}
1
+ {"version":3,"file":"nodeTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAUA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAK9D,OAAO,KAAK,eAAe,MAAM,mDAAmD,CAAC;AACrF,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAoB,CAAC,eAAe,CAAC;gBACvE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;gBAC9K,UAAU,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAmCrJ"}
@@ -9,6 +9,8 @@ import UdpConcurrencyBasedOptimizationStrategy from "../../../uploader/optimizer
9
9
  import NodeCryptographyProvider from "../../../utils/crypto/node/nodeCryptographyProvider.js";
10
10
  import TransferUploaderBase from "../transferUploaderBase.js";
11
11
  import { buildUploadConfig, isTransferInfo, fixTransferInfo } from "../utils/uploaderUtils.js";
12
+ import TransferUploadHealthMonitor from '../healthMonitor/transferUploadHealthMonitor.js';
13
+ import NodeOnlineChecker from '../healthMonitor/onlineChecker/nodeOnlineChecker.js';
12
14
  export default class NodeTransferUploader extends TransferUploaderBase {
13
15
  constructor(transferInfoOrExportData, config, envValues, logger) {
14
16
  const trackingId = config.trackingId || guid();
@@ -18,6 +20,7 @@ export default class NodeTransferUploader extends TransferUploaderBase {
18
20
  const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);
19
21
  const cryptography = new NodeCryptographyProvider();
20
22
  const uploadConfig = buildUploadConfig(config);
23
+ const healthMonitor = new TransferUploadHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), eventsEngine);
21
24
  const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);
22
25
  if (config.logintoken)
23
26
  apiClient.setLoginToken(config.logintoken);
@@ -32,7 +35,7 @@ export default class NodeTransferUploader extends TransferUploaderBase {
32
35
  fileDetails = transferInfoOrExportData.info.files;
33
36
  transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, optimizer, cryptography);
34
37
  }
35
- super(transfer, fileDetails, config, envValues, logger, trackingId);
38
+ super(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId);
36
39
  }
37
40
  }
38
41
  //# sourceMappingURL=nodeTransferUploader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,gBAAgB,MAAM,gDAAgD,CAAC;AAC9E,OAAO,2BAA2B,MAAM,wDAAwD,CAAC;AACjG,OAAO,iDAAiD,MAAM,mGAAmG,CAAC;AAClK,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAC7F,OAAO,uCAAuC,MAAM,mFAAmF,CAAC;AACxI,OAAO,wBAAwB,MAAM,wDAAwD,CAAC;AAC9F,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAU/F,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAqC;IAGnF,YAAY,wBAAuJ,EAAE,MAA8B,EAAE,SAA+B,EAAE,MAAc;QAChP,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAE/C,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC5C,MAAM,0BAA0B,GAAG,IAAI,iDAAiD,EAAE,CAAC;QAC3F,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,yBAAyB,EAAE,YAAY,EAAE,IAAI,uCAAuC,EAAE,CAAC,CAAC;QACzK,MAAM,uBAAuB,GAAG,IAAI,2BAA2B,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACvK,MAAM,YAAY,GAAG,IAAI,wBAAwB,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAE9J,IAAI,MAAM,CAAC,UAAU;YACjB,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,WAA0C,CAAC;QAC/C,IAAI,QAAyC,CAAC;QAE9C,IAAI,cAAc,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC3C,eAAe,CAAC,wBAAwB,CAAC,CAAC;YAE1C,WAAW,GAAG,wBAAwB,CAAC,KAAK,CAAC;YAE7C,QAAQ,GAAG,IAAI,cAAc,CAAC,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,wBAAwB,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACjL,CAAC;aACI,CAAC;YACF,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YAElD,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,wBAAwB,EAAE,YAAY,EAAE,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACtL,CAAC;QAED,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;CACJ","sourcesContent":["import { v4 as guid } from 'uuid';\r\n\r\nimport TransferUpload from \"../../../uploader/transferUpload.js\";\r\nimport NodeApiClient from \"../../../utils/api/node/nodeApiClient.js\";\r\nimport NodeEventsEngine from \"../../../utils/events/node/nodeEventsEngine.js\";\r\nimport NodeFileServerClientFactory from \"../../../utils/api/node/nodeFileServerClientFactory.js\";\r\nimport NodeFileDetailsUploaderChunkStreamProviderFactory from \"../../../uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js\";\r\nimport TransferUploadOptimizer from \"../../../uploader/optimizer/transferUploadOptimizer.js\";\r\nimport UdpConcurrencyBasedOptimizationStrategy from \"../../../uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js\";\r\nimport NodeCryptographyProvider from \"../../../utils/crypto/node/nodeCryptographyProvider.js\";\r\nimport TransferUploaderBase from \"../transferUploaderBase.js\";\r\nimport { buildUploadConfig, isTransferInfo, fixTransferInfo } from \"../utils/uploaderUtils.js\";\r\n\r\nimport type NodeFileDetails from \"../../../utils/fileSystem/node/nodeFileDetails.js\";\r\nimport type Logger from \"../../loggers/logger.js\";\r\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\r\nimport type TransferUploadInfo from \"../../../uploader/options/transferUploadInfo.js\";\r\nimport type { TransferUploadExportData } from \"../../../uploader/export/transferUploadExportData.js\";\r\nimport type { TransferUploadAppendInfo } from \"../../../uploader/options/transferUploadAppendInfo.js\";\r\nimport type TransferUploaderConfig from \"../transferUploaderConfig.js\";\r\n\r\nexport default class NodeTransferUploader extends TransferUploaderBase<NodeFileDetails> {\r\n constructor(transferInfo: TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\r\n constructor(exportData: TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\r\n constructor(transferInfoOrExportData: (TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>) | TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger) {\r\n const trackingId = config.trackingId || guid();\r\n\r\n const eventsEngine = new NodeEventsEngine();\r\n const chunkStreamProviderFactory = new NodeFileDetailsUploaderChunkStreamProviderFactory();\r\n const optimizer = new TransferUploadOptimizer(config.tcpChunkSizeInBytes, config.tcpChunksUploadInParallel, eventsEngine, new UdpConcurrencyBasedOptimizationStrategy());\r\n const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);\r\n const cryptography = new NodeCryptographyProvider();\r\n const uploadConfig = buildUploadConfig(config);\r\n\r\n const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);\r\n\r\n if (config.logintoken)\r\n apiClient.setLoginToken(config.logintoken);\r\n\r\n let fileDetails: NodeFileDetails[] | undefined;\r\n let transfer: TransferUpload<NodeFileDetails>;\r\n\r\n if (isTransferInfo(transferInfoOrExportData)) {\r\n fixTransferInfo(transferInfoOrExportData);\r\n\r\n fileDetails = transferInfoOrExportData.files;\r\n\r\n transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, optimizer, cryptography);\r\n }\r\n else {\r\n fileDetails = transferInfoOrExportData.info.files;\r\n\r\n transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, optimizer, cryptography);\r\n }\r\n\r\n super(transfer, fileDetails, config, envValues, logger, trackingId);\r\n }\r\n}"]}
1
+ {"version":3,"file":"nodeTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,gBAAgB,MAAM,gDAAgD,CAAC;AAC9E,OAAO,2BAA2B,MAAM,wDAAwD,CAAC;AACjG,OAAO,iDAAiD,MAAM,mGAAmG,CAAC;AAClK,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAC7F,OAAO,uCAAuC,MAAM,mFAAmF,CAAC;AACxI,OAAO,wBAAwB,MAAM,wDAAwD,CAAC;AAC9F,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,2BAA2B,MAAM,iDAAiD,CAAC;AAC1F,OAAO,iBAAiB,MAAM,qDAAqD,CAAC;AAUpF,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAqC;IAGnF,YAAY,wBAAuJ,EAAE,MAA8B,EAAE,SAA+B,EAAE,MAAc;QAChP,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAE/C,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC5C,MAAM,0BAA0B,GAAG,IAAI,iDAAiD,EAAE,CAAC;QAC3F,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,yBAAyB,EAAE,YAAY,EAAE,IAAI,uCAAuC,EAAE,CAAC,CAAC;QACzK,MAAM,uBAAuB,GAAG,IAAI,2BAA2B,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACvK,MAAM,YAAY,GAAG,IAAI,wBAAwB,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,2BAA2B,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;QAEjH,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAE9J,IAAI,MAAM,CAAC,UAAU;YACjB,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,WAA0C,CAAC;QAC/C,IAAI,QAAyC,CAAC;QAE9C,IAAI,cAAc,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC3C,eAAe,CAAC,wBAAwB,CAAC,CAAC;YAE1C,WAAW,GAAG,wBAAwB,CAAC,KAAK,CAAC;YAE7C,QAAQ,GAAG,IAAI,cAAc,CAAC,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,wBAAwB,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACjL,CAAC;aACI,CAAC;YACF,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YAElD,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,wBAAwB,EAAE,YAAY,EAAE,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACtL,CAAC;QAED,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACvF,CAAC;CACJ","sourcesContent":["import { v4 as guid } from 'uuid';\r\n\r\nimport TransferUpload from \"../../../uploader/transferUpload.js\";\r\nimport NodeApiClient from \"../../../utils/api/node/nodeApiClient.js\";\r\nimport NodeEventsEngine from \"../../../utils/events/node/nodeEventsEngine.js\";\r\nimport NodeFileServerClientFactory from \"../../../utils/api/node/nodeFileServerClientFactory.js\";\r\nimport NodeFileDetailsUploaderChunkStreamProviderFactory from \"../../../uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js\";\r\nimport TransferUploadOptimizer from \"../../../uploader/optimizer/transferUploadOptimizer.js\";\r\nimport UdpConcurrencyBasedOptimizationStrategy from \"../../../uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js\";\r\nimport NodeCryptographyProvider from \"../../../utils/crypto/node/nodeCryptographyProvider.js\";\r\nimport TransferUploaderBase from \"../transferUploaderBase.js\";\r\nimport { buildUploadConfig, isTransferInfo, fixTransferInfo } from \"../utils/uploaderUtils.js\";\r\nimport TransferUploadHealthMonitor from '../healthMonitor/transferUploadHealthMonitor.js';\r\nimport NodeOnlineChecker from '../healthMonitor/onlineChecker/nodeOnlineChecker.js';\r\n\r\nimport type NodeFileDetails from \"../../../utils/fileSystem/node/nodeFileDetails.js\";\r\nimport type Logger from \"../../loggers/logger.js\";\r\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\r\nimport type TransferUploadInfo from \"../../../uploader/options/transferUploadInfo.js\";\r\nimport type { TransferUploadExportData } from \"../../../uploader/export/transferUploadExportData.js\";\r\nimport type { TransferUploadAppendInfo } from \"../../../uploader/options/transferUploadAppendInfo.js\";\r\nimport type TransferUploaderConfig from \"../transferUploaderConfig.js\";\r\n\r\nexport default class NodeTransferUploader extends TransferUploaderBase<NodeFileDetails> {\r\n constructor(transferInfo: TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\r\n constructor(exportData: TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\r\n constructor(transferInfoOrExportData: (TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>) | TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger) {\r\n const trackingId = config.trackingId || guid();\r\n\r\n const eventsEngine = new NodeEventsEngine();\r\n const chunkStreamProviderFactory = new NodeFileDetailsUploaderChunkStreamProviderFactory();\r\n const optimizer = new TransferUploadOptimizer(config.tcpChunkSizeInBytes, config.tcpChunksUploadInParallel, eventsEngine, new UdpConcurrencyBasedOptimizationStrategy());\r\n const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);\r\n const cryptography = new NodeCryptographyProvider();\r\n const uploadConfig = buildUploadConfig(config);\r\n const healthMonitor = new TransferUploadHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), eventsEngine);\r\n\r\n const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);\r\n\r\n if (config.logintoken)\r\n apiClient.setLoginToken(config.logintoken);\r\n\r\n let fileDetails: NodeFileDetails[] | undefined;\r\n let transfer: TransferUpload<NodeFileDetails>;\r\n\r\n if (isTransferInfo(transferInfoOrExportData)) {\r\n fixTransferInfo(transferInfoOrExportData);\r\n\r\n fileDetails = transferInfoOrExportData.files;\r\n\r\n transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, optimizer, cryptography);\r\n }\r\n else {\r\n fileDetails = transferInfoOrExportData.info.files;\r\n\r\n transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, optimizer, cryptography);\r\n }\r\n\r\n super(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId);\r\n }\r\n}"]}
@@ -5,10 +5,12 @@ import type EnvironmentVariables from "../environmentVariables.js";
5
5
  import type TransferUploader from "./transferUploader.js";
6
6
  import type TransferUploaderConfig from "./transferUploaderConfig.js";
7
7
  import type WebFileDetails from "../../utils/fileSystem/web/webFileDetails.js";
8
+ import TransferUploadHealthMonitor from "./healthMonitor/transferUploadHealthMonitor.js";
8
9
  export default abstract class TransferUploaderBase<T extends NodeFileDetails | WebFileDetails> implements TransferUploader<T> {
9
10
  #private;
10
- constructor(transfer: TransferUpload<T>, fileDetails: T[], config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger, trackingId: number | string);
11
+ constructor(transfer: TransferUpload<T>, fileDetails: T[], config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger, healthMonitor: TransferUploadHealthMonitor, trackingId: number | string);
11
12
  get transfer(): TransferUpload<T>;
13
+ get healthMonitor(): TransferUploadHealthMonitor;
12
14
  get failedReason(): string | undefined;
13
15
  pause(): void;
14
16
  stop(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploaderBase.d.ts","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"AAGA,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAS9D,OAAO,KAAK,eAAe,MAAM,gDAAgD,CAAC;AAClF,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,sBAAsB,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,cAAc,MAAM,8CAA8C,CAAC;AAI/E,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,oBAAoB,CAAC,CAAC,SAAS,eAAe,GAAG,cAAc,CAAE,YAAW,gBAAgB,CAAC,CAAC,CAAC;;gBAoB7G,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAavK,IAAI,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,CAEhC;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAEM,KAAK;IAWL,IAAI;IAWE,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW;IAMvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IA4DjC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,iBAAiB;CAG5B"}
1
+ {"version":3,"file":"transferUploaderBase.d.ts","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"AAGA,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAS9D,OAAO,KAAK,eAAe,MAAM,gDAAgD,CAAC;AAClF,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,sBAAsB,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,cAAc,MAAM,8CAA8C,CAAC;AAC/E,OAAO,2BAA2B,MAAM,gDAAgD,CAAC;AAIzF,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,oBAAoB,CAAC,CAAC,SAAS,eAAe,GAAG,cAAc,CAAE,YAAW,gBAAgB,CAAC,CAAC,CAAC;;gBAqB7G,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAcnN,IAAI,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,CAEhC;IAED,IAAI,aAAa,IAAI,2BAA2B,CAE/C;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAEM,KAAK;IAWL,IAAI;IAWE,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW;IAMvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C5B,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IA4DjC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,iBAAiB;CAG5B"}
@@ -17,21 +17,26 @@ export default class TransferUploaderBase {
17
17
  #pauseController;
18
18
  #abortController;
19
19
  #transfer;
20
+ #healthMonitor;
20
21
  #isShuttingDown = false;
21
22
  #failedReason;
22
23
  #isUdp;
23
- constructor(transfer, fileDetails, config, envValues, logger, trackingId) {
24
+ constructor(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId) {
24
25
  this.#logger = logger;
25
26
  this.#trackingId = trackingId;
26
27
  this.#config = config;
27
28
  this.#envValues = envValues;
28
29
  this.#fileDetails = fileDetails;
29
30
  this.#transfer = transfer;
31
+ this.#healthMonitor = healthMonitor;
30
32
  this.addTransferEventListeners();
31
33
  }
32
34
  get transfer() {
33
35
  return this.#transfer;
34
36
  }
37
+ get healthMonitor() {
38
+ return this.#healthMonitor;
39
+ }
35
40
  get failedReason() {
36
41
  return this.#failedReason;
37
42
  }
@@ -63,6 +68,7 @@ export default class TransferUploaderBase {
63
68
  this.#isShuttingDown = false;
64
69
  this.#pauseController = new PauseController();
65
70
  this.#abortController = new AbortController();
71
+ this.#healthMonitor.start();
66
72
  do {
67
73
  /* eslint-disable no-await-in-loop */
68
74
  try {
@@ -82,6 +88,7 @@ export default class TransferUploaderBase {
82
88
  }
83
89
  }
84
90
  } while (this.#transfer.progressInPercentage < 100 && !this.#isShuttingDown);
91
+ this.#healthMonitor.stop();
85
92
  this.logInfo(`Upload finished in status ${TransferStatus[this.#transfer.status]} having ${this.#transfer.progressInPercentage}% completed`);
86
93
  }
87
94
  setFailedReasonFromError(error) {
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploaderBase.js","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\r\nimport sleep from \"abortable-sleep\";\r\n\r\nimport TransferUpload from \"../../uploader/transferUpload.js\";\r\nimport PauseController from \"../../uploader/pauseController.js\";\r\nimport TransferStatus from \"../../utils/types/transferStatus.js\";\r\nimport TransferUploadEvent from \"../../uploader/transferUploadEvent.js\";\r\nimport FsError from \"../../utils/fileSystem/fsError.js\";\r\nimport TransferUploadError from \"../../uploader/transferUploadError.js\";\r\nimport logEventPropertyName from \"../../utils/logging/logEventPropertyNames.js\";\r\nimport ApiFilemailError from \"../../utils/api/apiFilemailError.js\";\r\n\r\nimport type NodeFileDetails from \"../../utils/fileSystem/node/nodeFileDetails.js\";\r\nimport type Logger from \"../loggers/logger.js\";\r\nimport type EnvironmentVariables from \"../environmentVariables.js\";\r\nimport type TransferUploader from \"./transferUploader.js\";\r\nimport type ReadonlyTransferUploadStateFile from \"../../uploader/state/readonlyTransferUploadStateFile.js\";\r\nimport type TransferUploaderConfig from \"./transferUploaderConfig.js\";\r\nimport type WebFileDetails from \"../../utils/fileSystem/web/webFileDetails.js\";\r\n\r\nconst TransferFailedSleepInMs = 500;\r\n\r\nexport default abstract class TransferUploaderBase<T extends NodeFileDetails | WebFileDetails> implements TransferUploader<T> {\r\n #logger: Logger;\r\n #trackingId: number | string;\r\n\r\n #fileDetails: T[];\r\n\r\n #config: TransferUploaderConfig;\r\n #envValues: EnvironmentVariables;\r\n\r\n #pauseController?: PauseController;\r\n #abortController?: AbortController;\r\n\r\n #transfer: TransferUpload<T>;\r\n\r\n #isShuttingDown = false;\r\n\r\n #failedReason?: string;\r\n\r\n #isUdp?: boolean;\r\n\r\n constructor(transfer: TransferUpload<T>, fileDetails: T[], config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger, trackingId: number | string) {\r\n this.#logger = logger;\r\n this.#trackingId = trackingId;\r\n\r\n this.#config = config;\r\n this.#envValues = envValues;\r\n\r\n this.#fileDetails = fileDetails;\r\n this.#transfer = transfer;\r\n\r\n this.addTransferEventListeners();\r\n }\r\n\r\n get transfer(): TransferUpload<T> {\r\n return this.#transfer;\r\n }\r\n\r\n get failedReason(): string | undefined {\r\n return this.#failedReason;\r\n }\r\n\r\n public pause() {\r\n this.logInfo(`Pause called`);\r\n\r\n if (!this.#pauseController)\r\n throw new TransferUploadError(`Can't pause not started transfer`);\r\n\r\n this.#isShuttingDown = true;\r\n\r\n this.#pauseController.pause();\r\n }\r\n\r\n public stop() {\r\n this.logInfo(`Stop called`);\r\n\r\n if (!this.#abortController)\r\n throw new TransferUploadError(`Can't stop not started transfer`);\r\n\r\n this.#isShuttingDown = true;\r\n\r\n this.#abortController.abort();\r\n }\r\n\r\n public async cancel(abortSignal?: AbortSignal) {\r\n this.logInfo(`Cancel called`);\r\n\r\n await this.#transfer.cancel(abortSignal);\r\n }\r\n\r\n async start(): Promise<void> {\r\n if (this.#transfer.status !== TransferStatus.Failed && this.#transfer.status !== TransferStatus.Aborted && this.#transfer.status !== TransferStatus.Initialized && this.#transfer.status !== TransferStatus.Paused)\r\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transfer.status]} state and cannot be run`);\r\n\r\n this.logInfo(`Starting upload. Already uploaded bytes: ${this.transfer.uploadedBytesCount}/${this.#transfer.totalSizeInBytes}B, completed files: ${this.transfer.completedFilesCount}.`);\r\n\r\n const logMessageEntries = this.#transfer.files.map(f => `'Sending ${f.fileName}' with id = ${f.externalId}. It will be put into '${f.fileDestinationPathInTransfer}' folder.`);\r\n this.logInfo(`Transfer file details:\\n${logMessageEntries.join(`\\n`)}`);\r\n\r\n this.#failedReason = undefined;\r\n this.#isShuttingDown = false;\r\n\r\n this.#pauseController = new PauseController();\r\n this.#abortController = new AbortController();\r\n\r\n do {\r\n /* eslint-disable no-await-in-loop */\r\n try {\r\n await this.#transfer.run(this.#pauseController.signal, this.#abortController.signal);\r\n }\r\n catch (error) {\r\n this.logError(error as TransferUploadError, `Transfer upload run method exception`);\r\n\r\n this.setFailedReasonFromError(error as TransferUploadError);\r\n this.#isShuttingDown = true;\r\n\r\n break;\r\n }\r\n finally {\r\n // @ts-ignore Typescript's brainfart\r\n if (this.#transfer.status !== TransferStatus.Completed && !this.#isShuttingDown) {\r\n this.logWarning(`Retrying transfer in ${TransferFailedSleepInMs}ms.`);\r\n\r\n await sleep(TransferFailedSleepInMs);\r\n }\r\n }\r\n }\r\n while (this.#transfer.progressInPercentage < 100 && !this.#isShuttingDown);\r\n\r\n this.logInfo(`Upload finished in status ${TransferStatus[this.#transfer.status]} having ${this.#transfer.progressInPercentage}% completed`);\r\n }\r\n\r\n private setFailedReasonFromError(error: TransferUploadError) {\r\n const apiFilemailError = this.tryGetApiFilemailError(error);\r\n\r\n if (apiFilemailError) {\r\n this.#failedReason = apiFilemailError.reason;\r\n return;\r\n }\r\n\r\n if (error.message.startsWith(`Unhandled error occured`) && error.cause) {\r\n this.#failedReason = error.cause.message;\r\n return;\r\n }\r\n\r\n this.#failedReason = error.message;\r\n }\r\n\r\n private tryGetApiFilemailError(error: Error): ApiFilemailError | null {\r\n if (error instanceof ApiFilemailError)\r\n return error;\r\n\r\n if (error.cause)\r\n return this.tryGetApiFilemailError(error.cause);\r\n\r\n return null;\r\n }\r\n\r\n private addTransferEventListeners() {\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferUploadModeChosen, eventArgs => {\r\n this.#isUdp = eventArgs.isUdpMode;\r\n });\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadFailed, eventArgs => {\r\n const isTimeoutError = eventArgs.error.message.includes(`Timeout`);\r\n const errorMessage = `File ${eventArgs.fileStatus.externalId} chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} upload failed: ${eventArgs.reason}`;\r\n\r\n if (this.#isUdp && isTimeoutError)\r\n this.logDebug(errorMessage);\r\n else\r\n this.logError(eventArgs.error, errorMessage);\r\n\r\n const isFileAccessError = eventArgs.error.cause instanceof FsError;\r\n const fullFilePathOrName = this.getFullFilePathOrFileName(eventArgs.fileStatus);\r\n\r\n if (isFileAccessError && !this.#isShuttingDown) {\r\n this.#failedReason = `Can't read ${fullFilePathOrName} anymore`;\r\n\r\n this.logWarning(`${this.#failedReason}. Aborting...`);\r\n this.stop();\r\n }\r\n\r\n if (!this.#config.infiniteRetries && !this.#isShuttingDown) {\r\n this.#failedReason = `Uploading ${fullFilePathOrName} failed after ${this.#config.chunkUploadRetryLimit} retries`;\r\n\r\n this.logWarning(`${this.#failedReason}. Aborting...`);\r\n this.stop();\r\n }\r\n });\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadFailed, eventArgs => {\r\n const isTimeoutError = eventArgs.reason?.includes(`Timeout`);\r\n const errorMessage = `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - upload failed: ${eventArgs.reason}`;\r\n\r\n if (this.#isUdp && isTimeoutError)\r\n this.logWarning(errorMessage);\r\n else\r\n this.logError(new Error(errorMessage));\r\n });\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferRun, () => this.logInfo(`Transfer run.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferAbortRequested, () => this.logInfo(`Transfer abort requested`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferAborted, async () => this.logInfo(`Transfer aborted.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferCancelRequested, () => this.logInfo(`Transfer cancel requested.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferCanceled, () => this.logInfo(`Transfer canceled.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferFailed, () => this.logError(new Error(`Transfer failed.`)));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferUploadModeChosen, eventArgs => this.logInfo(`Transfer upload mode chosen. Is UDP: ${eventArgs.isUdpMode}; Latency: ${eventArgs.latency ?? `<unkown>`}; Error: ${eventArgs.error ?? `<none>`}`));\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferCompleted, eventArgs => this.logInfo(`Transfer completed successfully. ID: ${eventArgs.transferId}, URL: ${eventArgs.transferDownloadUrl}`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadProgressed, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} progressed: ${eventArgs.transferredBytesSinceLastEvent} bytes sinc last event. Total progress: ${this.#transfer?.progressInPercentage}%.`));\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadStarted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - upload started.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadCompleted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - upload completed.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadStarted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload started`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompleted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload completed`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, eventArgs => this.logWarning(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - uploaded partially - only ${eventArgs.uploadedBytesCount} bytes uploaded`));\r\n }\r\n\r\n private logTrace(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logTrace(message, logEntryMetadata);\r\n }\r\n\r\n private logDebug(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logDebug(message, logEntryMetadata);\r\n }\r\n\r\n private logInfo(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logInfo(message, logEntryMetadata);\r\n }\r\n\r\n private logWarning(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logWarning(message, logEntryMetadata);\r\n }\r\n\r\n private logError(error: Error, message?: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logError(error, message, logEntryMetadata);\r\n }\r\n\r\n private getLogEntryMetadata() {\r\n return {\r\n [logEventPropertyName.TrackingIdPropertyName]: this.#trackingId,\r\n [logEventPropertyName.TransferIdPropertyName]: this.#transfer.transferId,\r\n };\r\n }\r\n\r\n private getFullFilePathOrFileName(fileStatus: ReadonlyTransferUploadStateFile): string {\r\n const fileDetails = this.#fileDetails.find(f => f.externalId === fileStatus.externalId);\r\n\r\n if (!fileDetails)\r\n return fileStatus.fileName;\r\n\r\n if (this.isNodeFileDetails(fileDetails))\r\n return fileDetails.fileFullPath;\r\n\r\n return fileDetails.file.name;\r\n }\r\n\r\n private isNodeFileDetails(fileDetails: NodeFileDetails | WebFileDetails): fileDetails is NodeFileDetails {\r\n return typeof (fileDetails as NodeFileDetails).fileFullPath === `string`;\r\n }\r\n}"]}
1
+ {"version":3,"file":"transferUploaderBase.js","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\r\nimport sleep from \"abortable-sleep\";\r\n\r\nimport TransferUpload from \"../../uploader/transferUpload.js\";\r\nimport PauseController from \"../../uploader/pauseController.js\";\r\nimport TransferStatus from \"../../utils/types/transferStatus.js\";\r\nimport TransferUploadEvent from \"../../uploader/transferUploadEvent.js\";\r\nimport FsError from \"../../utils/fileSystem/fsError.js\";\r\nimport TransferUploadError from \"../../uploader/transferUploadError.js\";\r\nimport logEventPropertyName from \"../../utils/logging/logEventPropertyNames.js\";\r\nimport ApiFilemailError from \"../../utils/api/apiFilemailError.js\";\r\n\r\nimport type NodeFileDetails from \"../../utils/fileSystem/node/nodeFileDetails.js\";\r\nimport type Logger from \"../loggers/logger.js\";\r\nimport type EnvironmentVariables from \"../environmentVariables.js\";\r\nimport type TransferUploader from \"./transferUploader.js\";\r\nimport type ReadonlyTransferUploadStateFile from \"../../uploader/state/readonlyTransferUploadStateFile.js\";\r\nimport type TransferUploaderConfig from \"./transferUploaderConfig.js\";\r\nimport type WebFileDetails from \"../../utils/fileSystem/web/webFileDetails.js\";\r\nimport TransferUploadHealthMonitor from \"./healthMonitor/transferUploadHealthMonitor.js\";\r\n\r\nconst TransferFailedSleepInMs = 500;\r\n\r\nexport default abstract class TransferUploaderBase<T extends NodeFileDetails | WebFileDetails> implements TransferUploader<T> {\r\n #logger: Logger;\r\n #trackingId: number | string;\r\n\r\n #fileDetails: T[];\r\n\r\n #config: TransferUploaderConfig;\r\n #envValues: EnvironmentVariables;\r\n\r\n #pauseController?: PauseController;\r\n #abortController?: AbortController;\r\n\r\n #transfer: TransferUpload<T>;\r\n #healthMonitor: TransferUploadHealthMonitor;\r\n\r\n #isShuttingDown = false;\r\n\r\n #failedReason?: string;\r\n\r\n #isUdp?: boolean;\r\n\r\n constructor(transfer: TransferUpload<T>, fileDetails: T[], config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger, healthMonitor: TransferUploadHealthMonitor, trackingId: number | string) {\r\n this.#logger = logger;\r\n this.#trackingId = trackingId;\r\n\r\n this.#config = config;\r\n this.#envValues = envValues;\r\n\r\n this.#fileDetails = fileDetails;\r\n this.#transfer = transfer;\r\n this.#healthMonitor = healthMonitor;\r\n\r\n this.addTransferEventListeners();\r\n }\r\n\r\n get transfer(): TransferUpload<T> {\r\n return this.#transfer;\r\n }\r\n\r\n get healthMonitor(): TransferUploadHealthMonitor {\r\n return this.#healthMonitor;\r\n }\r\n\r\n get failedReason(): string | undefined {\r\n return this.#failedReason;\r\n }\r\n\r\n public pause() {\r\n this.logInfo(`Pause called`);\r\n\r\n if (!this.#pauseController)\r\n throw new TransferUploadError(`Can't pause not started transfer`);\r\n\r\n this.#isShuttingDown = true;\r\n\r\n this.#pauseController.pause();\r\n }\r\n\r\n public stop() {\r\n this.logInfo(`Stop called`);\r\n\r\n if (!this.#abortController)\r\n throw new TransferUploadError(`Can't stop not started transfer`);\r\n\r\n this.#isShuttingDown = true;\r\n\r\n this.#abortController.abort();\r\n }\r\n\r\n public async cancel(abortSignal?: AbortSignal) {\r\n this.logInfo(`Cancel called`);\r\n\r\n await this.#transfer.cancel(abortSignal);\r\n }\r\n\r\n async start(): Promise<void> {\r\n if (this.#transfer.status !== TransferStatus.Failed && this.#transfer.status !== TransferStatus.Aborted && this.#transfer.status !== TransferStatus.Initialized && this.#transfer.status !== TransferStatus.Paused)\r\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transfer.status]} state and cannot be run`);\r\n\r\n this.logInfo(`Starting upload. Already uploaded bytes: ${this.transfer.uploadedBytesCount}/${this.#transfer.totalSizeInBytes}B, completed files: ${this.transfer.completedFilesCount}.`);\r\n\r\n const logMessageEntries = this.#transfer.files.map(f => `'Sending ${f.fileName}' with id = ${f.externalId}. It will be put into '${f.fileDestinationPathInTransfer}' folder.`);\r\n this.logInfo(`Transfer file details:\\n${logMessageEntries.join(`\\n`)}`);\r\n\r\n this.#failedReason = undefined;\r\n this.#isShuttingDown = false;\r\n\r\n this.#pauseController = new PauseController();\r\n this.#abortController = new AbortController();\r\n\r\n this.#healthMonitor.start();\r\n\r\n do {\r\n /* eslint-disable no-await-in-loop */\r\n try {\r\n await this.#transfer.run(this.#pauseController.signal, this.#abortController.signal);\r\n }\r\n catch (error) {\r\n this.logError(error as TransferUploadError, `Transfer upload run method exception`);\r\n\r\n this.setFailedReasonFromError(error as TransferUploadError);\r\n this.#isShuttingDown = true;\r\n\r\n break;\r\n }\r\n finally {\r\n // @ts-ignore Typescript's brainfart\r\n if (this.#transfer.status !== TransferStatus.Completed && !this.#isShuttingDown) {\r\n this.logWarning(`Retrying transfer in ${TransferFailedSleepInMs}ms.`);\r\n\r\n await sleep(TransferFailedSleepInMs);\r\n }\r\n }\r\n }\r\n while (this.#transfer.progressInPercentage < 100 && !this.#isShuttingDown);\r\n\r\n this.#healthMonitor.stop();\r\n\r\n this.logInfo(`Upload finished in status ${TransferStatus[this.#transfer.status]} having ${this.#transfer.progressInPercentage}% completed`);\r\n }\r\n\r\n private setFailedReasonFromError(error: TransferUploadError) {\r\n const apiFilemailError = this.tryGetApiFilemailError(error);\r\n\r\n if (apiFilemailError) {\r\n this.#failedReason = apiFilemailError.reason;\r\n return;\r\n }\r\n\r\n if (error.message.startsWith(`Unhandled error occured`) && error.cause) {\r\n this.#failedReason = error.cause.message;\r\n return;\r\n }\r\n\r\n this.#failedReason = error.message;\r\n }\r\n\r\n private tryGetApiFilemailError(error: Error): ApiFilemailError | null {\r\n if (error instanceof ApiFilemailError)\r\n return error;\r\n\r\n if (error.cause)\r\n return this.tryGetApiFilemailError(error.cause);\r\n\r\n return null;\r\n }\r\n\r\n private addTransferEventListeners() {\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferUploadModeChosen, eventArgs => {\r\n this.#isUdp = eventArgs.isUdpMode;\r\n });\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadFailed, eventArgs => {\r\n const isTimeoutError = eventArgs.error.message.includes(`Timeout`);\r\n const errorMessage = `File ${eventArgs.fileStatus.externalId} chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} upload failed: ${eventArgs.reason}`;\r\n\r\n if (this.#isUdp && isTimeoutError)\r\n this.logDebug(errorMessage);\r\n else\r\n this.logError(eventArgs.error, errorMessage);\r\n\r\n const isFileAccessError = eventArgs.error.cause instanceof FsError;\r\n const fullFilePathOrName = this.getFullFilePathOrFileName(eventArgs.fileStatus);\r\n\r\n if (isFileAccessError && !this.#isShuttingDown) {\r\n this.#failedReason = `Can't read ${fullFilePathOrName} anymore`;\r\n\r\n this.logWarning(`${this.#failedReason}. Aborting...`);\r\n this.stop();\r\n }\r\n\r\n if (!this.#config.infiniteRetries && !this.#isShuttingDown) {\r\n this.#failedReason = `Uploading ${fullFilePathOrName} failed after ${this.#config.chunkUploadRetryLimit} retries`;\r\n\r\n this.logWarning(`${this.#failedReason}. Aborting...`);\r\n this.stop();\r\n }\r\n });\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadFailed, eventArgs => {\r\n const isTimeoutError = eventArgs.reason?.includes(`Timeout`);\r\n const errorMessage = `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - upload failed: ${eventArgs.reason}`;\r\n\r\n if (this.#isUdp && isTimeoutError)\r\n this.logWarning(errorMessage);\r\n else\r\n this.logError(new Error(errorMessage));\r\n });\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferRun, () => this.logInfo(`Transfer run.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferAbortRequested, () => this.logInfo(`Transfer abort requested`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferAborted, async () => this.logInfo(`Transfer aborted.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferCancelRequested, () => this.logInfo(`Transfer cancel requested.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferCanceled, () => this.logInfo(`Transfer canceled.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferFailed, () => this.logError(new Error(`Transfer failed.`)));\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferUploadModeChosen, eventArgs => this.logInfo(`Transfer upload mode chosen. Is UDP: ${eventArgs.isUdpMode}; Latency: ${eventArgs.latency ?? `<unkown>`}; Error: ${eventArgs.error ?? `<none>`}`));\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.TransferCompleted, eventArgs => this.logInfo(`Transfer completed successfully. ID: ${eventArgs.transferId}, URL: ${eventArgs.transferDownloadUrl}`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadProgressed, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} progressed: ${eventArgs.transferredBytesSinceLastEvent} bytes sinc last event. Total progress: ${this.#transfer?.progressInPercentage}%.`));\r\n\r\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadStarted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - upload started.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadCompleted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - upload completed.`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadStarted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload started`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompleted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload completed`));\r\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, eventArgs => this.logWarning(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - uploaded partially - only ${eventArgs.uploadedBytesCount} bytes uploaded`));\r\n }\r\n\r\n private logTrace(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logTrace(message, logEntryMetadata);\r\n }\r\n\r\n private logDebug(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logDebug(message, logEntryMetadata);\r\n }\r\n\r\n private logInfo(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logInfo(message, logEntryMetadata);\r\n }\r\n\r\n private logWarning(message: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logWarning(message, logEntryMetadata);\r\n }\r\n\r\n private logError(error: Error, message?: string) {\r\n const logEntryMetadata = this.getLogEntryMetadata();\r\n this.#logger.logError(error, message, logEntryMetadata);\r\n }\r\n\r\n private getLogEntryMetadata() {\r\n return {\r\n [logEventPropertyName.TrackingIdPropertyName]: this.#trackingId,\r\n [logEventPropertyName.TransferIdPropertyName]: this.#transfer.transferId,\r\n };\r\n }\r\n\r\n private getFullFilePathOrFileName(fileStatus: ReadonlyTransferUploadStateFile): string {\r\n const fileDetails = this.#fileDetails.find(f => f.externalId === fileStatus.externalId);\r\n\r\n if (!fileDetails)\r\n return fileStatus.fileName;\r\n\r\n if (this.isNodeFileDetails(fileDetails))\r\n return fileDetails.fileFullPath;\r\n\r\n return fileDetails.file.name;\r\n }\r\n\r\n private isNodeFileDetails(fileDetails: NodeFileDetails | WebFileDetails): fileDetails is NodeFileDetails {\r\n return typeof (fileDetails as NodeFileDetails).fileFullPath === `string`;\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/web/webTransferUploader.ts"],"names":[],"mappings":"AAMA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAO9D,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,cAAc,MAAM,iDAAiD,CAAC;AAElF,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoB,CAAC,cAAc,CAAC;gBACrE,YAAY,EAAE,kBAAkB,CAAC,cAAc,CAAC,GAAG,wBAAwB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAqB3L"}
1
+ {"version":3,"file":"webTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/web/webTransferUploader.ts"],"names":[],"mappings":"AAMA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAS9D,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,cAAc,MAAM,iDAAiD,CAAC;AAElF,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoB,CAAC,cAAc,CAAC;gBACrE,YAAY,EAAE,kBAAkB,CAAC,cAAc,CAAC,GAAG,wBAAwB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAsB3L"}
@@ -9,6 +9,8 @@ import WebFileDetailsUploaderChunkStreamProviderFactory from '../../../uploader/
9
9
  import WebCryptographyProvider from '../../../utils/crypto/web/webCryptographyProvider.js';
10
10
  import WebFileServerClientFactory from '../../../utils/api/web/webFileServerClientFactory.js';
11
11
  import WebApiClient from '../../../utils/api/web/webApiClient.js';
12
+ import TransferUploadHealthMonitor from '../healthMonitor/transferUploadHealthMonitor.js';
13
+ import WebOnlineChecker from '../healthMonitor/onlineChecker/webOnlineChecker.js';
12
14
  export default class WebTransferUploader extends TransferUploaderBase {
13
15
  constructor(transferInfo, config, envValues, logger) {
14
16
  const trackingId = config.trackingId || guid();
@@ -18,12 +20,13 @@ export default class WebTransferUploader extends TransferUploaderBase {
18
20
  const fileServerClientFactory = new WebFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);
19
21
  const cryptography = new WebCryptographyProvider();
20
22
  const uploadConfig = buildUploadConfig(config);
23
+ const healthMonitor = new TransferUploadHealthMonitor(new WebOnlineChecker(envValues.apiBaseUrl), eventsEngine);
21
24
  const apiClient = new WebApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);
22
25
  if (config.logintoken)
23
26
  apiClient.setLoginToken(config.logintoken);
24
27
  fixTransferInfo(transferInfo);
25
28
  const transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfo, uploadConfig, optimizer, cryptography);
26
- super(transfer, transferInfo.files, config, envValues, logger, trackingId);
29
+ super(transfer, transferInfo.files, config, envValues, logger, healthMonitor, trackingId);
27
30
  }
28
31
  }
29
32
  //# sourceMappingURL=webTransferUploader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/web/webTransferUploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAC7F,OAAO,uCAAuC,MAAM,mFAAmF,CAAC;AACxI,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAC9D,OAAO,eAAe,MAAM,8CAA8C,CAAC;AAC3E,OAAO,gDAAgD,MAAM,kGAAkG,CAAC;AAChK,OAAO,uBAAuB,MAAM,sDAAsD,CAAC;AAC3F,OAAO,0BAA0B,MAAM,sDAAsD,CAAC;AAC9F,OAAO,YAAY,MAAM,wCAAwC,CAAC;AASlE,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoC;IACjF,YAAY,YAA2F,EAAE,MAA8B,EAAE,SAA+B,EAAE,MAAc;QACpL,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAE/C,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,MAAM,0BAA0B,GAAG,IAAI,gDAAgD,EAAE,CAAC;QAC1F,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,yBAAyB,EAAE,YAAY,EAAE,IAAI,uCAAuC,EAAE,CAAC,CAAC;QACzK,MAAM,uBAAuB,GAAG,IAAI,0BAA0B,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACtK,MAAM,YAAY,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAE7J,IAAI,MAAM,CAAC,UAAU;YACjB,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE/C,eAAe,CAAC,YAAY,CAAC,CAAC;QAE9B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAEvK,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/E,CAAC;CACJ","sourcesContent":["import { v4 as guid } from 'uuid';\r\n\r\nimport TransferUpload from \"../../../uploader/transferUpload.js\";\r\nimport TransferUploadOptimizer from \"../../../uploader/optimizer/transferUploadOptimizer.js\";\r\nimport UdpConcurrencyBasedOptimizationStrategy from \"../../../uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js\";\r\nimport { buildUploadConfig, fixTransferInfo } from '../utils/uploaderUtils.js';\r\nimport TransferUploaderBase from \"../transferUploaderBase.js\";\r\nimport WebEventsEngine from '../../../utils/events/web/webEventsEngine.js';\r\nimport WebFileDetailsUploaderChunkStreamProviderFactory from '../../../uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js';\r\nimport WebCryptographyProvider from '../../../utils/crypto/web/webCryptographyProvider.js';\r\nimport WebFileServerClientFactory from '../../../utils/api/web/webFileServerClientFactory.js';\r\nimport WebApiClient from '../../../utils/api/web/webApiClient.js';\r\n\r\nimport type Logger from \"../../loggers/logger.js\";\r\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\r\nimport type TransferUploadInfo from \"../../../uploader/options/transferUploadInfo.js\";\r\nimport type { TransferUploadAppendInfo } from \"../../../uploader/options/transferUploadAppendInfo.js\";\r\nimport type TransferUploaderConfig from \"../transferUploaderConfig.js\";\r\nimport type WebFileDetails from \"../../../utils/fileSystem/web/webFileDetails.js\";\r\n\r\nexport default class WebTransferUploader extends TransferUploaderBase<WebFileDetails> {\r\n constructor(transferInfo: TransferUploadInfo<WebFileDetails> | TransferUploadAppendInfo<WebFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger) {\r\n const trackingId = config.trackingId || guid();\r\n\r\n const eventsEngine = new WebEventsEngine();\r\n const chunkStreamProviderFactory = new WebFileDetailsUploaderChunkStreamProviderFactory();\r\n const optimizer = new TransferUploadOptimizer(config.tcpChunkSizeInBytes, config.tcpChunksUploadInParallel, eventsEngine, new UdpConcurrencyBasedOptimizationStrategy());\r\n const fileServerClientFactory = new WebFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);\r\n const cryptography = new WebCryptographyProvider();\r\n const uploadConfig = buildUploadConfig(config);\r\n\r\n const apiClient = new WebApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);\r\n\r\n if (config.logintoken)\r\n apiClient.setLoginToken(config.logintoken);\r\n\r\n fixTransferInfo(transferInfo);\r\n\r\n const transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfo, uploadConfig, optimizer, cryptography);\r\n\r\n super(transfer, transferInfo.files, config, envValues, logger, trackingId);\r\n }\r\n}"]}
1
+ {"version":3,"file":"webTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/web/webTransferUploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAC7F,OAAO,uCAAuC,MAAM,mFAAmF,CAAC;AACxI,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAC9D,OAAO,eAAe,MAAM,8CAA8C,CAAC;AAC3E,OAAO,gDAAgD,MAAM,kGAAkG,CAAC;AAChK,OAAO,uBAAuB,MAAM,sDAAsD,CAAC;AAC3F,OAAO,0BAA0B,MAAM,sDAAsD,CAAC;AAC9F,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,2BAA2B,MAAM,iDAAiD,CAAC;AAC1F,OAAO,gBAAgB,MAAM,oDAAoD,CAAC;AASlF,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoC;IACjF,YAAY,YAA2F,EAAE,MAA8B,EAAE,SAA+B,EAAE,MAAc;QACpL,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAE/C,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,MAAM,0BAA0B,GAAG,IAAI,gDAAgD,EAAE,CAAC;QAC1F,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,yBAAyB,EAAE,YAAY,EAAE,IAAI,uCAAuC,EAAE,CAAC,CAAC;QACzK,MAAM,uBAAuB,GAAG,IAAI,0BAA0B,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACtK,MAAM,YAAY,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,2BAA2B,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;QAEhH,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAE7J,IAAI,MAAM,CAAC,UAAU;YACjB,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE/C,eAAe,CAAC,YAAY,CAAC,CAAC;QAE9B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAEvK,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAC9F,CAAC;CACJ","sourcesContent":["import { v4 as guid } from 'uuid';\r\n\r\nimport TransferUpload from \"../../../uploader/transferUpload.js\";\r\nimport TransferUploadOptimizer from \"../../../uploader/optimizer/transferUploadOptimizer.js\";\r\nimport UdpConcurrencyBasedOptimizationStrategy from \"../../../uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js\";\r\nimport { buildUploadConfig, fixTransferInfo } from '../utils/uploaderUtils.js';\r\nimport TransferUploaderBase from \"../transferUploaderBase.js\";\r\nimport WebEventsEngine from '../../../utils/events/web/webEventsEngine.js';\r\nimport WebFileDetailsUploaderChunkStreamProviderFactory from '../../../uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js';\r\nimport WebCryptographyProvider from '../../../utils/crypto/web/webCryptographyProvider.js';\r\nimport WebFileServerClientFactory from '../../../utils/api/web/webFileServerClientFactory.js';\r\nimport WebApiClient from '../../../utils/api/web/webApiClient.js';\r\nimport TransferUploadHealthMonitor from '../healthMonitor/transferUploadHealthMonitor.js';\r\nimport WebOnlineChecker from '../healthMonitor/onlineChecker/webOnlineChecker.js';\r\n\r\nimport type Logger from \"../../loggers/logger.js\";\r\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\r\nimport type TransferUploadInfo from \"../../../uploader/options/transferUploadInfo.js\";\r\nimport type { TransferUploadAppendInfo } from \"../../../uploader/options/transferUploadAppendInfo.js\";\r\nimport type TransferUploaderConfig from \"../transferUploaderConfig.js\";\r\nimport type WebFileDetails from \"../../../utils/fileSystem/web/webFileDetails.js\";\r\n\r\nexport default class WebTransferUploader extends TransferUploaderBase<WebFileDetails> {\r\n constructor(transferInfo: TransferUploadInfo<WebFileDetails> | TransferUploadAppendInfo<WebFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger) {\r\n const trackingId = config.trackingId || guid();\r\n\r\n const eventsEngine = new WebEventsEngine();\r\n const chunkStreamProviderFactory = new WebFileDetailsUploaderChunkStreamProviderFactory();\r\n const optimizer = new TransferUploadOptimizer(config.tcpChunkSizeInBytes, config.tcpChunksUploadInParallel, eventsEngine, new UdpConcurrencyBasedOptimizationStrategy());\r\n const fileServerClientFactory = new WebFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);\r\n const cryptography = new WebCryptographyProvider();\r\n const uploadConfig = buildUploadConfig(config);\r\n const healthMonitor = new TransferUploadHealthMonitor(new WebOnlineChecker(envValues.apiBaseUrl), eventsEngine);\r\n\r\n const apiClient = new WebApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);\r\n\r\n if (config.logintoken)\r\n apiClient.setLoginToken(config.logintoken);\r\n\r\n fixTransferInfo(transferInfo);\r\n\r\n const transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfo, uploadConfig, optimizer, cryptography);\r\n\r\n super(transfer, transferInfo.files, config, envValues, logger, healthMonitor, trackingId);\r\n }\r\n}"]}
@@ -45,6 +45,6 @@ export default class DownloadState {
45
45
  networkFailure(): void;
46
46
  networkOk(): void;
47
47
  possibleSupersizedFile(file: DownloadFileInfo): void;
48
- notifyRegionDetermined(region: string): void;
48
+ notifyMetadataDetermined(region: string): void;
49
49
  }
50
50
  //# sourceMappingURL=downloadState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"downloadState.d.ts","sourceRoot":"","sources":["../../../../src/downloader/downloadStatus/downloadState.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,qCAAqC,CAAC;AAEjE,OAAO,aAAa,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,qBAAqB,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,iBAAiB,MAAM,mCAAmC,CAAC;AAOvE,OAAO,KAAK,kBAAkB,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,uBAAuB,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AAGzD,MAAM,CAAC,OAAO,OAAO,aAAa;;gBAsClB,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,uBAAuB;IAoB5K,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,MAAM,IAAI,cAAc,CAE3B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,qBAAqB,IAAI,MAAM,CAElC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,YAAY,IAAI,iBAAiB,CAEpC;IAgCD,KAAK,IAAI,OAAO;IAYhB,YAAY,CAAC,OAAO,EAAE;QAAE,sBAAsB,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI;IAc3G,MAAM,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAwBxC,MAAM,IAAI,OAAO;IAqBjB,YAAY,IAAI,OAAO;IAcvB,OAAO,IAAI,OAAO;IAalB,YAAY,CAAC,IAAI,EAAE,gBAAgB;IAMnC,YAAY,CAAC,IAAI,EAAE,gBAAgB;IAKnC,WAAW,CAAC,IAAI,EAAE,gBAAgB;IAKlC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAKpD,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAc/D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAO9D,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAU5C,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAMhF,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAiBjH,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAalF,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IActG,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAsB9B,2BAA2B,IAAI,IAAI;IAOnC,uBAAuB,IAAI,IAAI;IAO/B,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,iBAAiB;IAItD,cAAc;IAed,SAAS;IAST,sBAAsB,CAAC,IAAI,EAAE,gBAAgB;IAwE7C,sBAAsB,CAAC,MAAM,EAAE,MAAM;CAyExC"}
1
+ {"version":3,"file":"downloadState.d.ts","sourceRoot":"","sources":["../../../../src/downloader/downloadStatus/downloadState.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,qCAAqC,CAAC;AAEjE,OAAO,aAAa,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,qBAAqB,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,iBAAiB,MAAM,mCAAmC,CAAC;AAOvE,OAAO,KAAK,kBAAkB,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,uBAAuB,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AAGzD,MAAM,CAAC,OAAO,OAAO,aAAa;;gBAsClB,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,uBAAuB;IAoB5K,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,MAAM,IAAI,cAAc,CAE3B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,qBAAqB,IAAI,MAAM,CAElC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,YAAY,IAAI,iBAAiB,CAEpC;IAgCD,KAAK,IAAI,OAAO;IAYhB,YAAY,CAAC,OAAO,EAAE;QAAE,sBAAsB,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI;IAc3G,MAAM,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAwBxC,MAAM,IAAI,OAAO;IAqBjB,YAAY,IAAI,OAAO;IAcvB,OAAO,IAAI,OAAO;IAalB,YAAY,CAAC,IAAI,EAAE,gBAAgB;IAMnC,YAAY,CAAC,IAAI,EAAE,gBAAgB;IAKnC,WAAW,CAAC,IAAI,EAAE,gBAAgB;IAKlC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAKpD,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAc/D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAO9D,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAU5C,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAMhF,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAiBjH,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAalF,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IActG,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAsB9B,2BAA2B,IAAI,IAAI;IAOnC,uBAAuB,IAAI,IAAI;IAO/B,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,iBAAiB;IAItD,cAAc;IAed,SAAS;IAST,sBAAsB,CAAC,IAAI,EAAE,gBAAgB;IAwE7C,wBAAwB,CAAC,MAAM,EAAE,MAAM;CAyE1C"}
@@ -381,9 +381,9 @@ export default class DownloadState {
381
381
  downloadBaseFolder: this.#options.downloadFolder,
382
382
  };
383
383
  }
384
- notifyRegionDetermined(region) {
384
+ notifyMetadataDetermined(region) {
385
385
  const eventArgs = { ...this.#buildDownloadEventArgs(), region };
386
- this.#eventsEngine.emit(TransferDownloadEvent.TransferRegionDetermined, eventArgs);
386
+ this.#eventsEngine.emit(TransferDownloadEvent.TransferMetadataDetermined, eventArgs);
387
387
  }
388
388
  #buildPauseDownloadEventArgs() {
389
389
  return { ...this.#buildDownloadEventArgs(), interruptPendingChunks: this.#pauseImmediately };
@@ -1 +1 @@
1
- {"version":3,"file":"downloadState.js","sourceRoot":"","sources":["../../../../src/downloader/downloadStatus/downloadState.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,aAAa,MAAM,0BAA0B,CAAC;AACrD,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AAiBvE,MAAM,CAAC,OAAO,OAAO,aAAa;IACrB,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,QAAQ,CAAkB;IAC1B,aAAa,CAAe;IAE5B,MAAM,CAA0B;IAChC,YAAY,GAA0B,IAAI,GAAG,EAAoB,CAAC;IAClE,aAAa,GAA0B,IAAI,GAAG,EAAoB,CAAC;IAE5E,UAAU,GAAG,CAAC,CAAC;IACf,cAAc,GAAG,IAAI,CAAC;IACtB,yBAAyB,GAAG,CAAC,CAAC;IAC9B,OAAO,GAAmB,cAAc,CAAC,WAAW,CAAC;IACrD,4BAA4B,GAAkB,IAAI,CAAC;IACnD,uBAAuB,GAAkB,IAAI,CAAC;IAC9C,oBAAoB,GAAG,CAAC,CAAC;IACzB,gCAAgC,GAAkB,IAAI,CAAC;IACvD,cAAc,GAAkB,IAAI,CAAC;IACrC,QAAQ,GAAG,CAAC,CAAC;IAEb;;OAEG;IACH,qBAAqB,GAAG,CAAC,CAAC;IAC1B;;OAEG;IACH,gBAAgB,GAAG,CAAC,CAAC;IAErB,sBAAsB,GAAG,CAAC,CAAC;IAC3B,sBAAsB,GAAG,CAAC,CAAC;IAC3B,uCAAuC,GAA2C,EAAE,CAAC;IACrF,8BAA8B,GAAkB,IAAI,CAAC;IACrD,iBAAiB,GAAG,KAAK,CAAC;IAC1B,cAAc,CAAqC;IACnD,cAAc,CAAoC;IAElD,YAAY,UAAkB,EAAE,UAAkB,EAAE,KAA8B,EAAE,OAAwB,EAAE,YAA0B,EAAE,QAAkC;QACxK,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,UAAU,CAAC;YAChD,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,eAAe,CAAC;YACjD,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;YAC1D,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;QACrC,CAAC;aACI,CAAC;YACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;gBAC1B,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC;QAC5C,CAAC;IACL,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,CAAC;IACnD,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,yBAAyB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,qBAAqB;QACrB,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAED,IAAI,qBAAqB;QACrB,OAAO,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC;IACzC,CAAC;IAED,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,mBAAmB;QACnB,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,+BAA+B,CAAC;IAC5E,CAAC;IAED,IAAI,+BAA+B;QAC/B,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI;YACrC,OAAO,CAAC,CAAC;QAEb,OAAO,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,uBAAwB,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,UAAU;QACV,IAAI,IAAI,CAAC,4BAA4B,KAAK,IAAI;YAC1C,OAAO,CAAC,CAAC;QAEb,OAAO,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,4BAA4B,CAAC;IACxE,CAAC;IAED,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACnD,CAAC;IAED,IAAI,+BAA+B;QAC/B,OAAO,IAAI,CAAC,gCAAgC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACnK,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,uBAAuB;YACtE,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxD,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,uBAAuB,CAAC;YACjE,MAAM,IAAI,GAAsB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,YAAY,CAAC,OAAuF;QAChG,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAEhC,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;YACxD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;YAC5C,MAAM,SAAS,GAA2B,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;aACI,IAAI,OAAO,CAAC,aAAa;YAC1B,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC;YACrC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,uBAAwB,CAAC,CAAC;YACxF,MAAM,SAAS,GAA2B,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC9E,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,uCAAuC,GAAG,EAAE,CAAC;YAClD,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;YAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAEjE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YACpC,CAAC;YAED,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;YACtC,MAAM,IAAI,GAAsB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxD,MAAM,IAAI,GAAsB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC5C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,YAAY;QACR,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;YAC/H,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC;YACvC,MAAM,IAAI,GAAsB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC7C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO;QACH,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;YACtC,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI;gBACrC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,uBAAwB,CAAC,CAAC;YAC5F,MAAM,IAAI,GAAsB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE7D,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,YAAY,CAAC,IAAsB;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,IAAI,GAA0B,IAAI,CAAC,2BAA2B,CAAC,IAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,YAAY,CAAC,IAAsB;QAC/B,MAAM,IAAI,GAA0B,IAAI,CAAC,2BAA2B,CAAC,IAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,WAAW,CAAC,IAAsB;QAC9B,MAAM,IAAI,GAA0B,IAAI,CAAC,2BAA2B,CAAC,IAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,MAAqB;QAChD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAE,CAAC;QACrE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,IAAsB,EAAE,MAAqB;QACpD,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClB,MAAM,IAAI,GAAgC;gBACtC,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC;gBACzC,MAAM;aACT,CAAC;YACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,iBAAyB;QACnD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAE,CAAC;QACrE,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IACtF,CAAC;IAED,cAAc,CAAC,IAAsB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,WAAW,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAK,CAAC,CAAC;YACzD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;YAChF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;QACpF,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,IAAsB,EAAE,KAA4B;QACrE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAA2B,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,uBAAuB,CAAC,IAAsB,EAAE,KAA4B,EAAE,QAA4B;QACtG,IAAI,CAAC,IAAI,CAAC,SAAS;YACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE5B,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAClD,MAAM,SAAS,GAA2B,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAElF,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,+BAA+B;YACpC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,sBAAsB,CAAC,IAAsB,EAAE,KAA4B;QACvE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,MAAM,SAAS,GAA2B,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEzF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAClF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;QAEjF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,mBAAmB,CAAC,IAAsB,EAAE,KAA4B,EAAE,MAAqB;QAC3F,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAExB,MAAM,IAAI,GAAiC;YACvC,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC;YACjD,MAAM;SACT,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAEzE,qFAAqF;QACrF,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,KAAa;QACnB,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,MAAM;YACnF,MAAM,IAAI,aAAa,CAAC,YAAY,IAAI,CAAC,WAAW,4CAA4C,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEpI,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAE3C,IAAI,CAAC,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM;YAC7B,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC;;YAErC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC;QAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,IAAI,GAA+B;YACrC,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACrC,WAAW;YACX,aAAa,EAAE,KAAK;SACvB,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,2BAA2B;QACvB,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAsB,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACtE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;QACvF,CAAC;IACL,CAAC;IAED,uBAAuB;QACnB,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAsB,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACtE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;QAC3F,CAAC;IACL,CAAC;IAED,eAAe,CAAC,SAAkB;QAC9B,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,cAAc;QACV,IAAI,CAAC,yBAAyB,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,yCAAyC,GAAG,CAAC,CAAC;eACzD,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,yCAAyC;eACxF,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,uBAAwB,CAAC,CAAC;YACxF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,uCAAuC,GAAG,EAAE,CAAC;YAClD,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;YAC3C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IAED,sBAAsB,CAAC,IAAsB;QACzC,qHAAqH;QACrH,iCAAiC;QACjC,MAAM,QAAQ,GAA0B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED,WAAW;QACP,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,UAAU,GAAsB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACrE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAClF,CAAC;IAED,eAAe,CAAC,IAAsB;QAClC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,MAAM,QAAQ,GAA0B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED,YAAY,CAAC,IAAsB;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,IAAI,GAA0B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,gBAAgB,CAAC,IAAsB;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,6BAA6B,CAAC,IAAsB;QAChD,OAAO,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACnI,CAAC;IAED,2BAA2B,CAAC,IAAsB;QAC9C,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACjC,UAAU,EAAE,IAAI,CAAC,iBAAiB;SACrC,CAAC;IACN,CAAC;IAED,4BAA4B,CAAC,IAAsB,EAAE,KAA4B;QAC7E,OAAO;YACH,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC;YACzC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;SACvC,CAAC;IACN,CAAC;IAED,uBAAuB,CAAC,SAAS,GAAG,KAAK;QACrC,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,eAAe,EAAE,IAAI,CAAC,UAAU;YAChC,eAAe,EAAE,IAAI,CAAC,QAAQ;YAC9B,qBAAqB,EAAE,IAAI,CAAC,sBAAsB;YAClD,qBAAqB,EAAE,IAAI,CAAC,sBAAsB;YAClD,6BAA6B,EAAE,IAAI,CAAC,8BAA8B;YAClE,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI;YAClD,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAe;SACpD,CAAC;IACN,CAAC;IAED,sBAAsB,CAAC,MAAc;QACjC,MAAM,SAAS,GAAsC,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC;QACnG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;IAED,4BAA4B;QACxB,OAAO,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjG,CAAC;IAED,eAAe;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACrC,IAAI,CAAC,gCAAgC,GAAG,GAAG,CAAC;QAE5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa;YACjC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC;QAElD,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE/F,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;;YAEpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAEnF,qBAAqB;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC1C,IAAI,UAAU,GAAG,CAAC;YACd,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QAE9E,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC;eACrG,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;QAE3E,IAAI,sBAAsB,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;YAE1B,sBAAsB;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAE,CAAC;YAC9D,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;YAClG,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,oCAAoC;gBAC7D,IAAI,CAAC,uCAAuC,CAAC,KAAK,EAAE,CAAC;YAEzD,6GAA6G;YAC7G,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC;gBAC1B,IAAI,CAAC,8BAA8B,GAAG,CAAC,CAAC;iBACvC,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC;gBACxE,IAAI,IAAI,CAAC,8BAA8B;oBACnC,IAAI,CAAC,8BAA8B,GAAG,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC;;oBAEzG,IAAI,CAAC,8BAA8B,GAAG,YAAY,CAAC;YAC3D,CAAC;QACL,CAAC;IACL,CAAC;IAED,iBAAiB;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,eAAe;QACX,MAAM,MAAM,GAAgC,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,gBAAgB,CAAC,IAAsB;QACnC,OAAO,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,iBAAiB,CAAC,KAA4B;QAC1C,OAAO,yBAAyB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;CACJ","sourcesContent":["import TransferStatus from \"../../utils/types/transferStatus.js\";\r\nimport TransferDownloadEvent from \"../dtos/downloadEvent.js\";\r\nimport DownloadError from \"../dtos/downloadError.js\";\r\nimport DownloadFileProgress from \"./downloadFileProgress.js\";\r\nimport DownloadFileChunkProgress from \"./downloadFileChunkProgress.js\";\r\n\r\nimport type DownloadFileInfo from \"../dtos/downloadFileInfo.js\";\r\nimport type DownloadFileChunkInfo from \"../dtos/downloadFileChunkInfo.js\";\r\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\r\nimport type DownloadEventArgs from \"../eventArgs/downloadEventArgs.js\";\r\nimport type DownloadCompletedEventArgs from \"../eventArgs/downloadCompletedEventArgs.js\";\r\nimport type DownloadPauseEventArgs from \"../eventArgs/downloadPauseEventArgs.js\";\r\nimport type FileDownloadEventArgs from \"../eventArgs/fileDownloadEventArgs.js\";\r\nimport type FileDownloadFailedEventArgs from \"../eventArgs/fileDownloadFailedEventArgs.js\";\r\nimport type ChunkDownloadEventArgs from \"../eventArgs/chunkDownloadEventArgs.js\";\r\nimport type ChunkDownloadFailedEventArgs from \"../eventArgs/chunkDownloadFailedEventArgs.js\";\r\nimport type ChunkProgressEvent from \"../../utils/events/chunkProgressEvent.js\";\r\nimport type DownloaderRestoredState from \"../dtos/downloaderRestoredState.js\";\r\nimport type DownloadOptions from \"../downloadOptions.js\";\r\nimport type DownloadRegionDeterminedEventArgs from \"../eventArgs/downloadRegionDeterminedEventArgs.js\";\r\n\r\nexport default class DownloadState {\r\n readonly #transferId: string;\r\n readonly #downloadId: string;\r\n readonly #options: DownloadOptions;\r\n readonly #eventsEngine: EventsEngine;\r\n\r\n readonly #files: Array<DownloadFileInfo>;\r\n readonly #failedFiles: Set<DownloadFileInfo> = new Set<DownloadFileInfo>();\r\n readonly #pendingFiles: Set<DownloadFileInfo> = new Set<DownloadFileInfo>();\r\n\r\n #totalSize = 0;\r\n #networkStatus = true;\r\n #consecutiveNetworkErrors = 0;\r\n #status: TransferStatus = TransferStatus.Initialized;\r\n #firstStartedUnixEpochMillis: number | null = null;\r\n #startedUnixEpochMillis: number | null = null;\r\n #elapsedActiveMillis = 0;\r\n #lastProgressTickUnixEpochMillis: number | null = null;\r\n #lastSpeedCalc: number | null = null;\r\n #percent = 0;\r\n\r\n /**\r\n * How many bytes downloaded - counting only completed files.\r\n */\r\n #downloadedBytes_bank = 0;\r\n /**\r\n * How many bytes downloaded total (bank + pendingFiles).\r\n */\r\n #downloadedBytes = 0;\r\n\r\n #bytesPerSecondAverage = 0;\r\n #bytesPerSecondCurrent = 0;\r\n #currentSpeedMeasurementDownloadedBytes: Array<{ time: number, bytes: number }> = [];\r\n #estimatedRemainingTimeSeconds: number | null = null;\r\n #pauseImmediately = false;\r\n #pausedTrigger?: (pauseTriggered: boolean) => void;\r\n #resumeResolve?: (status: TransferStatus) => void;\r\n\r\n constructor(downloadId: string, transferId: string, files: Array<DownloadFileInfo>, options: DownloadOptions, eventsEngine: EventsEngine, oldState?: DownloaderRestoredState) {\r\n this.#downloadId = downloadId;\r\n this.#transferId = transferId;\r\n this.#eventsEngine = eventsEngine;\r\n this.#files = files;\r\n this.#options = options;\r\n\r\n if (oldState) {\r\n this.#elapsedActiveMillis = oldState.activeTime;\r\n this.#downloadedBytes = oldState.downloadedBytes;\r\n this.#downloadedBytes_bank = oldState.downloadedBytesBank;\r\n this.#totalSize = oldState.totalSize;\r\n this.#percent = oldState.percent;\r\n }\r\n else {\r\n for (const file of this.#files)\r\n this.#totalSize += file.sizeInBytes;\r\n }\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.#status === TransferStatus.Running;\r\n }\r\n\r\n get status(): TransferStatus {\r\n return this.#status;\r\n }\r\n\r\n get hasFailedFiles(): boolean {\r\n return this.#failedFiles.size > 0;\r\n }\r\n\r\n get allFilesCompletedOrFailed(): boolean {\r\n return this.#files.every(x => x.isCompleted || x.isFailed);\r\n }\r\n\r\n get averageBytesPerSecond(): number {\r\n return this.#bytesPerSecondAverage;\r\n }\r\n\r\n get isThereNetworkProblem(): boolean {\r\n return this.#networkStatus === false;\r\n }\r\n\r\n get pauseImmediately(): boolean {\r\n return this.#pauseImmediately;\r\n }\r\n\r\n get currentState(): DownloadEventArgs {\r\n return this.#buildDownloadEventArgs();\r\n }\r\n\r\n get #nowUnixEpochMillis() {\r\n return new Date().getTime();\r\n }\r\n\r\n get #activeTimeMillis() {\r\n return this.#elapsedActiveMillis + this.#activeTimeMillisSinceLastStart;\r\n }\r\n\r\n get #activeTimeMillisSinceLastStart() {\r\n if (this.#startedUnixEpochMillis === null)\r\n return 0;\r\n\r\n return (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n }\r\n\r\n get #totalTime() {\r\n if (this.#firstStartedUnixEpochMillis === null)\r\n return 0;\r\n\r\n return this.#nowUnixEpochMillis - this.#firstStartedUnixEpochMillis;\r\n }\r\n\r\n get #remainingBytes() {\r\n return this.#totalSize - this.#downloadedBytes;\r\n }\r\n\r\n get #isItTimeForGlobalProgressEvent(): boolean {\r\n return this.#lastProgressTickUnixEpochMillis === null || (this.#nowUnixEpochMillis - this.#lastProgressTickUnixEpochMillis) > this.#options.progressTickMillis;\r\n }\r\n\r\n start(): boolean {\r\n if (this.#status === TransferStatus.Initialized) { // can start only once!\r\n this.#status = TransferStatus.Running;\r\n this.#startedUnixEpochMillis = this.#nowUnixEpochMillis;\r\n this.#firstStartedUnixEpochMillis = this.#startedUnixEpochMillis;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs(true);\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadStarted, args);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n requestPause(options: { interruptPendingChunks: boolean, pausedTrigger?: (paused: boolean) => void }): void {\r\n this.#pausedTrigger = undefined;\r\n\r\n if (this.#status === TransferStatus.Running) {\r\n this.#status = TransferStatus.Pausing;\r\n this.#pauseImmediately = options.interruptPendingChunks;\r\n this.#pausedTrigger = options.pausedTrigger;\r\n const pauseArgs: DownloadPauseEventArgs = this.#buildPauseDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Pausing, pauseArgs);\r\n }\r\n else if (options.pausedTrigger)\r\n options.pausedTrigger(false);\r\n }\r\n\r\n paused(): Promise<TransferStatus | null> {\r\n if (this.#status === TransferStatus.Pausing) {\r\n this.#status = TransferStatus.Paused;\r\n this.#elapsedActiveMillis += (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n const pauseArgs: DownloadPauseEventArgs = this.#buildPauseDownloadEventArgs();\r\n this.#startedUnixEpochMillis = null;\r\n this.#lastSpeedCalc = null;\r\n this.#currentSpeedMeasurementDownloadedBytes = [];\r\n this.#estimatedRemainingTimeSeconds = null;\r\n this.#pauseImmediately = false;\r\n this.#eventsEngine.emit(TransferDownloadEvent.Paused, pauseArgs);\r\n\r\n if (this.#pausedTrigger) {\r\n this.#pausedTrigger(true);\r\n this.#pausedTrigger = undefined;\r\n }\r\n\r\n return new Promise(resolve => {\r\n this.#resumeResolve = resolve;\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n resume(): boolean {\r\n if (this.#status === TransferStatus.Pausing) {\r\n this.#status = TransferStatus.Running;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Resumed, args);\r\n return true;\r\n }\r\n if (this.#status === TransferStatus.Paused) {\r\n this.#status = TransferStatus.Running;\r\n this.#startedUnixEpochMillis = this.#nowUnixEpochMillis;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Resumed, args);\r\n if (this.#resumeResolve) {\r\n this.#resumeResolve(TransferStatus.Running);\r\n this.#resumeResolve = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n requestAbort(): boolean {\r\n if (this.#status === TransferStatus.Running || this.#status === TransferStatus.Pausing || this.#status === TransferStatus.Paused) {\r\n this.#status = TransferStatus.Aborting;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Aborting, args);\r\n if (this.#resumeResolve) {\r\n this.#resumeResolve(TransferStatus.Aborting);\r\n this.#resumeResolve = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n aborted(): boolean {\r\n if (this.#status === TransferStatus.Aborting) {\r\n this.#status = TransferStatus.Aborted;\r\n if (this.#startedUnixEpochMillis !== null)\r\n this.#elapsedActiveMillis += (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Aborted, args);\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n fileStarting(file: DownloadFileInfo) {\r\n file.starting();\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadStarting, args);\r\n }\r\n\r\n fileCreating(file: DownloadFileInfo) {\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileCreating, args);\r\n }\r\n\r\n fileCreated(file: DownloadFileInfo) {\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileCreated, args);\r\n }\r\n\r\n fileFailedById(fileId: string, reason: DownloadError) {\r\n const actualFile = (this.#files.find(x => x.externalId === fileId))!;\r\n this.fileFailed(actualFile, reason);\r\n }\r\n\r\n fileFailed(file: DownloadFileInfo, reason: DownloadError): void {\r\n if (file.isFailed === false) {\r\n file.fail(reason);\r\n const args: FileDownloadFailedEventArgs = {\r\n ...this.#buildFileDownloadEventArgs(file),\r\n reason,\r\n };\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadFailed, args);\r\n }\r\n\r\n this.#failedFiles.add(file);\r\n this.#pendingFiles.delete(file);\r\n }\r\n\r\n fileCompleted(fileId: string, finalDownloadPath: string): void {\r\n const actualFile = (this.#files.find(x => x.externalId === fileId))!;\r\n actualFile.complete(finalDownloadPath);\r\n const updatedArgs = this.#buildFileDownloadEventArgs(actualFile);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadCompleted, updatedArgs);\r\n }\r\n\r\n fileCompleting(file: DownloadFileInfo): void {\r\n const removed = this.#pendingFiles.delete(file);\r\n if (removed || file.sizeInBytes === 0) {\r\n this.#downloadedBytes_bank += file.sizeInBytes;\r\n const fileArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadProgressed, fileArgs);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadCompleting, fileArgs);\r\n }\r\n }\r\n\r\n chunkDownloadStarted(file: DownloadFileInfo, chunk: DownloadFileChunkInfo): void {\r\n file.chunkStarted(chunk);\r\n const args: ChunkDownloadEventArgs = this.#buildChunkDownloadEventArgs(file, chunk);\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadStarted, args);\r\n }\r\n\r\n chunkDownloadProgressed(file: DownloadFileInfo, chunk: DownloadFileChunkInfo, progress: ChunkProgressEvent): void {\r\n if (!file.isStarted)\r\n this.#fileStarted(file);\r\n\r\n this.networkOk();\r\n\r\n chunk.setProgress(progress.transferredBytesTotal);\r\n const chunkArgs: ChunkDownloadEventArgs = this.#buildChunkDownloadEventArgs(file, chunk);\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadProgressed, chunkArgs);\r\n\r\n if (this.#isItTimeForFileProgressEvent(file))\r\n this.#fileProgressed(file);\r\n\r\n if (this.#isItTimeForGlobalProgressEvent)\r\n this.#progressed();\r\n }\r\n\r\n chunkDownloadCompleted(file: DownloadFileInfo, chunk: DownloadFileChunkInfo): void {\r\n chunk.complete();\r\n file.chunkCompleted(chunk);\r\n file.updateProgress();\r\n\r\n const chunkArgs: ChunkDownloadEventArgs = this.#buildChunkDownloadEventArgs(file, chunk);\r\n\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadProgressed, chunkArgs);\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadCompleted, chunkArgs);\r\n\r\n this.#tryCompleteFile(file);\r\n }\r\n\r\n chunkDownloadFailed(file: DownloadFileInfo, chunk: DownloadFileChunkInfo, reason: DownloadError): void {\r\n chunk.fail(reason);\r\n file.chunkFailed(chunk);\r\n\r\n const args: ChunkDownloadFailedEventArgs = {\r\n ...this.#buildChunkDownloadEventArgs(file, chunk),\r\n reason,\r\n };\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadFailed, args);\r\n\r\n // we've tried multiple times - but chunk still cannot be downloaded - fail this file\r\n this.fileFailed(file, reason);\r\n }\r\n\r\n completed(error?: Error): void {\r\n if (this.#status === TransferStatus.Completed || this.#status === TransferStatus.Failed)\r\n throw new DownloadError(`Download ${this.#downloadId} completion cannot be triggered in state ${TransferStatus[this.#status]}`);\r\n\r\n const failedFiles = this.#mapFailedFiles();\r\n\r\n if (!!error || failedFiles.length)\r\n this.#status = TransferStatus.Failed;\r\n else\r\n this.#status = TransferStatus.Completed;\r\n\r\n this.#progressed();\r\n\r\n const args: DownloadCompletedEventArgs = {\r\n ...this.#buildDownloadEventArgs(true),\r\n failedFiles,\r\n downloadError: error,\r\n };\r\n\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadCompleted, args);\r\n }\r\n\r\n registeringTransferDownload(): void {\r\n if (this.#status !== TransferStatus.Completed) {\r\n const args: DownloadEventArgs = { ...this.#buildDownloadEventArgs() };\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadRegistrationTriggered, args);\r\n }\r\n }\r\n\r\n registeringFileDownload(): void {\r\n if (this.#status !== TransferStatus.Completed) {\r\n const args: DownloadEventArgs = { ...this.#buildDownloadEventArgs() };\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadRegistrationTriggered, args);\r\n }\r\n }\r\n\r\n getCurrentState(withFiles: boolean): DownloadEventArgs {\r\n return this.#buildDownloadEventArgs(withFiles);\r\n }\r\n\r\n networkFailure() {\r\n this.#consecutiveNetworkErrors += 1;\r\n if (this.#options.fileserverOfflineAfterConsecutiveAttempts > -1\r\n && this.#consecutiveNetworkErrors > this.#options.fileserverOfflineAfterConsecutiveAttempts\r\n && this.#networkStatus === true) {\r\n this.#elapsedActiveMillis += (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n this.#startedUnixEpochMillis = null;\r\n this.#lastSpeedCalc = null;\r\n this.#currentSpeedMeasurementDownloadedBytes = [];\r\n this.#estimatedRemainingTimeSeconds = null;\r\n this.#networkStatus = false;\r\n this.#eventsEngine.emit(TransferDownloadEvent.NetworkFailure);\r\n }\r\n }\r\n\r\n networkOk() {\r\n this.#consecutiveNetworkErrors = 0;\r\n if (this.#networkStatus === false) {\r\n this.#networkStatus = true;\r\n this.#startedUnixEpochMillis = this.#nowUnixEpochMillis;\r\n this.#eventsEngine.emit(TransferDownloadEvent.NetworkOk);\r\n }\r\n }\r\n\r\n possibleSupersizedFile(file: DownloadFileInfo) {\r\n // sometimes when FS returns too many bytes the file size could get bigger on disk than it was initially created with\r\n // truncate the file in this case\r\n const fileArgs: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file);\r\n this.#eventsEngine.emit(TransferDownloadEvent.PossibleSupersizedFile, fileArgs);\r\n }\r\n\r\n #progressed(): void {\r\n this.#updateProgress();\r\n\r\n const globalArgs: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadProgressed, globalArgs);\r\n }\r\n\r\n #fileProgressed(file: DownloadFileInfo): void {\r\n file.updateProgress();\r\n\r\n const fileArgs: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadProgressed, fileArgs);\r\n }\r\n\r\n #fileStarted(file: DownloadFileInfo): void {\r\n file.start();\r\n\r\n this.#pendingFiles.add(file);\r\n\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadStarted, args);\r\n }\r\n\r\n #tryCompleteFile(file: DownloadFileInfo): void {\r\n if (file.chunks.every(chunk => chunk.isCompleted))\r\n this.fileCompleting(file);\r\n }\r\n\r\n #isItTimeForFileProgressEvent(file: DownloadFileInfo): boolean {\r\n return file.lastProgressTick === null || (this.#nowUnixEpochMillis - file.lastProgressTick) > this.#options.progressTickMillis;\r\n }\r\n\r\n #buildFileDownloadEventArgs(file: DownloadFileInfo): FileDownloadEventArgs {\r\n return {\r\n transferId: this.#transferId,\r\n file: this.#mapFileProgress(file),\r\n activeTime: this.#activeTimeMillis,\r\n };\r\n }\r\n\r\n #buildChunkDownloadEventArgs(file: DownloadFileInfo, chunk: DownloadFileChunkInfo) {\r\n return {\r\n ...this.#buildFileDownloadEventArgs(file),\r\n chunk: this.#mapChunkProgress(chunk),\r\n };\r\n }\r\n\r\n #buildDownloadEventArgs(withFiles = false): DownloadEventArgs {\r\n return {\r\n status: this.#status,\r\n downloadId: this.#downloadId,\r\n transferId: this.#transferId,\r\n activeTimeMillis: this.#activeTimeMillis,\r\n totalTimeMillis: this.#totalTime,\r\n progressPercent: this.#percent,\r\n bytesPerSecondAverage: this.#bytesPerSecondAverage,\r\n bytesPerSecondCurrent: this.#bytesPerSecondCurrent,\r\n estimatedRemainingTimeSeconds: this.#estimatedRemainingTimeSeconds,\r\n totalSize: this.#totalSize,\r\n downloadedBytes: this.#downloadedBytes,\r\n files: withFiles ? this.#mapFilesProgress() : null,\r\n downloadBaseFolder: this.#options.downloadFolder!,\r\n };\r\n }\r\n\r\n notifyRegionDetermined(region: string) {\r\n const eventArgs: DownloadRegionDeterminedEventArgs = { ...this.#buildDownloadEventArgs(), region };\r\n this.#eventsEngine.emit(TransferDownloadEvent.TransferRegionDetermined, eventArgs);\r\n }\r\n\r\n #buildPauseDownloadEventArgs(): DownloadPauseEventArgs {\r\n return { ...this.#buildDownloadEventArgs(), interruptPendingChunks: this.#pauseImmediately };\r\n }\r\n\r\n #updateProgress(): void {\r\n const now = this.#nowUnixEpochMillis;\r\n this.#lastProgressTickUnixEpochMillis = now;\r\n\r\n this.#downloadedBytes = this.#downloadedBytes_bank;\r\n for (const file of this.#pendingFiles)\r\n this.#downloadedBytes += file.downloadedBytes;\r\n\r\n this.#currentSpeedMeasurementDownloadedBytes.push({ time: now, bytes: this.#downloadedBytes });\r\n\r\n if (this.#totalSize === 0)\r\n this.#percent = 100;\r\n else\r\n this.#percent = Math.min(100, (100 * this.#downloadedBytes) / this.#totalSize);\r\n\r\n // all-time bytes/sec\r\n const activeTime = this.#activeTimeMillis;\r\n if (activeTime > 0)\r\n this.#bytesPerSecondAverage = this.#downloadedBytes / (activeTime / 1000);\r\n\r\n const shouldWeCalculateSpeed = (this.#lastSpeedCalc === null && this.#activeTimeMillisSinceLastStart > 1500)\r\n || (this.#lastSpeedCalc !== null && (now - this.#lastSpeedCalc) > 200);\r\n\r\n if (shouldWeCalculateSpeed) {\r\n this.#lastSpeedCalc = now;\r\n\r\n // momentary bytes/sec\r\n const prev = this.#currentSpeedMeasurementDownloadedBytes[0]!;\r\n const timeDiff = now - prev.time;\r\n this.#bytesPerSecondCurrent = Math.max(0, this.#downloadedBytes - prev.bytes) / (timeDiff / 1000);\r\n if (timeDiff > this.#options.momentaryDownloadSpeedTimespanMillis)\r\n this.#currentSpeedMeasurementDownloadedBytes.shift();\r\n\r\n // remaining time (seconds) - based on momentary speed and remaining bytes to download - and smoothing factor\r\n if (this.#remainingBytes === 0)\r\n this.#estimatedRemainingTimeSeconds = 0;\r\n else if (this.#bytesPerSecondCurrent > 0) {\r\n const newRemaining = this.#remainingBytes / this.#bytesPerSecondCurrent;\r\n if (this.#estimatedRemainingTimeSeconds)\r\n this.#estimatedRemainingTimeSeconds = (0.7 * newRemaining) + (0.3 * this.#estimatedRemainingTimeSeconds);\r\n else\r\n this.#estimatedRemainingTimeSeconds = newRemaining;\r\n }\r\n }\r\n }\r\n\r\n #mapFilesProgress(): Array<DownloadFileProgress> {\r\n return this.#files.map(x => this.#mapFileProgress(x));\r\n }\r\n\r\n #mapFailedFiles(): Array<DownloadFileProgress> {\r\n const result: Array<DownloadFileProgress> = [];\r\n for (const x of this.#failedFiles)\r\n result.push(this.#mapFileProgress(x));\r\n return result;\r\n }\r\n\r\n #mapFileProgress(file: DownloadFileInfo): DownloadFileProgress {\r\n return DownloadFileProgress.FromFileDownloadInfo(file);\r\n }\r\n\r\n #mapChunkProgress(chunk: DownloadFileChunkInfo): DownloadFileChunkProgress {\r\n return DownloadFileChunkProgress.FromChunkInfo(chunk);\r\n }\r\n}"]}
1
+ {"version":3,"file":"downloadState.js","sourceRoot":"","sources":["../../../../src/downloader/downloadStatus/downloadState.ts"],"names":[],"mappings":"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","sourcesContent":["import TransferStatus from \"../../utils/types/transferStatus.js\";\r\nimport TransferDownloadEvent from \"../dtos/downloadEvent.js\";\r\nimport DownloadError from \"../dtos/downloadError.js\";\r\nimport DownloadFileProgress from \"./downloadFileProgress.js\";\r\nimport DownloadFileChunkProgress from \"./downloadFileChunkProgress.js\";\r\n\r\nimport type DownloadFileInfo from \"../dtos/downloadFileInfo.js\";\r\nimport type DownloadFileChunkInfo from \"../dtos/downloadFileChunkInfo.js\";\r\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\r\nimport type DownloadEventArgs from \"../eventArgs/downloadEventArgs.js\";\r\nimport type DownloadCompletedEventArgs from \"../eventArgs/downloadCompletedEventArgs.js\";\r\nimport type DownloadPauseEventArgs from \"../eventArgs/downloadPauseEventArgs.js\";\r\nimport type FileDownloadEventArgs from \"../eventArgs/fileDownloadEventArgs.js\";\r\nimport type FileDownloadFailedEventArgs from \"../eventArgs/fileDownloadFailedEventArgs.js\";\r\nimport type ChunkDownloadEventArgs from \"../eventArgs/chunkDownloadEventArgs.js\";\r\nimport type ChunkDownloadFailedEventArgs from \"../eventArgs/chunkDownloadFailedEventArgs.js\";\r\nimport type ChunkProgressEvent from \"../../utils/events/chunkProgressEvent.js\";\r\nimport type DownloaderRestoredState from \"../dtos/downloaderRestoredState.js\";\r\nimport type DownloadOptions from \"../downloadOptions.js\";\r\nimport type DownloadMetadataDeterminedEventArgs from \"../eventArgs/downloadMetadataDeterminedEventArgs.js\";\r\n\r\nexport default class DownloadState {\r\n readonly #transferId: string;\r\n readonly #downloadId: string;\r\n readonly #options: DownloadOptions;\r\n readonly #eventsEngine: EventsEngine;\r\n\r\n readonly #files: Array<DownloadFileInfo>;\r\n readonly #failedFiles: Set<DownloadFileInfo> = new Set<DownloadFileInfo>();\r\n readonly #pendingFiles: Set<DownloadFileInfo> = new Set<DownloadFileInfo>();\r\n\r\n #totalSize = 0;\r\n #networkStatus = true;\r\n #consecutiveNetworkErrors = 0;\r\n #status: TransferStatus = TransferStatus.Initialized;\r\n #firstStartedUnixEpochMillis: number | null = null;\r\n #startedUnixEpochMillis: number | null = null;\r\n #elapsedActiveMillis = 0;\r\n #lastProgressTickUnixEpochMillis: number | null = null;\r\n #lastSpeedCalc: number | null = null;\r\n #percent = 0;\r\n\r\n /**\r\n * How many bytes downloaded - counting only completed files.\r\n */\r\n #downloadedBytes_bank = 0;\r\n /**\r\n * How many bytes downloaded total (bank + pendingFiles).\r\n */\r\n #downloadedBytes = 0;\r\n\r\n #bytesPerSecondAverage = 0;\r\n #bytesPerSecondCurrent = 0;\r\n #currentSpeedMeasurementDownloadedBytes: Array<{ time: number, bytes: number }> = [];\r\n #estimatedRemainingTimeSeconds: number | null = null;\r\n #pauseImmediately = false;\r\n #pausedTrigger?: (pauseTriggered: boolean) => void;\r\n #resumeResolve?: (status: TransferStatus) => void;\r\n\r\n constructor(downloadId: string, transferId: string, files: Array<DownloadFileInfo>, options: DownloadOptions, eventsEngine: EventsEngine, oldState?: DownloaderRestoredState) {\r\n this.#downloadId = downloadId;\r\n this.#transferId = transferId;\r\n this.#eventsEngine = eventsEngine;\r\n this.#files = files;\r\n this.#options = options;\r\n\r\n if (oldState) {\r\n this.#elapsedActiveMillis = oldState.activeTime;\r\n this.#downloadedBytes = oldState.downloadedBytes;\r\n this.#downloadedBytes_bank = oldState.downloadedBytesBank;\r\n this.#totalSize = oldState.totalSize;\r\n this.#percent = oldState.percent;\r\n }\r\n else {\r\n for (const file of this.#files)\r\n this.#totalSize += file.sizeInBytes;\r\n }\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.#status === TransferStatus.Running;\r\n }\r\n\r\n get status(): TransferStatus {\r\n return this.#status;\r\n }\r\n\r\n get hasFailedFiles(): boolean {\r\n return this.#failedFiles.size > 0;\r\n }\r\n\r\n get allFilesCompletedOrFailed(): boolean {\r\n return this.#files.every(x => x.isCompleted || x.isFailed);\r\n }\r\n\r\n get averageBytesPerSecond(): number {\r\n return this.#bytesPerSecondAverage;\r\n }\r\n\r\n get isThereNetworkProblem(): boolean {\r\n return this.#networkStatus === false;\r\n }\r\n\r\n get pauseImmediately(): boolean {\r\n return this.#pauseImmediately;\r\n }\r\n\r\n get currentState(): DownloadEventArgs {\r\n return this.#buildDownloadEventArgs();\r\n }\r\n\r\n get #nowUnixEpochMillis() {\r\n return new Date().getTime();\r\n }\r\n\r\n get #activeTimeMillis() {\r\n return this.#elapsedActiveMillis + this.#activeTimeMillisSinceLastStart;\r\n }\r\n\r\n get #activeTimeMillisSinceLastStart() {\r\n if (this.#startedUnixEpochMillis === null)\r\n return 0;\r\n\r\n return (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n }\r\n\r\n get #totalTime() {\r\n if (this.#firstStartedUnixEpochMillis === null)\r\n return 0;\r\n\r\n return this.#nowUnixEpochMillis - this.#firstStartedUnixEpochMillis;\r\n }\r\n\r\n get #remainingBytes() {\r\n return this.#totalSize - this.#downloadedBytes;\r\n }\r\n\r\n get #isItTimeForGlobalProgressEvent(): boolean {\r\n return this.#lastProgressTickUnixEpochMillis === null || (this.#nowUnixEpochMillis - this.#lastProgressTickUnixEpochMillis) > this.#options.progressTickMillis;\r\n }\r\n\r\n start(): boolean {\r\n if (this.#status === TransferStatus.Initialized) { // can start only once!\r\n this.#status = TransferStatus.Running;\r\n this.#startedUnixEpochMillis = this.#nowUnixEpochMillis;\r\n this.#firstStartedUnixEpochMillis = this.#startedUnixEpochMillis;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs(true);\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadStarted, args);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n requestPause(options: { interruptPendingChunks: boolean, pausedTrigger?: (paused: boolean) => void }): void {\r\n this.#pausedTrigger = undefined;\r\n\r\n if (this.#status === TransferStatus.Running) {\r\n this.#status = TransferStatus.Pausing;\r\n this.#pauseImmediately = options.interruptPendingChunks;\r\n this.#pausedTrigger = options.pausedTrigger;\r\n const pauseArgs: DownloadPauseEventArgs = this.#buildPauseDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Pausing, pauseArgs);\r\n }\r\n else if (options.pausedTrigger)\r\n options.pausedTrigger(false);\r\n }\r\n\r\n paused(): Promise<TransferStatus | null> {\r\n if (this.#status === TransferStatus.Pausing) {\r\n this.#status = TransferStatus.Paused;\r\n this.#elapsedActiveMillis += (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n const pauseArgs: DownloadPauseEventArgs = this.#buildPauseDownloadEventArgs();\r\n this.#startedUnixEpochMillis = null;\r\n this.#lastSpeedCalc = null;\r\n this.#currentSpeedMeasurementDownloadedBytes = [];\r\n this.#estimatedRemainingTimeSeconds = null;\r\n this.#pauseImmediately = false;\r\n this.#eventsEngine.emit(TransferDownloadEvent.Paused, pauseArgs);\r\n\r\n if (this.#pausedTrigger) {\r\n this.#pausedTrigger(true);\r\n this.#pausedTrigger = undefined;\r\n }\r\n\r\n return new Promise(resolve => {\r\n this.#resumeResolve = resolve;\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n resume(): boolean {\r\n if (this.#status === TransferStatus.Pausing) {\r\n this.#status = TransferStatus.Running;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Resumed, args);\r\n return true;\r\n }\r\n if (this.#status === TransferStatus.Paused) {\r\n this.#status = TransferStatus.Running;\r\n this.#startedUnixEpochMillis = this.#nowUnixEpochMillis;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Resumed, args);\r\n if (this.#resumeResolve) {\r\n this.#resumeResolve(TransferStatus.Running);\r\n this.#resumeResolve = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n requestAbort(): boolean {\r\n if (this.#status === TransferStatus.Running || this.#status === TransferStatus.Pausing || this.#status === TransferStatus.Paused) {\r\n this.#status = TransferStatus.Aborting;\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Aborting, args);\r\n if (this.#resumeResolve) {\r\n this.#resumeResolve(TransferStatus.Aborting);\r\n this.#resumeResolve = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n aborted(): boolean {\r\n if (this.#status === TransferStatus.Aborting) {\r\n this.#status = TransferStatus.Aborted;\r\n if (this.#startedUnixEpochMillis !== null)\r\n this.#elapsedActiveMillis += (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n const args: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.Aborted, args);\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n fileStarting(file: DownloadFileInfo) {\r\n file.starting();\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadStarting, args);\r\n }\r\n\r\n fileCreating(file: DownloadFileInfo) {\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileCreating, args);\r\n }\r\n\r\n fileCreated(file: DownloadFileInfo) {\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileCreated, args);\r\n }\r\n\r\n fileFailedById(fileId: string, reason: DownloadError) {\r\n const actualFile = (this.#files.find(x => x.externalId === fileId))!;\r\n this.fileFailed(actualFile, reason);\r\n }\r\n\r\n fileFailed(file: DownloadFileInfo, reason: DownloadError): void {\r\n if (file.isFailed === false) {\r\n file.fail(reason);\r\n const args: FileDownloadFailedEventArgs = {\r\n ...this.#buildFileDownloadEventArgs(file),\r\n reason,\r\n };\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadFailed, args);\r\n }\r\n\r\n this.#failedFiles.add(file);\r\n this.#pendingFiles.delete(file);\r\n }\r\n\r\n fileCompleted(fileId: string, finalDownloadPath: string): void {\r\n const actualFile = (this.#files.find(x => x.externalId === fileId))!;\r\n actualFile.complete(finalDownloadPath);\r\n const updatedArgs = this.#buildFileDownloadEventArgs(actualFile);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadCompleted, updatedArgs);\r\n }\r\n\r\n fileCompleting(file: DownloadFileInfo): void {\r\n const removed = this.#pendingFiles.delete(file);\r\n if (removed || file.sizeInBytes === 0) {\r\n this.#downloadedBytes_bank += file.sizeInBytes;\r\n const fileArgs = this.#buildFileDownloadEventArgs(file!);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadProgressed, fileArgs);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadCompleting, fileArgs);\r\n }\r\n }\r\n\r\n chunkDownloadStarted(file: DownloadFileInfo, chunk: DownloadFileChunkInfo): void {\r\n file.chunkStarted(chunk);\r\n const args: ChunkDownloadEventArgs = this.#buildChunkDownloadEventArgs(file, chunk);\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadStarted, args);\r\n }\r\n\r\n chunkDownloadProgressed(file: DownloadFileInfo, chunk: DownloadFileChunkInfo, progress: ChunkProgressEvent): void {\r\n if (!file.isStarted)\r\n this.#fileStarted(file);\r\n\r\n this.networkOk();\r\n\r\n chunk.setProgress(progress.transferredBytesTotal);\r\n const chunkArgs: ChunkDownloadEventArgs = this.#buildChunkDownloadEventArgs(file, chunk);\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadProgressed, chunkArgs);\r\n\r\n if (this.#isItTimeForFileProgressEvent(file))\r\n this.#fileProgressed(file);\r\n\r\n if (this.#isItTimeForGlobalProgressEvent)\r\n this.#progressed();\r\n }\r\n\r\n chunkDownloadCompleted(file: DownloadFileInfo, chunk: DownloadFileChunkInfo): void {\r\n chunk.complete();\r\n file.chunkCompleted(chunk);\r\n file.updateProgress();\r\n\r\n const chunkArgs: ChunkDownloadEventArgs = this.#buildChunkDownloadEventArgs(file, chunk);\r\n\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadProgressed, chunkArgs);\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadCompleted, chunkArgs);\r\n\r\n this.#tryCompleteFile(file);\r\n }\r\n\r\n chunkDownloadFailed(file: DownloadFileInfo, chunk: DownloadFileChunkInfo, reason: DownloadError): void {\r\n chunk.fail(reason);\r\n file.chunkFailed(chunk);\r\n\r\n const args: ChunkDownloadFailedEventArgs = {\r\n ...this.#buildChunkDownloadEventArgs(file, chunk),\r\n reason,\r\n };\r\n this.#eventsEngine.emit(TransferDownloadEvent.ChunkDownloadFailed, args);\r\n\r\n // we've tried multiple times - but chunk still cannot be downloaded - fail this file\r\n this.fileFailed(file, reason);\r\n }\r\n\r\n completed(error?: Error): void {\r\n if (this.#status === TransferStatus.Completed || this.#status === TransferStatus.Failed)\r\n throw new DownloadError(`Download ${this.#downloadId} completion cannot be triggered in state ${TransferStatus[this.#status]}`);\r\n\r\n const failedFiles = this.#mapFailedFiles();\r\n\r\n if (!!error || failedFiles.length)\r\n this.#status = TransferStatus.Failed;\r\n else\r\n this.#status = TransferStatus.Completed;\r\n\r\n this.#progressed();\r\n\r\n const args: DownloadCompletedEventArgs = {\r\n ...this.#buildDownloadEventArgs(true),\r\n failedFiles,\r\n downloadError: error,\r\n };\r\n\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadCompleted, args);\r\n }\r\n\r\n registeringTransferDownload(): void {\r\n if (this.#status !== TransferStatus.Completed) {\r\n const args: DownloadEventArgs = { ...this.#buildDownloadEventArgs() };\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadRegistrationTriggered, args);\r\n }\r\n }\r\n\r\n registeringFileDownload(): void {\r\n if (this.#status !== TransferStatus.Completed) {\r\n const args: DownloadEventArgs = { ...this.#buildDownloadEventArgs() };\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadRegistrationTriggered, args);\r\n }\r\n }\r\n\r\n getCurrentState(withFiles: boolean): DownloadEventArgs {\r\n return this.#buildDownloadEventArgs(withFiles);\r\n }\r\n\r\n networkFailure() {\r\n this.#consecutiveNetworkErrors += 1;\r\n if (this.#options.fileserverOfflineAfterConsecutiveAttempts > -1\r\n && this.#consecutiveNetworkErrors > this.#options.fileserverOfflineAfterConsecutiveAttempts\r\n && this.#networkStatus === true) {\r\n this.#elapsedActiveMillis += (this.#nowUnixEpochMillis - this.#startedUnixEpochMillis!);\r\n this.#startedUnixEpochMillis = null;\r\n this.#lastSpeedCalc = null;\r\n this.#currentSpeedMeasurementDownloadedBytes = [];\r\n this.#estimatedRemainingTimeSeconds = null;\r\n this.#networkStatus = false;\r\n this.#eventsEngine.emit(TransferDownloadEvent.NetworkFailure);\r\n }\r\n }\r\n\r\n networkOk() {\r\n this.#consecutiveNetworkErrors = 0;\r\n if (this.#networkStatus === false) {\r\n this.#networkStatus = true;\r\n this.#startedUnixEpochMillis = this.#nowUnixEpochMillis;\r\n this.#eventsEngine.emit(TransferDownloadEvent.NetworkOk);\r\n }\r\n }\r\n\r\n possibleSupersizedFile(file: DownloadFileInfo) {\r\n // sometimes when FS returns too many bytes the file size could get bigger on disk than it was initially created with\r\n // truncate the file in this case\r\n const fileArgs: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file);\r\n this.#eventsEngine.emit(TransferDownloadEvent.PossibleSupersizedFile, fileArgs);\r\n }\r\n\r\n #progressed(): void {\r\n this.#updateProgress();\r\n\r\n const globalArgs: DownloadEventArgs = this.#buildDownloadEventArgs();\r\n this.#eventsEngine.emit(TransferDownloadEvent.DownloadProgressed, globalArgs);\r\n }\r\n\r\n #fileProgressed(file: DownloadFileInfo): void {\r\n file.updateProgress();\r\n\r\n const fileArgs: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadProgressed, fileArgs);\r\n }\r\n\r\n #fileStarted(file: DownloadFileInfo): void {\r\n file.start();\r\n\r\n this.#pendingFiles.add(file);\r\n\r\n const args: FileDownloadEventArgs = this.#buildFileDownloadEventArgs(file);\r\n this.#eventsEngine.emit(TransferDownloadEvent.FileDownloadStarted, args);\r\n }\r\n\r\n #tryCompleteFile(file: DownloadFileInfo): void {\r\n if (file.chunks.every(chunk => chunk.isCompleted))\r\n this.fileCompleting(file);\r\n }\r\n\r\n #isItTimeForFileProgressEvent(file: DownloadFileInfo): boolean {\r\n return file.lastProgressTick === null || (this.#nowUnixEpochMillis - file.lastProgressTick) > this.#options.progressTickMillis;\r\n }\r\n\r\n #buildFileDownloadEventArgs(file: DownloadFileInfo): FileDownloadEventArgs {\r\n return {\r\n transferId: this.#transferId,\r\n file: this.#mapFileProgress(file),\r\n activeTime: this.#activeTimeMillis,\r\n };\r\n }\r\n\r\n #buildChunkDownloadEventArgs(file: DownloadFileInfo, chunk: DownloadFileChunkInfo) {\r\n return {\r\n ...this.#buildFileDownloadEventArgs(file),\r\n chunk: this.#mapChunkProgress(chunk),\r\n };\r\n }\r\n\r\n #buildDownloadEventArgs(withFiles = false): DownloadEventArgs {\r\n return {\r\n status: this.#status,\r\n downloadId: this.#downloadId,\r\n transferId: this.#transferId,\r\n activeTimeMillis: this.#activeTimeMillis,\r\n totalTimeMillis: this.#totalTime,\r\n progressPercent: this.#percent,\r\n bytesPerSecondAverage: this.#bytesPerSecondAverage,\r\n bytesPerSecondCurrent: this.#bytesPerSecondCurrent,\r\n estimatedRemainingTimeSeconds: this.#estimatedRemainingTimeSeconds,\r\n totalSize: this.#totalSize,\r\n downloadedBytes: this.#downloadedBytes,\r\n files: withFiles ? this.#mapFilesProgress() : null,\r\n downloadBaseFolder: this.#options.downloadFolder!,\r\n };\r\n }\r\n\r\n notifyMetadataDetermined(region: string) {\r\n const eventArgs: DownloadMetadataDeterminedEventArgs = { ...this.#buildDownloadEventArgs(), region };\r\n this.#eventsEngine.emit(TransferDownloadEvent.TransferMetadataDetermined, eventArgs);\r\n }\r\n\r\n #buildPauseDownloadEventArgs(): DownloadPauseEventArgs {\r\n return { ...this.#buildDownloadEventArgs(), interruptPendingChunks: this.#pauseImmediately };\r\n }\r\n\r\n #updateProgress(): void {\r\n const now = this.#nowUnixEpochMillis;\r\n this.#lastProgressTickUnixEpochMillis = now;\r\n\r\n this.#downloadedBytes = this.#downloadedBytes_bank;\r\n for (const file of this.#pendingFiles)\r\n this.#downloadedBytes += file.downloadedBytes;\r\n\r\n this.#currentSpeedMeasurementDownloadedBytes.push({ time: now, bytes: this.#downloadedBytes });\r\n\r\n if (this.#totalSize === 0)\r\n this.#percent = 100;\r\n else\r\n this.#percent = Math.min(100, (100 * this.#downloadedBytes) / this.#totalSize);\r\n\r\n // all-time bytes/sec\r\n const activeTime = this.#activeTimeMillis;\r\n if (activeTime > 0)\r\n this.#bytesPerSecondAverage = this.#downloadedBytes / (activeTime / 1000);\r\n\r\n const shouldWeCalculateSpeed = (this.#lastSpeedCalc === null && this.#activeTimeMillisSinceLastStart > 1500)\r\n || (this.#lastSpeedCalc !== null && (now - this.#lastSpeedCalc) > 200);\r\n\r\n if (shouldWeCalculateSpeed) {\r\n this.#lastSpeedCalc = now;\r\n\r\n // momentary bytes/sec\r\n const prev = this.#currentSpeedMeasurementDownloadedBytes[0]!;\r\n const timeDiff = now - prev.time;\r\n this.#bytesPerSecondCurrent = Math.max(0, this.#downloadedBytes - prev.bytes) / (timeDiff / 1000);\r\n if (timeDiff > this.#options.momentaryDownloadSpeedTimespanMillis)\r\n this.#currentSpeedMeasurementDownloadedBytes.shift();\r\n\r\n // remaining time (seconds) - based on momentary speed and remaining bytes to download - and smoothing factor\r\n if (this.#remainingBytes === 0)\r\n this.#estimatedRemainingTimeSeconds = 0;\r\n else if (this.#bytesPerSecondCurrent > 0) {\r\n const newRemaining = this.#remainingBytes / this.#bytesPerSecondCurrent;\r\n if (this.#estimatedRemainingTimeSeconds)\r\n this.#estimatedRemainingTimeSeconds = (0.7 * newRemaining) + (0.3 * this.#estimatedRemainingTimeSeconds);\r\n else\r\n this.#estimatedRemainingTimeSeconds = newRemaining;\r\n }\r\n }\r\n }\r\n\r\n #mapFilesProgress(): Array<DownloadFileProgress> {\r\n return this.#files.map(x => this.#mapFileProgress(x));\r\n }\r\n\r\n #mapFailedFiles(): Array<DownloadFileProgress> {\r\n const result: Array<DownloadFileProgress> = [];\r\n for (const x of this.#failedFiles)\r\n result.push(this.#mapFileProgress(x));\r\n return result;\r\n }\r\n\r\n #mapFileProgress(file: DownloadFileInfo): DownloadFileProgress {\r\n return DownloadFileProgress.FromFileDownloadInfo(file);\r\n }\r\n\r\n #mapChunkProgress(chunk: DownloadFileChunkInfo): DownloadFileChunkProgress {\r\n return DownloadFileChunkProgress.FromChunkInfo(chunk);\r\n }\r\n}"]}
@@ -27,7 +27,7 @@ declare enum TransferDownloadEvent {
27
27
  PossibleSupersizedFile = "PossibleSupersizedFile",
28
28
  RecoveredInterruptedDownload = "RecoveredInterruptedDownload",
29
29
  DownloadTrackingFailed = "DownloadTrackingFailed",
30
- TransferRegionDetermined = "TransferRegionDetermined"
30
+ TransferMetadataDetermined = "TransferMetadataDetermined"
31
31
  }
32
32
  export default TransferDownloadEvent;
33
33
  //# sourceMappingURL=downloadEvent.d.ts.map