@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.
- package/dist/lib/browser/index.mjs +109 -27
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +105 -23
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/messenger.d.ts +9 -0
- package/dist/types/src/messenger.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/messenger.ts +77 -5
package/dist/lib/node/index.cjs
CHANGED
|
@@ -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 = "/
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
198
|
+
L: 140,
|
|
187
199
|
S: this,
|
|
188
200
|
C: (f, a) => f(...a)
|
|
189
201
|
});
|
|
190
202
|
this._onAckCallbacks.delete(reliablePayload.messageId);
|
|
191
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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 = "/
|
|
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 = "/
|
|
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 = "/
|
|
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 = "/
|
|
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) {
|