@vaultsandbox/client 0.8.5 → 0.9.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/README.md +44 -23
- package/dist/client.d.ts +11 -0
- package/dist/client.js +33 -1
- package/dist/client.js.map +1 -1
- package/dist/crypto/decrypt.d.ts +21 -0
- package/dist/crypto/decrypt.js +48 -33
- package/dist/crypto/decrypt.js.map +1 -1
- package/dist/crypto/signature.d.ts +3 -1
- package/dist/crypto/signature.js +9 -8
- package/dist/crypto/signature.js.map +1 -1
- package/dist/email.js +4 -0
- package/dist/email.js.map +1 -1
- package/dist/http/api-client.d.ts +31 -2
- package/dist/http/api-client.js +72 -9
- package/dist/http/api-client.js.map +1 -1
- package/dist/inbox.d.ts +37 -1
- package/dist/inbox.js +98 -9
- package/dist/inbox.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/strategies/delivery-strategy.d.ts +2 -1
- package/dist/strategies/polling-strategy.d.ts +9 -1
- package/dist/strategies/polling-strategy.js +29 -7
- package/dist/strategies/polling-strategy.js.map +1 -1
- package/dist/strategies/sse-strategy.d.ts +22 -1
- package/dist/strategies/sse-strategy.js +98 -13
- package/dist/strategies/sse-strategy.js.map +1 -1
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/email-utils.js +33 -24
- package/dist/utils/email-utils.js.map +1 -1
- package/package.json +2 -2
package/dist/http/api-client.js
CHANGED
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
import axios from 'axios';
|
|
5
5
|
import { ApiError, NetworkError, InboxNotFoundError, EmailNotFoundError, WebhookNotFoundError, } from '../types/index.js';
|
|
6
6
|
import { sleep } from '../utils/sleep.js';
|
|
7
|
+
/** Default HTTP request timeout in milliseconds */
|
|
8
|
+
const DEFAULT_HTTP_TIMEOUT_MS = 30000;
|
|
9
|
+
/** Default maximum number of retry attempts for failed requests */
|
|
10
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
11
|
+
/** Default delay between retries in milliseconds (used as base for exponential backoff) */
|
|
12
|
+
const DEFAULT_RETRY_DELAY_MS = 1000;
|
|
13
|
+
/** Default HTTP status codes that trigger automatic retry */
|
|
14
|
+
const DEFAULT_RETRY_STATUS_CODES = [408, 429, 500, 502, 503, 504];
|
|
7
15
|
/**
|
|
8
16
|
* HTTP API client for interacting with the VaultSandbox Gateway server.
|
|
9
17
|
* Handles all API communication including inbox management, email operations,
|
|
@@ -24,7 +32,7 @@ export class ApiClient {
|
|
|
24
32
|
'X-API-Key': config.apiKey,
|
|
25
33
|
'Content-Type': 'application/json',
|
|
26
34
|
},
|
|
27
|
-
timeout:
|
|
35
|
+
timeout: DEFAULT_HTTP_TIMEOUT_MS,
|
|
28
36
|
});
|
|
29
37
|
// Setup retry logic
|
|
30
38
|
this.setupRetry();
|
|
@@ -37,9 +45,9 @@ export class ApiClient {
|
|
|
37
45
|
setupRetry() {
|
|
38
46
|
this.client.interceptors.response.use((response) => response, async (error) => {
|
|
39
47
|
const config = error.config;
|
|
40
|
-
const maxRetries = this.config.maxRetries ??
|
|
41
|
-
const retryDelay = this.config.retryDelay ??
|
|
42
|
-
const retryOn = this.config.retryOn ??
|
|
48
|
+
const maxRetries = this.config.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
49
|
+
const retryDelay = this.config.retryDelay ?? DEFAULT_RETRY_DELAY_MS;
|
|
50
|
+
const retryOn = this.config.retryOn ?? DEFAULT_RETRY_STATUS_CODES;
|
|
43
51
|
// Early return if no config
|
|
44
52
|
if (!config) {
|
|
45
53
|
throw error;
|
|
@@ -70,16 +78,30 @@ export class ApiClient {
|
|
|
70
78
|
return new NetworkError(error.message || 'Network error occurred');
|
|
71
79
|
}
|
|
72
80
|
const status = error.response.status;
|
|
81
|
+
const data = error.response.data;
|
|
73
82
|
/* istanbul ignore next - defensive fallback when server doesn't return error message */
|
|
74
|
-
const message =
|
|
83
|
+
const message = data?.error || error.message;
|
|
84
|
+
// Prefer structured error type if available
|
|
85
|
+
if (data?.errorType) {
|
|
86
|
+
switch (data.errorType) {
|
|
87
|
+
case 'inbox_not_found':
|
|
88
|
+
return new InboxNotFoundError(message);
|
|
89
|
+
case 'email_not_found':
|
|
90
|
+
return new EmailNotFoundError(message);
|
|
91
|
+
case 'webhook_not_found':
|
|
92
|
+
return new WebhookNotFoundError(message);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Fallback to message-based detection for backwards compatibility
|
|
75
96
|
if (status === 404) {
|
|
76
|
-
|
|
97
|
+
const lowerMessage = message.toLowerCase();
|
|
98
|
+
if (lowerMessage.includes('webhook')) {
|
|
77
99
|
return new WebhookNotFoundError(message);
|
|
78
100
|
}
|
|
79
|
-
if (
|
|
101
|
+
if (lowerMessage.includes('inbox')) {
|
|
80
102
|
return new InboxNotFoundError(message);
|
|
81
103
|
}
|
|
82
|
-
if (
|
|
104
|
+
if (lowerMessage.includes('email')) {
|
|
83
105
|
return new EmailNotFoundError(message);
|
|
84
106
|
}
|
|
85
107
|
}
|
|
@@ -115,11 +137,12 @@ export class ApiClient {
|
|
|
115
137
|
* @param emailAuth - Optional flag to enable email authentication checks
|
|
116
138
|
* @param encryption - Optional encryption preference ('encrypted' or 'plain')
|
|
117
139
|
* @param spamAnalysis - Optional flag to enable spam analysis for the inbox
|
|
140
|
+
* @param chaos - Optional chaos engineering configuration for the inbox
|
|
118
141
|
* @returns Promise resolving to the created inbox data including email address
|
|
119
142
|
* @throws {NetworkError} If network communication fails
|
|
120
143
|
* @throws {ApiError} If the server returns an error response
|
|
121
144
|
*/
|
|
122
|
-
async createInbox(publicKey, ttl, emailAddress, emailAuth, encryption, spamAnalysis) {
|
|
145
|
+
async createInbox(publicKey, ttl, emailAddress, emailAuth, encryption, spamAnalysis, chaos) {
|
|
123
146
|
const payload = {};
|
|
124
147
|
if (publicKey !== undefined && publicKey !== null) {
|
|
125
148
|
payload.clientKemPk = publicKey;
|
|
@@ -139,6 +162,9 @@ export class ApiClient {
|
|
|
139
162
|
if (spamAnalysis !== undefined) {
|
|
140
163
|
payload.spamAnalysis = spamAnalysis;
|
|
141
164
|
}
|
|
165
|
+
if (chaos !== undefined) {
|
|
166
|
+
payload.chaos = chaos;
|
|
167
|
+
}
|
|
142
168
|
const response = await this.client.post('/api/inboxes', payload);
|
|
143
169
|
return response.data;
|
|
144
170
|
}
|
|
@@ -342,6 +368,43 @@ export class ApiClient {
|
|
|
342
368
|
const response = await this.client.post(`/api/inboxes/${encodeURIComponent(emailAddress)}/webhooks/${webhookId}/rotate-secret`);
|
|
343
369
|
return response.data;
|
|
344
370
|
}
|
|
371
|
+
// ===== Chaos Configuration =====
|
|
372
|
+
/**
|
|
373
|
+
* Gets the chaos configuration for an inbox.
|
|
374
|
+
* @param emailAddress - The email address of the inbox
|
|
375
|
+
* @returns Promise resolving to the chaos configuration
|
|
376
|
+
* @throws {NetworkError} If network communication fails
|
|
377
|
+
* @throws {InboxNotFoundError} If the inbox does not exist
|
|
378
|
+
* @throws {ApiError} If chaos is disabled globally (403) or other error
|
|
379
|
+
*/
|
|
380
|
+
async getChaosConfig(emailAddress) {
|
|
381
|
+
const response = await this.client.get(`/api/inboxes/${encodeURIComponent(emailAddress)}/chaos`);
|
|
382
|
+
return response.data;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Sets or updates the chaos configuration for an inbox.
|
|
386
|
+
* @param emailAddress - The email address of the inbox
|
|
387
|
+
* @param config - The chaos configuration to apply
|
|
388
|
+
* @returns Promise resolving to the updated chaos configuration
|
|
389
|
+
* @throws {NetworkError} If network communication fails
|
|
390
|
+
* @throws {InboxNotFoundError} If the inbox does not exist
|
|
391
|
+
* @throws {ApiError} If chaos is disabled globally (403), validation fails (400), or other error
|
|
392
|
+
*/
|
|
393
|
+
async setChaosConfig(emailAddress, config) {
|
|
394
|
+
const response = await this.client.post(`/api/inboxes/${encodeURIComponent(emailAddress)}/chaos`, config);
|
|
395
|
+
return response.data;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Disables all chaos for an inbox.
|
|
399
|
+
* @param emailAddress - The email address of the inbox
|
|
400
|
+
* @returns Promise that resolves when chaos is disabled
|
|
401
|
+
* @throws {NetworkError} If network communication fails
|
|
402
|
+
* @throws {InboxNotFoundError} If the inbox does not exist
|
|
403
|
+
* @throws {ApiError} If chaos is disabled globally (403) or other error
|
|
404
|
+
*/
|
|
405
|
+
async disableChaos(emailAddress) {
|
|
406
|
+
await this.client.delete(`/api/inboxes/${encodeURIComponent(emailAddress)}/chaos`);
|
|
407
|
+
}
|
|
345
408
|
// ===== Utility =====
|
|
346
409
|
/**
|
|
347
410
|
* Gets the base URL of the VaultSandbox Gateway server.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/http/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAwD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/http/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/inbox.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Inbox class - manages email retrieval and decryption for a single inbox
|
|
3
3
|
*/
|
|
4
|
-
import type { InboxData, Keypair, WaitOptions, WaitForCountOptions, SyncStatus, RawEmail, Subscription, IEmail, IEmailMetadata, ExportedInboxData, EmailData, CreateWebhookOptions, UpdateWebhookOptions, WebhookData, WebhookListResponse, TestWebhookResponse, RotateSecretResponse } from './types/index.js';
|
|
4
|
+
import type { InboxData, Keypair, WaitOptions, WaitForCountOptions, SyncStatus, RawEmail, Subscription, IEmail, IEmailMetadata, ExportedInboxData, EmailData, CreateWebhookOptions, UpdateWebhookOptions, WebhookData, WebhookListResponse, TestWebhookResponse, RotateSecretResponse, ChaosConfigRequest, ChaosConfigResponse } from './types/index.js';
|
|
5
5
|
import type { ApiClient } from './http/api-client.js';
|
|
6
6
|
import type { DeliveryStrategy } from './strategies/delivery-strategy.js';
|
|
7
7
|
/**
|
|
@@ -28,6 +28,7 @@ export declare class Inbox {
|
|
|
28
28
|
private serverPublicKey;
|
|
29
29
|
private strategy;
|
|
30
30
|
private emailCache;
|
|
31
|
+
private activeSubscriptions;
|
|
31
32
|
/**
|
|
32
33
|
* @internal
|
|
33
34
|
* Do not construct this class directly. Use `VaultSandboxClient.createInbox()` instead.
|
|
@@ -39,6 +40,12 @@ export declare class Inbox {
|
|
|
39
40
|
* @param strategy - The delivery strategy to use.
|
|
40
41
|
*/
|
|
41
42
|
setStrategy(strategy: DeliveryStrategy): void;
|
|
43
|
+
/**
|
|
44
|
+
* Validates that a keypair exists for encrypted operations.
|
|
45
|
+
* @returns The validated keypair
|
|
46
|
+
* @throws DecryptionError if keypair is null
|
|
47
|
+
*/
|
|
48
|
+
private requireKeypair;
|
|
42
49
|
/**
|
|
43
50
|
* Retrieves all emails from the inbox with full content.
|
|
44
51
|
*
|
|
@@ -96,6 +103,13 @@ export declare class Inbox {
|
|
|
96
103
|
* @returns A `Subscription` object with an `unsubscribe` method.
|
|
97
104
|
*/
|
|
98
105
|
onNewEmail(callback: (email: IEmail) => void | Promise<void>): Subscription;
|
|
106
|
+
/**
|
|
107
|
+
* Unsubscribes from all active email subscriptions for this inbox.
|
|
108
|
+
*
|
|
109
|
+
* This method is called during client shutdown to ensure clean cleanup.
|
|
110
|
+
* It is safe to call multiple times.
|
|
111
|
+
*/
|
|
112
|
+
unsubscribeAll(): void;
|
|
99
113
|
/**
|
|
100
114
|
* Marks a specific email as read.
|
|
101
115
|
*
|
|
@@ -240,4 +254,26 @@ export declare class Inbox {
|
|
|
240
254
|
* @returns A promise that resolves to the new secret and validity period of the old secret.
|
|
241
255
|
*/
|
|
242
256
|
rotateWebhookSecret(webhookId: string): Promise<RotateSecretResponse>;
|
|
257
|
+
/**
|
|
258
|
+
* Gets the chaos configuration for this inbox.
|
|
259
|
+
*
|
|
260
|
+
* @returns A promise that resolves to the chaos configuration.
|
|
261
|
+
* @throws {ApiError} If chaos is disabled globally on the server (403).
|
|
262
|
+
*/
|
|
263
|
+
getChaosConfig(): Promise<ChaosConfigResponse>;
|
|
264
|
+
/**
|
|
265
|
+
* Sets or updates the chaos configuration for this inbox.
|
|
266
|
+
*
|
|
267
|
+
* @param config - The chaos configuration to apply.
|
|
268
|
+
* @returns A promise that resolves to the updated chaos configuration.
|
|
269
|
+
* @throws {ApiError} If chaos is disabled globally on the server (403) or validation fails (400).
|
|
270
|
+
*/
|
|
271
|
+
setChaosConfig(config: ChaosConfigRequest): Promise<ChaosConfigResponse>;
|
|
272
|
+
/**
|
|
273
|
+
* Disables all chaos for this inbox.
|
|
274
|
+
*
|
|
275
|
+
* @returns A promise that resolves when chaos is disabled.
|
|
276
|
+
* @throws {ApiError} If chaos is disabled globally on the server (403).
|
|
277
|
+
*/
|
|
278
|
+
disableChaos(): Promise<void>;
|
|
243
279
|
}
|
package/dist/inbox.js
CHANGED
|
@@ -7,7 +7,7 @@ import { decryptEmailData, decodeBase64EmailData, isEncryptedEmailData } from '.
|
|
|
7
7
|
import { toBase64Url } from './crypto/utils.js';
|
|
8
8
|
import { EXPORT_VERSION } from './crypto/constants.js';
|
|
9
9
|
import { computeEmailsHash } from './utils/hash.js';
|
|
10
|
-
import { TimeoutError, StrategyError } from './types/index.js';
|
|
10
|
+
import { TimeoutError, StrategyError, DecryptionError } from './types/index.js';
|
|
11
11
|
const debug = createDebug('vaultsandbox:inbox');
|
|
12
12
|
/**
|
|
13
13
|
* Represents a single email inbox.
|
|
@@ -33,6 +33,7 @@ export class Inbox {
|
|
|
33
33
|
serverPublicKey;
|
|
34
34
|
strategy = null;
|
|
35
35
|
emailCache = new Map();
|
|
36
|
+
activeSubscriptions = new Set();
|
|
36
37
|
/**
|
|
37
38
|
* @internal
|
|
38
39
|
* Do not construct this class directly. Use `VaultSandboxClient.createInbox()` instead.
|
|
@@ -58,6 +59,17 @@ export class Inbox {
|
|
|
58
59
|
this.strategy = strategy;
|
|
59
60
|
debug('Set delivery strategy for inbox %s', this.emailAddress);
|
|
60
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Validates that a keypair exists for encrypted operations.
|
|
64
|
+
* @returns The validated keypair
|
|
65
|
+
* @throws DecryptionError if keypair is null
|
|
66
|
+
*/
|
|
67
|
+
requireKeypair() {
|
|
68
|
+
if (!this.keypair) {
|
|
69
|
+
throw new DecryptionError(`Encrypted operation requires keypair but inbox ${this.emailAddress} has none`);
|
|
70
|
+
}
|
|
71
|
+
return this.keypair;
|
|
72
|
+
}
|
|
61
73
|
/**
|
|
62
74
|
* Retrieves all emails from the inbox with full content.
|
|
63
75
|
*
|
|
@@ -70,7 +82,7 @@ export class Inbox {
|
|
|
70
82
|
const emails = [];
|
|
71
83
|
for (const emailData of emailsData) {
|
|
72
84
|
const email = isEncryptedEmailData(emailData)
|
|
73
|
-
? await decryptEmailData(emailData, this.
|
|
85
|
+
? await decryptEmailData(emailData, this.requireKeypair(), this.emailAddress, this.apiClient)
|
|
74
86
|
: decodeBase64EmailData(emailData, this.emailAddress, this.apiClient);
|
|
75
87
|
emails.push(email);
|
|
76
88
|
}
|
|
@@ -90,7 +102,7 @@ export class Inbox {
|
|
|
90
102
|
for (const emailData of emailsData) {
|
|
91
103
|
let metadata;
|
|
92
104
|
if (isEncryptedEmailData(emailData)) {
|
|
93
|
-
metadata = await decryptMetadata(emailData.encryptedMetadata, this.
|
|
105
|
+
metadata = await decryptMetadata(emailData.encryptedMetadata, this.requireKeypair());
|
|
94
106
|
}
|
|
95
107
|
else {
|
|
96
108
|
// Plain email - decode base64 metadata
|
|
@@ -118,7 +130,7 @@ export class Inbox {
|
|
|
118
130
|
debug('Retrieving email %s from inbox %s', emailId, this.emailAddress);
|
|
119
131
|
const emailData = await this.apiClient.getEmail(this.emailAddress, emailId);
|
|
120
132
|
const email = isEncryptedEmailData(emailData)
|
|
121
|
-
? await decryptEmailData(emailData, this.
|
|
133
|
+
? await decryptEmailData(emailData, this.requireKeypair(), this.emailAddress, this.apiClient)
|
|
122
134
|
: decodeBase64EmailData(emailData, this.emailAddress, this.apiClient);
|
|
123
135
|
debug('Successfully retrieved and processed email %s', emailId);
|
|
124
136
|
return email;
|
|
@@ -134,7 +146,7 @@ export class Inbox {
|
|
|
134
146
|
const rawEmailData = await this.apiClient.getRawEmail(this.emailAddress, emailId);
|
|
135
147
|
let raw;
|
|
136
148
|
if (rawEmailData.encryptedRaw) {
|
|
137
|
-
raw = await decryptRaw(rawEmailData.encryptedRaw, this.
|
|
149
|
+
raw = await decryptRaw(rawEmailData.encryptedRaw, this.requireKeypair());
|
|
138
150
|
}
|
|
139
151
|
else if (rawEmailData.raw) {
|
|
140
152
|
// Plain email - decode base64
|
|
@@ -186,6 +198,7 @@ export class Inbox {
|
|
|
186
198
|
return new Promise((resolve, reject) => {
|
|
187
199
|
let subscription;
|
|
188
200
|
let timeoutTimer;
|
|
201
|
+
let resolved = false;
|
|
189
202
|
// Centralized cleanup to prevent memory leaks
|
|
190
203
|
/* istanbul ignore next 4 - defensive checks for race conditions */
|
|
191
204
|
const cleanup = () => {
|
|
@@ -195,24 +208,36 @@ export class Inbox {
|
|
|
195
208
|
subscription.unsubscribe();
|
|
196
209
|
};
|
|
197
210
|
timeoutTimer = setTimeout(() => {
|
|
211
|
+
/* istanbul ignore next - race condition guard */
|
|
212
|
+
if (resolved)
|
|
213
|
+
return;
|
|
214
|
+
resolved = true;
|
|
198
215
|
cleanup();
|
|
199
216
|
debug('Timeout reached while waiting for %d emails in inbox %s', count, this.emailAddress);
|
|
200
217
|
reject(new TimeoutError(`Inbox did not receive ${count} emails within timeout`));
|
|
201
218
|
}, timeout);
|
|
202
219
|
subscription = this.onNewEmail(async () => {
|
|
220
|
+
/* istanbul ignore next - race condition guard */
|
|
221
|
+
if (resolved)
|
|
222
|
+
return;
|
|
203
223
|
try {
|
|
204
224
|
const syncStatus = await this.getSyncStatus();
|
|
205
225
|
debug('Current email count in inbox %s: %d', this.emailAddress, syncStatus.emailCount);
|
|
206
226
|
if (syncStatus.emailCount >= count) {
|
|
227
|
+
resolved = true;
|
|
207
228
|
cleanup();
|
|
208
229
|
debug('Target email count %d reached in inbox %s', count, this.emailAddress);
|
|
209
230
|
resolve();
|
|
210
231
|
}
|
|
211
232
|
}
|
|
212
233
|
catch (error) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
234
|
+
/* istanbul ignore next - race condition guard */
|
|
235
|
+
if (!resolved) {
|
|
236
|
+
resolved = true;
|
|
237
|
+
cleanup();
|
|
238
|
+
debug('Error checking sync status: %O', error);
|
|
239
|
+
reject(error);
|
|
240
|
+
}
|
|
216
241
|
}
|
|
217
242
|
});
|
|
218
243
|
});
|
|
@@ -231,7 +256,34 @@ export class Inbox {
|
|
|
231
256
|
throw new StrategyError('No delivery strategy set. Call setStrategy() first.');
|
|
232
257
|
}
|
|
233
258
|
debug('Subscribing to new emails for inbox %s', this.emailAddress);
|
|
234
|
-
|
|
259
|
+
const subscription = this.strategy.subscribe(this.emailAddress, this.inboxHash, this.keypair, callback);
|
|
260
|
+
// Track the subscription and wrap unsubscribe to remove from tracking
|
|
261
|
+
const trackedSubscription = {
|
|
262
|
+
unsubscribe: () => {
|
|
263
|
+
subscription.unsubscribe();
|
|
264
|
+
this.activeSubscriptions.delete(trackedSubscription);
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
this.activeSubscriptions.add(trackedSubscription);
|
|
268
|
+
return trackedSubscription;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Unsubscribes from all active email subscriptions for this inbox.
|
|
272
|
+
*
|
|
273
|
+
* This method is called during client shutdown to ensure clean cleanup.
|
|
274
|
+
* It is safe to call multiple times.
|
|
275
|
+
*/
|
|
276
|
+
unsubscribeAll() {
|
|
277
|
+
debug('Unsubscribing all %d subscriptions for inbox %s', this.activeSubscriptions.size, this.emailAddress);
|
|
278
|
+
for (const subscription of this.activeSubscriptions) {
|
|
279
|
+
try {
|
|
280
|
+
subscription.unsubscribe();
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
debug('Error unsubscribing: %O', error);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
this.activeSubscriptions.clear();
|
|
235
287
|
}
|
|
236
288
|
/**
|
|
237
289
|
* Marks a specific email as read.
|
|
@@ -479,5 +531,42 @@ export class Inbox {
|
|
|
479
531
|
debug('Successfully rotated secret for webhook %s', webhookId);
|
|
480
532
|
return result;
|
|
481
533
|
}
|
|
534
|
+
// ===== Chaos Configuration =====
|
|
535
|
+
/**
|
|
536
|
+
* Gets the chaos configuration for this inbox.
|
|
537
|
+
*
|
|
538
|
+
* @returns A promise that resolves to the chaos configuration.
|
|
539
|
+
* @throws {ApiError} If chaos is disabled globally on the server (403).
|
|
540
|
+
*/
|
|
541
|
+
async getChaosConfig() {
|
|
542
|
+
debug('Getting chaos config for inbox %s', this.emailAddress);
|
|
543
|
+
const config = await this.apiClient.getChaosConfig(this.emailAddress);
|
|
544
|
+
debug('Successfully retrieved chaos config for inbox %s', this.emailAddress);
|
|
545
|
+
return config;
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Sets or updates the chaos configuration for this inbox.
|
|
549
|
+
*
|
|
550
|
+
* @param config - The chaos configuration to apply.
|
|
551
|
+
* @returns A promise that resolves to the updated chaos configuration.
|
|
552
|
+
* @throws {ApiError} If chaos is disabled globally on the server (403) or validation fails (400).
|
|
553
|
+
*/
|
|
554
|
+
async setChaosConfig(config) {
|
|
555
|
+
debug('Setting chaos config for inbox %s: enabled=%s', this.emailAddress, config.enabled);
|
|
556
|
+
const result = await this.apiClient.setChaosConfig(this.emailAddress, config);
|
|
557
|
+
debug('Successfully set chaos config for inbox %s', this.emailAddress);
|
|
558
|
+
return result;
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Disables all chaos for this inbox.
|
|
562
|
+
*
|
|
563
|
+
* @returns A promise that resolves when chaos is disabled.
|
|
564
|
+
* @throws {ApiError} If chaos is disabled globally on the server (403).
|
|
565
|
+
*/
|
|
566
|
+
async disableChaos() {
|
|
567
|
+
debug('Disabling chaos for inbox %s', this.emailAddress);
|
|
568
|
+
await this.apiClient.disableChaos(this.emailAddress);
|
|
569
|
+
debug('Successfully disabled chaos for inbox %s', this.emailAddress);
|
|
570
|
+
}
|
|
482
571
|
}
|
|
483
572
|
//# sourceMappingURL=inbox.js.map
|
package/dist/inbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAuBpD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIhF,MAAM,KAAK,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IAChB,sCAAsC;IAC7B,YAAY,CAAS;IAC9B,oDAAoD;IACpD,SAAS,CAAO;IAChB,yCAAyC;IAChC,SAAS,CAAS;IAC3B,0CAA0C;IACjC,SAAS,CAAU;IAC5B,8FAA8F;IACrF,SAAS,CAAU;IAC5B,uDAAuD;IAC9C,YAAY,CAAW;IAExB,OAAO,CAAiB;IACxB,SAAS,CAAY;IACrB,eAAe,CAAgB;IAC/B,QAAQ,GAA4B,IAAI,CAAC;IACzC,UAAU,GAA2B,IAAI,GAAG,EAAE,CAAC;IAC/C,mBAAmB,GAAsB,IAAI,GAAG,EAAE,CAAC;IAE3D;;;OAGG;IACH,YAAY,SAAoB,EAAE,OAAuB,EAAE,SAAoB,EAAE,eAA8B;QAC7G,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,KAAK,CACH,mDAAmD,EACnD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAC5B,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,QAA0B;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACK,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,eAAe,CAAC,kDAAkD,IAAI,CAAC,YAAY,WAAW,CAAC,CAAC;QAC5G,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU;QACd,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5E,KAAK,CAAC,qCAAqC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC;gBAC3C,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC7F,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,+CAA+C,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,sBAAsB;QAC1B,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC7E,KAAK,CAAC,qCAAqC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,QAA2B,CAAC;YAChC,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,QAAQ,GAAG,MAAM,eAAe,CAAoB,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1G,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACjF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC;gBACjE,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,uDAAuD,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjG,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,KAAK,CAAC,mCAAmC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC;YAC3C,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;YAC7F,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxE,KAAK,CAAC,+CAA+C,EAAE,OAAO,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,KAAK,CAAC,uCAAuC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAClF,IAAI,GAAW,CAAC;QAChB,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;YAC9B,GAAG,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;YAC5B,8BAA8B;YAC9B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,CAAC,mEAAmE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChG,OAAO,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,UAAuB,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,aAAa,CAAC,qDAAqD,CAAC,CAAC;QACjF,CAAC;QACD,KAAK,CAAC,gDAAgD,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzG,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjF,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,UAA+B,EAAE;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;QAEzC,KAAK,CAAC,mDAAmD,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE9F,yCAAyC;QACzC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,IAAI,UAAU,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC;YACnC,KAAK,CAAC,mDAAmD,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,YAAsC,CAAC;YAC3C,IAAI,YAAwC,CAAC;YAC7C,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,8CAA8C;YAC9C,mEAAmE;YACnE,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,YAAY;oBAAE,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC7C,IAAI,YAAY;oBAAE,YAAY,CAAC,WAAW,EAAE,CAAC;YAC/C,CAAC,CAAC;YAEF,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,iDAAiD;gBACjD,IAAI,QAAQ;oBAAE,OAAO;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,EAAE,CAAC;gBACV,KAAK,CAAC,yDAAyD,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3F,MAAM,CAAC,IAAI,YAAY,CAAC,yBAAyB,KAAK,wBAAwB,CAAC,CAAC,CAAC;YACnF,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;gBACxC,iDAAiD;gBACjD,IAAI,QAAQ;oBAAE,OAAO;gBAErB,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC9C,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;oBAEvF,IAAI,UAAU,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC;wBACnC,QAAQ,GAAG,IAAI,CAAC;wBAChB,OAAO,EAAE,CAAC;wBACV,KAAK,CAAC,2CAA2C,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;wBAC7E,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,iDAAiD;oBACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,QAAQ,GAAG,IAAI,CAAC;wBAChB,OAAO,EAAE,CAAC;wBACV,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;wBAC/C,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU,CAAC,QAAiD;QAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,aAAa,CAAC,qDAAqD,CAAC,CAAC;QACjF,CAAC;QAED,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAExG,sEAAsE;QACtE,MAAM,mBAAmB,GAAiB;YACxC,WAAW,EAAE,GAAG,EAAE;gBAChB,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC3B,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACvD,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAClD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,cAAc;QACZ,KAAK,CAAC,iDAAiD,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3G,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,KAAK,CAAC,sCAAsC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjE,KAAK,CAAC,sCAAsC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,KAAK,CAAC,iCAAiC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7D,KAAK,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpD,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/E,MAAM,YAAY,GAAsB;YACtC,OAAO,EAAE,cAAc;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC;QAEF,0CAA0C;QAC1C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3D,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YAChD,YAAY,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,CAAC,gCAAgC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3D,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,aAAa;QACjB,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzE,KAAK,CACH,+CAA+C,EAC/C,IAAI,CAAC,YAAY,EACjB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,UAAU,CACtB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qCAAqC;IAErC;;;;OAIG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAgB;QACvB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACrC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,OAAe;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,0CAA0C,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;OAOG;IACH,gBAAgB;QACd,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,sCAAsC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,KAAK,CAAC,kCAAkC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,uBAAuB;IAEvB;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,OAA6B;QAC/C,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpF,KAAK,CAAC,8CAA8C,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACrF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY;QAChB,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3E,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,KAAK,CAAC,oCAAoC,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACnF,KAAK,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,OAA6B;QAClE,KAAK,CAAC,kCAAkC,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/F,KAAK,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,KAAK,CAAC,kCAAkC,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACtE,KAAK,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,KAAK,CAAC,iCAAiC,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACnF,KAAK,CAAC,oCAAoC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,mBAAmB,CAAC,SAAiB;QACzC,KAAK,CAAC,4CAA4C,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC3F,KAAK,CAAC,4CAA4C,EAAE,SAAS,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kCAAkC;IAElC;;;;;OAKG;IACH,KAAK,CAAC,cAAc;QAClB,KAAK,CAAC,mCAAmC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtE,KAAK,CAAC,kDAAkD,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAAC,MAA0B;QAC7C,KAAK,CAAC,+CAA+C,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9E,KAAK,CAAC,4CAA4C,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY;QAChB,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,KAAK,CAAC,0CAA0C,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
export { VaultSandboxClient, InboxMonitor } from './client.js';
|
|
7
7
|
export { Inbox } from './inbox.js';
|
|
8
8
|
export { Email } from './email.js';
|
|
9
|
-
export type { ClientConfig, CreateInboxOptions, InboxData, SyncStatus, WaitOptions, WaitForCountOptions, IEmail, IEmailMetadata, AttachmentData, RawEmail, SPFResult, DKIMResult, DMARCResult, ReverseDNSResult, AuthResultsData, AuthResults, AuthValidation, ServerInfo, Subscription, ExportedInboxData, EncryptionPolicy, EmailData, EncryptedEmailData, PlainEmailData, SpamAction, SpamSymbol, SpamAnalysisResult, WebhookEventType, FilterRule, FilterConfig, CustomTemplate, CreateWebhookOptions, UpdateWebhookOptions, WebhookStats, WebhookData, WebhookListResponse, TestWebhookResponse, RotateSecretResponse, } from './types/index.js';
|
|
9
|
+
export type { ClientConfig, CloseOptions, CreateInboxOptions, InboxData, SyncStatus, WaitOptions, WaitForCountOptions, IEmail, IEmailMetadata, AttachmentData, RawEmail, SPFResult, DKIMResult, DMARCResult, ReverseDNSResult, AuthResultsData, AuthResults, AuthValidation, ServerInfo, Subscription, ExportedInboxData, EncryptionPolicy, EmailData, EncryptedEmailData, PlainEmailData, SpamAction, SpamSymbol, SpamAnalysisResult, WebhookEventType, FilterRule, FilterConfig, CustomTemplate, CreateWebhookOptions, UpdateWebhookOptions, WebhookStats, WebhookData, WebhookListResponse, TestWebhookResponse, RotateSecretResponse, GreylistTrackBy, ChaosErrorType, LatencyConfig, ConnectionDropConfig, RandomErrorConfig, GreylistConfig, BlackholeConfig, ChaosConfigRequest, ChaosConfigResponse, } from './types/index.js';
|
|
10
10
|
export { VaultSandboxError, ApiError, NetworkError, TimeoutError, DecryptionError, SignatureVerificationError, InboxNotFoundError, EmailNotFoundError, InboxAlreadyExistsError, InvalidImportDataError, StrategyError, SSEError, WebhookNotFoundError, } from './types/index.js';
|
|
11
11
|
export { generateKeypair } from './crypto/keypair.js';
|
|
12
12
|
export { decrypt, decryptMetadata, decryptParsed, decryptRaw } from './crypto/decrypt.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAyDnC,0EAA0E;AAC1E,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EACb,QAAQ,EACR,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,wCAAwC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE/D,kBAAkB;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -21,9 +21,10 @@ export interface DeliveryStrategy {
|
|
|
21
21
|
* @param callback - Function to call when new email arrives
|
|
22
22
|
* @param emailCache - Optional local email cache for sync operations
|
|
23
23
|
* @param onEmailDeleted - Optional callback when email is deleted from server
|
|
24
|
+
* @param onError - Optional callback when an error occurs during processing
|
|
24
25
|
* @returns Subscription object with unsubscribe method
|
|
25
26
|
*/
|
|
26
|
-
subscribe(emailAddress: string, inboxHash: string, keypair: Keypair | null, callback: (email: IEmail) => void | Promise<void>, emailCache?: Map<string, EmailData>, onEmailDeleted?: (emailId: string) => void): Subscription;
|
|
27
|
+
subscribe(emailAddress: string, inboxHash: string, keypair: Keypair | null, callback: (email: IEmail) => void | Promise<void>, emailCache?: Map<string, EmailData>, onEmailDeleted?: (emailId: string) => void, onError?: (error: Error) => void): Subscription;
|
|
27
28
|
/**
|
|
28
29
|
* Close and cleanup resources
|
|
29
30
|
*/
|
|
@@ -17,6 +17,14 @@ export declare class PollingStrategy implements DeliveryStrategy {
|
|
|
17
17
|
private backoffMultiplier;
|
|
18
18
|
private jitterFactor;
|
|
19
19
|
constructor(apiClient: ApiClient, config?: PollingConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Validates that a keypair exists for encrypted email operations.
|
|
22
|
+
* @param keypair - The keypair to validate
|
|
23
|
+
* @param emailAddress - The email address for error context
|
|
24
|
+
* @returns The validated keypair
|
|
25
|
+
* @throws DecryptionError if keypair is null
|
|
26
|
+
*/
|
|
27
|
+
private validateKeypair;
|
|
20
28
|
/**
|
|
21
29
|
* Waits for an email matching the specified criteria using smart polling
|
|
22
30
|
*/
|
|
@@ -28,7 +36,7 @@ export declare class PollingStrategy implements DeliveryStrategy {
|
|
|
28
36
|
/**
|
|
29
37
|
* Subscribe to new email notifications (polling-based)
|
|
30
38
|
*/
|
|
31
|
-
subscribe(emailAddress: string, _inboxHash: string, keypair: Keypair | null, callback: (email: IEmail) => void | Promise<void>, emailCache?: Map<string, EmailData>, onEmailDeleted?: (emailId: string) => void): Subscription;
|
|
39
|
+
subscribe(emailAddress: string, _inboxHash: string, keypair: Keypair | null, callback: (email: IEmail) => void | Promise<void>, emailCache?: Map<string, EmailData>, onEmailDeleted?: (emailId: string) => void, onError?: (error: Error) => void): Subscription;
|
|
32
40
|
/**
|
|
33
41
|
* Close and cleanup resources
|
|
34
42
|
*/
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* PollingStrategy - Smart polling implementation with exponential backoff
|
|
3
3
|
*/
|
|
4
4
|
import createDebug from 'debug';
|
|
5
|
-
import { TimeoutError, InboxNotFoundError } from '../types/index.js';
|
|
5
|
+
import { TimeoutError, InboxNotFoundError, DecryptionError } from '../types/index.js';
|
|
6
6
|
import { decryptEmailData, decodeBase64EmailData, isEncryptedEmailData, findMatchingEmail, } from '../utils/email-utils.js';
|
|
7
7
|
import { sleep } from '../utils/sleep.js';
|
|
8
8
|
import { syncInbox } from '../sync/inbox-sync.js';
|
|
@@ -20,6 +20,19 @@ export class PollingStrategy {
|
|
|
20
20
|
this.backoffMultiplier = config.backoffMultiplier ?? 1.5;
|
|
21
21
|
this.jitterFactor = config.jitterFactor ?? 0.3;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Validates that a keypair exists for encrypted email operations.
|
|
25
|
+
* @param keypair - The keypair to validate
|
|
26
|
+
* @param emailAddress - The email address for error context
|
|
27
|
+
* @returns The validated keypair
|
|
28
|
+
* @throws DecryptionError if keypair is null
|
|
29
|
+
*/
|
|
30
|
+
validateKeypair(keypair, emailAddress) {
|
|
31
|
+
if (!keypair) {
|
|
32
|
+
throw new DecryptionError(`Received encrypted email for inbox ${emailAddress} but no keypair available`);
|
|
33
|
+
}
|
|
34
|
+
return keypair;
|
|
35
|
+
}
|
|
23
36
|
/**
|
|
24
37
|
* Waits for an email matching the specified criteria using smart polling
|
|
25
38
|
*/
|
|
@@ -56,9 +69,10 @@ export class PollingStrategy {
|
|
|
56
69
|
if (remainingTime <= 0) {
|
|
57
70
|
break;
|
|
58
71
|
}
|
|
59
|
-
// Calculate wait time with exponential backoff and jitter
|
|
60
|
-
|
|
61
|
-
const
|
|
72
|
+
// Calculate wait time with exponential backoff and bidirectional jitter
|
|
73
|
+
// Apply jitter as +/- percentage of current backoff, with floor at pollInterval
|
|
74
|
+
const jitter = this.jitterFactor * currentBackoff * (Math.random() - 0.5) * 2;
|
|
75
|
+
const desiredWaitTime = Math.max(pollInterval, Math.min(currentBackoff + jitter, this.maxBackoff));
|
|
62
76
|
// Limit sleep to remaining time to avoid overshooting timeout
|
|
63
77
|
const waitTime = Math.min(desiredWaitTime, remainingTime);
|
|
64
78
|
// Wait before next poll
|
|
@@ -91,7 +105,7 @@ export class PollingStrategy {
|
|
|
91
105
|
const emails = [];
|
|
92
106
|
for (const emailData of emailsData) {
|
|
93
107
|
const email = isEncryptedEmailData(emailData)
|
|
94
|
-
? await decryptEmailData(emailData, keypair, emailAddress, this.apiClient)
|
|
108
|
+
? await decryptEmailData(emailData, this.validateKeypair(keypair, emailAddress), emailAddress, this.apiClient)
|
|
95
109
|
: decodeBase64EmailData(emailData, emailAddress, this.apiClient);
|
|
96
110
|
emails.push(email);
|
|
97
111
|
}
|
|
@@ -100,7 +114,7 @@ export class PollingStrategy {
|
|
|
100
114
|
/**
|
|
101
115
|
* Subscribe to new email notifications (polling-based)
|
|
102
116
|
*/
|
|
103
|
-
subscribe(emailAddress, _inboxHash, keypair, callback, emailCache, onEmailDeleted) {
|
|
117
|
+
subscribe(emailAddress, _inboxHash, keypair, callback, emailCache, onEmailDeleted, onError) {
|
|
104
118
|
let isActive = true;
|
|
105
119
|
const localCache = emailCache ?? new Map();
|
|
106
120
|
const seenEmails = new Set();
|
|
@@ -120,7 +134,7 @@ export class PollingStrategy {
|
|
|
120
134
|
// Fetch full email content for new emails
|
|
121
135
|
const fullEmailData = await this.apiClient.getEmail(emailAddress, emailData.id);
|
|
122
136
|
const email = isEncryptedEmailData(fullEmailData)
|
|
123
|
-
? await decryptEmailData(fullEmailData, keypair, emailAddress, this.apiClient)
|
|
137
|
+
? await decryptEmailData(fullEmailData, this.validateKeypair(keypair, emailAddress), emailAddress, this.apiClient)
|
|
124
138
|
: decodeBase64EmailData(fullEmailData, emailAddress, this.apiClient);
|
|
125
139
|
const callbackResult = callback(email);
|
|
126
140
|
// Handle case where callback returns a promise
|
|
@@ -147,6 +161,14 @@ export class PollingStrategy {
|
|
|
147
161
|
}
|
|
148
162
|
catch (error) {
|
|
149
163
|
debug('Error polling for emails: %O', error);
|
|
164
|
+
if (onError) {
|
|
165
|
+
try {
|
|
166
|
+
onError(error instanceof Error ? error : new Error(String(error)));
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
debug('Error in error callback: %O', e);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
150
172
|
}
|
|
151
173
|
if (isActive) {
|
|
152
174
|
await sleep(this.initialInterval);
|