@brightchain/brightchain-api-lib 0.24.1 → 0.26.0
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/package.json +4 -3
- package/src/lib/application.d.ts +3 -14
- package/src/lib/application.d.ts.map +1 -1
- package/src/lib/application.js +121 -44
- package/src/lib/application.js.map +1 -1
- package/src/lib/auth/aclDocumentStore.d.ts +90 -0
- package/src/lib/auth/aclDocumentStore.d.ts.map +1 -0
- package/src/lib/auth/aclDocumentStore.js +155 -0
- package/src/lib/auth/aclDocumentStore.js.map +1 -0
- package/src/lib/auth/index.d.ts +4 -0
- package/src/lib/auth/index.d.ts.map +1 -1
- package/src/lib/auth/index.js +4 -0
- package/src/lib/auth/index.js.map +1 -1
- package/src/lib/auth/writeAclApiRouter.d.ts +32 -0
- package/src/lib/auth/writeAclApiRouter.d.ts.map +1 -0
- package/src/lib/auth/writeAclApiRouter.js +348 -0
- package/src/lib/auth/writeAclApiRouter.js.map +1 -0
- package/src/lib/auth/writeAclAuditLogger.d.ts +94 -0
- package/src/lib/auth/writeAclAuditLogger.d.ts.map +1 -0
- package/src/lib/auth/writeAclAuditLogger.js +143 -0
- package/src/lib/auth/writeAclAuditLogger.js.map +1 -0
- package/src/lib/auth/writeProofMiddleware.d.ts +39 -0
- package/src/lib/auth/writeProofMiddleware.d.ts.map +1 -0
- package/src/lib/auth/writeProofMiddleware.js +56 -0
- package/src/lib/auth/writeProofMiddleware.js.map +1 -0
- package/src/lib/availability/aclDocumentSyncHandler.d.ts +39 -0
- package/src/lib/availability/aclDocumentSyncHandler.d.ts.map +1 -0
- package/src/lib/availability/aclDocumentSyncHandler.js +81 -0
- package/src/lib/availability/aclDocumentSyncHandler.js.map +1 -0
- package/src/lib/availability/gossipService.d.ts +4 -1
- package/src/lib/availability/gossipService.d.ts.map +1 -1
- package/src/lib/availability/gossipService.js +15 -1
- package/src/lib/availability/gossipService.js.map +1 -1
- package/src/lib/availability/headUpdateSyncHandler.d.ts +32 -0
- package/src/lib/availability/headUpdateSyncHandler.d.ts.map +1 -0
- package/src/lib/availability/headUpdateSyncHandler.js +78 -0
- package/src/lib/availability/headUpdateSyncHandler.js.map +1 -0
- package/src/lib/availability/index.d.ts +2 -0
- package/src/lib/availability/index.d.ts.map +1 -1
- package/src/lib/availability/index.js +2 -0
- package/src/lib/availability/index.js.map +1 -1
- package/src/lib/constants.d.ts.map +1 -1
- package/src/lib/constants.js +2 -0
- package/src/lib/constants.js.map +1 -1
- package/src/lib/controllers/api/brighthub/connectionController.d.ts +6 -0
- package/src/lib/controllers/api/brighthub/connectionController.d.ts.map +1 -1
- package/src/lib/controllers/api/brighthub/connectionController.js +158 -11
- package/src/lib/controllers/api/brighthub/connectionController.js.map +1 -1
- package/src/lib/controllers/api/brighthub/messagingController.d.ts +6 -0
- package/src/lib/controllers/api/brighthub/messagingController.d.ts.map +1 -1
- package/src/lib/controllers/api/brighthub/messagingController.js +190 -58
- package/src/lib/controllers/api/brighthub/messagingController.js.map +1 -1
- package/src/lib/controllers/api/brighthub/postController.d.ts +12 -3
- package/src/lib/controllers/api/brighthub/postController.d.ts.map +1 -1
- package/src/lib/controllers/api/brighthub/postController.js +60 -0
- package/src/lib/controllers/api/brighthub/postController.js.map +1 -1
- package/src/lib/controllers/api/brighthub/timelineController.d.ts +19 -0
- package/src/lib/controllers/api/brighthub/timelineController.d.ts.map +1 -1
- package/src/lib/controllers/api/brighthub/timelineController.js +133 -0
- package/src/lib/controllers/api/brighthub/timelineController.js.map +1 -1
- package/src/lib/controllers/api/emails.d.ts +4 -1
- package/src/lib/controllers/api/emails.d.ts.map +1 -1
- package/src/lib/controllers/api/emails.js +28 -1
- package/src/lib/controllers/api/emails.js.map +1 -1
- package/src/lib/controllers/api/user.d.ts.map +1 -1
- package/src/lib/controllers/api/user.js +10 -0
- package/src/lib/controllers/api/user.js.map +1 -1
- package/src/lib/databaseInit.d.ts +7 -11
- package/src/lib/databaseInit.d.ts.map +1 -1
- package/src/lib/databaseInit.js +41 -97
- package/src/lib/databaseInit.js.map +1 -1
- package/src/lib/datastore/block-document-store-factory.d.ts +3 -0
- package/src/lib/datastore/block-document-store-factory.d.ts.map +1 -1
- package/src/lib/datastore/block-document-store-factory.js +15 -18
- package/src/lib/datastore/block-document-store-factory.js.map +1 -1
- package/src/lib/datastore/block-document-store.d.ts +2 -191
- package/src/lib/datastore/block-document-store.d.ts.map +1 -1
- package/src/lib/datastore/block-document-store.js +4 -628
- package/src/lib/datastore/block-document-store.js.map +1 -1
- package/src/lib/datastore/document-store.d.ts +1 -62
- package/src/lib/datastore/document-store.d.ts.map +1 -1
- package/src/lib/datastore/memory-document-store.d.ts +1 -8
- package/src/lib/datastore/memory-document-store.d.ts.map +1 -1
- package/src/lib/datastore/memory-document-store.js +3 -214
- package/src/lib/datastore/memory-document-store.js.map +1 -1
- package/src/lib/environment.d.ts +3 -20
- package/src/lib/environment.d.ts.map +1 -1
- package/src/lib/environment.js +2 -45
- package/src/lib/environment.js.map +1 -1
- package/src/lib/factories/blockStoreFactory.d.ts.map +1 -1
- package/src/lib/factories/blockStoreFactory.js +4 -1
- package/src/lib/factories/blockStoreFactory.js.map +1 -1
- package/src/lib/interfaces/environment.d.ts +23 -2
- package/src/lib/interfaces/environment.d.ts.map +1 -1
- package/src/lib/interfaces/responses/brighthub/api-post-response.d.ts +8 -1
- package/src/lib/interfaces/responses/brighthub/api-post-response.d.ts.map +1 -1
- package/src/lib/middleware/index.d.ts +1 -1
- package/src/lib/middleware/index.d.ts.map +1 -1
- package/src/lib/middleware/index.js +3 -2
- package/src/lib/middleware/index.js.map +1 -1
- package/src/lib/middleware/validateBody.d.ts +1 -12
- package/src/lib/middleware/validateBody.d.ts.map +1 -1
- package/src/lib/middleware/validateBody.js +4 -32
- package/src/lib/middleware/validateBody.js.map +1 -1
- package/src/lib/middlewares.d.ts.map +1 -1
- package/src/lib/middlewares.js +7 -1
- package/src/lib/middlewares.js.map +1 -1
- package/src/lib/plugins/brightchain-database-plugin.d.ts +27 -79
- package/src/lib/plugins/brightchain-database-plugin.d.ts.map +1 -1
- package/src/lib/plugins/brightchain-database-plugin.js +27 -97
- package/src/lib/plugins/brightchain-database-plugin.js.map +1 -1
- package/src/lib/routers/api.d.ts +18 -1
- package/src/lib/routers/api.d.ts.map +1 -1
- package/src/lib/routers/api.js +24 -1
- package/src/lib/routers/api.js.map +1 -1
- package/src/lib/routers/app.d.ts.map +1 -1
- package/src/lib/routers/app.js +5 -2
- package/src/lib/routers/app.js.map +1 -1
- package/src/lib/services/auth.d.ts.map +1 -1
- package/src/lib/services/auth.js +37 -3
- package/src/lib/services/auth.js.map +1 -1
- package/src/lib/services/blockStore.d.ts +8 -1
- package/src/lib/services/blockStore.d.ts.map +1 -1
- package/src/lib/services/blockStore.js +19 -7
- package/src/lib/services/blockStore.js.map +1 -1
- package/src/lib/services/brightChainBackupCodeService.d.ts +42 -39
- package/src/lib/services/brightChainBackupCodeService.d.ts.map +1 -1
- package/src/lib/services/brightChainBackupCodeService.js +86 -61
- package/src/lib/services/brightChainBackupCodeService.js.map +1 -1
- package/src/lib/services/brighthub/collectionAdapter.d.ts +81 -0
- package/src/lib/services/brighthub/collectionAdapter.d.ts.map +1 -0
- package/src/lib/services/brighthub/collectionAdapter.js +127 -0
- package/src/lib/services/brighthub/collectionAdapter.js.map +1 -0
- package/src/lib/services/brighthub/connectionService.d.ts.map +1 -1
- package/src/lib/services/brighthub/connectionService.js +3 -0
- package/src/lib/services/brighthub/connectionService.js.map +1 -1
- package/src/lib/services/brighthub/messagingService.d.ts +4 -0
- package/src/lib/services/brighthub/messagingService.d.ts.map +1 -1
- package/src/lib/services/brighthub/messagingService.js +25 -4
- package/src/lib/services/brighthub/messagingService.js.map +1 -1
- package/src/lib/services/brighthub/notificationService.d.ts.map +1 -1
- package/src/lib/services/brighthub/notificationService.js +35 -20
- package/src/lib/services/brighthub/notificationService.js.map +1 -1
- package/src/lib/services/brighthub/postService.d.ts +7 -1
- package/src/lib/services/brighthub/postService.d.ts.map +1 -1
- package/src/lib/services/brighthub/postService.js +22 -1
- package/src/lib/services/brighthub/postService.js.map +1 -1
- package/src/lib/services/brighthub/userProfileService.d.ts +19 -1
- package/src/lib/services/brighthub/userProfileService.d.ts.map +1 -1
- package/src/lib/services/brighthub/userProfileService.js +74 -0
- package/src/lib/services/brighthub/userProfileService.js.map +1 -1
- package/src/lib/services/emailGateway/antiSpamFilter.d.ts +229 -0
- package/src/lib/services/emailGateway/antiSpamFilter.d.ts.map +1 -0
- package/src/lib/services/emailGateway/antiSpamFilter.js +325 -0
- package/src/lib/services/emailGateway/antiSpamFilter.js.map +1 -0
- package/src/lib/services/emailGateway/bounceProcessor.d.ts +171 -0
- package/src/lib/services/emailGateway/bounceProcessor.d.ts.map +1 -0
- package/src/lib/services/emailGateway/bounceProcessor.js +378 -0
- package/src/lib/services/emailGateway/bounceProcessor.js.map +1 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.d.ts +99 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.d.ts.map +1 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.js +202 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.js.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.d.ts +73 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.d.ts.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.js +107 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.js.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayService.d.ts +152 -0
- package/src/lib/services/emailGateway/emailGatewayService.d.ts.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayService.js +201 -0
- package/src/lib/services/emailGateway/emailGatewayService.js.map +1 -0
- package/src/lib/services/emailGateway/gatewayObservability.d.ts +123 -0
- package/src/lib/services/emailGateway/gatewayObservability.d.ts.map +1 -0
- package/src/lib/services/emailGateway/gatewayObservability.js +186 -0
- package/src/lib/services/emailGateway/gatewayObservability.js.map +1 -0
- package/src/lib/services/emailGateway/inboundProcessor.d.ts +113 -0
- package/src/lib/services/emailGateway/inboundProcessor.d.ts.map +1 -0
- package/src/lib/services/emailGateway/inboundProcessor.js +298 -0
- package/src/lib/services/emailGateway/inboundProcessor.js.map +1 -0
- package/src/lib/services/emailGateway/index.d.ts +23 -0
- package/src/lib/services/emailGateway/index.d.ts.map +1 -0
- package/src/lib/services/emailGateway/index.js +26 -0
- package/src/lib/services/emailGateway/index.js.map +1 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.d.ts +111 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.d.ts.map +1 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.js +97 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.js.map +1 -0
- package/src/lib/services/emailGateway/outboundQueue.d.ts +135 -0
- package/src/lib/services/emailGateway/outboundQueue.d.ts.map +1 -0
- package/src/lib/services/emailGateway/outboundQueue.js +227 -0
- package/src/lib/services/emailGateway/outboundQueue.js.map +1 -0
- package/src/lib/services/emailGateway/outboundQueueStore.d.ts +110 -0
- package/src/lib/services/emailGateway/outboundQueueStore.d.ts.map +1 -0
- package/src/lib/services/emailGateway/outboundQueueStore.js +131 -0
- package/src/lib/services/emailGateway/outboundQueueStore.js.map +1 -0
- package/src/lib/services/emailGateway/recipientLookupService.d.ts +135 -0
- package/src/lib/services/emailGateway/recipientLookupService.d.ts.map +1 -0
- package/src/lib/services/emailGateway/recipientLookupService.js +294 -0
- package/src/lib/services/emailGateway/recipientLookupService.js.map +1 -0
- package/src/lib/services/emailGateway/retryBackoff.d.ts +79 -0
- package/src/lib/services/emailGateway/retryBackoff.d.ts.map +1 -0
- package/src/lib/services/emailGateway/retryBackoff.js +77 -0
- package/src/lib/services/emailGateway/retryBackoff.js.map +1 -0
- package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
- package/src/lib/services/eventNotificationSystem.js.map +1 -1
- package/src/lib/services/index.d.ts +2 -1
- package/src/lib/services/index.d.ts.map +1 -1
- package/src/lib/services/index.js +2 -1
- package/src/lib/services/index.js.map +1 -1
- package/src/lib/services/quorumDatabaseAdapter.d.ts +7 -1
- package/src/lib/services/quorumDatabaseAdapter.d.ts.map +1 -1
- package/src/lib/services/quorumDatabaseAdapter.js +83 -0
- package/src/lib/services/quorumDatabaseAdapter.js.map +1 -1
- package/src/lib/services/sessionAdapter.d.ts +2 -61
- package/src/lib/services/sessionAdapter.d.ts.map +1 -1
- package/src/lib/services/sessionAdapter.js +2 -102
- package/src/lib/services/sessionAdapter.js.map +1 -1
- package/src/lib/shared-types.d.ts +7 -15
- package/src/lib/shared-types.d.ts.map +1 -1
- package/src/lib/stores/availabilityAwareBlockStore.d.ts +4 -3
- package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
- package/src/lib/stores/availabilityAwareBlockStore.js +5 -2
- package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
- package/src/lib/stores/cloudBlockStoreBase.d.ts +2 -1
- package/src/lib/stores/cloudBlockStoreBase.d.ts.map +1 -1
- package/src/lib/stores/cloudBlockStoreBase.js +34 -13
- package/src/lib/stores/cloudBlockStoreBase.js.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.d.ts +21 -1
- package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.js +48 -17
- package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
- package/src/lib/stores/diskBlockStore.d.ts +10 -2
- package/src/lib/stores/diskBlockStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockStore.js +43 -19
- package/src/lib/stores/diskBlockStore.js.map +1 -1
- package/src/lib/types/backend-id.d.ts +1 -2
- package/src/lib/types/backend-id.d.ts.map +1 -1
- package/src/lib/utils/emailValidation.d.ts.map +1 -1
- package/src/lib/utils/emailValidation.js +2 -1
- package/src/lib/utils/emailValidation.js.map +1 -1
- package/src/lib/validation/userValidation.d.ts +2 -43
- package/src/lib/validation/userValidation.d.ts.map +1 -1
- package/src/lib/validation/userValidation.js +6 -144
- package/src/lib/validation/userValidation.js.map +1 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RecipientLookupService — TCP socketmap server for Postfix recipient validation.
|
|
3
|
+
*
|
|
4
|
+
* Implements the Postfix `socketmap` lookup protocol over TCP so that Postfix
|
|
5
|
+
* can validate whether a recipient address corresponds to a registered
|
|
6
|
+
* BrightChain user *before* accepting the message (preventing backscatter).
|
|
7
|
+
*
|
|
8
|
+
* Protocol (simplified):
|
|
9
|
+
* Client sends: `<name> <key>\n` (e.g. `virtual alice@brightchain.org\n`)
|
|
10
|
+
* Server responds: `OK <value>\n` | `NOTFOUND \n` | `TEMP <reason>\n`
|
|
11
|
+
*
|
|
12
|
+
* The service:
|
|
13
|
+
* - Listens on a configurable TCP port (default 2526) on localhost
|
|
14
|
+
* - Queries a user-registry dependency for the local part at the canonical domain
|
|
15
|
+
* - Caches positive results in an LRU cache with configurable TTL (default 300 s)
|
|
16
|
+
* - Responds within 5 seconds (timeout handling)
|
|
17
|
+
*
|
|
18
|
+
* @see Requirements 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 4.1, 4.2, 4.3
|
|
19
|
+
* @module recipientLookupService
|
|
20
|
+
*/
|
|
21
|
+
import type { IRecipientLookupService } from '@brightchain/brightchain-lib';
|
|
22
|
+
import type { IEmailGatewayConfig } from './emailGatewayConfig';
|
|
23
|
+
/**
|
|
24
|
+
* Minimal interface for querying the BrightChain user registry.
|
|
25
|
+
*
|
|
26
|
+
* Concrete implementations may delegate to `IMemberStore.queryIndex` or
|
|
27
|
+
* any other backing store. The recipient lookup service only needs to know
|
|
28
|
+
* whether a given email address belongs to a registered user.
|
|
29
|
+
*/
|
|
30
|
+
export interface IUserRegistry {
|
|
31
|
+
/**
|
|
32
|
+
* Check whether `emailAddress` corresponds to a registered BrightChain user.
|
|
33
|
+
*
|
|
34
|
+
* @returns `true` if the user exists, `false` otherwise.
|
|
35
|
+
* @throws When the registry is unreachable (triggers TEMP response).
|
|
36
|
+
*/
|
|
37
|
+
hasUser(emailAddress: string): Promise<boolean>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Simple LRU cache for positive recipient lookup results.
|
|
41
|
+
*
|
|
42
|
+
* Only positive (`OK`) results are cached — negative and temporary results
|
|
43
|
+
* are always re-queried so that newly registered users are found promptly.
|
|
44
|
+
*
|
|
45
|
+
* @see Requirement 13.6
|
|
46
|
+
*/
|
|
47
|
+
export declare class RecipientLookupCache {
|
|
48
|
+
private readonly maxSize;
|
|
49
|
+
private readonly ttlMs;
|
|
50
|
+
private readonly cache;
|
|
51
|
+
constructor(maxSize: number, ttlMs: number);
|
|
52
|
+
/**
|
|
53
|
+
* Retrieve a cached positive result for `key`.
|
|
54
|
+
*
|
|
55
|
+
* @returns `true` if the key is cached and not expired, `false` otherwise.
|
|
56
|
+
*/
|
|
57
|
+
get(key: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Store a positive lookup result for `key`.
|
|
60
|
+
*/
|
|
61
|
+
set(key: string): void;
|
|
62
|
+
/** Number of entries currently in the cache. */
|
|
63
|
+
get size(): number;
|
|
64
|
+
/** Remove all entries. */
|
|
65
|
+
clear(): void;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* TCP socketmap server that Postfix queries to validate recipient addresses
|
|
69
|
+
* against the BrightChain user registry.
|
|
70
|
+
*
|
|
71
|
+
* Implements `IRecipientLookupService` from brightchain-lib for the `lookup`
|
|
72
|
+
* contract, and adds TCP server lifecycle (`start` / `stop`).
|
|
73
|
+
*
|
|
74
|
+
* @see Requirements 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7
|
|
75
|
+
*/
|
|
76
|
+
export declare class RecipientLookupService implements IRecipientLookupService {
|
|
77
|
+
private readonly config;
|
|
78
|
+
private readonly userRegistry;
|
|
79
|
+
private server;
|
|
80
|
+
private readonly cache;
|
|
81
|
+
private readonly port;
|
|
82
|
+
private readonly canonicalDomain;
|
|
83
|
+
constructor(config: IEmailGatewayConfig, userRegistry: IUserRegistry);
|
|
84
|
+
/**
|
|
85
|
+
* Look up whether `emailAddress` corresponds to a registered BrightChain
|
|
86
|
+
* user at the canonical domain.
|
|
87
|
+
*
|
|
88
|
+
* 1. Check the LRU cache for a positive hit.
|
|
89
|
+
* 2. Query the user registry (with a 5-second timeout).
|
|
90
|
+
* 3. Cache positive results.
|
|
91
|
+
*
|
|
92
|
+
* @returns `'OK'` | `'NOTFOUND'` | `'TEMP'`
|
|
93
|
+
*
|
|
94
|
+
* @see Requirements 13.2, 13.3, 13.4, 13.5, 13.6
|
|
95
|
+
*/
|
|
96
|
+
lookup(emailAddress: string): Promise<'OK' | 'NOTFOUND' | 'TEMP'>;
|
|
97
|
+
/**
|
|
98
|
+
* Start the TCP socketmap server on the configured port (localhost only).
|
|
99
|
+
*
|
|
100
|
+
* @see Requirement 13.1
|
|
101
|
+
*/
|
|
102
|
+
start(): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Stop the TCP server and clear the cache.
|
|
105
|
+
*/
|
|
106
|
+
stop(): Promise<void>;
|
|
107
|
+
/** Whether the TCP server is currently listening. */
|
|
108
|
+
isRunning(): boolean;
|
|
109
|
+
/** Expose cache for testing purposes. */
|
|
110
|
+
getCache(): RecipientLookupCache;
|
|
111
|
+
/**
|
|
112
|
+
* Handle a single TCP connection from Postfix.
|
|
113
|
+
*
|
|
114
|
+
* Postfix socketmap protocol:
|
|
115
|
+
* Request: `<mapname> <key>\n`
|
|
116
|
+
* Response: `OK <value>\n` | `NOTFOUND \n` | `TEMP <reason>\n`
|
|
117
|
+
*
|
|
118
|
+
* The connection may carry multiple newline-delimited requests.
|
|
119
|
+
*/
|
|
120
|
+
private handleConnection;
|
|
121
|
+
/**
|
|
122
|
+
* Parse a socketmap request line and return the response string.
|
|
123
|
+
*
|
|
124
|
+
* @param line - A single request line, e.g. `virtual alice@brightchain.org`
|
|
125
|
+
* @returns The response string, e.g. `OK alice@brightchain.org`
|
|
126
|
+
*/
|
|
127
|
+
private handleRequest;
|
|
128
|
+
/**
|
|
129
|
+
* Race a promise against a timeout.
|
|
130
|
+
*
|
|
131
|
+
* @throws If the timeout fires first.
|
|
132
|
+
*/
|
|
133
|
+
private withTimeout;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=recipientLookupService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipientLookupService.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/emailGateway/recipientLookupService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjD;AAUD;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;gBAGpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM;IAGhC;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAezB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAetB,gDAAgD;IAChD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0BAA0B;IAC1B,KAAK,IAAI,IAAI;CAGd;AAaD;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,YAAW,uBAAuB;IAOlE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAP/B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAGtB,MAAM,EAAE,mBAAmB,EAC3B,YAAY,EAAE,aAAa;IAY9C;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC;IAsCvE;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrB,qDAAqD;IACrD,SAAS,IAAI,OAAO;IAIpB,yCAAyC;IACzC,QAAQ,IAAI,oBAAoB;IAMhC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAqCxB;;;;;OAKG;YACW,aAAa;IA0B3B;;;;OAIG;IACH,OAAO,CAAC,WAAW;CAiBpB"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RecipientLookupService — TCP socketmap server for Postfix recipient validation.
|
|
4
|
+
*
|
|
5
|
+
* Implements the Postfix `socketmap` lookup protocol over TCP so that Postfix
|
|
6
|
+
* can validate whether a recipient address corresponds to a registered
|
|
7
|
+
* BrightChain user *before* accepting the message (preventing backscatter).
|
|
8
|
+
*
|
|
9
|
+
* Protocol (simplified):
|
|
10
|
+
* Client sends: `<name> <key>\n` (e.g. `virtual alice@brightchain.org\n`)
|
|
11
|
+
* Server responds: `OK <value>\n` | `NOTFOUND \n` | `TEMP <reason>\n`
|
|
12
|
+
*
|
|
13
|
+
* The service:
|
|
14
|
+
* - Listens on a configurable TCP port (default 2526) on localhost
|
|
15
|
+
* - Queries a user-registry dependency for the local part at the canonical domain
|
|
16
|
+
* - Caches positive results in an LRU cache with configurable TTL (default 300 s)
|
|
17
|
+
* - Responds within 5 seconds (timeout handling)
|
|
18
|
+
*
|
|
19
|
+
* @see Requirements 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 4.1, 4.2, 4.3
|
|
20
|
+
* @module recipientLookupService
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.RecipientLookupService = exports.RecipientLookupCache = void 0;
|
|
24
|
+
const tslib_1 = require("tslib");
|
|
25
|
+
const net = tslib_1.__importStar(require("net"));
|
|
26
|
+
/**
|
|
27
|
+
* Simple LRU cache for positive recipient lookup results.
|
|
28
|
+
*
|
|
29
|
+
* Only positive (`OK`) results are cached — negative and temporary results
|
|
30
|
+
* are always re-queried so that newly registered users are found promptly.
|
|
31
|
+
*
|
|
32
|
+
* @see Requirement 13.6
|
|
33
|
+
*/
|
|
34
|
+
class RecipientLookupCache {
|
|
35
|
+
maxSize;
|
|
36
|
+
ttlMs;
|
|
37
|
+
cache = new Map();
|
|
38
|
+
constructor(maxSize, ttlMs) {
|
|
39
|
+
this.maxSize = maxSize;
|
|
40
|
+
this.ttlMs = ttlMs;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Retrieve a cached positive result for `key`.
|
|
44
|
+
*
|
|
45
|
+
* @returns `true` if the key is cached and not expired, `false` otherwise.
|
|
46
|
+
*/
|
|
47
|
+
get(key) {
|
|
48
|
+
const entry = this.cache.get(key);
|
|
49
|
+
if (!entry) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (Date.now() >= entry.expiresAt) {
|
|
53
|
+
this.cache.delete(key);
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
// Move to end (most-recently used) by re-inserting.
|
|
57
|
+
this.cache.delete(key);
|
|
58
|
+
this.cache.set(key, entry);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Store a positive lookup result for `key`.
|
|
63
|
+
*/
|
|
64
|
+
set(key) {
|
|
65
|
+
// If already present, delete first so insertion order is refreshed.
|
|
66
|
+
if (this.cache.has(key)) {
|
|
67
|
+
this.cache.delete(key);
|
|
68
|
+
}
|
|
69
|
+
// Evict the least-recently used entry if at capacity.
|
|
70
|
+
if (this.cache.size >= this.maxSize) {
|
|
71
|
+
const oldest = this.cache.keys().next().value;
|
|
72
|
+
if (oldest !== undefined) {
|
|
73
|
+
this.cache.delete(oldest);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
this.cache.set(key, { expiresAt: Date.now() + this.ttlMs });
|
|
77
|
+
}
|
|
78
|
+
/** Number of entries currently in the cache. */
|
|
79
|
+
get size() {
|
|
80
|
+
return this.cache.size;
|
|
81
|
+
}
|
|
82
|
+
/** Remove all entries. */
|
|
83
|
+
clear() {
|
|
84
|
+
this.cache.clear();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.RecipientLookupCache = RecipientLookupCache;
|
|
88
|
+
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
89
|
+
/** Maximum time (ms) to wait for a registry lookup before returning TEMP. */
|
|
90
|
+
const LOOKUP_TIMEOUT_MS = 5_000;
|
|
91
|
+
/** Default maximum number of entries in the LRU cache. */
|
|
92
|
+
const DEFAULT_CACHE_MAX_SIZE = 10_000;
|
|
93
|
+
// ─── RecipientLookupService ─────────────────────────────────────────────────
|
|
94
|
+
/**
|
|
95
|
+
* TCP socketmap server that Postfix queries to validate recipient addresses
|
|
96
|
+
* against the BrightChain user registry.
|
|
97
|
+
*
|
|
98
|
+
* Implements `IRecipientLookupService` from brightchain-lib for the `lookup`
|
|
99
|
+
* contract, and adds TCP server lifecycle (`start` / `stop`).
|
|
100
|
+
*
|
|
101
|
+
* @see Requirements 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7
|
|
102
|
+
*/
|
|
103
|
+
class RecipientLookupService {
|
|
104
|
+
config;
|
|
105
|
+
userRegistry;
|
|
106
|
+
server = null;
|
|
107
|
+
cache;
|
|
108
|
+
port;
|
|
109
|
+
canonicalDomain;
|
|
110
|
+
constructor(config, userRegistry) {
|
|
111
|
+
this.config = config;
|
|
112
|
+
this.userRegistry = userRegistry;
|
|
113
|
+
this.port = config.recipientLookupPort;
|
|
114
|
+
this.canonicalDomain = config.canonicalDomain.toLowerCase();
|
|
115
|
+
this.cache = new RecipientLookupCache(DEFAULT_CACHE_MAX_SIZE, config.recipientLookupCacheTtlSeconds * 1_000);
|
|
116
|
+
}
|
|
117
|
+
// ─── IRecipientLookupService ────────────────────────────────────────
|
|
118
|
+
/**
|
|
119
|
+
* Look up whether `emailAddress` corresponds to a registered BrightChain
|
|
120
|
+
* user at the canonical domain.
|
|
121
|
+
*
|
|
122
|
+
* 1. Check the LRU cache for a positive hit.
|
|
123
|
+
* 2. Query the user registry (with a 5-second timeout).
|
|
124
|
+
* 3. Cache positive results.
|
|
125
|
+
*
|
|
126
|
+
* @returns `'OK'` | `'NOTFOUND'` | `'TEMP'`
|
|
127
|
+
*
|
|
128
|
+
* @see Requirements 13.2, 13.3, 13.4, 13.5, 13.6
|
|
129
|
+
*/
|
|
130
|
+
async lookup(emailAddress) {
|
|
131
|
+
const normalised = emailAddress.toLowerCase().trim();
|
|
132
|
+
// Validate that the address belongs to the canonical domain.
|
|
133
|
+
const atIndex = normalised.lastIndexOf('@');
|
|
134
|
+
if (atIndex === -1) {
|
|
135
|
+
return 'NOTFOUND';
|
|
136
|
+
}
|
|
137
|
+
const domain = normalised.slice(atIndex + 1);
|
|
138
|
+
if (domain !== this.canonicalDomain) {
|
|
139
|
+
return 'NOTFOUND';
|
|
140
|
+
}
|
|
141
|
+
// 1. Cache hit → return OK immediately (Req 13.6).
|
|
142
|
+
if (this.cache.get(normalised)) {
|
|
143
|
+
return 'OK';
|
|
144
|
+
}
|
|
145
|
+
// 2. Query registry with timeout (Req 4.3 — respond within 5 s).
|
|
146
|
+
try {
|
|
147
|
+
const found = await this.withTimeout(this.userRegistry.hasUser(normalised), LOOKUP_TIMEOUT_MS);
|
|
148
|
+
if (found) {
|
|
149
|
+
this.cache.set(normalised);
|
|
150
|
+
return 'OK';
|
|
151
|
+
}
|
|
152
|
+
return 'NOTFOUND';
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Registry unreachable or timeout → TEMP (Req 13.5).
|
|
156
|
+
return 'TEMP';
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// ─── TCP Server Lifecycle ───────────────────────────────────────────
|
|
160
|
+
/**
|
|
161
|
+
* Start the TCP socketmap server on the configured port (localhost only).
|
|
162
|
+
*
|
|
163
|
+
* @see Requirement 13.1
|
|
164
|
+
*/
|
|
165
|
+
start() {
|
|
166
|
+
return new Promise((resolve, reject) => {
|
|
167
|
+
if (this.server) {
|
|
168
|
+
resolve();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
this.server = net.createServer((socket) => this.handleConnection(socket));
|
|
172
|
+
this.server.on('error', (err) => {
|
|
173
|
+
reject(err);
|
|
174
|
+
});
|
|
175
|
+
this.server.listen(this.port, '127.0.0.1', () => {
|
|
176
|
+
resolve();
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Stop the TCP server and clear the cache.
|
|
182
|
+
*/
|
|
183
|
+
stop() {
|
|
184
|
+
return new Promise((resolve) => {
|
|
185
|
+
this.cache.clear();
|
|
186
|
+
if (!this.server) {
|
|
187
|
+
resolve();
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.server.close(() => {
|
|
191
|
+
this.server = null;
|
|
192
|
+
resolve();
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/** Whether the TCP server is currently listening. */
|
|
197
|
+
isRunning() {
|
|
198
|
+
return this.server !== null && this.server.listening;
|
|
199
|
+
}
|
|
200
|
+
/** Expose cache for testing purposes. */
|
|
201
|
+
getCache() {
|
|
202
|
+
return this.cache;
|
|
203
|
+
}
|
|
204
|
+
// ─── Connection Handler ─────────────────────────────────────────────
|
|
205
|
+
/**
|
|
206
|
+
* Handle a single TCP connection from Postfix.
|
|
207
|
+
*
|
|
208
|
+
* Postfix socketmap protocol:
|
|
209
|
+
* Request: `<mapname> <key>\n`
|
|
210
|
+
* Response: `OK <value>\n` | `NOTFOUND \n` | `TEMP <reason>\n`
|
|
211
|
+
*
|
|
212
|
+
* The connection may carry multiple newline-delimited requests.
|
|
213
|
+
*/
|
|
214
|
+
handleConnection(socket) {
|
|
215
|
+
let buffer = '';
|
|
216
|
+
socket.setEncoding('utf-8');
|
|
217
|
+
socket.on('data', (data) => {
|
|
218
|
+
buffer += data;
|
|
219
|
+
// Process all complete lines in the buffer.
|
|
220
|
+
let newlineIdx;
|
|
221
|
+
while ((newlineIdx = buffer.indexOf('\n')) !== -1) {
|
|
222
|
+
const line = buffer.slice(0, newlineIdx).trim();
|
|
223
|
+
buffer = buffer.slice(newlineIdx + 1);
|
|
224
|
+
if (line.length === 0) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
this.handleRequest(line)
|
|
228
|
+
.then((response) => {
|
|
229
|
+
if (!socket.destroyed) {
|
|
230
|
+
socket.write(response + '\n');
|
|
231
|
+
}
|
|
232
|
+
})
|
|
233
|
+
.catch(() => {
|
|
234
|
+
if (!socket.destroyed) {
|
|
235
|
+
socket.write('TEMP internal error\n');
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
socket.on('error', () => {
|
|
241
|
+
// Silently handle socket errors (e.g. client disconnect).
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Parse a socketmap request line and return the response string.
|
|
246
|
+
*
|
|
247
|
+
* @param line - A single request line, e.g. `virtual alice@brightchain.org`
|
|
248
|
+
* @returns The response string, e.g. `OK alice@brightchain.org`
|
|
249
|
+
*/
|
|
250
|
+
async handleRequest(line) {
|
|
251
|
+
// Format: `<mapname> <key>`
|
|
252
|
+
const spaceIdx = line.indexOf(' ');
|
|
253
|
+
if (spaceIdx === -1) {
|
|
254
|
+
return 'TEMP malformed request';
|
|
255
|
+
}
|
|
256
|
+
const key = line.slice(spaceIdx + 1).trim();
|
|
257
|
+
if (key.length === 0) {
|
|
258
|
+
return 'TEMP malformed request';
|
|
259
|
+
}
|
|
260
|
+
const result = await this.lookup(key);
|
|
261
|
+
switch (result) {
|
|
262
|
+
case 'OK':
|
|
263
|
+
return `OK ${key}`;
|
|
264
|
+
case 'NOTFOUND':
|
|
265
|
+
return 'NOTFOUND ';
|
|
266
|
+
case 'TEMP':
|
|
267
|
+
return 'TEMP registry unavailable';
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// ─── Helpers ────────────────────────────────────────────────────────
|
|
271
|
+
/**
|
|
272
|
+
* Race a promise against a timeout.
|
|
273
|
+
*
|
|
274
|
+
* @throws If the timeout fires first.
|
|
275
|
+
*/
|
|
276
|
+
withTimeout(promise, ms) {
|
|
277
|
+
return new Promise((resolve, reject) => {
|
|
278
|
+
const timer = setTimeout(() => {
|
|
279
|
+
reject(new Error(`Lookup timed out after ${ms}ms`));
|
|
280
|
+
}, ms);
|
|
281
|
+
promise
|
|
282
|
+
.then((value) => {
|
|
283
|
+
clearTimeout(timer);
|
|
284
|
+
resolve(value);
|
|
285
|
+
})
|
|
286
|
+
.catch((err) => {
|
|
287
|
+
clearTimeout(timer);
|
|
288
|
+
reject(err);
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
exports.RecipientLookupService = RecipientLookupService;
|
|
294
|
+
//# sourceMappingURL=recipientLookupService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipientLookupService.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/emailGateway/recipientLookupService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry Back-Off Utilities — exponential back-off with jitter for outbound
|
|
3
|
+
* email delivery retries.
|
|
4
|
+
*
|
|
5
|
+
* Provides pure utility functions that the OutboundDeliveryWorker and
|
|
6
|
+
* OutboundQueue use to compute retry delays and determine whether a
|
|
7
|
+
* message should be retried or permanently failed.
|
|
8
|
+
*
|
|
9
|
+
* Back-off formula: baseInterval × 2^retryCount + random jitter (0–25%)
|
|
10
|
+
*
|
|
11
|
+
* @see Requirements 3.1, 3.2, 3.3, 3.4, 3.5
|
|
12
|
+
* @module retryBackoff
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for retry back-off behaviour.
|
|
16
|
+
*
|
|
17
|
+
* Extracted from `IEmailGatewayConfig` so the utility functions remain
|
|
18
|
+
* decoupled from the full gateway config.
|
|
19
|
+
*/
|
|
20
|
+
export interface IRetryConfig {
|
|
21
|
+
/** Maximum number of delivery retry attempts (default: 5). Req 3.3 */
|
|
22
|
+
retryMaxCount: number;
|
|
23
|
+
/** Maximum total retry duration in milliseconds (default: 48h). Req 3.3 */
|
|
24
|
+
retryMaxDurationMs: number;
|
|
25
|
+
/** Base interval in milliseconds for exponential back-off (default: 60000). Req 3.2 */
|
|
26
|
+
retryBaseIntervalMs: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Minimal item shape needed by `shouldRetry`.
|
|
30
|
+
*/
|
|
31
|
+
export interface IRetryableItem {
|
|
32
|
+
/** Number of delivery attempts made so far. */
|
|
33
|
+
retryCount: number;
|
|
34
|
+
/** Timestamp when the item was first enqueued. */
|
|
35
|
+
enqueuedAt: Date;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Compute the exponential back-off delay for a retry attempt.
|
|
39
|
+
*
|
|
40
|
+
* Formula: `baseIntervalMs × 2^retryCount + jitter`
|
|
41
|
+
* where jitter is a random value between 0% and 25% of the base delay.
|
|
42
|
+
*
|
|
43
|
+
* @param baseIntervalMs - Base interval in milliseconds (e.g. 60000)
|
|
44
|
+
* @param retryCount - Current retry attempt number (0-based: first retry = 0)
|
|
45
|
+
* @param randomFn - Optional random function for deterministic testing (default: Math.random)
|
|
46
|
+
* @returns Delay in milliseconds before the next retry attempt
|
|
47
|
+
*
|
|
48
|
+
* @see Requirement 3.2
|
|
49
|
+
*/
|
|
50
|
+
export declare function computeBackoffDelay(baseIntervalMs: number, retryCount: number, randomFn?: () => number): number;
|
|
51
|
+
/**
|
|
52
|
+
* Determine whether a queue item should be retried or permanently failed.
|
|
53
|
+
*
|
|
54
|
+
* An item should be retried when BOTH conditions are met:
|
|
55
|
+
* 1. `retryCount < config.retryMaxCount`
|
|
56
|
+
* 2. Time since `enqueuedAt` has not exceeded `config.retryMaxDurationMs`
|
|
57
|
+
*
|
|
58
|
+
* @param item - The queue item to evaluate
|
|
59
|
+
* @param config - Retry configuration limits
|
|
60
|
+
* @param nowMs - Current time in epoch milliseconds (default: Date.now())
|
|
61
|
+
* @returns `true` if the item is eligible for another retry attempt
|
|
62
|
+
*
|
|
63
|
+
* @see Requirements 3.3, 3.4
|
|
64
|
+
*/
|
|
65
|
+
export declare function shouldRetry(item: IRetryableItem, config: IRetryConfig, nowMs?: number): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Compute the `nextAttemptAt` timestamp for a requeued item.
|
|
68
|
+
*
|
|
69
|
+
* Convenience wrapper that combines `computeBackoffDelay` with the
|
|
70
|
+
* current time to produce an absolute `Date`.
|
|
71
|
+
*
|
|
72
|
+
* @param baseIntervalMs - Base interval in milliseconds
|
|
73
|
+
* @param retryCount - Current retry count (before increment)
|
|
74
|
+
* @param nowMs - Current time in epoch milliseconds (default: Date.now())
|
|
75
|
+
* @param randomFn - Optional random function for deterministic testing
|
|
76
|
+
* @returns The `Date` at which the next attempt should be made
|
|
77
|
+
*/
|
|
78
|
+
export declare function computeNextAttemptAt(baseIntervalMs: number, retryCount: number, nowMs?: number, randomFn?: () => number): Date;
|
|
79
|
+
//# sourceMappingURL=retryBackoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryBackoff.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/emailGateway/retryBackoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IAEtB,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAE3B,uFAAuF;IACvF,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IAEnB,kDAAkD;IAClD,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,MAAoB,GACnC,MAAM,CAIR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAST;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAmB,EAC1B,QAAQ,CAAC,EAAE,MAAM,MAAM,GACtB,IAAI,CAGN"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Retry Back-Off Utilities — exponential back-off with jitter for outbound
|
|
4
|
+
* email delivery retries.
|
|
5
|
+
*
|
|
6
|
+
* Provides pure utility functions that the OutboundDeliveryWorker and
|
|
7
|
+
* OutboundQueue use to compute retry delays and determine whether a
|
|
8
|
+
* message should be retried or permanently failed.
|
|
9
|
+
*
|
|
10
|
+
* Back-off formula: baseInterval × 2^retryCount + random jitter (0–25%)
|
|
11
|
+
*
|
|
12
|
+
* @see Requirements 3.1, 3.2, 3.3, 3.4, 3.5
|
|
13
|
+
* @module retryBackoff
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.computeBackoffDelay = computeBackoffDelay;
|
|
17
|
+
exports.shouldRetry = shouldRetry;
|
|
18
|
+
exports.computeNextAttemptAt = computeNextAttemptAt;
|
|
19
|
+
/**
|
|
20
|
+
* Compute the exponential back-off delay for a retry attempt.
|
|
21
|
+
*
|
|
22
|
+
* Formula: `baseIntervalMs × 2^retryCount + jitter`
|
|
23
|
+
* where jitter is a random value between 0% and 25% of the base delay.
|
|
24
|
+
*
|
|
25
|
+
* @param baseIntervalMs - Base interval in milliseconds (e.g. 60000)
|
|
26
|
+
* @param retryCount - Current retry attempt number (0-based: first retry = 0)
|
|
27
|
+
* @param randomFn - Optional random function for deterministic testing (default: Math.random)
|
|
28
|
+
* @returns Delay in milliseconds before the next retry attempt
|
|
29
|
+
*
|
|
30
|
+
* @see Requirement 3.2
|
|
31
|
+
*/
|
|
32
|
+
function computeBackoffDelay(baseIntervalMs, retryCount, randomFn = Math.random) {
|
|
33
|
+
const baseDelay = baseIntervalMs * Math.pow(2, retryCount);
|
|
34
|
+
const jitter = baseDelay * 0.25 * randomFn();
|
|
35
|
+
return baseDelay + jitter;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Determine whether a queue item should be retried or permanently failed.
|
|
39
|
+
*
|
|
40
|
+
* An item should be retried when BOTH conditions are met:
|
|
41
|
+
* 1. `retryCount < config.retryMaxCount`
|
|
42
|
+
* 2. Time since `enqueuedAt` has not exceeded `config.retryMaxDurationMs`
|
|
43
|
+
*
|
|
44
|
+
* @param item - The queue item to evaluate
|
|
45
|
+
* @param config - Retry configuration limits
|
|
46
|
+
* @param nowMs - Current time in epoch milliseconds (default: Date.now())
|
|
47
|
+
* @returns `true` if the item is eligible for another retry attempt
|
|
48
|
+
*
|
|
49
|
+
* @see Requirements 3.3, 3.4
|
|
50
|
+
*/
|
|
51
|
+
function shouldRetry(item, config, nowMs = Date.now()) {
|
|
52
|
+
if (item.retryCount >= config.retryMaxCount) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const age = nowMs - item.enqueuedAt.getTime();
|
|
56
|
+
if (age > config.retryMaxDurationMs) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Compute the `nextAttemptAt` timestamp for a requeued item.
|
|
63
|
+
*
|
|
64
|
+
* Convenience wrapper that combines `computeBackoffDelay` with the
|
|
65
|
+
* current time to produce an absolute `Date`.
|
|
66
|
+
*
|
|
67
|
+
* @param baseIntervalMs - Base interval in milliseconds
|
|
68
|
+
* @param retryCount - Current retry count (before increment)
|
|
69
|
+
* @param nowMs - Current time in epoch milliseconds (default: Date.now())
|
|
70
|
+
* @param randomFn - Optional random function for deterministic testing
|
|
71
|
+
* @returns The `Date` at which the next attempt should be made
|
|
72
|
+
*/
|
|
73
|
+
function computeNextAttemptAt(baseIntervalMs, retryCount, nowMs = Date.now(), randomFn) {
|
|
74
|
+
const delay = computeBackoffDelay(baseIntervalMs, retryCount, randomFn);
|
|
75
|
+
return new Date(nowMs + delay);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=retryBackoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryBackoff.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/emailGateway/retryBackoff.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AA2CH,kDAQC;AAgBD,kCAaC;AAcD,oDAQC;AAxED;;;;;;;;;;;;GAYG;AACH,SAAgB,mBAAmB,CACjC,cAAsB,EACtB,UAAkB,EAClB,WAAyB,IAAI,CAAC,MAAM;IAEpC,MAAM,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC;IAC7C,OAAO,SAAS,GAAG,MAAM,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,WAAW,CACzB,IAAoB,EACpB,MAAoB,EACpB,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC9C,IAAI,GAAG,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,oBAAoB,CAClC,cAAsB,EACtB,UAAkB,EAClB,QAAgB,IAAI,CAAC,GAAG,EAAE,EAC1B,QAAuB;IAEvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxE,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventNotificationSystem.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/eventNotificationSystem.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"eventNotificationSystem.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/eventNotificationSystem.ts"],"names":[],"mappings":"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"}
|