@brightchain/brightchain-api-lib 0.13.0 → 0.15.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 (267) hide show
  1. package/package.json +5 -5
  2. package/src/index.d.ts +3 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +5 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/application.d.ts +1 -0
  7. package/src/lib/application.d.ts.map +1 -1
  8. package/src/lib/application.js +23 -0
  9. package/src/lib/application.js.map +1 -1
  10. package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
  11. package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
  12. package/src/lib/auth/aclEnforcedAvailability.js +87 -0
  13. package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
  14. package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
  15. package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
  16. package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
  17. package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
  18. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
  19. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
  20. package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
  21. package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
  22. package/src/lib/auth/index.d.ts +7 -0
  23. package/src/lib/auth/index.d.ts.map +1 -0
  24. package/src/lib/auth/index.js +13 -0
  25. package/src/lib/auth/index.js.map +1 -0
  26. package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
  27. package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
  28. package/src/lib/auth/poolAclBootstrap.js +64 -0
  29. package/src/lib/auth/poolAclBootstrap.js.map +1 -0
  30. package/src/lib/auth/poolAclStore.d.ts +77 -0
  31. package/src/lib/auth/poolAclStore.d.ts.map +1 -0
  32. package/src/lib/auth/poolAclStore.js +189 -0
  33. package/src/lib/auth/poolAclStore.js.map +1 -0
  34. package/src/lib/auth/poolAclUpdater.d.ts +79 -0
  35. package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
  36. package/src/lib/auth/poolAclUpdater.js +144 -0
  37. package/src/lib/auth/poolAclUpdater.js.map +1 -0
  38. package/src/lib/availability/availabilityService.d.ts +2 -2
  39. package/src/lib/availability/availabilityService.d.ts.map +1 -1
  40. package/src/lib/availability/availabilityService.js +12 -5
  41. package/src/lib/availability/availabilityService.js.map +1 -1
  42. package/src/lib/availability/blockRegistry.d.ts +45 -3
  43. package/src/lib/availability/blockRegistry.d.ts.map +1 -1
  44. package/src/lib/availability/blockRegistry.js +123 -5
  45. package/src/lib/availability/blockRegistry.js.map +1 -1
  46. package/src/lib/availability/configValidation.d.ts.map +1 -1
  47. package/src/lib/availability/configValidation.js +20 -0
  48. package/src/lib/availability/configValidation.js.map +1 -1
  49. package/src/lib/availability/discoveryProtocol.d.ts +30 -1
  50. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
  51. package/src/lib/availability/discoveryProtocol.js +76 -0
  52. package/src/lib/availability/discoveryProtocol.js.map +1 -1
  53. package/src/lib/availability/gossipService.d.ts +193 -11
  54. package/src/lib/availability/gossipService.d.ts.map +1 -1
  55. package/src/lib/availability/gossipService.js +473 -21
  56. package/src/lib/availability/gossipService.js.map +1 -1
  57. package/src/lib/availability/reconciliationService.d.ts +88 -1
  58. package/src/lib/availability/reconciliationService.d.ts.map +1 -1
  59. package/src/lib/availability/reconciliationService.js +246 -48
  60. package/src/lib/availability/reconciliationService.js.map +1 -1
  61. package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
  62. package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
  63. package/src/lib/blockFetch/blockFetcher.js +279 -0
  64. package/src/lib/blockFetch/blockFetcher.js.map +1 -0
  65. package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
  66. package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
  67. package/src/lib/blockFetch/fetchQueue.js +204 -0
  68. package/src/lib/blockFetch/fetchQueue.js.map +1 -0
  69. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
  70. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
  71. package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
  72. package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
  73. package/src/lib/blockFetch/index.d.ts +10 -0
  74. package/src/lib/blockFetch/index.d.ts.map +1 -0
  75. package/src/lib/blockFetch/index.js +13 -0
  76. package/src/lib/blockFetch/index.js.map +1 -0
  77. package/src/lib/controllers/api/brightpass.d.ts +72 -0
  78. package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
  79. package/src/lib/controllers/api/brightpass.js +577 -0
  80. package/src/lib/controllers/api/brightpass.js.map +1 -0
  81. package/src/lib/controllers/api/channels.d.ts +122 -0
  82. package/src/lib/controllers/api/channels.d.ts.map +1 -0
  83. package/src/lib/controllers/api/channels.js +701 -0
  84. package/src/lib/controllers/api/channels.js.map +1 -0
  85. package/src/lib/controllers/api/conversations.d.ts +89 -0
  86. package/src/lib/controllers/api/conversations.d.ts.map +1 -0
  87. package/src/lib/controllers/api/conversations.js +259 -0
  88. package/src/lib/controllers/api/conversations.js.map +1 -0
  89. package/src/lib/controllers/api/emails.d.ts +122 -0
  90. package/src/lib/controllers/api/emails.d.ts.map +1 -0
  91. package/src/lib/controllers/api/emails.js +494 -0
  92. package/src/lib/controllers/api/emails.js.map +1 -0
  93. package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
  94. package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
  95. package/src/lib/controllers/api/explodingMessages.js +378 -0
  96. package/src/lib/controllers/api/explodingMessages.js.map +1 -0
  97. package/src/lib/controllers/api/groups.d.ts +94 -0
  98. package/src/lib/controllers/api/groups.d.ts.map +1 -0
  99. package/src/lib/controllers/api/groups.js +484 -0
  100. package/src/lib/controllers/api/groups.js.map +1 -0
  101. package/src/lib/controllers/api/index.d.ts +6 -0
  102. package/src/lib/controllers/api/index.d.ts.map +1 -1
  103. package/src/lib/controllers/api/index.js +6 -0
  104. package/src/lib/controllers/api/index.js.map +1 -1
  105. package/src/lib/controllers/api/messages.d.ts.map +1 -1
  106. package/src/lib/controllers/api/messages.js +2 -1
  107. package/src/lib/controllers/api/messages.js.map +1 -1
  108. package/src/lib/controllers/api/sync.d.ts +38 -2
  109. package/src/lib/controllers/api/sync.d.ts.map +1 -1
  110. package/src/lib/controllers/api/sync.js +89 -0
  111. package/src/lib/controllers/api/sync.js.map +1 -1
  112. package/src/lib/controllers/crypto/gitController.d.ts +70 -0
  113. package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
  114. package/src/lib/controllers/crypto/gitController.js +306 -0
  115. package/src/lib/controllers/crypto/gitController.js.map +1 -0
  116. package/src/lib/controllers/crypto/index.d.ts +3 -0
  117. package/src/lib/controllers/crypto/index.d.ts.map +1 -0
  118. package/src/lib/controllers/crypto/index.js +6 -0
  119. package/src/lib/controllers/crypto/index.js.map +1 -0
  120. package/src/lib/controllers/crypto/walletController.d.ts +64 -0
  121. package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
  122. package/src/lib/controllers/crypto/walletController.js +260 -0
  123. package/src/lib/controllers/crypto/walletController.js.map +1 -0
  124. package/src/lib/controllers/identity/deviceController.d.ts +96 -0
  125. package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
  126. package/src/lib/controllers/identity/deviceController.js +355 -0
  127. package/src/lib/controllers/identity/deviceController.js.map +1 -0
  128. package/src/lib/controllers/identity/directoryController.d.ts +75 -0
  129. package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
  130. package/src/lib/controllers/identity/directoryController.js +288 -0
  131. package/src/lib/controllers/identity/directoryController.js.map +1 -0
  132. package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
  133. package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
  134. package/src/lib/controllers/identity/identityProofController.js +454 -0
  135. package/src/lib/controllers/identity/identityProofController.js.map +1 -0
  136. package/src/lib/controllers/identity/index.d.ts +4 -0
  137. package/src/lib/controllers/identity/index.d.ts.map +1 -0
  138. package/src/lib/controllers/identity/index.js +7 -0
  139. package/src/lib/controllers/identity/index.js.map +1 -0
  140. package/src/lib/controllers/index.d.ts +2 -0
  141. package/src/lib/controllers/index.d.ts.map +1 -1
  142. package/src/lib/controllers/index.js +2 -0
  143. package/src/lib/controllers/index.js.map +1 -1
  144. package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
  145. package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
  146. package/src/lib/encryption/encryptedMetadataService.js +224 -0
  147. package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
  148. package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
  149. package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
  150. package/src/lib/encryption/encryptionAwareReplication.js +116 -0
  151. package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
  152. package/src/lib/encryption/errors.d.ts +49 -0
  153. package/src/lib/encryption/errors.d.ts.map +1 -0
  154. package/src/lib/encryption/errors.js +80 -0
  155. package/src/lib/encryption/errors.js.map +1 -0
  156. package/src/lib/encryption/index.d.ts +6 -0
  157. package/src/lib/encryption/index.d.ts.map +1 -0
  158. package/src/lib/encryption/index.js +9 -0
  159. package/src/lib/encryption/index.js.map +1 -0
  160. package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
  161. package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
  162. package/src/lib/encryption/poolEncryptionService.js +252 -0
  163. package/src/lib/encryption/poolEncryptionService.js.map +1 -0
  164. package/src/lib/encryption/poolKeyManager.d.ts +82 -0
  165. package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
  166. package/src/lib/encryption/poolKeyManager.js +156 -0
  167. package/src/lib/encryption/poolKeyManager.js.map +1 -0
  168. package/src/lib/environment.d.ts +3 -0
  169. package/src/lib/environment.d.ts.map +1 -1
  170. package/src/lib/environment.js +5 -0
  171. package/src/lib/environment.js.map +1 -1
  172. package/src/lib/interfaces/environment.d.ts +7 -1
  173. package/src/lib/interfaces/environment.d.ts.map +1 -1
  174. package/src/lib/interfaces/index.d.ts +0 -1
  175. package/src/lib/interfaces/index.d.ts.map +1 -1
  176. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
  177. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
  178. package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
  179. package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
  180. package/src/lib/interfaces/requests/index.d.ts +1 -0
  181. package/src/lib/interfaces/requests/index.d.ts.map +1 -1
  182. package/src/lib/interfaces/websocketMessages.d.ts +30 -1
  183. package/src/lib/interfaces/websocketMessages.d.ts.map +1 -1
  184. package/src/lib/routers/api.d.ts +54 -1
  185. package/src/lib/routers/api.d.ts.map +1 -1
  186. package/src/lib/routers/api.js +77 -0
  187. package/src/lib/routers/api.js.map +1 -1
  188. package/src/lib/services/blockStore.d.ts +5 -2
  189. package/src/lib/services/blockStore.d.ts.map +1 -1
  190. package/src/lib/services/blockStore.js +4 -0
  191. package/src/lib/services/blockStore.js.map +1 -1
  192. package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
  193. package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
  194. package/src/lib/services/brightpass/auditLogger.js +184 -0
  195. package/src/lib/services/brightpass/auditLogger.js.map +1 -0
  196. package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
  197. package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
  198. package/src/lib/services/brightpass/vaultEncryption.js +144 -0
  199. package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
  200. package/src/lib/services/brightpass.d.ts +294 -0
  201. package/src/lib/services/brightpass.d.ts.map +1 -0
  202. package/src/lib/services/brightpass.js +1260 -0
  203. package/src/lib/services/brightpass.js.map +1 -0
  204. package/src/lib/services/eventNotificationSystem.d.ts +69 -3
  205. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  206. package/src/lib/services/eventNotificationSystem.js +200 -0
  207. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  208. package/src/lib/services/expirationScheduler.d.ts +90 -0
  209. package/src/lib/services/expirationScheduler.d.ts.map +1 -0
  210. package/src/lib/services/expirationScheduler.js +131 -0
  211. package/src/lib/services/expirationScheduler.js.map +1 -0
  212. package/src/lib/services/fecUsageExample.d.ts +2 -2
  213. package/src/lib/services/index.d.ts +3 -0
  214. package/src/lib/services/index.d.ts.map +1 -1
  215. package/src/lib/services/index.js +3 -0
  216. package/src/lib/services/index.js.map +1 -1
  217. package/src/lib/services/messagePassingService.d.ts +95 -5
  218. package/src/lib/services/messagePassingService.d.ts.map +1 -1
  219. package/src/lib/services/messagePassingService.js +187 -28
  220. package/src/lib/services/messagePassingService.js.map +1 -1
  221. package/src/lib/services/paginationService.d.ts +18 -0
  222. package/src/lib/services/paginationService.d.ts.map +1 -0
  223. package/src/lib/services/paginationService.js +32 -0
  224. package/src/lib/services/paginationService.js.map +1 -0
  225. package/src/lib/services/presenceService.d.ts +76 -0
  226. package/src/lib/services/presenceService.d.ts.map +1 -0
  227. package/src/lib/services/presenceService.js +143 -0
  228. package/src/lib/services/presenceService.js.map +1 -0
  229. package/src/lib/services/webSocketMessageServer.d.ts +18 -23
  230. package/src/lib/services/webSocketMessageServer.d.ts.map +1 -1
  231. package/src/lib/services/webSocketMessageServer.js +30 -46
  232. package/src/lib/services/webSocketMessageServer.js.map +1 -1
  233. package/src/lib/services/webSocketPeerProvider.d.ts +49 -0
  234. package/src/lib/services/webSocketPeerProvider.d.ts.map +1 -0
  235. package/src/lib/services/webSocketPeerProvider.js +133 -0
  236. package/src/lib/services/webSocketPeerProvider.js.map +1 -0
  237. package/src/lib/services/websocketHandler.d.ts +11 -8
  238. package/src/lib/services/websocketHandler.d.ts.map +1 -1
  239. package/src/lib/services/websocketHandler.js +33 -40
  240. package/src/lib/services/websocketHandler.js.map +1 -1
  241. package/src/lib/services/wireConversationPromotion.d.ts +23 -0
  242. package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
  243. package/src/lib/services/wireConversationPromotion.js +26 -0
  244. package/src/lib/services/wireConversationPromotion.js.map +1 -0
  245. package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
  246. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  247. package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
  248. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  249. package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
  250. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  251. package/src/lib/stores/diskBlockAsyncStore.js +297 -10
  252. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  253. package/src/lib/stores/diskMessageMetadataStore.d.ts +2 -2
  254. package/src/lib/stores/diskMessageMetadataStore.d.ts.map +1 -1
  255. package/src/lib/stores/diskMessageMetadataStore.js +1 -1
  256. package/src/lib/stores/diskMessageMetadataStore.js.map +1 -1
  257. package/src/lib/utils/communicationValidation.d.ts +44 -0
  258. package/src/lib/utils/communicationValidation.d.ts.map +1 -0
  259. package/src/lib/utils/communicationValidation.js +291 -0
  260. package/src/lib/utils/communicationValidation.js.map +1 -0
  261. package/src/lib/utils/emailValidation.d.ts +19 -0
  262. package/src/lib/utils/emailValidation.d.ts.map +1 -0
  263. package/src/lib/utils/emailValidation.js +232 -0
  264. package/src/lib/utils/emailValidation.js.map +1 -0
  265. package/src/lib/interfaces/blockStore.d.ts +0 -7
  266. package/src/lib/interfaces/blockStore.d.ts.map +0 -1
  267. package/src/lib/interfaces/blockStore.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * ExpirationScheduler — Background job for cleaning up expired messages.
