@dxos/messaging 0.8.4-main.84f28bd → 0.8.4-main.ae835ea

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