@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.
Files changed (139) hide show
  1. package/LICENSE +74 -0
  2. package/README.md +230 -0
  3. package/dist/builder/capsa-builder.d.ts +167 -0
  4. package/dist/builder/capsa-builder.d.ts.map +1 -0
  5. package/dist/builder/capsa-builder.js +489 -0
  6. package/dist/builder/capsa-builder.js.map +1 -0
  7. package/dist/client/capsara-client.d.ts +96 -0
  8. package/dist/client/capsara-client.d.ts.map +1 -0
  9. package/dist/client/capsara-client.js +266 -0
  10. package/dist/client/capsara-client.js.map +1 -0
  11. package/dist/errors/account-error.d.ts +73 -0
  12. package/dist/errors/account-error.d.ts.map +1 -0
  13. package/dist/errors/account-error.js +155 -0
  14. package/dist/errors/account-error.js.map +1 -0
  15. package/dist/errors/audit-error.d.ts +34 -0
  16. package/dist/errors/audit-error.d.ts.map +1 -0
  17. package/dist/errors/audit-error.js +93 -0
  18. package/dist/errors/audit-error.js.map +1 -0
  19. package/dist/errors/auth-error.d.ts +38 -0
  20. package/dist/errors/auth-error.d.ts.map +1 -0
  21. package/dist/errors/auth-error.js +87 -0
  22. package/dist/errors/auth-error.js.map +1 -0
  23. package/dist/errors/capsa-error.d.ts +64 -0
  24. package/dist/errors/capsa-error.d.ts.map +1 -0
  25. package/dist/errors/capsa-error.js +172 -0
  26. package/dist/errors/capsa-error.js.map +1 -0
  27. package/dist/errors/capsara-error.d.ts +52 -0
  28. package/dist/errors/capsara-error.d.ts.map +1 -0
  29. package/dist/errors/capsara-error.js +83 -0
  30. package/dist/errors/capsara-error.js.map +1 -0
  31. package/dist/errors/index.d.ts +8 -0
  32. package/dist/errors/index.d.ts.map +1 -0
  33. package/dist/errors/index.js +7 -0
  34. package/dist/errors/index.js.map +1 -0
  35. package/dist/index.d.ts +7 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +5 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/internal/capsa-cache.d.ts +49 -0
  40. package/dist/internal/capsa-cache.d.ts.map +1 -0
  41. package/dist/internal/capsa-cache.js +118 -0
  42. package/dist/internal/capsa-cache.js.map +1 -0
  43. package/dist/internal/config/http-client.d.ts +37 -0
  44. package/dist/internal/config/http-client.d.ts.map +1 -0
  45. package/dist/internal/config/http-client.js +63 -0
  46. package/dist/internal/config/http-client.js.map +1 -0
  47. package/dist/internal/config/retry-interceptor.d.ts +18 -0
  48. package/dist/internal/config/retry-interceptor.d.ts.map +1 -0
  49. package/dist/internal/config/retry-interceptor.js +103 -0
  50. package/dist/internal/config/retry-interceptor.js.map +1 -0
  51. package/dist/internal/crypto/compression.d.ts +15 -0
  52. package/dist/internal/crypto/compression.d.ts.map +1 -0
  53. package/dist/internal/crypto/compression.js +34 -0
  54. package/dist/internal/crypto/compression.js.map +1 -0
  55. package/dist/internal/crypto/key-generator.d.ts +23 -0
  56. package/dist/internal/crypto/key-generator.d.ts.map +1 -0
  57. package/dist/internal/crypto/key-generator.js +65 -0
  58. package/dist/internal/crypto/key-generator.js.map +1 -0
  59. package/dist/internal/crypto/primitives.d.ts +67 -0
  60. package/dist/internal/crypto/primitives.d.ts.map +1 -0
  61. package/dist/internal/crypto/primitives.js +230 -0
  62. package/dist/internal/crypto/primitives.js.map +1 -0
  63. package/dist/internal/crypto/signatures.d.ts +30 -0
  64. package/dist/internal/crypto/signatures.d.ts.map +1 -0
  65. package/dist/internal/crypto/signatures.js +153 -0
  66. package/dist/internal/crypto/signatures.js.map +1 -0
  67. package/dist/internal/decryptor/capsa-decryptor.d.ts +89 -0
  68. package/dist/internal/decryptor/capsa-decryptor.d.ts.map +1 -0
  69. package/dist/internal/decryptor/capsa-decryptor.js +263 -0
  70. package/dist/internal/decryptor/capsa-decryptor.js.map +1 -0
  71. package/dist/internal/http-factory.d.ts +78 -0
  72. package/dist/internal/http-factory.d.ts.map +1 -0
  73. package/dist/internal/http-factory.js +201 -0
  74. package/dist/internal/http-factory.js.map +1 -0
  75. package/dist/internal/index.d.ts +5 -0
  76. package/dist/internal/index.d.ts.map +1 -0
  77. package/dist/internal/index.js +5 -0
  78. package/dist/internal/index.js.map +1 -0
  79. package/dist/internal/retry-executor.d.ts +74 -0
  80. package/dist/internal/retry-executor.d.ts.map +1 -0
  81. package/dist/internal/retry-executor.js +204 -0
  82. package/dist/internal/retry-executor.js.map +1 -0
  83. package/dist/internal/services/account-service.d.ts +56 -0
  84. package/dist/internal/services/account-service.d.ts.map +1 -0
  85. package/dist/internal/services/account-service.js +114 -0
  86. package/dist/internal/services/account-service.js.map +1 -0
  87. package/dist/internal/services/audit-service.d.ts +25 -0
  88. package/dist/internal/services/audit-service.d.ts.map +1 -0
  89. package/dist/internal/services/audit-service.js +43 -0
  90. package/dist/internal/services/audit-service.js.map +1 -0
  91. package/dist/internal/services/auth-service.d.ts +44 -0
  92. package/dist/internal/services/auth-service.d.ts.map +1 -0
  93. package/dist/internal/services/auth-service.js +170 -0
  94. package/dist/internal/services/auth-service.js.map +1 -0
  95. package/dist/internal/services/capsa-service.d.ts +40 -0
  96. package/dist/internal/services/capsa-service.d.ts.map +1 -0
  97. package/dist/internal/services/capsa-service.js +82 -0
  98. package/dist/internal/services/capsa-service.js.map +1 -0
  99. package/dist/internal/services/download-service.d.ts +62 -0
  100. package/dist/internal/services/download-service.d.ts.map +1 -0
  101. package/dist/internal/services/download-service.js +114 -0
  102. package/dist/internal/services/download-service.js.map +1 -0
  103. package/dist/internal/services/key-service.d.ts +28 -0
  104. package/dist/internal/services/key-service.d.ts.map +1 -0
  105. package/dist/internal/services/key-service.js +45 -0
  106. package/dist/internal/services/key-service.js.map +1 -0
  107. package/dist/internal/services/limits-service.d.ts +30 -0
  108. package/dist/internal/services/limits-service.d.ts.map +1 -0
  109. package/dist/internal/services/limits-service.js +73 -0
  110. package/dist/internal/services/limits-service.js.map +1 -0
  111. package/dist/internal/services/upload-service.d.ts +61 -0
  112. package/dist/internal/services/upload-service.d.ts.map +1 -0
  113. package/dist/internal/services/upload-service.js +258 -0
  114. package/dist/internal/services/upload-service.js.map +1 -0
  115. package/dist/internal/types.d.ts +74 -0
  116. package/dist/internal/types.d.ts.map +1 -0
  117. package/dist/internal/types.js +3 -0
  118. package/dist/internal/types.js.map +1 -0
  119. package/dist/internal/upload/multipart-builder.d.ts +57 -0
  120. package/dist/internal/upload/multipart-builder.d.ts.map +1 -0
  121. package/dist/internal/upload/multipart-builder.js +139 -0
  122. package/dist/internal/upload/multipart-builder.js.map +1 -0
  123. package/dist/internal/utils/id-generator.d.ts +8 -0
  124. package/dist/internal/utils/id-generator.d.ts.map +1 -0
  125. package/dist/internal/utils/id-generator.js +20 -0
  126. package/dist/internal/utils/id-generator.js.map +1 -0
  127. package/dist/internal/utils/mimetype-lookup.d.ts +8 -0
  128. package/dist/internal/utils/mimetype-lookup.d.ts.map +1 -0
  129. package/dist/internal/utils/mimetype-lookup.js +118 -0
  130. package/dist/internal/utils/mimetype-lookup.js.map +1 -0
  131. package/dist/internal/version.d.ts +20 -0
  132. package/dist/internal/version.d.ts.map +1 -0
  133. package/dist/internal/version.js +25 -0
  134. package/dist/internal/version.js.map +1 -0
  135. package/dist/types/index.d.ts +143 -0
  136. package/dist/types/index.d.ts.map +1 -0
  137. package/dist/types/index.js +20 -0
  138. package/dist/types/index.js.map +1 -0
  139. 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"}
@@ -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