@dxos/messaging 0.8.4-main.3a94e84 → 0.8.4-main.3c1ae3b

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 (57) hide show
  1. package/dist/lib/browser/{chunk-QLQS7TUS.mjs → chunk-4EMAT5U7.mjs} +225 -151
  2. package/dist/lib/browser/chunk-4EMAT5U7.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +11 -5
  6. package/dist/lib/browser/testing/index.mjs.map +3 -3
  7. package/dist/lib/node-esm/{chunk-GIM3VIFP.mjs → chunk-BZPNU44D.mjs} +225 -151
  8. package/dist/lib/node-esm/chunk-BZPNU44D.mjs.map +7 -0
  9. package/dist/lib/node-esm/index.mjs +1 -1
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/testing/index.mjs +11 -5
  12. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  13. package/dist/types/src/messenger.blueprint-test.d.ts.map +1 -1
  14. package/dist/types/src/messenger.d.ts +1 -1
  15. package/dist/types/src/messenger.d.ts.map +1 -1
  16. package/dist/types/src/signal-client/signal-client.d.ts +2 -2
  17. package/dist/types/src/signal-client/signal-client.d.ts.map +1 -1
  18. package/dist/types/src/signal-client/signal-local-state.d.ts +1 -1
  19. package/dist/types/src/signal-client/signal-local-state.d.ts.map +1 -1
  20. package/dist/types/src/signal-client/signal-rpc-client.d.ts.map +1 -1
  21. package/dist/types/src/signal-manager/edge-signal-manager.d.ts +1 -1
  22. package/dist/types/src/signal-manager/edge-signal-manager.d.ts.map +1 -1
  23. package/dist/types/src/signal-manager/memory-signal-manager.d.ts +1 -1
  24. package/dist/types/src/signal-manager/memory-signal-manager.d.ts.map +1 -1
  25. package/dist/types/src/signal-manager/signal-manager.d.ts +1 -1
  26. package/dist/types/src/signal-manager/signal-manager.d.ts.map +1 -1
  27. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts +1 -1
  28. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts.map +1 -1
  29. package/dist/types/src/signal-methods.d.ts +2 -2
  30. package/dist/types/src/signal-methods.d.ts.map +1 -1
  31. package/dist/types/src/testing/test-builder.d.ts +1 -1
  32. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  33. package/dist/types/src/testing/test-peer.d.ts +1 -1
  34. package/dist/types/src/testing/test-peer.d.ts.map +1 -1
  35. package/dist/types/src/testing/utils.d.ts +1 -1
  36. package/dist/types/src/testing/utils.d.ts.map +1 -1
  37. package/dist/types/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +18 -16
  39. package/src/messenger.blueprint-test.ts +2 -2
  40. package/src/messenger.node.test.ts +7 -38
  41. package/src/messenger.ts +5 -5
  42. package/src/signal-client/signal-client.node.test.ts +4 -3
  43. package/src/signal-client/signal-client.ts +7 -6
  44. package/src/signal-client/signal-local-state.ts +4 -3
  45. package/src/signal-client/signal-rpc-client.node.test.ts +1 -1
  46. package/src/signal-client/signal-rpc-client.ts +3 -3
  47. package/src/signal-manager/edge-signal-manager.ts +23 -13
  48. package/src/signal-manager/memory-signal-manager.ts +2 -1
  49. package/src/signal-manager/signal-manager.ts +1 -1
  50. package/src/signal-manager/websocket-signal-manager.node.test.ts +3 -2
  51. package/src/signal-manager/websocket-signal-manager.ts +4 -3
  52. package/src/signal-methods.ts +3 -3
  53. package/src/testing/test-builder.ts +3 -2
  54. package/src/testing/test-peer.ts +3 -2
  55. package/src/testing/utils.ts +3 -2
  56. package/dist/lib/browser/chunk-QLQS7TUS.mjs.map +0 -7
  57. package/dist/lib/node-esm/chunk-GIM3VIFP.mjs.map +0 -7
