@dxos/messaging 0.8.4-main.f5c0578 → 0.8.4-main.fcfe5033a5

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 (54) hide show
  1. package/dist/lib/neutral/chunk-ZNKR3G44.mjs +694 -0
  2. package/dist/lib/neutral/chunk-ZNKR3G44.mjs.map +7 -0
  3. package/dist/lib/{browser/chunk-TPBTNKLU.mjs → neutral/index.mjs} +345 -1025
  4. package/dist/lib/neutral/index.mjs.map +7 -0
  5. package/dist/lib/{browser → neutral}/meta.json +1 -1
  6. package/dist/lib/{browser → neutral}/testing/index.mjs +9 -11
  7. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  8. package/dist/types/src/messenger.blueprint-test.d.ts.map +1 -1
  9. package/dist/types/src/messenger.d.ts +2 -1
  10. package/dist/types/src/messenger.d.ts.map +1 -1
  11. package/dist/types/src/signal-client/signal-client.d.ts +5 -5
  12. package/dist/types/src/signal-client/signal-client.d.ts.map +1 -1
  13. package/dist/types/src/signal-client/signal-local-state.d.ts.map +1 -1
  14. package/dist/types/src/signal-client/signal-rpc-client.d.ts +2 -2
  15. package/dist/types/src/signal-client/signal-rpc-client.d.ts.map +1 -1
  16. package/dist/types/src/signal-manager/edge-signal-manager.d.ts +5 -5
  17. package/dist/types/src/signal-manager/edge-signal-manager.d.ts.map +1 -1
  18. package/dist/types/src/signal-manager/memory-signal-manager.d.ts +5 -4
  19. package/dist/types/src/signal-manager/memory-signal-manager.d.ts.map +1 -1
  20. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts +5 -5
  21. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts.map +1 -1
  22. package/dist/types/src/signal-methods.d.ts +5 -5
  23. package/dist/types/src/signal-methods.d.ts.map +1 -1
  24. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  25. package/dist/types/src/testing/test-peer.d.ts.map +1 -1
  26. package/dist/types/src/testing/utils.d.ts.map +1 -1
  27. package/dist/types/tsconfig.tsbuildinfo +1 -1
  28. package/package.json +24 -22
  29. package/src/messenger.blueprint-test.ts +13 -12
  30. package/src/messenger.node.test.ts +7 -38
  31. package/src/messenger.ts +34 -28
  32. package/src/signal-client/signal-client.node.test.ts +9 -9
  33. package/src/signal-client/signal-client.ts +4 -5
  34. package/src/signal-client/signal-local-state.ts +0 -1
  35. package/src/signal-client/signal-rpc-client.ts +2 -2
  36. package/src/signal-manager/edge-signal-manager.ts +27 -15
  37. package/src/signal-manager/memory-signal-manager.ts +17 -15
  38. package/src/signal-manager/websocket-signal-manager.node.test.ts +13 -13
  39. package/src/signal-manager/websocket-signal-manager.ts +8 -9
  40. package/src/signal-methods.ts +5 -5
  41. package/src/testing/test-builder.ts +4 -3
  42. package/src/testing/test-peer.ts +0 -1
  43. package/src/testing/utils.ts +0 -1
  44. package/dist/lib/browser/chunk-TPBTNKLU.mjs.map +0 -7
  45. package/dist/lib/browser/index.mjs +0 -22
  46. package/dist/lib/browser/index.mjs.map +0 -7
  47. package/dist/lib/browser/testing/index.mjs.map +0 -7
  48. package/dist/lib/node-esm/chunk-SHJNQUOF.mjs +0 -2383
  49. package/dist/lib/node-esm/chunk-SHJNQUOF.mjs.map +0 -7
  50. package/dist/lib/node-esm/index.mjs +0 -22
  51. package/dist/lib/node-esm/index.mjs.map +0 -7
  52. package/dist/lib/node-esm/meta.json +0 -1
  53. package/dist/lib/node-esm/testing/index.mjs +0 -151
  54. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
@@ -1,428 +1,22 @@
1
1
  import "@dxos/node-std/globals";
2
-
3
- // src/messenger.ts
4
- import { TimeoutError, scheduleExponentialBackoffTaskInterval, scheduleTask, scheduleTaskInterval } from "@dxos/async";
5
- import { Context } from "@dxos/context";
6
- import { invariant } from "@dxos/invariant";
7
- import { PublicKey } from "@dxos/keys";
8
- import { log } from "@dxos/log";
9
- import { TimeoutError as ProtocolTimeoutError, trace as trace2 } from "@dxos/protocols";
10
- import { schema } from "@dxos/protocols/proto";
11
- import { ComplexMap, ComplexSet } from "@dxos/util";
12
-
13
- // src/messenger-monitor.ts
14
- import { trace } from "@dxos/tracing";
15
- var MessengerMonitor = class {
16
- recordMessageAckFailed() {
17
- trace.metrics.increment("dxos.mesh.signal.messenger.failed-ack", 1);
18
- }
19
- recordReliableMessage(params) {
20
- trace.metrics.increment("dxos.mesh.signal.messenger.reliable-send", 1, {
21
- tags: {
22
- success: params.sent,
23
- attempts: params.sendAttempts
24
- }
25
- });
26
- }
27
- };
28
-
29
- // src/timeouts.ts
30
- var MESSAGE_TIMEOUT = 1e4;
31
-
32
- // src/messenger.ts
33
- var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/messaging/src/messenger.ts";
34
- var ReliablePayload = schema.getCodecForType("dxos.mesh.messaging.ReliablePayload");
35
- var Acknowledgement = schema.getCodecForType("dxos.mesh.messaging.Acknowledgement");
36
- var RECEIVED_MESSAGES_GC_INTERVAL = 12e4;
37
- var Messenger = class {
38
- _monitor = new MessengerMonitor();
39
- _signalManager;
40
- // { peerId, payloadType } => listeners set
41
- _listeners = new ComplexMap(({ peerId, payloadType }) => peerId + payloadType);
42
- // peerId => listeners set
43
- _defaultListeners = /* @__PURE__ */ new Map();
44
- _onAckCallbacks = new ComplexMap(PublicKey.hash);
45
- _receivedMessages = new ComplexSet(PublicKey.hash);
46
- /**
47
- * Keys scheduled to be cleared from _receivedMessages on the next iteration.
48
- */
49
- _toClear = new ComplexSet(PublicKey.hash);
50
- _ctx;
51
- _closed = true;
52
- _retryDelay;
53
- constructor({ signalManager, retryDelay = 1e3 }) {
54
- this._signalManager = signalManager;
55
- this._retryDelay = retryDelay;
56
- this.open();
57
- }
58
- open() {
59
- if (!this._closed) {
60
- return;
61
- }
62
- const traceId = PublicKey.random().toHex();
63
- log.trace("dxos.mesh.messenger.open", trace2.begin({
64
- id: traceId
65
- }), {
66
- F: __dxlog_file,
67
- L: 72,
68
- S: this,
69
- C: (f, a) => f(...a)
70
- });
71
- this._ctx = new Context({
72
- onError: (err) => log.catch(err, void 0, {
73
- F: __dxlog_file,
74
- L: 74,
75
- S: this,
76
- C: (f, a) => f(...a)
77
- })
78
- }, {
79
- F: __dxlog_file,
80
- L: 73
81
- });
82
- this._ctx.onDispose(this._signalManager.onMessage.on(async (message) => {
83
- log("received message", {
84
- from: message.author
85
- }, {
86
- F: __dxlog_file,
87
- L: 78,
88
- S: this,
89
- C: (f, a) => f(...a)
90
- });
91
- await this._handleMessage(message);
92
- }));
93
- scheduleTaskInterval(this._ctx, async () => {
94
- this._performGc();
95
- }, RECEIVED_MESSAGES_GC_INTERVAL);
96
- this._closed = false;
97
- log.trace("dxos.mesh.messenger.open", trace2.end({
98
- id: traceId
99
- }), {
100
- F: __dxlog_file,
101
- L: 93,
102
- S: this,
103
- C: (f, a) => f(...a)
104
- });
105
- }
106
- async close() {
107
- if (this._closed) {
108
- return;
109
- }
110
- this._closed = true;
111
- await this._ctx.dispose();
112
- }
113
- async sendMessage({ author, recipient, payload }) {
114
- invariant(!this._closed, "Closed", {
115
- F: __dxlog_file,
116
- L: 105,
117
- S: this,
118
- A: [
119
- "!this._closed",
120
- "'Closed'"
121
- ]
122
- });
123
- const messageContext = this._ctx.derive();
124
- const reliablePayload = {
125
- messageId: PublicKey.random(),
126
- payload
127
- };
128
- invariant(!this._onAckCallbacks.has(reliablePayload.messageId), void 0, {
129
- F: __dxlog_file,
130
- L: 112,
131
- S: this,
132
- A: [
133
- "!this._onAckCallbacks.has(reliablePayload.messageId!)",
134
- ""
135
- ]
136
- });
137
- log("send message", {
138
- messageId: reliablePayload.messageId,
139
- author,
140
- recipient
141
- }, {
142
- F: __dxlog_file,
143
- L: 113,
144
- S: this,
145
- C: (f, a) => f(...a)
146
- });
147
- let messageReceived;
148
- let timeoutHit;
149
- let sendAttempts = 0;
150
- const promise = new Promise((resolve, reject) => {
151
- messageReceived = resolve;
152
- timeoutHit = reject;
153
- });
154
- scheduleExponentialBackoffTaskInterval(messageContext, async () => {
155
- log("retrying message", {
156
- messageId: reliablePayload.messageId
157
- }, {
158
- F: __dxlog_file,
159
- L: 128,
160
- S: this,
161
- C: (f, a) => f(...a)
162
- });
163
- sendAttempts++;
164
- await this._encodeAndSend({
165
- author,
166
- recipient,
167
- reliablePayload
168
- }).catch((err) => log("failed to send message", {
169
- err
170
- }, {
171
- F: __dxlog_file,
172
- L: 131,
173
- S: this,
174
- C: (f, a) => f(...a)
175
- }));
176
- }, this._retryDelay);
177
- scheduleTask(messageContext, () => {
178
- log("message not delivered", {
179
- messageId: reliablePayload.messageId
180
- }, {
181
- F: __dxlog_file,
182
- L: 140,
183
- S: this,
184
- C: (f, a) => f(...a)
185
- });
186
- this._onAckCallbacks.delete(reliablePayload.messageId);
187
- timeoutHit(new ProtocolTimeoutError("signaling message not delivered", new TimeoutError(MESSAGE_TIMEOUT, "Message not delivered")));
188
- void messageContext.dispose();
189
- this._monitor.recordReliableMessage({
190
- sendAttempts,
191
- sent: false
192
- });
193
- }, MESSAGE_TIMEOUT);
194
- this._onAckCallbacks.set(reliablePayload.messageId, () => {
195
- messageReceived();
196
- this._onAckCallbacks.delete(reliablePayload.messageId);
197
- void messageContext.dispose();
198
- this._monitor.recordReliableMessage({
199
- sendAttempts,
200
- sent: true
201
- });
202
- });
203
- await this._encodeAndSend({
204
- author,
205
- recipient,
206
- reliablePayload
207
- });
208
- return promise;
209
- }
210
- /**
211
- * Subscribes onMessage function to messages that contains payload with payloadType.
212
- * @param payloadType if not specified, onMessage will be subscribed to all types of messages.
213
- */
214
- async listen({ peer, payloadType, onMessage }) {
215
- invariant(!this._closed, "Closed", {
216
- F: __dxlog_file,
217
- L: 178,
218
- S: this,
219
- A: [
220
- "!this._closed",
221
- "'Closed'"
222
- ]
223
- });
224
- await this._signalManager.subscribeMessages(peer);
225
- let listeners;
226
- invariant(peer.peerKey, "Peer key is required", {
227
- F: __dxlog_file,
228
- L: 182,
229
- S: this,
230
- A: [
231
- "peer.peerKey",
232
- "'Peer key is required'"
233
- ]
234
- });
235
- if (!payloadType) {
236
- listeners = this._defaultListeners.get(peer.peerKey);
237
- if (!listeners) {
238
- listeners = /* @__PURE__ */ new Set();
239
- this._defaultListeners.set(peer.peerKey, listeners);
240
- }
241
- } else {
242
- listeners = this._listeners.get({
243
- peerId: peer.peerKey,
244
- payloadType
245
- });
246
- if (!listeners) {
247
- listeners = /* @__PURE__ */ new Set();
248
- this._listeners.set({
249
- peerId: peer.peerKey,
250
- payloadType
251
- }, listeners);
252
- }
253
- }
254
- listeners.add(onMessage);
255
- return {
256
- unsubscribe: async () => {
257
- listeners.delete(onMessage);
258
- }
259
- };
260
- }
261
- async _encodeAndSend({ author, recipient, reliablePayload }) {
262
- await this._signalManager.sendMessage({
263
- author,
264
- recipient,
265
- payload: {
266
- type_url: "dxos.mesh.messaging.ReliablePayload",
267
- value: ReliablePayload.encode(reliablePayload, {
268
- preserveAny: true
269
- })
270
- }
271
- });
272
- }
273
- async _handleMessage(message) {
274
- switch (message.payload.type_url) {
275
- case "dxos.mesh.messaging.ReliablePayload": {
276
- await this._handleReliablePayload(message);
277
- break;
278
- }
279
- case "dxos.mesh.messaging.Acknowledgement": {
280
- await this._handleAcknowledgement({
281
- payload: message.payload
282
- });
283
- break;
284
- }
285
- }
286
- }
287
- async _handleReliablePayload({ author, recipient, payload }) {
288
- invariant(payload.type_url === "dxos.mesh.messaging.ReliablePayload", void 0, {
289
- F: __dxlog_file,
290
- L: 240,
291
- S: this,
292
- A: [
293
- "payload.type_url === 'dxos.mesh.messaging.ReliablePayload'",
294
- ""
295
- ]
296
- });
297
- const reliablePayload = ReliablePayload.decode(payload.value, {
298
- preserveAny: true
299
- });
300
- log("handling message", {
301
- messageId: reliablePayload.messageId
302
- }, {
303
- F: __dxlog_file,
304
- L: 243,
305
- S: this,
306
- C: (f, a) => f(...a)
307
- });
308
- try {
309
- await this._sendAcknowledgement({
310
- author,
311
- recipient,
312
- messageId: reliablePayload.messageId
313
- });
314
- } catch (err) {
315
- this._monitor.recordMessageAckFailed();
316
- throw err;
317
- }
318
- if (this._receivedMessages.has(reliablePayload.messageId)) {
319
- return;
320
- }
321
- this._receivedMessages.add(reliablePayload.messageId);
322
- await this._callListeners({
323
- author,
324
- recipient,
325
- payload: reliablePayload.payload
326
- });
327
- }
328
- async _handleAcknowledgement({ payload }) {
329
- invariant(payload.type_url === "dxos.mesh.messaging.Acknowledgement", void 0, {
330
- F: __dxlog_file,
331
- L: 271,
332
- S: this,
333
- A: [
334
- "payload.type_url === 'dxos.mesh.messaging.Acknowledgement'",
335
- ""
336
- ]
337
- });
338
- this._onAckCallbacks.get(Acknowledgement.decode(payload.value).messageId)?.();
339
- }
340
- async _sendAcknowledgement({ author, recipient, messageId }) {
341
- log("sending ACK", {
342
- messageId,
343
- from: recipient,
344
- to: author
345
- }, {
346
- F: __dxlog_file,
347
- L: 284,
348
- S: this,
349
- C: (f, a) => f(...a)
350
- });
351
- await this._signalManager.sendMessage({
352
- author: recipient,
353
- recipient: author,
354
- payload: {
355
- type_url: "dxos.mesh.messaging.Acknowledgement",
356
- value: Acknowledgement.encode({
357
- messageId
358
- })
359
- }
360
- });
361
- }
362
- async _callListeners(message) {
363
- {
364
- invariant(message.recipient.peerKey, "Peer key is required", {
365
- F: __dxlog_file,
366
- L: 298,
367
- S: this,
368
- A: [
369
- "message.recipient.peerKey",
370
- "'Peer key is required'"
371
- ]
372
- });
373
- const defaultListenerMap = this._defaultListeners.get(message.recipient.peerKey);
374
- if (defaultListenerMap) {
375
- for (const listener of defaultListenerMap) {
376
- await listener(message);
377
- }
378
- }
379
- }
380
- {
381
- const listenerMap = this._listeners.get({
382
- peerId: message.recipient.peerKey,
383
- payloadType: message.payload.type_url
384
- });
385
- if (listenerMap) {
386
- for (const listener of listenerMap) {
387
- await listener(message);
388
- }
389
- }
390
- }
391
- }
392
- _performGc() {
393
- const start = performance.now();
394
- for (const key of this._toClear.keys()) {
395
- this._receivedMessages.delete(key);
396
- }
397
- this._toClear.clear();
398
- for (const key of this._receivedMessages.keys()) {
399
- this._toClear.add(key);
400
- }
401
- const elapsed = performance.now() - start;
402
- if (elapsed > 100) {
403
- log.warn("GC took too long", {
404
- elapsed
405
- }, {
406
- F: __dxlog_file,
407
- L: 333,
408
- S: this,
409
- C: (f, a) => f(...a)
410
- });
411
- }
412
- }
413
- };
2
+ import {
3
+ MemorySignalManager,
4
+ MemorySignalManagerContext,
5
+ Messenger,
6
+ PeerInfoHash
7
+ } from "./chunk-ZNKR3G44.mjs";
414
8
 
