@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 @@
|
|
|
1
|
+
{"version":3,"file":"audit-error.js","sourceRoot":"","sources":["../../src/errors/audit-error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Errors from authentication operations (login, register, refresh). */
|
|
2
|
+
import { CapsaraError, type ApiErrorResponse, type AxiosLikeError } from './capsara-error.js';
|
|
3
|
+
export declare class CapsaraAuthError extends CapsaraError {
|
|
4
|
+
constructor(message: string, code: string, statusCode: number, details?: Record<string, unknown>, response?: ApiErrorResponse);
|
|
5
|
+
/**
|
|
6
|
+
* Refresh token is required but not provided
|
|
7
|
+
* HTTP 401 - REFRESH_TOKEN_REQUIRED
|
|
8
|
+
*/
|
|
9
|
+
static refreshTokenRequired(): CapsaraAuthError;
|
|
10
|
+
/**
|
|
11
|
+
* Invalid credentials (email/password don't match)
|
|
12
|
+
* HTTP 401 - INVALID_CREDENTIALS
|
|
13
|
+
*/
|
|
14
|
+
static invalidCredentials(): CapsaraAuthError;
|
|
15
|
+
/**
|
|
16
|
+
* Refresh token is invalid or expired
|
|
17
|
+
* HTTP 401 - INVALID_REFRESH_TOKEN
|
|
18
|
+
*/
|
|
19
|
+
static invalidRefreshToken(): CapsaraAuthError;
|
|
20
|
+
/**
|
|
21
|
+
* Access token is invalid or expired
|
|
22
|
+
* HTTP 401 - UNAUTHORIZED
|
|
23
|
+
*/
|
|
24
|
+
static unauthorized(message?: string): CapsaraAuthError;
|
|
25
|
+
/**
|
|
26
|
+
* Feature not implemented yet
|
|
27
|
+
* HTTP 405 - NOT_IMPLEMENTED
|
|
28
|
+
*/
|
|
29
|
+
static notImplemented(feature: string): CapsaraAuthError;
|
|
30
|
+
/**
|
|
31
|
+
* Invalid request body
|
|
32
|
+
* HTTP 400 - VALIDATION_ERROR
|
|
33
|
+
*/
|
|
34
|
+
static validationError(message: string, details?: Record<string, unknown>): CapsaraAuthError;
|
|
35
|
+
/** Maps an API error response to the appropriate factory method. */
|
|
36
|
+
static fromApiError(error: AxiosLikeError): CapsaraAuthError;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=auth-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-error.d.ts","sourceRoot":"","sources":["../../src/errors/auth-error.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9F,qBAAa,gBAAiB,SAAQ,YAAY;gBAE9C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,CAAC,EAAE,gBAAgB;IAM7B;;;OAGG;IACH,MAAM,CAAC,oBAAoB,IAAI,gBAAgB;IAQ/C;;;OAGG;IACH,MAAM,CAAC,kBAAkB,IAAI,gBAAgB;IAQ7C;;;OAGG;IACH,MAAM,CAAC,mBAAmB,IAAI,gBAAgB;IAQ9C;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,SAAmD,GAAG,gBAAgB;IAQjG;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IASxD;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAS5F,oEAAoE;IACpE,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB;CAsD7D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** Errors from authentication operations (login, register, refresh). */
|
|
2
|
+
import { CapsaraError } from './capsara-error.js';
|
|
3
|
+
export class CapsaraAuthError extends CapsaraError {
|
|
4
|
+
constructor(message, code, statusCode, details, response) {
|
|
5
|
+
super(message, code, statusCode, details, response);
|
|
6
|
+
this.name = 'CapsaraAuthError';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Refresh token is required but not provided
|
|
10
|
+
* HTTP 401 - REFRESH_TOKEN_REQUIRED
|
|
11
|
+
*/
|
|
12
|
+
static refreshTokenRequired() {
|
|
13
|
+
return new CapsaraAuthError('Refresh token is required', 'REFRESH_TOKEN_REQUIRED', 401);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Invalid credentials (email/password don't match)
|
|
17
|
+
* HTTP 401 - INVALID_CREDENTIALS
|
|
18
|
+
*/
|
|
19
|
+
static invalidCredentials() {
|
|
20
|
+
return new CapsaraAuthError('Invalid email or password', 'INVALID_CREDENTIALS', 401);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Refresh token is invalid or expired
|
|
24
|
+
* HTTP 401 - INVALID_REFRESH_TOKEN
|
|
25
|
+
*/
|
|
26
|
+
static invalidRefreshToken() {
|
|
27
|
+
return new CapsaraAuthError('Refresh token is invalid or expired', 'INVALID_REFRESH_TOKEN', 401);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Access token is invalid or expired
|
|
31
|
+
* HTTP 401 - UNAUTHORIZED
|
|
32
|
+
*/
|
|
33
|
+
static unauthorized(message = 'Unauthorized - invalid or expired access token') {
|
|
34
|
+
return new CapsaraAuthError(message, 'UNAUTHORIZED', 401);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Feature not implemented yet
|
|
38
|
+
* HTTP 405 - NOT_IMPLEMENTED
|
|
39
|
+
*/
|
|
40
|
+
static notImplemented(feature) {
|
|
41
|
+
return new CapsaraAuthError(`${feature} endpoint not yet implemented`, 'NOT_IMPLEMENTED', 405, { feature });
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Invalid request body
|
|
45
|
+
* HTTP 400 - VALIDATION_ERROR
|
|
46
|
+
*/
|
|
47
|
+
static validationError(message, details) {
|
|
48
|
+
return new CapsaraAuthError(message, 'VALIDATION_ERROR', 400, details);
|
|
49
|
+
}
|
|
50
|
+
/** Maps an API error response to the appropriate factory method. */
|
|
51
|
+
static fromApiError(error) {
|
|
52
|
+
// Handle axios errors
|
|
53
|
+
if (error.response) {
|
|
54
|
+
const status = error.response.status;
|
|
55
|
+
const data = error.response.data;
|
|
56
|
+
const errorCode = data?.error?.code;
|
|
57
|
+
const errorMessage = data?.error?.message ?? data?.message ?? error.message ?? 'Unknown error';
|
|
58
|
+
const errorDetails = data?.error?.details ?? data?.details;
|
|
59
|
+
// Map known error codes to factory methods
|
|
60
|
+
switch (errorCode) {
|
|
61
|
+
case 'REFRESH_TOKEN_REQUIRED':
|
|
62
|
+
return CapsaraAuthError.refreshTokenRequired();
|
|
63
|
+
case 'INVALID_CREDENTIALS':
|
|
64
|
+
return CapsaraAuthError.invalidCredentials();
|
|
65
|
+
case 'INVALID_REFRESH_TOKEN':
|
|
66
|
+
return CapsaraAuthError.invalidRefreshToken();
|
|
67
|
+
case 'UNAUTHORIZED':
|
|
68
|
+
return CapsaraAuthError.unauthorized(errorMessage);
|
|
69
|
+
case 'NOT_IMPLEMENTED':
|
|
70
|
+
return CapsaraAuthError.notImplemented(errorDetails?.feature ?? 'Feature');
|
|
71
|
+
case 'VALIDATION_ERROR':
|
|
72
|
+
return CapsaraAuthError.validationError(errorMessage, errorDetails);
|
|
73
|
+
default:
|
|
74
|
+
// Generic auth error with status code
|
|
75
|
+
return new CapsaraAuthError(errorMessage, errorCode ?? 'AUTH_ERROR', status, errorDetails);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Handle non-axios errors
|
|
79
|
+
if (error instanceof CapsaraAuthError) {
|
|
80
|
+
return error;
|
|
81
|
+
}
|
|
82
|
+
// Generic error fallback
|
|
83
|
+
const errorMessage = error.message ?? 'Unknown authentication error';
|
|
84
|
+
return new CapsaraAuthError(errorMessage, 'AUTH_ERROR', 500, { originalError: errorMessage });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=auth-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-error.js","sourceRoot":"","sources":["../../src/errors/auth-error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Errors from capsa operations (create, get, delete, file operations). */
|
|
2
|
+
import { CapsaraError, type ApiErrorResponse, type AxiosLikeError, type StoredErrorResponse } from './capsara-error.js';
|
|
3
|
+
export declare class CapsaraCapsaError extends CapsaraError {
|
|
4
|
+
readonly response?: StoredErrorResponse;
|
|
5
|
+
constructor(message: string, code: string, statusCode: number, details?: Record<string, unknown>, response?: ApiErrorResponse);
|
|
6
|
+
/**
|
|
7
|
+
* Capsa not found or access denied
|
|
8
|
+
* HTTP 404 - CAPSA_NOT_FOUND
|
|
9
|
+
*/
|
|
10
|
+
static capsaNotFound(capsaId?: string): CapsaraCapsaError;
|
|
11
|
+
/**
|
|
12
|
+
* File not found in capsa
|
|
13
|
+
* HTTP 404 - FILE_NOT_FOUND
|
|
14
|
+
*/
|
|
15
|
+
static fileNotFound(fileId?: string): CapsaraCapsaError;
|
|
16
|
+
/**
|
|
17
|
+
* Access denied to capsa
|
|
18
|
+
* HTTP 403 - ACCESS_DENIED
|
|
19
|
+
*/
|
|
20
|
+
static accessDenied(details?: Record<string, unknown>): CapsaraCapsaError;
|
|
21
|
+
/**
|
|
22
|
+
* Creator mismatch - authenticated party doesn't match creator in metadata
|
|
23
|
+
* HTTP 403 - CREATOR_MISMATCH
|
|
24
|
+
*/
|
|
25
|
+
static creatorMismatch(authenticated: string, claimed: string): CapsaraCapsaError;
|
|
26
|
+
/**
|
|
27
|
+
* Capsa is deleted and cannot be accessed
|
|
28
|
+
* HTTP 403 - CAPSA_DELETED
|
|
29
|
+
*/
|
|
30
|
+
static capsaDeleted(details?: Record<string, unknown>): CapsaraCapsaError;
|
|
31
|
+
/**
|
|
32
|
+
* Invalid content type - must be multipart/form-data
|
|
33
|
+
* HTTP 400 - INVALID_CONTENT_TYPE
|
|
34
|
+
*/
|
|
35
|
+
static invalidContentType(): CapsaraCapsaError;
|
|
36
|
+
/**
|
|
37
|
+
* Missing required parameters
|
|
38
|
+
* HTTP 400 - MISSING_PARAMS
|
|
39
|
+
*/
|
|
40
|
+
static missingParams(params?: string[]): CapsaraCapsaError;
|
|
41
|
+
/**
|
|
42
|
+
* Missing capsa ID
|
|
43
|
+
* HTTP 400 - MISSING_ID
|
|
44
|
+
*/
|
|
45
|
+
static missingId(): CapsaraCapsaError;
|
|
46
|
+
/**
|
|
47
|
+
* Invalid expiration time for download URL
|
|
48
|
+
* HTTP 400 - INVALID_EXPIRATION
|
|
49
|
+
*/
|
|
50
|
+
static invalidExpiration(): CapsaraCapsaError;
|
|
51
|
+
/**
|
|
52
|
+
* Multipart upload error (file size, count, etc.)
|
|
53
|
+
* HTTP 400/413 - MULTIPART_ERROR
|
|
54
|
+
*/
|
|
55
|
+
static multipartError(message: string, statusCode?: number, details?: Record<string, unknown>): CapsaraCapsaError;
|
|
56
|
+
/**
|
|
57
|
+
* File download failed with context
|
|
58
|
+
* Used to wrap errors with capsaId and fileId context
|
|
59
|
+
*/
|
|
60
|
+
static downloadFailed(capsaId: string, fileId: string, cause: unknown): CapsaraCapsaError;
|
|
61
|
+
/** Maps an API error response to the appropriate factory method. */
|
|
62
|
+
static fromApiError(error: AxiosLikeError): CapsaraCapsaError;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=capsa-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsa-error.d.ts","sourceRoot":"","sources":["../../src/errors/capsa-error.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAExH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,SAAwB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;gBAGrD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,CAAC,EAAE,gBAAgB;IAM7B;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAWzD;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IASvD;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;IASzE;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB;IASjF;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;IASzE;;;OAGG;IACH,MAAM,CAAC,kBAAkB,IAAI,iBAAiB;IAQ9C;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,iBAAiB;IAW1D;;;OAGG;IACH,MAAM,CAAC,SAAS,IAAI,iBAAiB;IAQrC;;;OAGG;IACH,MAAM,CAAC,iBAAiB,IAAI,iBAAiB;IAQ7C;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,SAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;IAS9G;;;OAGG;IACH,MAAM,CAAC,cAAc,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,GACb,iBAAiB;IAepB,oEAAoE;IACpE,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,iBAAiB;CAgG9D"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/** Errors from capsa operations (create, get, delete, file operations). */
|
|
2
|
+
import { CapsaraError } from './capsara-error.js';
|
|
3
|
+
export class CapsaraCapsaError extends CapsaraError {
|
|
4
|
+
constructor(message, code, statusCode, details, response) {
|
|
5
|
+
super(message, code, statusCode, details, response);
|
|
6
|
+
this.name = 'CapsaraCapsaError';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Capsa not found or access denied
|
|
10
|
+
* HTTP 404 - CAPSA_NOT_FOUND
|
|
11
|
+
*/
|
|
12
|
+
static capsaNotFound(capsaId) {
|
|
13
|
+
return new CapsaraCapsaError(capsaId
|
|
14
|
+
? `Capsa with ID ${capsaId} not found or access denied`
|
|
15
|
+
: 'Capsa not found or access denied', 'CAPSA_NOT_FOUND', 404, capsaId ? { capsaId } : undefined);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* File not found in capsa
|
|
19
|
+
* HTTP 404 - FILE_NOT_FOUND
|
|
20
|
+
*/
|
|
21
|
+
static fileNotFound(fileId) {
|
|
22
|
+
return new CapsaraCapsaError('File not found in capsa', 'FILE_NOT_FOUND', 404, fileId ? { fileId } : undefined);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Access denied to capsa
|
|
26
|
+
* HTTP 403 - ACCESS_DENIED
|
|
27
|
+
*/
|
|
28
|
+
static accessDenied(details) {
|
|
29
|
+
return new CapsaraCapsaError('You do not have access to this capsa', 'ACCESS_DENIED', 403, details);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Creator mismatch - authenticated party doesn't match creator in metadata
|
|
33
|
+
* HTTP 403 - CREATOR_MISMATCH
|
|
34
|
+
*/
|
|
35
|
+
static creatorMismatch(authenticated, claimed) {
|
|
36
|
+
return new CapsaraCapsaError('Authenticated party does not match creator in metadata', 'CREATOR_MISMATCH', 403, { authenticated, claimed });
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Capsa is deleted and cannot be accessed
|
|
40
|
+
* HTTP 403 - CAPSA_DELETED
|
|
41
|
+
*/
|
|
42
|
+
static capsaDeleted(details) {
|
|
43
|
+
return new CapsaraCapsaError('Cannot download files from deleted capsa', 'CAPSA_DELETED', 403, details);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Invalid content type - must be multipart/form-data
|
|
47
|
+
* HTTP 400 - INVALID_CONTENT_TYPE
|
|
48
|
+
*/
|
|
49
|
+
static invalidContentType() {
|
|
50
|
+
return new CapsaraCapsaError('Request must be multipart/form-data with metadata and capsa_0..N fields', 'INVALID_CONTENT_TYPE', 400);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Missing required parameters
|
|
54
|
+
* HTTP 400 - MISSING_PARAMS
|
|
55
|
+
*/
|
|
56
|
+
static missingParams(params) {
|
|
57
|
+
return new CapsaraCapsaError(params
|
|
58
|
+
? `Missing required parameters: ${params.join(', ')}`
|
|
59
|
+
: 'Missing required parameters', 'MISSING_PARAMS', 400, params ? { missingParams: params } : undefined);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Missing capsa ID
|
|
63
|
+
* HTTP 400 - MISSING_ID
|
|
64
|
+
*/
|
|
65
|
+
static missingId() {
|
|
66
|
+
return new CapsaraCapsaError('Capsa ID is required', 'MISSING_ID', 400);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Invalid expiration time for download URL
|
|
70
|
+
* HTTP 400 - INVALID_EXPIRATION
|
|
71
|
+
*/
|
|
72
|
+
static invalidExpiration() {
|
|
73
|
+
return new CapsaraCapsaError('URL expiration must be between 1 and 1440 minutes (24 hours)', 'INVALID_EXPIRATION', 400);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Multipart upload error (file size, count, etc.)
|
|
77
|
+
* HTTP 400/413 - MULTIPART_ERROR
|
|
78
|
+
*/
|
|
79
|
+
static multipartError(message, statusCode = 400, details) {
|
|
80
|
+
return new CapsaraCapsaError(message, 'MULTIPART_ERROR', statusCode, details);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* File download failed with context
|
|
84
|
+
* Used to wrap errors with capsaId and fileId context
|
|
85
|
+
*/
|
|
86
|
+
static downloadFailed(capsaId, fileId, cause) {
|
|
87
|
+
const causeMessage = cause instanceof Error ? cause.message : String(cause);
|
|
88
|
+
const error = new CapsaraCapsaError(`Failed to download file ${fileId} from capsa ${capsaId}: ${causeMessage}`, 'DOWNLOAD_FAILED', 0, // Status 0 indicates client-side error
|
|
89
|
+
{ capsaId, fileId, originalError: causeMessage });
|
|
90
|
+
// Preserve the original error as cause for stack trace
|
|
91
|
+
if (cause instanceof Error) {
|
|
92
|
+
error.cause = cause;
|
|
93
|
+
}
|
|
94
|
+
return error;
|
|
95
|
+
}
|
|
96
|
+
/** Maps an API error response to the appropriate factory method. */
|
|
97
|
+
static fromApiError(error) {
|
|
98
|
+
// Handle axios errors
|
|
99
|
+
if (error.response) {
|
|
100
|
+
const status = error.response.status;
|
|
101
|
+
const data = error.response.data;
|
|
102
|
+
const errorCode = data?.error?.code;
|
|
103
|
+
const errorMessage = data?.error?.message ?? data?.message ?? error.message ?? 'Unknown error';
|
|
104
|
+
const errorDetails = data?.error?.details ?? data?.details;
|
|
105
|
+
const response = error.response;
|
|
106
|
+
// Map known error codes to factory methods and attach response
|
|
107
|
+
let capsaError;
|
|
108
|
+
switch (errorCode) {
|
|
109
|
+
// Support both old ENVELOPE_* and new CAPSA_* error codes from API
|
|
110
|
+
case 'ENVELOPE_NOT_FOUND':
|
|
111
|
+
case 'CAPSA_NOT_FOUND':
|
|
112
|
+
capsaError = CapsaraCapsaError.capsaNotFound((errorDetails?.capsaId ?? errorDetails?.envelopeId));
|
|
113
|
+
break;
|
|
114
|
+
case 'FILE_NOT_FOUND':
|
|
115
|
+
capsaError = CapsaraCapsaError.fileNotFound(errorDetails?.fileId);
|
|
116
|
+
break;
|
|
117
|
+
case 'ACCESS_DENIED':
|
|
118
|
+
capsaError = CapsaraCapsaError.accessDenied(errorDetails);
|
|
119
|
+
break;
|
|
120
|
+
case 'CREATOR_MISMATCH':
|
|
121
|
+
capsaError = CapsaraCapsaError.creatorMismatch(errorDetails?.authenticated ?? '', errorDetails?.claimed ?? '');
|
|
122
|
+
break;
|
|
123
|
+
case 'ENVELOPE_DELETED':
|
|
124
|
+
case 'CAPSA_DELETED':
|
|
125
|
+
capsaError = CapsaraCapsaError.capsaDeleted(errorDetails);
|
|
126
|
+
break;
|
|
127
|
+
case 'INVALID_CONTENT_TYPE':
|
|
128
|
+
capsaError = CapsaraCapsaError.invalidContentType();
|
|
129
|
+
break;
|
|
130
|
+
case 'MISSING_PARAMS':
|
|
131
|
+
capsaError = CapsaraCapsaError.missingParams(errorDetails?.missingParams);
|
|
132
|
+
break;
|
|
133
|
+
case 'MISSING_ID':
|
|
134
|
+
capsaError = CapsaraCapsaError.missingId();
|
|
135
|
+
break;
|
|
136
|
+
case 'INVALID_EXPIRATION':
|
|
137
|
+
capsaError = CapsaraCapsaError.invalidExpiration();
|
|
138
|
+
break;
|
|
139
|
+
case 'MULTIPART_ERROR':
|
|
140
|
+
capsaError = CapsaraCapsaError.multipartError(errorMessage, status, errorDetails);
|
|
141
|
+
break;
|
|
142
|
+
default:
|
|
143
|
+
// Generic capsa error with status code
|
|
144
|
+
return new CapsaraCapsaError(errorMessage, errorCode ?? 'CAPSA_ERROR', status, errorDetails, response);
|
|
145
|
+
}
|
|
146
|
+
// Attach response to error created by factory method
|
|
147
|
+
if (response) {
|
|
148
|
+
Object.defineProperty(capsaError, 'response', {
|
|
149
|
+
value: {
|
|
150
|
+
status: response.status,
|
|
151
|
+
statusText: response.statusText,
|
|
152
|
+
headers: response.headers,
|
|
153
|
+
data: response.data,
|
|
154
|
+
},
|
|
155
|
+
writable: false,
|
|
156
|
+
enumerable: true,
|
|
157
|
+
configurable: true,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return capsaError;
|
|
161
|
+
}
|
|
162
|
+
// Handle non-axios errors
|
|
163
|
+
if (error instanceof CapsaraCapsaError) {
|
|
164
|
+
return error;
|
|
165
|
+
}
|
|
166
|
+
// Generic error fallback (client-side errors, not API errors)
|
|
167
|
+
// Use status code 0 to distinguish from actual HTTP 500 errors
|
|
168
|
+
const errorMessage = error.message ?? 'Unknown capsa error';
|
|
169
|
+
return new CapsaraCapsaError(errorMessage, 'CAPSA_ERROR', 0, { originalError: errorMessage });
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=capsa-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsa-error.js","sourceRoot":"","sources":["../../src/errors/capsa-error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** API error response structure from Axios. */
|
|
2
|
+
export interface ApiErrorResponse {
|
|
3
|
+
status: number;
|
|
4
|
+
statusText?: string;
|
|
5
|
+
headers?: Record<string, string>;
|
|
6
|
+
data?: {
|
|
7
|
+
error?: {
|
|
8
|
+
code?: string;
|
|
9
|
+
message?: string;
|
|
10
|
+
details?: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
message?: string;
|
|
13
|
+
details?: Record<string, unknown>;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Axios-like error structure. */
|
|
17
|
+
export interface AxiosLikeError {
|
|
18
|
+
response?: ApiErrorResponse;
|
|
19
|
+
request?: unknown;
|
|
20
|
+
message?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Stored response for debugging (subset of ApiErrorResponse). */
|
|
23
|
+
export interface StoredErrorResponse {
|
|
24
|
+
status: number;
|
|
25
|
+
statusText?: string;
|
|
26
|
+
headers?: Record<string, string>;
|
|
27
|
+
data?: unknown;
|
|
28
|
+
}
|
|
29
|
+
/** Base error class for all Capsara SDK errors. */
|
|
30
|
+
export declare class CapsaraError extends Error {
|
|
31
|
+
/** Error code from API response */
|
|
32
|
+
readonly code: string;
|
|
33
|
+
/** HTTP status code */
|
|
34
|
+
readonly statusCode: number;
|
|
35
|
+
/** Additional error details */
|
|
36
|
+
readonly details?: Record<string, unknown>;
|
|
37
|
+
/** Full server response (for debugging) */
|
|
38
|
+
readonly response?: StoredErrorResponse;
|
|
39
|
+
constructor(message: string, code: string, statusCode: number, details?: Record<string, unknown>, response?: ApiErrorResponse);
|
|
40
|
+
/** Maps an API error response to a CapsaraError. */
|
|
41
|
+
static fromApiError(error: AxiosLikeError): CapsaraError;
|
|
42
|
+
/** Converts this error to a JSON-serializable object. */
|
|
43
|
+
toJSON(): {
|
|
44
|
+
response?: StoredErrorResponse | undefined;
|
|
45
|
+
name: string;
|
|
46
|
+
message: string;
|
|
47
|
+
code: string;
|
|
48
|
+
statusCode: number;
|
|
49
|
+
details: Record<string, unknown> | undefined;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=capsara-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsara-error.d.ts","sourceRoot":"","sources":["../../src/errors/capsara-error.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACnC,CAAC;QACF,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,mDAAmD;AACnD,qBAAa,YAAa,SAAQ,KAAK;IACrC,mCAAmC;IACnC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,uBAAuB;IACvB,SAAgB,UAAU,EAAE,MAAM,CAAC;IAEnC,+BAA+B;IAC/B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElD,2CAA2C;IAC3C,SAAgB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;gBAG7C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,CAAC,EAAE,gBAAgB;IAgD7B,oDAAoD;IACpD,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY;IAqCxD,yDAAyD;IACzD,MAAM;;;;;;;;CAUP"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** Base error class for all Capsara SDK errors. */
|
|
2
|
+
export class CapsaraError extends Error {
|
|
3
|
+
/** Error code from API response */
|
|
4
|
+
code;
|
|
5
|
+
/** HTTP status code */
|
|
6
|
+
statusCode;
|
|
7
|
+
/** Additional error details */
|
|
8
|
+
details;
|
|
9
|
+
/** Full server response (for debugging) */
|
|
10
|
+
response;
|
|
11
|
+
constructor(message, code, statusCode, details, response) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = 'CapsaraError';
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.statusCode = statusCode;
|
|
16
|
+
this.details = details;
|
|
17
|
+
// Store sanitized response for debugging (filter sensitive headers, truncate data)
|
|
18
|
+
if (response) {
|
|
19
|
+
const SAFE_HEADERS = ['content-type', 'x-request-id', 'retry-after'];
|
|
20
|
+
let filteredHeaders;
|
|
21
|
+
if (response.headers) {
|
|
22
|
+
filteredHeaders = {};
|
|
23
|
+
for (const key of Object.keys(response.headers)) {
|
|
24
|
+
if (SAFE_HEADERS.includes(key.toLowerCase())) {
|
|
25
|
+
filteredHeaders[key] = response.headers[key];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Truncate response data to prevent unbounded memory from large error bodies
|
|
30
|
+
const MAX_DATA_SIZE = 1024;
|
|
31
|
+
let truncatedData = response.data;
|
|
32
|
+
if (response.data) {
|
|
33
|
+
const serialized = JSON.stringify(response.data);
|
|
34
|
+
if (serialized.length > MAX_DATA_SIZE) {
|
|
35
|
+
truncatedData = serialized.slice(0, MAX_DATA_SIZE) + '...[truncated]';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
this.response = {
|
|
39
|
+
status: response.status,
|
|
40
|
+
statusText: response.statusText,
|
|
41
|
+
headers: filteredHeaders,
|
|
42
|
+
data: truncatedData,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Maintains proper stack trace for where error was thrown (only available on V8)
|
|
46
|
+
if (Error.captureStackTrace) {
|
|
47
|
+
Error.captureStackTrace(this, this.constructor);
|
|
48
|
+
}
|
|
49
|
+
// Set the prototype explicitly to support instanceof checks
|
|
50
|
+
Object.setPrototypeOf(this, CapsaraError.prototype);
|
|
51
|
+
}
|
|
52
|
+
/** Maps an API error response to a CapsaraError. */
|
|
53
|
+
static fromApiError(error) {
|
|
54
|
+
// Handle axios error structure
|
|
55
|
+
if (error.response) {
|
|
56
|
+
const { data, status } = error.response;
|
|
57
|
+
const errorCode = data?.error?.code ?? 'UNKNOWN_ERROR';
|
|
58
|
+
const errorMessage = data?.error?.message ?? error.message ?? 'An unknown error occurred';
|
|
59
|
+
const errorDetails = data?.error?.details;
|
|
60
|
+
return new CapsaraError(errorMessage, errorCode, status, errorDetails, error.response // Pass full response for debugging
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
// Handle network errors or other errors
|
|
64
|
+
if (error.request) {
|
|
65
|
+
return new CapsaraError('Network error: Unable to reach the API', 'NETWORK_ERROR', 0, { originalError: error.message ?? 'Unknown network error' });
|
|
66
|
+
}
|
|
67
|
+
// Generic error
|
|
68
|
+
const errorMessage = error.message ?? 'An error occurred';
|
|
69
|
+
return new CapsaraError(errorMessage, 'UNKNOWN_ERROR', 500, { originalError: errorMessage });
|
|
70
|
+
}
|
|
71
|
+
/** Converts this error to a JSON-serializable object. */
|
|
72
|
+
toJSON() {
|
|
73
|
+
return {
|
|
74
|
+
name: this.name,
|
|
75
|
+
message: this.message,
|
|
76
|
+
code: this.code,
|
|
77
|
+
statusCode: this.statusCode,
|
|
78
|
+
details: this.details,
|
|
79
|
+
...(this.response && { response: this.response }),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=capsara-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsara-error.js","sourceRoot":"","sources":["../../src/errors/capsara-error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Re-exports all SDK error classes and types. */
|
|
2
|
+
export { CapsaraError } from './capsara-error.js';
|
|
3
|
+
export { CapsaraAuditError } from './audit-error.js';
|
|
4
|
+
export { CapsaraCapsaError } from './capsa-error.js';
|
|
5
|
+
export { CapsaraAuthError } from './auth-error.js';
|
|
6
|
+
export { CapsaraAccountError } from './account-error.js';
|
|
7
|
+
export type { ApiErrorResponse, AxiosLikeError, StoredErrorResponse } from './capsara-error.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Re-exports all SDK error classes and types. */
|
|
2
|
+
export { CapsaraError } from './capsara-error.js';
|
|
3
|
+
export { CapsaraAuditError } from './audit-error.js';
|
|
4
|
+
export { CapsaraCapsaError } from './capsa-error.js';
|
|
5
|
+
export { CapsaraAuthError } from './auth-error.js';
|
|
6
|
+
export { CapsaraAccountError } from './account-error.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Capsara SDK entry point. */
|
|
2
|
+
export { CapsaraClient, type CapsaraClientOptions } from './client/capsara-client.js';
|
|
3
|
+
export { type DecryptedCapsa } from './internal/decryptor/capsa-decryptor.js';
|
|
4
|
+
export { CapsaraError, CapsaraAuditError, CapsaraCapsaError, CapsaraAuthError, CapsaraAccountError, } from './errors/index.js';
|
|
5
|
+
export { FileInput } from './types/index.js';
|
|
6
|
+
export type { PartyKey, Capsa, RecipientConfig, SystemLimits, AuthCredentials, AuthResponse, CapsaListFilters, CapsaListResponse, CapsaSummary, CursorPagination, AuditEntry, AuditAction, GetAuditEntriesFilters, GetAuditEntriesResponse, CreateAuditEntryRequest, CreateAuditEntryResponse, } from './types/index.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,YAAY,EACV,QAAQ,EACR,KAAK,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Capsara SDK entry point. */
|
|
2
|
+
export { CapsaraClient } from './client/capsara-client.js';
|
|
3
|
+
export { CapsaraError, CapsaraAuditError, CapsaraCapsaError, CapsaraAuthError, CapsaraAccountError, } from './errors/index.js';
|
|
4
|
+
export { FileInput } from './types/index.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EAAE,aAAa,EAA6B,MAAM,4BAA4B,CAAC;AAItF,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Decrypted file metadata for download operations. */
|
|
2
|
+
export interface CachedFileMetadata {
|
|
3
|
+
iv: string;
|
|
4
|
+
authTag: string;
|
|
5
|
+
compressed?: boolean;
|
|
6
|
+
encryptedFilename: string;
|
|
7
|
+
filenameIV: string;
|
|
8
|
+
filenameAuthTag: string;
|
|
9
|
+
}
|
|
10
|
+
/** Cached capsa entry with master key and file metadata. */
|
|
11
|
+
export interface CachedCapsa {
|
|
12
|
+
/** Decrypted master key (zeroed on eviction). */
|
|
13
|
+
masterKey: Buffer;
|
|
14
|
+
files: Map<string, CachedFileMetadata>;
|
|
15
|
+
cachedAt: number;
|
|
16
|
+
expiresAt: number;
|
|
17
|
+
}
|
|
18
|
+
export interface CapsaCacheConfig {
|
|
19
|
+
/** Cache TTL in milliseconds (default: 5 minutes). */
|
|
20
|
+
ttl?: number;
|
|
21
|
+
/** Maximum number of cached capsas (default: 100). */
|
|
22
|
+
maxSize?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Caches master keys after getCapsa() to avoid redundant RSA-4096 decryption
|
|
26
|
+
* on each file download.
|
|
27
|
+
*/
|
|
28
|
+
export declare class DecryptedCapsaCache {
|
|
29
|
+
private cache;
|
|
30
|
+
private config;
|
|
31
|
+
constructor(config?: CapsaCacheConfig);
|
|
32
|
+
set(capsaId: string, masterKey: Buffer, files: Array<{
|
|
33
|
+
fileId: string;
|
|
34
|
+
} & CachedFileMetadata>): void;
|
|
35
|
+
get(capsaId: string): CachedCapsa | null;
|
|
36
|
+
getMasterKey(capsaId: string): Buffer | null;
|
|
37
|
+
getFileMetadata(capsaId: string, fileId: string): CachedFileMetadata | null;
|
|
38
|
+
has(capsaId: string): boolean;
|
|
39
|
+
/** Zeroes master key and removes the entry. */
|
|
40
|
+
clear(capsaId: string): void;
|
|
41
|
+
/** Zeroes all master keys and clears the cache. */
|
|
42
|
+
clearAll(): void;
|
|
43
|
+
clearMasterKey(capsaId: string): void;
|
|
44
|
+
get size(): number;
|
|
45
|
+
prune(): void;
|
|
46
|
+
private evictOldest;
|
|
47
|
+
}
|
|
48
|
+
export declare function createCapsaCache(config?: CapsaCacheConfig): DecryptedCapsaCache;
|
|
49
|
+
//# sourceMappingURL=capsa-cache.d.ts.map
|