@dxos/messaging 0.1.58-main.f117c08 → 0.1.58-main.f4192cb

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.
@@ -1,13 +1,12 @@
1
1
  import "@dxos/node-std/globals";
2
2
 
3
3
  // packages/core/mesh/messaging/src/messenger.ts
4
- import { TimeoutError, scheduleExponentialBackoffTaskInterval, scheduleTask } from "@dxos/async";
4
+ import { TimeoutError, scheduleExponentialBackoffTaskInterval, scheduleTask, scheduleTaskInterval } from "@dxos/async";
5
5
  import { Context } from "@dxos/context";
6
- import { TimeoutError as ProtocolTimeoutError } from "@dxos/errors";
7
6
  import { invariant } from "@dxos/invariant";
8
7
  import { PublicKey } from "@dxos/keys";
9
8
  import { log } from "@dxos/log";
10
- import { schema, trace } from "@dxos/protocols";
9
+ import { TimeoutError as ProtocolTimeoutError, schema, trace } from "@dxos/protocols";
11
10
  import { ComplexMap, ComplexSet } from "@dxos/util";
12
11
 
13
12
  // packages/core/mesh/messaging/src/timeouts.ts
@@ -19,6 +18,7 @@ var ReliablePayload = schema.getCodecForType("dxos.mesh.messaging.ReliablePayloa
19
18
  var Acknowledgement = schema.getCodecForType("dxos.mesh.messaging.Acknowledgement");
20
19
  var ERROR_LIMIT = 5;
21
20
  var NETWORK_REBOOT_DELAY = 3e3;
21
+ var RECEIVED_MESSAGES_GC_INTERVAL = 12e4;
22
22
  var Messenger = class {
23
23
  constructor({ signalManager, retryDelay = 300 }) {
24
24
  // { peerId, payloadType } => listeners set
@@ -26,7 +26,11 @@ var Messenger = class {
26
26
  // peerId => listeners set
27
27
  this._defaultListeners = new ComplexMap(PublicKey.hash);
28
28
  this._onAckCallbacks = new ComplexMap(PublicKey.hash);
29
- this._receivedMessages = new ComplexSet((key) => key.toHex());
29
+ this._receivedMessages = new ComplexSet(PublicKey.hash);
30
+ /**
31
+ * Keys scheduled to be cleared from _receivedMessages on the next iteration.
32
+ */
33
+ this._toClear = new ComplexSet(PublicKey.hash);
30
34
  this._closed = true;
31
35
  this._errorCount = 0;
32
36
  this._rebooting = false;
@@ -43,14 +47,14 @@ var Messenger = class {
43
47
  id: traceId
44
48
  }), {
45
49
  F: __dxlog_file,
46
- L: 68,
50
+ L: 74,
47
51
  S: this,
48
52
  C: (f, a) => f(...a)
49
53
  });
50
54
  this._ctx = new Context({
51
55
  onError: (err) => log.catch(err, void 0, {
52
56
  F: __dxlog_file,
53
- L: 70,
57
+ L: 76,
54
58
  S: this,
55
59
  C: (f, a) => f(...a)
56
60
  })
@@ -60,18 +64,21 @@ var Messenger = class {
60
64
  from: message.author
61
65
  }, {
62
66
  F: __dxlog_file,
63
- L: 74,
67
+ L: 80,
64
68
  S: this,
65
69
  C: (f, a) => f(...a)
66
70
  });
67
71
  await this._handleMessage(message);
68
72
  }));
73
+ scheduleTaskInterval(this._ctx, async () => {
74
+ this._performGc();
75
+ }, RECEIVED_MESSAGES_GC_INTERVAL);
69
76
  this._closed = false;
70
77
  log.trace("dxos.mesh.messenger.open", trace.end({
71
78
  id: traceId
72
79
  }), {
73
80
  F: __dxlog_file,
74
- L: 79,
81
+ L: 95,
75
82
  S: this,
76
83
  C: (f, a) => f(...a)
77
84
  });
