@dxos/messaging 0.1.57 → 0.1.58-main.0e9c99e

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.
@@ -51,9 +51,12 @@ var import_util = require("@dxos/util");
51
51
  var MESSAGE_TIMEOUT = 1e4;
52
52
 
53
53
  // packages/core/mesh/messaging/src/messenger.ts
54
- var __dxlog_file = "/mnt/ramdisk/work/packages/core/mesh/messaging/src/messenger.ts";
54
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/messenger.ts";
55
55
  var ReliablePayload = import_protocols.schema.getCodecForType("dxos.mesh.messaging.ReliablePayload");
56
56
  var Acknowledgement = import_protocols.schema.getCodecForType("dxos.mesh.messaging.Acknowledgement");
57
+ var ERROR_LIMIT = 5;
58
+ var NETWORK_REBOOT_DELAY = 3e3;
59
+ var RECEIVED_MESSAGES_GC_INTERVAL = 12e4;
57
60
  var Messenger = class {
58
61
  constructor({ signalManager, retryDelay = 300 }) {
59
62
  // { peerId, payloadType } => listeners set
@@ -61,8 +64,14 @@ var Messenger = class {
61
64
  // peerId => listeners set
62
65
  this._defaultListeners = new import_util.ComplexMap(import_keys.PublicKey.hash);
63
66
  this._onAckCallbacks = new import_util.ComplexMap(import_keys.PublicKey.hash);
64
- this._receivedMessages = new import_util.ComplexSet((key) => key.toHex());
67
+ this._receivedMessages = new import_util.ComplexSet(import_keys.PublicKey.hash);
68
+ /**
69
+ * Keys scheduled to be cleared from _receivedMessages on the next iteration.
70
+ */
71
+ this._toClear = new import_util.ComplexSet(import_keys.PublicKey.hash);
65
72
  this._closed = true;
73
+ this._errorCount = 0;
74
+ this._rebooting = false;
66
75
  this._signalManager = signalManager;
67
76
  this._retryDelay = retryDelay;
68
77
  this.open();
@@ -76,14 +85,14 @@ var Messenger = class {
76
85
  id: traceId
77
86
  }), {
78
87
  F: __dxlog_file,
79
- L: 62,
88
+ L: 74,
80
89
  S: this,
81
90
  C: (f, a) => f(...a)
82
91
  });
83
92
  this._ctx = new import_context.Context({
84
93
  onError: (err) => import_log.log.catch(err, void 0, {
85
94
  F: __dxlog_file,
86
- L: 64,
95
+ L: 76,
87
96
  S: this,
88
97
  C: (f, a) => f(...a)
89
98
  })
@@ -93,18 +102,21 @@ var Messenger = class {
93
102
  from: message.author
94
103
  }, {
95
104
  F: __dxlog_file,
96
- L: 68,
105
+ L: 80,
97
106
  S: this,
98
107
  C: (f, a) => f(...a)
99
108
  });
100
109
  await this._handleMessage(message);
101
110
  }));
111
+ (0, import_async.scheduleTaskInterval)(this._ctx, async () => {
112
+ this._performGc();
113
+ }, RECEIVED_MESSAGES_GC_INTERVAL);
102
114
  this._closed = false;
103
115
  import_log.log.trace("dxos.mesh.messenger.open", import_protocols.trace.end({
104
116
  id: traceId
105
117
  }), {
106
118
  F: __dxlog_file,
107
- L: 73,
119
+ L: 95,
108
120
  S: this,
109
121
  C: (f, a) => f(...a)
110
122
  });
