@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 +53 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +19 -7
- package/src/auth/__tests__/auth-http-client.test.ts +95 -41
- package/src/auth/__tests__/{saas-auth.test.ts → uploadista-cloud-auth.test.ts} +129 -92
- package/src/auth/auth-http-client.ts +10 -7
- package/src/auth/index.ts +1 -1
- package/src/auth/types.ts +9 -14
- package/src/auth/{saas-auth.ts → uploadista-cloud-auth.ts} +5 -5
- package/src/client/create-uploadista-client.ts +44 -13
- package/src/client/uploadista-api.ts +97 -12
- package/src/error.ts +3 -1
- package/src/upload/flow-upload.ts +2 -2
- package/tsconfig.tsbuildinfo +0 -1
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" | "
|
|
550
|
-
getType(): "direct" | "
|
|
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
|
-
*
|
|
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: '
|
|
614
|
+
* mode: 'uploadista-cloud',
|
|
615
615
|
* authServerUrl: 'https://auth.myapp.com/token',
|
|
616
|
-
*
|
|
617
|
-
* username: await getUsername(),
|
|
618
|
-
* password: await getPassword()
|
|
619
|
-
* })
|
|
616
|
+
* clientId: 'my-client-id'
|
|
620
617
|
* }
|
|
621
618
|
* ```
|
|
622
619
|
*/
|
|
623
|
-
type
|
|
624
|
-
mode: "
|
|
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
|
-
*
|
|
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
|
-
* -
|
|
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 |
|
|
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/
|
|
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
|
-
*
|
|
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
|
|
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:
|
|
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 |
|
|
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
|
-
|
|
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" | "
|
|
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
|
-
* -
|
|
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
|
|
2193
|
+
* @example UploadistaCloud mode with auth server
|
|
2176
2194
|
* ```typescript
|
|
2177
2195
|
* auth: {
|
|
2178
|
-
* mode: '
|
|
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,
|
|
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:
|
|
2392
|
+
job: FlowJob;
|
|
2374
2393
|
}>;
|
|
2375
|
-
|
|
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<
|
|
2386
|
-
|
|
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(),
|
|
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()
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":"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"}
|
|
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
|