4
+ *
5
+ * Periodically scans messages for time-based and read-count-based
6
+ * expiration, explodes expired messages, and emits events for
7
+ * downstream consumers (e.g., WebSocket notifications).
8
+ *
9
+ * This is a Node.js-specific service that lives in brightchain-api-lib.
10
+ *
11
+ * Requirements: 8.4, 8.6, 8.9
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ExpirationScheduler = exports.ExpirationSchedulerEvent = void 0;
15
+ const explodingMessageService_1 = require("@brightchain/brightchain-lib/lib/services/communication/explodingMessageService");
16
+ const events_1 = require("events");
17
+ // ─── Events ─────────────────────────────────────────────────────────────────
18
+ var ExpirationSchedulerEvent;
19
+ (function (ExpirationSchedulerEvent) {
20
+ /** Emitted when a message is exploded by the scheduler */
21
+ ExpirationSchedulerEvent["MESSAGE_EXPLODED"] = "scheduler:message_exploded";
22
+ /** Emitted when a batch of expired messages is found */
23
+ ExpirationSchedulerEvent["BATCH_EXPIRED"] = "scheduler:batch_expired";
24
+ /** Emitted when the scheduler encounters an error */
25
+ ExpirationSchedulerEvent["ERROR"] = "scheduler:error";
26
+ /** Emitted when the scheduler starts */
27
+ ExpirationSchedulerEvent["STARTED"] = "scheduler:started";
28
+ /** Emitted when the scheduler stops */
29
+ ExpirationSchedulerEvent["STOPPED"] = "scheduler:stopped";
30
+ })(ExpirationSchedulerEvent || (exports.ExpirationSchedulerEvent = ExpirationSchedulerEvent = {}));
31
+ // ─── Scheduler ──────────────────────────────────────────────────────────────
32
+ /**
33
+ * Background scheduler that periodically checks for and cleans up
34
+ * expired exploding messages.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const scheduler = new ExpirationScheduler(
39
+ * () => messageStore.getAllExplodingMessages(),
40
+ * { intervalMs: 5000 },
41
+ * );
42
+ *
43
+ * scheduler.on(ExpirationSchedulerEvent.MESSAGE_EXPLODED, (event) => {
44
+ * console.log(`Message ${event.messageId} exploded`);
45
+ * });
46
+ *
47
+ * scheduler.start();
48
+ * // ... later
49
+ * scheduler.stop();
50
+ * ```
51
+ */
52
+ class ExpirationScheduler extends events_1.EventEmitter {
53
+ constructor(messageProvider, config = {}) {
54
+ super();
55
+ this.timer = null;
56
+ this.running = false;
57
+ this.messageProvider = messageProvider;
58
+ this.intervalMs = config.intervalMs ?? 10000;
59
+ this.autoExplode = config.autoExplode ?? true;
60
+ }
61
+ /**
62
+ * Start the scheduler. Begins periodic cleanup runs.
63
+ *
64
+ * @throws {Error} If the scheduler is already running
65
+ */
66
+ start() {
67
+ if (this.running) {
68
+ throw new Error('ExpirationScheduler is already running');
69
+ }
70
+ this.running = true;
71
+ this.timer = setInterval(() => {
72
+ void this.tick();
73
+ }, this.intervalMs);
74
+ this.emit(ExpirationSchedulerEvent.STARTED);
75
+ }
76
+ /**
77
+ * Stop the scheduler. Cancels the periodic cleanup timer.
78
+ */
79
+ stop() {
80
+ if (this.timer) {
81
+ clearInterval(this.timer);
82
+ this.timer = null;
83
+ }
84
+ this.running = false;
85
+ this.emit(ExpirationSchedulerEvent.STOPPED);
86
+ }
87
+ /**
88
+ * Whether the scheduler is currently running.
89
+ */
90
+ get isRunning() {
91
+ return this.running;
92
+ }
93
+ /**
94
+ * Run a single cleanup tick manually.
95
+ * Useful for testing or on-demand cleanup.
96
+ *
97
+ * @returns The events generated during this tick
98
+ */
99
+ async tick() {
100
+ try {
101
+ const messages = await this.messageProvider();
102
+ const { expired, events } = explodingMessageService_1.ExplodingMessageService.deleteExpired(messages);
103
+ if (expired.length === 0) {
104
+ return [];
105
+ }
106
+ // Explode each expired message
107
+ const explodedEvents = [];
108
+ if (this.autoExplode) {
109
+ for (const message of expired) {
110
+ if (!message.exploded) {
111
+ const event = explodingMessageService_1.ExplodingMessageService.explode(message);
112
+ explodedEvents.push(event);
113
+ this.emit(ExpirationSchedulerEvent.MESSAGE_EXPLODED, event);
114
+ }
115
+ }
116
+ }
117
+ // Emit batch event
118
+ this.emit(ExpirationSchedulerEvent.BATCH_EXPIRED, {
119
+ count: expired.length,
120
+ events: explodedEvents.length > 0 ? explodedEvents : events,
121
+ });
122
+ return explodedEvents.length > 0 ? explodedEvents : events;
123
+ }
124
+ catch (error) {
125
+ this.emit(ExpirationSchedulerEvent.ERROR, error);
126
+ return [];
127
+ }
128
+ }
129
+ }
130
+ exports.ExpirationScheduler = ExpirationScheduler;
131
+ //# sourceMappingURL=expirationScheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expirationScheduler.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/expirationScheduler.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ export declare class FecUsageExample {
15
15
  /**
16
16
  * Example: Recover a corrupted file using parity data
17
17
  */
