@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.
Files changed (244) hide show
  1. package/package.json +4 -3
  2. package/src/lib/application.d.ts +3 -14
  3. package/src/lib/application.d.ts.map +1 -1
  4. package/src/lib/application.js +121 -44
  5. package/src/lib/application.js.map +1 -1
  6. package/src/lib/auth/aclDocumentStore.d.ts +90 -0
  7. package/src/lib/auth/aclDocumentStore.d.ts.map +1 -0
  8. package/src/lib/auth/aclDocumentStore.js +155 -0
  9. package/src/lib/auth/aclDocumentStore.js.map +1 -0
  10. package/src/lib/auth/index.d.ts +4 -0
  11. package/src/lib/auth/index.d.ts.map +1 -1
  12. package/src/lib/auth/index.js +4 -0
  13. package/src/lib/auth/index.js.map +1 -1
  14. package/src/lib/auth/writeAclApiRouter.d.ts +32 -0
  15. package/src/lib/auth/writeAclApiRouter.d.ts.map +1 -0
  16. package/src/lib/auth/writeAclApiRouter.js +348 -0
  17. package/src/lib/auth/writeAclApiRouter.js.map +1 -0
  18. package/src/lib/auth/writeAclAuditLogger.d.ts +94 -0
  19. package/src/lib/auth/writeAclAuditLogger.d.ts.map +1 -0
  20. package/src/lib/auth/writeAclAuditLogger.js +143 -0
  21. package/src/lib/auth/writeAclAuditLogger.js.map +1 -0
  22. package/src/lib/auth/writeProofMiddleware.d.ts +39 -0
  23. package/src/lib/auth/writeProofMiddleware.d.ts.map +1 -0
  24. package/src/lib/auth/writeProofMiddleware.js +56 -0
  25. package/src/lib/auth/writeProofMiddleware.js.map +1 -0
  26. package/src/lib/availability/aclDocumentSyncHandler.d.ts +39 -0
  27. package/src/lib/availability/aclDocumentSyncHandler.d.ts.map +1 -0
  28. package/src/lib/availability/aclDocumentSyncHandler.js +81 -0
  29. package/src/lib/availability/aclDocumentSyncHandler.js.map +1 -0
  30. package/src/lib/availability/gossipService.d.ts +4 -1
  31. package/src/lib/availability/gossipService.d.ts.map +1 -1
  32. package/src/lib/availability/gossipService.js +15 -1
  33. package/src/lib/availability/gossipService.js.map +1 -1
  34. package/src/lib/availability/headUpdateSyncHandler.d.ts +32 -0
  35. package/src/lib/availability/headUpdateSyncHandler.d.ts.map +1 -0
  36. package/src/lib/availability/headUpdateSyncHandler.js +78 -0
  37. package/src/lib/availability/headUpdateSyncHandler.js.map +1 -0
  38. package/src/lib/availability/index.d.ts +2 -0
  39. package/src/lib/availability/index.d.ts.map +1 -1
  40. package/src/lib/availability/index.js +2 -0
  41. package/src/lib/availability/index.js.map +1 -1
  42. package/src/lib/constants.d.ts.map +1 -1
  43. package/src/lib/constants.js +2 -0
  44. package/src/lib/constants.js.map +1 -1
  45. package/src/lib/controllers/api/brighthub/connectionController.d.ts +6 -0
  46. package/src/lib/controllers/api/brighthub/connectionController.d.ts.map +1 -1
  47. package/src/lib/controllers/api/brighthub/connectionController.js +158 -11
  48. package/src/lib/controllers/api/brighthub/connectionController.js.map +1 -1
  49. package/src/lib/controllers/api/brighthub/messagingController.d.ts +6 -0
  50. package/src/lib/controllers/api/brighthub/messagingController.d.ts.map +1 -1
  51. package/src/lib/controllers/api/brighthub/messagingController.js +190 -58
  52. package/src/lib/controllers/api/brighthub/messagingController.js.map +1 -1
  53. package/src/lib/controllers/api/brighthub/postController.d.ts +12 -3
  54. package/src/lib/controllers/api/brighthub/postController.d.ts.map +1 -1
  55. package/src/lib/controllers/api/brighthub/postController.js +60 -0
  56. package/src/lib/controllers/api/brighthub/postController.js.map +1 -1
  57. package/src/lib/controllers/api/brighthub/timelineController.d.ts +19 -0
  58. package/src/lib/controllers/api/brighthub/timelineController.d.ts.map +1 -1
  59. package/src/lib/controllers/api/brighthub/timelineController.js +133 -0
  60. package/src/lib/controllers/api/brighthub/timelineController.js.map +1 -1
  61. package/src/lib/controllers/api/emails.d.ts +4 -1
  62. package/src/lib/controllers/api/emails.d.ts.map +1 -1
  63. package/src/lib/controllers/api/emails.js +28 -1
  64. package/src/lib/controllers/api/emails.js.map +1 -1
  65. package/src/lib/controllers/api/user.d.ts.map +1 -1
  66. package/src/lib/controllers/api/user.js +10 -0
  67. package/src/lib/controllers/api/user.js.map +1 -1
  68. package/src/lib/databaseInit.d.ts +7 -11
  69. package/src/lib/databaseInit.d.ts.map +1 -1
  70. package/src/lib/databaseInit.js +41 -97
  71. package/src/lib/databaseInit.js.map +1 -1
  72. package/src/lib/datastore/block-document-store-factory.d.ts +3 -0
  73. package/src/lib/datastore/block-document-store-factory.d.ts.map +1 -1
  74. package/src/lib/datastore/block-document-store-factory.js +15 -18
  75. package/src/lib/datastore/block-document-store-factory.js.map +1 -1
  76. package/src/lib/datastore/block-document-store.d.ts +2 -191
  77. package/src/lib/datastore/block-document-store.d.ts.map +1 -1
  78. package/src/lib/datastore/block-document-store.js +4 -628
  79. package/src/lib/datastore/block-document-store.js.map +1 -1
  80. package/src/lib/datastore/document-store.d.ts +1 -62
  81. package/src/lib/datastore/document-store.d.ts.map +1 -1
  82. package/src/lib/datastore/memory-document-store.d.ts +1 -8
  83. package/src/lib/datastore/memory-document-store.d.ts.map +1 -1
  84. package/src/lib/datastore/memory-document-store.js +3 -214
  85. package/src/lib/datastore/memory-document-store.js.map +1 -1
  86. package/src/lib/environment.d.ts +3 -20
  87. package/src/lib/environment.d.ts.map +1 -1
  88. package/src/lib/environment.js +2 -45
  89. package/src/lib/environment.js.map +1 -1
  90. package/src/lib/factories/blockStoreFactory.d.ts.map +1 -1
  91. package/src/lib/factories/blockStoreFactory.js +4 -1
  92. package/src/lib/factories/blockStoreFactory.js.map +1 -1
  93. package/src/lib/interfaces/environment.d.ts +23 -2
  94. package/src/lib/interfaces/environment.d.ts.map +1 -1
  95. package/src/lib/interfaces/responses/brighthub/api-post-response.d.ts +8 -1
  96. package/src/lib/interfaces/responses/brighthub/api-post-response.d.ts.map +1 -1
  97. package/src/lib/middleware/index.d.ts +1 -1
  98. package/src/lib/middleware/index.d.ts.map +1 -1
  99. package/src/lib/middleware/index.js +3 -2
  100. package/src/lib/middleware/index.js.map +1 -1
  101. package/src/lib/middleware/validateBody.d.ts +1 -12
  102. package/src/lib/middleware/validateBody.d.ts.map +1 -1
  103. package/src/lib/middleware/validateBody.js +4 -32
  104. package/src/lib/middleware/validateBody.js.map +1 -1
  105. package/src/lib/middlewares.d.ts.map +1 -1
  106. package/src/lib/middlewares.js +7 -1
  107. package/src/lib/middlewares.js.map +1 -1
  108. package/src/lib/plugins/brightchain-database-plugin.d.ts +27 -79
  109. package/src/lib/plugins/brightchain-database-plugin.d.ts.map +1 -1
  110. package/src/lib/plugins/brightchain-database-plugin.js +27 -97
  111. package/src/lib/plugins/brightchain-database-plugin.js.map +1 -1
  112. package/src/lib/routers/api.d.ts +18 -1
  113. package/src/lib/routers/api.d.ts.map +1 -1
  114. package/src/lib/routers/api.js +24 -1
  115. package/src/lib/routers/api.js.map +1 -1
  116. package/src/lib/routers/app.d.ts.map +1 -1
  117. package/src/lib/routers/app.js +5 -2
  118. package/src/lib/routers/app.js.map +1 -1
  119. package/src/lib/services/auth.d.ts.map +1 -1
  120. package/src/lib/services/auth.js +37 -3
  121. package/src/lib/services/auth.js.map +1 -1
  122. package/src/lib/services/blockStore.d.ts +8 -1
  123. package/src/lib/services/blockStore.d.ts.map +1 -1
  124. package/src/lib/services/blockStore.js +19 -7
  125. package/src/lib/services/blockStore.js.map +1 -1
  126. package/src/lib/services/brightChainBackupCodeService.d.ts +42 -39
  127. package/src/lib/services/brightChainBackupCodeService.d.ts.map +1 -1
  128. package/src/lib/services/brightChainBackupCodeService.js +86 -61
  129. package/src/lib/services/brightChainBackupCodeService.js.map +1 -1
  130. package/src/lib/services/brighthub/collectionAdapter.d.ts +81 -0
  131. package/src/lib/services/brighthub/collectionAdapter.d.ts.map +1 -0
  132. package/src/lib/services/brighthub/collectionAdapter.js +127 -0
  133. package/src/lib/services/brighthub/collectionAdapter.js.map +1 -0
  134. package/src/lib/services/brighthub/connectionService.d.ts.map +1 -1
  135. package/src/lib/services/brighthub/connectionService.js +3 -0
  136. package/src/lib/services/brighthub/connectionService.js.map +1 -1
  137. package/src/lib/services/brighthub/messagingService.d.ts +4 -0
  138. package/src/lib/services/brighthub/messagingService.d.ts.map +1 -1
  139. package/src/lib/services/brighthub/messagingService.js +25 -4
  140. package/src/lib/services/brighthub/messagingService.js.map +1 -1
  141. package/src/lib/services/brighthub/notificationService.d.ts.map +1 -1
  142. package/src/lib/services/brighthub/notificationService.js +35 -20
  143. package/src/lib/services/brighthub/notificationService.js.map +1 -1
  144. package/src/lib/services/brighthub/postService.d.ts +7 -1
  145. package/src/lib/services/brighthub/postService.d.ts.map +1 -1
  146. package/src/lib/services/brighthub/postService.js +22 -1
  147. package/src/lib/services/brighthub/postService.js.map +1 -1
  148. package/src/lib/services/brighthub/userProfileService.d.ts +19 -1
  149. package/src/lib/services/brighthub/userProfileService.d.ts.map +1 -1
  150. package/src/lib/services/brighthub/userProfileService.js +74 -0
  151. package/src/lib/services/brighthub/userProfileService.js.map +1 -1
  152. package/src/lib/services/emailGateway/antiSpamFilter.d.ts +229 -0
  153. package/src/lib/services/emailGateway/antiSpamFilter.d.ts.map +1 -0
  154. package/src/lib/services/emailGateway/antiSpamFilter.js +325 -0
  155. package/src/lib/services/emailGateway/antiSpamFilter.js.map +1 -0
  156. package/src/lib/services/emailGateway/bounceProcessor.d.ts +171 -0
  157. package/src/lib/services/emailGateway/bounceProcessor.d.ts.map +1 -0
  158. package/src/lib/services/emailGateway/bounceProcessor.js +378 -0
  159. package/src/lib/services/emailGateway/bounceProcessor.js.map +1 -0
  160. package/src/lib/services/emailGateway/emailAuthVerifier.d.ts +99 -0
  161. package/src/lib/services/emailGateway/emailAuthVerifier.d.ts.map +1 -0
  162. package/src/lib/services/emailGateway/emailAuthVerifier.js +202 -0
  163. package/src/lib/services/emailGateway/emailAuthVerifier.js.map +1 -0
  164. package/src/lib/services/emailGateway/emailGatewayConfig.d.ts +73 -0
  165. package/src/lib/services/emailGateway/emailGatewayConfig.d.ts.map +1 -0
  166. package/src/lib/services/emailGateway/emailGatewayConfig.js +107 -0
  167. package/src/lib/services/emailGateway/emailGatewayConfig.js.map +1 -0
  168. package/src/lib/services/emailGateway/emailGatewayService.d.ts +152 -0
  169. package/src/lib/services/emailGateway/emailGatewayService.d.ts.map +1 -0
  170. package/src/lib/services/emailGateway/emailGatewayService.js +201 -0
  171. package/src/lib/services/emailGateway/emailGatewayService.js.map +1 -0
  172. package/src/lib/services/emailGateway/gatewayObservability.d.ts +123 -0
  173. package/src/lib/services/emailGateway/gatewayObservability.d.ts.map +1 -0
  174. package/src/lib/services/emailGateway/gatewayObservability.js +186 -0
  175. package/src/lib/services/emailGateway/gatewayObservability.js.map +1 -0
  176. package/src/lib/services/emailGateway/inboundProcessor.d.ts +113 -0
  177. package/src/lib/services/emailGateway/inboundProcessor.d.ts.map +1 -0
  178. package/src/lib/services/emailGateway/inboundProcessor.js +298 -0
  179. package/src/lib/services/emailGateway/inboundProcessor.js.map +1 -0
  180. package/src/lib/services/emailGateway/index.d.ts +23 -0
  181. package/src/lib/services/emailGateway/index.d.ts.map +1 -0
  182. package/src/lib/services/emailGateway/index.js +26 -0
  183. package/src/lib/services/emailGateway/index.js.map +1 -0
  184. package/src/lib/services/emailGateway/outboundDeliveryWorker.d.ts +111 -0
  185. package/src/lib/services/emailGateway/outboundDeliveryWorker.d.ts.map +1 -0
  186. package/src/lib/services/emailGateway/outboundDeliveryWorker.js +97 -0
  187. package/src/lib/services/emailGateway/outboundDeliveryWorker.js.map +1 -0
  188. package/src/lib/services/emailGateway/outboundQueue.d.ts +135 -0
  189. package/src/lib/services/emailGateway/outboundQueue.d.ts.map +1 -0
  190. package/src/lib/services/emailGateway/outboundQueue.js +227 -0
  191. package/src/lib/services/emailGateway/outboundQueue.js.map +1 -0
  192. package/src/lib/services/emailGateway/outboundQueueStore.d.ts +110 -0
  193. package/src/lib/services/emailGateway/outboundQueueStore.d.ts.map +1 -0
  194. package/src/lib/services/emailGateway/outboundQueueStore.js +131 -0
  195. package/src/lib/services/emailGateway/outboundQueueStore.js.map +1 -0
  196. package/src/lib/services/emailGateway/recipientLookupService.d.ts +135 -0
  197. package/src/lib/services/emailGateway/recipientLookupService.d.ts.map +1 -0
  198. package/src/lib/services/emailGateway/recipientLookupService.js +294 -0
  199. package/src/lib/services/emailGateway/recipientLookupService.js.map +1 -0
  200. package/src/lib/services/emailGateway/retryBackoff.d.ts +79 -0
  201. package/src/lib/services/emailGateway/retryBackoff.d.ts.map +1 -0
  202. package/src/lib/services/emailGateway/retryBackoff.js +77 -0
  203. package/src/lib/services/emailGateway/retryBackoff.js.map +1 -0
  204. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  205. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  206. package/src/lib/services/index.d.ts +2 -1
  207. package/src/lib/services/index.d.ts.map +1 -1
  208. package/src/lib/services/index.js +2 -1
  209. package/src/lib/services/index.js.map +1 -1
  210. package/src/lib/services/quorumDatabaseAdapter.d.ts +7 -1
  211. package/src/lib/services/quorumDatabaseAdapter.d.ts.map +1 -1
  212. package/src/lib/services/quorumDatabaseAdapter.js +83 -0
  213. package/src/lib/services/quorumDatabaseAdapter.js.map +1 -1
  214. package/src/lib/services/sessionAdapter.d.ts +2 -61
  215. package/src/lib/services/sessionAdapter.d.ts.map +1 -1
  216. package/src/lib/services/sessionAdapter.js +2 -102
  217. package/src/lib/services/sessionAdapter.js.map +1 -1
  218. package/src/lib/shared-types.d.ts +7 -15
  219. package/src/lib/shared-types.d.ts.map +1 -1
  220. package/src/lib/stores/availabilityAwareBlockStore.d.ts +4 -3
  221. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  222. package/src/lib/stores/availabilityAwareBlockStore.js +5 -2
  223. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  224. package/src/lib/stores/cloudBlockStoreBase.d.ts +2 -1
  225. package/src/lib/stores/cloudBlockStoreBase.d.ts.map +1 -1
  226. package/src/lib/stores/cloudBlockStoreBase.js +34 -13
  227. package/src/lib/stores/cloudBlockStoreBase.js.map +1 -1
  228. package/src/lib/stores/diskBlockAsyncStore.d.ts +21 -1
  229. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  230. package/src/lib/stores/diskBlockAsyncStore.js +48 -17
  231. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  232. package/src/lib/stores/diskBlockStore.d.ts +10 -2
  233. package/src/lib/stores/diskBlockStore.d.ts.map +1 -1
  234. package/src/lib/stores/diskBlockStore.js +43 -19
  235. package/src/lib/stores/diskBlockStore.js.map +1 -1
  236. package/src/lib/types/backend-id.d.ts +1 -2
  237. package/src/lib/types/backend-id.d.ts.map +1 -1
  238. package/src/lib/utils/emailValidation.d.ts.map +1 -1
  239. package/src/lib/utils/emailValidation.js +2 -1
  240. package/src/lib/utils/emailValidation.js.map +1 -1
  241. package/src/lib/validation/userValidation.d.ts +2 -43
  242. package/src/lib/validation/userValidation.d.ts.map +1 -1
  243. package/src/lib/validation/userValidation.js +6 -144
  244. 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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"}