@@ -86,7 +93,7 @@ var Messenger = class {
86
93
  async sendMessage({ author, recipient, payload }) {
87
94
  invariant(!this._closed, "Closed", {
88
95
  F: __dxlog_file,
89
- L: 91,
96
+ L: 107,
90
97
  S: this,
91
98
  A: [
92
99
  "!this._closed",
@@ -100,7 +107,7 @@ var Messenger = class {
100
107
  };
101
108
  invariant(!this._onAckCallbacks.has(reliablePayload.messageId), void 0, {
102
109
  F: __dxlog_file,
103
- L: 98,
110
+ L: 114,
104
111
  S: this,
105
112
  A: [
106
113
  "!this._onAckCallbacks.has(reliablePayload.messageId!)",
@@ -113,7 +120,7 @@ var Messenger = class {
113
120
  recipient
114
121
  }, {
115
122
  F: __dxlog_file,
116
- L: 99,
123
+ L: 115,
117
124
  S: this,
118
125
  C: (f, a) => f(...a)
119
126
  });
@@ -128,7 +135,7 @@ var Messenger = class {
128
135
  messageId: reliablePayload.messageId
129
136
  }, {
130
137
  F: __dxlog_file,
131
- L: 113,
138
+ L: 129,
132
139
  S: this,
133
140
  C: (f, a) => f(...a)
134
141
  });
@@ -140,7 +147,7 @@ var Messenger = class {
140
147
  err
141
148
  }, {
142
149
  F: __dxlog_file,
143
- L: 115,
150
+ L: 131,
144
151
  S: this,
145
152
  C: (f, a) => f(...a)
146
153
  }));
@@ -150,7 +157,7 @@ var Messenger = class {
150
157
  messageId: reliablePayload.messageId
151
158
  }, {
152
159
  F: __dxlog_file,
153
- L: 124,
160
+ L: 140,
154
161
  S: this,
155
162
  C: (f, a) => f(...a)
156
163
  });
@@ -174,7 +181,7 @@ var Messenger = class {
174
181
  async errorLimitCheck() {
175
182
  log(`checking error limit ${this._errorCount}`, void 0, {
176
183
  F: __dxlog_file,
177
- L: 149,
184
+ L: 165,
178
185
  S: this,
179
186
  C: (f, a) => f(...a)
180
187
  });
@@ -189,7 +196,7 @@ var Messenger = class {
189
196
  this._rebooting = true;
190
197
  log("rebooting Messenger/SignalManager", void 0, {
191
198
  F: __dxlog_file,
192
- L: 161,
199
+ L: 177,
193
200
  S: this,
194
201
  C: (f, a) => f(...a)
195
202
  });
@@ -197,14 +204,14 @@ var Messenger = class {
197
204
  await this._signalManager.close();
198
205
  log("pausing", void 0, {
199
206
  F: __dxlog_file,
200
- L: 164,
207
+ L: 180,
201
208
  S: this,
202
209
  C: (f, a) => f(...a)
203
210
  });
204
211
  await new Promise((resolve) => setTimeout(resolve, NETWORK_REBOOT_DELAY));
205
212
  log("done pausing", void 0, {
206
213
  F: __dxlog_file,
207
- L: 166,
214
+ L: 182,
208
215
  S: this,
209
216
  C: (f, a) => f(...a)
210
217
  });
@@ -212,7 +219,7 @@ var Messenger = class {
212
219
  await this._signalManager.open();
213
220
  log("done rebooting", void 0, {
214
221
  F: __dxlog_file,
215
- L: 169,
222
+ L: 185,
216
223
  S: this,
217
224
  C: (f, a) => f(...a)
218
225
  });
@@ -226,7 +233,7 @@ var Messenger = class {
226
233
  async listen({ peerId, payloadType, onMessage }) {
227
234
  invariant(!this._closed, "Closed", {
228
235
  F: __dxlog_file,
229
- L: 188,
236
+ L: 204,
230
237
  S: this,
231
238
  A: [
232
239
  "!this._closed",
@@ -290,7 +297,7 @@ var Messenger = class {
290
297
  async _handleReliablePayload({ author, recipient, payload }) {
291
298
  invariant(payload.type_url === "dxos.mesh.messaging.ReliablePayload", void 0, {
292
299
  F: __dxlog_file,
293
- L: 249,
300
+ L: 265,
294
301
  S: this,
295
302
  A: [
296
303
  "payload.type_url === 'dxos.mesh.messaging.ReliablePayload'",
@@ -304,7 +311,7 @@ var Messenger = class {
304
311
  messageId: reliablePayload.messageId
305
312
  }, {
306
313
  F: __dxlog_file,
307
- L: 252,
314
+ L: 268,
308
315
  S: this,
309
316
  C: (f, a) => f(...a)
310
317
  });
@@ -326,7 +333,7 @@ var Messenger = class {
326
333
  async _handleAcknowledgement({ payload }) {
327
334
  invariant(payload.type_url === "dxos.mesh.messaging.Acknowledgement", void 0, {
328
335
  F: __dxlog_file,
329
- L: 274,
336
+ L: 290,
330
337
  S: this,
331
338
  A: [
332
339
  "payload.type_url === 'dxos.mesh.messaging.Acknowledgement'",
@@ -342,7 +349,7 @@ var Messenger = class {
342
349
  to: author
343
350
  }, {
344
351
  F: __dxlog_file,
345
- L: 287,
352
+ L: 303,
346
353
  S: this,
347
354
  C: (f, a) => f(...a)
348
355
  });
@@ -378,10 +385,31 @@ var Messenger = class {
378
385
  }
379
386
  }
380
387
  }
388
+ _performGc() {
389
+ const start = performance.now();
390
+ for (const key of this._toClear.keys()) {
391
+ this._receivedMessages.delete(key);
392
+ }
393
+ this._toClear.clear();
394
+ for (const key of this._receivedMessages.keys()) {
395
+ this._toClear.add(key);
396
+ }
397
+ const elapsed = performance.now() - start;
398
+ if (elapsed > 100) {
399
+ log.warn("GC took too long", {
400
+ elapsed
401
+ }, {
402
+ F: __dxlog_file,
403
+ L: 351,
404
+ S: this,
405
+ C: (f, a) => f(...a)
406
+ });
407
+ }
408
+ }
381
409
  };
382
410
 
383
411
  // packages/core/mesh/messaging/src/signal-client/signal-client.ts
384
- import { DeferredTask, Event, Trigger as Trigger2, asyncTimeout, scheduleTask as scheduleTask2, scheduleTaskInterval, sleep } from "@dxos/async";
412
+ import { DeferredTask, Event, Trigger as Trigger2, asyncTimeout, scheduleTask as scheduleTask2, scheduleTaskInterval as scheduleTaskInterval2, sleep } from "@dxos/async";
385
413
  import { Context as Context2, cancelWithContext } from "@dxos/context";
386
414
  import { invariant as invariant3 } from "@dxos/invariant";
387
415
  import { PublicKey as PublicKey3 } from "@dxos/keys";
@@ -707,7 +735,7 @@ var SignalClient = class {
707
735
  await this._reconcileMessageSubscriptions();
708
736
  this._reconciled.emit();
709
737
  });
710
- scheduleTaskInterval(this._ctx, async () => {
738
+ scheduleTaskInterval2(this._ctx, async () => {
711
739
  if (this._state === SignalState.CONNECTED) {
712
740
  this._reconcileTask.schedule();
713
741
  }
@@ -1112,7 +1140,6 @@ var MemorySignalManagerContext = class {
1112
1140
  }
1113
1141
  };
1114
1142
  var MemorySignalManager = class {
1115
- // prettier-ignore
1116
1143
  constructor(_context) {
1117
1144
  this._context = _context;
1118
1145
  this.statusChanged = new Event2();
@@ -1153,7 +1180,7 @@ var MemorySignalManager = class {
1153
1180
  async join({ topic, peerId }) {
1154
1181
  invariant4(!this._ctx.disposed, "Closed", {
1155
1182
  F: __dxlog_file4,
1156
- L: 104,
1183
+ L: 101,
1157
1184
  S: this,
1158
1185
  A: [
1159
1186
  "!this._ctx.disposed",
@@ -1194,7 +1221,7 @@ var MemorySignalManager = class {
1194
1221
  async leave({ topic, peerId }) {
1195
1222
  invariant4(!this._ctx.disposed, "Closed", {
1196
1223
  F: __dxlog_file4,
1197
- L: 140,
1224
+ L: 137,
1198
1225
  S: this,
1199
1226
  A: [
1200
1227
  "!this._ctx.disposed",
@@ -1226,13 +1253,13 @@ var MemorySignalManager = class {
1226
1253
  ...dec(payload)
1227
1254
  }, {
1228
1255
  F: __dxlog_file4,
1229
- L: 160,
1256
+ L: 157,
1230
1257
  S: this,
1231
1258
  C: (f, a) => f(...a)
1232
1259
  });
1233
1260
  invariant4(recipient, void 0, {
1234
1261
  F: __dxlog_file4,
1235
- L: 162,
1262
+ L: 159,
1236
1263
  S: this,
1237
1264
  A: [
1238
1265
  "recipient",
@@ -1241,7 +1268,7 @@ var MemorySignalManager = class {
1241
1268
  });
1242
1269
  invariant4(!this._ctx.disposed, "Closed", {
1243
1270
  F: __dxlog_file4,
1244
- L: 163,
1271
+ L: 160,
1245
1272
  S: this,
1246
1273
  A: [
1247
1274
  "!this._ctx.disposed",
@@ -1256,7 +1283,7 @@ var MemorySignalManager = class {
1256
1283
  recipient
1257
1284
  }, {
1258
1285
  F: __dxlog_file4,
1259
- L: 169,
1286
+ L: 166,
1260
1287
  S: this,
1261
1288
  C: (f, a) => f(...a)
1262
1289
  });
@@ -1268,7 +1295,7 @@ var MemorySignalManager = class {
1268
1295
  recipient
1269
1296
  }, {
1270
1297
  F: __dxlog_file4,
1271
- L: 174,
1298
+ L: 171,
1272
1299
  S: this,
1273
1300
  C: (f, a) => f(...a)
1274
1301
  });
@@ -1281,7 +1308,7 @@ var MemorySignalManager = class {
1281
1308
  recipient
1282
1309
  }, {
1283
1310
  F: __dxlog_file4,
1284
- L: 182,
1311
+ L: 179,
1285
1312
  S: this,
1286
1313
  C: (f, a) => f(...a)
1287
1314
  });
@@ -1293,7 +1320,7 @@ var MemorySignalManager = class {
1293
1320
  ...dec(payload)
1294
1321
  }, {
1295
1322
  F: __dxlog_file4,
1296
- L: 186,
1323
+ L: 183,
1297
1324
  S: this,
1298
1325
  C: (f, a) => f(...a)
1299
1326
  });
@@ -1307,7 +1334,7 @@ var MemorySignalManager = class {
1307
1334
  err
1308
1335
  }, {
1309
1336
  F: __dxlog_file4,
1310
- L: 191,
1337
+ L: 188,
1311
1338
  S: this,
1312
1339
  C: (f, a) => f(...a)
1313
1340
  });
@@ -1318,7 +1345,7 @@ var MemorySignalManager = class {
1318
1345
  peerId
1319
1346
  }, {
1320
1347
  F: __dxlog_file4,
1321
- L: 196,
1348
+ L: 193,
1322
1349
  S: this,
1323
1350
  C: (f, a) => f(...a)
1324
1351
  });
@@ -1329,7 +1356,7 @@ var MemorySignalManager = class {
1329
1356
  peerId
1330
1357
  }, {
1331
1358
  F: __dxlog_file4,
1332
- L: 201,
1359
+ L: 198,
1333
1360
  S: this,
1334
1361
  C: (f, a) => f(...a)
1335
1362
  });
@@ -1375,7 +1402,6 @@ function _ts_decorate(decorators, target, key, desc) {
1375
1402
  }
1376
1403
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts";
1377
1404
  var WebsocketSignalManager = class {
1378
- // prettier-ignore
1379
1405
  constructor(_hosts) {
1380
1406
  this._hosts = _hosts;
1381
1407
  this._servers = /* @__PURE__ */ new Map();
@@ -1389,7 +1415,7 @@ var WebsocketSignalManager = class {
1389
1415
  hosts: this._hosts
1390
1416
  }, {
1391
1417
  F: __dxlog_file5,
1392
- L: 46,
1418
+ L: 43,
1393
1419
  S: this,
1394
1420
  C: (f, a) => f(...a)
1395
1421
  });
@@ -1411,7 +1437,7 @@ var WebsocketSignalManager = class {
1411
1437
  hosts: this._hosts
1412
1438
  }, {
1413
1439
  F: __dxlog_file5,
1414
- L: 68,
1440
+ L: 65,
1415
1441
  S: this,
1416
1442
  C: (f, a) => f(...a)
1417
1443
  });
@@ -1419,7 +1445,7 @@ var WebsocketSignalManager = class {
1419
1445
  id: this._instanceId
1420
1446
  }), {
1421
1447
  F: __dxlog_file5,
1422
- L: 69,
1448
+ L: 66,
1423
1449
  S: this,
1424
1450
  C: (f, a) => f(...a)
1425
1451
  });
@@ -1432,7 +1458,7 @@ var WebsocketSignalManager = class {
1432
1458
  id: this._instanceId
1433
1459
  }), {
1434
1460
  F: __dxlog_file5,
1435
- L: 76,
1461
+ L: 73,
1436
1462
  S: this,
1437
1463
  C: (f, a) => f(...a)
1438
1464
  });
@@ -1454,13 +1480,13 @@ var WebsocketSignalManager = class {
1454
1480
  peerId
1455
1481
  }, {
1456
1482
  F: __dxlog_file5,
1457
- L: 96,
1483
+ L: 93,
1458
1484
  S: this,
1459
1485
  C: (f, a) => f(...a)
1460
1486
  });
1461
1487
  invariant5(this._opened, "Closed", {
1462
1488
  F: __dxlog_file5,
1463
- L: 97,
1489
+ L: 94,
1464
1490
  S: this,
1465
1491
  A: [
1466
1492
  "this._opened",
@@ -1478,13 +1504,13 @@ var WebsocketSignalManager = class {
1478
1504
  peerId
1479
1505
  }, {
1480
1506
  F: __dxlog_file5,
1481
- L: 103,
1507
+ L: 100,
1482
1508
  S: this,
1483
1509
  C: (f, a) => f(...a)
1484
1510
  });
1485
1511
  invariant5(this._opened, "Closed", {
1486
1512
  F: __dxlog_file5,
1487
- L: 104,
1513
+ L: 101,
1488
1514
  S: this,
1489
1515
  A: [
1490
1516
  "this._opened",
@@ -1499,13 +1525,13 @@ var WebsocketSignalManager = class {
1499
1525
  async sendMessage({ author, recipient, payload }) {
1500
1526
  log5(`Signal ${recipient}`, void 0, {
1501
1527
  F: __dxlog_file5,
1502
- L: 118,
1528
+ L: 115,
1503
1529
  S: this,
1504
1530
  C: (f, a) => f(...a)
1505
1531
  });
1506
1532
  invariant5(this._opened, "Closed", {
1507
1533
  F: __dxlog_file5,
1508
- L: 119,
1534
+ L: 116,
1509
1535
  S: this,
1510
1536
  A: [
1511
1537
  "this._opened",
@@ -1519,7 +1545,7 @@ var WebsocketSignalManager = class {
1519
1545
  payload
1520
1546
  }).catch((err) => log5(err, void 0, {
1521
1547
  F: __dxlog_file5,
1522
- L: 122,
1548
+ L: 119,
1523
1549
  S: this,
1524
1550
  C: (f, a) => f(...a)
1525
1551
  }));
@@ -1528,13 +1554,13 @@ var WebsocketSignalManager = class {
1528
1554
  async subscribeMessages(peerId) {
1529
1555
  log5(`Subscribed for message stream peerId=${peerId}`, void 0, {
1530
1556
  F: __dxlog_file5,
1531
- L: 127,
1557
+ L: 124,
1532
1558
  S: this,
1533
1559
  C: (f, a) => f(...a)
1534
1560
  });
1535
1561
  invariant5(this._opened, "Closed", {
1536
1562
  F: __dxlog_file5,
1537
- L: 128,
1563
+ L: 125,
1538
1564
  S: this,
1539
1565
  A: [
1540
1566
  "this._opened",
@@ -1546,13 +1572,13 @@ var WebsocketSignalManager = class {
1546
1572
  async unsubscribeMessages(peerId) {
1547
1573
  log5(`Subscribed for message stream peerId=${peerId}`, void 0, {
1548
1574
  F: __dxlog_file5,
1549
- L: 134,
1575
+ L: 131,
1550
1576
  S: this,
1551
1577
  C: (f, a) => f(...a)
1552
1578
  });
1553
1579
  invariant5(this._opened, "Closed", {
1554
1580
  F: __dxlog_file5,
1555
- L: 135,
1581
+ L: 132,
1556
1582
  S: this,
1557
1583
  A: [
1558
1584
  "this._opened",
@@ -1565,7 +1591,7 @@ var WebsocketSignalManager = class {
1565
1591
  this._ctx = new Context4({
1566
1592
  onError: (err) => log5.catch(err, void 0, {
1567
1593
  F: __dxlog_file5,
1568
- L: 142,
1594
+ L: 139,
1569
1595
  S: this,
1570
1596
  C: (f, a) => f(...a)
1571
1597
  })