18
- recoverCorruptedFile(parityData: ParityData[], originalSize: number): Promise<Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike>>;
18
+ recoverCorruptedFile(parityData: ParityData[], originalSize: number): Promise<Uint8Array<ArrayBufferLike>>;
19
19
  /**
20
20
  * Example: Verify file integrity using parity data
21
21
  */
@@ -25,7 +25,7 @@ export declare class FecUsageExample {
25
25
  */
26
26
  demonstrateWorkflow(): Promise<{
27
27
  originalFile: Buffer<ArrayBuffer>;
28
- recoveredFile: Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike>;
28
+ recoveredFile: Uint8Array<ArrayBufferLike>;
29
29
  parityData: ParityData[];
30
30
  recoverySuccessful: boolean;
31
31
  }>;
@@ -12,10 +12,13 @@ export * from './fecUsageExample';
12
12
  export * from './messageEventsWebSocketHandler';
13
13
  export * from './messagePassingService';
14
14
  export * from './nativeRsFecService';
15
+ export * from './presenceService';
15
16
  export * from './quorum';
16
17
  export * from './requestUser';
17
18
  export * from './role';
18
19
  export * from './secureKeyStorage';
19
20
  export * from './websocketHandler';
20
21
  export * from './webSocketMessageServer';
22
+ export * from './webSocketPeerProvider';
23
+ export * from './wireConversationPromotion';
21
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
@@ -17,10 +17,13 @@ tslib_1.__exportStar(require("./fecUsageExample"), exports);
17
17
  tslib_1.__exportStar(require("./messageEventsWebSocketHandler"), exports);
18
18
  tslib_1.__exportStar(require("./messagePassingService"), exports);
19
19
  tslib_1.__exportStar(require("./nativeRsFecService"), exports);
20
+ tslib_1.__exportStar(require("./presenceService"), exports);
20
21
  tslib_1.__exportStar(require("./quorum"), exports);
21
22
  tslib_1.__exportStar(require("./requestUser"), exports);
22
23
  tslib_1.__exportStar(require("./role"), exports);
23
24
  tslib_1.__exportStar(require("./secureKeyStorage"), exports);
24
25
  tslib_1.__exportStar(require("./websocketHandler"), exports);
25
26
  tslib_1.__exportStar(require("./webSocketMessageServer"), exports);
27
+ tslib_1.__exportStar(require("./webSocketPeerProvider"), exports);
28
+ tslib_1.__exportStar(require("./wireConversationPromotion"), exports);
26
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":";;;;AAAA,iDAAuB;AACvB,iDAAuB;AACvB,mDAAyB;AACzB,gEAAsC;AACtC,uDAA6B;AAC7B,8DAAoC;AACpC,kDAAwB;AACxB,oEAA0C;AAC1C,6BAAuC;AAA9B,qGAAA,cAAc,OAAA;AACvB,8DAAoC;AACpC,4DAAkC;AAClC,0EAAgD;AAChD,kEAAwC;AACxC,+DAAqC;AACrC,mDAAyB;AACzB,wDAA8B;AAC9B,iDAAuB;AACvB,6DAAmC;AACnC,6DAAmC;AACnC,mEAAyC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":";;;;AAAA,iDAAuB;AACvB,iDAAuB;AACvB,mDAAyB;AACzB,gEAAsC;AACtC,uDAA6B;AAC7B,8DAAoC;AACpC,kDAAwB;AACxB,oEAA0C;AAC1C,6BAAuC;AAA9B,qGAAA,cAAc,OAAA;AACvB,8DAAoC;AACpC,4DAAkC;AAClC,0EAAgD;AAChD,kEAAwC;AACxC,+DAAqC;AACrC,4DAAkC;AAClC,mDAAyB;AACzB,wDAA8B;AAC9B,iDAAuB;AACvB,6DAAmC;AACnC,6DAAmC;AACnC,mEAAyC;AACzC,kEAAwC;AACxC,sEAA4C"}
@@ -1,17 +1,92 @@
1
- import { IMessageCBLOptions as ICreateMessageOptions, IMessageMetadata, IMessageMetadataStore, MessageCBLService } from '@brightchain/brightchain-lib';
1
+ import { IMessageCBLOptions as ICreateMessageOptions, IGossipService, IMessageMetadata, IMessageMetadataStore, MessageCBLService, type IDeliveryReceipt, type IEmailContent, type IEmailInput, type IEmailMetadata, type IEmailMetadataStore, type IEmailServiceConfig, type IInboxQuery, type IInboxResult, type IMailbox, type IReplyInput, type ISendEmailResult } from '@brightchain/brightchain-lib';
2
2
  import { EventNotificationSystem } from './eventNotificationSystem';
3
- import { WebSocketMessageServer } from './webSocketMessageServer';
4
3
  /**
5
- * High-level message passing service coordinating storage, routing, and events
4
+ * High-level message passing service coordinating storage, routing, and events.
5
+ *
6
+ * Uses IGossipService for message delivery instead of WebSocketMessageServer.
7
+ * Messages are announced via gossip protocol and delivery acknowledgments
8
+ * are received through gossip ack events.
9
+ *
10
+ * @see Requirements 7.1, 7.2, 7.3, 7.4, 7.5
6
11
  */
7
12
  export declare class MessagePassingService {
8
13
  private messageCBL;
9
14
  private metadataStore;
10
15
  private eventSystem;
11
- private wsServer;
12
- constructor(messageCBL: MessageCBLService, metadataStore: IMessageMetadataStore, eventSystem: EventNotificationSystem, wsServer: WebSocketMessageServer);
16
+ private gossipService;
17
+ private emailService?;
18
+ constructor(messageCBL: MessageCBLService, metadataStore: IMessageMetadataStore, eventSystem: EventNotificationSystem, gossipService: IGossipService);
19
+ /**
20
+ * Wire up the EmailMessageService for email-specific operations.
21
+ *
22
+ * Call this after construction to enable email methods (sendEmail,
23
+ * getEmail, queryInbox, etc.). Without this, email methods will throw.
24
+ */
25
+ configureEmail(emailMetadataStore: IEmailMetadataStore, config?: Partial<IEmailServiceConfig>): void;
26
+ /**
27
+ * Returns the underlying EmailMessageService.
28
+ * @throws Error if email has not been configured via configureEmail()
29
+ */
30
+ private getEmailService;
31
+ /**
32
+ * Send an email message via the BrightChain email protocol.
33
+ *
34
+ * @see Requirements 15.1, 15.4
35
+ */
36
+ sendEmail(email: IEmailInput): Promise<ISendEmailResult>;
37
+ /**
38
+ * Retrieve email metadata by message ID.
39
+ */
40
+ getEmail(messageId: string): Promise<IEmailMetadata | null>;
41
+ /**
42
+ * Retrieve full email content including MIME parts and attachments.
43
+ */
44
+ getEmailContent(messageId: string): Promise<IEmailContent>;
45
+ /**
46
+ * Delete an email by message ID.
47
+ */
48
+ deleteEmail(messageId: string): Promise<void>;
49
+ /**
50
+ * Query a user's inbox with filtering, sorting, and pagination.
51
+ *
52
+ * @see Requirements 13.1, 13.2, 13.3, 13.6, 13.7
53
+ */
54
+ queryInbox(userId: string, query: IInboxQuery): Promise<IInboxResult>;
55
+ /**
56
+ * Mark an email as read for a specific user.
57
+ */
58
+ markEmailAsRead(messageId: string, userId: string): Promise<void>;
59
+ /**
60
+ * Get unread email count for a user.
61
+ */
62
+ getUnreadEmailCount(userId: string): Promise<number>;
63
+ /**
64
+ * Get all emails in a thread.
65
+ */
66
+ getEmailThread(messageId: string): Promise<IEmailMetadata[]>;
67
+ /**
68
+ * Create a reply to an existing email.
69
+ *
70
+ * @see Requirements 10.1, 10.2, 10.3
71
+ */
72
+ createEmailReply(originalId: string, replyContent: IReplyInput): Promise<ISendEmailResult>;
73
+ /**
74
+ * Forward an email to new recipients.
75
+ *
76
+ * @see Requirements 17.1, 17.2, 17.3
77
+ */
78
+ forwardEmail(originalId: string, forwardTo: IMailbox[]): Promise<ISendEmailResult>;
79
+ /**
80
+ * Get delivery status for all recipients of an email.
81
+ */
82
+ getEmailDeliveryStatus(messageId: string): Promise<Map<string, IDeliveryReceipt>>;
13
83
  /**
14
84
  * Send a message
85
+ *
86
+ * Stores the message via MessageCBLService, emits MESSAGE_STORED event,
87
+ * then announces the message via gossip protocol for delivery.
88
+ *
89
+ * @see Requirements 7.1, 7.3, 7.5
15
90
  */
16
91
  sendMessage(content: Buffer, senderId: string, options: ICreateMessageOptions): Promise<{
17
92
  messageId: string;
@@ -19,16 +94,31 @@ export declare class MessagePassingService {
19
94
  }>;
20
95
  /**
21
96
  * Get message content
97
+ *
98
+ * @see Requirements 7.5
22
99
  */
23
100
  getMessage(messageId: string): Promise<Buffer | null>;
24
101
  /**
25
102
  * Query messages
103
+ *
104
+ * @see Requirements 7.5
26
105
  */
27
106
  queryMessages(query: Record<string, unknown>): Promise<IMessageMetadata[]>;
28
107
  /**
29
108
  * Delete message
109
+ *
110
+ * @see Requirements 7.5
30
111
  */
31
112
  deleteMessage(messageId: string): Promise<void>;
113
+ /**
114
+ * Set up handlers for gossip delivery events.
115
+ *
116
+ * Listens for:
117
+ * - Message delivery announcements (incoming messages)
118
+ * - Delivery acknowledgments (confirmation of sent messages)
119
+ *
120
+ * @see Requirements 7.4
121
+ */
32
122
  private setupHandlers;
33
123
  }
34
124
  //# sourceMappingURL=messagePassingService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messagePassingService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messagePassingService.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,IAAI,qBAAqB,EAC3C,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EAElB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,uBAAuB,EAExB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;GAEG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;gBAHR,UAAU,EAAE,iBAAiB,EAC7B,aAAa,EAAE,qBAAqB,EACpC,WAAW,EAAE,uBAAuB,EACpC,QAAQ,EAAE,sBAAsB;IAK1C;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IA8BpD;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3D;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI9B;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD,OAAO,CAAC,aAAa;CAoCtB"}
1
+ {"version":3,"file":"messagePassingService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messagePassingService.ts"],"names":[],"mappings":"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"}
@@ -4,40 +4,155 @@ exports.MessagePassingService = void 0;
4
4
  const brightchain_lib_1 = require("@brightchain/brightchain-lib");
5
5
  const eventNotificationSystem_1 = require("./eventNotificationSystem");
6
6
  /**
7
- * High-level message passing service coordinating storage, routing, and events
7
+ * High-level message passing service coordinating storage, routing, and events.
8
+ *
9
+ * Uses IGossipService for message delivery instead of WebSocketMessageServer.
10
+ * Messages are announced via gossip protocol and delivery acknowledgments
11
+ * are received through gossip ack events.
12
+ *
13
+ * @see Requirements 7.1, 7.2, 7.3, 7.4, 7.5
8
14
  */
9
15
  class MessagePassingService {
10
- constructor(messageCBL, metadataStore, eventSystem, wsServer) {
16
+ constructor(messageCBL, metadataStore, eventSystem, gossipService) {
11
17
  this.messageCBL = messageCBL;
12
18
  this.metadataStore = metadataStore;
13
19
  this.eventSystem = eventSystem;
14
- this.wsServer = wsServer;
20
+ this.gossipService = gossipService;
15
21
  this.setupHandlers();
16
22
  }
23
+ /**
24
+ * Wire up the EmailMessageService for email-specific operations.
25
+ *
26
+ * Call this after construction to enable email methods (sendEmail,
27
+ * getEmail, queryInbox, etc.). Without this, email methods will throw.
28
+ */
29
+ configureEmail(emailMetadataStore, config) {
30
+ this.emailService = new brightchain_lib_1.EmailMessageService(this.messageCBL, emailMetadataStore, this.gossipService, config);
31
+ }
32
+ /**
33
+ * Returns the underlying EmailMessageService.
34
+ * @throws Error if email has not been configured via configureEmail()
35
+ */
36
+ getEmailService() {
37
+ if (!this.emailService) {
38
+ throw new Error('Email not configured. Call configureEmail() before using email methods.');
39
+ }
40
+ return this.emailService;
41
+ }
42
+ // ─── Email Operations ─────────────────────────────────────────────
43
+ /**
44
+ * Send an email message via the BrightChain email protocol.
45
+ *
46
+ * @see Requirements 15.1, 15.4
47
+ */
48
+ async sendEmail(email) {
49
+ return this.getEmailService().sendEmail(email);
50
+ }
51
+ /**
52
+ * Retrieve email metadata by message ID.
53
+ */
54
+ async getEmail(messageId) {
55
+ return this.getEmailService().getEmail(messageId);
56
+ }
57
+ /**
58
+ * Retrieve full email content including MIME parts and attachments.
59
+ */
60
+ async getEmailContent(messageId) {
61
+ return this.getEmailService().getEmailContent(messageId);
62
+ }
63
+ /**
64
+ * Delete an email by message ID.
65
+ */
66
+ async deleteEmail(messageId) {
67
+ return this.getEmailService().deleteEmail(messageId);
68
+ }
69
+ /**
70
+ * Query a user's inbox with filtering, sorting, and pagination.
71
+ *
72
+ * @see Requirements 13.1, 13.2, 13.3, 13.6, 13.7
73
+ */
74
+ async queryInbox(userId, query) {
75
+ return this.getEmailService().queryInbox(userId, query);
76
+ }
77
+ /**
78
+ * Mark an email as read for a specific user.
79
+ */
80
+ async markEmailAsRead(messageId, userId) {
81
+ return this.getEmailService().markAsRead(messageId, userId);
82
+ }
83
+ /**
84
+ * Get unread email count for a user.
85
+ */
86
+ async getUnreadEmailCount(userId) {
87
+ return this.getEmailService().getUnreadCount(userId);
88
+ }
89
+ /**
90
+ * Get all emails in a thread.
91
+ */
92
+ async getEmailThread(messageId) {
93
+ return this.getEmailService().getThread(messageId);
94
+ }
95
+ /**
96
+ * Create a reply to an existing email.
97
+ *
98
+ * @see Requirements 10.1, 10.2, 10.3
99
+ */
100
+ async createEmailReply(originalId, replyContent) {
101
+ return this.getEmailService().createReply(originalId, replyContent);
102
+ }
103
+ /**
104
+ * Forward an email to new recipients.
105
+ *
106
+ * @see Requirements 17.1, 17.2, 17.3
107
+ */
108
+ async forwardEmail(originalId, forwardTo) {
109
+ return this.getEmailService().forwardEmail(originalId, forwardTo);
110
+ }
111
+ /**
112
+ * Get delivery status for all recipients of an email.
113
+ */
114
+ async getEmailDeliveryStatus(messageId) {
115
+ return this.getEmailService().getDeliveryStatus(messageId);
116
+ }
17
117
  /**
18
118
  * Send a message
119
+ *
120
+ * Stores the message via MessageCBLService, emits MESSAGE_STORED event,
121
+ * then announces the message via gossip protocol for delivery.
122
+ *
123
+ * @see Requirements 7.1, 7.3, 7.5
19
124
  */
20
125
  async sendMessage(content, senderId, options) {
21
126
  const { messageId, magnetUrl } = await this.messageCBL.createMessage(new Uint8Array(content), senderId, options);
22
127
  const metadata = await this.messageCBL.getMessageMetadata(messageId);
23
128
  if (metadata) {
129
+ // Emit MESSAGE_STORED event after successful storage (Requirement 7.3)
24
130
  this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_STORED, metadata);
25
- // Route to recipients
26
- if (options.recipients && options.recipients.length > 0) {
27
- for (const recipientId of options.recipients) {
28
- await this.wsServer.sendToNode(recipientId, messageId);
29
- await this.metadataStore.updateDeliveryStatus(messageId, recipientId, brightchain_lib_1.MessageDeliveryStatus.IN_TRANSIT);
30
- }
31
- }
32
- else {
33
- // Broadcast
34
- this.wsServer.broadcast(messageId);
131
+ // Build message delivery metadata for gossip announcement
132
+ const recipientIds = options.recipients && options.recipients.length > 0
133
+ ? [...options.recipients]
134
+ : [];
135
+ const deliveryMetadata = {
136
+ messageId,
137
+ recipientIds,
138
+ priority: 'normal',
139
+ blockIds: metadata.cblBlockIds ?? [],
140
+ cblBlockId: metadata.blockId,
141
+ ackRequired: true,
142
+ };
143
+ // Announce message via gossip protocol (Requirement 7.1)
144
+ await this.gossipService.announceMessage(metadata.cblBlockIds ?? [], deliveryMetadata);
145
+ // Update delivery status for each recipient to Announced
146
+ for (const recipientId of recipientIds) {
147
+ await this.metadataStore.updateDeliveryStatus(messageId, recipientId, brightchain_lib_1.DeliveryStatus.Announced);
35
148
  }
36
149
  }
37
150
  return { messageId, magnetUrl };
38
151
  }
39
152
  /**
40
153
  * Get message content
154
+ *
155
+ * @see Requirements 7.5
41
156
  */
42
157
  async getMessage(messageId) {
43
158
  const content = await this.messageCBL.getMessageContent(messageId);
@@ -45,12 +160,16 @@ class MessagePassingService {
45
160
  }
46
161
  /**
47
162
  * Query messages
163
+ *
164
+ * @see Requirements 7.5
48
165
  */
49
166
  async queryMessages(query) {
50
167
  return this.metadataStore.queryMessages(query);
51
168
  }
52
169
  /**
53
170
  * Delete message
171
+ *
172
+ * @see Requirements 7.5
54
173
  */
55
174
  async deleteMessage(messageId) {
56
175
  const metadata = await this.messageCBL.getMessageMetadata(messageId);
@@ -60,25 +179,65 @@ class MessagePassingService {
60
179
  }
61
180
  }
62
181
  }
182
+ /**
183
+ * Set up handlers for gossip delivery events.
184
+ *
185
+ * Listens for:
186
+ * - Message delivery announcements (incoming messages)
187
+ * - Delivery acknowledgments (confirmation of sent messages)
188
+ *
189
+ * @see Requirements 7.4
190
+ */
63
191
  setupHandlers() {
64
- this.wsServer.onMessage(async (nodeId, messageId) => {
65
- const metadata = await this.messageCBL.getMessageMetadata(messageId);
66
- if (metadata) {
67
- this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_RECEIVED, metadata);
68
- await this.wsServer.sendToNode(nodeId, messageId);
192
+ // Handle incoming message delivery announcements
193
+ this.gossipService.onMessageDelivery(async (announcement) => {
194
+ if (announcement.messageDelivery) {
195
+ const metadata = await this.messageCBL.getMessageMetadata(announcement.messageDelivery.messageId);
196
+ if (metadata) {
197
+ this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_RECEIVED, metadata);
198
+ }
69
199
  }
70
200
  });
71
- this.wsServer.onAck(async (nodeId, messageId, status) => {
72
- await this.metadataStore.recordAcknowledgment(messageId, nodeId, new Date());
73
- await this.metadataStore.updateDeliveryStatus(messageId, nodeId, status);
74
- const metadata = await this.messageCBL.getMessageMetadata(messageId);
75
- if (metadata) {
76
- const allDelivered = metadata.recipients?.every((r) => metadata.deliveryStatus?.get(r) === brightchain_lib_1.MessageDeliveryStatus.DELIVERED);
77
- if (allDelivered) {
78
- this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_DELIVERED, metadata);
201
+ // Handle delivery acknowledgments (Requirement 7.4)
202
+ this.gossipService.onDeliveryAck(async (announcement) => {
203
+ if (announcement.deliveryAck) {
204
+ const { messageId, recipientId, status } = announcement.deliveryAck;
205
+ // Map ack status to DeliveryStatus
206
+ const deliveryStatus = status === 'delivered' || status === 'read'
207
+ ? brightchain_lib_1.DeliveryStatus.Delivered
208
+ : brightchain_lib_1.DeliveryStatus.Failed;
209
+ // Record the acknowledgment and update delivery status.
210
+ // The message may be managed by the email subsystem (InMemoryEmailMetadataStore)
211
+ // rather than the generic MemoryMessageMetadataStore, so KeyNotFound is expected
212
+ // for email messages and should be silently ignored.
213
+ try {
214
+ await this.metadataStore.recordAcknowledgment(messageId, recipientId, new Date());
215
+ }
216
+ catch (err) {
217
+ if (!(err instanceof brightchain_lib_1.StoreError) ||
218
+ err.type !== brightchain_lib_1.StoreErrorType.KeyNotFound) {
219
+ throw err;
220
+ }
221
+ }
222
+ try {
223
+ await this.metadataStore.updateDeliveryStatus(messageId, recipientId, deliveryStatus);
224
+ }
225
+ catch (err) {
226
+ if (!(err instanceof brightchain_lib_1.StoreError) ||
227
+ err.type !== brightchain_lib_1.StoreErrorType.KeyNotFound) {
228
+ throw err;
229
+ }
79
230
  }
80
- else if (status === brightchain_lib_1.MessageDeliveryStatus.FAILED) {
81
- this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_FAILED, metadata);
231
+ // Check if all recipients have been delivered and emit appropriate events
232
+ const metadata = await this.messageCBL.getMessageMetadata(messageId);
233
+ if (metadata) {
234
+ const allDelivered = metadata.recipients?.every((r) => metadata.deliveryStatus?.get(r) === brightchain_lib_1.DeliveryStatus.Delivered);
235
+ if (allDelivered) {
236
+ this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_DELIVERED, metadata);
237
+ }
238
+ else if (deliveryStatus === brightchain_lib_1.DeliveryStatus.Failed) {
239
+ this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_FAILED, metadata);
240
+ }
82
241
  }
83
242
  }
84
243
  });
@@ -1 +1 @@
1
- {"version":3,"file":"messagePassingService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messagePassingService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messagePassingService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messagePassingService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface IPaginatedResult<T> {
2
+ items: T[];
3
+ nextCursor?: string;
4
+ hasMore: boolean;
5
+ }
6
+ export interface PaginationCursor {
7
+ timestamp: number;
8
+ id: string;
9
+ }
10
+ export declare class PaginationService {
11
+ static encodeCursor(timestamp: number, id: string): string;
12
+ static decodeCursor(cursor: string): PaginationCursor;
13
+ static paginate<T extends {
14
+ timestamp: number;
15
+ id: string;
16
+ }>(items: T[], limit: number, cursor?: string): IPaginatedResult<T>;
17
+ }
18
+ //# sourceMappingURL=paginationService.d.ts.map