@@ -119,7 +131,7 @@ var Messenger = class {
119
131
  async sendMessage({ author, recipient, payload }) {
120
132
  (0, import_invariant.invariant)(!this._closed, "Closed", {
121
133
  F: __dxlog_file,
122
- L: 85,
134
+ L: 107,
123
135
  S: this,
124
136
  A: [
125
137
  "!this._closed",
@@ -133,7 +145,7 @@ var Messenger = class {
133
145
  };
134
146
  (0, import_invariant.invariant)(!this._onAckCallbacks.has(reliablePayload.messageId), void 0, {
135
147
  F: __dxlog_file,
136
- L: 92,
148
+ L: 114,
137
149
  S: this,
138
150
  A: [
139
151
  "!this._onAckCallbacks.has(reliablePayload.messageId!)",
@@ -146,7 +158,7 @@ var Messenger = class {
146
158
  recipient
147
159
  }, {
148
160
  F: __dxlog_file,
149
- L: 93,
161
+ L: 115,
150
162
  S: this,
151
163
  C: (f, a) => f(...a)
152
164
  });
@@ -161,7 +173,7 @@ var Messenger = class {
161
173
  messageId: reliablePayload.messageId
162
174
  }, {
163
175
  F: __dxlog_file,
164
- L: 107,
176
+ L: 129,
165
177
  S: this,
166
178
  C: (f, a) => f(...a)
167
179
  });
@@ -173,22 +185,23 @@ var Messenger = class {
173
185
  err
174
186
  }, {
175
187
  F: __dxlog_file,
176
- L: 109,
188
+ L: 131,
177
189
  S: this,
178
190
  C: (f, a) => f(...a)
179
191
  }));
180
192
  }, this._retryDelay);
181
- (0, import_async.scheduleTask)(messageContext, () => {
193
+ (0, import_async.scheduleTask)(messageContext, async () => {
182
194
  (0, import_log.log)("message not delivered", {
183
195
  messageId: reliablePayload.messageId
184
196
  }, {
185
197
  F: __dxlog_file,
186
- L: 118,
198
+ L: 140,
187
199
  S: this,
188
200
  C: (f, a) => f(...a)
189
201
  });
190
202
  this._onAckCallbacks.delete(reliablePayload.messageId);
191
- timeoutHit(new import_async.TimeoutError(MESSAGE_TIMEOUT, "Message not delivered"));
203
+ await this.errorLimitCheck();
204
+ timeoutHit(new import_protocols.TimeoutError("signaling message not delivered", new import_async.TimeoutError(MESSAGE_TIMEOUT, "Message not delivered")));
192
205
  void messageContext.dispose();
193
206
  }, MESSAGE_TIMEOUT);
194
207
  this._onAckCallbacks.set(reliablePayload.messageId, () => {
@@ -203,6 +216,54 @@ var Messenger = class {
203
216
  });
204
217
  return promise;
205
218
  }
219
+ async errorLimitCheck() {
220
+ (0, import_log.log)(`checking error limit ${this._errorCount}`, void 0, {
221
+ F: __dxlog_file,
222
+ L: 165,
223
+ S: this,
224
+ C: (f, a) => f(...a)
225
+ });
226
+ if (this._errorCount++ > ERROR_LIMIT) {
227
+ await this.rebootNetwork();
228
+ }
229
+ }
230
+ async rebootNetwork() {
231
+ if (this._rebooting) {
232
+ return;
233
+ }
234
+ this._rebooting = true;
235
+ (0, import_log.log)("rebooting Messenger/SignalManager", void 0, {
236
+ F: __dxlog_file,
237
+ L: 177,
238
+ S: this,
239
+ C: (f, a) => f(...a)
240
+ });
241
+ await this.close();
242
+ await this._signalManager.close();
243
+ (0, import_log.log)("pausing", void 0, {
244
+ F: __dxlog_file,
245
+ L: 180,
246
+ S: this,
247
+ C: (f, a) => f(...a)
248
+ });
249
+ await new Promise((resolve) => setTimeout(resolve, NETWORK_REBOOT_DELAY));
250
+ (0, import_log.log)("done pausing", void 0, {
251
+ F: __dxlog_file,
252
+ L: 182,
253
+ S: this,
254
+ C: (f, a) => f(...a)
255
+ });
256
+ await this.open();
257
+ await this._signalManager.open();
258
+ (0, import_log.log)("done rebooting", void 0, {
259
+ F: __dxlog_file,
260
+ L: 185,
261
+ S: this,
262
+ C: (f, a) => f(...a)
263
+ });
264
+ this._errorCount = 0;
265
+ this._rebooting = false;
266
+ }
206
267
  /**
207
268
  * Subscribes onMessage function to messages that contains payload with payloadType.
208
269
  * @param payloadType if not specified, onMessage will be subscribed to all types of messages.
@@ -210,7 +271,7 @@ var Messenger = class {
210
271
  async listen({ peerId, payloadType, onMessage }) {
211
272
  (0, import_invariant.invariant)(!this._closed, "Closed", {
212
273
  F: __dxlog_file,
213
- L: 149,
274
+ L: 204,
214
275
  S: this,
215
276
  A: [
216
277
  "!this._closed",
@@ -274,7 +335,7 @@ var Messenger = class {
274
335
  async _handleReliablePayload({ author, recipient, payload }) {
275
336
  (0, import_invariant.invariant)(payload.type_url === "dxos.mesh.messaging.ReliablePayload", void 0, {
276
337
  F: __dxlog_file,
277
- L: 210,
338
+ L: 265,
278
339
  S: this,
279
340
  A: [
280
341
  "payload.type_url === 'dxos.mesh.messaging.ReliablePayload'",
@@ -288,7 +349,7 @@ var Messenger = class {
288
349
  messageId: reliablePayload.messageId
289
350
  }, {
290
351
  F: __dxlog_file,
291
- L: 213,
352
+ L: 268,
292
353
  S: this,
293
354
  C: (f, a) => f(...a)
294
355
  });
@@ -310,7 +371,7 @@ var Messenger = class {
310
371
  async _handleAcknowledgement({ payload }) {
311
372
  (0, import_invariant.invariant)(payload.type_url === "dxos.mesh.messaging.Acknowledgement", void 0, {
312
373
  F: __dxlog_file,
313
- L: 235,
374
+ L: 290,
314
375
  S: this,
315
376
  A: [
316
377
  "payload.type_url === 'dxos.mesh.messaging.Acknowledgement'",
@@ -326,7 +387,7 @@ var Messenger = class {
326
387
  to: author
327
388
  }, {
328
389
  F: __dxlog_file,
329
- L: 248,
390
+ L: 303,
330
391
  S: this,
331
392
  C: (f, a) => f(...a)
332
393
  });
@@ -362,6 +423,27 @@ var Messenger = class {
362
423
  }
363
424
  }
364
425
  }
426
+ _performGc() {
427
+ const start = performance.now();
428
+ for (const key of this._toClear.keys()) {
429
+ this._receivedMessages.delete(key);
430
+ }
431
+ this._toClear.clear();
432
+ for (const key of this._receivedMessages.keys()) {
433
+ this._toClear.add(key);
434
+ }
435
+ const elapsed = performance.now() - start;
436
+ if (elapsed > 100) {
437
+ import_log.log.warn("GC took too long", {
438
+ elapsed
439
+ }, {
440
+ F: __dxlog_file,
441
+ L: 351,
442
+ S: this,
443
+ C: (f, a) => f(...a)
444
+ });
445
+ }
446
+ }
365
447
  };
366
448
 
367
449
  // packages/core/mesh/messaging/src/signal-client/signal-client.ts
@@ -382,7 +464,7 @@ var import_keys2 = require("@dxos/keys");
382
464
  var import_log2 = require("@dxos/log");
383
465
  var import_protocols2 = require("@dxos/protocols");
384
466
  var import_rpc = require("@dxos/rpc");
385
- var __dxlog_file2 = "/mnt/ramdisk/work/packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts";
467
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts";
386
468
  var SignalRPCClient = class {
387
469
  constructor({ url, callbacks = {} }) {
388
470
  this._connectTrigger = new import_async2.Trigger();
@@ -617,7 +699,7 @@ var SignalRPCClient = class {
617
699
  };
618
700
 
619
701
  // packages/core/mesh/messaging/src/signal-client/signal-client.ts
620
- var __dxlog_file3 = "/mnt/ramdisk/work/packages/core/mesh/messaging/src/signal-client/signal-client.ts";
702
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-client.ts";
621
703
  var DEFAULT_RECONNECT_TIMEOUT = 100;
622
704
  var MAX_RECONNECT_TIMEOUT = 5e3;
623
705
  var ERROR_RECONCILE_DELAY = 1e3;
@@ -1084,7 +1166,7 @@ var import_keys4 = require("@dxos/keys");
1084
1166
  var import_log4 = require("@dxos/log");
1085
1167
  var import_protocols4 = require("@dxos/protocols");
1086
1168
  var import_util3 = require("@dxos/util");
1087
- var __dxlog_file4 = "/mnt/ramdisk/work/packages/core/mesh/messaging/src/signal-manager/memory-signal-manager.ts";
1169
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/memory-signal-manager.ts";
1088
1170
  var MemorySignalManagerContext = class {
1089
1171
  constructor() {
1090
1172
  // Swarm messages.
@@ -1357,7 +1439,7 @@ function _ts_decorate(decorators, target, key, desc) {
1357
1439
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1358
1440
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1359
1441
  }
1360
- var __dxlog_file5 = "/mnt/ramdisk/work/packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts";
1442
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts";
1361
1443
  var WebsocketSignalManager = class {
1362
1444
  // prettier-ignore
1363
1445
  constructor(_hosts) {