@brightchain/brightchain-api-lib 0.13.0 → 0.14.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 (34) hide show
  1. package/package.json +2 -2
  2. package/src/lib/availability/configValidation.d.ts.map +1 -1
  3. package/src/lib/availability/configValidation.js +20 -0
  4. package/src/lib/availability/configValidation.js.map +1 -1
  5. package/src/lib/availability/gossipService.d.ts +150 -7
  6. package/src/lib/availability/gossipService.d.ts.map +1 -1
  7. package/src/lib/availability/gossipService.js +297 -17
  8. package/src/lib/availability/gossipService.js.map +1 -1
  9. package/src/lib/interfaces/websocketMessages.d.ts +30 -1
  10. package/src/lib/interfaces/websocketMessages.d.ts.map +1 -1
  11. package/src/lib/services/index.d.ts +1 -0
  12. package/src/lib/services/index.d.ts.map +1 -1
  13. package/src/lib/services/index.js +1 -0
  14. package/src/lib/services/index.js.map +1 -1
  15. package/src/lib/services/messagePassingService.d.ts +95 -5
  16. package/src/lib/services/messagePassingService.d.ts.map +1 -1
  17. package/src/lib/services/messagePassingService.js +187 -28
  18. package/src/lib/services/messagePassingService.js.map +1 -1
  19. package/src/lib/services/webSocketMessageServer.d.ts +18 -23
  20. package/src/lib/services/webSocketMessageServer.d.ts.map +1 -1
  21. package/src/lib/services/webSocketMessageServer.js +30 -46
  22. package/src/lib/services/webSocketMessageServer.js.map +1 -1
  23. package/src/lib/services/webSocketPeerProvider.d.ts +49 -0
  24. package/src/lib/services/webSocketPeerProvider.d.ts.map +1 -0
  25. package/src/lib/services/webSocketPeerProvider.js +133 -0
  26. package/src/lib/services/webSocketPeerProvider.js.map +1 -0
  27. package/src/lib/services/websocketHandler.d.ts +11 -8
  28. package/src/lib/services/websocketHandler.d.ts.map +1 -1
  29. package/src/lib/services/websocketHandler.js +33 -40
  30. package/src/lib/services/websocketHandler.js.map +1 -1
  31. package/src/lib/stores/diskMessageMetadataStore.d.ts +2 -2
  32. package/src/lib/stores/diskMessageMetadataStore.d.ts.map +1 -1
  33. package/src/lib/stores/diskMessageMetadataStore.js +1 -1
  34. package/src/lib/stores/diskMessageMetadataStore.js.map +1 -1
@@ -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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"}
@@ -1,43 +1,29 @@
1
+ import { BlockAnnouncement } from '@brightchain/brightchain-lib';
1
2
  import { Server } from 'http';
3
+ import type { EncryptedBatchPayload } from '../availability/gossipService';
2
4
  /**
3
- * WebSocket message handler callback
5
+ * Handler for incoming gossip announcement batches.
6
+ * Called when a peer sends a batch of BlockAnnouncements over WebSocket.
4
7
  */
5
- export type MessageHandler = (nodeId: string, messageId: string) => Promise<void>;
6
- export type AckHandler = (nodeId: string, messageId: string, status: string) => Promise<void>;
8
+ export type GossipBatchHandler = (fromNodeId: string, announcements: BlockAnnouncement[], encrypted?: EncryptedBatchPayload) => void;
7
9
  /**
8
- * Node.js WebSocket server for message passing with ECIES authentication
9
- * Manages WebSocket connections and routes messages between nodes
10
+ * Node.js WebSocket server for gossip transport with ECIES authentication
11
+ * Manages WebSocket connections between nodes.
12
+ * Gossip announcement batches are received and dispatched to registered handlers.
10
13
  */