415
9
  // src/signal-client/signal-client.ts
416
- import { DeferredTask, Event as Event2, Trigger as Trigger2, scheduleTask as scheduleTask2, scheduleTaskInterval as scheduleTaskInterval3, sleep } from "@dxos/async";
10
+ import { DeferredTask, Event as Event2, Trigger as Trigger2, scheduleTask, scheduleTaskInterval as scheduleTaskInterval2, sleep } from "@dxos/async";
417
11
  import { Resource, cancelWithContext as cancelWithContext2 } from "@dxos/context";
418
- import { invariant as invariant3 } from "@dxos/invariant";
419
- import { PublicKey as PublicKey4 } from "@dxos/keys";
420
- import { log as log4 } from "@dxos/log";
421
- import { trace as trace6 } from "@dxos/protocols";
12
+ import { invariant as invariant2 } from "@dxos/invariant";
13
+ import { PublicKey as PublicKey3 } from "@dxos/keys";
14
+ import { log as log3 } from "@dxos/log";
15
+ import { trace as trace4 } from "@dxos/protocols";
422
16
  import { SignalState } from "@dxos/protocols/proto/dxos/mesh/signal";
423
17
 
424
18
  // src/signal-client/signal-client-monitor.ts
425
- import { trace as trace3 } from "@dxos/tracing";
19
+ import { trace } from "@dxos/tracing";
426
20
  var SignalClientMonitor = class {
427
21
  _performance = {
428
22
  sentMessages: 0,
@@ -453,7 +47,7 @@ var SignalClientMonitor = class {
453
47
  }
454
48
  recordReconnect(params) {
455
49
  this._performance.reconnectCounter++;
456
- trace3.metrics.increment("dxos.mesh.signal.signal-client.reconnect", 1, {
50
+ trace.metrics.increment("dxos.mesh.signal.signal-client.reconnect", 1, {
457
51
  tags: {
458
52
  success: params.success
459
53
  }
@@ -467,10 +61,10 @@ var SignalClientMonitor = class {
467
61
  }
468
62
  recordMessageReceived(message) {
469
63
  this._performance.receivedMessages++;
470
- trace3.metrics.increment("dxos.mesh.signal.signal-client.received-total", 1, {
64
+ trace.metrics.increment("dxos.mesh.signal.signal-client.received-total", 1, {
471
65
  tags: createIdentityTags(message)
472
66
  });
473
- trace3.metrics.distribution("dxos.mesh.signal.signal-client.bytes-in", getByteCount(message), {
67
+ trace.metrics.distribution("dxos.mesh.signal.signal-client.bytes-in", getByteCount(message), {
474
68
  tags: createIdentityTags(message)
475
69
  });
476
70
  }
@@ -482,16 +76,16 @@ var SignalClientMonitor = class {
482
76
  const reqStart = Date.now();
483
77
  await sendMessage();
484
78
  const reqDuration = Date.now() - reqStart;
485
- trace3.metrics.distribution("dxos.mesh.signal.signal-client.send-duration", reqDuration, {
79
+ trace.metrics.distribution("dxos.mesh.signal.signal-client.send-duration", reqDuration, {
486
80
  tags
487
81
  });
488
- trace3.metrics.distribution("dxos.mesh.signal.signal-client.bytes-out", getByteCount(message), {
82
+ trace.metrics.distribution("dxos.mesh.signal.signal-client.bytes-out", getByteCount(message), {
489
83
  tags
490
84
  });
491
85
  } catch (err) {
492
86
  success = false;
493
87
  }
494
- trace3.metrics.increment("dxos.mesh.signal.signal-client.sent-total", 1, {
88
+ trace.metrics.increment("dxos.mesh.signal.signal-client.sent-total", 1, {
495
89
  tags: {
496
90
  ...tags,
497
91
  success
@@ -499,10 +93,10 @@ var SignalClientMonitor = class {
499
93
  });
500
94
  }
501
95
  recordStreamCloseErrors(count) {
502
- trace3.metrics.increment("dxos.mesh.signal.signal-client.stream-close-errors", count);
96
+ trace.metrics.increment("dxos.mesh.signal.signal-client.stream-close-errors", count);
503
97
  }
504
98
  recordReconciliation(params) {
505
- trace3.metrics.increment("dxos.mesh.signal.signal-client.reconciliation", 1, {
99
+ trace.metrics.increment("dxos.mesh.signal.signal-client.reconciliation", 1, {
506
100
  tags: {
507
101
  success: params.success
508
102
  }
@@ -521,43 +115,38 @@ var createIdentityTags = (message) => {
521
115
  // src/signal-client/signal-local-state.ts
522
116
  import { Event, asyncTimeout } from "@dxos/async";
523
117
  import { cancelWithContext } from "@dxos/context";
524
- import { PublicKey as PublicKey2 } from "@dxos/keys";
525
- import { log as log2 } from "@dxos/log";
526
- import { ComplexMap as ComplexMap2, ComplexSet as ComplexSet2, safeAwaitAll } from "@dxos/util";
527
- var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-local-state.ts";
118
+ import { PublicKey } from "@dxos/keys";
119
+ import { log } from "@dxos/log";
120
+ import { ComplexMap, ComplexSet, safeAwaitAll } from "@dxos/util";
121
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-local-state.ts";
528
122
  var SignalLocalState = class {
529
123
  _onMessage;
530
124
  _onSwarmEvent;
531
125
  /**
532
126
  * Swarm events streams. Keys represent actually joined topic and peerId.
533
127
  */
534
- _swarmStreams;
128
+ _swarmStreams = new ComplexMap(({ topic, peerId }) => topic.toHex() + peerId.toHex());
535
129
  /**
536
130
  * Represent desired joined topic and peerId.
537
131
  */
538
- _joinedTopics;
132
+ _joinedTopics = new ComplexSet(({ topic, peerId }) => topic.toHex() + peerId.toHex());
539
133
  /**
540
134
  * Represent desired message subscriptions.
541
135
  */
542
- _subscribedMessages;
136
+ _subscribedMessages = new ComplexSet(({ peerId }) => peerId.toHex());
543
137
  /**
544
138
  * Message streams. Keys represents actually subscribed peers.
545
139
  * @internal
546
140
  */
547
- messageStreams;
141
+ messageStreams = new ComplexMap((key) => key.toHex());
548
142
  /**
549
143
  * Event to use in tests to wait till subscription is successfully established.
550
144
  * @internal
551
145
  */
552
- reconciled;
146
+ reconciled = new Event();
553
147
  constructor(_onMessage, _onSwarmEvent) {
554
148
  this._onMessage = _onMessage;
555
149
  this._onSwarmEvent = _onSwarmEvent;
556
- this._swarmStreams = new ComplexMap2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
557
- this._joinedTopics = new ComplexSet2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
558
- this._subscribedMessages = new ComplexSet2(({ peerId }) => peerId.toHex());
559
- this.messageStreams = new ComplexMap2((key) => key.toHex());
560
- this.reconciled = new Event();
561
150
  }
562
151
  async safeCloseStreams() {
563
152
  const streams = [
@@ -598,11 +187,11 @@ var SignalLocalState = class {
598
187
  });
599
188
  }
600
189
  unsubscribeMessages(peerId) {
601
- log2("unsubscribing from messages", {
190
+ log("unsubscribing from messages", {
602
191
  peerId
603
192
  }, {
604
- F: __dxlog_file2,
605
- L: 80,
193
+ F: __dxlog_file,
194
+ L: 79,
606
195
  S: this,
607
196
  C: (f, a) => f(...a)
608
197
  });
@@ -650,11 +239,11 @@ var SignalLocalState = class {
650
239
  topic,
651
240
  peerId
652
241
  })) {
653
- log2("swarm event", {
242
+ log("swarm event", {
654
243
  swarmEvent
655
244
  }, {
656
- F: __dxlog_file2,
657
- L: 116,
245
+ F: __dxlog_file,
246
+ L: 115,
658
247
  S: this,
659
248
  C: (f, a) => f(...a)
660
249
  });
@@ -663,7 +252,7 @@ var SignalLocalState = class {
663
252
  peerAvailable: {
664
253
  ...swarmEvent.peerAvailable,
665
254
  peer: {
666
- peerKey: PublicKey2.from(swarmEvent.peerAvailable.peer).toHex()
255
+ peerKey: PublicKey.from(swarmEvent.peerAvailable.peer).toHex()
667
256
  }
668
257
  }
669
258
  } : {
@@ -671,7 +260,7 @@ var SignalLocalState = class {
671
260
  peerLeft: {
672
261
  ...swarmEvent.peerLeft,
673
262
  peer: {
674
- peerKey: PublicKey2.from(swarmEvent.peerLeft.peer).toHex()
263
+ peerKey: PublicKey.from(swarmEvent.peerLeft.peer).toHex()
675
264
  }
676
265
  }
677
266
  };
@@ -705,10 +294,10 @@ var SignalLocalState = class {
705
294
  })) {
706
295
  const message = {
707
296
  author: {
708
- peerKey: PublicKey2.from(signalMessage.author).toHex()
297
+ peerKey: PublicKey.from(signalMessage.author).toHex()
709
298
  },
710
299
  recipient: {
711
- peerKey: PublicKey2.from(signalMessage.recipient).toHex()
300
+ peerKey: PublicKey.from(signalMessage.recipient).toHex()
712
301
  },
713
302
  payload: signalMessage.payload
714
303
  };
@@ -722,20 +311,20 @@ var SignalLocalState = class {
722
311
 
723
312
  // src/signal-client/signal-rpc-client.ts
724
313
  import WebSocket from "isomorphic-ws";
725
- import { TimeoutError as TimeoutError2, Trigger, scheduleTaskInterval as scheduleTaskInterval2 } from "@dxos/async";
726
- import { Context as Context2 } from "@dxos/context";
727
- import { invariant as invariant2 } from "@dxos/invariant";
728
- import { PublicKey as PublicKey3 } from "@dxos/keys";
729
- import { log as log3 } from "@dxos/log";
730
- import { trace as trace5 } from "@dxos/protocols";
731
- import { schema as schema2 } from "@dxos/protocols/proto";
314
+ import { TimeoutError, Trigger, scheduleTaskInterval } from "@dxos/async";
315
+ import { Context } from "@dxos/context";
316
+ import { invariant } from "@dxos/invariant";
317
+ import { PublicKey as PublicKey2 } from "@dxos/keys";
318
+ import { log as log2 } from "@dxos/log";
319
+ import { trace as trace3 } from "@dxos/protocols";
320
+ import { schema } from "@dxos/protocols/proto";
732
321
  import { createProtoRpcPeer } from "@dxos/rpc";
733
322
 
734
323
  // src/signal-client/signal-rpc-client-monitor.ts
735
- import { trace as trace4 } from "@dxos/tracing";
324
+ import { trace as trace2 } from "@dxos/tracing";
736
325
  var SignalRpcClientMonitor = class {
737
326
  recordClientCloseFailure(params) {
738
- trace4.metrics.increment("dxos.mesh.signal.signal-rpc-client.close-failure", 1, {
327
+ trace2.metrics.increment("dxos.mesh.signal.signal-rpc-client.close-failure", 1, {
739
328
  tags: {
740
329
  reason: params.failureReason
741
330
  }
@@ -744,7 +333,7 @@ var SignalRpcClientMonitor = class {
744
333
  };
745
334
 
746
335
  // src/signal-client/signal-rpc-client.ts
747
- var __dxlog_file3 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts";
336
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts";
748
337
  var SIGNAL_KEEPALIVE_INTERVAL = 1e4;
749
338
  var SignalRPCClient = class {
750
339
  _socket;
@@ -757,11 +346,11 @@ var SignalRPCClient = class {
757
346
  _closeComplete = new Trigger();
758
347
  _monitor = new SignalRpcClientMonitor();
759
348
  constructor({ url, callbacks = {} }) {
760
- const traceId = PublicKey3.random().toHex();
761
- log3.trace("dxos.mesh.signal-rpc-client.constructor", trace5.begin({
349
+ const traceId = PublicKey2.random().toHex();
350
+ log2.trace("dxos.mesh.signal-rpc-client.constructor", trace3.begin({
762
351
  id: traceId
763
352
  }), {
764
- F: __dxlog_file3,
353
+ F: __dxlog_file2,
765
354
  L: 66,
766
355
  S: this,
767
356
  C: (f, a) => f(...a)
@@ -771,7 +360,7 @@ var SignalRPCClient = class {
771
360
  this._socket = new WebSocket(this._url);
772
361
  this._rpc = createProtoRpcPeer({
773
362
  requested: {
774
- Signal: schema2.getService("dxos.mesh.signal.Signal")
363
+ Signal: schema.getService("dxos.mesh.signal.Signal")
775
364
  },
776
365
  noHandshake: true,
777
366
  port: {
@@ -782,8 +371,8 @@ var SignalRPCClient = class {
782
371
  try {
783
372
  this._socket.send(msg);
784
373
  } catch (err) {
785
- log3.warn("send error", err, {
786
- F: __dxlog_file3,
374
+ log2.warn("send error", err, {
375
+ F: __dxlog_file2,
787
376
  L: 85,
788
377
  S: this,
789
378
  C: (f, a) => f(...a)
@@ -811,19 +400,19 @@ var SignalRPCClient = class {
811
400
  await this._safeCloseRpc();
812
401
  return;
813
402
  }
814
- log3(`RPC open ${this._url}`, void 0, {
815
- F: __dxlog_file3,
403
+ log2(`RPC open ${this._url}`, void 0, {
404
+ F: __dxlog_file2,
816
405
  L: 110,
817
406
  S: this,
818
407
  C: (f, a) => f(...a)
819
408
  });
820
409
  this._callbacks.onConnected?.();
821
410
  this._connectTrigger.wake();
822
- this._keepaliveCtx = new Context2(void 0, {
823
- F: __dxlog_file3,
411
+ this._keepaliveCtx = new Context(void 0, {
412
+ F: __dxlog_file2,
824
413
  L: 113
825
414
  });
826
- scheduleTaskInterval2(this._keepaliveCtx, async () => {
415
+ scheduleTaskInterval(this._keepaliveCtx, async () => {
827
416
  this._socket?.send("__ping__");
828
417
  }, SIGNAL_KEEPALIVE_INTERVAL);
829
418
  } catch (err) {
@@ -833,8 +422,8 @@ var SignalRPCClient = class {
833
422
  }
834
423
  };
835
424
  this._socket.onclose = async () => {
836
- log3(`Disconnected ${this._url}`, void 0, {
837
- F: __dxlog_file3,
425
+ log2(`Disconnected ${this._url}`, void 0, {
426
+ F: __dxlog_file2,
838
427
  L: 133,
839
428
  S: this,
840
429
  C: (f, a) => f(...a)
@@ -851,20 +440,20 @@ var SignalRPCClient = class {
851
440
  this._closed = true;
852
441
  this._callbacks.onError?.(event.error ?? new Error(event.message));
853
442
  await this._safeCloseRpc();
854
- log3.warn(`Socket ${event.type ?? "unknown"} error`, {
443
+ log2.warn(`Socket ${event.type ?? "unknown"} error`, {
855
444
  message: event.message,
856
445
  url: this._url
857
446
  }, {
858
- F: __dxlog_file3,
447
+ F: __dxlog_file2,
859
448
  L: 149,
860
449
  S: this,
861
450
  C: (f, a) => f(...a)
862
451
  });
863
452
  };
864
- log3.trace("dxos.mesh.signal-rpc-client.constructor", trace5.end({
453
+ log2.trace("dxos.mesh.signal-rpc-client.constructor", trace3.end({
865
454
  id: traceId
866
455
  }), {
867
- F: __dxlog_file3,
456
+ F: __dxlog_file2,
868
457
  L: 152,
869
458
  S: this,
870
459
  C: (f, a) => f(...a)
@@ -885,25 +474,25 @@ var SignalRPCClient = class {
885
474
  timeout: 1e3
886
475
  });
887
476
  } catch (err) {
888
- const failureReason = err instanceof TimeoutError2 ? "timeout" : err?.constructor?.name ?? "unknown";
477
+ const failureReason = err instanceof TimeoutError ? "timeout" : err?.constructor?.name ?? "unknown";
889
478
  this._monitor.recordClientCloseFailure({
890
479
  failureReason
891
480
  });
892
481
  }
893
482
  }
894
483
  async join({ topic, peerId }) {
895
- log3("join", {
484
+ log2("join", {
896
485
  topic,
897
486
  peerId,
898
487
  metadata: this._callbacks?.getMetadata?.()
899
488
  }, {
900
- F: __dxlog_file3,
489
+ F: __dxlog_file2,
901
490
  L: 178,
902
491
  S: this,
903
492
  C: (f, a) => f(...a)
904
493
  });
905
- invariant2(!this._closed, "SignalRPCClient is closed", {
906
- F: __dxlog_file3,
494
+ invariant(!this._closed, "SignalRPCClient is closed", {
495
+ F: __dxlog_file2,
907
496
  L: 179,
908
497
  S: this,
909
498
  A: [
@@ -921,16 +510,16 @@ var SignalRPCClient = class {
921
510
  return swarmStream;
922
511
  }
923
512
  async receiveMessages(peerId) {
924
- log3("receiveMessages", {
513
+ log2("receiveMessages", {
925
514
  peerId
926
515
  }, {
927
- F: __dxlog_file3,
516
+ F: __dxlog_file2,
928
517
  L: 191,
929
518
  S: this,
930
519
  C: (f, a) => f(...a)
931
520
  });
932
- invariant2(!this._closed, "SignalRPCClient is closed", {
933
- F: __dxlog_file3,
521
+ invariant(!this._closed, "SignalRPCClient is closed", {
522
+ F: __dxlog_file2,
934
523
  L: 192,
935
524
  S: this,
936
525
  A: [
@@ -946,19 +535,19 @@ var SignalRPCClient = class {
946
535
  return messageStream;
947
536
  }
948
537
  async sendMessage({ author, recipient, payload }) {
949
- log3("sendMessage", {
538
+ log2("sendMessage", {
950
539
  author,
951
540
  recipient,
952
541
  payload,
953
542
  metadata: this._callbacks?.getMetadata?.()
954
543
  }, {
955
- F: __dxlog_file3,
544
+ F: __dxlog_file2,
956
545
  L: 210,
957
546
  S: this,
958
547
  C: (f, a) => f(...a)
959
548
  });
960
- invariant2(!this._closed, "SignalRPCClient is closed", {
961
- F: __dxlog_file3,
549
+ invariant(!this._closed, "SignalRPCClient is closed", {
550
+ F: __dxlog_file2,
962
551
  L: 211,
963
552
  S: this,
964
553
  A: [
@@ -979,8 +568,8 @@ var SignalRPCClient = class {
979
568
  this._connectTrigger.reset();
980
569
  await this._rpc.close();
981
570
  } catch (err) {
982
- log3.catch(err, void 0, {
983
- F: __dxlog_file3,
571
+ log2.catch(err, void 0, {
572
+ F: __dxlog_file2,
984
573
  L: 226,
985
574
  S: this,
986
575
  C: (f, a) => f(...a)
@@ -990,7 +579,7 @@ var SignalRPCClient = class {
990
579
  };
991
580
 
992
581
  // src/signal-client/signal-client.ts
993
- var __dxlog_file4 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-client.ts";
582
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-client.ts";
994
583
  var DEFAULT_RECONNECT_TIMEOUT = 100;
995
584
  var MAX_RECONNECT_TIMEOUT = 5e3;
996
585
  var ERROR_RECONCILE_DELAY = 1e3;
@@ -998,11 +587,11 @@ var RECONCILE_INTERVAL = 5e3;
998
587
  var SignalClient = class extends Resource {
999
588
  _host;
1000
589
  _getMetadata;
1001
- _monitor;
1002
- _state;
590
+ _monitor = new SignalClientMonitor();
591
+ _state = SignalState.CLOSED;
1003
592
  _lastError;
1004
- _lastReconciliationFailed;
1005
- _clientReady;
593
+ _lastReconciliationFailed = false;
594
+ _clientReady = new Trigger2();
1006
595
  _connectionCtx;
1007
596
  _client;
1008
597
  _reconcileTask;
@@ -1010,15 +599,15 @@ var SignalClient = class extends Resource {
1010
599
  /**
1011
600
  * Number of milliseconds after which the connection will be attempted again in case of error.
1012
601
  */
1013
- _reconnectAfter;
1014
- _instanceId;
602
+ _reconnectAfter = DEFAULT_RECONNECT_TIMEOUT;
603
+ _instanceId = PublicKey3.random().toHex();
1015
604
  /**
1016
605
  * @internal
1017
606
  */
1018
607
  localState;
1019
- statusChanged;
1020
- onMessage;
1021
- swarmEvent;
608
+ statusChanged = new Event2();
609
+ onMessage = new Event2();
610
+ swarmEvent = new Event2();
1022
611
  /**
1023
612
  * @param _host Signal server websocket URL.
1024
613
  * @param onMessage called when a new message is received.
@@ -1026,7 +615,7 @@ var SignalClient = class extends Resource {
1026
615
  * @param _getMetadata signal-message metadata provider, called for every message.
1027
616
  */
1028
617
  constructor(_host, _getMetadata) {
1029
- super(), this._host = _host, this._getMetadata = _getMetadata, this._monitor = new SignalClientMonitor(), this._state = SignalState.CLOSED, this._lastReconciliationFailed = false, this._clientReady = new Trigger2(), this._reconnectAfter = DEFAULT_RECONNECT_TIMEOUT, this._instanceId = PublicKey4.random().toHex(), this.statusChanged = new Event2(), this.onMessage = new Event2(), this.swarmEvent = new Event2();
618
+ super(), this._host = _host, this._getMetadata = _getMetadata;
1030
619
  if (!this._host.startsWith("wss://") && !this._host.startsWith("ws://")) {
1031
620
  throw new Error(`Signal server requires a websocket URL. Provided: ${this._host}`);
1032
621
  }
@@ -1036,11 +625,11 @@ var SignalClient = class extends Resource {
1036
625
  }, async (event) => this.swarmEvent.emit(event));
1037
626
  }
1038
627
  async _open() {
1039
- log4.trace("dxos.mesh.signal-client.open", trace6.begin({
628
+ log3.trace("dxos.mesh.signal-client.open", trace4.begin({
1040
629
  id: this._instanceId
1041
630
  }), {
1042
- F: __dxlog_file4,
1043
- L: 97,
631
+ F: __dxlog_file3,
632
+ L: 96,
1044
633
  S: this,
1045
634
  C: (f, a) => f(...a)
1046
635
  });
@@ -1056,9 +645,9 @@ var SignalClient = class extends Resource {
1056
645
  await cancelWithContext2(this._connectionCtx, this._clientReady.wait({
1057
646
  timeout: 5e3
1058
647
  }));
1059
- invariant3(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
1060
- F: __dxlog_file4,
1061
- L: 107,
648
+ invariant2(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
649
+ F: __dxlog_file3,
650
+ L: 106,
1062
651
  S: this,
1063
652
  A: [
1064
653
  "this._state === SignalState.CONNECTED",
@@ -1078,7 +667,7 @@ var SignalClient = class extends Resource {
1078
667
  throw err;
1079
668
  }
1080
669
  });
1081
- scheduleTaskInterval3(this._ctx, async () => {
670
+ scheduleTaskInterval2(this._ctx, async () => {
1082
671
  if (this._state === SignalState.CONNECTED) {
1083
672
  this._reconcileTask.schedule();
1084
673
  }
@@ -1097,11 +686,11 @@ var SignalClient = class extends Resource {
1097
686
  }
1098
687
  });
1099
688
  this._createClient();
1100
- log4.trace("dxos.mesh.signal-client.open", trace6.end({
689
+ log3.trace("dxos.mesh.signal-client.open", trace4.end({
1101
690
  id: this._instanceId
1102
691
  }), {
1103
- F: __dxlog_file4,
1104
- L: 140,
692
+ F: __dxlog_file3,
693
+ L: 139,
1105
694
  S: this,
1106
695
  C: (f, a) => f(...a)
1107
696
  });
@@ -1111,9 +700,9 @@ var SignalClient = class extends Resource {
1111
700
  return;
1112
701
  }
1113
702
  if (this._state === SignalState.CONNECTED && !this._lastReconciliationFailed) {
1114
- log4.warn("SignalClient error:", err, {
1115
- F: __dxlog_file4,
1116
- L: 149,
703
+ log3.warn("SignalClient error:", err, {
704
+ F: __dxlog_file3,
705
+ L: 148,
1117
706
  S: this,
1118
707
  C: (f, a) => f(...a)
1119
708
  });
@@ -1121,9 +710,9 @@ var SignalClient = class extends Resource {
1121
710
  this._scheduleReconcileAfterError();
1122
711
  }
1123
712
  async _close() {
1124
- log4("closing...", void 0, {
1125
- F: __dxlog_file4,
1126
- L: 155,
713
+ log3("closing...", void 0, {
714
+ F: __dxlog_file3,
715
+ L: 154,
1127
716
  S: this,
1128
717
  C: (f, a) => f(...a)
1129
718
  });
@@ -1134,9 +723,9 @@ var SignalClient = class extends Resource {
1134
723
  }
1135
724
  this._setState(SignalState.CLOSED);
1136
725
  await this._safeResetClient();
1137
- log4("closed", void 0, {
1138
- F: __dxlog_file4,
1139
- L: 163,
726
+ log3("closed", void 0, {
727
+ F: __dxlog_file3,
728
+ L: 162,
1140
729
  S: this,
1141
730
  C: (f, a) => f(...a)
1142
731
  });
@@ -1150,66 +739,66 @@ var SignalClient = class extends Resource {
1150
739
  ...this._monitor.getRecordedTimestamps()
1151
740
  };
1152
741
  }
1153
- async join(args) {
1154
- log4("joining", {
742
+ async join(_ctx, args) {
743
+ log3("joining", {
1155
744
  topic: args.topic,
1156
745
  peerId: args.peer.peerKey
1157
746
  }, {
1158
- F: __dxlog_file4,
1159
- L: 177,
747
+ F: __dxlog_file3,
748
+ L: 176,
1160
749
  S: this,
1161
750
  C: (f, a) => f(...a)
1162
751
  });
1163
752
  this._monitor.recordJoin();
1164
753
  this.localState.join({
1165
754
  topic: args.topic,
1166
- peerId: PublicKey4.from(args.peer.peerKey)
755
+ peerId: PublicKey3.from(args.peer.peerKey)
1167
756
  });
1168
757
  this._reconcileTask?.schedule();
1169
758
  }
1170
- async leave(args) {
1171
- log4("leaving", {
759
+ async leave(_ctx, args) {
760
+ log3("leaving", {
1172
761
  topic: args.topic,
1173
762
  peerId: args.peer.peerKey
1174
763
  }, {
1175
- F: __dxlog_file4,
1176
- L: 184,
764
+ F: __dxlog_file3,
765
+ L: 183,
1177
766
  S: this,
1178
767
  C: (f, a) => f(...a)
1179
768
  });
1180
769
  this._monitor.recordLeave();
1181
770
  this.localState.leave({
1182
771
  topic: args.topic,
1183
- peerId: PublicKey4.from(args.peer.peerKey)
772
+ peerId: PublicKey3.from(args.peer.peerKey)
1184
773
  });
1185
774
  }
1186
- async query(params) {
775
+ async query(_ctx, params) {
1187
776
  throw new Error("Not implemented");
1188
777
  }
1189
- async sendMessage(msg) {
778
+ async sendMessage(_ctx, msg) {
1190
779
  return this._monitor.recordMessageSending(msg, async () => {
1191
780
  await this._clientReady.wait();
1192
- invariant3(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
1193
- F: __dxlog_file4,
1194
- L: 196,
781
+ invariant2(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
782
+ F: __dxlog_file3,
783
+ L: 195,
1195
784
  S: this,
1196
785
  A: [
1197
786
  "this._state === SignalState.CONNECTED",
1198
787
  "'Not connected to Signal Server'"
1199
788
  ]
1200
789
  });
1201
- invariant3(msg.author.peerKey, "Author key required", {
1202
- F: __dxlog_file4,
1203
- L: 197,
790
+ invariant2(msg.author.peerKey, "Author key required", {
791
+ F: __dxlog_file3,
792
+ L: 196,
1204
793
  S: this,
1205
794
  A: [
1206
795
  "msg.author.peerKey",
1207
796
  "'Author key required'"
1208
797
  ]
1209
798
  });
1210
- invariant3(msg.recipient.peerKey, "Recipient key required", {
1211
- F: __dxlog_file4,
1212
- L: 198,
799
+ invariant2(msg.recipient.peerKey, "Recipient key required", {
800
+ F: __dxlog_file3,
801
+ L: 197,
1213
802
  S: this,
1214
803
  A: [
1215
804
  "msg.recipient.peerKey",
@@ -1217,69 +806,69 @@ var SignalClient = class extends Resource {
1217
806
  ]
1218
807
  });
1219
808
  await this._client.sendMessage({
1220
- author: PublicKey4.from(msg.author.peerKey),
1221
- recipient: PublicKey4.from(msg.recipient.peerKey),
809
+ author: PublicKey3.from(msg.author.peerKey),
810
+ recipient: PublicKey3.from(msg.recipient.peerKey),
1222
811
  payload: msg.payload
1223
812
  });
1224
813
  });
1225
814
  }
1226
815
  async subscribeMessages(peer) {
1227
- invariant3(peer.peerKey, "Peer key required", {
1228
- F: __dxlog_file4,
1229
- L: 208,
816
+ invariant2(peer.peerKey, "Peer key required", {
817
+ F: __dxlog_file3,
818
+ L: 207,
1230
819
  S: this,
1231
820
  A: [
1232
821
  "peer.peerKey",
1233
822
  "'Peer key required'"
1234
823
  ]
1235
824
  });
1236
- log4("subscribing to messages", {
825
+ log3("subscribing to messages", {
1237
826
  peer
1238
827
  }, {
1239
- F: __dxlog_file4,
1240
- L: 209,
828
+ F: __dxlog_file3,
829
+ L: 208,
1241
830
  S: this,
1242
831
  C: (f, a) => f(...a)
1243
832
  });
1244
- this.localState.subscribeMessages(PublicKey4.from(peer.peerKey));
833
+ this.localState.subscribeMessages(PublicKey3.from(peer.peerKey));
1245
834
  this._reconcileTask?.schedule();
1246
835
  }
1247
836
  async unsubscribeMessages(peer) {
1248
- invariant3(peer.peerKey, "Peer key required", {
1249
- F: __dxlog_file4,
1250
- L: 215,
837
+ invariant2(peer.peerKey, "Peer key required", {
838
+ F: __dxlog_file3,
839
+ L: 214,
1251
840
  S: this,
1252
841
  A: [
1253
842
  "peer.peerKey",
1254
843
  "'Peer key required'"
1255
844
  ]
1256
845
  });
1257
- log4("unsubscribing from messages", {
846
+ log3("unsubscribing from messages", {
1258
847
  peer
1259
848
  }, {
1260
- F: __dxlog_file4,
1261
- L: 216,
849
+ F: __dxlog_file3,
850
+ L: 215,
1262
851
  S: this,
1263
852
  C: (f, a) => f(...a)
1264
853
  });
1265
- this.localState.unsubscribeMessages(PublicKey4.from(peer.peerKey));
854
+ this.localState.unsubscribeMessages(PublicKey3.from(peer.peerKey));
1266
855
  }
1267
856
  _scheduleReconcileAfterError() {
1268
- scheduleTask2(this._ctx, () => this._reconcileTask.schedule(), ERROR_RECONCILE_DELAY);
857
+ scheduleTask(this._ctx, () => this._reconcileTask.schedule(), ERROR_RECONCILE_DELAY);
1269
858
  }
1270
859
  _createClient() {
1271
- log4("creating client", {
860
+ log3("creating client", {
1272
861
  host: this._host,
1273
862
  state: this._state
1274
863
  }, {
1275
- F: __dxlog_file4,
1276
- L: 225,
864
+ F: __dxlog_file3,
865
+ L: 224,
1277
866
  S: this,
1278
867
  C: (f, a) => f(...a)
1279
868
  });
1280
- invariant3(!this._client, "Client already created", {
1281
- F: __dxlog_file4,
1282
- L: 226,
869
+ invariant2(!this._client, "Client already created", {
870
+ F: __dxlog_file3,
871
+ L: 225,
1283
872
  S: this,
1284
873
  A: [
1285
874
  "!this._client",
@@ -1289,9 +878,9 @@ var SignalClient = class extends Resource {
1289
878
  this._monitor.recordConnectionStartTime();
1290
879
  this._connectionCtx = this._ctx.derive();
1291
880
  this._connectionCtx.onDispose(async () => {
1292
- log4("connection context disposed", void 0, {
1293
- F: __dxlog_file4,
1294
- L: 233,
881
+ log3("connection context disposed", void 0, {
882
+ F: __dxlog_file3,
883
+ L: 232,
1295
884
  S: this,
1296
885
  C: (f, a) => f(...a)
1297
886
  });
@@ -1304,9 +893,9 @@ var SignalClient = class extends Resource {
1304
893
  callbacks: {
1305
894
  onConnected: () => {
1306
895
  if (client === this._client) {
1307
- log4("socket connected", void 0, {
1308
- F: __dxlog_file4,
1309
- L: 244,
896
+ log3("socket connected", void 0, {
897
+ F: __dxlog_file3,
898
+ L: 243,
1310
899
  S: this,
1311
900
  C: (f, a) => f(...a)
1312
901
  });
@@ -1317,11 +906,11 @@ var SignalClient = class extends Resource {
1317
906
  if (client !== this._client) {
1318
907
  return;
1319
908
  }
1320
- log4("socket disconnected", {
909
+ log3("socket disconnected", {
1321
910
  state: this._state
1322
911
  }, {
1323
- F: __dxlog_file4,
1324
- L: 253,
912
+ F: __dxlog_file3,
913
+ L: 252,
1325
914
  S: this,
1326
915
  C: (f, a) => f(...a)
1327
916
  });
@@ -1333,12 +922,12 @@ var SignalClient = class extends Resource {
1333
922
  },
1334
923
  onError: (error) => {
1335
924
  if (client === this._client) {
1336
- log4("socket error", {
925
+ log3("socket error", {
1337
926
  error,
1338
927
  state: this._state
1339
928
  }, {
1340
- F: __dxlog_file4,
1341
- L: 265,
929
+ F: __dxlog_file3,
930
+ L: 264,
1342
931
  S: this,
1343
932
  C: (f, a) => f(...a)
1344
933
  });
@@ -1359,18 +948,18 @@ var SignalClient = class extends Resource {
1359
948
  }
1360
949
  }
1361
950
  async _reconnect() {
1362
- log4(`reconnecting in ${this._reconnectAfter}ms`, {
951
+ log3(`reconnecting in ${this._reconnectAfter}ms`, {
1363
952
  state: this._state
1364
953
  }, {
1365
- F: __dxlog_file4,
1366
- L: 280,
954
+ F: __dxlog_file3,
955
+ L: 279,
1367
956
  S: this,
1368
957
  C: (f, a) => f(...a)
1369
958
  });
1370
959
  if (this._state === SignalState.RECONNECTING) {
1371
- log4.info("Signal api already reconnecting.", void 0, {
1372
- F: __dxlog_file4,
1373
- L: 283,
960
+ log3.info("Signal api already reconnecting.", void 0, {
961
+ F: __dxlog_file3,
962
+ L: 282,
1374
963
  S: this,
1375
964
  C: (f, a) => f(...a)
1376
965
  });
@@ -1408,11 +997,11 @@ var SignalClient = class extends Resource {
1408
997
  _setState(newState) {
1409
998
  this._state = newState;
1410
999
  this._monitor.recordStateChangeTime();
1411
- log4("signal state changed", {
1000
+ log3("signal state changed", {
1412
1001
  status: this.getStatus()
1413
1002
  }, {
1414
- F: __dxlog_file4,
1415
- L: 324,
1003
+ F: __dxlog_file3,
1004
+ L: 323,
1416
1005
  S: this,
1417
1006
  C: (f, a) => f(...a)
1418
1007
  });
@@ -1434,298 +1023,23 @@ var SignalClient = class extends Resource {
1434
1023
  }
1435
1024
  };
1436
1025
 
1437
- // src/signal-methods.ts
1438
- var PeerInfoHash = ({ peerKey }) => peerKey;
1439
-
1440
- // src/signal-manager/memory-signal-manager.ts
1441
- import { Event as Event3, Trigger as Trigger3 } from "@dxos/async";
1442
- import { Context as Context3 } from "@dxos/context";
1443
- import { invariant as invariant4 } from "@dxos/invariant";
1444
- import { PublicKey as PublicKey5 } from "@dxos/keys";
1445
- import { log as log5 } from "@dxos/log";
1446
- import { schema as schema3 } from "@dxos/protocols/proto";
1447
- import { ComplexMap as ComplexMap3, ComplexSet as ComplexSet3 } from "@dxos/util";
1448
- var __dxlog_file5 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/memory-signal-manager.ts";
1449
- var MemorySignalManagerContext = class {
1450
- // Swarm messages.
1451
- swarmEvent = new Event3();
1452
- // Mapping from topic to set of peers.
1453
- swarms = new ComplexMap3(PublicKey5.hash);
1454
- // Map of connections for each peer for signaling.
1455
- connections = new ComplexMap3(PeerInfoHash);
1456
- };
1457
- var MemorySignalManager = class {
1458
- _context;
1459
- statusChanged;
1460
- swarmEvent;
1461
- onMessage;
1462
- /** Will be used to emit SwarmEvents on .open() and .close() */
1463
- _joinedSwarms;
1464
- _ctx;
1465
- // TODO(dmaretskyi): Replace with callback.
1466
- _freezeTrigger;
1467
- constructor(_context) {
1468
- this._context = _context;
1469
- this.statusChanged = new Event3();
1470
- this.swarmEvent = new Event3();
1471
- this.onMessage = new Event3();
1472
- this._joinedSwarms = new ComplexSet3(({ topic, peer }) => topic.toHex() + peer.peerKey);
1473
- this._freezeTrigger = new Trigger3().wake();
1474
- this._ctx = new Context3(void 0, {
1475
- F: __dxlog_file5,
1476
- L: 54
1477
- });
1478
- this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
1479
- }
1480
- async open() {
1481
- if (!this._ctx.disposed) {
1482
- return;
1483
- }
1484
- this._ctx = new Context3(void 0, {
1485
- F: __dxlog_file5,
1486
- L: 63
1487
- });
1488
- this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
1489
- await Promise.all([
1490
- ...this._joinedSwarms.values()
1491
- ].map((value) => this.join(value)));
1492
- }
1493
- async close() {
1494
- if (this._ctx.disposed) {
1495
- return;
1496
- }
1497
- const joinedSwarmsCopy = new ComplexSet3(({ topic, peer }) => topic.toHex() + peer.peerKey, [
1498
- ...this._joinedSwarms.values()
1499
- ]);
1500
- await Promise.all([
1501
- ...this._joinedSwarms.values()
1502
- ].map((value) => this.leave(value)));
1503
- this._joinedSwarms = joinedSwarmsCopy;
1504
- await this._ctx.dispose();
1505
- }
1506
- getStatus() {
1507
- return [];
1508
- }
1509
- async join({ topic, peer }) {
1510
- invariant4(!this._ctx.disposed, "Closed", {
1511
- F: __dxlog_file5,
1512
- L: 92,
1513
- S: this,
1514
- A: [
1515
- "!this._ctx.disposed",
1516
- "'Closed'"
1517
- ]
1518
- });
1519
- this._joinedSwarms.add({
1520
- topic,
1521
- peer
1522
- });
1523
- if (!this._context.swarms.has(topic)) {
1524
- this._context.swarms.set(topic, new ComplexSet3(PeerInfoHash));
1525
- }
1526
- this._context.swarms.get(topic).add(peer);
1527
- this._context.swarmEvent.emit({
1528
- topic,
1529
- peerAvailable: {
1530
- peer,
1531
- since: /* @__PURE__ */ new Date()
1532
- }
1533
- });
1534
- for (const [topic2, peers] of this._context.swarms) {
1535
- Array.from(peers).forEach((peer2) => {
1536
- this.swarmEvent.emit({
1537
- topic: topic2,
1538
- peerAvailable: {
1539
- peer: peer2,
1540
- since: /* @__PURE__ */ new Date()
1541
- }
1542
- });
1543
- });
1544
- }
1545
- }
1546
- async leave({ topic, peer }) {
1547
- invariant4(!this._ctx.disposed, "Closed", {
1548
- F: __dxlog_file5,
1549
- L: 124,
1550
- S: this,
1551
- A: [
1552
- "!this._ctx.disposed",
1553
- "'Closed'"
1554
- ]
1555
- });
1556
- this._joinedSwarms.delete({
1557
- topic,
1558
- peer
1559
- });
1560
- if (!this._context.swarms.has(topic)) {
1561
- this._context.swarms.set(topic, new ComplexSet3(PeerInfoHash));
1562
- }
1563
- this._context.swarms.get(topic).delete(peer);
1564
- const swarmEvent = {
1565
- topic,
1566
- peerLeft: {
1567
- peer
1568
- }
1569
- };
1570
- this._context.swarmEvent.emit(swarmEvent);
1571
- }
1572
- async query(request) {
1573
- throw new Error("Not implemented");
1574
- }
1575
- async sendMessage({ author, recipient, payload }) {
1576
- log5("send message", {
1577
- author,
1578
- recipient,
1579
- ...dec(payload)
1580
- }, {
1581
- F: __dxlog_file5,
1582
- L: 157,
1583
- S: this,
1584
- C: (f, a) => f(...a)
1585
- });
1586
- invariant4(recipient, void 0, {
1587
- F: __dxlog_file5,
1588
- L: 159,
1589
- S: this,
1590
- A: [
1591
- "recipient",
1592
- ""
1593
- ]
1594
- });
1595
- invariant4(!this._ctx.disposed, "Closed", {
1596
- F: __dxlog_file5,
1597
- L: 160,
1598
- S: this,
1599
- A: [
1600
- "!this._ctx.disposed",
1601
- "'Closed'"
1602
- ]
1603
- });
1604
- await this._freezeTrigger.wait();
1605
- const remote = this._context.connections.get(recipient);
1606
- if (!remote) {
1607
- log5.warn("recipient is not subscribed for messages", {
1608
- author,
1609
- recipient
1610
- }, {
1611
- F: __dxlog_file5,
1612
- L: 166,
1613
- S: this,
1614
- C: (f, a) => f(...a)
1615
- });
1616
- return;
1617
- }
1618
- if (remote._ctx.disposed) {
1619
- log5.warn("recipient is disposed", {
1620
- author,
1621
- recipient
1622
- }, {
1623
- F: __dxlog_file5,
1624
- L: 171,
1625
- S: this,
1626
- C: (f, a) => f(...a)
1627
- });
1628
- return;
1629
- }
1630
- remote._freezeTrigger.wait().then(() => {
1631
- if (remote._ctx.disposed) {
1632
- log5.warn("recipient is disposed", {
1633
- author,
1634
- recipient
1635
- }, {
1636
- F: __dxlog_file5,
1637
- L: 179,
1638
- S: this,
1639
- C: (f, a) => f(...a)
1640
- });
1641
- return;
1642
- }
1643
- log5("receive message", {
1644
- author,
1645
- recipient,
1646
- ...dec(payload)
1647
- }, {
1648
- F: __dxlog_file5,
1649
- L: 183,
1650
- S: this,
1651
- C: (f, a) => f(...a)
1652
- });
1653
- remote.onMessage.emit({
1654
- author,
1655
- recipient,
1656
- payload
1657
- });
1658
- }).catch((err) => {
1659
- log5.error("error while waiting for freeze", {
1660
- err
1661
- }, {
1662
- F: __dxlog_file5,
1663
- L: 188,
1664
- S: this,
1665
- C: (f, a) => f(...a)
1666
- });
1667
- });
1668
- }
1669
- async subscribeMessages(peerInfo) {
1670
- log5("subscribing", {
1671
- peerInfo
1672
- }, {
1673
- F: __dxlog_file5,
1674
- L: 193,
1675
- S: this,
1676
- C: (f, a) => f(...a)
1677
- });
1678
- this._context.connections.set(peerInfo, this);
1679
- }
1680
- async unsubscribeMessages(peerInfo) {
1681
- log5("unsubscribing", {
1682
- peerInfo
1683
- }, {
1684
- F: __dxlog_file5,
1685
- L: 198,
1686
- S: this,
1687
- C: (f, a) => f(...a)
1688
- });
1689
- this._context.connections.delete(peerInfo);
1690
- }
1691
- freeze() {
1692
- this._freezeTrigger.reset();
1693
- }
1694
- unfreeze() {
1695
- this._freezeTrigger.wake();
1696
- }
1697
- };
1698
- var dec = (payload) => {
1699
- if (!payload.type_url.endsWith("ReliablePayload")) {
1700
- return {};
1701
- }
1702
- const relPayload = schema3.getCodecForType("dxos.mesh.messaging.ReliablePayload").decode(payload.value);
1703
- if (typeof relPayload?.payload?.data === "object") {
1704
- return {
1705
- payload: Object.keys(relPayload?.payload?.data)[0],
1706
- sessionId: relPayload?.payload?.sessionId
1707
- };
1708
- }
1709
- return {};
1710
- };
1711
-
1712
1026
  // src/signal-manager/websocket-signal-manager.ts
1713
- import { Event as Event4, sleep as sleep2, synchronized } from "@dxos/async";
1027
+ import { Event as Event3, sleep as sleep2, synchronized } from "@dxos/async";
1714
1028
  import { LifecycleState, Resource as Resource2 } from "@dxos/context";
1715
- import { invariant as invariant5 } from "@dxos/invariant";
1716
- import { PublicKey as PublicKey6 } from "@dxos/keys";
1717
- import { log as log6 } from "@dxos/log";
1718
- import { RateLimitExceededError, TimeoutError as TimeoutError3, trace as trace8 } from "@dxos/protocols";
1029
+ import { invariant as invariant3 } from "@dxos/invariant";
1030
+ import { PublicKey as PublicKey4 } from "@dxos/keys";
1031
+ import { log as log4 } from "@dxos/log";
1032
+ import { RateLimitExceededError, TimeoutError as TimeoutError2, trace as trace6 } from "@dxos/protocols";
1719
1033
  import { BitField, safeAwaitAll as safeAwaitAll2 } from "@dxos/util";
1720
1034
 
1721
1035
  // src/signal-manager/websocket-signal-manager-monitor.ts
1722
- import { trace as trace7 } from "@dxos/tracing";
1036
+ import { trace as trace5 } from "@dxos/tracing";
1723
1037
  var WebsocketSignalManagerMonitor = class {
1724
1038
  recordRateLimitExceeded() {
1725
- trace7.metrics.increment("dxos.mesh.signal.signal-manager.rate-limit-hit", 1);
1039
+ trace5.metrics.increment("dxos.mesh.signal.signal-manager.rate-limit-hit", 1);
1726
1040
  }
1727
1041
  recordServerFailure(params) {
1728
- trace7.metrics.increment("dxos.mesh.signal.signal-manager.server-failure", 1, {
1042
+ trace5.metrics.increment("dxos.mesh.signal.signal-manager.server-failure", 1, {
1729
1043
  tags: {
1730
1044
  server: params.serverName,
1731
1045
  restarted: params.willRestart
@@ -1741,30 +1055,30 @@ function _ts_decorate(decorators, target, key, desc) {
1741
1055
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1742
1056
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1743
1057
  }
1744
- var __dxlog_file6 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts";
1058
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts";
1745
1059
  var MAX_SERVER_FAILURES = 5;
1746
1060
  var WSS_SIGNAL_SERVER_REBOOT_DELAY = 3e3;
1747
1061
  var WebsocketSignalManager = class extends Resource2 {
1748
1062
  _hosts;
1749
1063
  _getMetadata;
1750
- _servers;
1751
- _monitor;
1064
+ _servers = /* @__PURE__ */ new Map();
1065
+ _monitor = new WebsocketSignalManagerMonitor();
1752
1066
  /**
1753
1067
  * Used to avoid logging failed server restarts more than once until the server actually recovers.
1754
1068
  */
1755
1069
  _failedServersBitfield;
1756
- failureCount;
1757
- statusChanged;
1758
- swarmEvent;
1759
- onMessage;
1760
- _instanceId;
1070
+ failureCount = /* @__PURE__ */ new Map();
1071
+ statusChanged = new Event3();
1072
+ swarmEvent = new Event3();
1073
+ onMessage = new Event3();
1074
+ _instanceId = PublicKey4.random().toHex();
1761
1075
  constructor(_hosts, _getMetadata) {
1762
- super(), this._hosts = _hosts, this._getMetadata = _getMetadata, this._servers = /* @__PURE__ */ new Map(), this._monitor = new WebsocketSignalManagerMonitor(), this.failureCount = /* @__PURE__ */ new Map(), this.statusChanged = new Event4(), this.swarmEvent = new Event4(), this.onMessage = new Event4(), this._instanceId = PublicKey6.random().toHex();
1763
- log6("Created WebsocketSignalManager", {
1076
+ super(), this._hosts = _hosts, this._getMetadata = _getMetadata;
1077
+ log4("Created WebsocketSignalManager", {
1764
1078
  hosts: this._hosts
1765
1079
  }, {
1766
- F: __dxlog_file6,
1767
- L: 59,
1080
+ F: __dxlog_file4,
1081
+ L: 58,
1768
1082
  S: this,
1769
1083
  C: (f, a) => f(...a)
1770
1084
  });
@@ -1782,28 +1096,28 @@ var WebsocketSignalManager = class extends Resource2 {
1782
1096
  this._failedServersBitfield = BitField.zeros(this._hosts.length);
1783
1097
  }
1784
1098
  async _open() {
1785
- log6("open signal manager", {
1099
+ log4("open signal manager", {
1786
1100
  hosts: this._hosts
1787
1101
  }, {
1788
- F: __dxlog_file6,
1789
- L: 79,
1102
+ F: __dxlog_file4,
1103
+ L: 78,
1790
1104
  S: this,
1791
1105
  C: (f, a) => f(...a)
1792
1106
  });
1793
- log6.trace("dxos.mesh.websocket-signal-manager.open", trace8.begin({
1107
+ log4.trace("dxos.mesh.websocket-signal-manager.open", trace6.begin({
1794
1108
  id: this._instanceId
1795
1109
  }), {
1796
- F: __dxlog_file6,
1797
- L: 80,
1110
+ F: __dxlog_file4,
1111
+ L: 79,
1798
1112
  S: this,
1799
1113
  C: (f, a) => f(...a)
1800
1114
  });
1801
1115
  await safeAwaitAll2(this._servers.values(), (server) => server.open());
1802
- log6.trace("dxos.mesh.websocket-signal-manager.open", trace8.end({
1116
+ log4.trace("dxos.mesh.websocket-signal-manager.open", trace6.end({
1803
1117
  id: this._instanceId
1804
1118
  }), {
1805
- F: __dxlog_file6,
1806
- L: 84,
1119
+ F: __dxlog_file4,
1120
+ L: 83,
1807
1121
  S: this,
1808
1122
  C: (f, a) => f(...a)
1809
1123
  });
@@ -1812,17 +1126,17 @@ var WebsocketSignalManager = class extends Resource2 {
1812
1126
  await safeAwaitAll2(this._servers.values(), (server) => server.close());
1813
1127
  }
1814
1128
  async restartServer(serverName) {
1815
- log6("restarting server", {
1129
+ log4("restarting server", {
1816
1130
  serverName
1817
1131
  }, {
1818
- F: __dxlog_file6,
1819
- L: 92,
1132
+ F: __dxlog_file4,
1133
+ L: 91,
1820
1134
  S: this,
1821
1135
  C: (f, a) => f(...a)
1822
1136
  });
1823
- invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1824
- F: __dxlog_file6,
1825
- L: 93,
1137
+ invariant3(this._lifecycleState === LifecycleState.OPEN, void 0, {
1138
+ F: __dxlog_file4,
1139
+ L: 92,
1826
1140
  S: this,
1827
1141
  A: [
1828
1142
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1830,9 +1144,9 @@ var WebsocketSignalManager = class extends Resource2 {
1830
1144
  ]
1831
1145
  });
1832
1146
  const server = this._servers.get(serverName);
1833
- invariant5(server, "server not found", {
1834
- F: __dxlog_file6,
1835
- L: 96,
1147
+ invariant3(server, "server not found", {
1148
+ F: __dxlog_file4,
1149
+ L: 95,
1836
1150
  S: this,
1837
1151
  A: [
1838
1152
  "server",
@@ -1846,69 +1160,69 @@ var WebsocketSignalManager = class extends Resource2 {
1846
1160
  getStatus() {
1847
1161
  return Array.from(this._servers.values()).map((server) => server.getStatus());
1848
1162
  }
1849
- async join({ topic, peer }) {
1850
- log6("join", {
1163
+ async join(_ctx, { topic, peer }) {
1164
+ log4("join", {
1851
1165
  topic,
1852
1166
  peer
1853
1167
  }, {
1854
- F: __dxlog_file6,
1855
- L: 109,
1168
+ F: __dxlog_file4,
1169
+ L: 108,
1856
1170
  S: this,
1857
1171
  C: (f, a) => f(...a)
1858
1172
  });
1859
- invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1860
- F: __dxlog_file6,
1861
- L: 110,
1173
+ invariant3(this._lifecycleState === LifecycleState.OPEN, void 0, {
1174
+ F: __dxlog_file4,
1175
+ L: 109,
1862
1176
  S: this,
1863
1177
  A: [
1864
1178
  "this._lifecycleState === LifecycleState.OPEN",
1865
1179
  ""
1866
1180
  ]
1867
1181
  });
1868
- await this._forEachServer((server) => server.join({
1182
+ await this._forEachServer((server) => server.join(_ctx, {
1869
1183
  topic,
1870
1184
  peer
1871
1185
  }));
1872
1186
  }
1873
- async leave({ topic, peer }) {
1874
- log6("leaving", {
1187
+ async leave(_ctx, { topic, peer }) {
1188
+ log4("leaving", {
1875
1189
  topic,
1876
1190
  peer
1877
1191
  }, {
1878
- F: __dxlog_file6,
1879
- L: 116,
1192
+ F: __dxlog_file4,
1193
+ L: 115,
1880
1194
  S: this,
1881
1195
  C: (f, a) => f(...a)
1882
1196
  });
1883
- invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1884
- F: __dxlog_file6,
1885
- L: 117,
1197
+ invariant3(this._lifecycleState === LifecycleState.OPEN, void 0, {
1198
+ F: __dxlog_file4,
1199
+ L: 116,
1886
1200
  S: this,
1887
1201
  A: [
1888
1202
  "this._lifecycleState === LifecycleState.OPEN",
1889
1203
  ""
1890
1204
  ]
1891
1205
  });
1892
- await this._forEachServer((server) => server.leave({
1206
+ await this._forEachServer((server) => server.leave(_ctx, {
1893
1207
  topic,
1894
1208
  peer
1895
1209
  }));
1896
1210
  }
1897
- async query({ topic }) {
1211
+ async query(_ctx, { topic }) {
1898
1212
  throw new Error("Not implemented");
1899
1213
  }
1900
- async sendMessage({ author, recipient, payload }) {
1901
- log6("signal", {
1214
+ async sendMessage(_ctx, { author, recipient, payload }) {
1215
+ log4("signal", {
1902
1216
  recipient
1903
1217
  }, {
1904
- F: __dxlog_file6,
1905
- L: 126,
1218
+ F: __dxlog_file4,
1219
+ L: 125,
1906
1220
  S: this,
1907
1221
  C: (f, a) => f(...a)
1908
1222
  });
1909
- invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1910
- F: __dxlog_file6,
1911
- L: 127,
1223
+ invariant3(this._lifecycleState === LifecycleState.OPEN, void 0, {
1224
+ F: __dxlog_file4,
1225
+ L: 126,
1912
1226
  S: this,
1913
1227
  A: [
1914
1228
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1916,37 +1230,37 @@ var WebsocketSignalManager = class extends Resource2 {
1916
1230
  ]
1917
1231
  });
1918
1232
  void this._forEachServer(async (server, serverName, index) => {
1919
- void server.sendMessage({
1233
+ void server.sendMessage(_ctx, {
1920
1234
  author,
1921
1235
  recipient,
1922
1236
  payload
1923
1237
  }).then(() => this._clearServerFailedFlag(serverName, index)).catch((err) => {
1924
1238
  if (err instanceof RateLimitExceededError) {
1925
- log6.info("WSS rate limit exceeded", {
1239
+ log4.info("WSS rate limit exceeded", {
1926
1240
  err
1927
1241
  }, {
1928
- F: __dxlog_file6,
1929
- L: 135,
1242
+ F: __dxlog_file4,
1243
+ L: 134,
1930
1244
  S: this,
1931
1245
  C: (f, a) => f(...a)
1932
1246
  });
1933
1247
  this._monitor.recordRateLimitExceeded();
1934
- } else if (err instanceof TimeoutError3 || err.constructor.name === "TimeoutError") {
1935
- log6.info("WSS sendMessage timeout", {
1248
+ } else if (err instanceof TimeoutError2 || err.constructor.name === "TimeoutError") {
1249
+ log4.info("WSS sendMessage timeout", {
1936
1250
  err
1937
1251
  }, {
1938
- F: __dxlog_file6,
1939
- L: 138,
1252
+ F: __dxlog_file4,
1253
+ L: 137,
1940
1254
  S: this,
1941
1255
  C: (f, a) => f(...a)
1942
1256
  });
1943
1257
  void this.checkServerFailure(serverName, index);
1944
1258
  } else {
1945
- log6.warn(`error sending to ${serverName}`, {
1259
+ log4.warn(`error sending to ${serverName}`, {
1946
1260
  err
1947
1261
  }, {
1948
- F: __dxlog_file6,
1949
- L: 141,
1262
+ F: __dxlog_file4,
1263
+ L: 140,
1950
1264
  S: this,
1951
1265
  C: (f, a) => f(...a)
1952
1266
  });
@@ -1964,12 +1278,12 @@ var WebsocketSignalManager = class extends Resource2 {
1964
1278
  });
1965
1279
  if (isRestartRequired) {
1966
1280
  if (!BitField.get(this._failedServersBitfield, index)) {
1967
- log6.warn("too many failures for ws-server, restarting", {
1281
+ log4.warn("too many failures for ws-server, restarting", {
1968
1282
  serverName,
1969
1283
  failureCount
1970
1284
  }, {
1971
- F: __dxlog_file6,
1972
- L: 155,
1285
+ F: __dxlog_file4,
1286
+ L: 154,
1973
1287
  S: this,
1974
1288
  C: (f, a) => f(...a)
1975
1289
  });
@@ -1983,11 +1297,11 @@ var WebsocketSignalManager = class extends Resource2 {
1983
1297
  }
1984
1298
  _clearServerFailedFlag(serverName, index) {
1985
1299
  if (BitField.get(this._failedServersBitfield, index)) {
1986
- log6.info("server connection restored", {
1300
+ log4.info("server connection restored", {
1987
1301
  serverName
1988
1302
  }, {
1989
- F: __dxlog_file6,
1990
- L: 168,
1303
+ F: __dxlog_file4,
1304
+ L: 167,
1991
1305
  S: this,
1992
1306
  C: (f, a) => f(...a)
1993
1307
  });
@@ -1996,17 +1310,17 @@ var WebsocketSignalManager = class extends Resource2 {
1996
1310
  }
1997
1311
  }
1998
1312
  async subscribeMessages(peer) {
1999
- log6("subscribed for message stream", {
1313
+ log4("subscribed for message stream", {
2000
1314
  peer
2001
1315
  }, {
2002
- F: __dxlog_file6,
2003
- L: 175,
1316
+ F: __dxlog_file4,
1317
+ L: 174,
2004
1318
  S: this,
2005
1319
  C: (f, a) => f(...a)
2006
1320
  });
2007
- invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
2008
- F: __dxlog_file6,
2009
- L: 176,
1321
+ invariant3(this._lifecycleState === LifecycleState.OPEN, void 0, {
1322
+ F: __dxlog_file4,
1323
+ L: 175,
2010
1324
  S: this,
2011
1325
  A: [
2012
1326
  "this._lifecycleState === LifecycleState.OPEN",
@@ -2016,17 +1330,17 @@ var WebsocketSignalManager = class extends Resource2 {
2016
1330
  await this._forEachServer(async (server) => server.subscribeMessages(peer));
2017
1331
  }
2018
1332
  async unsubscribeMessages(peer) {
2019
- log6("subscribed for message stream", {
1333
+ log4("subscribed for message stream", {
2020
1334
  peer
2021
1335
  }, {
2022
- F: __dxlog_file6,
2023
- L: 182,
1336
+ F: __dxlog_file4,
1337
+ L: 181,
2024
1338
  S: this,
2025
1339
  C: (f, a) => f(...a)
2026
1340
  });
2027
- invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
2028
- F: __dxlog_file6,
2029
- L: 183,
1341
+ invariant3(this._lifecycleState === LifecycleState.OPEN, void 0, {
1342
+ F: __dxlog_file4,
1343
+ L: 182,
2030
1344
  S: this,
2031
1345
  A: [
2032
1346
  "this._lifecycleState === LifecycleState.OPEN",
@@ -2050,29 +1364,29 @@ _ts_decorate([
2050
1364
  ], WebsocketSignalManager.prototype, "checkServerFailure", null);
2051
1365
 
2052
1366
  // src/signal-manager/edge-signal-manager.ts
2053
- import { Event as Event5, scheduleMicroTask } from "@dxos/async";
1367
+ import { Event as Event4, scheduleMicroTask } from "@dxos/async";
2054
1368
  import { Resource as Resource3, cancelWithContext as cancelWithContext3 } from "@dxos/context";
2055
- import { protocol } from "@dxos/edge-client";
2056
- import { invariant as invariant6 } from "@dxos/invariant";
2057
- import { PublicKey as PublicKey7 } from "@dxos/keys";
2058
- import { log as log7 } from "@dxos/log";
1369
+ import { EdgeIdentityChangedError, protocol } from "@dxos/edge-client";
1370
+ import { invariant as invariant4 } from "@dxos/invariant";
1371
+ import { PublicKey as PublicKey5 } from "@dxos/keys";
1372
+ import { log as log5 } from "@dxos/log";
2059
1373
  import { EdgeService } from "@dxos/protocols";
2060
1374
  import { bufWkt } from "@dxos/protocols/buf";
2061
1375
  import { SwarmRequest_Action as SwarmRequestAction, SwarmRequestSchema, SwarmResponseSchema } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
2062
- import { ComplexMap as ComplexMap4, ComplexSet as ComplexSet4 } from "@dxos/util";
2063
- var __dxlog_file7 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/edge-signal-manager.ts";
1376
+ import { ComplexMap as ComplexMap2, ComplexSet as ComplexSet2 } from "@dxos/util";
1377
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/edge-signal-manager.ts";
2064
1378
  var EdgeSignalManager = class extends Resource3 {
2065
1379
  /**
2066
1380
  * @deprecated
2067
1381
  */
2068
- swarmEvent = new Event5();
2069
- swarmState = new Event5();
2070
- onMessage = new Event5();
1382
+ swarmEvent = new Event4();
1383
+ swarmState = new Event4();
1384
+ onMessage = new Event4();
2071
1385
  /**
2072
1386
  * Swarm key -> { peer: <own state payload>, joinedPeers: <state of swarm> }.
2073
1387
  */
2074
1388
  // TODO(mykola): This class should not contain swarm state joinedPeers. Temporary before network-manager API changes to accept list of peers.
2075
- _swarmPeers = new ComplexMap4(PublicKey7.hash);
1389
+ _swarmPeers = new ComplexMap2(PublicKey5.hash);
2076
1390
  _edgeConnection;
2077
1391
  constructor({ edgeConnection }) {
2078
1392
  super();
@@ -2087,17 +1401,17 @@ var EdgeSignalManager = class extends Resource3 {
2087
1401
  /**
2088
1402
  * Warning: PeerInfo is inferred from edgeConnection.
2089
1403
  */
2090
- async join({ topic, peer }) {
1404
+ async join(ctx, { topic, peer }) {
2091
1405
  if (!this._matchSelfPeerInfo(peer)) {
2092
- log7.warn("ignoring peer info on join request", {
1406
+ log5.warn("ignoring peer info on join request", {
2093
1407
  peer,
2094
1408
  expected: {
2095
1409
  peerKey: this._edgeConnection.peerKey,
2096
1410
  identityKey: this._edgeConnection.identityKey
2097
1411
  }
2098
1412
  }, {
2099
- F: __dxlog_file7,
2100
- L: 66,
1413
+ F: __dxlog_file5,
1414
+ L: 65,
2101
1415
  S: this,
2102
1416
  C: (f, a) => f(...a)
2103
1417
  });
@@ -2106,9 +1420,9 @@ var EdgeSignalManager = class extends Resource3 {
2106
1420
  }
2107
1421
  this._swarmPeers.set(topic, {
2108
1422
  lastState: peer.state,
2109
- joinedPeers: new ComplexSet4(PeerInfoHash)
1423
+ joinedPeers: new ComplexSet2(PeerInfoHash)
2110
1424
  });
2111
- await this._edgeConnection.send(protocol.createMessage(SwarmRequestSchema, {
1425
+ await this._edgeConnection.send(ctx, protocol.createMessage(SwarmRequestSchema, {
2112
1426
  serviceId: EdgeService.SWARM,
2113
1427
  source: createMessageSource(topic, peer),
2114
1428
  payload: {
@@ -2119,22 +1433,29 @@ var EdgeSignalManager = class extends Resource3 {
2119
1433
  }
2120
1434
  }));
2121
1435
  }
2122
- async leave({ topic, peer }) {
1436
+ async leave(ctx, { topic, peer }) {
2123
1437
  this._swarmPeers.delete(topic);
2124
- await this._edgeConnection.send(protocol.createMessage(SwarmRequestSchema, {
2125
- serviceId: EdgeService.SWARM,
2126
- source: createMessageSource(topic, peer),
2127
- payload: {
2128
- action: SwarmRequestAction.LEAVE,
2129
- swarmKeys: [
2130
- topic.toHex()
2131
- ]
1438
+ try {
1439
+ await this._edgeConnection.send(ctx, protocol.createMessage(SwarmRequestSchema, {
1440
+ serviceId: EdgeService.SWARM,
1441
+ source: createMessageSource(topic, peer),
1442
+ payload: {
1443
+ action: SwarmRequestAction.LEAVE,
1444
+ swarmKeys: [
1445
+ topic.toHex()
1446
+ ]
1447
+ }
1448
+ }));
1449
+ } catch (err) {
1450
+ if (err instanceof EdgeIdentityChangedError) {
1451
+ return;
2132
1452
  }
2133
- }));
1453
+ throw err;
1454
+ }
2134
1455
  }
2135
- async query({ topic }) {
1456
+ async query(ctx, { topic }) {
2136
1457
  const response = cancelWithContext3(this._ctx, this.swarmState.waitFor((state) => state.swarmKey === topic.toHex()));
2137
- await this._edgeConnection.send(protocol.createMessage(SwarmRequestSchema, {
1458
+ await this._edgeConnection.send(ctx, protocol.createMessage(SwarmRequestSchema, {
2138
1459
  serviceId: EdgeService.SWARM,
2139
1460
  source: createMessageSource(topic, {
2140
1461
  peerKey: this._edgeConnection.peerKey,
@@ -2149,22 +1470,22 @@ var EdgeSignalManager = class extends Resource3 {
2149
1470
  }));
2150
1471
  return response;
2151
1472
  }
2152
- async sendMessage(message) {
1473
+ async sendMessage(ctx, message) {
2153
1474
  if (!this._matchSelfPeerInfo(message.author)) {
2154
- log7.warn("ignoring author on send request", {
1475
+ log5.warn("ignoring author on send request", {
2155
1476
  author: message.author,
2156
1477
  expected: {
2157
1478
  peerKey: this._edgeConnection.peerKey,
2158
1479
  identityKey: this._edgeConnection.identityKey
2159
1480
  }
2160
1481
  }, {
2161
- F: __dxlog_file7,
2162
- L: 122,
1482
+ F: __dxlog_file5,
1483
+ L: 133,
2163
1484
  S: this,
2164
1485
  C: (f, a) => f(...a)
2165
1486
  });
2166
1487
  }
2167
- await this._edgeConnection.send(protocol.createMessage(bufWkt.AnySchema, {
1488
+ await this._edgeConnection.send(ctx, protocol.createMessage(bufWkt.AnySchema, {
2168
1489
  serviceId: EdgeService.SIGNAL,
2169
1490
  source: message.author,
2170
1491
  target: [
@@ -2192,9 +1513,9 @@ var EdgeSignalManager = class extends Resource3 {
2192
1513
  }
2193
1514
  }
2194
1515
  _processSwarmResponse(message) {
2195
- invariant6(protocol.getPayloadType(message) === SwarmResponseSchema.typeName, "Wrong payload type", {
2196
- F: __dxlog_file7,
2197
- L: 159,
1516
+ invariant4(protocol.getPayloadType(message) === SwarmResponseSchema.typeName, "Wrong payload type", {
1517
+ F: __dxlog_file5,
1518
+ L: 171,
2198
1519
  S: this,
2199
1520
  A: [
2200
1521
  "protocol.getPayloadType(message) === SwarmResponseSchema.typeName",
@@ -2203,13 +1524,13 @@ var EdgeSignalManager = class extends Resource3 {
2203
1524
  });
2204
1525
  const payload = protocol.getPayload(message, SwarmResponseSchema);
2205
1526
  this.swarmState.emit(payload);
2206
- const topic = PublicKey7.from(payload.swarmKey);
1527
+ const topic = PublicKey5.from(payload.swarmKey);
2207
1528
  if (!this._swarmPeers.has(topic)) {
2208
1529
  return;
2209
1530
  }
2210
1531
  const { joinedPeers: oldPeers } = this._swarmPeers.get(topic);
2211
1532
  const timestamp = message.timestamp ? new Date(Date.parse(message.timestamp)) : /* @__PURE__ */ new Date();
2212
- const newPeers = new ComplexSet4(PeerInfoHash, payload.peers);
1533
+ const newPeers = new ComplexSet2(PeerInfoHash, payload.peers);
2213
1534
  for (const peer of newPeers) {
2214
1535
  if (oldPeers.has(peer)) {
2215
1536
  continue;
@@ -2236,9 +1557,9 @@ var EdgeSignalManager = class extends Resource3 {
2236
1557
  this._swarmPeers.get(topic).joinedPeers = newPeers;
2237
1558
  }
2238
1559
  _processMessage(message) {
2239
- invariant6(protocol.getPayloadType(message) === bufWkt.AnySchema.typeName, "Wrong payload type", {
2240
- F: __dxlog_file7,
2241
- L: 197,
1560
+ invariant4(protocol.getPayloadType(message) === bufWkt.AnySchema.typeName, "Wrong payload type", {
1561
+ F: __dxlog_file5,
1562
+ L: 209,
2242
1563
  S: this,
2243
1564
  A: [
2244
1565
  "protocol.getPayloadType(message) === bufWkt.AnySchema.typeName",
@@ -2246,27 +1567,27 @@ var EdgeSignalManager = class extends Resource3 {
2246
1567
  ]
2247
1568
  });
2248
1569
  const payload = protocol.getPayload(message, bufWkt.AnySchema);
2249
- invariant6(message.source, "source is missing", {
2250
- F: __dxlog_file7,
2251
- L: 199,
1570
+ invariant4(message.source, "source is missing", {
1571
+ F: __dxlog_file5,
1572
+ L: 211,
2252
1573
  S: this,
2253
1574
  A: [
2254
1575
  "message.source",
2255
1576
  "'source is missing'"
2256
1577
  ]
2257
1578
  });
2258
- invariant6(message.target, "target is missing", {
2259
- F: __dxlog_file7,
2260
- L: 200,
1579
+ invariant4(message.target, "target is missing", {
1580
+ F: __dxlog_file5,
1581
+ L: 212,
2261
1582
  S: this,
2262
1583
  A: [
2263
1584
  "message.target",
2264
1585
  "'target is missing'"
2265
1586
  ]
2266
1587
  });
2267
- invariant6(message.target.length === 1, "target should have exactly one item", {
2268
- F: __dxlog_file7,
2269
- L: 201,
1588
+ invariant4(message.target.length === 1, "target should have exactly one item", {
1589
+ F: __dxlog_file5,
1590
+ L: 213,
2270
1591
  S: this,
2271
1592
  A: [
2272
1593
  "message.target.length === 1",
@@ -2286,16 +1607,16 @@ var EdgeSignalManager = class extends Resource3 {
2286
1607
  return peer && (peer.peerKey === this._edgeConnection.peerKey || peer.identityKey === this._edgeConnection.identityKey);
2287
1608
  }
2288
1609
  async _rejoinAllSwarms() {
2289
- log7("rejoin swarms", {
1610
+ log5("rejoin swarms", {
2290
1611
  swarms: Array.from(this._swarmPeers.keys())
2291
1612
  }, {
2292
- F: __dxlog_file7,
2293
- L: 220,
1613
+ F: __dxlog_file5,
1614
+ L: 232,
2294
1615
  S: this,
2295
1616
  C: (f, a) => f(...a)
2296
1617
  });
2297
1618
  for (const [topic, { lastState }] of this._swarmPeers.entries()) {
2298
- await this.join({
1619
+ await this.join(this._ctx, {
2299
1620
  topic,
2300
1621
  peer: {
2301
1622
  peerKey: this._edgeConnection.peerKey,
@@ -2314,17 +1635,17 @@ var createMessageSource = (topic, peerInfo) => {
2314
1635
  };
2315
1636
 
2316
1637
  // src/signal-manager/utils.ts
2317
- import { invariant as invariant7 } from "@dxos/invariant";
2318
- import { log as log8 } from "@dxos/log";
1638
+ import { invariant as invariant5 } from "@dxos/invariant";
1639
+ import { log as log6 } from "@dxos/log";
2319
1640
  import { DeviceKind } from "@dxos/protocols/proto/dxos/client/services";
2320
- var __dxlog_file8 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/utils.ts";
1641
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/utils.ts";
2321
1642
  var setIdentityTags = ({ identityService, devicesService, setTag }) => {
2322
1643
  identityService.queryIdentity().subscribe((idqr) => {
2323
1644
  if (!idqr?.identity?.identityKey) {
2324
- log8("empty response from identity service", {
1645
+ log6("empty response from identity service", {
2325
1646
  idqr
2326
1647
  }, {
2327
- F: __dxlog_file8,
1648
+ F: __dxlog_file6,
2328
1649
  L: 21,
2329
1650
  S: void 0,
2330
1651
  C: (f, a) => f(...a)
@@ -2335,18 +1656,18 @@ var setIdentityTags = ({ identityService, devicesService, setTag }) => {
2335
1656
  });
2336
1657
  devicesService.queryDevices().subscribe((dqr) => {
2337
1658
  if (!dqr || !dqr.devices || dqr.devices.length === 0) {
2338
- log8("empty response from device service", {
1659
+ log6("empty response from device service", {
2339
1660
  device: dqr
2340
1661
  }, {
2341
- F: __dxlog_file8,
1662
+ F: __dxlog_file6,
2342
1663
  L: 30,
2343
1664
  S: void 0,
2344
1665
  C: (f, a) => f(...a)
2345
1666
  });
2346
1667
  return;
2347
1668
  }
2348
- invariant7(dqr, "empty response from device service", {
2349
- F: __dxlog_file8,
1669
+ invariant5(dqr, "empty response from device service", {
1670
+ F: __dxlog_file6,
2350
1671
  L: 33,
2351
1672
  S: void 0,
2352
1673
  A: [
@@ -2356,10 +1677,10 @@ var setIdentityTags = ({ identityService, devicesService, setTag }) => {
2356
1677
  });
2357
1678
  const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);
2358
1679
  if (!thisDevice) {
2359
- log8("no current device", {
1680
+ log6("no current device", {
2360
1681
  device: dqr
2361
1682
  }, {
2362
- F: __dxlog_file8,
1683
+ F: __dxlog_file6,
2363
1684
  L: 37,
2364
1685
  S: void 0,
2365
1686
  C: (f, a) => f(...a)
@@ -2369,15 +1690,14 @@ var setIdentityTags = ({ identityService, devicesService, setTag }) => {
2369
1690
  setTag("deviceKey", thisDevice.deviceKey.truncate());
2370
1691
  });
2371
1692
  };
2372
-
2373
1693
  export {
1694
+ EdgeSignalManager,
1695
+ MemorySignalManager,
1696
+ MemorySignalManagerContext,
2374
1697
  Messenger,
2375
- SignalClient,
2376
1698
  PeerInfoHash,
2377
- MemorySignalManagerContext,
2378
- MemorySignalManager,
1699
+ SignalClient,
2379
1700
  WebsocketSignalManager,
2380
- EdgeSignalManager,
2381
1701
  setIdentityTags
2382
1702
  };
2383
- //# sourceMappingURL=chunk-TPBTNKLU.mjs.map
1703
+ //# sourceMappingURL=index.mjs.map