@@ -35,19 +35,22 @@ var ReliablePayload = schema.getCodecForType("dxos.mesh.messaging.ReliablePayloa
35
35
  var Acknowledgement = schema.getCodecForType("dxos.mesh.messaging.Acknowledgement");
36
36
  var RECEIVED_MESSAGES_GC_INTERVAL = 12e4;
37
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;
38
53
  constructor({ signalManager, retryDelay = 1e3 }) {
39
- this._monitor = new MessengerMonitor();
40
- // { peerId, payloadType } => listeners set
41
- this._listeners = new ComplexMap(({ peerId, payloadType }) => peerId + payloadType);
42
- // peerId => listeners set
43
- this._defaultListeners = /* @__PURE__ */ new Map();
44
- this._onAckCallbacks = new ComplexMap(PublicKey.hash);
45
- this._receivedMessages = new ComplexSet(PublicKey.hash);
46
- /**
47
- * Keys scheduled to be cleared from _receivedMessages on the next iteration.
48
- */
49
- this._toClear = new ComplexSet(PublicKey.hash);
50
- this._closed = true;
51
54
  this._signalManager = signalManager;
52
55
  this._retryDelay = retryDelay;
53
56
  this.open();
@@ -181,7 +184,10 @@ var Messenger = class {
181
184
  C: (f, a) => f(...a)
182
185
  });
183
186
  this._onAckCallbacks.delete(reliablePayload.messageId);
184
- timeoutHit(new ProtocolTimeoutError("signaling message not delivered", new TimeoutError(MESSAGE_TIMEOUT, "Message not delivered")));
187
+ timeoutHit(new ProtocolTimeoutError({
188
+ message: "signaling message not delivered",
189
+ cause: new TimeoutError(MESSAGE_TIMEOUT, "Message not delivered")
190
+ }));
185
191
  void messageContext.dispose();
186
192
  this._monitor.recordReliableMessage({
187
193
  sendAttempts,
@@ -411,7 +417,7 @@ var Messenger = class {
411
417
 
412
418
  // src/signal-client/signal-client.ts
413
419
  import { DeferredTask, Event as Event2, Trigger as Trigger2, scheduleTask as scheduleTask2, scheduleTaskInterval as scheduleTaskInterval3, sleep } from "@dxos/async";
414
- import { cancelWithContext as cancelWithContext2, Resource } from "@dxos/context";
420
+ import { Resource, cancelWithContext as cancelWithContext2 } from "@dxos/context";
415
421
  import { invariant as invariant3 } from "@dxos/invariant";
416
422
  import { PublicKey as PublicKey4 } from "@dxos/keys";
417
423
  import { log as log4 } from "@dxos/log";
@@ -421,23 +427,21 @@ import { SignalState } from "@dxos/protocols/proto/dxos/mesh/signal";
421
427
  // src/signal-client/signal-client-monitor.ts
422
428
  import { trace as trace3 } from "@dxos/tracing";
423
429
  var SignalClientMonitor = class {
424
- constructor() {
425
- this._performance = {
426
- sentMessages: 0,
427
- receivedMessages: 0,
428
- reconnectCounter: 0,
429
- joinCounter: 0,
430
- leaveCounter: 0
431
- };
432
- /**
433
- * Timestamp of when the connection attempt was began.
434
- */
435
- this._connectionStarted = /* @__PURE__ */ new Date();
436
- /**
437
- * Timestamp of last state change.
438
- */
439
- this._lastStateChange = /* @__PURE__ */ new Date();
440
- }
430
+ _performance = {
431
+ sentMessages: 0,
432
+ receivedMessages: 0,
433
+ reconnectCounter: 0,
434
+ joinCounter: 0,
435
+ leaveCounter: 0
436
+ };
437
+ /**
438
+ * Timestamp of when the connection attempt was began.
439
+ */
440
+ _connectionStarted = /* @__PURE__ */ new Date();
441
+ /**
442
+ * Timestamp of last state change.
443
+ */
444
+ _lastStateChange = /* @__PURE__ */ new Date();
441
445
  getRecordedTimestamps() {
442
446
  return {
443
447
  connectionStarted: this._connectionStarted,
@@ -518,21 +522,40 @@ var createIdentityTags = (message) => {
518
522
  };
519
523
 
520
524
  // src/signal-client/signal-local-state.ts
521
- import { asyncTimeout, Event } from "@dxos/async";
525
+ import { Event, asyncTimeout } from "@dxos/async";
522
526
  import { cancelWithContext } from "@dxos/context";
523
527
  import { PublicKey as PublicKey2 } from "@dxos/keys";
524
528
  import { log as log2 } from "@dxos/log";
525
529
  import { ComplexMap as ComplexMap2, ComplexSet as ComplexSet2, safeAwaitAll } from "@dxos/util";
526
530
  var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-local-state.ts";
527
531
  var SignalLocalState = class {
532
+ _onMessage;
533
+ _onSwarmEvent;
534
+ /**
535
+ * Swarm events streams. Keys represent actually joined topic and peerId.
536
+ */
537
+ _swarmStreams = new ComplexMap2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
538
+ /**
539
+ * Represent desired joined topic and peerId.
540
+ */
541
+ _joinedTopics = new ComplexSet2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
542
+ /**
543
+ * Represent desired message subscriptions.
544
+ */
545
+ _subscribedMessages = new ComplexSet2(({ peerId }) => peerId.toHex());
546
+ /**
547
+ * Message streams. Keys represents actually subscribed peers.
548
+ * @internal
549
+ */
550
+ messageStreams = new ComplexMap2((key) => key.toHex());
551
+ /**
552
+ * Event to use in tests to wait till subscription is successfully established.
553
+ * @internal
554
+ */
555
+ reconciled = new Event();
528
556
  constructor(_onMessage, _onSwarmEvent) {
529
557
  this._onMessage = _onMessage;
530
558
  this._onSwarmEvent = _onSwarmEvent;
531
- this._swarmStreams = new ComplexMap2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
532
- this._joinedTopics = new ComplexSet2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
533
- this._subscribedMessages = new ComplexSet2(({ peerId }) => peerId.toHex());
534
- this.messageStreams = new ComplexMap2((key) => key.toHex());
535
- this.reconciled = new Event();
536
559
  }
537
560
  async safeCloseStreams() {
538
561
  const streams = [
@@ -577,7 +600,7 @@ var SignalLocalState = class {
577
600
  peerId
578
601
  }, {
579
602
  F: __dxlog_file2,
580
- L: 79,
603
+ L: 80,
581
604
  S: this,
582
605
  C: (f, a) => f(...a)
583
606
  });
@@ -629,7 +652,7 @@ var SignalLocalState = class {
629
652
  swarmEvent
630
653
  }, {
631
654
  F: __dxlog_file2,
632
- L: 115,
655
+ L: 116,
633
656
  S: this,
634
657
  C: (f, a) => f(...a)
635
658
  });
@@ -697,7 +720,7 @@ var SignalLocalState = class {
697
720
 
698
721
  // src/signal-client/signal-rpc-client.ts
699
722
  import WebSocket from "isomorphic-ws";
700
- import { scheduleTaskInterval as scheduleTaskInterval2, TimeoutError as TimeoutError2, Trigger } from "@dxos/async";
723
+ import { TimeoutError as TimeoutError2, Trigger, scheduleTaskInterval as scheduleTaskInterval2 } from "@dxos/async";
701
724
  import { Context as Context2 } from "@dxos/context";
702
725
  import { invariant as invariant2 } from "@dxos/invariant";
703
726
  import { PublicKey as PublicKey3 } from "@dxos/keys";
@@ -722,11 +745,16 @@ var SignalRpcClientMonitor = class {
722
745
  var __dxlog_file3 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts";
723
746
  var SIGNAL_KEEPALIVE_INTERVAL = 1e4;
724
747
  var SignalRPCClient = class {
748
+ _socket;
749
+ _rpc;
750
+ _connectTrigger = new Trigger();
751
+ _keepaliveCtx;
752
+ _closed = false;
753
+ _url;
754
+ _callbacks;
755
+ _closeComplete = new Trigger();
756
+ _monitor = new SignalRpcClientMonitor();
725
757
  constructor({ url, callbacks = {} }) {
726
- this._connectTrigger = new Trigger();
727
- this._closed = false;
728
- this._closeComplete = new Trigger();
729
- this._monitor = new SignalRpcClientMonitor();
730
758
  const traceId = PublicKey3.random().toHex();
731
759
  log3.trace("dxos.mesh.signal-rpc-client.constructor", trace5.begin({
732
760
  id: traceId
@@ -966,6 +994,29 @@ var MAX_RECONNECT_TIMEOUT = 5e3;
966
994
  var ERROR_RECONCILE_DELAY = 1e3;
967
995
  var RECONCILE_INTERVAL = 5e3;
968
996
  var SignalClient = class extends Resource {
997
+ _host;
998
+ _getMetadata;
999
+ _monitor = new SignalClientMonitor();
1000
+ _state = SignalState.CLOSED;
1001
+ _lastError;
1002
+ _lastReconciliationFailed = false;
1003
+ _clientReady = new Trigger2();
1004
+ _connectionCtx;
1005
+ _client;
1006
+ _reconcileTask;
1007
+ _reconnectTask;
1008
+ /**
1009
+ * Number of milliseconds after which the connection will be attempted again in case of error.
1010
+ */
1011
+ _reconnectAfter = DEFAULT_RECONNECT_TIMEOUT;
1012
+ _instanceId = PublicKey4.random().toHex();
1013
+ /**
1014
+ * @internal
1015
+ */
1016
+ localState;
1017
+ statusChanged = new Event2();
1018
+ onMessage = new Event2();
1019
+ swarmEvent = new Event2();
969
1020
  /**
970
1021
  * @param _host Signal server websocket URL.
971
1022
  * @param onMessage called when a new message is received.
@@ -973,7 +1024,7 @@ var SignalClient = class extends Resource {
973
1024
  * @param _getMetadata signal-message metadata provider, called for every message.
974
1025
  */
975
1026
  constructor(_host, _getMetadata) {
976
- 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();
1027
+ super(), this._host = _host, this._getMetadata = _getMetadata;
977
1028
  if (!this._host.startsWith("wss://") && !this._host.startsWith("ws://")) {
978
1029
  throw new Error(`Signal server requires a websocket URL. Provided: ${this._host}`);
979
1030
  }
@@ -987,7 +1038,7 @@ var SignalClient = class extends Resource {
987
1038
  id: this._instanceId
988
1039
  }), {
989
1040
  F: __dxlog_file4,
990
- L: 96,
1041
+ L: 97,
991
1042
  S: this,
992
1043
  C: (f, a) => f(...a)
993
1044
  });
@@ -1005,7 +1056,7 @@ var SignalClient = class extends Resource {
1005
1056
  }));
1006
1057
  invariant3(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
1007
1058
  F: __dxlog_file4,
1008
- L: 106,
1059
+ L: 107,
1009
1060
  S: this,
1010
1061
  A: [
1011
1062
  "this._state === SignalState.CONNECTED",
@@ -1048,7 +1099,7 @@ var SignalClient = class extends Resource {
1048
1099
  id: this._instanceId
1049
1100
  }), {
1050
1101
  F: __dxlog_file4,
1051
- L: 139,
1102
+ L: 140,
1052
1103
  S: this,
1053
1104
  C: (f, a) => f(...a)
1054
1105
  });
@@ -1060,7 +1111,7 @@ var SignalClient = class extends Resource {
1060
1111
  if (this._state === SignalState.CONNECTED && !this._lastReconciliationFailed) {
1061
1112
  log4.warn("SignalClient error:", err, {
1062
1113
  F: __dxlog_file4,
1063
- L: 148,
1114
+ L: 149,
1064
1115
  S: this,
1065
1116
  C: (f, a) => f(...a)
1066
1117
  });
@@ -1070,7 +1121,7 @@ var SignalClient = class extends Resource {
1070
1121
  async _close() {
1071
1122
  log4("closing...", void 0, {
1072
1123
  F: __dxlog_file4,
1073
- L: 154,
1124
+ L: 155,
1074
1125
  S: this,
1075
1126
  C: (f, a) => f(...a)
1076
1127
  });
@@ -1083,7 +1134,7 @@ var SignalClient = class extends Resource {
1083
1134
  await this._safeResetClient();
1084
1135
  log4("closed", void 0, {
1085
1136
  F: __dxlog_file4,
1086
- L: 162,
1137
+ L: 163,
1087
1138
  S: this,
1088
1139
  C: (f, a) => f(...a)
1089
1140
  });
@@ -1103,7 +1154,7 @@ var SignalClient = class extends Resource {
1103
1154
  peerId: args.peer.peerKey
1104
1155
  }, {
1105
1156
  F: __dxlog_file4,
1106
- L: 176,
1157
+ L: 177,
1107
1158
  S: this,
1108
1159
  C: (f, a) => f(...a)
1109
1160
  });
@@ -1120,7 +1171,7 @@ var SignalClient = class extends Resource {
1120
1171
  peerId: args.peer.peerKey
1121
1172
  }, {
1122
1173
  F: __dxlog_file4,
1123
- L: 183,
1174
+ L: 184,
1124
1175
  S: this,
1125
1176
  C: (f, a) => f(...a)
1126
1177
  });
@@ -1138,7 +1189,7 @@ var SignalClient = class extends Resource {
1138
1189
  await this._clientReady.wait();
1139
1190
  invariant3(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
1140
1191
  F: __dxlog_file4,
1141
- L: 195,
1192
+ L: 196,
1142
1193
  S: this,
1143
1194
  A: [
1144
1195
  "this._state === SignalState.CONNECTED",
@@ -1147,7 +1198,7 @@ var SignalClient = class extends Resource {
1147
1198
  });
1148
1199
  invariant3(msg.author.peerKey, "Author key required", {
1149
1200
  F: __dxlog_file4,
1150
- L: 196,
1201
+ L: 197,
1151
1202
  S: this,
1152
1203
  A: [
1153
1204
  "msg.author.peerKey",
@@ -1156,7 +1207,7 @@ var SignalClient = class extends Resource {
1156
1207
  });
1157
1208
  invariant3(msg.recipient.peerKey, "Recipient key required", {
1158
1209
  F: __dxlog_file4,
1159
- L: 197,
1210
+ L: 198,
1160
1211
  S: this,
1161
1212
  A: [
1162
1213
  "msg.recipient.peerKey",
@@ -1173,7 +1224,7 @@ var SignalClient = class extends Resource {
1173
1224
  async subscribeMessages(peer) {
1174
1225
  invariant3(peer.peerKey, "Peer key required", {
1175
1226
  F: __dxlog_file4,
1176
- L: 207,
1227
+ L: 208,
1177
1228
  S: this,
1178
1229
  A: [
1179
1230
  "peer.peerKey",
@@ -1184,7 +1235,7 @@ var SignalClient = class extends Resource {
1184
1235
  peer
1185
1236
  }, {
1186
1237
  F: __dxlog_file4,
1187
- L: 208,
1238
+ L: 209,
1188
1239
  S: this,
1189
1240
  C: (f, a) => f(...a)
1190
1241
  });
@@ -1194,7 +1245,7 @@ var SignalClient = class extends Resource {
1194
1245
  async unsubscribeMessages(peer) {
1195
1246
  invariant3(peer.peerKey, "Peer key required", {
1196
1247
  F: __dxlog_file4,
1197
- L: 214,
1248
+ L: 215,
1198
1249
  S: this,
1199
1250
  A: [
1200
1251
  "peer.peerKey",
@@ -1205,7 +1256,7 @@ var SignalClient = class extends Resource {
1205
1256
  peer
1206
1257
  }, {
1207
1258
  F: __dxlog_file4,
1208
- L: 215,
1259
+ L: 216,
1209
1260
  S: this,
1210
1261
  C: (f, a) => f(...a)
1211
1262
  });
@@ -1220,13 +1271,13 @@ var SignalClient = class extends Resource {
1220
1271
  state: this._state
1221
1272
  }, {
1222
1273
  F: __dxlog_file4,
1223
- L: 224,
1274
+ L: 225,
1224
1275
  S: this,
1225
1276
  C: (f, a) => f(...a)
1226
1277
  });
1227
1278
  invariant3(!this._client, "Client already created", {
1228
1279
  F: __dxlog_file4,
1229
- L: 225,
1280
+ L: 226,
1230
1281
  S: this,
1231
1282
  A: [
1232
1283
  "!this._client",
@@ -1238,7 +1289,7 @@ var SignalClient = class extends Resource {
1238
1289
  this._connectionCtx.onDispose(async () => {
1239
1290
  log4("connection context disposed", void 0, {
1240
1291
  F: __dxlog_file4,
1241
- L: 232,
1292
+ L: 233,
1242
1293
  S: this,
1243
1294
  C: (f, a) => f(...a)
1244
1295
  });
@@ -1253,7 +1304,7 @@ var SignalClient = class extends Resource {
1253
1304
  if (client === this._client) {
1254
1305
  log4("socket connected", void 0, {
1255
1306
  F: __dxlog_file4,
1256
- L: 243,
1307
+ L: 244,
1257
1308
  S: this,
1258
1309
  C: (f, a) => f(...a)
1259
1310
  });
@@ -1268,7 +1319,7 @@ var SignalClient = class extends Resource {
1268
1319
  state: this._state
1269
1320
  }, {
1270
1321
  F: __dxlog_file4,
1271
- L: 252,
1322
+ L: 253,
1272
1323
  S: this,
1273
1324
  C: (f, a) => f(...a)
1274
1325
  });
@@ -1285,7 +1336,7 @@ var SignalClient = class extends Resource {
1285
1336
  state: this._state
1286
1337
  }, {
1287
1338
  F: __dxlog_file4,
1288
- L: 264,
1339
+ L: 265,
1289
1340
  S: this,
1290
1341
  C: (f, a) => f(...a)
1291
1342
  });
@@ -1310,14 +1361,14 @@ var SignalClient = class extends Resource {
1310
1361
  state: this._state
1311
1362
  }, {
1312
1363
  F: __dxlog_file4,
1313
- L: 279,
1364
+ L: 280,
1314
1365
  S: this,
1315
1366
  C: (f, a) => f(...a)
1316
1367
  });
1317
1368
  if (this._state === SignalState.RECONNECTING) {
1318
1369
  log4.info("Signal api already reconnecting.", void 0, {
1319
1370
  F: __dxlog_file4,
1320
- L: 282,
1371
+ L: 283,
1321
1372
  S: this,
1322
1373
  C: (f, a) => f(...a)
1323
1374
  });
@@ -1359,7 +1410,7 @@ var SignalClient = class extends Resource {
1359
1410
  status: this.getStatus()
1360
1411
  }, {
1361
1412
  F: __dxlog_file4,
1362
- L: 323,
1413
+ L: 324,
1363
1414
  S: this,
1364
1415
  C: (f, a) => f(...a)
1365
1416
  });
@@ -1394,26 +1445,28 @@ import { schema as schema3 } from "@dxos/protocols/proto";
1394
1445
  import { ComplexMap as ComplexMap3, ComplexSet as ComplexSet3 } from "@dxos/util";
1395
1446
  var __dxlog_file5 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/memory-signal-manager.ts";
1396
1447
  var MemorySignalManagerContext = class {
1397
- constructor() {
1398
- // Swarm messages.
1399
- this.swarmEvent = new Event3();
1400
- // Mapping from topic to set of peers.
1401
- this.swarms = new ComplexMap3(PublicKey5.hash);
1402
- // Map of connections for each peer for signaling.
1403
- this.connections = new ComplexMap3(PeerInfoHash);
1404
- }
1448
+ // Swarm messages.
1449
+ swarmEvent = new Event3();
1450
+ // Mapping from topic to set of peers.
1451
+ swarms = new ComplexMap3(PublicKey5.hash);
1452
+ // Map of connections for each peer for signaling.
1453
+ connections = new ComplexMap3(PeerInfoHash);
1405
1454
  };
1406
1455
  var MemorySignalManager = class {
1456
+ _context;
1457
+ statusChanged = new Event3();
1458
+ swarmEvent = new Event3();
1459
+ onMessage = new Event3();
1460
+ /** Will be used to emit SwarmEvents on .open() and .close() */
1461
+ _joinedSwarms = new ComplexSet3(({ topic, peer }) => topic.toHex() + peer.peerKey);
1462
+ _ctx;
1463
+ // TODO(dmaretskyi): Replace with callback.
1464
+ _freezeTrigger = new Trigger3().wake();
1407
1465
  constructor(_context) {
1408
1466
  this._context = _context;
1409
- this.statusChanged = new Event3();
1410
- this.swarmEvent = new Event3();
1411
- this.onMessage = new Event3();
1412
- this._joinedSwarms = new ComplexSet3(({ topic, peer }) => topic.toHex() + peer.peerKey);
1413
- this._freezeTrigger = new Trigger3().wake();
1414
1467
  this._ctx = new Context3(void 0, {
1415
1468
  F: __dxlog_file5,
1416
- L: 53
1469
+ L: 54
1417
1470
  });
1418
1471
  this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
1419
1472
  }
@@ -1423,7 +1476,7 @@ var MemorySignalManager = class {
1423
1476
  }
1424
1477
  this._ctx = new Context3(void 0, {
1425
1478
  F: __dxlog_file5,
1426
- L: 62
1479
+ L: 63
1427
1480
  });
1428
1481
  this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
1429
1482
  await Promise.all([
@@ -1449,7 +1502,7 @@ var MemorySignalManager = class {
1449
1502
  async join({ topic, peer }) {
1450
1503
  invariant4(!this._ctx.disposed, "Closed", {
1451
1504
  F: __dxlog_file5,
1452
- L: 91,
1505
+ L: 92,
1453
1506
  S: this,
1454
1507
  A: [
1455
1508
  "!this._ctx.disposed",
@@ -1486,7 +1539,7 @@ var MemorySignalManager = class {
1486
1539
  async leave({ topic, peer }) {
1487
1540
  invariant4(!this._ctx.disposed, "Closed", {
1488
1541
  F: __dxlog_file5,
1489
- L: 123,
1542
+ L: 124,
1490
1543
  S: this,
1491
1544
  A: [
1492
1545
  "!this._ctx.disposed",
@@ -1519,13 +1572,13 @@ var MemorySignalManager = class {
1519
1572
  ...dec(payload)
1520
1573
  }, {
1521
1574
  F: __dxlog_file5,
1522
- L: 156,
1575
+ L: 157,
1523
1576
  S: this,
1524
1577
  C: (f, a) => f(...a)
1525
1578
  });
1526
1579
  invariant4(recipient, void 0, {
1527
1580
  F: __dxlog_file5,
1528
- L: 158,
1581
+ L: 159,
1529
1582
  S: this,
1530
1583
  A: [
1531
1584
  "recipient",
@@ -1534,7 +1587,7 @@ var MemorySignalManager = class {
1534
1587
  });
1535
1588
  invariant4(!this._ctx.disposed, "Closed", {
1536
1589
  F: __dxlog_file5,
1537
- L: 159,
1590
+ L: 160,
1538
1591
  S: this,
1539
1592
  A: [
1540
1593
  "!this._ctx.disposed",
@@ -1549,7 +1602,7 @@ var MemorySignalManager = class {
1549
1602
  recipient
1550
1603
  }, {
1551
1604
  F: __dxlog_file5,
1552
- L: 165,
1605
+ L: 166,
1553
1606
  S: this,
1554
1607
  C: (f, a) => f(...a)
1555
1608
  });
@@ -1561,7 +1614,7 @@ var MemorySignalManager = class {
1561
1614
  recipient
1562
1615
  }, {
1563
1616
  F: __dxlog_file5,
1564
- L: 170,
1617
+ L: 171,
1565
1618
  S: this,
1566
1619
  C: (f, a) => f(...a)
1567
1620
  });
@@ -1574,7 +1627,7 @@ var MemorySignalManager = class {
1574
1627
  recipient
1575
1628
  }, {
1576
1629
  F: __dxlog_file5,
1577
- L: 178,
1630
+ L: 179,
1578
1631
  S: this,
1579
1632
  C: (f, a) => f(...a)
1580
1633
  });
@@ -1586,7 +1639,7 @@ var MemorySignalManager = class {
1586
1639
  ...dec(payload)
1587
1640
  }, {
1588
1641
  F: __dxlog_file5,
1589
- L: 182,
1642
+ L: 183,
1590
1643
  S: this,
1591
1644
  C: (f, a) => f(...a)
1592
1645
  });
@@ -1600,7 +1653,7 @@ var MemorySignalManager = class {
1600
1653
  err
1601
1654
  }, {
1602
1655
  F: __dxlog_file5,
1603
- L: 187,
1656
+ L: 188,
1604
1657
  S: this,
1605
1658
  C: (f, a) => f(...a)
1606
1659
  });
@@ -1611,7 +1664,7 @@ var MemorySignalManager = class {
1611
1664
  peerInfo
1612
1665
  }, {
1613
1666
  F: __dxlog_file5,
1614
- L: 192,
1667
+ L: 193,
1615
1668
  S: this,
1616
1669
  C: (f, a) => f(...a)
1617
1670
  });
@@ -1622,7 +1675,7 @@ var MemorySignalManager = class {
1622
1675
  peerInfo
1623
1676
  }, {
1624
1677
  F: __dxlog_file5,
1625
- L: 197,
1678
+ L: 198,
1626
1679
  S: this,
1627
1680
  C: (f, a) => f(...a)
1628
1681
  });
@@ -1685,13 +1738,26 @@ var __dxlog_file6 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-mana
1685
1738
  var MAX_SERVER_FAILURES = 5;
1686
1739
  var WSS_SIGNAL_SERVER_REBOOT_DELAY = 3e3;
1687
1740
  var WebsocketSignalManager = class extends Resource2 {
1741
+ _hosts;
1742
+ _getMetadata;
1743
+ _servers = /* @__PURE__ */ new Map();
1744
+ _monitor = new WebsocketSignalManagerMonitor();
1745
+ /**
1746
+ * Used to avoid logging failed server restarts more than once until the server actually recovers.
1747
+ */
1748
+ _failedServersBitfield;
1749
+ failureCount = /* @__PURE__ */ new Map();
1750
+ statusChanged = new Event4();
1751
+ swarmEvent = new Event4();
1752
+ onMessage = new Event4();
1753
+ _instanceId = PublicKey6.random().toHex();
1688
1754
  constructor(_hosts, _getMetadata) {
1689
- 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();
1755
+ super(), this._hosts = _hosts, this._getMetadata = _getMetadata;
1690
1756
  log6("Created WebsocketSignalManager", {
1691
1757
  hosts: this._hosts
1692
1758
  }, {
1693
1759
  F: __dxlog_file6,
1694
- L: 58,
1760
+ L: 59,
1695
1761
  S: this,
1696
1762
  C: (f, a) => f(...a)
1697
1763
  });
@@ -1713,7 +1779,7 @@ var WebsocketSignalManager = class extends Resource2 {
1713
1779
  hosts: this._hosts
1714
1780
  }, {
1715
1781
  F: __dxlog_file6,
1716
- L: 78,
1782
+ L: 79,
1717
1783
  S: this,
1718
1784
  C: (f, a) => f(...a)
1719
1785
  });
@@ -1721,7 +1787,7 @@ var WebsocketSignalManager = class extends Resource2 {
1721
1787
  id: this._instanceId
1722
1788
  }), {
1723
1789
  F: __dxlog_file6,
1724
- L: 79,
1790
+ L: 80,
1725
1791
  S: this,
1726
1792
  C: (f, a) => f(...a)
1727
1793
  });
@@ -1730,7 +1796,7 @@ var WebsocketSignalManager = class extends Resource2 {
1730
1796
  id: this._instanceId
1731
1797
  }), {
1732
1798
  F: __dxlog_file6,
1733
- L: 83,
1799
+ L: 84,
1734
1800
  S: this,
1735
1801
  C: (f, a) => f(...a)
1736
1802
  });
@@ -1743,13 +1809,13 @@ var WebsocketSignalManager = class extends Resource2 {
1743
1809
  serverName
1744
1810
  }, {
1745
1811
  F: __dxlog_file6,
1746
- L: 91,
1812
+ L: 92,
1747
1813
  S: this,
1748
1814
  C: (f, a) => f(...a)
1749
1815
  });
1750
1816
  invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1751
1817
  F: __dxlog_file6,
1752
- L: 92,
1818
+ L: 93,
1753
1819
  S: this,
1754
1820
  A: [
1755
1821
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1759,7 +1825,7 @@ var WebsocketSignalManager = class extends Resource2 {
1759
1825
  const server = this._servers.get(serverName);
1760
1826
  invariant5(server, "server not found", {
1761
1827
  F: __dxlog_file6,
1762
- L: 95,
1828
+ L: 96,
1763
1829
  S: this,
1764
1830
  A: [
1765
1831
  "server",
@@ -1779,13 +1845,13 @@ var WebsocketSignalManager = class extends Resource2 {
1779
1845
  peer
1780
1846
  }, {
1781
1847
  F: __dxlog_file6,
1782
- L: 108,
1848
+ L: 109,
1783
1849
  S: this,
1784
1850
  C: (f, a) => f(...a)
1785
1851
  });
1786
1852
  invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1787
1853
  F: __dxlog_file6,
1788
- L: 109,
1854
+ L: 110,
1789
1855
  S: this,
1790
1856
  A: [
1791
1857
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1803,13 +1869,13 @@ var WebsocketSignalManager = class extends Resource2 {
1803
1869
  peer
1804
1870
  }, {
1805
1871
  F: __dxlog_file6,
1806
- L: 115,
1872
+ L: 116,
1807
1873
  S: this,
1808
1874
  C: (f, a) => f(...a)
1809
1875
  });
1810
1876
  invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1811
1877
  F: __dxlog_file6,
1812
- L: 116,
1878
+ L: 117,
1813
1879
  S: this,
1814
1880
  A: [
1815
1881
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1829,13 +1895,13 @@ var WebsocketSignalManager = class extends Resource2 {
1829
1895
  recipient
1830
1896
  }, {
1831
1897
  F: __dxlog_file6,
1832
- L: 125,
1898
+ L: 126,
1833
1899
  S: this,
1834
1900
  C: (f, a) => f(...a)
1835
1901
  });
1836
1902
  invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1837
1903
  F: __dxlog_file6,
1838
- L: 126,
1904
+ L: 127,
1839
1905
  S: this,
1840
1906
  A: [
1841
1907
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1853,7 +1919,7 @@ var WebsocketSignalManager = class extends Resource2 {
1853
1919
  err
1854
1920
  }, {
1855
1921
  F: __dxlog_file6,
1856
- L: 134,
1922
+ L: 135,
1857
1923
  S: this,
1858
1924
  C: (f, a) => f(...a)
1859
1925
  });
@@ -1863,7 +1929,7 @@ var WebsocketSignalManager = class extends Resource2 {
1863
1929
  err
1864
1930
  }, {
1865
1931
  F: __dxlog_file6,
1866
- L: 137,
1932
+ L: 138,
1867
1933
  S: this,
1868
1934
  C: (f, a) => f(...a)
1869
1935
  });
@@ -1873,7 +1939,7 @@ var WebsocketSignalManager = class extends Resource2 {
1873
1939
  err
1874
1940
  }, {
1875
1941
  F: __dxlog_file6,
1876
- L: 140,
1942
+ L: 141,
1877
1943
  S: this,
1878
1944
  C: (f, a) => f(...a)
1879
1945
  });
@@ -1896,7 +1962,7 @@ var WebsocketSignalManager = class extends Resource2 {
1896
1962
  failureCount
1897
1963
  }, {
1898
1964
  F: __dxlog_file6,
1899
- L: 154,
1965
+ L: 155,
1900
1966
  S: this,
1901
1967
  C: (f, a) => f(...a)
1902
1968
  });
@@ -1914,7 +1980,7 @@ var WebsocketSignalManager = class extends Resource2 {
1914
1980
  serverName
1915
1981
  }, {
1916
1982
  F: __dxlog_file6,
1917
- L: 167,
1983
+ L: 168,
1918
1984
  S: this,
1919
1985
  C: (f, a) => f(...a)
1920
1986
  });
@@ -1927,13 +1993,13 @@ var WebsocketSignalManager = class extends Resource2 {
1927
1993
  peer
1928
1994
  }, {
1929
1995
  F: __dxlog_file6,
1930
- L: 174,
1996
+ L: 175,
1931
1997
  S: this,
1932
1998
  C: (f, a) => f(...a)
1933
1999
  });
1934
2000
  invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1935
2001
  F: __dxlog_file6,
1936
- L: 175,
2002
+ L: 176,
1937
2003
  S: this,
1938
2004
  A: [
1939
2005
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1947,13 +2013,13 @@ var WebsocketSignalManager = class extends Resource2 {
1947
2013
  peer
1948
2014
  }, {
1949
2015
  F: __dxlog_file6,
1950
- L: 181,
2016
+ L: 182,
1951
2017
  S: this,
1952
2018
  C: (f, a) => f(...a)
1953
2019
  });
1954
2020
  invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
1955
2021
  F: __dxlog_file6,
1956
- L: 182,
2022
+ L: 183,
1957
2023
  S: this,
1958
2024
  A: [
1959
2025
  "this._lifecycleState === LifecycleState.OPEN",
@@ -1978,30 +2044,31 @@ _ts_decorate([
1978
2044
 
1979
2045
  // src/signal-manager/edge-signal-manager.ts
1980
2046
  import { Event as Event5, scheduleMicroTask } from "@dxos/async";
1981
- import { cancelWithContext as cancelWithContext3, Resource as Resource3 } from "@dxos/context";
1982
- import { protocol } from "@dxos/edge-client";
2047
+ import { Resource as Resource3, cancelWithContext as cancelWithContext3 } from "@dxos/context";
2048
+ import { EdgeIdentityChangedError, protocol } from "@dxos/edge-client";
1983
2049
  import { invariant as invariant6 } from "@dxos/invariant";
1984
2050
  import { PublicKey as PublicKey7 } from "@dxos/keys";
1985
2051
  import { log as log7 } from "@dxos/log";
1986
2052
  import { EdgeService } from "@dxos/protocols";
1987
2053
  import { bufWkt } from "@dxos/protocols/buf";
1988
- import { SwarmRequestSchema, SwarmRequest_Action as SwarmRequestAction, SwarmResponseSchema } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
2054
+ import { SwarmRequest_Action as SwarmRequestAction, SwarmRequestSchema, SwarmResponseSchema } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
1989
2055
  import { ComplexMap as ComplexMap4, ComplexSet as ComplexSet4 } from "@dxos/util";
1990
2056
  var __dxlog_file7 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/edge-signal-manager.ts";
1991
2057
  var EdgeSignalManager = class extends Resource3 {
2058
+ /**
2059
+ * @deprecated
2060
+ */
2061
+ swarmEvent = new Event5();
2062
+ swarmState = new Event5();
2063
+ onMessage = new Event5();
2064
+ /**
2065
+ * Swarm key -> { peer: <own state payload>, joinedPeers: <state of swarm> }.
2066
+ */
2067
+ // TODO(mykola): This class should not contain swarm state joinedPeers. Temporary before network-manager API changes to accept list of peers.
2068
+ _swarmPeers = new ComplexMap4(PublicKey7.hash);
2069
+ _edgeConnection;
1992
2070
  constructor({ edgeConnection }) {
1993
2071
  super();
1994
- /**
1995
- * @deprecated
1996
- */
1997
- this.swarmEvent = new Event5();
1998
- this.swarmState = new Event5();
1999
- this.onMessage = new Event5();
2000
- /**
2001
- * Swarm key -> { peer: <own state payload>, joinedPeers: <state of swarm> }.
2002
- */
2003
- // TODO(mykola): This class should not contain swarm state joinedPeers. Temporary before network-manager API changes to accept list of peers.
2004
- this._swarmPeers = new ComplexMap4(PublicKey7.hash);
2005
2072
  this._edgeConnection = edgeConnection;
2006
2073
  }
2007
2074
  async _open() {
@@ -2023,7 +2090,7 @@ var EdgeSignalManager = class extends Resource3 {
2023
2090
  }
2024
2091
  }, {
2025
2092
  F: __dxlog_file7,
2026
- L: 65,
2093
+ L: 66,
2027
2094
  S: this,
2028
2095
  C: (f, a) => f(...a)
2029
2096
  });
@@ -2047,16 +2114,23 @@ var EdgeSignalManager = class extends Resource3 {
2047
2114
  }
2048
2115
  async leave({ topic, peer }) {
2049
2116
  this._swarmPeers.delete(topic);
2050
- await this._edgeConnection.send(protocol.createMessage(SwarmRequestSchema, {
2051
- serviceId: EdgeService.SWARM,
2052
- source: createMessageSource(topic, peer),
2053
- payload: {
2054
- action: SwarmRequestAction.LEAVE,
2055
- swarmKeys: [
2056
- topic.toHex()
2057
- ]
2117
+ try {
2118
+ await this._edgeConnection.send(protocol.createMessage(SwarmRequestSchema, {
2119
+ serviceId: EdgeService.SWARM,
2120
+ source: createMessageSource(topic, peer),
2121
+ payload: {
2122
+ action: SwarmRequestAction.LEAVE,
2123
+ swarmKeys: [
2124
+ topic.toHex()
2125
+ ]
2126
+ }
2127
+ }));
2128
+ } catch (err) {
2129
+ if (err instanceof EdgeIdentityChangedError) {
2130
+ return;
2058
2131
  }
2059
- }));
2132
+ throw err;
2133
+ }
2060
2134
  }
2061
2135
  async query({ topic }) {
2062
2136
  const response = cancelWithContext3(this._ctx, this.swarmState.waitFor((state) => state.swarmKey === topic.toHex()));
@@ -2085,7 +2159,7 @@ var EdgeSignalManager = class extends Resource3 {
2085
2159
  }
2086
2160
  }, {
2087
2161
  F: __dxlog_file7,
2088
- L: 121,
2162
+ L: 131,
2089
2163
  S: this,
2090
2164
  C: (f, a) => f(...a)
2091
2165
  });
@@ -2120,7 +2194,7 @@ var EdgeSignalManager = class extends Resource3 {
2120
2194
  _processSwarmResponse(message) {
2121
2195
  invariant6(protocol.getPayloadType(message) === SwarmResponseSchema.typeName, "Wrong payload type", {
2122
2196
  F: __dxlog_file7,
2123
- L: 158,
2197
+ L: 168,
2124
2198
  S: this,
2125
2199
  A: [
2126
2200
  "protocol.getPayloadType(message) === SwarmResponseSchema.typeName",
@@ -2164,7 +2238,7 @@ var EdgeSignalManager = class extends Resource3 {
2164
2238
  _processMessage(message) {
2165
2239
  invariant6(protocol.getPayloadType(message) === bufWkt.AnySchema.typeName, "Wrong payload type", {
2166
2240
  F: __dxlog_file7,
2167
- L: 196,
2241
+ L: 206,
2168
2242
  S: this,
2169
2243
  A: [
2170
2244
  "protocol.getPayloadType(message) === bufWkt.AnySchema.typeName",
@@ -2174,7 +2248,7 @@ var EdgeSignalManager = class extends Resource3 {
2174
2248
  const payload = protocol.getPayload(message, bufWkt.AnySchema);
2175
2249
  invariant6(message.source, "source is missing", {
2176
2250
  F: __dxlog_file7,
2177
- L: 198,
2251
+ L: 208,
2178
2252
  S: this,
2179
2253
  A: [
2180
2254
  "message.source",
@@ -2183,7 +2257,7 @@ var EdgeSignalManager = class extends Resource3 {
2183
2257
  });
2184
2258
  invariant6(message.target, "target is missing", {
2185
2259
  F: __dxlog_file7,
2186
- L: 199,
2260
+ L: 209,
2187
2261
  S: this,
2188
2262
  A: [
2189
2263
  "message.target",
@@ -2192,7 +2266,7 @@ var EdgeSignalManager = class extends Resource3 {
2192
2266
  });
2193
2267
  invariant6(message.target.length === 1, "target should have exactly one item", {
2194
2268
  F: __dxlog_file7,
2195
- L: 200,
2269
+ L: 210,
2196
2270
  S: this,
2197
2271
  A: [
2198
2272
  "message.target.length === 1",
@@ -2216,7 +2290,7 @@ var EdgeSignalManager = class extends Resource3 {
2216
2290
  swarms: Array.from(this._swarmPeers.keys())
2217
2291
  }, {
2218
2292
  F: __dxlog_file7,
2219
- L: 219,
2293
+ L: 229,
2220
2294
  S: this,
2221
2295
  C: (f, a) => f(...a)
2222
2296
  });
@@ -2306,4 +2380,4 @@ export {
2306
2380
  EdgeSignalManager,
2307
2381
  setIdentityTags
2308
2382
  };
2309
- //# sourceMappingURL=chunk-QLQS7TUS.mjs.map
2383
+ //# sourceMappingURL=chunk-4EMAT5U7.mjs.map