11
14
  export declare class WebSocketMessageServer {
12
15
  private wss;
13
16
  private connections;
14
17
  private authenticatedNodes;
15
18
  private publicKeys;
16
- private messageHandler?;
17
- private ackHandler?;
18
19
  private eciesService;
19
20
  private requireAuth;
21
+ private gossipBatchHandlers;
20
22
  constructor(server: Server, requireAuth?: boolean);
21
23
  /**
22
24
  * Register public key for a node
23
25
  */
24
26
  registerNodeKey(nodeId: string, publicKey: Buffer): void;
25
- /**
26
- * Register message handler
27
- */
28
- onMessage(handler: MessageHandler): void;
29
- /**
30
- * Register acknowledgment handler
31
- */
32
- onAck(handler: AckHandler): void;
33
- /**
34
- * Send message to specific node
35
- */
36
- sendToNode(nodeId: string, messageId: string): Promise<boolean>;
37
- /**
38
- * Broadcast message to all connected nodes
39
- */
40
- broadcast(messageId: string): void;
41
27
  /**
42
28
  * Get connected node IDs
43
29
  */
@@ -46,6 +32,15 @@ export declare class WebSocketMessageServer {
46
32
  * Close all connections and shutdown server
47
33
  */
48
34
  close(callback?: () => void): void;
35
+ /**
36
+ * Register a handler for incoming gossip announcement batches.
37
+ * The handler is called when a peer sends a 'gossip_batch' message.
38
+ */
39
+ onGossipBatch(handler: GossipBatchHandler): void;
40
+ /**
41
+ * Remove a gossip batch handler.
42
+ */
43
+ offGossipBatch(handler: GossipBatchHandler): void;
49
44
  private setupConnectionHandler;
50
45
  private verifySignature;
51
46
  private extractNodeId;
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketMessageServer.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/webSocketMessageServer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,IAAI,CAAC,CAAC;AACnB,MAAM,MAAM,UAAU,GAAG,CACvB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAU;gBAEjB,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ;IAkB/C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIxC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAIhC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrE;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASlC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAalC,OAAO,CAAC,sBAAsB;YAsEhB,eAAe;IAmB7B,OAAO,CAAC,aAAa;CAKtB"}
1
+ {"version":3,"file":"webSocketMessageServer.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/webSocketMessageServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,iBAAiB,EAAE,EAClC,SAAS,CAAC,EAAE,qBAAqB,KAC9B,IAAI,CAAC;AAEV;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,mBAAmB,CAAsC;gBAErD,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ;IAkB/C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxD;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAclC;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIhD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIjD,OAAO,CAAC,sBAAsB;YAkFhB,eAAe;IAmB7B,OAAO,CAAC,aAAa;CAKtB"}
@@ -4,14 +4,16 @@ exports.WebSocketMessageServer = void 0;
4
4
  const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
5
5
  const ws_1 = require("ws");
6
6
  /**
7
- * Node.js WebSocket server for message passing with ECIES authentication
8
- * Manages WebSocket connections and routes messages between nodes
7
+ * Node.js WebSocket server for gossip transport with ECIES authentication
8
+ * Manages WebSocket connections between nodes.
9
+ * Gossip announcement batches are received and dispatched to registered handlers.
9
10
  */
10
11
  class WebSocketMessageServer {
11
12
  constructor(server, requireAuth = false) {
12
13
  this.connections = new Map();
13
14
  this.authenticatedNodes = new Map(); // ws -> nodeId
14
15
  this.publicKeys = new Map(); // nodeId -> publicKey
16
+ this.gossipBatchHandlers = new Set();
15
17
  this.wss = new ws_1.WebSocketServer({ server });
16
18
  this.requireAuth = requireAuth;
17
19
  // Create Node.js-compatible ECIES config with full algorithm name
@@ -32,45 +34,6 @@ class WebSocketMessageServer {
32
34
  registerNodeKey(nodeId, publicKey) {
33
35
  this.publicKeys.set(nodeId, publicKey);
34
36
  }
35
- /**
36
- * Register message handler
37
- */
38
- onMessage(handler) {
39
- this.messageHandler = handler;
40
- }
41
- /**
42
- * Register acknowledgment handler
43
- */
44
- onAck(handler) {
45
- this.ackHandler = handler;
46
- }
47
- /**
48
- * Send message to specific node
49
- */
50
- async sendToNode(nodeId, messageId) {
51
- const ws = this.connections.get(nodeId);
52
- if (!ws || ws.readyState !== ws_1.WebSocket.OPEN) {
53
- return false;
54
- }
55
- try {
56
- ws.send(JSON.stringify({ type: 'message', messageId }));
57
- return true;
58
- }
59
- catch {
60
- return false;
61
- }
62
- }
63
- /**
64
- * Broadcast message to all connected nodes
65
- */
66
- broadcast(messageId) {
67
- const message = JSON.stringify({ type: 'message', messageId });
68
- for (const ws of this.connections.values()) {
69
- if (ws.readyState === ws_1.WebSocket.OPEN) {
70
- ws.send(message);
71
- }
72
- }
73
- }
74
37
  /**
75
38
  * Get connected node IDs
76
39
  */
@@ -86,6 +49,7 @@ class WebSocketMessageServer {
86
49
  }
87
50
  this.connections.clear();
88
51
  this.authenticatedNodes.clear();
52
+ this.gossipBatchHandlers.clear();
89
53
  if (callback) {
90
54
  this.wss.close(callback);
91
55
  }
@@ -93,6 +57,19 @@ class WebSocketMessageServer {
93
57
  this.wss.close();
94
58
  }
95
59
  }
60
+ /**
61
+ * Register a handler for incoming gossip announcement batches.
62
+ * The handler is called when a peer sends a 'gossip_batch' message.
63
+ */
64
+ onGossipBatch(handler) {
65
+ this.gossipBatchHandlers.add(handler);
66
+ }
67
+ /**
68
+ * Remove a gossip batch handler.
69
+ */
70
+ offGossipBatch(handler) {
71
+ this.gossipBatchHandlers.delete(handler);
72
+ }
96
73
  setupConnectionHandler() {
97
74
  this.wss.on('connection', (ws, req) => {
98
75
  const nodeId = this.extractNodeId(req.url);
@@ -126,11 +103,18 @@ class WebSocketMessageServer {
126
103
  ws.close();
127
104
  return;
128
105
  }
129
- if (message.type === 'message' && this.messageHandler) {
130
- await this.messageHandler(nodeId, message.messageId);
131
- }
132
- else if (message.type === 'ack' && this.ackHandler) {
133
- await this.ackHandler(nodeId, message.messageId, message.status);
106
+ // Handle gossip announcement batches from peers
107
+ if (message.type === 'gossip_batch') {
108
+ const senderNodeId = this.authenticatedNodes.get(ws) ?? nodeId;
109
+ for (const handler of this.gossipBatchHandlers) {
110
+ try {
111
+ handler(senderNodeId, message.announcements ?? [], message.encrypted);
112
+ }
113
+ catch {
114
+ // Ignore handler errors
115
+ }
116
+ }
117
+ return;
134
118
  }
135
119
  }
136
120
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketMessageServer.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/webSocketMessageServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webSocketMessageServer.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/webSocketMessageServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * WebSocket-based IPeerProvider implementation.
3
+ *
4
+ * Bridges the GossipService's IPeerProvider interface to real WebSocket
5
+ * connections between BrightChain nodes. Each peer is represented by an
6
+ * outbound WebSocket client connection to that peer's WebSocketMessageServer.
7
+ *
8
+ * Used for real cross-node gossip transport in both production and
9
+ * integration testing (multiple servers on different ports).
10
+ */
11
+ import { BlockAnnouncement } from '@brightchain/brightchain-lib';
12
+ import { EncryptedBatchPayload, IPeerProvider } from '../availability/gossipService';
13
+ /**
14
+ * IPeerProvider implementation that sends gossip batches over WebSocket.
15
+ *
16
+ * For each peer, maintains an outbound WebSocket connection to that peer's
17
+ * WebSocketMessageServer. Announcement batches are serialized to JSON and
18
+ * sent as 'gossip_batch' messages.
19
+ */
20
+ export declare class WebSocketPeerProvider implements IPeerProvider {
21
+ private readonly localNodeId;
22
+ private peers;
23
+ constructor(localNodeId: string);
24
+ getLocalNodeId(): string;
25
+ getConnectedPeerIds(): string[];
26
+ /**
27
+ * Connect to a peer's WebSocketMessageServer.
28
+ *
29
+ * @param peerId - The peer's node ID
30
+ * @param url - WebSocket URL, e.g. ws://localhost:3001/{localNodeId}
31
+ * @returns Promise that resolves when the connection is open
32
+ */
33
+ connectToPeer(peerId: string, url: string): Promise<void>;
34
+ /**
35
+ * Register a peer's ECIES public key for encrypted gossip.
36
+ */
37
+ registerPeerPublicKey(peerId: string, publicKey: Buffer): void;
38
+ sendAnnouncementBatch(peerId: string, announcements: BlockAnnouncement[], encrypted?: EncryptedBatchPayload): Promise<void>;
39
+ getPeerPublicKey(peerId: string): Promise<Buffer | null>;
40
+ /**
41
+ * Disconnect from all peers and close all WebSocket connections.
42
+ */
43
+ disconnectAll(): Promise<void>;
44
+ /**
45
+ * Disconnect from a specific peer.
46
+ */
47
+ disconnectPeer(peerId: string): void;
48
+ }
49
+ //# sourceMappingURL=webSocketPeerProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webSocketPeerProvider.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/webSocketPeerProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EACL,qBAAqB,EACrB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAcvC;;;;;;GAMG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IAG7C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,OAAO,CAAC,KAAK,CAAqC;gBAErB,WAAW,EAAE,MAAM;IAEhD,cAAc,IAAI,MAAM;IAIxB,mBAAmB,IAAI,MAAM,EAAE;IAU/B;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/D;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOxD,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,iBAAiB,EAAE,EAClC,SAAS,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,IAAI,CAAC;IA4BV,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK9D;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAUrC"}