@capsara/sdk 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +74 -0
- package/README.md +230 -0
- package/dist/builder/capsa-builder.d.ts +167 -0
- package/dist/builder/capsa-builder.d.ts.map +1 -0
- package/dist/builder/capsa-builder.js +489 -0
- package/dist/builder/capsa-builder.js.map +1 -0
- package/dist/client/capsara-client.d.ts +96 -0
- package/dist/client/capsara-client.d.ts.map +1 -0
- package/dist/client/capsara-client.js +266 -0
- package/dist/client/capsara-client.js.map +1 -0
- package/dist/errors/account-error.d.ts +73 -0
- package/dist/errors/account-error.d.ts.map +1 -0
- package/dist/errors/account-error.js +155 -0
- package/dist/errors/account-error.js.map +1 -0
- package/dist/errors/audit-error.d.ts +34 -0
- package/dist/errors/audit-error.d.ts.map +1 -0
- package/dist/errors/audit-error.js +93 -0
- package/dist/errors/audit-error.js.map +1 -0
- package/dist/errors/auth-error.d.ts +38 -0
- package/dist/errors/auth-error.d.ts.map +1 -0
- package/dist/errors/auth-error.js +87 -0
- package/dist/errors/auth-error.js.map +1 -0
- package/dist/errors/capsa-error.d.ts +64 -0
- package/dist/errors/capsa-error.d.ts.map +1 -0
- package/dist/errors/capsa-error.js +172 -0
- package/dist/errors/capsa-error.js.map +1 -0
- package/dist/errors/capsara-error.d.ts +52 -0
- package/dist/errors/capsara-error.d.ts.map +1 -0
- package/dist/errors/capsara-error.js +83 -0
- package/dist/errors/capsara-error.js.map +1 -0
- package/dist/errors/index.d.ts +8 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +7 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/capsa-cache.d.ts +49 -0
- package/dist/internal/capsa-cache.d.ts.map +1 -0
- package/dist/internal/capsa-cache.js +118 -0
- package/dist/internal/capsa-cache.js.map +1 -0
- package/dist/internal/config/http-client.d.ts +37 -0
- package/dist/internal/config/http-client.d.ts.map +1 -0
- package/dist/internal/config/http-client.js +63 -0
- package/dist/internal/config/http-client.js.map +1 -0
- package/dist/internal/config/retry-interceptor.d.ts +18 -0
- package/dist/internal/config/retry-interceptor.d.ts.map +1 -0
- package/dist/internal/config/retry-interceptor.js +103 -0
- package/dist/internal/config/retry-interceptor.js.map +1 -0
- package/dist/internal/crypto/compression.d.ts +15 -0
- package/dist/internal/crypto/compression.d.ts.map +1 -0
- package/dist/internal/crypto/compression.js +34 -0
- package/dist/internal/crypto/compression.js.map +1 -0
- package/dist/internal/crypto/key-generator.d.ts +23 -0
- package/dist/internal/crypto/key-generator.d.ts.map +1 -0
- package/dist/internal/crypto/key-generator.js +65 -0
- package/dist/internal/crypto/key-generator.js.map +1 -0
- package/dist/internal/crypto/primitives.d.ts +67 -0
- package/dist/internal/crypto/primitives.d.ts.map +1 -0
- package/dist/internal/crypto/primitives.js +230 -0
- package/dist/internal/crypto/primitives.js.map +1 -0
- package/dist/internal/crypto/signatures.d.ts +30 -0
- package/dist/internal/crypto/signatures.d.ts.map +1 -0
- package/dist/internal/crypto/signatures.js +153 -0
- package/dist/internal/crypto/signatures.js.map +1 -0
- package/dist/internal/decryptor/capsa-decryptor.d.ts +89 -0
- package/dist/internal/decryptor/capsa-decryptor.d.ts.map +1 -0
- package/dist/internal/decryptor/capsa-decryptor.js +263 -0
- package/dist/internal/decryptor/capsa-decryptor.js.map +1 -0
- package/dist/internal/http-factory.d.ts +78 -0
- package/dist/internal/http-factory.d.ts.map +1 -0
- package/dist/internal/http-factory.js +201 -0
- package/dist/internal/http-factory.js.map +1 -0
- package/dist/internal/index.d.ts +5 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +5 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/internal/retry-executor.d.ts +74 -0
- package/dist/internal/retry-executor.d.ts.map +1 -0
- package/dist/internal/retry-executor.js +204 -0
- package/dist/internal/retry-executor.js.map +1 -0
- package/dist/internal/services/account-service.d.ts +56 -0
- package/dist/internal/services/account-service.d.ts.map +1 -0
- package/dist/internal/services/account-service.js +114 -0
- package/dist/internal/services/account-service.js.map +1 -0
- package/dist/internal/services/audit-service.d.ts +25 -0
- package/dist/internal/services/audit-service.d.ts.map +1 -0
- package/dist/internal/services/audit-service.js +43 -0
- package/dist/internal/services/audit-service.js.map +1 -0
- package/dist/internal/services/auth-service.d.ts +44 -0
- package/dist/internal/services/auth-service.d.ts.map +1 -0
- package/dist/internal/services/auth-service.js +170 -0
- package/dist/internal/services/auth-service.js.map +1 -0
- package/dist/internal/services/capsa-service.d.ts +40 -0
- package/dist/internal/services/capsa-service.d.ts.map +1 -0
- package/dist/internal/services/capsa-service.js +82 -0
- package/dist/internal/services/capsa-service.js.map +1 -0
- package/dist/internal/services/download-service.d.ts +62 -0
- package/dist/internal/services/download-service.d.ts.map +1 -0
- package/dist/internal/services/download-service.js +114 -0
- package/dist/internal/services/download-service.js.map +1 -0
- package/dist/internal/services/key-service.d.ts +28 -0
- package/dist/internal/services/key-service.d.ts.map +1 -0
- package/dist/internal/services/key-service.js +45 -0
- package/dist/internal/services/key-service.js.map +1 -0
- package/dist/internal/services/limits-service.d.ts +30 -0
- package/dist/internal/services/limits-service.d.ts.map +1 -0
- package/dist/internal/services/limits-service.js +73 -0
- package/dist/internal/services/limits-service.js.map +1 -0
- package/dist/internal/services/upload-service.d.ts +61 -0
- package/dist/internal/services/upload-service.d.ts.map +1 -0
- package/dist/internal/services/upload-service.js +258 -0
- package/dist/internal/services/upload-service.js.map +1 -0
- package/dist/internal/types.d.ts +74 -0
- package/dist/internal/types.d.ts.map +1 -0
- package/dist/internal/types.js +3 -0
- package/dist/internal/types.js.map +1 -0
- package/dist/internal/upload/multipart-builder.d.ts +57 -0
- package/dist/internal/upload/multipart-builder.d.ts.map +1 -0
- package/dist/internal/upload/multipart-builder.js +139 -0
- package/dist/internal/upload/multipart-builder.js.map +1 -0
- package/dist/internal/utils/id-generator.d.ts +8 -0
- package/dist/internal/utils/id-generator.d.ts.map +1 -0
- package/dist/internal/utils/id-generator.js +20 -0
- package/dist/internal/utils/id-generator.js.map +1 -0
- package/dist/internal/utils/mimetype-lookup.d.ts +8 -0
- package/dist/internal/utils/mimetype-lookup.d.ts.map +1 -0
- package/dist/internal/utils/mimetype-lookup.js +118 -0
- package/dist/internal/utils/mimetype-lookup.js.map +1 -0
- package/dist/internal/version.d.ts +20 -0
- package/dist/internal/version.d.ts.map +1 -0
- package/dist/internal/version.js +25 -0
- package/dist/internal/version.js.map +1 -0
- package/dist/types/index.d.ts +143 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/** System limits management with caching. */
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { createAxiosConfig, configureRetryInterceptor, DEFAULT_TIMEOUT_CONFIG, } from '../config/http-client.js';
|
|
4
|
+
/**
|
|
5
|
+
* Hardcoded fallback limits (used if API fetch fails)
|
|
6
|
+
* These MUST match the server's FileConstraints in vault.api/src/types/upload.types.ts
|
|
7
|
+
*/
|
|
8
|
+
const FALLBACK_LIMITS = {
|
|
9
|
+
maxFileSize: 50 * 1024 * 1024, // 50MB
|
|
10
|
+
maxFilesPerCapsa: 500, // Matches server's MAX_FILES_PER_CAPSA
|
|
11
|
+
maxTotalSize: 500 * 1024 * 1024, // 500MB
|
|
12
|
+
};
|
|
13
|
+
export class LimitsManager {
|
|
14
|
+
axiosInstance;
|
|
15
|
+
cachedLimits = null;
|
|
16
|
+
cacheTTL = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds
|
|
17
|
+
constructor(baseUrl, timeout, retry) {
|
|
18
|
+
const timeoutConfig = {
|
|
19
|
+
...DEFAULT_TIMEOUT_CONFIG,
|
|
20
|
+
...timeout,
|
|
21
|
+
};
|
|
22
|
+
const axiosConfig = createAxiosConfig(baseUrl, timeoutConfig.apiTimeout, timeoutConfig);
|
|
23
|
+
this.axiosInstance = axios.create(axiosConfig);
|
|
24
|
+
configureRetryInterceptor(this.axiosInstance, retry);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Fetch system limits from API
|
|
28
|
+
* @returns System limits
|
|
29
|
+
*/
|
|
30
|
+
async fetchLimits() {
|
|
31
|
+
try {
|
|
32
|
+
const response = await this.axiosInstance.get('/api/limits');
|
|
33
|
+
return response.data;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// API is down or /limits endpoint doesn't exist - use fallback
|
|
37
|
+
return FALLBACK_LIMITS;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get system limits (from cache or fetch from API)
|
|
42
|
+
* @returns System limits
|
|
43
|
+
*/
|
|
44
|
+
async getLimits() {
|
|
45
|
+
if (this.cachedLimits) {
|
|
46
|
+
const age = Date.now() - this.cachedLimits.cachedAt;
|
|
47
|
+
if (age < this.cacheTTL) {
|
|
48
|
+
return this.cachedLimits.limits;
|
|
49
|
+
}
|
|
50
|
+
this.cachedLimits = null;
|
|
51
|
+
}
|
|
52
|
+
const limits = await this.fetchLimits();
|
|
53
|
+
this.cachedLimits = {
|
|
54
|
+
limits,
|
|
55
|
+
cachedAt: Date.now(),
|
|
56
|
+
};
|
|
57
|
+
return limits;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Clear the limits cache (useful for testing or forcing refresh)
|
|
61
|
+
*/
|
|
62
|
+
clearCache() {
|
|
63
|
+
this.cachedLimits = null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get fallback limits (for reference)
|
|
67
|
+
* @returns Hardcoded fallback limits
|
|
68
|
+
*/
|
|
69
|
+
static getFallbackLimits() {
|
|
70
|
+
return { ...FALLBACK_LIMITS };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=limits-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits-service.js","sourceRoot":"","sources":["../../../src/internal/services/limits-service.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,KAAwB,MAAM,OAAO,CAAC;AAE7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GAEvB,MAAM,0BAA0B,CAAC;AAQlC;;;GAGG;AACH,MAAM,eAAe,GAAiB;IACpC,WAAW,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;IACtC,gBAAgB,EAAE,GAAG,EAAE,uCAAuC;IAC9D,YAAY,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;CAC1C,CAAC;AAEF,MAAM,OAAO,aAAa;IAChB,aAAa,CAAgB;IAC7B,YAAY,GAAwB,IAAI,CAAC;IAChC,QAAQ,GAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,yBAAyB;IAEtF,YAAY,OAAe,EAAE,OAAoC,EAAE,KAAmB;QACpF,MAAM,aAAa,GAAG;YACpB,GAAG,sBAAsB;YACzB,GAAG,OAAO;SACX,CAAC;QAEF,MAAM,WAAW,GAAG,iBAAiB,CACnC,OAAO,EACP,aAAa,CAAC,UAAU,EACxB,aAAa,CACd,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE/C,yBAAyB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAe,aAAa,CAAC,CAAC;YAC3E,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAEpD,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,IAAI,CAAC,YAAY,GAAG;YAClB,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,iBAAiB;QACtB,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** Capsa upload service with batching and retry logic. */
|
|
2
|
+
import { type HttpTimeoutConfig } from '../config/http-client.js';
|
|
3
|
+
import type { RetryConfig, RetryLogger } from '../config/retry-interceptor.js';
|
|
4
|
+
import type { CapsaBuilder } from '../../builder/capsa-builder.js';
|
|
5
|
+
import type { KeyManager } from './key-service.js';
|
|
6
|
+
export interface UploadServiceOptions {
|
|
7
|
+
baseUrl: string;
|
|
8
|
+
keyManager: KeyManager;
|
|
9
|
+
getToken: () => string | null;
|
|
10
|
+
timeoutConfig: HttpTimeoutConfig;
|
|
11
|
+
retryConfig: Required<RetryConfig>;
|
|
12
|
+
logger: RetryLogger;
|
|
13
|
+
maxBatchSize: number;
|
|
14
|
+
userAgent?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SendResult {
|
|
17
|
+
batchId: string;
|
|
18
|
+
successful: number;
|
|
19
|
+
failed: number;
|
|
20
|
+
partialSuccess?: boolean;
|
|
21
|
+
created: Array<{
|
|
22
|
+
packageId: string;
|
|
23
|
+
index: number;
|
|
24
|
+
}>;
|
|
25
|
+
errors?: Array<{
|
|
26
|
+
index: number;
|
|
27
|
+
packageId: string;
|
|
28
|
+
error: string;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
export declare class UploadService {
|
|
32
|
+
private baseUrl;
|
|
33
|
+
private keyManager;
|
|
34
|
+
private getToken;
|
|
35
|
+
private timeoutConfig;
|
|
36
|
+
private retryConfig;
|
|
37
|
+
private logger;
|
|
38
|
+
private maxBatchSize;
|
|
39
|
+
private userAgent;
|
|
40
|
+
constructor(options: UploadServiceOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Send capsas with automatic batch splitting
|
|
43
|
+
* @param builders - Array of CapsaBuilder instances
|
|
44
|
+
* @param creatorId - Creator party ID
|
|
45
|
+
* @returns Send result
|
|
46
|
+
*/
|
|
47
|
+
sendCapsas(builders: CapsaBuilder[], creatorId: string): Promise<SendResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Send capsas in balanced batches
|
|
50
|
+
*/
|
|
51
|
+
private sendInBalancedBatches;
|
|
52
|
+
/**
|
|
53
|
+
* Send multipart request with retry logic
|
|
54
|
+
*/
|
|
55
|
+
private sendWithRetry;
|
|
56
|
+
/**
|
|
57
|
+
* Calculate retry delay
|
|
58
|
+
*/
|
|
59
|
+
private calculateRetryDelay;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=upload-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-service.d.ts","sourceRoot":"","sources":["../../../src/internal/services/upload-service.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAK1D,OAAO,EAA0B,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,iBAAiB,CAAC;IACjC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,oBAAoB;IAWzC;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuBlF;;OAEG;YACW,qBAAqB;IAwJnC;;OAEG;YACW,aAAa;IAsF3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAe5B"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/** Capsa upload service with batching and retry logic. */
|
|
2
|
+
import * as http from 'http';
|
|
3
|
+
import * as https from 'https';
|
|
4
|
+
import { CapsasMultipartBuilder } from '../upload/multipart-builder.js';
|
|
5
|
+
import { createAgentForProtocol } from '../config/http-client.js';
|
|
6
|
+
import { SDK_VERSION, buildUserAgent } from '../version.js';
|
|
7
|
+
export class UploadService {
|
|
8
|
+
baseUrl;
|
|
9
|
+
keyManager;
|
|
10
|
+
getToken;
|
|
11
|
+
timeoutConfig;
|
|
12
|
+
retryConfig;
|
|
13
|
+
logger;
|
|
14
|
+
maxBatchSize;
|
|
15
|
+
userAgent;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.baseUrl = options.baseUrl;
|
|
18
|
+
this.keyManager = options.keyManager;
|
|
19
|
+
this.getToken = options.getToken;
|
|
20
|
+
this.timeoutConfig = options.timeoutConfig;
|
|
21
|
+
this.retryConfig = options.retryConfig;
|
|
22
|
+
this.logger = options.logger;
|
|
23
|
+
this.maxBatchSize = options.maxBatchSize;
|
|
24
|
+
this.userAgent = buildUserAgent(options.userAgent);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Send capsas with automatic batch splitting
|
|
28
|
+
* @param builders - Array of CapsaBuilder instances
|
|
29
|
+
* @param creatorId - Creator party ID
|
|
30
|
+
* @returns Send result
|
|
31
|
+
*/
|
|
32
|
+
async sendCapsas(builders, creatorId) {
|
|
33
|
+
if (builders.length === 0) {
|
|
34
|
+
throw new Error('No capsas provided to send');
|
|
35
|
+
}
|
|
36
|
+
if (builders.length > 500) {
|
|
37
|
+
throw new Error('Send limited to 500 capsas per request');
|
|
38
|
+
}
|
|
39
|
+
// Validate no single capsa exceeds file limit
|
|
40
|
+
const MAX_FILES_PER_BATCH = 500;
|
|
41
|
+
for (let i = 0; i < builders.length; i++) {
|
|
42
|
+
const fileCount = builders[i].getFileCount();
|
|
43
|
+
if (fileCount > MAX_FILES_PER_BATCH) {
|
|
44
|
+
throw new Error(`Capsa at index ${i} has ${fileCount} files, exceeding the batch limit of ${MAX_FILES_PER_BATCH} files.`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return this.sendInBalancedBatches(builders, creatorId);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Send capsas in balanced batches
|
|
51
|
+
*/
|
|
52
|
+
async sendInBalancedBatches(builders, creatorId) {
|
|
53
|
+
const MAX_FILES_PER_BATCH = 500;
|
|
54
|
+
const totalFiles = builders.reduce((sum, builder) => sum + builder.getFileCount(), 0);
|
|
55
|
+
const chunks = [];
|
|
56
|
+
let currentChunk = [];
|
|
57
|
+
let currentChunkFileCount = 0;
|
|
58
|
+
for (const builder of builders) {
|
|
59
|
+
const builderFileCount = builder.getFileCount();
|
|
60
|
+
const wouldExceedCapsaLimit = currentChunk.length >= this.maxBatchSize;
|
|
61
|
+
const wouldExceedFileLimit = currentChunkFileCount + builderFileCount > MAX_FILES_PER_BATCH;
|
|
62
|
+
if (currentChunk.length > 0 && (wouldExceedCapsaLimit || wouldExceedFileLimit)) {
|
|
63
|
+
chunks.push(currentChunk);
|
|
64
|
+
currentChunk = [builder];
|
|
65
|
+
currentChunkFileCount = builderFileCount;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
currentChunk.push(builder);
|
|
69
|
+
currentChunkFileCount += builderFileCount;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (currentChunk.length > 0) {
|
|
73
|
+
chunks.push(currentChunk);
|
|
74
|
+
}
|
|
75
|
+
if (this.retryConfig.enableLogging) {
|
|
76
|
+
const chunkSummary = chunks.map(chunk => {
|
|
77
|
+
const capsaCount = chunk.length;
|
|
78
|
+
const fileCount = chunk.reduce((sum, b) => sum + b.getFileCount(), 0);
|
|
79
|
+
return `${capsaCount}capsa/${fileCount}files`;
|
|
80
|
+
}).join(', ');
|
|
81
|
+
this.logger.log(`[Capsara SDK] Smart auto-split: ${builders.length} capsas (${totalFiles} files) → ` +
|
|
82
|
+
`${chunks.length} batches (${chunkSummary})`);
|
|
83
|
+
}
|
|
84
|
+
const results = [];
|
|
85
|
+
let currentOffset = 0;
|
|
86
|
+
for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
|
|
87
|
+
const chunk = chunks[chunkIndex];
|
|
88
|
+
if (this.retryConfig.enableLogging) {
|
|
89
|
+
this.logger.log(`[Capsara SDK] Sending batch ${chunkIndex + 1}/${chunks.length} ` +
|
|
90
|
+
`(${chunk.length} capsas, offset: ${currentOffset})`);
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const allPartyIds = new Set([creatorId]);
|
|
94
|
+
chunk.forEach(builder => {
|
|
95
|
+
builder.getRecipientIds().forEach(id => allPartyIds.add(id));
|
|
96
|
+
});
|
|
97
|
+
const partyKeys = await this.keyManager.fetchPartyKeys(Array.from(allPartyIds));
|
|
98
|
+
const builtCapsas = await Promise.all(chunk.map(builder => builder.build(partyKeys)));
|
|
99
|
+
const multipartBuilder = new CapsasMultipartBuilder();
|
|
100
|
+
multipartBuilder.addMetadata(chunk.length, creatorId);
|
|
101
|
+
builtCapsas.forEach((builtCapsa, capsaIndex) => {
|
|
102
|
+
multipartBuilder.addCapsaMetadata(builtCapsa.capsa, capsaIndex);
|
|
103
|
+
builtCapsa.files.forEach((file) => {
|
|
104
|
+
multipartBuilder.addFileBinary(file.data, file.metadata.fileId);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
const body = multipartBuilder.build();
|
|
108
|
+
const result = await this.sendWithRetry(body, multipartBuilder.getContentType());
|
|
109
|
+
const adjustedResult = {
|
|
110
|
+
...result,
|
|
111
|
+
created: result.created.map(item => ({
|
|
112
|
+
...item,
|
|
113
|
+
index: item.index + currentOffset,
|
|
114
|
+
})),
|
|
115
|
+
errors: result.errors?.map(item => ({
|
|
116
|
+
...item,
|
|
117
|
+
index: item.index + currentOffset,
|
|
118
|
+
})),
|
|
119
|
+
};
|
|
120
|
+
results.push(adjustedResult);
|
|
121
|
+
currentOffset += chunk.length;
|
|
122
|
+
if (this.retryConfig.enableLogging) {
|
|
123
|
+
this.logger.log(`[Capsara SDK] Batch ${chunkIndex + 1}/${chunks.length} completed: ` +
|
|
124
|
+
`${result.successful} succeeded, ${result.failed} failed`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const failedErrors = chunk.map((_, index) => ({
|
|
129
|
+
index: currentOffset + index,
|
|
130
|
+
packageId: '',
|
|
131
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
132
|
+
}));
|
|
133
|
+
results.push({
|
|
134
|
+
batchId: '',
|
|
135
|
+
successful: 0,
|
|
136
|
+
failed: chunk.length,
|
|
137
|
+
partialSuccess: false,
|
|
138
|
+
created: [],
|
|
139
|
+
errors: failedErrors,
|
|
140
|
+
});
|
|
141
|
+
currentOffset += chunk.length;
|
|
142
|
+
if (this.retryConfig.enableLogging) {
|
|
143
|
+
this.logger.log(`[Capsara SDK] Batch ${chunkIndex + 1}/${chunks.length} failed: ` +
|
|
144
|
+
`${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const allErrors = results.flatMap(r => r.errors || []);
|
|
149
|
+
const aggregated = {
|
|
150
|
+
batchId: results[0]?.batchId || `batch_${Date.now()}`,
|
|
151
|
+
successful: results.reduce((sum, r) => sum + r.successful, 0),
|
|
152
|
+
failed: results.reduce((sum, r) => sum + r.failed, 0),
|
|
153
|
+
partialSuccess: results.some(r => r.partialSuccess) ||
|
|
154
|
+
(results.some(r => r.successful > 0) && results.some(r => r.failed > 0)),
|
|
155
|
+
created: results.flatMap(r => r.created),
|
|
156
|
+
};
|
|
157
|
+
if (allErrors.length > 0) {
|
|
158
|
+
aggregated.errors = allErrors;
|
|
159
|
+
}
|
|
160
|
+
if (this.retryConfig.enableLogging) {
|
|
161
|
+
this.logger.log(`[Capsara SDK] All batches completed: ` +
|
|
162
|
+
`${aggregated.successful}/${builders.length} succeeded, ` +
|
|
163
|
+
`${aggregated.failed}/${builders.length} failed`);
|
|
164
|
+
}
|
|
165
|
+
return aggregated;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Send multipart request with retry logic
|
|
169
|
+
*/
|
|
170
|
+
async sendWithRetry(body, contentType, retryCount = 0) {
|
|
171
|
+
return new Promise((resolve, reject) => {
|
|
172
|
+
const url = new URL(`${this.baseUrl}/api/capsas`);
|
|
173
|
+
const token = this.getToken();
|
|
174
|
+
const agent = createAgentForProtocol(url.protocol, this.timeoutConfig.uploadTimeout, this.timeoutConfig);
|
|
175
|
+
const options = {
|
|
176
|
+
hostname: url.hostname,
|
|
177
|
+
port: url.port || (url.protocol === 'https:' ? 443 : 80),
|
|
178
|
+
path: url.pathname,
|
|
179
|
+
method: 'POST',
|
|
180
|
+
headers: {
|
|
181
|
+
'Content-Type': contentType,
|
|
182
|
+
'Content-Length': body.length.toString(),
|
|
183
|
+
Authorization: token ? `Bearer ${token}` : '',
|
|
184
|
+
'User-Agent': this.userAgent,
|
|
185
|
+
'X-SDK-Version': SDK_VERSION,
|
|
186
|
+
},
|
|
187
|
+
timeout: this.timeoutConfig.uploadTimeout,
|
|
188
|
+
agent,
|
|
189
|
+
};
|
|
190
|
+
const requester = url.protocol === 'https:' ? https : http;
|
|
191
|
+
const req = requester.request(options, (res) => {
|
|
192
|
+
let responseData = '';
|
|
193
|
+
res.on('data', (chunk) => {
|
|
194
|
+
responseData += chunk.toString('utf-8');
|
|
195
|
+
});
|
|
196
|
+
res.on('end', () => {
|
|
197
|
+
if (res.statusCode && ((res.statusCode >= 200 && res.statusCode < 300) || res.statusCode === 207)) {
|
|
198
|
+
try {
|
|
199
|
+
const response = JSON.parse(responseData);
|
|
200
|
+
resolve(response);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
reject(new Error(`Failed to parse response: ${error instanceof Error ? error.message : 'Unknown'}`));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
const isRetryable = res.statusCode === 503 || res.statusCode === 429;
|
|
208
|
+
if (isRetryable && retryCount < this.retryConfig.maxRetries) {
|
|
209
|
+
const retryDelay = this.calculateRetryDelay(responseData, retryCount, res.statusCode);
|
|
210
|
+
if (this.retryConfig.enableLogging) {
|
|
211
|
+
this.logger.log(`[Capsara SDK] Retry attempt ${retryCount + 1}/${this.retryConfig.maxRetries} ` +
|
|
212
|
+
`for ${res.statusCode} error - waiting ${Math.floor(retryDelay)}ms`);
|
|
213
|
+
}
|
|
214
|
+
globalThis.setTimeout(() => {
|
|
215
|
+
this.sendWithRetry(body, contentType, retryCount + 1)
|
|
216
|
+
.then(resolve)
|
|
217
|
+
.catch(reject);
|
|
218
|
+
}, retryDelay);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
reject(new Error(`Send failed with status ${res.statusCode}: ${responseData}`));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
req.on('error', reject);
|
|
227
|
+
req.on('timeout', () => {
|
|
228
|
+
req.destroy();
|
|
229
|
+
reject(new Error(`Upload timeout after ${this.timeoutConfig.uploadTimeout / 1000} seconds`));
|
|
230
|
+
});
|
|
231
|
+
// Write body in chunks
|
|
232
|
+
const chunkSize = 64 * 1024;
|
|
233
|
+
for (let i = 0; i < body.length; i += chunkSize) {
|
|
234
|
+
req.write(body.subarray(i, Math.min(i + chunkSize, body.length)));
|
|
235
|
+
}
|
|
236
|
+
req.end();
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Calculate retry delay
|
|
241
|
+
*/
|
|
242
|
+
calculateRetryDelay(responseData, retryCount, _statusCode) {
|
|
243
|
+
try {
|
|
244
|
+
const errorResponse = JSON.parse(responseData);
|
|
245
|
+
const serverDelay = errorResponse?.error?.retryAfter;
|
|
246
|
+
if (typeof serverDelay === 'number') {
|
|
247
|
+
return Math.min(serverDelay * 1000, this.retryConfig.maxDelay);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// Parse failed, use exponential backoff
|
|
252
|
+
}
|
|
253
|
+
const exponentialDelay = this.retryConfig.baseDelay * Math.pow(2, retryCount);
|
|
254
|
+
const jitter = Math.random() * 0.3 * exponentialDelay;
|
|
255
|
+
return Math.min(exponentialDelay + jitter, this.retryConfig.maxDelay);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=upload-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-service.js","sourceRoot":"","sources":["../../../src/internal/services/upload-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** Internal types used by services, builders, and crypto modules. */
|
|
2
|
+
export interface KeychainEntry {
|
|
3
|
+
party: string;
|
|
4
|
+
encryptedKey: string;
|
|
5
|
+
iv: string;
|
|
6
|
+
fingerprint: string;
|
|
7
|
+
permissions: string[];
|
|
8
|
+
actingFor?: string[];
|
|
9
|
+
revoked?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** Matches API response. */
|
|
12
|
+
export interface EncryptedFile {
|
|
13
|
+
fileId: string;
|
|
14
|
+
encryptedFilename: string;
|
|
15
|
+
filenameIV: string;
|
|
16
|
+
filenameAuthTag: string;
|
|
17
|
+
iv: string;
|
|
18
|
+
authTag: string;
|
|
19
|
+
mimetype: string;
|
|
20
|
+
size: number;
|
|
21
|
+
hash: string;
|
|
22
|
+
hashAlgorithm: string;
|
|
23
|
+
expiresAt?: string;
|
|
24
|
+
compressed?: boolean;
|
|
25
|
+
compressionAlgorithm?: 'gzip';
|
|
26
|
+
originalSize?: number;
|
|
27
|
+
/** One-way transform reference (URL or @partyId/id) */
|
|
28
|
+
transform?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface FileEncryptionResult {
|
|
31
|
+
encryptedData: Buffer;
|
|
32
|
+
iv: string;
|
|
33
|
+
authTag: string;
|
|
34
|
+
hash: string;
|
|
35
|
+
size: number;
|
|
36
|
+
mimetype: string;
|
|
37
|
+
compressed?: boolean;
|
|
38
|
+
compressionAlgorithm?: 'gzip';
|
|
39
|
+
originalSize?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface CapsaSignature {
|
|
42
|
+
algorithm: string;
|
|
43
|
+
protected: string;
|
|
44
|
+
payload: string;
|
|
45
|
+
signature: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Unencrypted metadata visible to server.
|
|
49
|
+
* Only non-sensitive operational data for routing, display, and search.
|
|
50
|
+
*/
|
|
51
|
+
export interface CapsaMetadata {
|
|
52
|
+
label?: string;
|
|
53
|
+
relatedPackages?: string[];
|
|
54
|
+
tags?: string[];
|
|
55
|
+
notes?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface CapsaCreateOptions {
|
|
58
|
+
subject?: string;
|
|
59
|
+
body?: string;
|
|
60
|
+
structured?: Record<string, unknown>;
|
|
61
|
+
expiresAt?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface AESEncryptionResult {
|
|
64
|
+
encryptedData: string;
|
|
65
|
+
iv: string;
|
|
66
|
+
authTag: string;
|
|
67
|
+
}
|
|
68
|
+
export interface MultipartPart {
|
|
69
|
+
name: string;
|
|
70
|
+
content: string | Buffer;
|
|
71
|
+
contentType?: string;
|
|
72
|
+
filename?: string;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAAA,qEAAqE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multipart form-data builder for capsa upload
|
|
3
|
+
* @file capsara.sdk/typescript/src/internal/upload/multipart-builder.ts
|
|
4
|
+
*/
|
|
5
|
+
import type { EncryptedFile } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Multipart form-data builder for capsa uploads (supports 1-500 capsas)
|
|
8
|
+
*/
|
|
9
|
+
export declare class CapsasMultipartBuilder {
|
|
10
|
+
private boundary;
|
|
11
|
+
private parts;
|
|
12
|
+
private metadataSet;
|
|
13
|
+
constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Add capsa metadata (must be first)
|
|
16
|
+
* @param capsaCount - Number of capsas in request
|
|
17
|
+
* @param creator - Creator party ID
|
|
18
|
+
*/
|
|
19
|
+
addMetadata(capsaCount: number, creator: string): this;
|
|
20
|
+
/**
|
|
21
|
+
* Add capsa metadata part with index
|
|
22
|
+
* @param capsa - Capsa object
|
|
23
|
+
* @param capsaIndex - Capsa index in request
|
|
24
|
+
*/
|
|
25
|
+
addCapsaMetadata(capsa: unknown, capsaIndex: number): this;
|
|
26
|
+
/**
|
|
27
|
+
* Add file metadata part with capsa and file indexes
|
|
28
|
+
* @param fileMetadata - File metadata object with fileId
|
|
29
|
+
* @param capsaIndex - Capsa index
|
|
30
|
+
* @param fileIndex - File index within capsa
|
|
31
|
+
*/
|
|
32
|
+
addFileMetadata(fileMetadata: EncryptedFile | (Record<string, unknown> & {
|
|
33
|
+
fileId?: string;
|
|
34
|
+
}), capsaIndex: number, fileIndex: number): this;
|
|
35
|
+
/**
|
|
36
|
+
* Add file binary part with file ID
|
|
37
|
+
* @param fileData - File data buffer
|
|
38
|
+
* @param fileId - File ID from metadata (should include .enc extension)
|
|
39
|
+
*/
|
|
40
|
+
addFileBinary(fileData: Buffer, fileId: string): this;
|
|
41
|
+
/**
|
|
42
|
+
* Build the complete multipart body
|
|
43
|
+
* @returns Multipart body as Buffer
|
|
44
|
+
*/
|
|
45
|
+
build(): Buffer;
|
|
46
|
+
/**
|
|
47
|
+
* Get the Content-Type header value
|
|
48
|
+
* @returns Content-Type with boundary
|
|
49
|
+
*/
|
|
50
|
+
getContentType(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Get the boundary string
|
|
53
|
+
* @returns Boundary string
|
|
54
|
+
*/
|
|
55
|
+
getBoundary(): string;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=multipart-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multipart-builder.d.ts","sourceRoot":"","sources":["../../../src/internal/upload/multipart-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhE;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,WAAW,CAAkB;;IAOrC;;;;OAIG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAetD;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAa1D;;;;;OAKG;IACH,eAAe,CACb,YAAY,EAAE,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAC7E,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,IAAI;IAgBP;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAcrD;;;OAGG;IACH,KAAK,IAAI,MAAM;IA6Cf;;;OAGG;IACH,cAAc,IAAI,MAAM;IAIxB;;;OAGG;IACH,WAAW,IAAI,MAAM;CAGtB"}
|