@uploadista/client-core 0.0.4 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -546,8 +546,8 @@ declare function wait(platformService: PlatformService, ms: number): Promise<voi
546
546
  //#region src/auth/types.d.ts
547
547
  declare class BaseAuthManager {
548
548
  private type;
549
- constructor(type: "direct" | "saas" | "no-auth");
550
- getType(): "direct" | "saas" | "no-auth";
549
+ constructor(type: "direct" | "uploadista-cloud" | "no-auth");
550
+ getType(): "direct" | "uploadista-cloud" | "no-auth";
551
551
  }
552
552
  /**
553
553
  * Credentials that can be attached to HTTP requests.
@@ -598,7 +598,7 @@ type DirectAuthConfig = {
598
598
  getCredentials?: () => RequestCredentials | Promise<RequestCredentials>;
599
599
  };
600
600
  /**
601
- * SaaS auth mode configuration.
601
+ * UploadistaCloud auth mode configuration.
602
602
  * Client requests JWT tokens from a user-controlled auth server,
603
603
  * which validates credentials and issues tokens using a secure API key.
604
604
  *
@@ -611,26 +611,21 @@ type DirectAuthConfig = {
611
611
  * @example
612
612
  * ```typescript
613
613
  * {
614
- * mode: 'saas',
614
+ * mode: 'uploadista-cloud',
615
615
  * authServerUrl: 'https://auth.myapp.com/token',
616
- * getCredentials: async () => ({
617
- * username: await getUsername(),
618
- * password: await getPassword()
619
- * })
616
+ * clientId: 'my-client-id'
620
617
  * }
621
618
  * ```
622
619
  */
