@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,266 @@
1
+ /** Primary interface for zero-knowledge encrypted file sharing. */
2
+ import axios from 'axios';
3
+ import { AuthService } from '../internal/services/auth-service.js';
4
+ import { KeyManager } from '../internal/services/key-service.js';
5
+ import { LimitsManager } from '../internal/services/limits-service.js';
6
+ import { AccountClient } from '../internal/services/account-service.js';
7
+ import { CapsaService } from '../internal/services/capsa-service.js';
8
+ import { DownloadService } from '../internal/services/download-service.js';
9
+ import { UploadService } from '../internal/services/upload-service.js';
10
+ import { AuditService } from '../internal/services/audit-service.js';
11
+ import { DecryptedCapsaCache } from '../internal/capsa-cache.js';
12
+ import { generateKeyPair } from '../internal/crypto/key-generator.js';
13
+ import { CapsaBuilder } from '../builder/capsa-builder.js';
14
+ import { createAxiosConfig, configureRetryInterceptor, createHttpAgent, createHttpsAgent, DEFAULT_TIMEOUT_CONFIG, } from '../internal/config/http-client.js';
15
+ export class CapsaraClient {
16
+ creatorId = null;
17
+ creatorPrivateKey = null;
18
+ authService;
19
+ keyManager;
20
+ limitsManager;
21
+ accountClient;
22
+ capsaService;
23
+ downloadService;
24
+ uploadService;
25
+ auditService;
26
+ capsaCache;
27
+ axiosInstance;
28
+ blobClient;
29
+ timeoutConfig;
30
+ retryConfig;
31
+ maxBatchSize;
32
+ logger;
33
+ refreshPromise = null;
34
+ inFlightCapsaFetches = new Map();
35
+ constructor(baseUrl, options) {
36
+ this.timeoutConfig = { ...DEFAULT_TIMEOUT_CONFIG, ...options?.timeout };
37
+ // eslint-disable-next-line no-console
38
+ this.logger = options?.retry?.logger ?? { log: (msg) => console.log(msg) };
39
+ this.retryConfig = {
40
+ maxRetries: options?.retry?.maxRetries ?? 3,
41
+ baseDelay: options?.retry?.baseDelay ?? 1000,
42
+ maxDelay: options?.retry?.maxDelay ?? 30000,
43
+ enableLogging: options?.retry?.enableLogging ?? false,
44
+ logger: this.logger,
45
+ };
46
+ this.maxBatchSize = options?.maxBatchSize ?? 150;
47
+ const axiosConfig = createAxiosConfig(baseUrl, this.timeoutConfig.apiTimeout, this.timeoutConfig, options?.userAgent);
48
+ this.axiosInstance = axios.create(axiosConfig);
49
+ configureRetryInterceptor(this.axiosInstance, options?.retry);
50
+ // No auth headers — SAS URL contains credentials
51
+ this.blobClient = axios.create({
52
+ timeout: this.timeoutConfig.downloadTimeout,
53
+ maxContentLength: 1024 * 1024 * 1024, // 1GB
54
+ maxBodyLength: 1024 * 1024 * 1024,
55
+ httpAgent: createHttpAgent(this.timeoutConfig),
56
+ httpsAgent: createHttpsAgent(this.timeoutConfig),
57
+ });
58
+ this.authService = new AuthService(baseUrl, {
59
+ expectedIssuer: options?.expectedIssuer,
60
+ expectedAudience: options?.expectedAudience,
61
+ timeout: options?.timeout,
62
+ retry: options?.retry,
63
+ userAgent: options?.userAgent,
64
+ });
65
+ this.axiosInstance.interceptors.request.use((config) => {
66
+ const token = this.authService.getToken();
67
+ if (token) {
68
+ config.headers.Authorization = `Bearer ${token}`;
69
+ }
70
+ return config;
71
+ });
72
+ // Automatic token refresh on 401
73
+ this.axiosInstance.interceptors.response.use((response) => response, async (error) => {
74
+ const axiosError = error;
75
+ const originalRequest = axiosError.config;
76
+ if (axiosError.response?.status === 401 &&
77
+ originalRequest &&
78
+ !originalRequest._retry &&
79
+ this.authService.canRefresh()) {
80
+ originalRequest._retry = true;
81
+ // Single-flight: coalesce concurrent refresh attempts into one request
82
+ if (!this.refreshPromise) {
83
+ this.refreshPromise = this.authService.refresh().finally(() => {
84
+ this.refreshPromise = null;
85
+ });
86
+ }
87
+ const refreshed = await this.refreshPromise;
88
+ if (refreshed) {
89
+ const newToken = this.authService.getToken();
90
+ if (newToken) {
91
+ originalRequest.headers.Authorization = `Bearer ${newToken}`;
92
+ }
93
+ return this.axiosInstance(originalRequest);
94
+ }
95
+ const refreshError = this.authService.getLastRefreshError();
96
+ if (refreshError) {
97
+ return Promise.reject(refreshError);
98
+ }
99
+ }
100
+ if (error instanceof Error) {
101
+ return Promise.reject(error);
102
+ }
103
+ return Promise.reject(new Error(String(error)));
104
+ });
105
+ this.keyManager = new KeyManager(baseUrl, () => this.authService.getToken(), {
106
+ timeout: options?.timeout,
107
+ retry: options?.retry,
108
+ });
109
+ this.limitsManager = new LimitsManager(baseUrl, options?.timeout, options?.retry);
110
+ this.accountClient = new AccountClient(baseUrl, () => this.authService.getToken(), options?.timeout, options?.retry);
111
+ this.capsaService = new CapsaService({
112
+ axiosInstance: this.axiosInstance,
113
+ keyManager: this.keyManager,
114
+ });
115
+ this.downloadService = new DownloadService({
116
+ axiosInstance: this.axiosInstance,
117
+ blobClient: this.blobClient,
118
+ retryConfig: this.retryConfig,
119
+ logger: this.logger,
120
+ });
121
+ this.uploadService = new UploadService({
122
+ baseUrl,
123
+ keyManager: this.keyManager,
124
+ getToken: () => this.authService.getToken(),
125
+ timeoutConfig: this.timeoutConfig,
126
+ retryConfig: this.retryConfig,
127
+ logger: this.logger,
128
+ maxBatchSize: this.maxBatchSize,
129
+ userAgent: options?.userAgent,
130
+ });
131
+ this.auditService = new AuditService({ axiosInstance: this.axiosInstance });
132
+ this.capsaCache = new DecryptedCapsaCache({ ttl: options?.cacheTTL ?? 5 * 60 * 1000 });
133
+ if (options?.credentials) {
134
+ this.login(options.credentials).catch(() => { });
135
+ }
136
+ if (options?.accessToken) {
137
+ this.authService.setToken(options.accessToken);
138
+ }
139
+ }
140
+ async login(credentials) {
141
+ const response = await this.authService.login(credentials);
142
+ this.creatorId = response.party.id;
143
+ return response;
144
+ }
145
+ async logout() {
146
+ this.capsaCache.clearAll();
147
+ return this.authService.logout();
148
+ }
149
+ isAuthenticated() {
150
+ return this.authService.isAuthenticated();
151
+ }
152
+ setPrivateKey(privateKey) {
153
+ this.creatorPrivateKey = privateKey;
154
+ }
155
+ async createCapsaBuilder() {
156
+ if (!this.creatorId || !this.creatorPrivateKey) {
157
+ throw new Error('Creator identity not set. Call login() and setPrivateKey() first.');
158
+ }
159
+ const limits = await this.limitsManager.getLimits();
160
+ return new CapsaBuilder(this.creatorId, this.creatorPrivateKey, limits);
161
+ }
162
+ async sendCapsas(builders) {
163
+ if (!this.creatorId) {
164
+ throw new Error('Creator identity not set. Call login() and setPrivateKey() first.');
165
+ }
166
+ return this.uploadService.sendCapsas(builders, this.creatorId);
167
+ }
168
+ async getCapsa(capsaId, options) {
169
+ if (options?.decrypt === false) {
170
+ return this.capsaService.getCapsa(capsaId);
171
+ }
172
+ // Deduplicates concurrent requests for the same capsaId
173
+ return this.getOrCreateCapsaFetch(capsaId, options);
174
+ }
175
+ getOrCreateCapsaFetch(capsaId, options) {
176
+ const existing = this.inFlightCapsaFetches.get(capsaId);
177
+ if (existing) {
178
+ return existing;
179
+ }
180
+ // Must set in map synchronously before any await to prevent races
181
+ const fetchPromise = this.fetchAndDecryptCapsa(capsaId, options).finally(() => {
182
+ this.inFlightCapsaFetches.delete(capsaId);
183
+ });
184
+ this.inFlightCapsaFetches.set(capsaId, fetchPromise);
185
+ return fetchPromise;
186
+ }
187
+ async fetchAndDecryptCapsa(capsaId, options) {
188
+ if (!this.creatorPrivateKey) {
189
+ throw new Error('Private key required. Call setPrivateKey() first.');
190
+ }
191
+ const verifySignature = options?.verifySignature !== false; // default true
192
+ const decrypted = await this.capsaService.getDecryptedCapsa(capsaId, this.creatorPrivateKey, verifySignature);
193
+ // Zeroed on cache eviction
194
+ const masterKeyBuffer = decrypted._masterKey;
195
+ if (masterKeyBuffer) {
196
+ this.capsaCache.set(capsaId, masterKeyBuffer, decrypted.files.map(f => ({
197
+ fileId: f.fileId,
198
+ iv: f.iv,
199
+ authTag: f.authTag,
200
+ compressed: f.compressed,
201
+ encryptedFilename: f.encryptedFilename,
202
+ filenameIV: f.filenameIV,
203
+ filenameAuthTag: f.filenameAuthTag,
204
+ })));
205
+ }
206
+ return decrypted;
207
+ }
208
+ async listCapsas(filters) {
209
+ return this.capsaService.listCapsas(filters);
210
+ }
211
+ async deleteCapsa(capsaId) {
212
+ this.capsaCache.clear(capsaId);
213
+ return this.capsaService.deleteCapsa(capsaId);
214
+ }
215
+ async downloadFile(capsaId, fileId) {
216
+ let masterKey = this.capsaCache.getMasterKey(capsaId);
217
+ let fileMetadata = this.capsaCache.getFileMetadata(capsaId, fileId);
218
+ if (!masterKey || !fileMetadata) {
219
+ await this.getCapsa(capsaId);
220
+ masterKey = this.capsaCache.getMasterKey(capsaId);
221
+ fileMetadata = this.capsaCache.getFileMetadata(capsaId, fileId);
222
+ }
223
+ if (!masterKey || !fileMetadata) {
224
+ throw new Error(`File ${fileId} not found in capsa ${capsaId}`);
225
+ }
226
+ return this.downloadService.downloadAndDecryptFile(capsaId, fileId, masterKey, fileMetadata);
227
+ }
228
+ async getAuditEntries(capsaId, filters) {
229
+ return this.auditService.getAuditEntries(capsaId, filters);
230
+ }
231
+ async createAuditEntry(capsaId, entry) {
232
+ return this.auditService.createAuditEntry(capsaId, entry);
233
+ }
234
+ async getCurrentPublicKey() {
235
+ return this.accountClient.getCurrentPublicKey();
236
+ }
237
+ async addPublicKey(publicKey, fingerprint, reason) {
238
+ return this.accountClient.addPublicKey(publicKey, fingerprint, reason);
239
+ }
240
+ async getKeyHistory() {
241
+ return this.accountClient.getKeyHistory();
242
+ }
243
+ async rotateKey() {
244
+ return this.accountClient.rotateKey();
245
+ }
246
+ async getLimits() {
247
+ return this.limitsManager.getLimits();
248
+ }
249
+ static async generateKeyPair() {
250
+ return generateKeyPair();
251
+ }
252
+ clearCache() {
253
+ this.capsaCache.clearAll();
254
+ }
255
+ /** Release all resources and securely clear cached keys. */
256
+ async destroy() {
257
+ this.capsaCache.clearAll();
258
+ this.inFlightCapsaFetches.clear();
259
+ this.refreshPromise = null;
260
+ this.creatorId = null;
261
+ this.creatorPrivateKey = null;
262
+ // Fire-and-forget server-side logout
263
+ await this.authService.logout().catch(() => { });
264
+ }
265
+ }
266
+ //# sourceMappingURL=capsara-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsara-client.js","sourceRoot":"","sources":["../../src/client/capsara-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /** Errors from account operations (webhooks, keys, licenses, appointments, delegates). */
2
+ import { CapsaraError, type ApiErrorResponse, type AxiosLikeError } from './capsara-error.js';
3
+ export declare class CapsaraAccountError extends CapsaraError {
4
+ constructor(message: string, code: string, statusCode: number, details?: Record<string, unknown>, response?: ApiErrorResponse);
5
+ /**
6
+ * Unauthorized - missing or invalid authentication
7
+ * HTTP 401 - UNAUTHORIZED
8
+ */
9
+ static unauthorized(): CapsaraAccountError;
10
+ /**
11
+ * Resource not found (webhook, license, appointment, etc.)
12
+ * HTTP 404 - NOT_FOUND
13
+ */
14
+ static notFound(resourceType: string, identifier?: string): CapsaraAccountError;
15
+ /**
16
+ * Webhook not found
17
+ * HTTP 404 - WEBHOOK_NOT_FOUND
18
+ */
19
+ static webhookNotFound(webhookId?: string): CapsaraAccountError;
20
+ /**
21
+ * License not found
22
+ * HTTP 404 - LICENSE_NOT_FOUND
23
+ */
24
+ static licenseNotFound(state?: string, licenseNumber?: string): CapsaraAccountError;
25
+ /**
26
+ * Appointment not found
27
+ * HTTP 404 - APPOINTMENT_NOT_FOUND
28
+ */
29
+ static appointmentNotFound(carrierPartyId?: string): CapsaraAccountError;
30
+ /**
31
+ * Delegate not found
32
+ * HTTP 404 - DELEGATE_NOT_FOUND
33
+ */
34
+ static delegateNotFound(delegateId?: string): CapsaraAccountError;
35
+ /**
36
+ * Key not found
37
+ * HTTP 404 - KEY_NOT_FOUND
38
+ */
39
+ static keyNotFound(keyFingerprint?: string): CapsaraAccountError;
40
+ /**
41
+ * Invalid request body (validation error)
42
+ * HTTP 400 - VALIDATION_ERROR
43
+ */
44
+ static validationError(message: string, details?: Record<string, unknown>): CapsaraAccountError;
45
+ /**
46
+ * Missing required parameter
47
+ * HTTP 400 - MISSING_PARAM
48
+ */
49
+ static missingParam(paramName: string): CapsaraAccountError;
50
+ /**
51
+ * Resource already exists (duplicate)
52
+ * HTTP 409 - ALREADY_EXISTS
53
+ */
54
+ static alreadyExists(resourceType: string, identifier?: string): CapsaraAccountError;
55
+ /**
56
+ * Cannot delete active key
57
+ * HTTP 400 - CANNOT_DELETE_ACTIVE_KEY
58
+ */
59
+ static cannotDeleteActiveKey(): CapsaraAccountError;
60
+ /**
61
+ * Webhook limit exceeded
62
+ * HTTP 400 - WEBHOOK_LIMIT_EXCEEDED
63
+ */
64
+ static webhookLimitExceeded(limit: number): CapsaraAccountError;
65
+ /**
66
+ * Invalid webhook URL
67
+ * HTTP 400 - INVALID_WEBHOOK_URL
68
+ */
69
+ static invalidWebhookUrl(url?: string): CapsaraAccountError;
70
+ /** Maps an API error response to the appropriate factory method. */
71
+ static fromApiError(error: AxiosLikeError): CapsaraAccountError;
72
+ }
73
+ //# sourceMappingURL=account-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-error.d.ts","sourceRoot":"","sources":["../../src/errors/account-error.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9F,qBAAa,mBAAoB,SAAQ,YAAY;gBAEjD,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,YAAY,IAAI,mBAAmB;IAQ1C;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAW/E;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAI/D;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAKnF;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAIxE;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAIjE;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAIhE;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB;IAS/F;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB;IAS3D;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAWpF;;;OAGG;IACH,MAAM,CAAC,qBAAqB,IAAI,mBAAmB;IAQnD;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB;IAS/D;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAS3D,oEAAoE;IACpE,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,mBAAmB;CA4FhE"}
@@ -0,0 +1,155 @@
1
+ /** Errors from account operations (webhooks, keys, licenses, appointments, delegates). */
2
+ import { CapsaraError } from './capsara-error.js';
3
+ export class CapsaraAccountError extends CapsaraError {
4
+ constructor(message, code, statusCode, details, response) {
5
+ super(message, code, statusCode, details, response);
6
+ this.name = 'CapsaraAccountError';
7
+ }
8
+ /**
9
+ * Unauthorized - missing or invalid authentication
10
+ * HTTP 401 - UNAUTHORIZED
11
+ */
12
+ static unauthorized() {
13
+ return new CapsaraAccountError('Unauthorized', 'UNAUTHORIZED', 401);
14
+ }
15
+ /**
16
+ * Resource not found (webhook, license, appointment, etc.)
17
+ * HTTP 404 - NOT_FOUND
18
+ */
19
+ static notFound(resourceType, identifier) {
20
+ return new CapsaraAccountError(identifier
21
+ ? `${resourceType} with identifier ${identifier} not found`
22
+ : `${resourceType} not found`, 'NOT_FOUND', 404, { resourceType, identifier });
23
+ }
24
+ /**
25
+ * Webhook not found
26
+ * HTTP 404 - WEBHOOK_NOT_FOUND
27
+ */
28
+ static webhookNotFound(webhookId) {
29
+ return CapsaraAccountError.notFound('Webhook', webhookId);
30
+ }
31
+ /**
32
+ * License not found
33
+ * HTTP 404 - LICENSE_NOT_FOUND
34
+ */
35
+ static licenseNotFound(state, licenseNumber) {
36
+ const identifier = state && licenseNumber ? `${state}/${licenseNumber}` : undefined;
37
+ return CapsaraAccountError.notFound('License', identifier);
38
+ }
39
+ /**
40
+ * Appointment not found
41
+ * HTTP 404 - APPOINTMENT_NOT_FOUND
42
+ */
43
+ static appointmentNotFound(carrierPartyId) {
44
+ return CapsaraAccountError.notFound('Appointment', carrierPartyId);
45
+ }
46
+ /**
47
+ * Delegate not found
48
+ * HTTP 404 - DELEGATE_NOT_FOUND
49
+ */
50
+ static delegateNotFound(delegateId) {
51
+ return CapsaraAccountError.notFound('Delegate', delegateId);
52
+ }
53
+ /**
54
+ * Key not found
55
+ * HTTP 404 - KEY_NOT_FOUND
56
+ */
57
+ static keyNotFound(keyFingerprint) {
58
+ return CapsaraAccountError.notFound('Key', keyFingerprint);
59
+ }
60
+ /**
61
+ * Invalid request body (validation error)
62
+ * HTTP 400 - VALIDATION_ERROR
63
+ */
64
+ static validationError(message, details) {
65
+ return new CapsaraAccountError(message || 'Invalid request body', 'VALIDATION_ERROR', 400, details);
66
+ }
67
+ /**
68
+ * Missing required parameter
69
+ * HTTP 400 - MISSING_PARAM
70
+ */
71
+ static missingParam(paramName) {
72
+ return new CapsaraAccountError(`${paramName} is required`, 'MISSING_PARAM', 400, { paramName });
73
+ }
74
+ /**
75
+ * Resource already exists (duplicate)
76
+ * HTTP 409 - ALREADY_EXISTS
77
+ */
78
+ static alreadyExists(resourceType, identifier) {
79
+ return new CapsaraAccountError(identifier
80
+ ? `${resourceType} with identifier ${identifier} already exists`
81
+ : `${resourceType} already exists`, 'ALREADY_EXISTS', 409, { resourceType, identifier });
82
+ }
83
+ /**
84
+ * Cannot delete active key
85
+ * HTTP 400 - CANNOT_DELETE_ACTIVE_KEY
86
+ */
87
+ static cannotDeleteActiveKey() {
88
+ return new CapsaraAccountError('Cannot delete the currently active key', 'CANNOT_DELETE_ACTIVE_KEY', 400);
89
+ }
90
+ /**
91
+ * Webhook limit exceeded
92
+ * HTTP 400 - WEBHOOK_LIMIT_EXCEEDED
93
+ */
94
+ static webhookLimitExceeded(limit) {
95
+ return new CapsaraAccountError(`Webhook limit of ${limit} exceeded`, 'WEBHOOK_LIMIT_EXCEEDED', 400, { limit });
96
+ }
97
+ /**
98
+ * Invalid webhook URL
99
+ * HTTP 400 - INVALID_WEBHOOK_URL
100
+ */
101
+ static invalidWebhookUrl(url) {
102
+ return new CapsaraAccountError('Invalid webhook URL', 'INVALID_WEBHOOK_URL', 400, url ? { url } : undefined);
103
+ }
104
+ /** Maps an API error response to the appropriate factory method. */
105
+ static fromApiError(error) {
106
+ // Handle axios errors
107
+ if (error.response) {
108
+ const status = error.response.status;
109
+ const data = error.response.data;
110
+ const errorCode = data?.error?.code;
111
+ const errorMessage = data?.error?.message ?? data?.message ?? error.message ?? 'Unknown error';
112
+ const errorDetails = data?.error?.details ?? data?.details;
113
+ // Map known error codes to factory methods
114
+ switch (errorCode) {
115
+ case 'UNAUTHORIZED':
116
+ return CapsaraAccountError.unauthorized();
117
+ case 'WEBHOOK_NOT_FOUND':
118
+ return CapsaraAccountError.webhookNotFound((errorDetails?.webhookId ?? errorDetails?.identifier));
119
+ case 'LICENSE_NOT_FOUND':
120
+ return CapsaraAccountError.licenseNotFound(errorDetails?.state, errorDetails?.licenseNumber);
121
+ case 'APPOINTMENT_NOT_FOUND':
122
+ return CapsaraAccountError.appointmentNotFound((errorDetails?.carrierPartyId ?? errorDetails?.identifier));
123
+ case 'DELEGATE_NOT_FOUND':
124
+ return CapsaraAccountError.delegateNotFound((errorDetails?.delegateId ?? errorDetails?.identifier));
125
+ case 'KEY_NOT_FOUND':
126
+ return CapsaraAccountError.keyNotFound((errorDetails?.keyFingerprint ?? errorDetails?.identifier));
127
+ case 'NOT_FOUND':
128
+ return CapsaraAccountError.notFound(errorDetails?.resourceType ?? 'Resource', errorDetails?.identifier);
129
+ case 'VALIDATION_ERROR':
130
+ return CapsaraAccountError.validationError(errorMessage, errorDetails);
131
+ case 'MISSING_PARAM':
132
+ return CapsaraAccountError.missingParam(errorDetails?.paramName ?? 'Parameter');
133
+ case 'ALREADY_EXISTS':
134
+ return CapsaraAccountError.alreadyExists(errorDetails?.resourceType ?? 'Resource', errorDetails?.identifier);
135
+ case 'CANNOT_DELETE_ACTIVE_KEY':
136
+ return CapsaraAccountError.cannotDeleteActiveKey();
137
+ case 'WEBHOOK_LIMIT_EXCEEDED':
138
+ return CapsaraAccountError.webhookLimitExceeded(errorDetails?.limit ?? 10);
139
+ case 'INVALID_WEBHOOK_URL':
140
+ return CapsaraAccountError.invalidWebhookUrl(errorDetails?.url);
141
+ default:
142
+ // Generic account error with status code
143
+ return new CapsaraAccountError(errorMessage, errorCode ?? 'ACCOUNT_ERROR', status, errorDetails);
144
+ }
145
+ }
146
+ // Handle non-axios errors
147
+ if (error instanceof CapsaraAccountError) {
148
+ return error;
149
+ }
150
+ // Generic error fallback
151
+ const errorMessage = error.message ?? 'Unknown account error';
152
+ return new CapsaraAccountError(errorMessage, 'ACCOUNT_ERROR', 500, { originalError: errorMessage });
153
+ }
154
+ }
155
+ //# sourceMappingURL=account-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-error.js","sourceRoot":"","sources":["../../src/errors/account-error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { CapsaraError, type ApiErrorResponse, type AxiosLikeError, type StoredErrorResponse } from './capsara-error.js';
2
+ /** Errors from audit trail operations. */
3
+ export declare class CapsaraAuditError extends CapsaraError {
4
+ readonly response?: StoredErrorResponse;
5
+ constructor(message: string, code: string, statusCode: number, details?: Record<string, unknown>, response?: ApiErrorResponse);
6
+ /**
7
+ * Create error for insufficient permissions
8
+ * Thrown when recipient tries to add 'log' action (creator-only)
9
+ */
10
+ static insufficientPermissions(details?: Record<string, unknown>): CapsaraAuditError;
11
+ /**
12
+ * Create error for invalid audit action
13
+ * Thrown when action is not 'log' or 'processed'
14
+ */
15
+ static invalidAction(action?: string): CapsaraAuditError;
16
+ /**
17
+ * Create error for access denied
18
+ * Thrown when party is not in capsa keychain
19
+ */
20
+ static accessDenied(details?: Record<string, unknown>): CapsaraAuditError;
21
+ /**
22
+ * Create error for missing details field
23
+ * Thrown when 'log' action is used without details
24
+ */
25
+ static missingDetails(): CapsaraAuditError;
26
+ /**
27
+ * Create error for capsa not found
28
+ * Thrown when capsa doesn't exist
29
+ */
30
+ static capsaNotFound(capsaId: string): CapsaraAuditError;
31
+ /** Maps an API error response to the appropriate factory method. */
32
+ static fromApiError(error: AxiosLikeError): CapsaraAuditError;
33
+ }
34
+ //# sourceMappingURL=audit-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-error.d.ts","sourceRoot":"","sources":["../../src/errors/audit-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAExH,0CAA0C;AAC1C,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;IAO7B;;;OAGG;IACH,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;IASpF;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IASxD;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;IASzE;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,iBAAiB;IAQ1C;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;IASxD,oEAAoE;IACpE,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,iBAAiB;CA2D9D"}
@@ -0,0 +1,93 @@
1
+ import { CapsaraError } from './capsara-error.js';
2
+ /** Errors from audit trail operations. */
3
+ export class CapsaraAuditError extends CapsaraError {
4
+ constructor(message, code, statusCode, details, response) {
5
+ super(message, code, statusCode, details, response);
6
+ this.name = 'CapsaraAuditError';
7
+ Object.setPrototypeOf(this, CapsaraAuditError.prototype);
8
+ }
9
+ /**
10
+ * Create error for insufficient permissions
11
+ * Thrown when recipient tries to add 'log' action (creator-only)
12
+ */
13
+ static insufficientPermissions(details) {
14
+ return new CapsaraAuditError('You do not have permission to perform this action', 'INSUFFICIENT_PERMISSIONS', 403, details);
15
+ }
16
+ /**
17
+ * Create error for invalid audit action
18
+ * Thrown when action is not 'log' or 'processed'
19
+ */
20
+ static invalidAction(action) {
21
+ return new CapsaraAuditError('Invalid audit action', 'INVALID_AUDIT_ACTION', 400, { action });
22
+ }
23
+ /**
24
+ * Create error for access denied
25
+ * Thrown when party is not in capsa keychain
26
+ */
27
+ static accessDenied(details) {
28
+ return new CapsaraAuditError('You do not have access to this capsa', 'ACCESS_DENIED', 403, details);
29
+ }
30
+ /**
31
+ * Create error for missing details field
32
+ * Thrown when 'log' action is used without details
33
+ */
34
+ static missingDetails() {
35
+ return new CapsaraAuditError('Details field is required for log action', 'MISSING_DETAILS', 400);
36
+ }
37
+ /**
38
+ * Create error for capsa not found
39
+ * Thrown when capsa doesn't exist
40
+ */
41
+ static capsaNotFound(capsaId) {
42
+ return new CapsaraAuditError('Capsa not found or access denied', 'CAPSA_NOT_FOUND', 404, { capsaId });
43
+ }
44
+ /** Maps an API error response to the appropriate factory method. */
45
+ static fromApiError(error) {
46
+ // Extract error information
47
+ const errorCode = error.response?.data?.error?.code;
48
+ const errorMessage = error.response?.data?.error?.message;
49
+ const statusCode = error.response?.status ?? 500;
50
+ const details = error.response?.data?.error?.details;
51
+ const response = error.response;
52
+ // Map known error codes to factory methods
53
+ // Note: Factory methods don't include response, so add it after creation
54
+ let auditError;
55
+ switch (errorCode) {
56
+ case 'INSUFFICIENT_PERMISSIONS':
57
+ auditError = CapsaraAuditError.insufficientPermissions(details);
58
+ break;
59
+ case 'INVALID_AUDIT_ACTION':
60
+ auditError = CapsaraAuditError.invalidAction(details?.action);
61
+ break;
62
+ case 'ACCESS_DENIED':
63
+ auditError = CapsaraAuditError.accessDenied(details);
64
+ break;
65
+ case 'MISSING_DETAILS':
66
+ auditError = CapsaraAuditError.missingDetails();
67
+ break;
68
+ case 'ENVELOPE_NOT_FOUND':
69
+ case 'CAPSA_NOT_FOUND':
70
+ auditError = CapsaraAuditError.capsaNotFound((details?.capsaId ?? details?.envelopeId) ?? '');
71
+ break;
72
+ default:
73
+ // Generic audit error for unknown codes
74
+ return new CapsaraAuditError(errorMessage ?? 'An audit error occurred', errorCode ?? 'UNKNOWN_AUDIT_ERROR', statusCode, details, response);
75
+ }
76
+ // Add response to error created by factory method
77
+ if (response) {
78
+ Object.defineProperty(auditError, 'response', {
79
+ value: {
80
+ status: response.status,
81
+ statusText: response.statusText,
82
+ headers: response.headers,
83
+ data: response.data,
84
+ },
85
+ writable: false,
86
+ enumerable: true,
87
+ configurable: true,
88
+ });
89
+ }
90
+ return auditError;
91
+ }
92
+ }
93
+ //# sourceMappingURL=audit-error.js.map