623
- type SaasAuthConfig = {
624
- mode: "saas";
620
+ type UploadistaCloudAuthConfig = {
621
+ mode: "uploadista-cloud";
625
622
  /**
626
623
  * URL of the user's auth server that issues JWT tokens.
627
624
  * Should be a GET endpoint that accepts client id and returns { token, expiresIn }.
628
625
  */
629
626
  authServerUrl: string;
630
627
  /**
631
- * Function that returns user credentials to send to the auth server.
632
- * The auth server will validate these credentials before issuing a token.
633
- * Credentials format is client id
628
+ * Client ID to use for authentication. It will be used to compare the API Key with the client id on the auth server.
634
629
  */
635
630
  clientId: string;
636
631
  };
@@ -638,12 +633,12 @@ type SaasAuthConfig = {
638
633
  * Authentication configuration for the uploadista client.
639
634
  * Supports two modes:
640
635
  * - Direct: Bring your own auth (any protocol)
641
- * - SaaS: Standard JWT token exchange with auth server
636
+ * - UploadistaCloud: Standard JWT token exchange with auth server
642
637
  *
643
638
  * Use a discriminated union to ensure type safety - TypeScript will
644
639
  * enforce that the correct fields are present for each mode.
645
640
  */
646
- type AuthConfig = DirectAuthConfig | SaasAuthConfig;
641
+ type AuthConfig = DirectAuthConfig | UploadistaCloudAuthConfig;
647
642
  //#endregion
648
643
  //#region src/auth/direct-auth.d.ts
649
644
  /**
@@ -706,7 +701,7 @@ declare class NoAuthManager extends BaseAuthManager {
706
701
  clearAllTokens(): void;
707
702
  }
708
703
  //#endregion
709
- //#region src/auth/saas-auth.d.ts
704
+ //#region src/auth/uploadista-cloud-auth.d.ts
710
705
  /**
711
706
  * Token response from the auth server
712
707
  */
@@ -717,7 +712,7 @@ type TokenResponse = {
717
712
  expiresIn?: number;
718
713
  };
719
714
  /**
720
- * SaaS auth manager - handles JWT token exchange with an auth server.
715
+ * UploadistaCloud auth manager - handles JWT token exchange with an auth server.
721
716
  *
722
717
  * Token exchange flow:
723
718
  * 1. Client calls getCredentials() to get user credentials
@@ -728,14 +723,14 @@ type TokenResponse = {
728
723
  *
729
724
  * Security: API keys are kept server-side in the auth server, never exposed to clients.
730
725
  */
731
- declare class SaasAuthManager extends BaseAuthManager {
726
+ declare class UploadistaCloudAuthManager extends BaseAuthManager {
732
727
  private config;
733
728
  private httpClient;
734
729
  /** Token cache: maps job ID to cached token */
735
730
  private tokenCache;
736
731
  /** Global token for requests without a specific job ID */
737
732
  private globalToken;
738
- constructor(config: SaasAuthConfig, httpClient: HttpClient);
733
+ constructor(config: UploadistaCloudAuthConfig, httpClient: HttpClient);
739
734
  /**
740
735
  * Fetch a JWT token from the auth server using user credentials.
741
736
  *
@@ -789,7 +784,7 @@ declare class SaasAuthManager extends BaseAuthManager {
789
784
  /**
790
785
  * Union type of all auth managers
791
786
  */
792
- type AuthManager = DirectAuthManager | SaasAuthManager | NoAuthManager;
787
+ type AuthManager = DirectAuthManager | UploadistaCloudAuthManager | NoAuthManager;
793
788
  //#endregion
794
789
  //#region src/network-monitor.d.ts
795
790
  /**
@@ -1565,9 +1560,32 @@ type UploadistaApi = {
1565
1560
  * @returns Updated job metadata
1566
1561
  * @throws {UploadistaError} If job not found or continuation fails
1567
1562
  */
1568
- continueFlow: (jobId: string, nodeId: string, newData: unknown, options?: {
1563
+ resumeFlow: (jobId: string, nodeId: string, newData: unknown, options?: {
1569
1564
  contentType?: "application/json" | "application/octet-stream";
1570
1565
  }) => Promise<FlowJob>;
1566
+ /**
1567
+ * Pauses a running flow execution.
1568
+ *
1569
+ * The flow will stop at the next node boundary (not mid-node execution).
1570
+ * Can be resumed later using resumeFlow.
1571
+ *
1572
+ * @param jobId - Job identifier for the running flow
1573
+ * @returns Updated job metadata with "paused" status
1574
+ * @throws {UploadistaError} If job not found or cannot be paused
1575
+ */
1576
+ pauseFlow: (jobId: string) => Promise<FlowJob>;
1577
+ /**
1578
+ * Cancels a running or paused flow execution.
1579
+ *
1580
+ * The flow will stop at the next node boundary (not mid-node execution).
1581
+ * Intermediate files are automatically cleaned up. This operation is terminal
1582
+ * and cannot be undone.
1583
+ *
1584
+ * @param jobId - Job identifier for the flow to cancel
1585
+ * @returns Updated job metadata with "cancelled" status
1586
+ * @throws {UploadistaError} If job not found or cannot be cancelled
1587
+ */
1588
+ cancelFlow: (jobId: string) => Promise<FlowJob>;
1571
1589
  /**
1572
1590
  * Retrieves current job status and outputs.
1573
1591
  *
@@ -1728,7 +1746,7 @@ declare function createUploadistaApi(baseURL: string, uploadistBasePath: string,
1728
1746
  * }
1729
1747
  * ```
1730
1748
  */
1731
- type UploadistaErrorName = "UPLOAD_SIZE_NOT_SPECIFIED" | "NETWORK_ERROR" | "NETWORK_UNEXPECTED_RESPONSE" | "UPLOAD_CHUNK_FAILED" | "WRONG_UPLOAD_SIZE" | "UPLOAD_LOCKED" | "UPLOAD_NOT_FOUND" | "CREATE_UPLOAD_FAILED" | "DELETE_UPLOAD_FAILED" | "PARALLEL_SEGMENT_CREATION_FAILED" | "PARALLEL_SEGMENT_UPLOAD_FAILED" | "FLOW_NOT_FOUND" | "FLOW_INIT_FAILED" | "FLOW_RUN_FAILED" | "FLOW_CONTINUE_FAILED" | "FLOW_UNEXPECTED_STATE" | "FLOW_INCOMPATIBLE" | "FLOW_NO_UPLOAD_ID" | "FLOW_TIMEOUT" | "FLOW_FINALIZE_FAILED" | "JOB_NOT_FOUND" | "WEBSOCKET_AUTH_FAILED";
1749
+ type UploadistaErrorName = "UPLOAD_SIZE_NOT_SPECIFIED" | "NETWORK_ERROR" | "NETWORK_UNEXPECTED_RESPONSE" | "UPLOAD_CHUNK_FAILED" | "WRONG_UPLOAD_SIZE" | "UPLOAD_LOCKED" | "UPLOAD_NOT_FOUND" | "CREATE_UPLOAD_FAILED" | "DELETE_UPLOAD_FAILED" | "PARALLEL_SEGMENT_CREATION_FAILED" | "PARALLEL_SEGMENT_UPLOAD_FAILED" | "FLOW_NOT_FOUND" | "FLOW_INIT_FAILED" | "FLOW_RUN_FAILED" | "FLOW_RESUMED_FAILED" | "FLOW_PAUSE_FAILED" | "FLOW_CANCEL_FAILED" | "FLOW_UNEXPECTED_STATE" | "FLOW_INCOMPATIBLE" | "FLOW_NO_UPLOAD_ID" | "FLOW_TIMEOUT" | "FLOW_FINALIZE_FAILED" | "JOB_NOT_FOUND" | "WEBSOCKET_AUTH_FAILED";
1732
1750
  /**
1733
1751
  * Custom error class for all Uploadista client operations.
1734
1752
  *
@@ -2158,7 +2176,7 @@ type UploadistaClientOptions<UploadInput> = {
2158
2176
  * Optional authentication configuration.
2159
2177
  * Supports two modes:
2160
2178
  * - Direct: Bring your own auth (headers, cookies, custom tokens)
2161
- * - SaaS: Standard JWT token exchange with auth server
2179
+ * - UploadistaCloud: Standard JWT token exchange with auth server
2162
2180
  *
2163
2181
  * If omitted, client operates in no-auth mode (backward compatible).
2164
2182
  *
@@ -2172,10 +2190,10 @@ type UploadistaClientOptions<UploadInput> = {
2172
2190
  * }
2173
2191
  * ```
2174
2192
  *
2175
- * @example SaaS mode with auth server
2193
+ * @example UploadistaCloud mode with auth server
2176
2194
  * ```typescript
2177
2195
  * auth: {
2178
- * mode: 'saas',
2196
+ * mode: 'uploadista-cloud',
2179
2197
  * authServerUrl: 'https://auth.myapp.com/token',
2180
2198
  * getCredentials: () => ({ username: 'user', password: 'pass' })
2181
2199
  * }
@@ -2200,7 +2218,7 @@ declare const defaultConnectionPoolingConfig: ConnectionPoolConfig;
2200
2218
  * - Smart chunking based on network conditions
2201
2219
  * - Flow-based file processing pipelines
2202
2220
  * - WebSocket support for real-time progress
2203
- * - Authentication (direct, SaaS, or no-auth modes)
2221
+ * - Authentication (direct, uploadista-cloud, or no-auth modes)
2204
2222
  *
2205
2223
  * The client automatically:
2206
2224
  * - Fetches server capabilities and adapts upload strategy
@@ -2352,7 +2370,8 @@ declare function createUploadistaClient<UploadInput>({
2352
2370
  onJobStart,
2353
2371
  onError
2354
2372
  }?: Omit<UploadistaUploadOptions, "uploadLengthDeferred" | "uploadSize" | "metadata">) => Promise<{
2355
- abort: () => void;
2373
+ abort: () => Promise<void>;
2374
+ pause: () => Promise<FlowJob>;
2356
2375
  jobId: string;
2357
2376
  }>;
2358
2377
  abort: (params: Parameters<typeof abort>[0]) => Promise<void>;
@@ -2370,9 +2389,9 @@ declare function createUploadistaClient<UploadInput>({
2370
2389
  storageId?: string;
2371
2390
  }) => Promise<{
2372
2391
  status: number;
2373
- job: _uploadista_core0.FlowJob;
2392
+ job: FlowJob;
2374
2393
  }>;
2375
- continueFlow: ({
2394
+ resumeFlow: ({
2376
2395
  jobId,
2377
2396
  nodeId,
2378
2397
  newData,
@@ -2382,8 +2401,10 @@ declare function createUploadistaClient<UploadInput>({
2382
2401
  nodeId: string;
2383
2402
  newData: unknown;
2384
2403
  contentType?: "application/json" | "application/octet-stream";
2385
- }) => Promise<_uploadista_core0.FlowJob>;
2386
- getJobStatus: (jobId: string) => Promise<_uploadista_core0.FlowJob>;
2404
+ }) => Promise<FlowJob>;
2405
+ pauseFlow: (jobId: string) => Promise<FlowJob>;
2406
+ cancelFlow: (jobId: string) => Promise<FlowJob>;
2407
+ getJobStatus: (jobId: string) => Promise<FlowJob>;
2387
2408
  openUploadWebSocket: (uploadId: string) => Promise<WebSocketLike>;
2388
2409
  openFlowWebSocket: (jobId: string) => Promise<WebSocketLike>;
2389
2410
  openWebSocket: (id: string) => Promise<WebSocketLike>;
@@ -2433,7 +2454,7 @@ declare function createUploadistaClient<UploadInput>({
2433
2454
  *
2434
2455
  * The client provides methods for:
2435
2456
  * - **Upload operations**: upload(), uploadWithFlow()
2436
- * - **Flow operations**: getFlow(), runFlow(), continueFlow()
2457
+ * - **Flow operations**: getFlow(), runFlow(), resumeFlow()
2437
2458
  * - **Job management**: getJobStatus()
2438
2459
  * - **WebSocket management**: openUploadWebSocket(), openFlowWebSocket(), closeWebSocket()
2439
2460
  * - **Metrics and diagnostics**: getNetworkMetrics(), getChunkingInsights(), exportMetrics()
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/buffered-chunk.ts","../src/chunk-buffer.ts","../src/services/abort-controller-service.ts","../src/services/http-client.ts","../src/logger.ts","../src/services/platform-service.ts","../src/auth/types.ts","../src/auth/direct-auth.ts","../src/auth/no-auth.ts","../src/auth/saas-auth.ts","../src/auth/auth-http-client.ts","../src/network-monitor.ts","../src/services/checksum-service.ts","../src/services/file-reader-service.ts","../src/services/fingerprint-service.ts","../src/services/id-generation-service.ts","../src/services/websocket-service.ts","../src/smart-chunker.ts","../src/services/storage-service.ts","../src/types/previous-upload.ts","../src/storage/client-storage.ts","../src/types/flow-upload-config.ts","../src/client/uploadista-api.ts","../src/error.ts","../src/services/service-container.ts","../src/types/upload-response.ts","../src/upload/chunk-upload.ts","../src/types/chunk-metrics.ts","../src/types/performance-insights.ts","../src/types/upload-session-metrics.ts","../src/upload/upload-metrics.ts","../src/upload/single-upload.ts","../src/upload/upload-manager.ts","../src/upload/upload-strategy.ts","../src/client/uploadista-websocket-manager.ts","../src/client/create-uploadista-client.ts","../src/storage/in-memory-storage-service.ts","../src/types/flow-result.ts","../src/types/flow-upload-item.ts","../src/types/flow-upload-options.ts","../src/types/multi-flow-upload-options.ts","../src/types/multi-flow-upload-state.ts","../src/types/upload-options.ts","../src/types/upload-result.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAAiB,aAAA;QACT;;;;;;;;;;;;UCOS,iBAAA;EDRA;;;;ECQA,YAAA,EAAA,MAAiB;EA4DrB;;;;EA8EF,aAAA,CAAA,EAAA,MAAA;EAAa;;;;EC9IP,SAAA,CAAA,EAAA,MAAA;AAKjB;AAMA;;;;ACRA;AAOA;AAiBA;AAyBA;;;;;;;AA8BA;AAsBA;AAoBA;AAoBA;AAoBA;;;;;AA8BA;;;;;;;;;;;;ACvLA;AAwBA;AA2CA;;;cHda,WAAA;EI/DD,QAAA,MAAO;EAEF,QAAA,WAAe;EAkDV,QAAI,MAAA;;;;ACzD1B;AAWA;AAoCA;EAOyB,WAAA,CAAA,MAAA,ELyBH,iBKzBG;EAA6B;;;AA0BtD;AAwBA;;;;AC3FA;;;;;;;;;;;;ACLA;;;;EAAmC,GAAA,CAAA,KAAA,EPuGtB,UOvGsB,CAAA,EPuGT,aOvGS,GAAA,IAAA;EAAe;;;;ACFlD;AA2BA;;;;;;;;;;;;;ACrBA;;;;;WTsIW;;;AU7IX;AAuBA;AA6BA;AAuBA;AAoEA;;;;;;;;;ACpJA;;;;ACIA;AAYA;AAUA;EAIkB,WAAA,CAAA,CAAA,EAAA,OAAA;EAAyC;;;AAG3D;;;;ACjCA;;;;ACGA;;;;ACCA;AAOA;AAgBA;;;;IChBiB,UAAA,EAAA,MAAA;IAOA,cAAA,EAAA,OAAkB;;;;ACfnC;;;;;;;;;;;;ACDA;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;UjBPiB,mBAAA;mBACE;;;UAIF,eAAA;EFTA,SAAA,OAAa,EAAA,OAAA;;;;ACQb,UCOA,sBAAA,CDPiB;EA4DrB;;;EA2Ca,MAAA,EAAA,EC5Fd,mBD4Fc;;;;;;;;;KExGd,WAAA,YAAuB,aAAa;;AHPhD;;;;ACQiB,UEMA,WAAA,CFNiB;EA4DrB;EAWS,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAgCT;EAAa,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAmCf;EAAa,OAAA,CAAA,QAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA,CAAA,EAAA,IAAA;;;;AC9IxB;AAKA;AAMA;;UCgBiB,kBAAA;;EAxBL,MAAA,CAAA,EAAA,MAAW;EAON;EAiBA,OAAA,CAAA,EAKL,MALK,CAAA,MAAkB,EAAA,MAAA,CAAA;EAyBlB;EAQN,IAAA,CAAA,EAAA,OAAA;EAMD;EAGA,MAAA,CAAA,EA/BC,eA+BD;EAGe;EAAR,OAAA,CAAA,EAAA,MAAA;EAAO;EAUP,WAAA,CAAA,EAAA,SAAoB,GAAA,MAAA,GAAA,aAAA;AAsBrC;AAoBA;AAoBA;AAoBA;;;AAAmD,UAhHlC,YAAA,CAgHkC;EAAiB;EA8BnD,MAAA,EAAA,MAAU;EAIM;EAA6B,UAAA,EAAA,MAAA;EAAR;EAKtC,OAAA,EA/IL,WA+IK;EAKQ;EAUb,EAAA,EAAA,OAAA;EAK0B;EAAO,IAAA,EAAA,EA7JlC,OA6JkC,CAAA,OAAA,CAAA;;UA1JlC;;EC1DE,WAAM,EAAA,ED6DD,OC7DC,CD6DO,WC7DP,CAAA;AAwBlB;AA2CA;;;;AC7EA;AAEA;AAkDA;UF6BiB,oBAAA;;;EGtFJ;EAWD,iBAAA,CAAA,EAAA,MAAkB;EAoClB;EAOa,gBAAA,CAAA,EAAA,MAAA;EAA6B;EAAR,WAAA,CAAA,EAAA,OAAA;EAAO;EA0BzC,sBAAc,CAAA,EAAA,OAAA;AAwB1B;;;;AC3FA;;AAG6B,UJ4FZ,iBAAA,CI5FY;EACT;EAcP,iBAAA,EAAA,MAAA;EACA;EAAR,gBAAA,EAAA,MAAA;EAnBkC;EAAe,SAAA,EAAA,MAAA;;;;ACLtD;;;;;;ULwHiB,gBAAA;;;EM1HL;EA2BC,KAAA,EAAA,MAAA;EAQO;EACI,MAAA,EAAA,MAAA,EAAA;EAWM;EAAR,eAAA,EAAA,MAAA,EAAA;;;;;;;;UN+FL,SAAA;EOxIL;EAAc,SAAA,EAAA,OAAA;EAAoB;EAAkB,QAAA,EAAA,OAAA;EAAa;;;;ACP7E;AAuBA;AA6BA;AAuBA;AAoEA;;;AAuGuB,URnFN,yBAAA,SAAkC,iBQmF5B,CAAA;EAgCE;EAAgB,MAAA,ERjH/B,gBQiH+B;;;;EC3RxB,SAAA,EAAA,MAAA;;;;ECIL,OAAA,EAAA,MAAW;EAYN;EAUA,eAAA,EAAA,MAAiB;EAIhB;EAAyC,eAAA,EAAA,MAAA;EAAR;EAAO,SAAA,EViK7C,SUjK6C;AAG1D;;;;ACjCA;UXsMiB,UAAA;;;AYnMjB;iCZuMiC,qBAAqB,QAAQ;;;AatM9D;EAOiB,UAAA,EAAA,EboMD,iBaxLM;EAIL;;;wBbyLO;EczMP;AAOjB;;;;ACfA;;EASuC,KAAA,EAAA,EfkN5B,OelN4B,CAAA,IAAA,CAAA;EAKZ;;;EAUK,iBAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EfwMK,OexML,CAAA,IAAA,CAAA;;;;;;;;;;;;AlB3BhC;;;;ACQA;AA4DA;;AA2Ca,KGhGD,MAAA,GHgGC;EAAa;;;;;;AC3G1B;EAKiB,IAAA,EAAA,CAAA,OAAA,EAAA,MAAe,EAAA,GAAA,IAAA;EAMf;;;;ACRjB,CAAA;AAOA;AAiBA;AAyBA;;;;;AAoBiB,KCrCL,WAAA,GDqCK,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;AAUjB;AAsBA;AAoBA;AAoBA;AAoBA;;;;;AA8BA;;;;;;;;;;;;ACvLA;AAwBA;AA2CA;;;;AC7EA;AAEA;AAkDA;iBDyBgB,YAAA,2BAEP,cACN;;;;;;;KChFS,OAAA;UAEK,eAAA;;;ALPjB;gEKWgE;;;AJHhE;EA4Da,YAAA,EAAW,CAAA,EAAA,EIpDH,OJoDG,EAAA,GAAA,IAAA;EAWF;;;EAmEX,SAAA,EAAA,GAAA,GAAA,OAAA;EAAa;;;;EC9IP;AAKjB;AAMA;;;;ACRA;EAOiB,WAAA,EAAA,CAAW,IAAA,EAAA,OAAA,EAAA,GAAA,MAAA,GAAA,SAAA;EAiBX;AAyBjB;;EAcU,WAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,GAAA,MAAA,GAAA,SAAA;EAGA;;;EAGc,WAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,GAAA,MAAA,GAAA,SAAA;EAUP;AAsBjB;AAoBA;EAoBiB,mBAAS,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,GAAA,MAAA,GAAA,SAAA;AAoB1B;;;;AAAoE,iBE/G9C,IAAA,CF+G8C,eAAA,EE9GjD,eF8GiD,EAAA,EAAA,EAAA,MAAA,CAAA,EE5GjE,OF4GiE,CAAA,IAAA,CAAA;;;cGxKvD,eAAA;;;;;;;;ANAb;KMWY,kBAAA;;YAEA;ELLK;EA4DJ,OAAA,CAAA,EKrDD,MLqDY,CAAA,MAAA,EAAA,MAAA,CAAA;CAWF;;;;;;;;AC3EtB;AAKA;AAMA;;;;ACRA;AAOA;AAiBA;AAyBA;;;;;;;AA8BA;AAsBA;AAoBA;AAoBA;AAoBA;;AAuBa,KGhJD,gBAAA,GHgJC;EAvBsC,IAAA,EAAA,QAAA;EAAiB;AA8BpE;;;;EASgB,cAAA,CAAA,EAAA,GAAA,GGzJS,kBHyJT,GGzJ8B,OHyJ9B,CGzJsC,kBHyJtC,CAAA;CAKQ;;;;;;;ACrMxB;AAwBA;AA2CA;;;;AC7EA;AAEA;AAkDA;;;;ACzDA;AAWA;AAoCA;;;AAO8C,KA0BlC,cAAA,GA1BkC;EAAO,IAAA,EAAA,MAAA;EA0BzC;AAwBZ;;;;EC3Fa;;;;;EAmBA,QAAA,EAAA,MAAA;CAAR;;;;;;ACxBL;;;;AAAmC,KFgGvB,UAAA,GAAa,gBEhGU,GFgGS,cEhGT;;;;;;;ARRnC;;;;ACQiB,cMKJ,iBAAA,SAA0B,eAAA,CNLL;EA4DrB,QAAA,MAAW;EAWF,QAAA,eAAA;EAgCT,QAAA,MAAA;EAAa,WAAA,CAAA,MAAA,EMhGN,gBNgGM,EAAA,eAAA,EM/FG,eN+FH,EAAA,MAAA,EM9FN,MN8FM;EAmCf;;;;;AC9IX;AAKA;AAMA;8BKgBa,yBACR,QAAQ;;;AJzBb;EAOiB,QAAA,eAAW;EAiBX;AAyBjB;;;;EAoByB,QAAA,aAAA;;;;;;;;;;cKpEZ,aAAA,SAAsB,eAAA;ERRlB,WAAA,CAAA;;;;ACQjB;AA4DA;;EA2Ca,iBAAA,CAAA,OAAA,CAAA,EO3FA,MP2FA,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EO1FR,OP0FQ,CO1FA,MP0FA,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA;EAAa;;;;;;AC3G1B;EAKiB,cAAA,CAAA,CAAA,EAAe,IAAA;AAMhC;;;;;;KOTY,aAAA;;;ETNK;;;;ACQjB;AA4DA;;;;;;;;;AChEA;AAKiB,cOwBJ,eAAA,SAAwB,eAAA,CPxBL;EAMf,QAAA,MAAA;;;;ECRL;EAOK,QAAA,WAAW;EAiBX,WAAA,CAAA,MAAA,EMUG,cNLR,EAAA,UAMD,EMAa,UNAE;EAcT;;;;;;EAoBO,UAAA,CAAA,CAAA,EMvBF,ONuBE,CMvBM,aNuBN,CAAA;EAUP;AAsBjB;AAoBA;AAoBA;AAoBA;;EAuBa,QAAA,eAAA;EAvBsC;;AA8BnD;;EAI8D,QAAA,cAAA;EAAR;;;;;;;;wBMlCzC,yCAER,QAAQ;EL3JD;AAwBZ;AA2CA;;;;EC7EY,UAAO,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAEF;AAkDjB;;;;ECzDa;AAWb;AAoCA;EAOyB,aAAA,CAAA,CAAA,EAAA;IAA6B,cAAA,EAAA,MAAA;IAAR,cAAA,EAAA,OAAA;EAAO,CAAA;AA0BrD;;;;;;KIpEY,WAAA,GAAc,oBAAoB,kBAAkB;;;;;;;;UCP/C,gBAAA;;;AXLjB;;;;ACQA;EA4Da,IAAA,EAAA,MAAA,GAAW,MAAA,GAAA,UAAA,GAAA,SAAA;EAWF;;;;EAmEE,UAAA,EAAA,MAAA;;;;AC9IxB;AAKA;AAMA;;USaiB,cAAA;;ERrBL,YAAA,EAAW,MAAA;EAON;EAiBA,OAAA,EAAA,MAAA;EAyBA;EAQN,WAAA,EAAA,MAAA;EAMD;EAGA,SAAA,EAAA,MAAA;EAGe;EAAR,aAAA,EAAA,MAAA;EAAO;EAUP,UAAA,EAAA,MAAA;EAsBA;EAoBA,SAAA,EAAA,MAAA;AAoBjB;AAoBA;;;;;AA8BA;AAIiC,UQjJhB,YAAA,CRiJgB;EAA6B;EAAR,IAAA,EAAA,MAAA;EAKtC;EAKQ,QAAA,EAAA,MAAA;EAUb;EAK0B,OAAA,EAAA,OAAA;EAAO;;;;ACpN5C;AAwBA;AA2CA;;;;AC7EA;AAEiB,UMyEA,oBAAA,CNrE+C;EA8C1C;;;;ECzDT;EAWD,sBAAkB,CAAA,EAAA,MAAA;EAoClB;EAOa,aAAA,CAAA,EAAA,MAAA;EAA6B;EAAR,aAAA,CAAA,EAAA,MAAA;EAAO;EA0BzC,iBAAc,CAAA,EAAA,MAAA;AAwB1B;;;;AC3FA;;;;;;;;;;;;ACLA;;;;;;;;;ACFA;AA2BA;;;;;;;;;;;;;ACrBA;;;;;;;;ACPA;AAuBA;AA6BiB,cA2FJ,cAAA,CA3FgB;EAuBZ,QAAA,OAAA;EAoEJ,QAAA,MAAA;EAUS,QAAA,eAAA;EAqBF;;;;;uBArBE;;AC9JtB;;;;ACIA;AAYA;AAUA;EAIkB,SAAA,CAAA,MAAA,EFqJE,YErJF,CAAA,EAAA,IAAA;EAAyC;;;AAG3D;;;;ACjCA;;;;ACGA;;;;ACCA;AAOA;AAgBA;;;;AChBA;AAOA;;;;ACfA;;;;EAmBqB,YAAA,CAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAR;;;;;;;ACpBb;AASA;;;;;;;;uBRgPuB;;;;;;;;;;;;;;ASxNvB;;;;;;;;;;;AAyHA;;;;EC5HY,mBAAgB,CAAA,CAAA,EV2PH,gBUrON;;;;ACSnB;AAUA;AAaA;AAiDA;;;;;;;;;EAyCwB,oBAAA,CAAA,CAAA,EAAA,MAAA;EAGT;;;;;;;;;;;;;;;;EAsFe,KAAA,CAAA,CAAA,EAAA,IAAA;EAOQ,QAAA,0BAAA;EAUG,QAAA,aAAA;EAYS,QAAA,kBAAA;;;;UVtSjC,eAAA;wBACO,aAAa;;;;;;;KCGzB,WAAA;;;;;EbJK,IAAA,EAAA,OAAA;SaYJ;;;AZJI,UYQA,UAAA,CZRiB;EA4DrB,KAAA,EAAA,OAAW;EAWF,IAAA,EAAA,MAAA,GAAA,IAAA;EAgCT,IAAA,EAAA,MAAA,GAAA,IAAA;EAAa,IAAA,EAAA,MAAA,GAAA,IAAA;EAmCf,YAAA,EAAA,MAAA,GAAA,IAAA;EAAa,KAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GY5HiB,OZ4HjB,CY5HyB,WZ4HzB,CAAA;;;UYxHP;EXtBA;AAKjB;AAMA;kBWekB,iCAAiC,QAAQ;;UAG1C,aAAA;EV1BL;AAOZ;AAiBA;EAyBiB,QAAA,CAAA,IAAA,EUnBA,WVmBY,CAAA,EAAA,MAAA;EAQlB;;;EAYc,UAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EUlCG,WVkCH;;;;UW5ER;2BAEP,gCAEL;;;;;;;UCDY,mBAAA;;;;;AfHjB;;;;;;UgBIiB,iBAAA;;;;;AhBJjB;UgBWiB,aAAA;;;EfHA,SAAA,IAAA,EAAA,MAAiB;EA4DrB,SAAA,OAAW,EAAA,MAAA;EAWF,SAAA,MAAA,EAAA,MAAA;EAgCT,MAAA,EAAA,CAAA,GAAA,GAAA,IAAA,CAAA,GAAA,IAAA;EAAa,OAAA,EAAA,CAAA,CAAA,KAAA,EAAA;IAmCf,IAAA,EAAA,MAAA;IAAa,MAAA,EAAA,MAAA;;;;EC9IP,CAAA,EAAA,GAAA,IAAA,CAAA,GAAA,IAAA;EAKA,SAAA,EAAA,CAAA,CAAA,KAAe,EAAA;IAMf,IAAA,EAAA,MAAA;;sBcQK;;AbhBtB;AAOiB,UaaA,gBAAA,CbbW;EAiBX;AAyBjB;;EAcU,MAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EavCa,abuCb;;;;Uc3DO,oBAAA;;;EhBHA,gBAAA,EAAA,MAAiB;EA4DrB,qBAAW,CAAA,EAAA,OAAA;;AA2CX,UgB7FI,kBAAA,ChB6FJ;EAAa,OAAA,CAAA,EAAA,OAAA;EAmCf,iBAAA,CAAA,EAAA,MAAA;EAAa,YAAA,CAAA,EAAA,MAAA;;;;EC9IP,cAAA,CAAA,EAAA,MAAmB;EAKnB,gBAAA,CAAA,EAAe,OAAA;EAMf,sBAAA,CAAA,EAAsB,OAAA;yBead;;;;;;;UCzBR,cAAA;;;;wBAIO;ElBPP;;;uCkBYsB;EjBJtB;AA4DjB;;EA2Ca,UAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EiB9Fc,OjB8Fd,CAAA,IAAA,CAAA;EAAa;;;aiBzFb,QAAQ;;;AhBlBrB;EAKiB,IAAA,CAAA,MAAA,EAAA,MAAe,CAAA,EgBkBR,OhBlBQ,CgBkBA,MhBlBA,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA;AAMhC;;;KiBbY,cAAA;;;;;;;EnBFK,kBAAa,CAAA,EAAA,MAAA,EACtB;;;cmBUK,sBAAoB,CAAA,CAAA;ElBHhB,IAAA,eAAA,YAAiB,CAAA;EA4DrB,QAAA,aAAW,YAAA,YAAA,CAAA,SAAA,YAAA,aAAA,cAAA,CAAA,CAAA,CAAA;EAWF,YAAA,aAAA;EAgCT,QAAA,eAAA,YAAA,CAAA;EAAa,kBAAA,eAAA,WAAA,YAAA,CAAA,CAAA;EAmCf,gBAAA,aAAA;CAAa,eAAA,CAAA;;;;;;;;ADlJxB;;;;ACQA;AA4DA;;;;;;;;;AChEA;AAKA;AAMA;;;;ACRA;AAOA;AAiBA;AAyBiB,KiBrBL,aAAA,GjBqBiB;EAQlB;;;;;;AAsBX;EAsBiB,cAAA,EAAA,GAAA,GiBjEO,OjBiEU,CiBjEF,cjBiEE,EAAA,CAAA;EAoBjB;AAoBjB;AAoBA;;;;;AA8BA;;;;;;;;;;;;ACvLA;EAwBY,wBAAW,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,GgB0B8B,OhB1B9B,CgB0BsC,chB1BtC,EAAA,CAAA;EA2CP;;;;AC7EhB;AAEA;AAkDA;;;;ACzDA;AAWA;AAoCA;;EAOsD,YAAA,EAAA,CAAA,gBAAA,EAAA,MAAA,EAAA,Gc2BR,Od3BQ,CAAA,IAAA,CAAA;EAAR;;AA0B9C;AAwBA;;;;AC3FA;;;;;;;;;;;;ACLA;;;;;EAAkD,SAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EYqGtC,cZrGsC,EAAA;IAAA;GAAA,EAAA;gBYsGhB;QAC3B;;AXzGP;AA2BA;;;;;;;;;;;;;ACrBA;;;;;;;;ACPA;AAuBA;AA6BA;AAuBA;AAoEA;;;;;;;;;ACpJA;;;;ACIA;AAYA;AAUA;AAIkB,iBO8HF,mBAAA,CP9HE,cAAA,EO+HA,cP/HA,CAAA,EOgIf,aPhIe;;;;;;;;;;;Ab9BlB;;;;ACQA;AA4DA;;;;;;;;;AChEA;AAKA;AAMA;;;;ACRA;AAOA;AAiBA;AAyBA;AAQW,KkBhCC,gBAAA,GlBgCD;EAMD;EAGA,MAAA,EAAA,MAAA;EAGe;EAAR,SAAA,EAAA,MAAA;EAAO;AAUxB;AAsBA;AAoBA;AAoBA;AAoBA;;EAuBa,YAAA,CAAA,EAAA,MAAA;EAvBsC;;AA8BnD;;;;EASgB,QAAA,CAAA,EkBzJH,MlByJG,CAAA,MAAA,EAAA,MAAA,CAAA;CAKQ;;;;AHpNxB;;;;ACQiB,KqBuDL,wBAAA,GrBvDsB;EA4DrB;EAWS,MAAA,CAAA,EqBdX,UrBcW;EAgCT;EAAa,MAAA,EAAA,MAAA;CAmCf;;;;KqBzEC,8BAAA;EpBrEK;EAKA,MAAA,EAAA,GAAA;AAMjB,CAAA,GAAiB;;;;ACRjB;AAOA;AAiBA;AAyBiB,KmB8BL,YAAA,GnB9BiB;EAQlB;EAMD,MAAA,EAAA,MAAA;EAGA;EAGe,IAAA,EmBcjB,QnBdiB;CAAR;;AAUjB;AAsBA;AAoBA;AAoBA;AAoBA;;;;;AA8BA;;;;;;;;;;;;ACvLA;AAwBA;AA2CA;;;;AC7EA;AAEA;AAkDA;;;;ACzDA;AAWA;AAoCA;;;;;AAiCA;AAwBY,KgB+BA,aAAA,GhB/BU;;;;AC3FtB;;;;EAkBa,SAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GegHsB,OfhHtB,CegH8B,wBfhH9B,CAAA;EACA;;;;;;;ECxBA,YAAA,EAAA,CAAA,QAAc,EAAA,MAAA,EAAA,GcgJW,OdhJX,CcgJmB,8BdhJnB,CAAA;EAYd;;;;;;;uBc6IU,cAAc,QAAQ;Eb3JjC;AA2BZ;;;;;;;;EAAqC,WAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,IAAA,Ea6I3B,Ub7I2B,GAAA,IAAA,EAAA,OAAA,EAAA;IAAe,eAAA,CAAA,Ea+I5B,mBb/I4B;;QakJ7C,QAAQ;;AZvKf;;;;;;+BYgL+B,QAAQ;;AXvLvC;AAuBA;AA6BA;AAuBA;AAoEA;;;;EAuIyB,OAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EWjFb,MXiFa,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GWhFlB,OXgFkB,CAAA;IAAgB,MAAA,EAAA,MAAA;SWhFH;;;AV3MtC;;;;ACIA;AAYA;AAUA;;;;;EAOiB,YAAA,EAAA,CAAA,KAAa,EAAA,MAIb,EAAA,MAAA,EAAA,MAKW,EAAA,OAAW,EAAA,OAAA,EAAA,QAAA,EAAA;;QSsLhC,QAAQ;;ARhOf;;;;ACGA;;;;ECCiB,YAAA,EAAA,CAAA,KAAiB,EAAA,MAAA,EAAA,GMuOC,ONvOD,CMuOS,ONvOT,CAAA;EAOjB;AAgBjB;;;;AChBA;EAOiB,mBAAA,EAAkB,CAAA,QAAA,EAAA,MAUV,EAAA,GKuNoB,OLvNpB,CKuN4B,aLvNR,CAAA;;;;ACzB7C;;;EAc2B,iBAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GI0Oa,OJ1Ob,CI0OqB,aJ1OrB,CAAA;EAKN;;;;;uBI4OE;;;AHhQvB;AASA;;8BG8P8B;;;;;;sCAOQ;;;;;;;;;EHrQL,iBAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,EAAA,GG+QQ,OH/QR,CAAA,IAAA,CAAA;EAAA;;;;ACwBjC;;;;;;EA0EY,eAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,GEyL8B,OFzL9B,CEyLsC,qBFzLtC,CAAA;CACN;;;;AA8CN;;;;AC5HA;;;;AC+BA;AAUA;AAaA;AAiDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NA;;;;;;;;;;;;;;AC/UA;AAuDa,iBDwRG,mBAAA,CCxRa,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,MAAA,EAAA;EAAA,UAAA,ED4Rb,cC5Ra;EAAA,MAAA;EAAA,WAAA;EAAA;CAAA,EAAA;EAIrB,UAAA,ED6RQ,UC7RR;EAUC,MAAA,CAAA,EDoRI,MCpRJ;EAiBL,WAAA,CAAA,EDoQc,WCpQd;EACA,gBAAA,EDoQkB,gBCpQlB;CACA,CAAA,EDqQD,aCrQC;;;;;;;;;;;AvB/GJ;;;;ACQA;AA4DA;;;;;;;;;AChEA;AAKiB,KqBcL,mBAAA,GrBdoB,2BAAA,GAAA,eAAA,GAAA,6BAAA,GAAA,qBAAA,GAAA,mBAAA,GAAA,eAAA,GAAA,kBAAA,GAAA,sBAAA,GAAA,sBAAA,GAAA,kCAAA,GAAA,gCAAA,GAAA,gBAAA,GAAA,kBAAA,GAAA,iBAAA,GAAA,sBAAA,GAAA,uBAAA,GAAA,mBAAA,GAAA,mBAAA,GAAA,cAAA,GAAA,sBAAA,GAAA,eAAA,GAAA,uBAAA;AAMhC;;;;ACRA;AAOA;AAiBA;AAyBA;;;;;;;AA8BA;AAsBA;AAoBA;AAoBA;AAoBA;;;;;AA8BA;;;;;;;;AA6B4C,coBrJ/B,eAAA,SAAwB,KAAA,CpBqJO;;;;ECpNhC,IAAA,EmBmEJ,mBnBnEU;EAwBN;AA2CZ;;;;AC7EA;AAEA;EAkDsB,KAAA,EkBmCb,KlBnCiB,GAAA,SACP;;;;EC1DN,MAAA,EAAA,MAAA,GAAA,SAAe;EAWhB;AAoCZ;;;;;AAiCA;AAwBA;;;;;;;ECvFoB;UgBiGV;IhBrGG,OAAA,EAAA,MAAA;IAEO,KAAA,CAAA,EgBqGR,KhBrGQ;IACS,MAAA,CAAA,EAAA,MAAA;EACT,CAAA;EAcP;;;;;;;;ACvBb;;;;;;;;;ACFA;;;;;;AREiB,UuBIA,gBvBJiB,CAAA,WAAA,CAAA,CAAA;EA4DrB,OAAA,EuBvDF,cvBuDa;EAWF,YAAA,EuBjEN,mBvBiEM;EAgCT,UAAA,EuBhGC,UvBgGD;EAAa,UAAA,EuB/FZ,iBvB+FY,CuB/FM,WvB+FN,CAAA;EAmCf,MAAA,CAAA,EuBjIA,avBiIA;EAAa,SAAA,EuBhIX,gBvBgIW;mBuB/HL;YACP;mBACO;EtBjBF,kBAAA,EsBkBK,kBtBjBH,CsBiBsB,WtBjBP,CAAA;AAIlC;;;KuBPY,cAAA;WACD;;;;;AzBHM,K0BUL,UAAA,G1BVkB,CAAA,QACtB,EAAA,MAAA,EAAU,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,GAAA,IAAA,EAAA,GAAA,IAAA;K0BeN,aAAA,WACH;;;UCjBQ,YAAA;;;;;;;;E3BAA,gBAAa,CAAA,EAAA,MAAA;;;;;U4BAb,mBAAA;;;;;;;;E5BAA,CAAA;;;;U6BAA,oBAAA;;;;;;;;E7BAA,QAAA,EAAA,MAAa;;;;ECQb,SAAA,EAAA,MAAA;EA4DJ,OAAA,CAAA,EAAA,MAAW;;;;U6BhEP,mBAAA;;;;;I9BJA,SAAA,EAAA,MAAa;;;;;;AC+ER,K8BtDV,SAAA,G9BsDU;EAgCT,UAAA,CAAA,E8BrFE,U9BqFF;EAAa,eAAA,CAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,GAAA,IAAA,EAAA,GAAA,IAAA;EAmCf,SAAA,CAAA,EAAA,CAAA,OAAA,E8BlHa,U9BkHb,EAAA,GAAA,IAAA;EAAa,OAAA,CAAA,EAAA,CAAA,KAAA,E8BjHJ,K9BiHI,G8BjHI,e9BiHJ,EAAA,GAAA,IAAA;;;;EC9IP,CAAA,EAAA,GAAA,IAAA;EAKA,UAAA,CAAA,EAAA,CAAA,KAAe,EAAA,MAAA,EAAA,GAAA,IAAA;EAMf,aAAA,CAAA,E6BqBC,a7BrBqB;;;;;ADPvC;AA4DA;;;;;AA8EwB,iB+B/EF,KAAA,C/B+EE;EAAA,QAAA;EAAA,kBAAA;EAAA,YAAA;EAAA,eAAA;EAAA,eAAA;EAAA,aAAA;EAAA,eAAA;EAAA,WAAA;EAAA;AE3IxB,CF2IwB,EAAA;;;gB+BlER;E9B5EC,eAAA,EAAA,OAAmB;EAKnB,eAAA,E8ByEE,mB9BzEa;EAMf,aAAA,E8BoEA,a9BpEsB;mB8BqEpB;;iBAEF;A7B/EjB,CAAA,CAAA,E6BgFI,O7BhFQ,CAAA,IAAA,CAAA;;;K8BOA,oBAAA;;;EjCdK,2BAAa,CACtB,EAAA,OAAA;;;;ICOS,eAAA,EAAiB,MAAA;IA4DrB,SAAA,EAAW,MAAA,EAAA;IAWF,QAAA,EAAA,MAAA,EAAA;EAgCT,CAAA,EAAA,GAAA,IAAA;CAAa;;;KiCxGd,eAAA,GAAkB,cAAc;KAEhC,+BAAA,WAA0C;KAE1C,0BAAA;ElCXK,IAAA,EAAA,YAAa;;;;ACQ9B,CAAA,GAAiB;EA4DJ,IAAA,EAAA,YAAW;EAWF,OAAA,EAAA;IAgCT,QAAA,CAAA,EAAA,MAAA;IAAa,KAAA,CAAA,EAAA,MAAA;EAmCf,CAAA;EAAa,SAAA,EAAA,MAAA;;;;EC9IP,IAAA,CAAA,EAAA,MAAA;AAKjB,CAAA,GAAiB;EAMA,IAAA,EAAA,MAAA;;;;ECRL,OAAA,E+BayB,W/Bbd;AAOvB,CAAA,GAAiB;EAiBA,IAAA,EAAA,YAAA;EAyBA,OAAA,E+BnCkB,S/BmCN;CAQlB;;;;AAYM,c+BlDJ,0BAAA,C/BkDI;EAAO,QAAA,aAAA;EAUP,QAAA,MAAA;EAsBA,QAAA,OAAA;EAoBA,QAAA,gBAAgB;EAoBhB,QAAA,cAAS;EAoBT,WAAA,CAAA,aAAA,E+BzIU,a/ByIgB,EAAA,MAAA,E+BxIvB,M/BwIuB,EAAA,OAAA,CAAA,E+BvIrB,+B/BuIqB,GAAA,SAAA;EAEjC;;;EAF0D,mBAAA,CAAA,QAAA,EAAA,MAAA,CAAA,E+BjIrB,O/BiIqB,C+BjIb,a/BiIa,CAAA;EA8BnD;;;EAIqC,iBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,E+BvHZ,O/BuHY,C+BvHJ,a/BuHI,CAAA;EAKtC;;;;EAoB4B,aAAA,CAAA,EAAA,EAAA,MAAA,CAAA,E+BrFT,O/BqFS,C+BrFD,a/BqFC,CAAA;;;;ECpNhC,oBAAM,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAwBN;AA2CZ;;;;AC7EA;AAEA;EAkDsB,cAAI,CAAA,EAAA,EACP,MAAA,CAAA,EAAA,IAAA;;;;EC1DN,QAAA,CAAA,CAAA,EAAA,IAAA;EAWD;AAoCZ;;EAOsD,QAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAR;;AA0B9C;EAwBY,kBAAU,CAAA,QAAG,EAAA,MAAA,CAAA,E4BmHe,a5BnHI,GAAA,SAAc;;;;EC3F7C,gBAAA,CAAA,KAAkB,EAAA,MAAA,CAAA,E2BqNI,a3BrNJ,GAAA,SAAA;EAEX;;;EAgBP,iBAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EACA;;;EAnByC,eAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;;;ECLzC,WAAA,CAAA,EAAA,EAAc,MAAA,CAAA,EAAA,OAAA;EAYd;;;EAZsB,kBAAA,CAAA,CAAA,EAAA,MAAA;EAAe;;;;ICFtC,MAAA,EAAA,MAAa;IA2BZ,IAAA,EAAA,MAAA;IAQO,KAAA,EAAA,MAAA;EACI,CAAA;;;;;;APtCxB;AAKA;AAMA;;KiC0CY,uBAAA;;AhClDZ;AAOA;AAiBA;AAyBA;EAQW,oBAAA,CAAA,EAAA,OAAA;EAMD;;;;EAMc,UAAA,CAAA,EAAA,MAAA;EAUP;AAsBjB;AAoBA;AAoBA;EAoBiB,QAAA,CAAA,EgC7FJ,MhC6FI,CAAA,MAAA,EAAA,MAA0B,CAAA;EAEjC;;;;AA4BV;EAIiC,eAAA,CAAA,EAAA,OAAA;EAA6B;;;;EAoBnD,iBAAA,CAAA,EAAA,MAAA;CAK0B,GgC1IjC,ShC0IiC;;;;;ACpNrC;AAwBA;AA2CA;;;K+BkBY;E9B/FA;EAEK,OAAA,EAAA,MAAA;EAkDK;;;;ECzDT;EAWD,WAAA,CAAA,EAAA,MAAA,EAAkB;EAoClB;EAOa,SAAA,EAAA,MAAA;EAA6B;EAAR,eAAA,CAAA,EAAA,MAAA;EAAO;EA0BzC,iBAAc,CAAA,EAAA,MAAA;EAwBd;mB6BmBO;;mBAGA;E5BjHN;EAEO,aAAA,CAAA,E4BkHF,kB5BlHE;EACS;EACT,iBAAA,CAAA,E4BmHE,oB5BnHF;EAcP;EACA,aAAA,CAAA,E4BuGK,mB5BvGL;EAAR;EAnBkC,UAAA,E4B6HzB,U5B7HyB;EAAe;c4BgIxC;;iBAGG;E3BxIJ;EAYA,UAAA,E2B+HC,iB3B/HD,C2B+HmB,W3B/HnB,CAAA;EACA;EAAR,MAAA,E2BiIK,M3BjIL;EAb8B;EAAe,kBAAA,E2BiJ5B,kB3BjJ4B,C2BiJT,W3BjJS,CAAA;;;;ECFtC,gBAAa,E0ByJL,gB1BzJK;EA2BZ;EAQO,sBAAA,E0ByHM,sB1BzHN;EACI;EAWM,eAAA,E0BgHX,e1BhHW;EAAR;EAmHT,OAAA,CAAA,EAAA,CAAA,KAAA,E0BAO,K1BAP,EAAA,GAAA,IAAA;EAEA;EAAR,OAAA,CAAA,E0BCO,+B1BDP;EAzIgC;;;;;ACrBrC;;;;;;;;ACPA;AAuBA;AA6BA;AAuBA;AAoEA;;;;;;;;;ACpJA;SuBwMS;;;AtBpMT;AAYA;AAUA;;;AAImD,csBmLtC,8BtBnLsC,EsBmLN,oBtBnLM;;AAGnD;;;;ACjCA;;;;ACGA;;;;ACCA;AAOA;AAgBA;;;;AChBA;AAOA;;;;ACfA;;;;;;;;;;;;ACDA;AASA;;;;;;;;;;;;;;;;;;;;;;ACwBA;;;;;;;;;;;AAyHA;;;;AC5HA;;;;AC+BA;AAUA;AAaA;AAiDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NA;;;;AAOI,iBa1BY,sBb0BZ,CAAA,WAAA,CAAA,CAAA;EAAA,OAAA,EazBO,QbyBP;EAAA,kBAAA;EAAA,SAAA;EAAA,WAAA;EAAA,SAAA;EAAA,eAAA;EAAA,iBAAA;EAAA,cAAA;EAAA,aAAA;EAAA,iBAAA;EAAA,aAAA;EAAA,eAAA;EAAA,OAAA;EAAA,UAAA;EAAA,UAAA;EAAA,MAAA;EAAA,UAAA;EAAA,kBAAA;EAAA,aAAA;EAAA,2BAAA;EAAA,gBAAA;EAAA,sBAAA;EAAA,eAAA;EAAA;AAAA,CAAA,EaDD,uBbCC,CaDuB,WbCvB,CAAA,CAAA,EAAA;EAEY,MAAA,EAAA,CAAA,IAAA,EaiFN,WbjFM,EAAA;IAAA,oBAAA;IAAA,UAAA;IAAA,UAAA;IAAA,eAAA;IAAA,SAAA;IAAA,aAAA;IAAA;EAAA,CAAA,CAAA,Ea0FT,uBb1FS,EAAA,Ga2FX,Ob3FW,CAAA;IACH,KAAA,EAAA,GAAA,GAAA,IAAA;EACK,CAAA,CAAA;EACI,cAAA,EAAA,CAAA,IAAA,Ea6RZ,Wb7RY,EAAA,UAAA,Ea8RN,gBb9RM,EAAA;IAAA,UAAA;IAAA,eAAA;IAAA,SAAA;IAAA,aAAA;IAAA,UAAA;IAAA;EAAA,CAAA,CAAA,EasSf,IbtSe,CauShB,uBbvSgB,EAAA,sBAAA,GAAA,YAAA,GAAA,UAAA,CAAA,EAAA,Ga0SjB,Ob1SiB,CAAA;IAEnB,KAAA,EAAA,GAAA,GAAA,IAAA;IAAa,KAAA,EAAA,MAAA;;kBa8XI,kBAAkB,cAAS;+BAGb;IZ9tBtB,MAAA,EAAA,MAAA;IAuDC,IAAA,EYoqBkC,iBAAA,CAAA,QZpqBlB;EAIrB,CAAA,CAAA;EAUC,OAAA,EAAA,CAAA;IAAA,MAAA;IAAA,MAAA;IAAA,SAAA;EAoBL,CApBK,EAAA;IAiBL,MAAA,EAAA,MAAA;IACA,MAAA,EYkpBU,MZlpBV,CAAA,MAAA,EAAA,OAAA,CAAA;IACA,SAAA,CAAA,EAAA,MAAA;EACA,CAAA,EAAA,GYkpBC,OZlpBD,CAAA;IAEM,MAAA,EAAA,MAAA;IAEE,GAAA,EY4oBQ,iBAAA,CAAA,OZ5oBR;EAtCyB,CAAA,CAAA;EAAK,YAAA,EAAA,CAAA;IAAA,KAAA;IAAA,MAAA;IAAA,OAAA;IAAA;ECjE/B,CDiE+B,EAAA;;;;IClEzB,WAAA,CAAA,EAAA,kBAAgB,GAAA,0BAAA;EACtB,CAAA,EAAA,GWwwBN,OXxwBM,mBWwwBN,OAAA,CXxwBM;EACK,YAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GW8wBsB,OX9wBtB,CWuwBX,iBAAA,CAOiC,OAAA,CX9wBtB;EACF,mBAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GWkxB4B,OXlxB5B,CWkxB4B,aXlxB5B,CAAA;EACkB,iBAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GWmxBK,OXnxBL,CWmxBK,aXnxBL,CAAA;EAAlB,aAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,GWoxBgB,OXpxBhB,CWoxBgB,aXpxBhB,CAAA;EACH,cAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EACE,kBAAA,EAAA,GAAA,GAAA,IAAA;EACM,QAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,OAAA;EACP,oBAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,GAAA,OAAA;EACO,2BAAA,EAAA,GAAA,GAAA,MAAA;EACsB,iCAAA,EAAA,GAAA,GAAA;IAAnB,MAAA,EAAA,MAAA;IAAkB,IAAA,EAAA,MAAA;;;2BW8wBV;EVlyBlB,mBAAc,EAAA,GAAA,mBACL;;;;ICOT,MAAA,gBAAU;IAMV,QAAA,qBACY;;;;ECjBP,iBAAY,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,EAAA,GQuzBS,ORvzBT,CAAA,IAAA,CAAA;;;;ICAZ,uBAAmB,EAAA,MAAA;;;;ECAnB,qBAAA,EAAoB,CAAA,OAAA,EMw0BA,uBNx0BA,CMw0BwB,WNx0BxB,CAAA,EAAA,GAAA;;;;ECIpB,CAAA;wCKy0BF,wBAAwB,iBAAY;;;IJpzBvC,QAAS,EAAA,MAAA,EAAA;IACN,YAAA,uBAAA;EAMS,CAAA,CAAA;EACJ,eAAA,EAAA,GAAA,GI2WgB,OJ3WhB,CI2WwB,qBJ3WxB,CAAA;CAAQ;;;;;;ACkC5B;;;;;;;;;;;;;;;;;;;;ACrDA;;;;ACPY,KC63BA,gBAAA,GAAmB,UD73BD,CAAA,OC63BmB,sBD73BI,CAAA;;;;;;;iBEDrC,4BAAA,CAAA,GAAgC;;;KCJpC,qBAAqB;;SAGpB;;;SAIA;;ErCTI,IAAA,EAAA,WAAa;;;;;;;UsCKb;;QAET;;EtCPS,QAAA,EAAA,MAAa;;;SsCYrB;ErCJQ,MAAA,EqCKP,YrCLO,GAAiB,IAAA;EA4DrB,KAAA,EAAA,MAAA,GAAW,IAAA;;;;UsCjEP,4BAA4B;;;;cAI/B;;AvCPd;;;;ACQA;AA4DA;EAWsB,eAAA,CAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,GAAA,IAAA,EAAA,GAAA,IAAA;EAgCT;;;;;6BsC/EgB;;ArC5B7B;AAKA;AAMA;;uBqCwBuB;;ApChCvB;AAOA;EAiBiB,OAAA,CAAA,EAAA,CAAA,KAAA,EoCaG,KpCbe,EAAA,GAAA,IAAA;EAyBlB;;;EAiBP,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAGe;;;EAUR,aAAA,CAAA,EAAA,CAAA,KAAA,EoChCS,KpCgCW,EAAA,YAAA,EAAA,MAAA,EAAA,GAAA,OAAA;AAsBrC;;;UqCzGiB;;;;cAIH;;AxCPd;;;;ACQA;AA4DA;EAWsB,cAAA,CAAA,EAAA,CAAA,IAAA,EuC9DI,cvC8DJ,CuC9DmB,WvC8DnB,CAAA,EAAA,GAAA,IAAA;EAgCT;;;EAmCW,aAAA,CAAA,EAAA,CAAA,IAAA,EuC5HC,cvC4HD,CuC5HgB,WvC4HhB,CAAA,EAAA,GAAA,IAAA;;;;EC9IP,WAAA,CAAA,EAAA,CAAA,IAAA,EsCuBM,ctCtBJ,CsCsBmB,WtCtBnB,CAAA,EAAe,KAAA,EsCsByB,KtCtBzB,EAAA,GAAA,IAAA;EAIjB;AAMjB;;uBsCiBuB,eAAe;;ArCzBtC;AAOA;EAiBiB,aAAA,CAAA,EAAA,CAAA,KAAkB,EqCMT,KrCNS,EAAA,YAWxB,EAAA,MAAA,EAAA,GAAA,OAAe;AAc1B;;;UsCtDiB;SACR,eAAe;;;;;;;;UCDP,aAAA;;;;aAIJ;;;A1CNb;;;;ACQA;EA4Da,UAAA,CAAA,EAAA,MAAW;EAWF;;;EAmEX,UAAA,CAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,GAAA,IAAA,EAAA,GAAA,IAAA;EAAa;;;;EC9IP;AAKjB;AAMA;uBwCwBuB;;;AvChCvB;EAOiB,OAAA,CAAA,EAAA,CAAA,KAAW,EuC8BR,KvC9BQ,EAAA,GAAA,IAAA;EAiBX;AAyBjB;;EAcU,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAGA;;;EAGc,aAAA,CAAA,EAAA,CAAA,KAAA,EuCtBE,KvCsBF,EAAA,YAAA,EAAA,MAAA,EAAA,GAAA,OAAA;AAUxB;;;;;;;;;;AHtFA;;;;ACQA;AA4DA;;;;;;;;;AChEA;AAKA;AAMA;;;;ACRA;AAOA;AAiBA;AAyBA;;;;;;;AA8BA;AAsBA;AAoBA;AAoBA;AAoBiB,KwC7HL,YxC6HK,CAAA,UwC7HkB,YxC6HQ,CAAA,GAAA;EAEjC;EAqBG,IAAA,EAAA,SAAA;EAvBsC;EAAiB,KAAA,EwCxHvD,OxCwHuD;AA8BpE,CAAA,GAAiB;EAIgB;EAA6B,IAAA,EAAA,OAAA;EAAR;EAKtC,KAAA,EwCzJH,KxCyJG;CAKQ,GAAA;EAUb;EAK0B,IAAA,EAAA,WAAA;CAAO"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/buffered-chunk.ts","../src/chunk-buffer.ts","../src/services/abort-controller-service.ts","../src/services/http-client.ts","../src/logger.ts","../src/services/platform-service.ts","../src/auth/types.ts","../src/auth/direct-auth.ts","../src/auth/no-auth.ts","../src/auth/uploadista-cloud-auth.ts","../src/auth/auth-http-client.ts","../src/network-monitor.ts","../src/services/checksum-service.ts","../src/services/file-reader-service.ts","../src/services/fingerprint-service.ts","../src/services/id-generation-service.ts","../src/services/websocket-service.ts","../src/smart-chunker.ts","../src/services/storage-service.ts","../src/types/previous-upload.ts","../src/storage/client-storage.ts","../src/types/flow-upload-config.ts","../src/client/uploadista-api.ts","../src/error.ts","../src/services/service-container.ts","../src/types/upload-response.ts","../src/upload/chunk-upload.ts","../src/types/chunk-metrics.ts","../src/types/performance-insights.ts","../src/types/upload-session-metrics.ts","../src/upload/upload-metrics.ts","../src/upload/single-upload.ts","../src/upload/upload-manager.ts","../src/upload/upload-strategy.ts","../src/client/uploadista-websocket-manager.ts","../src/client/create-uploadista-client.ts","../src/storage/in-memory-storage-service.ts","../src/types/flow-result.ts","../src/types/flow-upload-item.ts","../src/types/flow-upload-options.ts","../src/types/multi-flow-upload-options.ts","../src/types/multi-flow-upload-state.ts","../src/types/upload-options.ts","../src/types/upload-result.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{Base64 as e}from"js-base64";import{UploadStrategyNegotiator as t}from"@uploadista/core/upload";import{webSocketMessageSchema as n}from"@uploadista/core/types";import r from"zod";var i=class{constructor(e){this.buffer=[],this.currentSize=0,this.lastAddTime=0,this.config={minThreshold:e.minThreshold,maxBufferSize:e.maxBufferSize??e.minThreshold*2,timeoutMs:e.timeoutMs??3e4}}add(e){return this.buffer.push(e),this.currentSize+=e.length,this.lastAddTime=Date.now(),this.shouldFlush()?this.flush():null}flush(){if(this.buffer.length===0)return null;let e=new Uint8Array(this.currentSize),t=0;for(let n of this.buffer)e.set(n,t),t+=n.length;let n={data:e,size:this.currentSize,timestamp:this.lastAddTime};return this.reset(),n}shouldFlush(){if(this.currentSize>=this.config.minThreshold||this.currentSize>=this.config.maxBufferSize)return!0;let e=Date.now()-this.lastAddTime;return this.buffer.length>0&&e>this.config.timeoutMs}getBufferInfo(){return{size:this.currentSize,chunkCount:this.buffer.length,isReadyToFlush:this.shouldFlush(),timeSinceLastAdd:Date.now()-this.lastAddTime}}hasPendingData(){return this.buffer.length>0}reset(){this.buffer=[],this.currentSize=0,this.lastAddTime=0}getMinThreshold(){return this.config.minThreshold}},a=class{constructor(e,t){this.httpClient=e,this.authManager=t}async request(e,t={}){try{let n=await this.attachAuthCredentials(t.headers||{},e);return await this.httpClient.request(e,{...t,headers:n,credentials:this.authManager.getType()===`no-auth`||this.authManager.getType()===`saas`?`omit`:t.credentials??`include`})}catch(e){throw e instanceof Error&&e.message.includes(`auth`),e}}async attachAuthCredentials(e,t){if(`attachCredentials`in this.authManager)return await this.authManager.attachCredentials(e);if(`attachToken`in this.authManager){let n=this.extractJobIdFromUrl(t);return await this.authManager.attachToken(e,n)}return e}extractJobIdFromUrl(e){let t=e.match(/\/api\/upload\/([^/?]+)/);if(t)return t[1];let n=e.match(/\/api\/flow\/([^/?]+)/);if(n)return n[1];let r=e.match(/\/api\/jobs\/([^/?]+)/);if(r)return r[1]}getMetrics(){return this.httpClient.getMetrics()}getDetailedMetrics(){return this.httpClient.getDetailedMetrics()}reset(){this.httpClient.reset()}async close(){await this.httpClient.close()}async warmupConnections(e){await this.httpClient.warmupConnections(e)}getAuthManager(){return this.authManager}},o=class{constructor(e){this.type=e}getType(){return this.type}},s=class extends o{constructor(e,t,n){super(`direct`),this.config=e,this.platformService=t,this.logger=n}async attachCredentials(e={}){try{if(!this.config.getCredentials)return e;let t=await Promise.resolve(this.config.getCredentials());if(!t||typeof t!=`object`)throw Error(`getCredentials() must return an object with headers and/or cookies`);let n={...e};return t.headers&&(this.validateHeaders(t.headers),Object.assign(n,t.headers)),t.cookies&&this.attachCookies(n,t.cookies),n}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to attach auth credentials: ${t}`)}}validateHeaders(e){if(typeof e!=`object`||!e)throw Error(`headers must be an object`);for(let[t,n]of Object.entries(e))if(typeof t!=`string`||typeof n!=`string`)throw Error(`Invalid header: key and value must be strings (got ${t}: ${typeof n})`)}attachCookies(e,t){if(this.platformService.isBrowser())this.logger.warn(`DirectAuth: Cookies are automatically handled by the browser. Ensure your server has proper CORS configuration with credentials support.`);else{let n=Object.entries(t).map(([e,t])=>`${e}=${t}`).join(`; `);n&&(e.Cookie=n)}}},c=class extends o{constructor(){super(`no-auth`)}async attachCredentials(e={}){return e}clearToken(e){}clearAllTokens(){}},l=class extends o{constructor(e,t){super(`saas`),this.config=e,this.httpClient=t,this.tokenCache=new Map,this.globalToken=null}async fetchToken(){try{let e=await this.httpClient.request(`${this.config.authServerUrl}/${this.config.clientId}`,{method:`GET`,headers:{"Content-Type":`application/json`}});if(!e.ok){let t=await e.text(),n=`Auth server returned ${e.status}`;try{let e=JSON.parse(t);n=e.error||e.message||n}catch{n=t||e.statusText||n}throw Error(n)}let t=await e.json();if(!t.token||typeof t.token!=`string`)throw Error(`Auth server response missing 'token' field or token is not a string`);return t}catch(e){throw e instanceof Error?Error(`Failed to fetch auth token: ${e.message}`):Error(`Failed to fetch auth token: ${String(e)}`)}}async getOrFetchToken(e){if(e){let t=this.tokenCache.get(e);if(t&&!this.isTokenExpired(t))return t.token}if(!e&&this.globalToken&&!this.isTokenExpired(this.globalToken))return this.globalToken.token;let t=await this.fetchToken(),n=t.expiresIn?Date.now()+t.expiresIn*1e3:void 0,r={token:t.token,expiresAt:n};return e?this.tokenCache.set(e,r):this.globalToken=r,t.token}isTokenExpired(e){return e.expiresAt?Date.now()>e.expiresAt-60*1e3:!1}async attachToken(e={},t){try{let n=await this.getOrFetchToken(t);return{...e,Authorization:`Bearer ${n}`}}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to attach auth token: ${t}`)}}clearToken(e){this.tokenCache.delete(e)}clearAllTokens(){this.tokenCache.clear(),this.globalToken=null}getCacheStats(){return{cachedJobCount:this.tokenCache.size,hasGlobalToken:this.globalToken!==null}}};const u=()=>{};function d(e,t=u){return{log:n=>{e&&t(n)},warn:n=>{e&&t(n)},error:n=>{e&&t(n)}}}var f=class{constructor(e){this.capabilities=e}getCapabilities(){return this.capabilities}validateUploadStrategy(e){switch(e){case`parallel`:return this.capabilities.supportsParallelUploads;case`single`:return!0;default:return!1}}};const p={supportsParallelUploads:!0,supportsConcatenation:!0,supportsDeferredLength:!0,supportsResumableUploads:!0,supportsTransactionalUploads:!1,maxConcurrentUploads:6,minChunkSize:64*1024,maxChunkSize:100*1024*1024,maxParts:1e4,optimalChunkSize:8*1024*1024,requiresOrderedChunks:!1};var m=class{constructor(e={}){this.samples=[],this.config={maxSamples:e.maxSamples??100,smoothingFactor:e.smoothingFactor??.1,minSamplesForCondition:e.minSamplesForCondition??5,slowThreshold:e.slowThreshold??50*1024,fastThreshold:e.fastThreshold??5*1024*1024,unstableThreshold:e.unstableThreshold??.5},this._currentMetrics=this.createEmptyMetrics()}addSample(e){this.samples.push(e),this.samples.length>this.config.maxSamples&&(this.samples=this.samples.slice(-this.config.maxSamples)),this.updateMetrics()}recordUpload(e,t,n,r){this.addSample({size:e,duration:t,success:n,timestamp:Date.now(),latency:r})}getCurrentMetrics(){return{...this._currentMetrics}}getNetworkCondition(){if(this.samples.length<this.config.minSamplesForCondition)return{type:`unknown`,confidence:0};let e=this.getRecentSuccessfulSamples();if(e.length<this.config.minSamplesForCondition)return{type:`unknown`,confidence:.3};let t=e.map(e=>e.size/(e.duration/1e3)),n=t.reduce((e,t)=>e+t,0)/t.length,r=t.reduce((e,t)=>e+(t-n)**2,0)/t.length,i=Math.sqrt(r)/n,a=Math.min(1,this.samples.length/(this.config.minSamplesForCondition*2));return i>this.config.unstableThreshold?{type:`unstable`,confidence:a}:n<this.config.slowThreshold?{type:`slow`,confidence:a}:n>this.config.fastThreshold?{type:`fast`,confidence:a}:{type:`slow`,confidence:a*.7}}getOptimalThroughput(){let e=this.getRecentSuccessfulSamples(10);if(e.length===0)return 0;let t=0,n=0;return e.forEach((e,r)=>{let i=r+1,a=e.size/(e.duration/1e3);n+=a*i,t+=i}),t>0?n/t:0}reset(){this.samples=[],this._currentMetrics=this.createEmptyMetrics()}getRecentSuccessfulSamples(e){let t=this.samples.filter(e=>e.success);return e?t.slice(-e):t}updateMetrics(){let e=this.samples.filter(e=>e.success),t=this.samples.length,n=e.length;if(t===0){this._currentMetrics=this.createEmptyMetrics();return}let r=e.reduce((e,t)=>e+t.size,0),i=e.reduce((e,t)=>e+t.duration,0),a=i>0?r/(i/1e3):0,o=n/t,s=1-o,c=this.samples.filter(e=>e.latency!==void 0);this._currentMetrics={averageSpeed:a,latency:c.length>0?c.reduce((e,t)=>e+(t.latency||0),0)/c.length:0,successRate:o,errorRate:s,totalRequests:t,totalBytes:r,totalTime:i}}createEmptyMetrics(){return{averageSpeed:0,latency:0,successRate:0,errorRate:0,totalRequests:0,totalBytes:0,totalTime:0}}};const h={conservative:{name:`conservative`,minChunkSize:64*1024,maxChunkSize:2*1024*1024,initialChunkSize:256*1024,adaptationRate:.1},balanced:{name:`balanced`,minChunkSize:128*1024,maxChunkSize:8*1024*1024,initialChunkSize:512*1024,adaptationRate:.2},aggressive:{name:`aggressive`,minChunkSize:256*1024,maxChunkSize:32*1024*1024,initialChunkSize:1024*1024,adaptationRate:.3}},g={conservative:{name:`s3-conservative`,minChunkSize:5*1024*1024,maxChunkSize:64*1024*1024,initialChunkSize:8*1024*1024,adaptationRate:.1},balanced:{name:`s3-balanced`,minChunkSize:5*1024*1024,maxChunkSize:128*1024*1024,initialChunkSize:16*1024*1024,adaptationRate:.2},aggressive:{name:`s3-aggressive`,minChunkSize:5*1024*1024,maxChunkSize:256*1024*1024,initialChunkSize:32*1024*1024,adaptationRate:.3}};var _=class{constructor(e,t={}){this.lastDecision=null,this.consecutiveFailures=0,this.consecutiveSuccesses=0,this.connectionMetrics=null,this.networkMonitor=e,this.config={enabled:t.enabled??!0,fallbackChunkSize:t.fallbackChunkSize??1024*1024,minChunkSize:t.minChunkSize??64*1024,maxChunkSize:t.maxChunkSize??32*1024*1024,initialChunkSize:t.initialChunkSize??512*1024,targetUtilization:t.targetUtilization??.85,adaptationRate:t.adaptationRate??.2,conservativeMode:t.conservativeMode??!1,connectionPoolingAware:t.connectionPoolingAware??!0,datastoreConstraints:t.datastoreConstraints},this.currentChunkSize=this.getEffectiveInitialChunkSize()}getEffectiveInitialChunkSize(){return this.config.datastoreConstraints?Math.max(this.config.initialChunkSize,this.config.datastoreConstraints.optimalChunkSize):this.config.initialChunkSize}applyDatastoreConstraints(e){return this.config.datastoreConstraints?Math.max(this.config.datastoreConstraints.minChunkSize,Math.min(this.config.datastoreConstraints.maxChunkSize,e)):e}getNextChunkSize(e){if(!this.config.enabled)return{size:this.config.fallbackChunkSize,strategy:`fixed`,reason:`Smart chunking disabled`,networkCondition:{type:`unknown`,confidence:0}};let t=this.networkMonitor.getNetworkCondition(),n=this.currentChunkSize,r=`adaptive`,i=``;if(t.type===`unknown`)n=this.config.initialChunkSize,r=`initial`,i=`Insufficient network data`;else{let e=this.selectStrategy(t);n=this.calculateOptimalChunkSize(t,e),r=e.name,i=`Network condition: ${t.type} (confidence: ${Math.round(t.confidence*100)}%)`}return e&&e<n&&(n=e,i+=`, limited by remaining bytes (${e})`),n=this.applyDatastoreConstraints(n),n=Math.max(this.config.minChunkSize,Math.min(this.config.maxChunkSize,n)),this.currentChunkSize=n,this.lastDecision={size:n,strategy:r,reason:i,networkCondition:t},this.lastDecision}recordChunkResult(e,t,n){this.networkMonitor.recordUpload(e,t,n),n?(this.consecutiveSuccesses++,this.consecutiveFailures=0):(this.consecutiveFailures++,this.consecutiveSuccesses=0),this.adaptChunkSize(n,t,e)}getCurrentChunkSize(){return this.currentChunkSize}getLastDecision(){return this.lastDecision}reset(){this.currentChunkSize=this.config.initialChunkSize,this.consecutiveFailures=0,this.consecutiveSuccesses=0,this.lastDecision=null,this.connectionMetrics=null}updateConnectionMetrics(e){this.connectionMetrics=e}getConnectionPoolingInsights(){if(!this.connectionMetrics||!this.config.connectionPoolingAware)return{isOptimized:!1,reuseRate:0,recommendedMinChunkSize:this.config.minChunkSize,connectionOverhead:0};let e=this.connectionMetrics.reuseRate,t=this.connectionMetrics.averageConnectionTime,n=(1-e)*t,r=Math.max(this.config.minChunkSize,Math.floor(n*1e4));return{isOptimized:e>.7,reuseRate:e,recommendedMinChunkSize:r,connectionOverhead:n}}selectStrategy(e){let t={name:`fallback`,minChunkSize:128*1024,maxChunkSize:4*1024*1024,initialChunkSize:512*1024,adaptationRate:.2},n=this.config.datastoreConstraints?.minChunkSize===5*1024*1024?g:h;if(this.config.conservativeMode)return n.conservative??t;let r;switch(e.type){case`fast`:r=e.confidence>.7?n.aggressive??t:n.balanced??t;break;case`slow`:r=n.conservative??t;break;case`unstable`:r=n.conservative??t;break;default:r=n.balanced??t}return this.config.connectionPoolingAware&&this.connectionMetrics?this.optimizeStrategyForConnectionPooling(r):r}optimizeStrategyForConnectionPooling(e){if(!this.connectionMetrics)return e;let t=this.getConnectionPoolingInsights(),n=t.reuseRate;return n>.8?{...e,name:`${e.name}-pooled-aggressive`,minChunkSize:Math.max(e.minChunkSize*.5,32*1024),adaptationRate:Math.min(e.adaptationRate*1.3,.5)}:n>.5?{...e,name:`${e.name}-pooled-moderate`,minChunkSize:Math.max(e.minChunkSize*.75,64*1024),adaptationRate:Math.min(e.adaptationRate*1.1,.4)}:{...e,name:`${e.name}-pooled-conservative`,minChunkSize:Math.max(e.minChunkSize*1.5,t.recommendedMinChunkSize),adaptationRate:e.adaptationRate*.8}}calculateOptimalChunkSize(e,t){let n=this.currentChunkSize,r=this.networkMonitor.getOptimalThroughput();if(r>0){let i=r*this.getTargetChunkDuration(e)*this.config.targetUtilization,a=t.adaptationRate;n=this.currentChunkSize*(1-a)+i*a}if(n=Math.max(t.minChunkSize,Math.min(t.maxChunkSize,n)),this.consecutiveFailures>0){let e=Math.min(.5,this.consecutiveFailures*.2);n*=1-e}else if(this.consecutiveSuccesses>2){let e=Math.min(.3,this.consecutiveSuccesses*.05);n*=1+e}return Math.round(n)}getTargetChunkDuration(e){switch(e.type){case`fast`:return 3;case`slow`:return 5;case`unstable`:return 2;default:return 3}}adaptChunkSize(e,t,n){if(!e){this.currentChunkSize=Math.max(this.config.minChunkSize,this.currentChunkSize*.8);return}let r=n/(t/1e3),i=this.networkMonitor.getCurrentMetrics();if(i.averageSpeed>0){let e=r/i.averageSpeed;e<this.config.targetUtilization*.8?this.currentChunkSize=Math.min(this.config.maxChunkSize,this.currentChunkSize*1.1):e>this.config.targetUtilization*1.2&&(this.currentChunkSize=Math.max(this.config.minChunkSize,this.currentChunkSize*.95))}}},v=class extends Error{constructor({name:e,message:t,cause:n,status:r}){super(),this.name=e,this.cause=n,this.message=t,this.status=r}isNetworkError(){return this.name===`NETWORK_ERROR`||this.name===`NETWORK_UNEXPECTED_RESPONSE`}};function y(t){return Object.entries(t).map(([t,n])=>`${t} ${e.encode(String(n))}`).join(`,`)}function b(e,t){return e>=t&&e<t+100}function x(e,{uploadLengthDeferred:t,uploadSize:n}){if(t)return null;if(n!=null)return n;let r=e;if(r==null)throw new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:"cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option"});return r}function S(e,t,n){if(t<=1)return[{startByte:0,endByte:e,segmentIndex:0}];let r=[];if(n){let t=0,i=0;for(;t<e;){let a=Math.min(t+n,e);r.push({startByte:t,endByte:a,segmentIndex:i}),t=a,i++}}else{let n=Math.ceil(e/t);for(let i=0;i<t;i++){let t=i*n,a=Math.min(t+n,e);t<e&&r.push({startByte:t,endByte:a,segmentIndex:i})}}return r}async function C({uploadId:e,source:t,offset:n,uploadLengthDeferred:r,abortController:i,onProgress:a,smartChunker:o,uploadistaApi:s,logger:c}){let l=n??0,u=t.size?t.size-l:void 0,d=o.getNextChunkSize(u),f=l+d.size;t.size&&(f===1/0||f>t.size)&&!r&&(f=t.size);let{value:p,size:m,done:h}=await t.slice(l,f),g=m??0,_=Date.now();r&&h&&(t.size=n+g);let y=n+g;if(!r&&h&&y!==t.size)throw new v({name:`WRONG_UPLOAD_SIZE`,message:`upload was configured with a size of ${m} bytes, but the source is done after ${y} bytes`});let b=await s.uploadChunk(e,p,{onProgress:(t,n)=>{a?.(e,t,n)},abortController:i}),x=Date.now()-_,S=b.status>=200&&b.status<300;return o.recordChunkResult(g,x,S),c.log(`Chunk upload ${S?`succeeded`:`failed`}: ${g} bytes in ${x}ms (${d.strategy} strategy)`),b}function w(e,t,n,r,i){return r==null||n>=r.length||!t.isNetworkError()?!1:i?i(t,n):T(e,t)}function T(e,t){let n=t.status??0;return(!b(n,400)||n===409||n===423)&&e.isOnline()}async function E({source:e,flowConfig:t,uploadistaApi:n,logger:r,platformService:i,openWebSocket:a,closeWebSocket:o,...s}){let{flowId:c,storageId:l}=t,{flow:u}=await n.getFlow(c),d=u.nodes.find(e=>e.type===`input`);if(!d){let e=new v({name:`FLOW_INCOMPATIBLE`,message:`Flow ${c} does not have a streaming input node. The flow must contain a node with type "input" to support flow uploads.`});throw s.onError?.(e),e}let f=d.id,p={originalName:e.name??`unknown`,mimeType:e.type??`application/octet-stream`,size:e.size??0,...t.metadata};r.log(`Starting flow upload for flow ${c}, node ${f}`);let{status:m,job:h}=await n.runFlow(c,l,{[f]:{operation:`init`,storageId:l,metadata:p}}),g=h.id;if(!b(m,200)||!g){let e=new v({name:`FLOW_INIT_FAILED`,message:`Failed to initialize flow upload`});throw s.onError?.(e),e}s.onJobStart?.(g),r.log(`Flow job ${g} created, opening WebSocket`),a(g),r.log(`Waiting for upload ID from node`);let _=0,y=await n.getJobStatus(g);for(;y.status!==`paused`&&_<60;)await new Promise(e=>i.setTimeout(e,500)),y=await n.getJobStatus(g),_++;if(y.status!==`paused`){let e=new v({name:`FLOW_TIMEOUT`,message:`Flow did not pause after init (status: ${y.status})`});throw s.onError?.(e),e}let x=y.tasks.find(e=>e.nodeId===f)?.result;if(!x?.id){let e=new v({name:`FLOW_NO_UPLOAD_ID`,message:`Flow did not return upload ID after init`});throw s.onError?.(e),e}return r.log(`Upload ID received: ${x.id}`),s.onStart?.({uploadId:x.id,size:e.size??null}),{jobId:g,uploadFile:x,inputNodeId:f}}async function D({jobId:e,uploadFile:t,inputNodeId:n,offset:r,source:i,retryAttempt:a=0,abortController:o,retryDelays:s,smartChunker:c,uploadistaApi:l,logger:u,smartChunking:d,metrics:f,platformService:p,onRetry:m,...h}){let g=r,_=r;try{let g=i.size?i.size-r:void 0,y=c.getNextChunkSize(g).size,b=Math.min(r+y,i.size??0),x=await i.slice(r,b);if(!x||!x.value)throw new v({name:`NETWORK_ERROR`,message:`Failed to read chunk from file`});let S=x.value,C=Date.now(),w=await l.uploadChunk(t.id,S,{abortController:o}),T=Date.now()-C;if(!w.upload)throw new v({name:`UPLOAD_CHUNK_FAILED`,message:`Upload chunk response missing upload data`});if(_=w.upload.offset,h.onProgress?.(t.id,_,i.size??0),h.onChunkComplete?.(_-r,r,i.size??0),d?.enabled!==!1){let e=Math.floor(r/y);f.recordChunk({chunkIndex:e,size:y,duration:T,speed:y/(T/1e3),success:!0,retryCount:a,networkCondition:c.getLastDecision()?.networkCondition?.type,chunkingStrategy:c.getLastDecision()?.strategy});let t=l.getConnectionMetrics();c.updateConnectionMetrics(t)}if(_>=(i.size??0)){if(i&&i.close(),d?.enabled!==!1){let e=f.endSession();e&&u.log(`Flow upload completed: ${e.totalSize} bytes in ${e.totalDuration}ms, avg speed: ${Math.round(e.averageSpeed/1024)}KB/s`)}u.log(`Finalizing flow upload for job ${e}`);try{await l.continueFlow(e,n,{operation:`finalize`,uploadId:t.id},{contentType:`application/json`})}catch(t){let n=new v({name:`FLOW_FINALIZE_FAILED`,message:`Failed to finalize flow upload for job ${e}`,cause:t});throw h.onError?.(n),n}return}await D({jobId:e,uploadFile:t,inputNodeId:n,offset:_,source:i,platformService:p,retryDelays:s,smartChunker:c,uploadistaApi:l,logger:u,smartChunking:d,metrics:f,onRetry:m,abortController:o,...h})}catch(y){if(s!=null)if(r!=null&&_>g&&(a=0),w(p,y instanceof v?y:new v({name:`NETWORK_ERROR`,message:`Network error during flow upload`,cause:y}),a,s,h.onShouldRetry)){let _=s[a];g=r;let v=p.setTimeout(async()=>{await D({jobId:e,uploadFile:t,inputNodeId:n,offset:r,source:i,retryAttempt:a+1,retryDelays:s,smartChunker:c,uploadistaApi:l,logger:u,smartChunking:d,metrics:f,platformService:p,onRetry:m,abortController:o,...h})},_);m?.(v)}else throw new v({name:`UPLOAD_CHUNK_FAILED`,message:`Failed to upload chunk for job ${e} at offset ${r}`,cause:y})}}async function O(e,t){return e.findUploadsByFingerprint(t)}function ee(e){return{uploadId:e.uploadId??null,parallelUploadUrls:e.parallelUploadUrls,clientStorageKey:e.clientStorageKey}}async function k({clientStorage:e,fingerprint:t,size:n,metadata:r,clientStorageKey:i,storeFingerprintForResuming:a,generateId:o}){if(!a||!t||i!=null)return;let s={size:n,metadata:r,creationTime:new Date().toString(),clientStorageKey:t};return await e.addUpload(t,s,{generateId:o})}async function A(e,t){t&&await e.removeUpload(t)}async function j({uploadId:e,offset:t,source:n,uploadLengthDeferred:r,retryAttempt:i=0,abortController:a,retryDelays:o,smartChunker:s,uploadistaApi:c,logger:l,smartChunking:u,metrics:d,platformService:f,onRetry:p,...m}){let h=t,g=t;try{let h=await C({uploadId:e,source:n,offset:t,uploadLengthDeferred:r,onProgress:m.onProgress,abortController:a,smartChunker:s,uploadistaApi:c,logger:l});if(!b(h.status,200)||h.upload==null)throw new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while uploading chunk`});if(g=h.upload.offset,m.onProgress?.(e,g,h.upload.size??0),m.onChunkComplete?.(g-t,t,h.upload?.size??0),u?.enabled!==!1){let e=Math.floor(t/(g-t||1)),n=g-t,r=Date.now()-(Date.now()-100),a=s.getLastDecision();d.recordChunk({chunkIndex:e,size:n,duration:r,speed:n/(r/1e3),success:!0,retryCount:i,networkCondition:a?.networkCondition?.type,chunkingStrategy:a?.strategy});let o=c.getConnectionMetrics();s.updateConnectionMetrics(o)}if(g>=(n.size??0)){if(n&&n.close(),u?.enabled!==!1){let e=d.endSession();e&&l.log(`Upload completed: ${e.totalSize} bytes in ${e.totalDuration}ms, avg speed: ${Math.round(e.averageSpeed/1024)}KB/s`)}m.onSuccess?.(h.upload);return}await j({uploadId:e,offset:g,source:n,uploadLengthDeferred:r,retryDelays:o,smartChunker:s,platformService:f,uploadistaApi:c,logger:l,smartChunking:u,metrics:d,onRetry:p,abortController:a,...m})}catch(_){if(o!=null)if(t!=null&&g>h&&(i=0),w(f,_ instanceof v?_:new v({name:`NETWORK_ERROR`,message:`Network error`,cause:_}),i,o,m.onShouldRetry)){let g=o[i];h=t;let _=f.setTimeout(async()=>{await j({uploadId:e,offset:t,source:n,retryAttempt:i+1,uploadLengthDeferred:r,retryDelays:o,smartChunker:s,platformService:f,uploadistaApi:c,logger:l,smartChunking:u,metrics:d,onRetry:p,abortController:a,...m})},g);p?.(_)}else throw new v({name:`UPLOAD_CHUNK_FAILED`,message:`failed to upload chunk for ${e} at offset ${t}`,cause:_})}}async function M({fingerprint:e,storageId:t,source:n,uploadLengthDeferred:r,metadata:i,uploadistaApi:a,logger:o,checksumService:s,clientStorage:c,generateId:l,storeFingerprintForResuming:u,openWebSocket:d,closeWebSocket:f,computeChecksum:p=!0,checksumAlgorithm:m=`sha256`,platformService:h,...g}){if(!r&&n.size==null){let e=new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:`expected size to be set`});throw g.onError?.(e),e}let _;if(p&&h.isFileLike(n.input))try{o.log(`Computing file checksum...`),_=await s.computeChecksum(new Uint8Array(n.input)),o.log(`Checksum computed: ${_}`)}catch(e){o.log(`Warning: Failed to compute checksum: ${e instanceof Error?e.message:`Unknown error`}`)}let x={uploadLengthDeferred:r,storageId:t,size:n.size??0,metadata:i?y(i):void 0,fileName:n.name??void 0,type:n.type??``,lastModified:n.lastModified??void 0,checksum:_,checksumAlgorithm:_?m:void 0},{upload:S,status:C}=await a.createUpload(x);if(!b(C,200)||S==null){let e=new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while creating upload`});throw g.onError?.(e),e}if(o.log(`Created upload ${S.id}`),d(S.id),S.size===0){g.onSuccess?.(S),n&&n.close(),f(S.id);return}let w=await k({clientStorage:c,fingerprint:e,size:S.size??0,metadata:S.metadata??{},clientStorageKey:null,storeFingerprintForResuming:u,generateId:l});return g.onStart?.({uploadId:S.id,size:S.size??null}),{uploadIdStorageKey:w,uploadId:S.id,offset:S.offset}}async function N({uploadId:e,storageId:t,uploadIdStorageKey:n,fingerprint:r,source:i,uploadLengthDeferred:a,uploadistaApi:o,logger:s,platformService:c,checksumService:l,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,...m}){let h=await o.getUpload(e),g=h.status;if(!b(g,200)){if(g===423){let e=new v({name:`UPLOAD_LOCKED`,message:`upload is currently locked; retry later`});throw m.onError?.(e),e}return b(g,400)&&await A(u,n),await M({platformService:c,fingerprint:r,storageId:t,source:i,uploadLengthDeferred:a,metadata:{},uploadistaApi:o,logger:s,checksumService:l,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,closeWebSocket:()=>{},...m})}let _=h.upload;if(_==null){let e=new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while resuming upload`});throw m.onError?.(e),e}if(await k({clientStorage:u,fingerprint:r,size:_.size??0,metadata:_.metadata??{},clientStorageKey:n,storeFingerprintForResuming:f,generateId:d}),_.offset!==_.size)return p(_.id),{uploadId:e,uploadIdStorageKey:n,offset:_.offset}}async function P({source:e,uploadId:t,uploadIdStorageKey:n,storageId:r,fingerprint:i,platformService:a,uploadLengthDeferred:o,uploadistaApi:s,checksumService:c,logger:l,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,closeWebSocket:m,...h}){return t!=null&&n!=null?(l.log(`Resuming upload from previous id: ${t}`),await N({uploadId:t,uploadIdStorageKey:n,storageId:r,fingerprint:i,source:e,checksumService:c,uploadLengthDeferred:o,uploadistaApi:s,logger:l,platformService:a,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,...h})):(l.log(`Creating a new upload`),await M({fingerprint:i,storageId:r,source:e,uploadLengthDeferred:o,metadata:{},uploadistaApi:s,logger:l,checksumService:c,platformService:a,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,closeWebSocket:m,...h}))}async function F({source:e,storageId:t,fingerprint:n,uploadLengthDeferred:r,parallelUploads:i,parallelChunkSize:a,retryDelays:o,smartChunker:s,uploadistaApi:c,logger:l,checksumService:u,smartChunking:d,metrics:f,clientStorage:p,generateId:m,storeFingerprintForResuming:h,openWebSocket:g,closeWebSocket:_,terminate:y,abortControllerFactory:b,platformService:x,...C}){if(!e.size||e.size===0){C.onError?.(new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:`Parallel upload requires a known file size`}));return}let w=S(e.size,i,a);l.log(`Starting parallel upload with ${w.length} segments`);let T={segments:[],totalProgress:0,completed:!1,failed:!1},E=new Map,D=new Map,O=()=>{let e=Array.from(D.values()).reduce((e,t)=>e+t,0),t=Array.from(E.values()).reduce((e,t)=>e+t,0);T.totalProgress=e>0?t/e:0,C.onProgress&&e>0&&C.onProgress(`parallel-upload`,t,e)};try{let i=await Promise.all(w.map(async i=>{let a={...e,size:i.endByte-i.startByte,async slice(t,n){let r=i.startByte+(t??0),a=Math.min(i.startByte+(n??i.endByte-i.startByte),i.endByte);return await e.slice(r,a)}},o=await M({fingerprint:`${n}-segment-${i.segmentIndex}`,storageId:t,source:a,uploadLengthDeferred:r,platformService:x,metadata:{parallelUpload:`true`,segmentIndex:i.segmentIndex.toString(),totalSegments:w.length.toString(),parentFingerprint:n},checksumService:u,uploadistaApi:c,logger:l,clientStorage:p,generateId:m,storeFingerprintForResuming:h,openWebSocket:g,closeWebSocket:_,onSuccess:()=>{},onError:e=>l.log(`Segment ${i.segmentIndex} creation error: ${e}`),onStart:e=>{D.set(i.segmentIndex,e.size??0),O()}});if(!o)throw new v({name:`PARALLEL_SEGMENT_CREATION_FAILED`,message:`Failed to create upload segment ${i.segmentIndex}`});return{segment:{uploadId:o.uploadId,uploadIdStorageKey:o.uploadIdStorageKey,segmentIndex:i.segmentIndex,startByte:i.startByte,endByte:i.endByte,offset:o.offset,abortController:b.create(),retryTimeout:null},source:a}}));T.segments=i.map(e=>e.segment),C.onStart?.({uploadId:`parallel-${T.segments.map(e=>e.uploadId).join(`,`)}`,size:e.size});let a=i.map(async({segment:e,source:t})=>{try{await j({uploadId:e.uploadId,offset:e.offset,source:t,uploadLengthDeferred:r,abortController:e.abortController,retryDelays:o,smartChunker:s,uploadistaApi:c,platformService:x,logger:l,smartChunking:d,metrics:f,onProgress:(t,n,r)=>{E.set(e.segmentIndex,n),r&&D.set(e.segmentIndex,r),O()},onChunkComplete:(e,t,n)=>{C.onChunkComplete&&C.onChunkComplete(e,t,n)},onSuccess:t=>{l.log(`Segment ${e.segmentIndex} completed successfully`),E.set(e.segmentIndex,D.get(e.segmentIndex)??0),O()},onShouldRetry:(t,n)=>(l.log(`Segment ${e.segmentIndex} retry attempt ${n}: ${t}`),n<(o?.length??0)),onRetry:t=>{e.retryTimeout=t},onError:t=>{throw l.log(`Segment ${e.segmentIndex} failed: ${t}`),t}})}catch(t){throw l.log(`Segment ${e.segmentIndex} upload failed: ${t}`),new v({name:`PARALLEL_SEGMENT_UPLOAD_FAILED`,message:`Segment ${e.segmentIndex} upload failed`,cause:t})}});if(await Promise.all(a),T.completed=!0,l.log(`All parallel upload segments completed successfully`),C.onSuccess){let r={id:`parallel-${T.segments.map(e=>e.uploadId).join(`,`)}`,offset:e.size,size:e.size,storage:{id:t,type:`parallel-upload`},metadata:{parallelUpload:`true`,totalSegments:w.length.toString(),fingerprint:n}};C.onSuccess(r)}for(let e of i)e.source.close?.();return{parallelState:T,abort:async()=>{await I(T,l,y,_,x)}}}catch(e){throw T.failed=!0,T.error=e,await I(T,l,y,_,x),C.onError?.(e),e}}async function I(e,t,n,r,i){t.log(`Aborting parallel upload...`);for(let a of e.segments){a.abortController.abort(),a.retryTimeout&&=(i.clearTimeout(a.retryTimeout),null);try{await n(a.uploadId)}catch(e){t.log(`Failed to terminate segment ${a.segmentIndex}: ${e}`)}r(a.uploadId)}e.completed=!1,e.failed=!0,t.log(`Parallel upload aborted`)}async function L(e,t){return new Promise(n=>e.setTimeout(n,t))}async function R(e,t,n,r,i=0){try{if((await t.deleteUpload(e)).status===204)return;throw new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while terminating upload`})}catch(a){if(!w(n,a,i,r))throw a;return await L(n,r?.[i]??0),await R(e,t,n,r,i+1)}}async function z({uploadId:e,uploadIdStorageKey:t,retryTimeout:n,shouldTerminate:r,abortController:i,uploadistaApi:a,platformService:o,retryDelays:s,clientStorage:c}){if(i.abort(),n!=null&&o.clearTimeout(n),!(!r||e==null)&&(await R(e,a,o,s),t!=null))return A(c,t)}var B=class{constructor(e={}){this.chunkHistory=[],this.currentSession={},this.sessionStartTime=0,this.config={maxChunkHistory:e.maxChunkHistory??1e3,enableDetailedMetrics:e.enableDetailedMetrics??!0,performanceThresholds:{slowSpeed:100*1024,fastSpeed:5*1024*1024,highRetryRate:.2,...e.performanceThresholds}}}startSession(e,t,n){this.sessionStartTime=Date.now(),this.currentSession={uploadId:e,totalSize:t,chunksCompleted:0,chunksTotal:Math.ceil(t/(1024*1024)),totalDuration:0,totalRetries:0,adaptiveChunkingEnabled:n,startTime:this.sessionStartTime},this.chunkHistory=[]}recordChunk(e){let t={...e,timestamp:Date.now()};this.chunkHistory.push(t),this.chunkHistory.length>this.config.maxChunkHistory&&(this.chunkHistory=this.chunkHistory.slice(-this.config.maxChunkHistory)),this.currentSession&&t.success&&(this.currentSession.chunksCompleted=(this.currentSession.chunksCompleted||0)+1,this.currentSession.totalDuration=(this.currentSession.totalDuration||0)+t.duration,this.currentSession.totalRetries=(this.currentSession.totalRetries||0)+t.retryCount)}endSession(){if(!this.currentSession.uploadId)return null;let e=Date.now(),t=e-this.sessionStartTime,n=this.chunkHistory.filter(e=>e.success);if(n.length===0)return null;let r=n.map(e=>e.speed),i=r.reduce((e,t)=>e+t,0)/r.length,a=Math.max(...r),o=Math.min(...r),s=n.length/this.chunkHistory.length,c={uploadId:this.currentSession.uploadId||``,totalSize:this.currentSession.totalSize||0,totalDuration:t,chunksCompleted:n.length,chunksTotal:this.chunkHistory.length,averageSpeed:i,peakSpeed:a,minSpeed:o,totalRetries:this.currentSession.totalRetries||0,successRate:s,adaptiveChunkingEnabled:this.currentSession.adaptiveChunkingEnabled||!1,startTime:this.currentSession.startTime||0,endTime:e};return this.currentSession={},c}getCurrentSessionMetrics(){return{...this.currentSession}}getChunkHistory(e){let t=this.chunkHistory.slice();return e?t.slice(-e):t}getPerformanceInsights(){if(this.chunkHistory.length<5)return{overallEfficiency:0,chunkingEffectiveness:0,networkStability:0,recommendations:[`Insufficient data for analysis`],optimalChunkSizeRange:{min:256*1024,max:2*1024*1024}};let e=this.chunkHistory.filter(e=>e.success),t=e.map(e=>e.speed),n=t.length>0?t.reduce((e,t)=>e+t,0)/t.length:0,r=this.calculateVariance(t),i=Math.sqrt(r)/n,a=e.length/this.chunkHistory.length,o=Math.min(1,n/this.config.performanceThresholds.fastSpeed)*.7+a*.3,s=Math.max(0,1-Math.min(1,i));return{overallEfficiency:o,chunkingEffectiveness:this.calculateChunkingEffectiveness(e),networkStability:s,recommendations:this.generateRecommendations(n,a,i),optimalChunkSizeRange:this.calculateOptimalChunkSizeRange(e)}}exportMetrics(){return{session:this.getCurrentSessionMetrics(),chunks:this.getChunkHistory(),insights:this.getPerformanceInsights()}}reset(){this.chunkHistory=[],this.currentSession={},this.sessionStartTime=0}calculateVariance(e){if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t,0)/e.length;return e.map(e=>(e-t)**2).reduce((e,t)=>e+t,0)/e.length}calculateChunkingEffectiveness(e){if(e.length<3)return .5;let t=this.groupChunksBySize(e);if(Object.keys(t).length<2)return .5;let n=Object.values(t).map(e=>{let t=e.map(e=>e.speed),n=t.reduce((e,t)=>e+t,0)/t.length,r=this.calculateVariance(t);return Math.sqrt(r)/n}),r=n.reduce((e,t)=>e+t,0)/n.length;return Math.max(0,1-Math.min(1,r))}groupChunksBySize(e){let t={};return e.forEach(e=>{let n;n=e.size<128*1024?`64KB`:e.size<256*1024?`128KB`:e.size<512*1024?`256KB`:e.size<1024*1024?`512KB`:e.size<2*1024*1024?`1MB`:e.size<4*1024*1024?`2MB`:e.size<8*1024*1024?`4MB`:`8MB+`,t[n]||(t[n]=[]);let r=t[n];r&&r.push(e)}),t}generateRecommendations(e,t,n){let r=[];return e<this.config.performanceThresholds.slowSpeed&&r.push(`Consider using smaller chunk sizes for better performance on slow connections`),e>this.config.performanceThresholds.fastSpeed&&r.push(`Network is fast - larger chunk sizes may improve efficiency`),t<.9&&r.push(`High failure rate detected - consider more conservative chunking strategy`),n>.5&&r.push(`Network appears unstable - smaller, more frequent chunks may be more reliable`),n<.2&&e>this.config.performanceThresholds.slowSpeed&&r.push(`Stable network detected - larger chunks may improve efficiency`),r.length===0&&r.push(`Performance appears optimal with current configuration`),r}calculateOptimalChunkSizeRange(e){if(e.length<5)return{min:256*1024,max:2*1024*1024};let t=e.slice().sort((e,t)=>t.speed-e.speed).slice(0,Math.ceil(e.length*.3)).map(e=>e.size),n=Math.min(...t),r=Math.max(...t);return{min:Math.max(64*1024,n),max:Math.min(32*1024*1024,r)}}};function V(e){return new t(e.getCapabilities(),t=>e.validateUploadStrategy(t))}function te({capabilities:e,fileSize:t,chunkSize:n,parallelUploads:r,uploadLengthDeferred:i,strategyConfig:a,logger:o}){if(a?.enableCapabilityNegotiation!==!1){let i=V(new f(e)),s={fileSize:t||0,preferredStrategy:a?.preferredStrategy===`auto`?void 0:a?.preferredStrategy,preferredChunkSize:n,parallelUploads:r,minChunkSizeForParallel:a?.minFileSizeForParallel||10*1024*1024},c=i.negotiateStrategy(s);o.log(`Upload strategy negotiated: ${c.strategy}`);for(let e of c.reasoning)o.log(` - ${e}`);for(let e of c.warnings)o.log(` Warning: ${e}`);return a?.onStrategySelected?.({chosen:c.strategy,chunkSize:c.chunkSize,parallelUploads:c.parallelUploads,reasoning:c.reasoning,warnings:c.warnings}),c}else{let e=r>1&&t&&t>(a?.minFileSizeForParallel||10*1024*1024)&&!i;return{strategy:e?`parallel`:`single`,chunkSize:n,parallelUploads:e?r:1,reasoning:[`Legacy strategy selection: ${e?`parallel`:`single`}`],warnings:[]}}}function H(e,t=p,n){let r=[],i=[],a=V(new f(t)).validateConfiguration({fileSize:0,preferredStrategy:e.uploadStrategy?.preferredStrategy===`auto`?void 0:e.uploadStrategy?.preferredStrategy,preferredChunkSize:e.chunkSize,parallelUploads:e.parallelUploads});if(a.valid||r.push(...a.errors),e.parallelUploads&&e.parallelUploads<1&&r.push(`parallelUploads must be at least 1`),e.chunkSize&&e.chunkSize<1024&&i.push(`Chunk size below 1KB may impact performance`),e.uploadStrategy?.preferredStrategy===`parallel`&&!e.parallelUploads&&i.push(`Parallel strategy requested but parallelUploads not configured`),r.length>0){n.log(`Configuration validation errors:`);for(let e of r)n.log(` Error: ${e}`)}if(i.length>0){n.log(`Configuration validation warnings:`);for(let e of i)n.log(` Warning: ${e}`)}return{valid:r.length===0,errors:r,warnings:i}}function ne(e,t){let n=H(e,p,t);if(!n.valid){let e=`Upload client configuration validation failed: ${n.errors.join(`, `)}`;throw t.log(e),new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:e})}}const U=(e,t)=>e&&{FILE_NOT_FOUND:`UPLOAD_NOT_FOUND`,UPLOAD_ID_NOT_FOUND:`UPLOAD_NOT_FOUND`,FLOW_JOB_NOT_FOUND:`JOB_NOT_FOUND`,FLOW_NODE_ERROR:`FLOW_RUN_FAILED`,FLOW_STRUCTURE_ERROR:`FLOW_RUN_FAILED`,FLOW_CYCLE_ERROR:`FLOW_RUN_FAILED`,FLOW_INPUT_VALIDATION_ERROR:`FLOW_RUN_FAILED`,FLOW_OUTPUT_VALIDATION_ERROR:`FLOW_RUN_FAILED`,VALIDATION_ERROR:`CREATE_UPLOAD_FAILED`,DATASTORE_NOT_FOUND:`FLOW_RUN_FAILED`}[e]||t;function W(e,t,{httpClient:n,logger:r,authManager:i,webSocketFactory:o}){let s=i?new a(n,i):n,c=`${e}/${t}/api/upload`,l=`${e}/${t}/api/flow`,u=`${e}/${t}/api/jobs`,d=e.replace(`http`,`ws`),f=`${d}/uploadista/ws/upload`,m=`${d}/uploadista/ws/flow`,h=async(e,t)=>{if(r?.log(`Getting auth token for WebSocket (jobId: ${t})`),`attachToken`in e){r?.log(`Detected SaasAuthManager, calling attachToken`);let n=(await e.attachToken({},t)).Authorization;if(n?.startsWith(`Bearer `))return r?.log(`Successfully extracted Bearer token from SaasAuthManager`),n.substring(7);r?.log(`No valid Authorization header from SaasAuthManager: ${n}`)}if(`attachCredentials`in e){r?.log(`Detected DirectAuthManager, calling attachCredentials`);let t=(await e.attachCredentials({})).Authorization;if(t)return r?.log(`Successfully extracted Authorization header from DirectAuthManager`),t.startsWith(`Bearer `)?t.substring(7):t;r?.log(`No Authorization header from DirectAuthManager`)}return r?.log(`No auth token could be extracted from auth manager`),null};return{getUpload:async e=>{let t=await s.request(`${c}/${e}`);if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`UPLOAD_NOT_FOUND`),i=n.error||n.message||`Upload ${e} not found`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}let n=await t.json();return{status:t.status,upload:n}},deleteUpload:async e=>{let t=await s.request(`${c}/${e}`,{method:`DELETE`});if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`DELETE_UPLOAD_FAILED`),i=n.error||n.message||`Failed to delete upload ${e}`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}return{status:t.status}},createUpload:async e=>{r?.log(`createUpload ${JSON.stringify(e)}`);let t=await s.request(c,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({})),n=U(e.code,`CREATE_UPLOAD_FAILED`),r=e.error||e.message||`Failed to create upload`;throw new v({name:n,message:e.code?`${r} (${e.code})`:r,status:t.status})}let n=await t.json();return r?.log(JSON.stringify(n)),{status:t.status,upload:n}},uploadChunk:async(e,t,{abortController:n})=>{try{let r=await s.request(`${c}/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/octet-stream`},body:t,signal:n?.signal});if(!r.ok){let e=await r.json().catch(()=>({}));throw new v({name:`NETWORK_ERROR`,message:e.error||e.message||`Unknown network error`,status:r.status})}let i=await r.json();return{status:r.status,upload:i}}catch(e){throw e instanceof v?e:new v({name:`NETWORK_ERROR`,message:`Network error`,cause:e})}},getFlow:async e=>{let t=await s.request(`${l}/${e}`);if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`FLOW_NOT_FOUND`),i=n.error||n.message||`Flow ${e} not found`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}let n=await t.json();return r?.log(`getFlow: ${e}`),{status:t.status,flow:n}},runFlow:async(e,t,n)=>{r?.log(`runFlow: ${e} with storage: ${t}`);let i=await s.request(`${l}/${e}/${t}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({inputs:n})});if(!i.ok){let t=await i.json().catch(()=>({})),n=U(t.code,`FLOW_RUN_FAILED`),r=t.error||t.message||`Failed to run flow ${e}`;throw new v({name:n,message:t.code?`${r} (${t.code})`:r,status:i.status})}let a=await i.json();return r?.log(`runFlow response: ${JSON.stringify(a)}`),{status:i.status,job:a}},continueFlow:async(e,t,n,i)=>{r?.log(`continueFlow: ${e} at node: ${t}`);let a=i?.contentType||`application/json`,o;o=a===`application/octet-stream`?n:JSON.stringify({newData:n});let c=await s.request(`${u}/${e}/continue/${t}`,{method:`PATCH`,headers:{"Content-Type":a},body:o});if(!c.ok){let t=await c.json().catch(()=>({})),n=U(t.code,`FLOW_CONTINUE_FAILED`),r=t.error||t.message||`Failed to continue flow for job ${e}`;throw new v({name:n,message:t.code?`${r} (${t.code})`:r,status:c.status})}return await c.json()},getJobStatus:async e=>{let t=await s.request(`${u}/${e}/status`);if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`JOB_NOT_FOUND`),i=n.error||n.message||`Job ${e} not found`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}return await t.json()},openUploadWebSocket:async e=>{let t=`${f}/${e}`;if(i)try{let n=await h(i,e);n?(t+=`?token=${encodeURIComponent(n)}`,r?.log(`WebSocket token attached for upload: ${e}`)):r?.log(`No token for upload WebSocket (using cookie-based auth): ${e}`)}catch(t){let n=t instanceof Error?t.message:String(t);r?.log(`Error getting auth token for upload WebSocket: ${n}`),r?.log(`Proceeding with cookie-based authentication for upload WebSocket: ${e}`)}let n=o.create(t);return n.onopen=()=>{r?.log(`Upload WebSocket connection opened for: ${e}`)},n.onclose=()=>{r?.log(`Upload WebSocket connection closed for: ${e}`)},n.onerror=t=>{r?.log(`Upload WebSocket error for ${e}: ${t}`)},n},openFlowWebSocket:async e=>{let t=`${m}/${e}`;if(i)try{let n=await h(i,e);n?(t+=`?token=${encodeURIComponent(n)}`,r?.log(`WebSocket token attached for flow job: ${e}`)):r?.log(`No token for flow WebSocket (using cookie-based auth): ${e}`)}catch(t){let n=t instanceof Error?t.message:String(t);r?.log(`Error getting auth token for flow WebSocket: ${n}`),r?.log(`Proceeding with cookie-based authentication for flow WebSocket: ${e}`)}let n=o.create(t);return n.onopen=()=>{r?.log(`Flow WebSocket connection opened for job: ${e}`)},n.onclose=()=>{r?.log(`Flow WebSocket connection closed for job: ${e}`)},n.onerror=t=>{r?.log(`Flow WebSocket error for job ${e}: ${t}`)},n},closeWebSocket:e=>{e.close()},getConnectionMetrics:()=>s.getMetrics(),getDetailedConnectionMetrics:()=>s.getDetailedMetrics(),warmupConnections:async e=>s.warmupConnections(e),getCapabilities:async e=>{let t=`${c}/capabilities?storageId=${encodeURIComponent(e)}`;try{let e=await s.request(t,{method:`GET`,headers:{"Content-Type":`application/json`}});return e.ok?(await e.json()).capabilities:(r?.log(`Failed to fetch capabilities: ${e.status} ${e.statusText}`),p)}catch(e){return r?.log(`Failed to fetch server capabilities, using defaults: ${e}`),p}}}}var G=class{constructor(e,t,n){this.uploadistaApi=e,this.logger=t,this.onEvent=n,this.uploadWebsockets=new Map,this.flowWebsockets=new Map}async openUploadWebSocket(e){this.closeUploadWebSocket(e);let t=await this.uploadistaApi.openUploadWebSocket(e);return this.uploadWebsockets.set(e,t),t.onmessage=e=>{try{let t=n.safeParse(JSON.parse(e.data));t.success?t.data.type===`upload_event`&&this.onEvent?.(t.data.payload):this.logger.error(`Error parsing upload event: ${t.error.message}`)}catch(e){this.logger.error(`Error parsing upload event: ${e}`)}},t.onerror=t=>{this.logger.error(`Upload WebSocket error for ${e}: ${t}`)},t.onclose=t=>{this.logger.log(`Upload WebSocket closed for ${e}, \n code: ${t.code}, reason: ${t.reason}`),this.uploadWebsockets.delete(e)},t}async openFlowWebSocket(e){this.closeFlowWebSocket(e);let t=await this.uploadistaApi.openFlowWebSocket(e);return this.flowWebsockets.set(e,t),t.onmessage=t=>{try{let n=JSON.parse(t.data);switch(n.type){case`connection`:this.logger.log(`Flow WebSocket connected for job: ${n.id}`);break;case`subscribed`:this.logger.log(`Flow WebSocket subscribed for job: ${n.payload.jobId}`);break;case`error`:this.logger.error(`Flow WebSocket error: ${n.message} for job ${e} with code ${n.code}`);break;case`pong`:this.logger.log(`Flow WebSocket pong received for job: ${e}`);break;case`flow_event`:this.onEvent?.(n.payload);break;default:this.logger.warn(`Unknown flow WebSocket message type: ${n.type}`)}}catch(e){this.logger.error(`Error parsing flow WebSocket message:${e}`)}},t.onerror=t=>{this.logger.error(`Flow WebSocket error for job ${e}: ${t}`)},t.onclose=t=>{this.logger.log(`Flow WebSocket closed for job ${e}, \n code: ${t.code}, reason: ${t.reason}`),this.flowWebsockets.delete(e)},t}async openWebSocket(e){return e.startsWith(`upload-`)||e.includes(`upload`)?await this.openUploadWebSocket(e):await this.openFlowWebSocket(e)}closeUploadWebSocket(e){let t=this.uploadWebsockets.get(e);t&&(this.uploadistaApi.closeWebSocket(t),this.uploadWebsockets.delete(e))}closeFlowWebSocket(e){let t=this.flowWebsockets.get(e);t&&(this.uploadistaApi.closeWebSocket(t),this.flowWebsockets.delete(e))}closeWebSocket(e){this.closeUploadWebSocket(e),this.closeFlowWebSocket(e)}closeAll(){for(let[e,t]of this.uploadWebsockets.entries())this.uploadistaApi.closeWebSocket(t),this.uploadWebsockets.delete(e);for(let[e,t]of this.flowWebsockets.entries())this.uploadistaApi.closeWebSocket(t),this.flowWebsockets.delete(e)}sendPing(e){let t=this.flowWebsockets.get(e);return t&&t.readyState===t.OPEN?(t.send(JSON.stringify({type:`ping`,timestamp:new Date().toISOString()})),!0):!1}getUploadWebSocket(e){return this.uploadWebsockets.get(e)}getFlowWebSocket(e){return this.flowWebsockets.get(e)}isUploadConnected(e){let t=this.uploadWebsockets.get(e);return t?.readyState===t?.OPEN}isFlowConnected(e){let t=this.flowWebsockets.get(e);return t?.readyState===t?.OPEN}isConnected(e){return this.isUploadConnected(e)||this.isFlowConnected(e)}getConnectionCount(){return this.uploadWebsockets.size+this.flowWebsockets.size}getConnectionCountByType(){return{upload:this.uploadWebsockets.size,flow:this.flowWebsockets.size,total:this.uploadWebsockets.size+this.flowWebsockets.size}}};const K={maxConnectionsPerHost:8,connectionTimeout:2e4,keepAliveTimeout:9e4,enableHttp2:!0,retryOnConnectionError:!0};function q({baseUrl:e,uploadistaBasePath:t=`uploadista`,storageId:n,retryDelays:r=[1e3,3e3,5e3],chunkSize:i,parallelUploads:a=1,parallelChunkSize:o,uploadStrategy:u,smartChunking:f,networkMonitoring:h,uploadMetrics:g,checksumService:v,onEvent:y,generateId:b,httpClient:S,logger:C=d(!0),fileReader:w,fingerprintService:T,clientStorage:k,storeFingerprintForResuming:A=!0,webSocketFactory:M,abortControllerFactory:N,platformService:I,auth:L}){let V=e.replace(/\/$/,``),U=L?L.mode===`direct`?new s(L,I,C):new l(L,S):new c;L&&C.log(`Authentication enabled in ${L.mode} mode${L.mode===`saas`?` (server: ${L.authServerUrl})`:``}`);let K=W(V,t,{logger:C,httpClient:S,authManager:U,webSocketFactory:M}),q=new m(h),J=new B(g),Y=null,X=async()=>Y||(Y=await K.getCapabilities(n),Y),Z,Q=async()=>{if(Z)return Z;let e=await X(),t=e.minChunkSize&&e.maxChunkSize&&e.optimalChunkSize?{minChunkSize:e.minChunkSize,maxChunkSize:e.maxChunkSize,optimalChunkSize:e.optimalChunkSize,requiresOrderedChunks:e.requiresOrderedChunks}:void 0;return Z=new _(q,{enabled:!0,...f,fallbackChunkSize:i,datastoreConstraints:t}),C.log(`Smart chunker initialized with datastore constraints: ${JSON.stringify(t)}`),Z},$=new G(K,C,y);return ne({baseUrl:V,storageId:n,chunkSize:i,parallelUploads:a,parallelChunkSize:o,uploadStrategy:u},C),{upload:async(e,{uploadLengthDeferred:s=!1,uploadSize:c,onProgress:l,onChunkComplete:d,onSuccess:p,onShouldRetry:m,onError:h}={})=>{let g=null,_=null,y=await T.computeFingerprint(e,`${V}/${t}/api/upload`);if(C.log(`fingerprint: ${y}`),!y)throw Error(`unable calculate fingerprint for this input file`);let S=await O(k,y);if(S.length>0&&S[0]!=null){let e=ee(S[0]);_=e.clientStorageKey,g=e.uploadId}let E=await w.openFile(e,i),D=x(E.size,{uploadLengthDeferred:s,uploadSize:c});E.size=D;let M=await Q();f?.enabled!==!1&&J.startSession(y,D||0,!0);let L=te({capabilities:await X(),fileSize:D,chunkSize:i,parallelUploads:a,uploadLengthDeferred:s,strategyConfig:u,logger:C});if(L.strategy===`parallel`){C.log(`Using parallel upload with ${L.parallelUploads} streams`);let e=await F({checksumService:v,source:E,storageId:n,fingerprint:y,uploadLengthDeferred:s,parallelUploads:L.parallelUploads,parallelChunkSize:o,retryDelays:r,smartChunker:M,uploadistaApi:K,logger:C,smartChunking:f,metrics:J,clientStorage:k,generateId:b,storeFingerprintForResuming:A,abortControllerFactory:N,platformService:I,openWebSocket:e=>($.openUploadWebSocket(e),null),closeWebSocket:e=>$.closeUploadWebSocket(e),terminate:e=>R(e,K,I,r),onProgress:l,onChunkComplete:d,onSuccess:p,onError:h});if(e)return{abort:async()=>{await e.abort()}};C.log(`Parallel upload failed, falling back to single upload`)}let B=await P({source:E,storageId:n,uploadId:g,platformService:I,uploadIdStorageKey:_,checksumService:v,fingerprint:y,uploadLengthDeferred:s,uploadistaApi:K,logger:C,clientStorage:k,generateId:b,storeFingerprintForResuming:A,openWebSocket:e=>($.openUploadWebSocket(e),null),closeWebSocket:e=>$.closeUploadWebSocket(e),onProgress:l,onChunkComplete:d,onSuccess:p,onError:h});if(B){let e=N.create(),{uploadId:t,uploadIdStorageKey:n,offset:i}=B,a=null;return j({platformService:I,uploadId:t,offset:i,source:E,uploadLengthDeferred:s,retryDelays:r,smartChunker:M,uploadistaApi:K,logger:C,smartChunking:f,metrics:J,abortController:e,onProgress:l,onChunkComplete:d,onSuccess:p,onShouldRetry:m,onRetry:e=>{a=e},onError:h}),{abort:()=>{z({platformService:I,uploadId:t,uploadIdStorageKey:n,retryTimeout:a,shouldTerminate:!0,abortController:e,uploadistaApi:K,retryDelays:r,clientStorage:k})}}}return{abort:()=>{}}},uploadWithFlow:async(e,n,{onProgress:a,onChunkComplete:o,onSuccess:s,onShouldRetry:c,onJobStart:l,onError:u}={})=>{let d=await w.openFile(e,i),p=await Q();if(f?.enabled!==!1){let n=await T.computeFingerprint(e,`${V}/${t}/api/flow`);J.startSession(n||`unknown`,d.size||0,!0)}let m=await E({source:d,flowConfig:n,uploadistaApi:K,logger:C,platformService:I,openWebSocket:e=>$.openFlowWebSocket(e),closeWebSocket:e=>$.closeWebSocket(e),onProgress:a,onChunkComplete:o,onSuccess:s,onJobStart:l,onError:u});if(!m)return{abort:()=>{},jobId:``};let{jobId:h,uploadFile:g,inputNodeId:_}=m,v=N.create();await $.openUploadWebSocket(g.id);let y=null;return D({jobId:h,uploadFile:g,inputNodeId:_,offset:g.offset,source:d,retryDelays:r,smartChunker:p,uploadistaApi:K,logger:C,smartChunking:f,metrics:J,platformService:I,abortController:v,onProgress:a,onChunkComplete:o,onSuccess:s,onShouldRetry:c,onRetry:e=>{y=e},onError:u}),{abort:()=>{v.abort(),y&&I.clearTimeout(y),$.closeWebSocket(h),$.closeUploadWebSocket(g.id)},jobId:h}},abort:e=>z(e),getFlow:async e=>{let{status:t,flow:n}=await K.getFlow(e);return{status:t,flow:n}},runFlow:async({flowId:e,inputs:t,storageId:r})=>{let{status:i,job:a}=await K.runFlow(e,r||n,t);return{status:i,job:a}},continueFlow:async({jobId:e,nodeId:t,newData:n,contentType:r})=>K.continueFlow(e,t,n,{contentType:r}),getJobStatus:async e=>K.getJobStatus(e),openUploadWebSocket:e=>$.openUploadWebSocket(e),openFlowWebSocket:e=>$.openFlowWebSocket(e),openWebSocket:e=>$.openWebSocket(e),closeWebSocket:e=>$.closeWebSocket(e),closeAllWebSockets:()=>$.closeAll(),sendPing:e=>$.sendPing(e),isWebSocketConnected:e=>$.isConnected(e),getWebSocketConnectionCount:()=>$.getConnectionCount(),getWebSocketConnectionCountByType:()=>$.getConnectionCountByType(),getNetworkMetrics:()=>q.getCurrentMetrics(),getNetworkCondition:()=>q.getNetworkCondition(),getChunkingInsights:()=>J.getPerformanceInsights(),exportMetrics:()=>J.exportMetrics(),getConnectionMetrics:()=>K.getConnectionMetrics(),getDetailedConnectionMetrics:()=>K.getDetailedConnectionMetrics(),warmupConnections:e=>K.warmupConnections(e),getConnectionPoolingInsights:async()=>(await Q()).getConnectionPoolingInsights(),resetMetrics:async()=>{q.reset(),(await Q()).reset(),J.reset()},validateConfiguration:e=>H(e,p,C),validateConfigurationAsync:async e=>{let t=[],n=[],r=await K.getCapabilities(e.storageId),i=H(e,r,C);return t.push(...i.errors),n.push(...i.warnings),{valid:t.length===0,errors:t,warnings:n,capabilities:r}},getCapabilities:X}}const J=r.object({size:r.number().nullable(),metadata:r.record(r.string(),r.union([r.string(),r.number(),r.boolean()])),creationTime:r.string(),uploadId:r.string().optional(),parallelUploadUrls:r.array(r.string()).optional(),clientStorageKey:r.string()});function Y(e){return{findAllUploads:async()=>{let t=await e.find(`uploadista::`);return Object.values(t).map(e=>J.parse(JSON.parse(e)))},findUploadsByFingerprint:async t=>{let n=await e.find(`uploadista::${t}`);return Object.values(n).map(e=>J.parse(JSON.parse(e)))},removeUpload:t=>e.removeItem(t),addUpload:async(t,n,{generateId:r})=>{let i=`uploadista::${t}::${r.generate()}`;return await e.setItem(i,JSON.stringify(n)),i}}}function X(){let e=new Map;return{async getItem(t){return e.get(t)??null},async setItem(t,n){e.set(t,n)},async removeItem(t){e.delete(t)},async findAll(){return Object.fromEntries(e.entries())},async find(t){return Object.fromEntries(Array.from(e.entries()).filter(([e])=>e.startsWith(t)))}}}export{i as ChunkBuffer,m as NetworkMonitor,v as UploadistaError,G as UploadistaWebSocketManager,Y as createClientStorage,X as createInMemoryStorageService,d as createLogger,W as createUploadistaApi,q as createUploadistaClient,K as defaultConnectionPoolingConfig,J as previousUploadSchema,L as wait};
1
+ import{Base64 as e}from"js-base64";import{UploadStrategyNegotiator as t}from"@uploadista/core/upload";import{webSocketMessageSchema as n}from"@uploadista/core/types";import r from"zod";var i=class{constructor(e){this.buffer=[],this.currentSize=0,this.lastAddTime=0,this.config={minThreshold:e.minThreshold,maxBufferSize:e.maxBufferSize??e.minThreshold*2,timeoutMs:e.timeoutMs??3e4}}add(e){return this.buffer.push(e),this.currentSize+=e.length,this.lastAddTime=Date.now(),this.shouldFlush()?this.flush():null}flush(){if(this.buffer.length===0)return null;let e=new Uint8Array(this.currentSize),t=0;for(let n of this.buffer)e.set(n,t),t+=n.length;let n={data:e,size:this.currentSize,timestamp:this.lastAddTime};return this.reset(),n}shouldFlush(){if(this.currentSize>=this.config.minThreshold||this.currentSize>=this.config.maxBufferSize)return!0;let e=Date.now()-this.lastAddTime;return this.buffer.length>0&&e>this.config.timeoutMs}getBufferInfo(){return{size:this.currentSize,chunkCount:this.buffer.length,isReadyToFlush:this.shouldFlush(),timeSinceLastAdd:Date.now()-this.lastAddTime}}hasPendingData(){return this.buffer.length>0}reset(){this.buffer=[],this.currentSize=0,this.lastAddTime=0}getMinThreshold(){return this.config.minThreshold}},a=class{constructor(e,t){this.httpClient=e,this.authManager=t}async request(e,t={}){try{let n=await this.attachAuthCredentials(t.headers||{},e);return await this.httpClient.request(e,{...t,headers:n,credentials:this.authManager.getType()===`no-auth`||this.authManager.getType()===`uploadista-cloud`?`omit`:t.credentials??`include`})}catch(e){throw e instanceof Error&&e.message.includes(`auth`),e}}async attachAuthCredentials(e,t){if(`attachCredentials`in this.authManager)return await this.authManager.attachCredentials(e);if(`attachToken`in this.authManager){let n=this.extractJobIdFromUrl(t);return await this.authManager.attachToken(e,n)}return e}extractJobIdFromUrl(e){let t=e.match(/\/api\/upload\/([^/?]+)/);if(t)return t[1];let n=e.match(/\/api\/flow\/([^/?]+)/);if(n)return n[1];let r=e.match(/\/api\/jobs\/([^/?]+)/);if(r)return r[1]}getMetrics(){return this.httpClient.getMetrics()}getDetailedMetrics(){return this.httpClient.getDetailedMetrics()}reset(){this.httpClient.reset()}async close(){await this.httpClient.close()}async warmupConnections(e){await this.httpClient.warmupConnections(e)}getAuthManager(){return this.authManager}},o=class{constructor(e){this.type=e}getType(){return this.type}},s=class extends o{constructor(e,t,n){super(`direct`),this.config=e,this.platformService=t,this.logger=n}async attachCredentials(e={}){try{if(!this.config.getCredentials)return e;let t=await Promise.resolve(this.config.getCredentials());if(!t||typeof t!=`object`)throw Error(`getCredentials() must return an object with headers and/or cookies`);let n={...e};return t.headers&&(this.validateHeaders(t.headers),Object.assign(n,t.headers)),t.cookies&&this.attachCookies(n,t.cookies),n}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to attach auth credentials: ${t}`)}}validateHeaders(e){if(typeof e!=`object`||!e)throw Error(`headers must be an object`);for(let[t,n]of Object.entries(e))if(typeof t!=`string`||typeof n!=`string`)throw Error(`Invalid header: key and value must be strings (got ${t}: ${typeof n})`)}attachCookies(e,t){if(this.platformService.isBrowser())this.logger.warn(`DirectAuth: Cookies are automatically handled by the browser. Ensure your server has proper CORS configuration with credentials support.`);else{let n=Object.entries(t).map(([e,t])=>`${e}=${t}`).join(`; `);n&&(e.Cookie=n)}}},c=class extends o{constructor(){super(`no-auth`)}async attachCredentials(e={}){return e}clearToken(e){}clearAllTokens(){}},l=class extends o{constructor(e,t){super(`uploadista-cloud`),this.config=e,this.httpClient=t,this.tokenCache=new Map,this.globalToken=null}async fetchToken(){try{let e=await this.httpClient.request(`${this.config.authServerUrl}/${this.config.clientId}`,{method:`GET`,headers:{"Content-Type":`application/json`}});if(!e.ok){let t=await e.text(),n=`Auth server returned ${e.status}`;try{let e=JSON.parse(t);n=e.error||e.message||n}catch{n=t||e.statusText||n}throw Error(n)}let t=await e.json();if(!t.token||typeof t.token!=`string`)throw Error(`Auth server response missing 'token' field or token is not a string`);return t}catch(e){throw e instanceof Error?Error(`Failed to fetch auth token: ${e.message}`):Error(`Failed to fetch auth token: ${String(e)}`)}}async getOrFetchToken(e){if(e){let t=this.tokenCache.get(e);if(t&&!this.isTokenExpired(t))return t.token}if(!e&&this.globalToken&&!this.isTokenExpired(this.globalToken))return this.globalToken.token;let t=await this.fetchToken(),n=t.expiresIn?Date.now()+t.expiresIn*1e3:void 0,r={token:t.token,expiresAt:n};return e?this.tokenCache.set(e,r):this.globalToken=r,t.token}isTokenExpired(e){return e.expiresAt?Date.now()>e.expiresAt-60*1e3:!1}async attachToken(e={},t){try{let n=await this.getOrFetchToken(t);return{...e,Authorization:`Bearer ${n}`}}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to attach auth token: ${t}`)}}clearToken(e){this.tokenCache.delete(e)}clearAllTokens(){this.tokenCache.clear(),this.globalToken=null}getCacheStats(){return{cachedJobCount:this.tokenCache.size,hasGlobalToken:this.globalToken!==null}}};const u=()=>{};function d(e,t=u){return{log:n=>{e&&t(n)},warn:n=>{e&&t(n)},error:n=>{e&&t(n)}}}var f=class{constructor(e){this.capabilities=e}getCapabilities(){return this.capabilities}validateUploadStrategy(e){switch(e){case`parallel`:return this.capabilities.supportsParallelUploads;case`single`:return!0;default:return!1}}};const p={supportsParallelUploads:!0,supportsConcatenation:!0,supportsDeferredLength:!0,supportsResumableUploads:!0,supportsTransactionalUploads:!1,maxConcurrentUploads:6,minChunkSize:64*1024,maxChunkSize:100*1024*1024,maxParts:1e4,optimalChunkSize:8*1024*1024,requiresOrderedChunks:!1};var m=class{constructor(e={}){this.samples=[],this.config={maxSamples:e.maxSamples??100,smoothingFactor:e.smoothingFactor??.1,minSamplesForCondition:e.minSamplesForCondition??5,slowThreshold:e.slowThreshold??50*1024,fastThreshold:e.fastThreshold??5*1024*1024,unstableThreshold:e.unstableThreshold??.5},this._currentMetrics=this.createEmptyMetrics()}addSample(e){this.samples.push(e),this.samples.length>this.config.maxSamples&&(this.samples=this.samples.slice(-this.config.maxSamples)),this.updateMetrics()}recordUpload(e,t,n,r){this.addSample({size:e,duration:t,success:n,timestamp:Date.now(),latency:r})}getCurrentMetrics(){return{...this._currentMetrics}}getNetworkCondition(){if(this.samples.length<this.config.minSamplesForCondition)return{type:`unknown`,confidence:0};let e=this.getRecentSuccessfulSamples();if(e.length<this.config.minSamplesForCondition)return{type:`unknown`,confidence:.3};let t=e.map(e=>e.size/(e.duration/1e3)),n=t.reduce((e,t)=>e+t,0)/t.length,r=t.reduce((e,t)=>e+(t-n)**2,0)/t.length,i=Math.sqrt(r)/n,a=Math.min(1,this.samples.length/(this.config.minSamplesForCondition*2));return i>this.config.unstableThreshold?{type:`unstable`,confidence:a}:n<this.config.slowThreshold?{type:`slow`,confidence:a}:n>this.config.fastThreshold?{type:`fast`,confidence:a}:{type:`slow`,confidence:a*.7}}getOptimalThroughput(){let e=this.getRecentSuccessfulSamples(10);if(e.length===0)return 0;let t=0,n=0;return e.forEach((e,r)=>{let i=r+1,a=e.size/(e.duration/1e3);n+=a*i,t+=i}),t>0?n/t:0}reset(){this.samples=[],this._currentMetrics=this.createEmptyMetrics()}getRecentSuccessfulSamples(e){let t=this.samples.filter(e=>e.success);return e?t.slice(-e):t}updateMetrics(){let e=this.samples.filter(e=>e.success),t=this.samples.length,n=e.length;if(t===0){this._currentMetrics=this.createEmptyMetrics();return}let r=e.reduce((e,t)=>e+t.size,0),i=e.reduce((e,t)=>e+t.duration,0),a=i>0?r/(i/1e3):0,o=n/t,s=1-o,c=this.samples.filter(e=>e.latency!==void 0);this._currentMetrics={averageSpeed:a,latency:c.length>0?c.reduce((e,t)=>e+(t.latency||0),0)/c.length:0,successRate:o,errorRate:s,totalRequests:t,totalBytes:r,totalTime:i}}createEmptyMetrics(){return{averageSpeed:0,latency:0,successRate:0,errorRate:0,totalRequests:0,totalBytes:0,totalTime:0}}};const h={conservative:{name:`conservative`,minChunkSize:64*1024,maxChunkSize:2*1024*1024,initialChunkSize:256*1024,adaptationRate:.1},balanced:{name:`balanced`,minChunkSize:128*1024,maxChunkSize:8*1024*1024,initialChunkSize:512*1024,adaptationRate:.2},aggressive:{name:`aggressive`,minChunkSize:256*1024,maxChunkSize:32*1024*1024,initialChunkSize:1024*1024,adaptationRate:.3}},g={conservative:{name:`s3-conservative`,minChunkSize:5*1024*1024,maxChunkSize:64*1024*1024,initialChunkSize:8*1024*1024,adaptationRate:.1},balanced:{name:`s3-balanced`,minChunkSize:5*1024*1024,maxChunkSize:128*1024*1024,initialChunkSize:16*1024*1024,adaptationRate:.2},aggressive:{name:`s3-aggressive`,minChunkSize:5*1024*1024,maxChunkSize:256*1024*1024,initialChunkSize:32*1024*1024,adaptationRate:.3}};var _=class{constructor(e,t={}){this.lastDecision=null,this.consecutiveFailures=0,this.consecutiveSuccesses=0,this.connectionMetrics=null,this.networkMonitor=e,this.config={enabled:t.enabled??!0,fallbackChunkSize:t.fallbackChunkSize??1024*1024,minChunkSize:t.minChunkSize??64*1024,maxChunkSize:t.maxChunkSize??32*1024*1024,initialChunkSize:t.initialChunkSize??512*1024,targetUtilization:t.targetUtilization??.85,adaptationRate:t.adaptationRate??.2,conservativeMode:t.conservativeMode??!1,connectionPoolingAware:t.connectionPoolingAware??!0,datastoreConstraints:t.datastoreConstraints},this.currentChunkSize=this.getEffectiveInitialChunkSize()}getEffectiveInitialChunkSize(){return this.config.datastoreConstraints?Math.max(this.config.initialChunkSize,this.config.datastoreConstraints.optimalChunkSize):this.config.initialChunkSize}applyDatastoreConstraints(e){return this.config.datastoreConstraints?Math.max(this.config.datastoreConstraints.minChunkSize,Math.min(this.config.datastoreConstraints.maxChunkSize,e)):e}getNextChunkSize(e){if(!this.config.enabled)return{size:this.config.fallbackChunkSize,strategy:`fixed`,reason:`Smart chunking disabled`,networkCondition:{type:`unknown`,confidence:0}};let t=this.networkMonitor.getNetworkCondition(),n=this.currentChunkSize,r=`adaptive`,i=``;if(t.type===`unknown`)n=this.config.initialChunkSize,r=`initial`,i=`Insufficient network data`;else{let e=this.selectStrategy(t);n=this.calculateOptimalChunkSize(t,e),r=e.name,i=`Network condition: ${t.type} (confidence: ${Math.round(t.confidence*100)}%)`}return e&&e<n&&(n=e,i+=`, limited by remaining bytes (${e})`),n=this.applyDatastoreConstraints(n),n=Math.max(this.config.minChunkSize,Math.min(this.config.maxChunkSize,n)),this.currentChunkSize=n,this.lastDecision={size:n,strategy:r,reason:i,networkCondition:t},this.lastDecision}recordChunkResult(e,t,n){this.networkMonitor.recordUpload(e,t,n),n?(this.consecutiveSuccesses++,this.consecutiveFailures=0):(this.consecutiveFailures++,this.consecutiveSuccesses=0),this.adaptChunkSize(n,t,e)}getCurrentChunkSize(){return this.currentChunkSize}getLastDecision(){return this.lastDecision}reset(){this.currentChunkSize=this.config.initialChunkSize,this.consecutiveFailures=0,this.consecutiveSuccesses=0,this.lastDecision=null,this.connectionMetrics=null}updateConnectionMetrics(e){this.connectionMetrics=e}getConnectionPoolingInsights(){if(!this.connectionMetrics||!this.config.connectionPoolingAware)return{isOptimized:!1,reuseRate:0,recommendedMinChunkSize:this.config.minChunkSize,connectionOverhead:0};let e=this.connectionMetrics.reuseRate,t=this.connectionMetrics.averageConnectionTime,n=(1-e)*t,r=Math.max(this.config.minChunkSize,Math.floor(n*1e4));return{isOptimized:e>.7,reuseRate:e,recommendedMinChunkSize:r,connectionOverhead:n}}selectStrategy(e){let t={name:`fallback`,minChunkSize:128*1024,maxChunkSize:4*1024*1024,initialChunkSize:512*1024,adaptationRate:.2},n=this.config.datastoreConstraints?.minChunkSize===5*1024*1024?g:h;if(this.config.conservativeMode)return n.conservative??t;let r;switch(e.type){case`fast`:r=e.confidence>.7?n.aggressive??t:n.balanced??t;break;case`slow`:r=n.conservative??t;break;case`unstable`:r=n.conservative??t;break;default:r=n.balanced??t}return this.config.connectionPoolingAware&&this.connectionMetrics?this.optimizeStrategyForConnectionPooling(r):r}optimizeStrategyForConnectionPooling(e){if(!this.connectionMetrics)return e;let t=this.getConnectionPoolingInsights(),n=t.reuseRate;return n>.8?{...e,name:`${e.name}-pooled-aggressive`,minChunkSize:Math.max(e.minChunkSize*.5,32*1024),adaptationRate:Math.min(e.adaptationRate*1.3,.5)}:n>.5?{...e,name:`${e.name}-pooled-moderate`,minChunkSize:Math.max(e.minChunkSize*.75,64*1024),adaptationRate:Math.min(e.adaptationRate*1.1,.4)}:{...e,name:`${e.name}-pooled-conservative`,minChunkSize:Math.max(e.minChunkSize*1.5,t.recommendedMinChunkSize),adaptationRate:e.adaptationRate*.8}}calculateOptimalChunkSize(e,t){let n=this.currentChunkSize,r=this.networkMonitor.getOptimalThroughput();if(r>0){let i=r*this.getTargetChunkDuration(e)*this.config.targetUtilization,a=t.adaptationRate;n=this.currentChunkSize*(1-a)+i*a}if(n=Math.max(t.minChunkSize,Math.min(t.maxChunkSize,n)),this.consecutiveFailures>0){let e=Math.min(.5,this.consecutiveFailures*.2);n*=1-e}else if(this.consecutiveSuccesses>2){let e=Math.min(.3,this.consecutiveSuccesses*.05);n*=1+e}return Math.round(n)}getTargetChunkDuration(e){switch(e.type){case`fast`:return 3;case`slow`:return 5;case`unstable`:return 2;default:return 3}}adaptChunkSize(e,t,n){if(!e){this.currentChunkSize=Math.max(this.config.minChunkSize,this.currentChunkSize*.8);return}let r=n/(t/1e3),i=this.networkMonitor.getCurrentMetrics();if(i.averageSpeed>0){let e=r/i.averageSpeed;e<this.config.targetUtilization*.8?this.currentChunkSize=Math.min(this.config.maxChunkSize,this.currentChunkSize*1.1):e>this.config.targetUtilization*1.2&&(this.currentChunkSize=Math.max(this.config.minChunkSize,this.currentChunkSize*.95))}}},v=class extends Error{constructor({name:e,message:t,cause:n,status:r}){super(),this.name=e,this.cause=n,this.message=t,this.status=r}isNetworkError(){return this.name===`NETWORK_ERROR`||this.name===`NETWORK_UNEXPECTED_RESPONSE`}};function y(t){return Object.entries(t).map(([t,n])=>`${t} ${e.encode(String(n))}`).join(`,`)}function b(e,t){return e>=t&&e<t+100}function x(e,{uploadLengthDeferred:t,uploadSize:n}){if(t)return null;if(n!=null)return n;let r=e;if(r==null)throw new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:"cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option"});return r}function S(e,t,n){if(t<=1)return[{startByte:0,endByte:e,segmentIndex:0}];let r=[];if(n){let t=0,i=0;for(;t<e;){let a=Math.min(t+n,e);r.push({startByte:t,endByte:a,segmentIndex:i}),t=a,i++}}else{let n=Math.ceil(e/t);for(let i=0;i<t;i++){let t=i*n,a=Math.min(t+n,e);t<e&&r.push({startByte:t,endByte:a,segmentIndex:i})}}return r}async function C({uploadId:e,source:t,offset:n,uploadLengthDeferred:r,abortController:i,onProgress:a,smartChunker:o,uploadistaApi:s,logger:c}){let l=n??0,u=t.size?t.size-l:void 0,d=o.getNextChunkSize(u),f=l+d.size;t.size&&(f===1/0||f>t.size)&&!r&&(f=t.size);let{value:p,size:m,done:h}=await t.slice(l,f),g=m??0,_=Date.now();r&&h&&(t.size=n+g);let y=n+g;if(!r&&h&&y!==t.size)throw new v({name:`WRONG_UPLOAD_SIZE`,message:`upload was configured with a size of ${m} bytes, but the source is done after ${y} bytes`});let b=await s.uploadChunk(e,p,{onProgress:(t,n)=>{a?.(e,t,n)},abortController:i}),x=Date.now()-_,S=b.status>=200&&b.status<300;return o.recordChunkResult(g,x,S),c.log(`Chunk upload ${S?`succeeded`:`failed`}: ${g} bytes in ${x}ms (${d.strategy} strategy)`),b}function w(e,t,n,r,i){return r==null||n>=r.length||!t.isNetworkError()?!1:i?i(t,n):T(e,t)}function T(e,t){let n=t.status??0;return(!b(n,400)||n===409||n===423)&&e.isOnline()}async function E({source:e,flowConfig:t,uploadistaApi:n,logger:r,platformService:i,openWebSocket:a,closeWebSocket:o,...s}){let{flowId:c,storageId:l}=t,{flow:u}=await n.getFlow(c),d=u.nodes.find(e=>e.type===`input`);if(!d){let e=new v({name:`FLOW_INCOMPATIBLE`,message:`Flow ${c} does not have a streaming input node. The flow must contain a node with type "input" to support flow uploads.`});throw s.onError?.(e),e}let f=d.id,p={originalName:e.name??`unknown`,mimeType:e.type??`application/octet-stream`,size:e.size??0,...t.metadata};r.log(`Starting flow upload for flow ${c}, node ${f}`);let{status:m,job:h}=await n.runFlow(c,l,{[f]:{operation:`init`,storageId:l,metadata:p}}),g=h.id;if(!b(m,200)||!g){let e=new v({name:`FLOW_INIT_FAILED`,message:`Failed to initialize flow upload`});throw s.onError?.(e),e}s.onJobStart?.(g),r.log(`Flow job ${g} created, opening WebSocket`),a(g),r.log(`Waiting for upload ID from node`);let _=0,y=await n.getJobStatus(g);for(;y.status!==`paused`&&_<60;)await new Promise(e=>i.setTimeout(e,500)),y=await n.getJobStatus(g),_++;if(y.status!==`paused`){let e=new v({name:`FLOW_TIMEOUT`,message:`Flow did not pause after init (status: ${y.status})`});throw s.onError?.(e),e}let x=y.tasks.find(e=>e.nodeId===f)?.result;if(!x?.id){let e=new v({name:`FLOW_NO_UPLOAD_ID`,message:`Flow did not return upload ID after init`});throw s.onError?.(e),e}return r.log(`Upload ID received: ${x.id}`),s.onStart?.({uploadId:x.id,size:e.size??null}),{jobId:g,uploadFile:x,inputNodeId:f}}async function D({jobId:e,uploadFile:t,inputNodeId:n,offset:r,source:i,retryAttempt:a=0,abortController:o,retryDelays:s,smartChunker:c,uploadistaApi:l,logger:u,smartChunking:d,metrics:f,platformService:p,onRetry:m,...h}){let g=r,_=r;try{let g=i.size?i.size-r:void 0,y=c.getNextChunkSize(g).size,b=Math.min(r+y,i.size??0),x=await i.slice(r,b);if(!x||!x.value)throw new v({name:`NETWORK_ERROR`,message:`Failed to read chunk from file`});let S=x.value,C=Date.now(),w=await l.uploadChunk(t.id,S,{abortController:o}),T=Date.now()-C;if(!w.upload)throw new v({name:`UPLOAD_CHUNK_FAILED`,message:`Upload chunk response missing upload data`});if(_=w.upload.offset,h.onProgress?.(t.id,_,i.size??0),h.onChunkComplete?.(_-r,r,i.size??0),d?.enabled!==!1){let e=Math.floor(r/y);f.recordChunk({chunkIndex:e,size:y,duration:T,speed:y/(T/1e3),success:!0,retryCount:a,networkCondition:c.getLastDecision()?.networkCondition?.type,chunkingStrategy:c.getLastDecision()?.strategy});let t=l.getConnectionMetrics();c.updateConnectionMetrics(t)}if(_>=(i.size??0)){if(i&&i.close(),d?.enabled!==!1){let e=f.endSession();e&&u.log(`Flow upload completed: ${e.totalSize} bytes in ${e.totalDuration}ms, avg speed: ${Math.round(e.averageSpeed/1024)}KB/s`)}u.log(`Finalizing flow upload for job ${e}`);try{await l.resumeFlow(e,n,{operation:`finalize`,uploadId:t.id},{contentType:`application/json`})}catch(t){let n=new v({name:`FLOW_FINALIZE_FAILED`,message:`Failed to finalize flow upload for job ${e}`,cause:t});throw h.onError?.(n),n}return}await D({jobId:e,uploadFile:t,inputNodeId:n,offset:_,source:i,platformService:p,retryDelays:s,smartChunker:c,uploadistaApi:l,logger:u,smartChunking:d,metrics:f,onRetry:m,abortController:o,...h})}catch(y){if(s!=null)if(r!=null&&_>g&&(a=0),w(p,y instanceof v?y:new v({name:`NETWORK_ERROR`,message:`Network error during flow upload`,cause:y}),a,s,h.onShouldRetry)){let _=s[a];g=r;let v=p.setTimeout(async()=>{await D({jobId:e,uploadFile:t,inputNodeId:n,offset:r,source:i,retryAttempt:a+1,retryDelays:s,smartChunker:c,uploadistaApi:l,logger:u,smartChunking:d,metrics:f,platformService:p,onRetry:m,abortController:o,...h})},_);m?.(v)}else throw new v({name:`UPLOAD_CHUNK_FAILED`,message:`Failed to upload chunk for job ${e} at offset ${r}`,cause:y})}}async function O(e,t){return e.findUploadsByFingerprint(t)}function k(e){return{uploadId:e.uploadId??null,parallelUploadUrls:e.parallelUploadUrls,clientStorageKey:e.clientStorageKey}}async function A({clientStorage:e,fingerprint:t,size:n,metadata:r,clientStorageKey:i,storeFingerprintForResuming:a,generateId:o}){if(!a||!t||i!=null)return;let s={size:n,metadata:r,creationTime:new Date().toString(),clientStorageKey:t};return await e.addUpload(t,s,{generateId:o})}async function j(e,t){t&&await e.removeUpload(t)}async function M({uploadId:e,offset:t,source:n,uploadLengthDeferred:r,retryAttempt:i=0,abortController:a,retryDelays:o,smartChunker:s,uploadistaApi:c,logger:l,smartChunking:u,metrics:d,platformService:f,onRetry:p,...m}){let h=t,g=t;try{let h=await C({uploadId:e,source:n,offset:t,uploadLengthDeferred:r,onProgress:m.onProgress,abortController:a,smartChunker:s,uploadistaApi:c,logger:l});if(!b(h.status,200)||h.upload==null)throw new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while uploading chunk`});if(g=h.upload.offset,m.onProgress?.(e,g,h.upload.size??0),m.onChunkComplete?.(g-t,t,h.upload?.size??0),u?.enabled!==!1){let e=Math.floor(t/(g-t||1)),n=g-t,r=Date.now()-(Date.now()-100),a=s.getLastDecision();d.recordChunk({chunkIndex:e,size:n,duration:r,speed:n/(r/1e3),success:!0,retryCount:i,networkCondition:a?.networkCondition?.type,chunkingStrategy:a?.strategy});let o=c.getConnectionMetrics();s.updateConnectionMetrics(o)}if(g>=(n.size??0)){if(n&&n.close(),u?.enabled!==!1){let e=d.endSession();e&&l.log(`Upload completed: ${e.totalSize} bytes in ${e.totalDuration}ms, avg speed: ${Math.round(e.averageSpeed/1024)}KB/s`)}m.onSuccess?.(h.upload);return}await M({uploadId:e,offset:g,source:n,uploadLengthDeferred:r,retryDelays:o,smartChunker:s,platformService:f,uploadistaApi:c,logger:l,smartChunking:u,metrics:d,onRetry:p,abortController:a,...m})}catch(_){if(o!=null)if(t!=null&&g>h&&(i=0),w(f,_ instanceof v?_:new v({name:`NETWORK_ERROR`,message:`Network error`,cause:_}),i,o,m.onShouldRetry)){let g=o[i];h=t;let _=f.setTimeout(async()=>{await M({uploadId:e,offset:t,source:n,retryAttempt:i+1,uploadLengthDeferred:r,retryDelays:o,smartChunker:s,platformService:f,uploadistaApi:c,logger:l,smartChunking:u,metrics:d,onRetry:p,abortController:a,...m})},g);p?.(_)}else throw new v({name:`UPLOAD_CHUNK_FAILED`,message:`failed to upload chunk for ${e} at offset ${t}`,cause:_})}}async function N({fingerprint:e,storageId:t,source:n,uploadLengthDeferred:r,metadata:i,uploadistaApi:a,logger:o,checksumService:s,clientStorage:c,generateId:l,storeFingerprintForResuming:u,openWebSocket:d,closeWebSocket:f,computeChecksum:p=!0,checksumAlgorithm:m=`sha256`,platformService:h,...g}){if(!r&&n.size==null){let e=new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:`expected size to be set`});throw g.onError?.(e),e}let _;if(p&&h.isFileLike(n.input))try{o.log(`Computing file checksum...`),_=await s.computeChecksum(new Uint8Array(n.input)),o.log(`Checksum computed: ${_}`)}catch(e){o.log(`Warning: Failed to compute checksum: ${e instanceof Error?e.message:`Unknown error`}`)}let x={uploadLengthDeferred:r,storageId:t,size:n.size??0,metadata:i?y(i):void 0,fileName:n.name??void 0,type:n.type??``,lastModified:n.lastModified??void 0,checksum:_,checksumAlgorithm:_?m:void 0},{upload:S,status:C}=await a.createUpload(x);if(!b(C,200)||S==null){let e=new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while creating upload`});throw g.onError?.(e),e}if(o.log(`Created upload ${S.id}`),d(S.id),S.size===0){g.onSuccess?.(S),n&&n.close(),f(S.id);return}let w=await A({clientStorage:c,fingerprint:e,size:S.size??0,metadata:S.metadata??{},clientStorageKey:null,storeFingerprintForResuming:u,generateId:l});return g.onStart?.({uploadId:S.id,size:S.size??null}),{uploadIdStorageKey:w,uploadId:S.id,offset:S.offset}}async function P({uploadId:e,storageId:t,uploadIdStorageKey:n,fingerprint:r,source:i,uploadLengthDeferred:a,uploadistaApi:o,logger:s,platformService:c,checksumService:l,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,...m}){let h=await o.getUpload(e),g=h.status;if(!b(g,200)){if(g===423){let e=new v({name:`UPLOAD_LOCKED`,message:`upload is currently locked; retry later`});throw m.onError?.(e),e}return b(g,400)&&await j(u,n),await N({platformService:c,fingerprint:r,storageId:t,source:i,uploadLengthDeferred:a,metadata:{},uploadistaApi:o,logger:s,checksumService:l,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,closeWebSocket:()=>{},...m})}let _=h.upload;if(_==null){let e=new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while resuming upload`});throw m.onError?.(e),e}if(await A({clientStorage:u,fingerprint:r,size:_.size??0,metadata:_.metadata??{},clientStorageKey:n,storeFingerprintForResuming:f,generateId:d}),_.offset!==_.size)return p(_.id),{uploadId:e,uploadIdStorageKey:n,offset:_.offset}}async function F({source:e,uploadId:t,uploadIdStorageKey:n,storageId:r,fingerprint:i,platformService:a,uploadLengthDeferred:o,uploadistaApi:s,checksumService:c,logger:l,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,closeWebSocket:m,...h}){return t!=null&&n!=null?(l.log(`Resuming upload from previous id: ${t}`),await P({uploadId:t,uploadIdStorageKey:n,storageId:r,fingerprint:i,source:e,checksumService:c,uploadLengthDeferred:o,uploadistaApi:s,logger:l,platformService:a,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,...h})):(l.log(`Creating a new upload`),await N({fingerprint:i,storageId:r,source:e,uploadLengthDeferred:o,metadata:{},uploadistaApi:s,logger:l,checksumService:c,platformService:a,clientStorage:u,generateId:d,storeFingerprintForResuming:f,openWebSocket:p,closeWebSocket:m,...h}))}async function ee({source:e,storageId:t,fingerprint:n,uploadLengthDeferred:r,parallelUploads:i,parallelChunkSize:a,retryDelays:o,smartChunker:s,uploadistaApi:c,logger:l,checksumService:u,smartChunking:d,metrics:f,clientStorage:p,generateId:m,storeFingerprintForResuming:h,openWebSocket:g,closeWebSocket:_,terminate:y,abortControllerFactory:b,platformService:x,...C}){if(!e.size||e.size===0){C.onError?.(new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:`Parallel upload requires a known file size`}));return}let w=S(e.size,i,a);l.log(`Starting parallel upload with ${w.length} segments`);let T={segments:[],totalProgress:0,completed:!1,failed:!1},E=new Map,D=new Map,O=()=>{let e=Array.from(D.values()).reduce((e,t)=>e+t,0),t=Array.from(E.values()).reduce((e,t)=>e+t,0);T.totalProgress=e>0?t/e:0,C.onProgress&&e>0&&C.onProgress(`parallel-upload`,t,e)};try{let i=await Promise.all(w.map(async i=>{let a={...e,size:i.endByte-i.startByte,async slice(t,n){let r=i.startByte+(t??0),a=Math.min(i.startByte+(n??i.endByte-i.startByte),i.endByte);return await e.slice(r,a)}},o=await N({fingerprint:`${n}-segment-${i.segmentIndex}`,storageId:t,source:a,uploadLengthDeferred:r,platformService:x,metadata:{parallelUpload:`true`,segmentIndex:i.segmentIndex.toString(),totalSegments:w.length.toString(),parentFingerprint:n},checksumService:u,uploadistaApi:c,logger:l,clientStorage:p,generateId:m,storeFingerprintForResuming:h,openWebSocket:g,closeWebSocket:_,onSuccess:()=>{},onError:e=>l.log(`Segment ${i.segmentIndex} creation error: ${e}`),onStart:e=>{D.set(i.segmentIndex,e.size??0),O()}});if(!o)throw new v({name:`PARALLEL_SEGMENT_CREATION_FAILED`,message:`Failed to create upload segment ${i.segmentIndex}`});return{segment:{uploadId:o.uploadId,uploadIdStorageKey:o.uploadIdStorageKey,segmentIndex:i.segmentIndex,startByte:i.startByte,endByte:i.endByte,offset:o.offset,abortController:b.create(),retryTimeout:null},source:a}}));T.segments=i.map(e=>e.segment),C.onStart?.({uploadId:`parallel-${T.segments.map(e=>e.uploadId).join(`,`)}`,size:e.size});let a=i.map(async({segment:e,source:t})=>{try{await M({uploadId:e.uploadId,offset:e.offset,source:t,uploadLengthDeferred:r,abortController:e.abortController,retryDelays:o,smartChunker:s,uploadistaApi:c,platformService:x,logger:l,smartChunking:d,metrics:f,onProgress:(t,n,r)=>{E.set(e.segmentIndex,n),r&&D.set(e.segmentIndex,r),O()},onChunkComplete:(e,t,n)=>{C.onChunkComplete&&C.onChunkComplete(e,t,n)},onSuccess:t=>{l.log(`Segment ${e.segmentIndex} completed successfully`),E.set(e.segmentIndex,D.get(e.segmentIndex)??0),O()},onShouldRetry:(t,n)=>(l.log(`Segment ${e.segmentIndex} retry attempt ${n}: ${t}`),n<(o?.length??0)),onRetry:t=>{e.retryTimeout=t},onError:t=>{throw l.log(`Segment ${e.segmentIndex} failed: ${t}`),t}})}catch(t){throw l.log(`Segment ${e.segmentIndex} upload failed: ${t}`),new v({name:`PARALLEL_SEGMENT_UPLOAD_FAILED`,message:`Segment ${e.segmentIndex} upload failed`,cause:t})}});if(await Promise.all(a),T.completed=!0,l.log(`All parallel upload segments completed successfully`),C.onSuccess){let r={id:`parallel-${T.segments.map(e=>e.uploadId).join(`,`)}`,offset:e.size,size:e.size,storage:{id:t,type:`parallel-upload`},metadata:{parallelUpload:`true`,totalSegments:w.length.toString(),fingerprint:n}};C.onSuccess(r)}for(let e of i)e.source.close?.();return{parallelState:T,abort:async()=>{await I(T,l,y,_,x)}}}catch(e){throw T.failed=!0,T.error=e,await I(T,l,y,_,x),C.onError?.(e),e}}async function I(e,t,n,r,i){t.log(`Aborting parallel upload...`);for(let a of e.segments){a.abortController.abort(),a.retryTimeout&&=(i.clearTimeout(a.retryTimeout),null);try{await n(a.uploadId)}catch(e){t.log(`Failed to terminate segment ${a.segmentIndex}: ${e}`)}r(a.uploadId)}e.completed=!1,e.failed=!0,t.log(`Parallel upload aborted`)}async function L(e,t){return new Promise(n=>e.setTimeout(n,t))}async function R(e,t,n,r,i=0){try{if((await t.deleteUpload(e)).status===204)return;throw new v({name:`NETWORK_UNEXPECTED_RESPONSE`,message:`Unexpected response while terminating upload`})}catch(a){if(!w(n,a,i,r))throw a;return await L(n,r?.[i]??0),await R(e,t,n,r,i+1)}}async function z({uploadId:e,uploadIdStorageKey:t,retryTimeout:n,shouldTerminate:r,abortController:i,uploadistaApi:a,platformService:o,retryDelays:s,clientStorage:c}){if(i.abort(),n!=null&&o.clearTimeout(n),!(!r||e==null)&&(await R(e,a,o,s),t!=null))return j(c,t)}var B=class{constructor(e={}){this.chunkHistory=[],this.currentSession={},this.sessionStartTime=0,this.config={maxChunkHistory:e.maxChunkHistory??1e3,enableDetailedMetrics:e.enableDetailedMetrics??!0,performanceThresholds:{slowSpeed:100*1024,fastSpeed:5*1024*1024,highRetryRate:.2,...e.performanceThresholds}}}startSession(e,t,n){this.sessionStartTime=Date.now(),this.currentSession={uploadId:e,totalSize:t,chunksCompleted:0,chunksTotal:Math.ceil(t/(1024*1024)),totalDuration:0,totalRetries:0,adaptiveChunkingEnabled:n,startTime:this.sessionStartTime},this.chunkHistory=[]}recordChunk(e){let t={...e,timestamp:Date.now()};this.chunkHistory.push(t),this.chunkHistory.length>this.config.maxChunkHistory&&(this.chunkHistory=this.chunkHistory.slice(-this.config.maxChunkHistory)),this.currentSession&&t.success&&(this.currentSession.chunksCompleted=(this.currentSession.chunksCompleted||0)+1,this.currentSession.totalDuration=(this.currentSession.totalDuration||0)+t.duration,this.currentSession.totalRetries=(this.currentSession.totalRetries||0)+t.retryCount)}endSession(){if(!this.currentSession.uploadId)return null;let e=Date.now(),t=e-this.sessionStartTime,n=this.chunkHistory.filter(e=>e.success);if(n.length===0)return null;let r=n.map(e=>e.speed),i=r.reduce((e,t)=>e+t,0)/r.length,a=Math.max(...r),o=Math.min(...r),s=n.length/this.chunkHistory.length,c={uploadId:this.currentSession.uploadId||``,totalSize:this.currentSession.totalSize||0,totalDuration:t,chunksCompleted:n.length,chunksTotal:this.chunkHistory.length,averageSpeed:i,peakSpeed:a,minSpeed:o,totalRetries:this.currentSession.totalRetries||0,successRate:s,adaptiveChunkingEnabled:this.currentSession.adaptiveChunkingEnabled||!1,startTime:this.currentSession.startTime||0,endTime:e};return this.currentSession={},c}getCurrentSessionMetrics(){return{...this.currentSession}}getChunkHistory(e){let t=this.chunkHistory.slice();return e?t.slice(-e):t}getPerformanceInsights(){if(this.chunkHistory.length<5)return{overallEfficiency:0,chunkingEffectiveness:0,networkStability:0,recommendations:[`Insufficient data for analysis`],optimalChunkSizeRange:{min:256*1024,max:2*1024*1024}};let e=this.chunkHistory.filter(e=>e.success),t=e.map(e=>e.speed),n=t.length>0?t.reduce((e,t)=>e+t,0)/t.length:0,r=this.calculateVariance(t),i=Math.sqrt(r)/n,a=e.length/this.chunkHistory.length,o=Math.min(1,n/this.config.performanceThresholds.fastSpeed)*.7+a*.3,s=Math.max(0,1-Math.min(1,i));return{overallEfficiency:o,chunkingEffectiveness:this.calculateChunkingEffectiveness(e),networkStability:s,recommendations:this.generateRecommendations(n,a,i),optimalChunkSizeRange:this.calculateOptimalChunkSizeRange(e)}}exportMetrics(){return{session:this.getCurrentSessionMetrics(),chunks:this.getChunkHistory(),insights:this.getPerformanceInsights()}}reset(){this.chunkHistory=[],this.currentSession={},this.sessionStartTime=0}calculateVariance(e){if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t,0)/e.length;return e.map(e=>(e-t)**2).reduce((e,t)=>e+t,0)/e.length}calculateChunkingEffectiveness(e){if(e.length<3)return .5;let t=this.groupChunksBySize(e);if(Object.keys(t).length<2)return .5;let n=Object.values(t).map(e=>{let t=e.map(e=>e.speed),n=t.reduce((e,t)=>e+t,0)/t.length,r=this.calculateVariance(t);return Math.sqrt(r)/n}),r=n.reduce((e,t)=>e+t,0)/n.length;return Math.max(0,1-Math.min(1,r))}groupChunksBySize(e){let t={};return e.forEach(e=>{let n;n=e.size<128*1024?`64KB`:e.size<256*1024?`128KB`:e.size<512*1024?`256KB`:e.size<1024*1024?`512KB`:e.size<2*1024*1024?`1MB`:e.size<4*1024*1024?`2MB`:e.size<8*1024*1024?`4MB`:`8MB+`,t[n]||(t[n]=[]);let r=t[n];r&&r.push(e)}),t}generateRecommendations(e,t,n){let r=[];return e<this.config.performanceThresholds.slowSpeed&&r.push(`Consider using smaller chunk sizes for better performance on slow connections`),e>this.config.performanceThresholds.fastSpeed&&r.push(`Network is fast - larger chunk sizes may improve efficiency`),t<.9&&r.push(`High failure rate detected - consider more conservative chunking strategy`),n>.5&&r.push(`Network appears unstable - smaller, more frequent chunks may be more reliable`),n<.2&&e>this.config.performanceThresholds.slowSpeed&&r.push(`Stable network detected - larger chunks may improve efficiency`),r.length===0&&r.push(`Performance appears optimal with current configuration`),r}calculateOptimalChunkSizeRange(e){if(e.length<5)return{min:256*1024,max:2*1024*1024};let t=e.slice().sort((e,t)=>t.speed-e.speed).slice(0,Math.ceil(e.length*.3)).map(e=>e.size),n=Math.min(...t),r=Math.max(...t);return{min:Math.max(64*1024,n),max:Math.min(32*1024*1024,r)}}};function V(e){return new t(e.getCapabilities(),t=>e.validateUploadStrategy(t))}function te({capabilities:e,fileSize:t,chunkSize:n,parallelUploads:r,uploadLengthDeferred:i,strategyConfig:a,logger:o}){if(a?.enableCapabilityNegotiation!==!1){let i=V(new f(e)),s={fileSize:t||0,preferredStrategy:a?.preferredStrategy===`auto`?void 0:a?.preferredStrategy,preferredChunkSize:n,parallelUploads:r,minChunkSizeForParallel:a?.minFileSizeForParallel||10*1024*1024},c=i.negotiateStrategy(s);o.log(`Upload strategy negotiated: ${c.strategy}`);for(let e of c.reasoning)o.log(` - ${e}`);for(let e of c.warnings)o.log(` Warning: ${e}`);return a?.onStrategySelected?.({chosen:c.strategy,chunkSize:c.chunkSize,parallelUploads:c.parallelUploads,reasoning:c.reasoning,warnings:c.warnings}),c}else{let e=r>1&&t&&t>(a?.minFileSizeForParallel||10*1024*1024)&&!i;return{strategy:e?`parallel`:`single`,chunkSize:n,parallelUploads:e?r:1,reasoning:[`Legacy strategy selection: ${e?`parallel`:`single`}`],warnings:[]}}}function H(e,t=p,n){let r=[],i=[],a=V(new f(t)).validateConfiguration({fileSize:0,preferredStrategy:e.uploadStrategy?.preferredStrategy===`auto`?void 0:e.uploadStrategy?.preferredStrategy,preferredChunkSize:e.chunkSize,parallelUploads:e.parallelUploads});if(a.valid||r.push(...a.errors),e.parallelUploads&&e.parallelUploads<1&&r.push(`parallelUploads must be at least 1`),e.chunkSize&&e.chunkSize<1024&&i.push(`Chunk size below 1KB may impact performance`),e.uploadStrategy?.preferredStrategy===`parallel`&&!e.parallelUploads&&i.push(`Parallel strategy requested but parallelUploads not configured`),r.length>0){n.log(`Configuration validation errors:`);for(let e of r)n.log(` Error: ${e}`)}if(i.length>0){n.log(`Configuration validation warnings:`);for(let e of i)n.log(` Warning: ${e}`)}return{valid:r.length===0,errors:r,warnings:i}}function ne(e,t){let n=H(e,p,t);if(!n.valid){let e=`Upload client configuration validation failed: ${n.errors.join(`, `)}`;throw t.log(e),new v({name:`UPLOAD_SIZE_NOT_SPECIFIED`,message:e})}}const U=(e,t)=>e&&{FILE_NOT_FOUND:`UPLOAD_NOT_FOUND`,UPLOAD_ID_NOT_FOUND:`UPLOAD_NOT_FOUND`,FLOW_JOB_NOT_FOUND:`JOB_NOT_FOUND`,FLOW_NODE_ERROR:`FLOW_RUN_FAILED`,FLOW_STRUCTURE_ERROR:`FLOW_RUN_FAILED`,FLOW_CYCLE_ERROR:`FLOW_RUN_FAILED`,FLOW_INPUT_VALIDATION_ERROR:`FLOW_RUN_FAILED`,FLOW_OUTPUT_VALIDATION_ERROR:`FLOW_RUN_FAILED`,VALIDATION_ERROR:`CREATE_UPLOAD_FAILED`,DATASTORE_NOT_FOUND:`FLOW_RUN_FAILED`}[e]||t;function W(e,t,{httpClient:n,logger:r,authManager:i,webSocketFactory:o}){let s=i?new a(n,i):n,c=`${e}/${t}/api/upload`,l=`${e}/${t}/api/flow`,u=`${e}/${t}/api/jobs`,d=e.replace(`http`,`ws`),f=`${d}/uploadista/ws/upload`,m=`${d}/uploadista/ws/flow`,h=async(e,t)=>{if(r?.log(`Getting auth token for WebSocket (jobId: ${t})`),`attachToken`in e){r?.log(`Detected UploadistaCloudAuthManager, calling attachToken`);let n=(await e.attachToken({},t)).Authorization;if(n?.startsWith(`Bearer `))return r?.log(`Successfully extracted Bearer token from UploadistaCloudAuthManager`),n.substring(7);r?.log(`No valid Authorization header from UploadistaCloudAuthManager: ${n}`)}if(`attachCredentials`in e){r?.log(`Detected DirectAuthManager, calling attachCredentials`);let t=(await e.attachCredentials({})).Authorization;if(t)return r?.log(`Successfully extracted Authorization header from DirectAuthManager`),t.startsWith(`Bearer `)?t.substring(7):t;r?.log(`No Authorization header from DirectAuthManager`)}return r?.log(`No auth token could be extracted from auth manager`),null};return{getUpload:async e=>{let t=await s.request(`${c}/${e}`);if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`UPLOAD_NOT_FOUND`),i=n.error||n.message||`Upload ${e} not found`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}let n=await t.json();return{status:t.status,upload:n}},deleteUpload:async e=>{let t=await s.request(`${c}/${e}`,{method:`DELETE`});if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`DELETE_UPLOAD_FAILED`),i=n.error||n.message||`Failed to delete upload ${e}`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}return{status:t.status}},createUpload:async e=>{r?.log(`createUpload ${JSON.stringify(e)}`);let t=await s.request(c,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({})),n=U(e.code,`CREATE_UPLOAD_FAILED`),r=e.error||e.message||`Failed to create upload`;throw new v({name:n,message:e.code?`${r} (${e.code})`:r,status:t.status})}let n=await t.json();return r?.log(JSON.stringify(n)),{status:t.status,upload:n}},uploadChunk:async(e,t,{abortController:n})=>{try{let r=await s.request(`${c}/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/octet-stream`},body:t,signal:n?.signal});if(!r.ok){let e=await r.json().catch(()=>({}));throw new v({name:`NETWORK_ERROR`,message:e.error||e.message||`Unknown network error`,status:r.status})}let i=await r.json();return{status:r.status,upload:i}}catch(e){throw e instanceof v?e:new v({name:`NETWORK_ERROR`,message:`Network error`,cause:e})}},getFlow:async e=>{let t=await s.request(`${l}/${e}`);if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`FLOW_NOT_FOUND`),i=n.error||n.message||`Flow ${e} not found`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}let n=await t.json();return r?.log(`getFlow: ${e}`),{status:t.status,flow:n}},runFlow:async(e,t,n)=>{r?.log(`runFlow: ${e} with storage: ${t}`);let i=await s.request(`${l}/${e}/${t}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({inputs:n})});if(!i.ok){let t=await i.json().catch(()=>({})),n=U(t.code,`FLOW_RUN_FAILED`),r=t.error||t.message||`Failed to run flow ${e}`;throw new v({name:n,message:t.code?`${r} (${t.code})`:r,status:i.status})}let a=await i.json();return r?.log(`runFlow response: ${JSON.stringify(a)}`),{status:i.status,job:a}},resumeFlow:async(e,t,n,r)=>{let i=r?.contentType||`application/json`,a;a=i===`application/octet-stream`?n:JSON.stringify({newData:n});let o=await s.request(`${u}/${e}/resume/${t}`,{method:`PATCH`,headers:{"Content-Type":i},body:a});if(!o.ok){let t=await o.json().catch(()=>({})),n=U(t.code,`FLOW_RESUMED_FAILED`),r=t.error||t.message||`Failed to resume flow for job ${e}`;throw new v({name:n,message:t.code?`${r} (${t.code})`:r,status:o.status})}return await o.json()},pauseFlow:async e=>{let t=await s.request(`${u}/${e}/pause`,{method:`POST`});if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`FLOW_PAUSE_FAILED`),i=n.error||n.message||`Failed to pause flow for job ${e}`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}let n=await t.json();return r?.log(`Flow paused: ${e}, status: ${n.status}`),n},cancelFlow:async e=>{let t=await s.request(`${u}/${e}/cancel`,{method:`POST`});if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`FLOW_CANCEL_FAILED`),i=n.error||n.message||`Failed to cancel flow for job ${e}`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}let n=await t.json();return r?.log(`Flow cancelled: ${e}, status: ${n.status}`),n},getJobStatus:async e=>{let t=await s.request(`${u}/${e}/status`);if(!t.ok){let n=await t.json().catch(()=>({})),r=U(n.code,`JOB_NOT_FOUND`),i=n.error||n.message||`Job ${e} not found`;throw new v({name:r,message:n.code?`${i} (${n.code})`:i,status:t.status})}return await t.json()},openUploadWebSocket:async e=>{let t=`${f}/${e}`;if(i)try{let n=await h(i,e);n?(t+=`?token=${encodeURIComponent(n)}`,r?.log(`WebSocket token attached for upload: ${e}`)):r?.log(`No token for upload WebSocket (using cookie-based auth): ${e}`)}catch(t){let n=t instanceof Error?t.message:String(t);r?.log(`Error getting auth token for upload WebSocket: ${n}`),r?.log(`Proceeding with cookie-based authentication for upload WebSocket: ${e}`)}let n=o.create(t);return n.onopen=()=>{r?.log(`Upload WebSocket connection opened for: ${e}`)},n.onclose=()=>{r?.log(`Upload WebSocket connection closed for: ${e}`)},n.onerror=t=>{r?.log(`Upload WebSocket error for ${e}: ${t}`)},n},openFlowWebSocket:async e=>{let t=`${m}/${e}`;if(i)try{let n=await h(i,e);n?(t+=`?token=${encodeURIComponent(n)}`,r?.log(`WebSocket token attached for flow job: ${e}`)):r?.log(`No token for flow WebSocket (using cookie-based auth): ${e}`)}catch(t){let n=t instanceof Error?t.message:String(t);r?.log(`Error getting auth token for flow WebSocket: ${n}`),r?.log(`Proceeding with cookie-based authentication for flow WebSocket: ${e}`)}let n=o.create(t);return n.onopen=()=>{r?.log(`Flow WebSocket connection opened for job: ${e}`)},n.onclose=()=>{r?.log(`Flow WebSocket connection closed for job: ${e}`)},n.onerror=t=>{r?.log(`Flow WebSocket error for job ${e}: ${t}`)},n},closeWebSocket:e=>{e.close()},getConnectionMetrics:()=>s.getMetrics(),getDetailedConnectionMetrics:()=>s.getDetailedMetrics(),warmupConnections:async e=>s.warmupConnections(e),getCapabilities:async e=>{let t=`${c}/capabilities?storageId=${encodeURIComponent(e)}`;try{let e=await s.request(t,{method:`GET`,headers:{"Content-Type":`application/json`}});return e.ok?(await e.json()).capabilities:(r?.log(`Failed to fetch capabilities: ${e.status} ${e.statusText}`),p)}catch(e){return r?.log(`Failed to fetch server capabilities, using defaults: ${e}`),p}}}}var G=class{constructor(e,t,n){this.uploadistaApi=e,this.logger=t,this.onEvent=n,this.uploadWebsockets=new Map,this.flowWebsockets=new Map}async openUploadWebSocket(e){this.closeUploadWebSocket(e);let t=await this.uploadistaApi.openUploadWebSocket(e);return this.uploadWebsockets.set(e,t),t.onmessage=e=>{try{let t=n.safeParse(JSON.parse(e.data));t.success?t.data.type===`upload_event`&&this.onEvent?.(t.data.payload):this.logger.error(`Error parsing upload event: ${t.error.message}`)}catch(e){this.logger.error(`Error parsing upload event: ${e}`)}},t.onerror=t=>{this.logger.error(`Upload WebSocket error for ${e}: ${t}`)},t.onclose=t=>{this.logger.log(`Upload WebSocket closed for ${e}, \n code: ${t.code}, reason: ${t.reason}`),this.uploadWebsockets.delete(e)},t}async openFlowWebSocket(e){this.closeFlowWebSocket(e);let t=await this.uploadistaApi.openFlowWebSocket(e);return this.flowWebsockets.set(e,t),t.onmessage=t=>{try{let n=JSON.parse(t.data);switch(n.type){case`connection`:this.logger.log(`Flow WebSocket connected for job: ${n.id}`);break;case`subscribed`:this.logger.log(`Flow WebSocket subscribed for job: ${n.payload.jobId}`);break;case`error`:this.logger.error(`Flow WebSocket error: ${n.message} for job ${e} with code ${n.code}`);break;case`pong`:this.logger.log(`Flow WebSocket pong received for job: ${e}`);break;case`flow_event`:this.onEvent?.(n.payload);break;default:this.logger.warn(`Unknown flow WebSocket message type: ${n.type}`)}}catch(e){this.logger.error(`Error parsing flow WebSocket message:${e}`)}},t.onerror=t=>{this.logger.error(`Flow WebSocket error for job ${e}: ${t}`)},t.onclose=t=>{this.logger.log(`Flow WebSocket closed for job ${e}, \n code: ${t.code}, reason: ${t.reason}`),this.flowWebsockets.delete(e)},t}async openWebSocket(e){return e.startsWith(`upload-`)||e.includes(`upload`)?await this.openUploadWebSocket(e):await this.openFlowWebSocket(e)}closeUploadWebSocket(e){let t=this.uploadWebsockets.get(e);t&&(this.uploadistaApi.closeWebSocket(t),this.uploadWebsockets.delete(e))}closeFlowWebSocket(e){let t=this.flowWebsockets.get(e);t&&(this.uploadistaApi.closeWebSocket(t),this.flowWebsockets.delete(e))}closeWebSocket(e){this.closeUploadWebSocket(e),this.closeFlowWebSocket(e)}closeAll(){for(let[e,t]of this.uploadWebsockets.entries())this.uploadistaApi.closeWebSocket(t),this.uploadWebsockets.delete(e);for(let[e,t]of this.flowWebsockets.entries())this.uploadistaApi.closeWebSocket(t),this.flowWebsockets.delete(e)}sendPing(e){let t=this.flowWebsockets.get(e);return t&&t.readyState===t.OPEN?(t.send(JSON.stringify({type:`ping`,timestamp:new Date().toISOString()})),!0):!1}getUploadWebSocket(e){return this.uploadWebsockets.get(e)}getFlowWebSocket(e){return this.flowWebsockets.get(e)}isUploadConnected(e){let t=this.uploadWebsockets.get(e);return t?.readyState===t?.OPEN}isFlowConnected(e){let t=this.flowWebsockets.get(e);return t?.readyState===t?.OPEN}isConnected(e){return this.isUploadConnected(e)||this.isFlowConnected(e)}getConnectionCount(){return this.uploadWebsockets.size+this.flowWebsockets.size}getConnectionCountByType(){return{upload:this.uploadWebsockets.size,flow:this.flowWebsockets.size,total:this.uploadWebsockets.size+this.flowWebsockets.size}}};const K={maxConnectionsPerHost:8,connectionTimeout:2e4,keepAliveTimeout:9e4,enableHttp2:!0,retryOnConnectionError:!0};function q({baseUrl:e,uploadistaBasePath:t=`uploadista`,storageId:n,retryDelays:r=[1e3,3e3,5e3],chunkSize:i,parallelUploads:a=1,parallelChunkSize:o,uploadStrategy:u,smartChunking:f,networkMonitoring:h,uploadMetrics:g,checksumService:v,onEvent:y,generateId:b,httpClient:S,logger:C=d(!0),fileReader:w,fingerprintService:T,clientStorage:A,storeFingerprintForResuming:j=!0,webSocketFactory:N,abortControllerFactory:P,platformService:I,auth:L}){let V=e.replace(/\/$/,``),U=L?L.mode===`direct`?new s(L,I,C):new l(L,S):new c;L&&C.log(`Authentication enabled in ${L.mode} mode${L.mode===`uploadista-cloud`?` (server: ${L.authServerUrl})`:``}`);let K=W(V,t,{logger:C,httpClient:S,authManager:U,webSocketFactory:N}),q=new m(h),J=new B(g),Y=null,X=async()=>Y||(Y=await K.getCapabilities(n),Y),Z,Q=async()=>{if(Z)return Z;let e=await X(),t=e.minChunkSize&&e.maxChunkSize&&e.optimalChunkSize?{minChunkSize:e.minChunkSize,maxChunkSize:e.maxChunkSize,optimalChunkSize:e.optimalChunkSize,requiresOrderedChunks:e.requiresOrderedChunks}:void 0;return Z=new _(q,{enabled:!0,...f,fallbackChunkSize:i,datastoreConstraints:t}),C.log(`Smart chunker initialized with datastore constraints: ${JSON.stringify(t)}`),Z},$=new G(K,C,y);return ne({baseUrl:V,storageId:n,chunkSize:i,parallelUploads:a,parallelChunkSize:o,uploadStrategy:u},C),{upload:async(e,{uploadLengthDeferred:s=!1,uploadSize:c,onProgress:l,onChunkComplete:d,onSuccess:p,onShouldRetry:m,onError:h}={})=>{let g=null,_=null,y=await T.computeFingerprint(e,`${V}/${t}/api/upload`);if(C.log(`fingerprint: ${y}`),!y)throw Error(`unable calculate fingerprint for this input file`);let S=await O(A,y);if(S.length>0&&S[0]!=null){let e=k(S[0]);_=e.clientStorageKey,g=e.uploadId}let E=await w.openFile(e,i),D=x(E.size,{uploadLengthDeferred:s,uploadSize:c});E.size=D;let N=await Q();f?.enabled!==!1&&J.startSession(y,D||0,!0);let L=te({capabilities:await X(),fileSize:D,chunkSize:i,parallelUploads:a,uploadLengthDeferred:s,strategyConfig:u,logger:C});if(L.strategy===`parallel`){C.log(`Using parallel upload with ${L.parallelUploads} streams`);let e=await ee({checksumService:v,source:E,storageId:n,fingerprint:y,uploadLengthDeferred:s,parallelUploads:L.parallelUploads,parallelChunkSize:o,retryDelays:r,smartChunker:N,uploadistaApi:K,logger:C,smartChunking:f,metrics:J,clientStorage:A,generateId:b,storeFingerprintForResuming:j,abortControllerFactory:P,platformService:I,openWebSocket:e=>($.openUploadWebSocket(e),null),closeWebSocket:e=>$.closeUploadWebSocket(e),terminate:e=>R(e,K,I,r),onProgress:l,onChunkComplete:d,onSuccess:p,onError:h});if(e)return{abort:async()=>{await e.abort()}};C.log(`Parallel upload failed, falling back to single upload`)}let B=await F({source:E,storageId:n,uploadId:g,platformService:I,uploadIdStorageKey:_,checksumService:v,fingerprint:y,uploadLengthDeferred:s,uploadistaApi:K,logger:C,clientStorage:A,generateId:b,storeFingerprintForResuming:j,openWebSocket:e=>($.openUploadWebSocket(e),null),closeWebSocket:e=>$.closeUploadWebSocket(e),onProgress:l,onChunkComplete:d,onSuccess:p,onError:h});if(B){let e=P.create(),{uploadId:t,uploadIdStorageKey:n,offset:i}=B,a=null;return M({platformService:I,uploadId:t,offset:i,source:E,uploadLengthDeferred:s,retryDelays:r,smartChunker:N,uploadistaApi:K,logger:C,smartChunking:f,metrics:J,abortController:e,onProgress:l,onChunkComplete:d,onSuccess:p,onShouldRetry:m,onRetry:e=>{a=e},onError:h}),{abort:()=>{z({platformService:I,uploadId:t,uploadIdStorageKey:n,retryTimeout:a,shouldTerminate:!0,abortController:e,uploadistaApi:K,retryDelays:r,clientStorage:A})}}}return{abort:()=>{}}},uploadWithFlow:async(e,n,{onProgress:a,onChunkComplete:o,onSuccess:s,onShouldRetry:c,onJobStart:l,onError:u}={})=>{let d=await w.openFile(e,i),p=await Q();if(f?.enabled!==!1){let n=await T.computeFingerprint(e,`${V}/${t}/api/flow`);J.startSession(n||`unknown`,d.size||0,!0)}let m=await E({source:d,flowConfig:n,uploadistaApi:K,logger:C,platformService:I,openWebSocket:e=>$.openFlowWebSocket(e),closeWebSocket:e=>$.closeWebSocket(e),onProgress:a,onChunkComplete:o,onSuccess:s,onJobStart:l,onError:u});if(!m)return{abort:async()=>{},pause:async()=>{throw Error(`Flow upload not initialized`)},jobId:``};let{jobId:h,uploadFile:g,inputNodeId:_}=m,v=P.create();await $.openUploadWebSocket(g.id);let y=null;return D({jobId:h,uploadFile:g,inputNodeId:_,offset:g.offset,source:d,retryDelays:r,smartChunker:p,uploadistaApi:K,logger:C,smartChunking:f,metrics:J,platformService:I,abortController:v,onProgress:a,onChunkComplete:o,onSuccess:s,onShouldRetry:c,onRetry:e=>{y=e},onError:u}),{abort:async()=>{try{await K.cancelFlow(h),C.log(`Flow cancelled on server: ${h}`)}catch(e){C.log(`Failed to cancel flow on server: ${e}`)}v.abort(),y&&I.clearTimeout(y),$.closeWebSocket(h),$.closeUploadWebSocket(g.id)},pause:()=>K.pauseFlow(h),jobId:h}},abort:e=>z(e),getFlow:async e=>{let{status:t,flow:n}=await K.getFlow(e);return{status:t,flow:n}},runFlow:async({flowId:e,inputs:t,storageId:r})=>{let{status:i,job:a}=await K.runFlow(e,r||n,t);return{status:i,job:a}},resumeFlow:async({jobId:e,nodeId:t,newData:n,contentType:r})=>K.resumeFlow(e,t,n,{contentType:r}),pauseFlow:async e=>K.pauseFlow(e),cancelFlow:async e=>K.cancelFlow(e),getJobStatus:async e=>K.getJobStatus(e),openUploadWebSocket:e=>$.openUploadWebSocket(e),openFlowWebSocket:e=>$.openFlowWebSocket(e),openWebSocket:e=>$.openWebSocket(e),closeWebSocket:e=>$.closeWebSocket(e),closeAllWebSockets:()=>$.closeAll(),sendPing:e=>$.sendPing(e),isWebSocketConnected:e=>$.isConnected(e),getWebSocketConnectionCount:()=>$.getConnectionCount(),getWebSocketConnectionCountByType:()=>$.getConnectionCountByType(),getNetworkMetrics:()=>q.getCurrentMetrics(),getNetworkCondition:()=>q.getNetworkCondition(),getChunkingInsights:()=>J.getPerformanceInsights(),exportMetrics:()=>J.exportMetrics(),getConnectionMetrics:()=>K.getConnectionMetrics(),getDetailedConnectionMetrics:()=>K.getDetailedConnectionMetrics(),warmupConnections:e=>K.warmupConnections(e),getConnectionPoolingInsights:async()=>(await Q()).getConnectionPoolingInsights(),resetMetrics:async()=>{q.reset(),(await Q()).reset(),J.reset()},validateConfiguration:e=>H(e,p,C),validateConfigurationAsync:async e=>{let t=[],n=[],r=await K.getCapabilities(e.storageId),i=H(e,r,C);return t.push(...i.errors),n.push(...i.warnings),{valid:t.length===0,errors:t,warnings:n,capabilities:r}},getCapabilities:X}}const J=r.object({size:r.number().nullable(),metadata:r.record(r.string(),r.union([r.string(),r.number(),r.boolean()])),creationTime:r.string(),uploadId:r.string().optional(),parallelUploadUrls:r.array(r.string()).optional(),clientStorageKey:r.string()});function Y(e){return{findAllUploads:async()=>{let t=await e.find(`uploadista::`);return Object.values(t).map(e=>J.parse(JSON.parse(e)))},findUploadsByFingerprint:async t=>{let n=await e.find(`uploadista::${t}`);return Object.values(n).map(e=>J.parse(JSON.parse(e)))},removeUpload:t=>e.removeItem(t),addUpload:async(t,n,{generateId:r})=>{let i=`uploadista::${t}::${r.generate()}`;return await e.setItem(i,JSON.stringify(n)),i}}}function X(){let e=new Map;return{async getItem(t){return e.get(t)??null},async setItem(t,n){e.set(t,n)},async removeItem(t){e.delete(t)},async findAll(){return Object.fromEntries(e.entries())},async find(t){return Object.fromEntries(Array.from(e.entries()).filter(([e])=>e.startsWith(t)))}}}export{i as ChunkBuffer,m as NetworkMonitor,v as UploadistaError,G as UploadistaWebSocketManager,Y as createClientStorage,X as createInMemoryStorageService,d as createLogger,W as createUploadistaApi,q as createUploadistaClient,K as defaultConnectionPoolingConfig,J as previousUploadSchema,L as wait};
2
2
  //# sourceMappingURL=index.js.map