@dxos/messaging 0.8.3 → 0.8.4-main.1da679c
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/{chunk-ISA3S2ZX.mjs → chunk-46VUJLOF.mjs} +451 -334
- package/dist/lib/browser/chunk-46VUJLOF.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +46 -17
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{chunk-SO4RY3ON.mjs → chunk-4SVYY5G5.mjs} +451 -334
- package/dist/lib/node-esm/chunk-4SVYY5G5.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +46 -17
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/messenger.blueprint-test.d.ts.map +1 -1
- package/dist/types/src/messenger.d.ts +1 -1
- package/dist/types/src/messenger.d.ts.map +1 -1
- package/dist/types/src/signal-client/signal-client.d.ts +2 -2
- package/dist/types/src/signal-client/signal-client.d.ts.map +1 -1
- package/dist/types/src/signal-client/signal-local-state.d.ts +1 -1
- package/dist/types/src/signal-client/signal-local-state.d.ts.map +1 -1
- package/dist/types/src/signal-client/signal-rpc-client.d.ts.map +1 -1
- package/dist/types/src/signal-manager/edge-signal-manager.d.ts +1 -1
- package/dist/types/src/signal-manager/edge-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/index.d.ts +1 -1
- package/dist/types/src/signal-manager/index.d.ts.map +1 -1
- package/dist/types/src/signal-manager/memory-signal-manager.d.ts +1 -1
- package/dist/types/src/signal-manager/memory-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/signal-manager.d.ts +1 -1
- package/dist/types/src/signal-manager/signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/websocket-signal-manager.d.ts +1 -1
- package/dist/types/src/signal-manager/websocket-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-methods.d.ts +2 -2
- package/dist/types/src/signal-methods.d.ts.map +1 -1
- package/dist/types/src/testing/test-builder.d.ts +1 -1
- package/dist/types/src/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/testing/test-peer.d.ts +1 -1
- package/dist/types/src/testing/test-peer.d.ts.map +1 -1
- package/dist/types/src/testing/utils.d.ts +1 -1
- package/dist/types/src/testing/utils.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -16
- package/src/messenger.blueprint-test.ts +2 -2
- package/src/messenger.node.test.ts +2 -2
- package/src/messenger.ts +1 -1
- package/src/signal-client/signal-client.node.test.ts +4 -3
- package/src/signal-client/signal-client.ts +7 -6
- package/src/signal-client/signal-local-state.ts +4 -3
- package/src/signal-client/signal-rpc-client.node.test.ts +1 -1
- package/src/signal-client/signal-rpc-client.ts +4 -4
- package/src/signal-manager/edge-signal-manager.ts +6 -5
- package/src/signal-manager/index.ts +1 -1
- package/src/signal-manager/memory-signal-manager.ts +2 -1
- package/src/signal-manager/signal-manager.ts +1 -1
- package/src/signal-manager/websocket-signal-manager.node.test.ts +3 -2
- package/src/signal-manager/websocket-signal-manager.ts +4 -3
- package/src/signal-methods.ts +3 -3
- package/src/testing/test-builder.ts +3 -2
- package/src/testing/test-peer.ts +3 -2
- package/src/testing/utils.ts +3 -2
- package/dist/lib/browser/chunk-ISA3S2ZX.mjs.map +0 -7
- package/dist/lib/node/chunk-GMND65DN.cjs +0 -2291
- package/dist/lib/node/chunk-GMND65DN.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -43
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/testing/index.cjs +0 -159
- package/dist/lib/node/testing/index.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-SO4RY3ON.mjs.map +0 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "@dxos/node-std/globals";
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// src/messenger.ts
|
|
4
4
|
import { TimeoutError, scheduleExponentialBackoffTaskInterval, scheduleTask, scheduleTaskInterval } from "@dxos/async";
|
|
5
5
|
import { Context } from "@dxos/context";
|
|
6
6
|
import { invariant } from "@dxos/invariant";
|
|
@@ -10,7 +10,7 @@ import { TimeoutError as ProtocolTimeoutError, trace as trace2 } from "@dxos/pro
|
|
|
10
10
|
import { schema } from "@dxos/protocols/proto";
|
|
11
11
|
import { ComplexMap, ComplexSet } from "@dxos/util";
|
|
12
12
|
|
|
13
|
-
//
|
|
13
|
+
// src/messenger-monitor.ts
|
|
14
14
|
import { trace } from "@dxos/tracing";
|
|
15
15
|
var MessengerMonitor = class {
|
|
16
16
|
recordMessageAckFailed() {
|
|
@@ -26,32 +26,28 @@ var MessengerMonitor = class {
|
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
//
|
|
29
|
+
// src/timeouts.ts
|
|
30
30
|
var MESSAGE_TIMEOUT = 1e4;
|
|
31
31
|
|
|
32
|
-
//
|
|
33
|
-
|
|
32
|
+
// src/messenger.ts
|
|
33
|
+
function _define_property(obj, key, value) {
|
|
34
|
+
if (key in obj) {
|
|
35
|
+
Object.defineProperty(obj, key, {
|
|
36
|
+
value,
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true
|
|
40
|
+
});
|
|
41
|
+
} else {
|
|
42
|
+
obj[key] = value;
|
|
43
|
+
}
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/messaging/src/messenger.ts";
|
|
34
47
|
var ReliablePayload = schema.getCodecForType("dxos.mesh.messaging.ReliablePayload");
|
|
35
48
|
var Acknowledgement = schema.getCodecForType("dxos.mesh.messaging.Acknowledgement");
|
|
36
49
|
var RECEIVED_MESSAGES_GC_INTERVAL = 12e4;
|
|
37
50
|
var Messenger = class {
|
|
38
|
-
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
|
-
this._signalManager = signalManager;
|
|
52
|
-
this._retryDelay = retryDelay;
|
|
53
|
-
this.open();
|
|
54
|
-
}
|
|
55
51
|
open() {
|
|
56
52
|
if (!this._closed) {
|
|
57
53
|
return;
|
|
@@ -407,37 +403,48 @@ var Messenger = class {
|
|
|
407
403
|
});
|
|
408
404
|
}
|
|
409
405
|
}
|
|
406
|
+
constructor({ signalManager, retryDelay = 1e3 }) {
|
|
407
|
+
_define_property(this, "_monitor", new MessengerMonitor());
|
|
408
|
+
_define_property(this, "_signalManager", void 0);
|
|
409
|
+
_define_property(this, "_listeners", new ComplexMap(({ peerId, payloadType }) => peerId + payloadType));
|
|
410
|
+
_define_property(this, "_defaultListeners", /* @__PURE__ */ new Map());
|
|
411
|
+
_define_property(this, "_onAckCallbacks", new ComplexMap(PublicKey.hash));
|
|
412
|
+
_define_property(this, "_receivedMessages", new ComplexSet(PublicKey.hash));
|
|
413
|
+
_define_property(this, "_toClear", new ComplexSet(PublicKey.hash));
|
|
414
|
+
_define_property(this, "_ctx", void 0);
|
|
415
|
+
_define_property(this, "_closed", true);
|
|
416
|
+
_define_property(this, "_retryDelay", void 0);
|
|
417
|
+
this._signalManager = signalManager;
|
|
418
|
+
this._retryDelay = retryDelay;
|
|
419
|
+
this.open();
|
|
420
|
+
}
|
|
410
421
|
};
|
|
411
422
|
|
|
412
|
-
//
|
|
423
|
+
// src/signal-client/signal-client.ts
|
|
413
424
|
import { DeferredTask, Event as Event2, Trigger as Trigger2, scheduleTask as scheduleTask2, scheduleTaskInterval as scheduleTaskInterval3, sleep } from "@dxos/async";
|
|
414
|
-
import { cancelWithContext as cancelWithContext2
|
|
425
|
+
import { Resource, cancelWithContext as cancelWithContext2 } from "@dxos/context";
|
|
415
426
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
416
427
|
import { PublicKey as PublicKey4 } from "@dxos/keys";
|
|
417
428
|
import { log as log4 } from "@dxos/log";
|
|
418
429
|
import { trace as trace6 } from "@dxos/protocols";
|
|
419
430
|
import { SignalState } from "@dxos/protocols/proto/dxos/mesh/signal";
|
|
420
431
|
|
|
421
|
-
//
|
|
432
|
+
// src/signal-client/signal-client-monitor.ts
|
|
422
433
|
import { trace as trace3 } from "@dxos/tracing";
|
|
434
|
+
function _define_property2(obj, key, value) {
|
|
435
|
+
if (key in obj) {
|
|
436
|
+
Object.defineProperty(obj, key, {
|
|
437
|
+
value,
|
|
438
|
+
enumerable: true,
|
|
439
|
+
configurable: true,
|
|
440
|
+
writable: true
|
|
441
|
+
});
|
|
442
|
+
} else {
|
|
443
|
+
obj[key] = value;
|
|
444
|
+
}
|
|
445
|
+
return obj;
|
|
446
|
+
}
|
|
423
447
|
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
|
-
}
|
|
441
448
|
getRecordedTimestamps() {
|
|
442
449
|
return {
|
|
443
450
|
connectionStarted: this._connectionStarted,
|
|
@@ -507,6 +514,17 @@ var SignalClientMonitor = class {
|
|
|
507
514
|
}
|
|
508
515
|
});
|
|
509
516
|
}
|
|
517
|
+
constructor() {
|
|
518
|
+
_define_property2(this, "_performance", {
|
|
519
|
+
sentMessages: 0,
|
|
520
|
+
receivedMessages: 0,
|
|
521
|
+
reconnectCounter: 0,
|
|
522
|
+
joinCounter: 0,
|
|
523
|
+
leaveCounter: 0
|
|
524
|
+
});
|
|
525
|
+
_define_property2(this, "_connectionStarted", /* @__PURE__ */ new Date());
|
|
526
|
+
_define_property2(this, "_lastStateChange", /* @__PURE__ */ new Date());
|
|
527
|
+
}
|
|
510
528
|
};
|
|
511
529
|
var getByteCount = (message) => {
|
|
512
530
|
return message.author.peerKey.length + message.recipient.peerKey.length + message.payload.type_url.length + message.payload.value.length;
|
|
@@ -517,23 +535,27 @@ var createIdentityTags = (message) => {
|
|
|
517
535
|
};
|
|
518
536
|
};
|
|
519
537
|
|
|
520
|
-
//
|
|
521
|
-
import {
|
|
538
|
+
// src/signal-client/signal-local-state.ts
|
|
539
|
+
import { Event, asyncTimeout } from "@dxos/async";
|
|
522
540
|
import { cancelWithContext } from "@dxos/context";
|
|
523
541
|
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
524
542
|
import { log as log2 } from "@dxos/log";
|
|
525
543
|
import { ComplexMap as ComplexMap2, ComplexSet as ComplexSet2, safeAwaitAll } from "@dxos/util";
|
|
526
|
-
|
|
544
|
+
function _define_property3(obj, key, value) {
|
|
545
|
+
if (key in obj) {
|
|
546
|
+
Object.defineProperty(obj, key, {
|
|
547
|
+
value,
|
|
548
|
+
enumerable: true,
|
|
549
|
+
configurable: true,
|
|
550
|
+
writable: true
|
|
551
|
+
});
|
|
552
|
+
} else {
|
|
553
|
+
obj[key] = value;
|
|
554
|
+
}
|
|
555
|
+
return obj;
|
|
556
|
+
}
|
|
557
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-local-state.ts";
|
|
527
558
|
var SignalLocalState = class {
|
|
528
|
-
constructor(_onMessage, _onSwarmEvent) {
|
|
529
|
-
this._onMessage = _onMessage;
|
|
530
|
-
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
|
-
}
|
|
537
559
|
async safeCloseStreams() {
|
|
538
560
|
const streams = [
|
|
539
561
|
...this._swarmStreams.values()
|
|
@@ -577,7 +599,7 @@ var SignalLocalState = class {
|
|
|
577
599
|
peerId
|
|
578
600
|
}, {
|
|
579
601
|
F: __dxlog_file2,
|
|
580
|
-
L:
|
|
602
|
+
L: 80,
|
|
581
603
|
S: this,
|
|
582
604
|
C: (f, a) => f(...a)
|
|
583
605
|
});
|
|
@@ -629,7 +651,7 @@ var SignalLocalState = class {
|
|
|
629
651
|
swarmEvent
|
|
630
652
|
}, {
|
|
631
653
|
F: __dxlog_file2,
|
|
632
|
-
L:
|
|
654
|
+
L: 116,
|
|
633
655
|
S: this,
|
|
634
656
|
C: (f, a) => f(...a)
|
|
635
657
|
});
|
|
@@ -693,11 +715,27 @@ var SignalLocalState = class {
|
|
|
693
715
|
this.messageStreams.set(peerId, messageStream);
|
|
694
716
|
}
|
|
695
717
|
}
|
|
718
|
+
constructor(_onMessage, _onSwarmEvent) {
|
|
719
|
+
_define_property3(this, "_onMessage", void 0);
|
|
720
|
+
_define_property3(this, "_onSwarmEvent", void 0);
|
|
721
|
+
_define_property3(this, "_swarmStreams", void 0);
|
|
722
|
+
_define_property3(this, "_joinedTopics", void 0);
|
|
723
|
+
_define_property3(this, "_subscribedMessages", void 0);
|
|
724
|
+
_define_property3(this, "messageStreams", void 0);
|
|
725
|
+
_define_property3(this, "reconciled", void 0);
|
|
726
|
+
this._onMessage = _onMessage;
|
|
727
|
+
this._onSwarmEvent = _onSwarmEvent;
|
|
728
|
+
this._swarmStreams = new ComplexMap2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
|
|
729
|
+
this._joinedTopics = new ComplexSet2(({ topic, peerId }) => topic.toHex() + peerId.toHex());
|
|
730
|
+
this._subscribedMessages = new ComplexSet2(({ peerId }) => peerId.toHex());
|
|
731
|
+
this.messageStreams = new ComplexMap2((key) => key.toHex());
|
|
732
|
+
this.reconciled = new Event();
|
|
733
|
+
}
|
|
696
734
|
};
|
|
697
735
|
|
|
698
|
-
//
|
|
736
|
+
// src/signal-client/signal-rpc-client.ts
|
|
699
737
|
import WebSocket from "isomorphic-ws";
|
|
700
|
-
import {
|
|
738
|
+
import { TimeoutError as TimeoutError2, Trigger, scheduleTaskInterval as scheduleTaskInterval2 } from "@dxos/async";
|
|
701
739
|
import { Context as Context2 } from "@dxos/context";
|
|
702
740
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
703
741
|
import { PublicKey as PublicKey3 } from "@dxos/keys";
|
|
@@ -706,7 +744,7 @@ import { trace as trace5 } from "@dxos/protocols";
|
|
|
706
744
|
import { schema as schema2 } from "@dxos/protocols/proto";
|
|
707
745
|
import { createProtoRpcPeer } from "@dxos/rpc";
|
|
708
746
|
|
|
709
|
-
//
|
|
747
|
+
// src/signal-client/signal-rpc-client-monitor.ts
|
|
710
748
|
import { trace as trace4 } from "@dxos/tracing";
|
|
711
749
|
var SignalRpcClientMonitor = class {
|
|
712
750
|
recordClientCloseFailure(params) {
|
|
@@ -718,128 +756,23 @@ var SignalRpcClientMonitor = class {
|
|
|
718
756
|
}
|
|
719
757
|
};
|
|
720
758
|
|
|
721
|
-
//
|
|
722
|
-
|
|
759
|
+
// src/signal-client/signal-rpc-client.ts
|
|
760
|
+
function _define_property4(obj, key, value) {
|
|
761
|
+
if (key in obj) {
|
|
762
|
+
Object.defineProperty(obj, key, {
|
|
763
|
+
value,
|
|
764
|
+
enumerable: true,
|
|
765
|
+
configurable: true,
|
|
766
|
+
writable: true
|
|
767
|
+
});
|
|
768
|
+
} else {
|
|
769
|
+
obj[key] = value;
|
|
770
|
+
}
|
|
771
|
+
return obj;
|
|
772
|
+
}
|
|
773
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts";
|
|
723
774
|
var SIGNAL_KEEPALIVE_INTERVAL = 1e4;
|
|
724
775
|
var SignalRPCClient = class {
|
|
725
|
-
constructor({ url, callbacks = {} }) {
|
|
726
|
-
this._connectTrigger = new Trigger();
|
|
727
|
-
this._closed = false;
|
|
728
|
-
this._closeComplete = new Trigger();
|
|
729
|
-
this._monitor = new SignalRpcClientMonitor();
|
|
730
|
-
const traceId = PublicKey3.random().toHex();
|
|
731
|
-
log3.trace("dxos.mesh.signal-rpc-client.constructor", trace5.begin({
|
|
732
|
-
id: traceId
|
|
733
|
-
}), {
|
|
734
|
-
F: __dxlog_file3,
|
|
735
|
-
L: 66,
|
|
736
|
-
S: this,
|
|
737
|
-
C: (f, a) => f(...a)
|
|
738
|
-
});
|
|
739
|
-
this._url = url;
|
|
740
|
-
this._callbacks = callbacks;
|
|
741
|
-
this._socket = new WebSocket(this._url);
|
|
742
|
-
this._rpc = createProtoRpcPeer({
|
|
743
|
-
requested: {
|
|
744
|
-
Signal: schema2.getService("dxos.mesh.signal.Signal")
|
|
745
|
-
},
|
|
746
|
-
noHandshake: true,
|
|
747
|
-
port: {
|
|
748
|
-
send: (msg) => {
|
|
749
|
-
if (this._closed) {
|
|
750
|
-
return;
|
|
751
|
-
}
|
|
752
|
-
try {
|
|
753
|
-
this._socket.send(msg);
|
|
754
|
-
} catch (err) {
|
|
755
|
-
log3.warn("send error", err, {
|
|
756
|
-
F: __dxlog_file3,
|
|
757
|
-
L: 85,
|
|
758
|
-
S: this,
|
|
759
|
-
C: (f, a) => f(...a)
|
|
760
|
-
});
|
|
761
|
-
}
|
|
762
|
-
},
|
|
763
|
-
subscribe: (cb) => {
|
|
764
|
-
this._socket.onmessage = async (msg) => {
|
|
765
|
-
if (typeof Blob !== "undefined" && msg.data instanceof Blob) {
|
|
766
|
-
cb(Buffer.from(await msg.data.arrayBuffer()));
|
|
767
|
-
} else {
|
|
768
|
-
cb(msg.data);
|
|
769
|
-
}
|
|
770
|
-
};
|
|
771
|
-
}
|
|
772
|
-
},
|
|
773
|
-
encodingOptions: {
|
|
774
|
-
preserveAny: true
|
|
775
|
-
}
|
|
776
|
-
});
|
|
777
|
-
this._socket.onopen = async () => {
|
|
778
|
-
try {
|
|
779
|
-
await this._rpc.open();
|
|
780
|
-
if (this._closed) {
|
|
781
|
-
await this._safeCloseRpc();
|
|
782
|
-
return;
|
|
783
|
-
}
|
|
784
|
-
log3(`RPC open ${this._url}`, void 0, {
|
|
785
|
-
F: __dxlog_file3,
|
|
786
|
-
L: 110,
|
|
787
|
-
S: this,
|
|
788
|
-
C: (f, a) => f(...a)
|
|
789
|
-
});
|
|
790
|
-
this._callbacks.onConnected?.();
|
|
791
|
-
this._connectTrigger.wake();
|
|
792
|
-
this._keepaliveCtx = new Context2(void 0, {
|
|
793
|
-
F: __dxlog_file3,
|
|
794
|
-
L: 113
|
|
795
|
-
});
|
|
796
|
-
scheduleTaskInterval2(this._keepaliveCtx, async () => {
|
|
797
|
-
this._socket?.send("__ping__");
|
|
798
|
-
}, SIGNAL_KEEPALIVE_INTERVAL);
|
|
799
|
-
} catch (err) {
|
|
800
|
-
this._callbacks.onError?.(err);
|
|
801
|
-
this._socket.close();
|
|
802
|
-
this._closed = true;
|
|
803
|
-
}
|
|
804
|
-
};
|
|
805
|
-
this._socket.onclose = async () => {
|
|
806
|
-
log3(`Disconnected ${this._url}`, void 0, {
|
|
807
|
-
F: __dxlog_file3,
|
|
808
|
-
L: 133,
|
|
809
|
-
S: this,
|
|
810
|
-
C: (f, a) => f(...a)
|
|
811
|
-
});
|
|
812
|
-
this._callbacks.onDisconnected?.();
|
|
813
|
-
this._closeComplete.wake();
|
|
814
|
-
await this.close();
|
|
815
|
-
};
|
|
816
|
-
this._socket.onerror = async (event) => {
|
|
817
|
-
if (this._closed) {
|
|
818
|
-
this._socket.close();
|
|
819
|
-
return;
|
|
820
|
-
}
|
|
821
|
-
this._closed = true;
|
|
822
|
-
this._callbacks.onError?.(event.error ?? new Error(event.message));
|
|
823
|
-
await this._safeCloseRpc();
|
|
824
|
-
log3.warn(`Socket ${event.type ?? "unknown"} error`, {
|
|
825
|
-
message: event.message,
|
|
826
|
-
url: this._url
|
|
827
|
-
}, {
|
|
828
|
-
F: __dxlog_file3,
|
|
829
|
-
L: 149,
|
|
830
|
-
S: this,
|
|
831
|
-
C: (f, a) => f(...a)
|
|
832
|
-
});
|
|
833
|
-
};
|
|
834
|
-
log3.trace("dxos.mesh.signal-rpc-client.constructor", trace5.end({
|
|
835
|
-
id: traceId
|
|
836
|
-
}), {
|
|
837
|
-
F: __dxlog_file3,
|
|
838
|
-
L: 152,
|
|
839
|
-
S: this,
|
|
840
|
-
C: (f, a) => f(...a)
|
|
841
|
-
});
|
|
842
|
-
}
|
|
843
776
|
async close() {
|
|
844
777
|
if (this._closed) {
|
|
845
778
|
return;
|
|
@@ -957,37 +890,157 @@ var SignalRPCClient = class {
|
|
|
957
890
|
});
|
|
958
891
|
}
|
|
959
892
|
}
|
|
893
|
+
constructor({ url, callbacks = {} }) {
|
|
894
|
+
_define_property4(this, "_socket", void 0);
|
|
895
|
+
_define_property4(this, "_rpc", void 0);
|
|
896
|
+
_define_property4(this, "_connectTrigger", new Trigger());
|
|
897
|
+
_define_property4(this, "_keepaliveCtx", void 0);
|
|
898
|
+
_define_property4(this, "_closed", false);
|
|
899
|
+
_define_property4(this, "_url", void 0);
|
|
900
|
+
_define_property4(this, "_callbacks", void 0);
|
|
901
|
+
_define_property4(this, "_closeComplete", new Trigger());
|
|
902
|
+
_define_property4(this, "_monitor", new SignalRpcClientMonitor());
|
|
903
|
+
const traceId = PublicKey3.random().toHex();
|
|
904
|
+
log3.trace("dxos.mesh.signal-rpc-client.constructor", trace5.begin({
|
|
905
|
+
id: traceId
|
|
906
|
+
}), {
|
|
907
|
+
F: __dxlog_file3,
|
|
908
|
+
L: 66,
|
|
909
|
+
S: this,
|
|
910
|
+
C: (f, a) => f(...a)
|
|
911
|
+
});
|
|
912
|
+
this._url = url;
|
|
913
|
+
this._callbacks = callbacks;
|
|
914
|
+
this._socket = new WebSocket(this._url);
|
|
915
|
+
this._rpc = createProtoRpcPeer({
|
|
916
|
+
requested: {
|
|
917
|
+
Signal: schema2.getService("dxos.mesh.signal.Signal")
|
|
918
|
+
},
|
|
919
|
+
noHandshake: true,
|
|
920
|
+
port: {
|
|
921
|
+
send: (msg) => {
|
|
922
|
+
if (this._closed) {
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
try {
|
|
926
|
+
this._socket.send(msg);
|
|
927
|
+
} catch (err) {
|
|
928
|
+
log3.warn("send error", err, {
|
|
929
|
+
F: __dxlog_file3,
|
|
930
|
+
L: 85,
|
|
931
|
+
S: this,
|
|
932
|
+
C: (f, a) => f(...a)
|
|
933
|
+
});
|
|
934
|
+
}
|
|
935
|
+
},
|
|
936
|
+
subscribe: (cb) => {
|
|
937
|
+
this._socket.onmessage = async (msg) => {
|
|
938
|
+
if (typeof Blob !== "undefined" && msg.data instanceof Blob) {
|
|
939
|
+
cb(Buffer.from(await msg.data.arrayBuffer()));
|
|
940
|
+
} else {
|
|
941
|
+
cb(msg.data);
|
|
942
|
+
}
|
|
943
|
+
};
|
|
944
|
+
}
|
|
945
|
+
},
|
|
946
|
+
encodingOptions: {
|
|
947
|
+
preserveAny: true
|
|
948
|
+
}
|
|
949
|
+
});
|
|
950
|
+
this._socket.onopen = async () => {
|
|
951
|
+
try {
|
|
952
|
+
await this._rpc.open();
|
|
953
|
+
if (this._closed) {
|
|
954
|
+
await this._safeCloseRpc();
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
log3(`RPC open ${this._url}`, void 0, {
|
|
958
|
+
F: __dxlog_file3,
|
|
959
|
+
L: 110,
|
|
960
|
+
S: this,
|
|
961
|
+
C: (f, a) => f(...a)
|
|
962
|
+
});
|
|
963
|
+
this._callbacks.onConnected?.();
|
|
964
|
+
this._connectTrigger.wake();
|
|
965
|
+
this._keepaliveCtx = new Context2(void 0, {
|
|
966
|
+
F: __dxlog_file3,
|
|
967
|
+
L: 113
|
|
968
|
+
});
|
|
969
|
+
scheduleTaskInterval2(this._keepaliveCtx, async () => {
|
|
970
|
+
this._socket?.send("__ping__");
|
|
971
|
+
}, SIGNAL_KEEPALIVE_INTERVAL);
|
|
972
|
+
} catch (err) {
|
|
973
|
+
this._callbacks.onError?.(err);
|
|
974
|
+
this._socket.close();
|
|
975
|
+
this._closed = true;
|
|
976
|
+
}
|
|
977
|
+
};
|
|
978
|
+
this._socket.onclose = async () => {
|
|
979
|
+
log3(`Disconnected ${this._url}`, void 0, {
|
|
980
|
+
F: __dxlog_file3,
|
|
981
|
+
L: 133,
|
|
982
|
+
S: this,
|
|
983
|
+
C: (f, a) => f(...a)
|
|
984
|
+
});
|
|
985
|
+
this._callbacks.onDisconnected?.();
|
|
986
|
+
this._closeComplete.wake();
|
|
987
|
+
await this.close();
|
|
988
|
+
};
|
|
989
|
+
this._socket.onerror = async (event) => {
|
|
990
|
+
if (this._closed) {
|
|
991
|
+
this._socket.close();
|
|
992
|
+
return;
|
|
993
|
+
}
|
|
994
|
+
this._closed = true;
|
|
995
|
+
this._callbacks.onError?.(event.error ?? new Error(event.message));
|
|
996
|
+
await this._safeCloseRpc();
|
|
997
|
+
log3.warn(`Socket ${event.type ?? "unknown"} error`, {
|
|
998
|
+
message: event.message,
|
|
999
|
+
url: this._url
|
|
1000
|
+
}, {
|
|
1001
|
+
F: __dxlog_file3,
|
|
1002
|
+
L: 149,
|
|
1003
|
+
S: this,
|
|
1004
|
+
C: (f, a) => f(...a)
|
|
1005
|
+
});
|
|
1006
|
+
};
|
|
1007
|
+
log3.trace("dxos.mesh.signal-rpc-client.constructor", trace5.end({
|
|
1008
|
+
id: traceId
|
|
1009
|
+
}), {
|
|
1010
|
+
F: __dxlog_file3,
|
|
1011
|
+
L: 152,
|
|
1012
|
+
S: this,
|
|
1013
|
+
C: (f, a) => f(...a)
|
|
1014
|
+
});
|
|
1015
|
+
}
|
|
960
1016
|
};
|
|
961
1017
|
|
|
962
|
-
//
|
|
963
|
-
|
|
1018
|
+
// src/signal-client/signal-client.ts
|
|
1019
|
+
function _define_property5(obj, key, value) {
|
|
1020
|
+
if (key in obj) {
|
|
1021
|
+
Object.defineProperty(obj, key, {
|
|
1022
|
+
value,
|
|
1023
|
+
enumerable: true,
|
|
1024
|
+
configurable: true,
|
|
1025
|
+
writable: true
|
|
1026
|
+
});
|
|
1027
|
+
} else {
|
|
1028
|
+
obj[key] = value;
|
|
1029
|
+
}
|
|
1030
|
+
return obj;
|
|
1031
|
+
}
|
|
1032
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-client.ts";
|
|
964
1033
|
var DEFAULT_RECONNECT_TIMEOUT = 100;
|
|
965
1034
|
var MAX_RECONNECT_TIMEOUT = 5e3;
|
|
966
1035
|
var ERROR_RECONCILE_DELAY = 1e3;
|
|
967
1036
|
var RECONCILE_INTERVAL = 5e3;
|
|
968
1037
|
var SignalClient = class extends Resource {
|
|
969
|
-
/**
|
|
970
|
-
* @param _host Signal server websocket URL.
|
|
971
|
-
* @param onMessage called when a new message is received.
|
|
972
|
-
* @param onSwarmEvent called when a new swarm event is received.
|
|
973
|
-
* @param _getMetadata signal-message metadata provider, called for every message.
|
|
974
|
-
*/
|
|
975
|
-
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();
|
|
977
|
-
if (!this._host.startsWith("wss://") && !this._host.startsWith("ws://")) {
|
|
978
|
-
throw new Error(`Signal server requires a websocket URL. Provided: ${this._host}`);
|
|
979
|
-
}
|
|
980
|
-
this.localState = new SignalLocalState(async (message) => {
|
|
981
|
-
this._monitor.recordMessageReceived(message);
|
|
982
|
-
this.onMessage.emit(message);
|
|
983
|
-
}, async (event) => this.swarmEvent.emit(event));
|
|
984
|
-
}
|
|
985
1038
|
async _open() {
|
|
986
1039
|
log4.trace("dxos.mesh.signal-client.open", trace6.begin({
|
|
987
1040
|
id: this._instanceId
|
|
988
1041
|
}), {
|
|
989
1042
|
F: __dxlog_file4,
|
|
990
|
-
L:
|
|
1043
|
+
L: 97,
|
|
991
1044
|
S: this,
|
|
992
1045
|
C: (f, a) => f(...a)
|
|
993
1046
|
});
|
|
@@ -1005,7 +1058,7 @@ var SignalClient = class extends Resource {
|
|
|
1005
1058
|
}));
|
|
1006
1059
|
invariant3(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
|
|
1007
1060
|
F: __dxlog_file4,
|
|
1008
|
-
L:
|
|
1061
|
+
L: 107,
|
|
1009
1062
|
S: this,
|
|
1010
1063
|
A: [
|
|
1011
1064
|
"this._state === SignalState.CONNECTED",
|
|
@@ -1048,7 +1101,7 @@ var SignalClient = class extends Resource {
|
|
|
1048
1101
|
id: this._instanceId
|
|
1049
1102
|
}), {
|
|
1050
1103
|
F: __dxlog_file4,
|
|
1051
|
-
L:
|
|
1104
|
+
L: 140,
|
|
1052
1105
|
S: this,
|
|
1053
1106
|
C: (f, a) => f(...a)
|
|
1054
1107
|
});
|
|
@@ -1060,7 +1113,7 @@ var SignalClient = class extends Resource {
|
|
|
1060
1113
|
if (this._state === SignalState.CONNECTED && !this._lastReconciliationFailed) {
|
|
1061
1114
|
log4.warn("SignalClient error:", err, {
|
|
1062
1115
|
F: __dxlog_file4,
|
|
1063
|
-
L:
|
|
1116
|
+
L: 149,
|
|
1064
1117
|
S: this,
|
|
1065
1118
|
C: (f, a) => f(...a)
|
|
1066
1119
|
});
|
|
@@ -1070,7 +1123,7 @@ var SignalClient = class extends Resource {
|
|
|
1070
1123
|
async _close() {
|
|
1071
1124
|
log4("closing...", void 0, {
|
|
1072
1125
|
F: __dxlog_file4,
|
|
1073
|
-
L:
|
|
1126
|
+
L: 155,
|
|
1074
1127
|
S: this,
|
|
1075
1128
|
C: (f, a) => f(...a)
|
|
1076
1129
|
});
|
|
@@ -1083,7 +1136,7 @@ var SignalClient = class extends Resource {
|
|
|
1083
1136
|
await this._safeResetClient();
|
|
1084
1137
|
log4("closed", void 0, {
|
|
1085
1138
|
F: __dxlog_file4,
|
|
1086
|
-
L:
|
|
1139
|
+
L: 163,
|
|
1087
1140
|
S: this,
|
|
1088
1141
|
C: (f, a) => f(...a)
|
|
1089
1142
|
});
|
|
@@ -1103,7 +1156,7 @@ var SignalClient = class extends Resource {
|
|
|
1103
1156
|
peerId: args.peer.peerKey
|
|
1104
1157
|
}, {
|
|
1105
1158
|
F: __dxlog_file4,
|
|
1106
|
-
L:
|
|
1159
|
+
L: 177,
|
|
1107
1160
|
S: this,
|
|
1108
1161
|
C: (f, a) => f(...a)
|
|
1109
1162
|
});
|
|
@@ -1120,7 +1173,7 @@ var SignalClient = class extends Resource {
|
|
|
1120
1173
|
peerId: args.peer.peerKey
|
|
1121
1174
|
}, {
|
|
1122
1175
|
F: __dxlog_file4,
|
|
1123
|
-
L:
|
|
1176
|
+
L: 184,
|
|
1124
1177
|
S: this,
|
|
1125
1178
|
C: (f, a) => f(...a)
|
|
1126
1179
|
});
|
|
@@ -1138,7 +1191,7 @@ var SignalClient = class extends Resource {
|
|
|
1138
1191
|
await this._clientReady.wait();
|
|
1139
1192
|
invariant3(this._state === SignalState.CONNECTED, "Not connected to Signal Server", {
|
|
1140
1193
|
F: __dxlog_file4,
|
|
1141
|
-
L:
|
|
1194
|
+
L: 196,
|
|
1142
1195
|
S: this,
|
|
1143
1196
|
A: [
|
|
1144
1197
|
"this._state === SignalState.CONNECTED",
|
|
@@ -1147,7 +1200,7 @@ var SignalClient = class extends Resource {
|
|
|
1147
1200
|
});
|
|
1148
1201
|
invariant3(msg.author.peerKey, "Author key required", {
|
|
1149
1202
|
F: __dxlog_file4,
|
|
1150
|
-
L:
|
|
1203
|
+
L: 197,
|
|
1151
1204
|
S: this,
|
|
1152
1205
|
A: [
|
|
1153
1206
|
"msg.author.peerKey",
|
|
@@ -1156,7 +1209,7 @@ var SignalClient = class extends Resource {
|
|
|
1156
1209
|
});
|
|
1157
1210
|
invariant3(msg.recipient.peerKey, "Recipient key required", {
|
|
1158
1211
|
F: __dxlog_file4,
|
|
1159
|
-
L:
|
|
1212
|
+
L: 198,
|
|
1160
1213
|
S: this,
|
|
1161
1214
|
A: [
|
|
1162
1215
|
"msg.recipient.peerKey",
|
|
@@ -1173,7 +1226,7 @@ var SignalClient = class extends Resource {
|
|
|
1173
1226
|
async subscribeMessages(peer) {
|
|
1174
1227
|
invariant3(peer.peerKey, "Peer key required", {
|
|
1175
1228
|
F: __dxlog_file4,
|
|
1176
|
-
L:
|
|
1229
|
+
L: 208,
|
|
1177
1230
|
S: this,
|
|
1178
1231
|
A: [
|
|
1179
1232
|
"peer.peerKey",
|
|
@@ -1184,7 +1237,7 @@ var SignalClient = class extends Resource {
|
|
|
1184
1237
|
peer
|
|
1185
1238
|
}, {
|
|
1186
1239
|
F: __dxlog_file4,
|
|
1187
|
-
L:
|
|
1240
|
+
L: 209,
|
|
1188
1241
|
S: this,
|
|
1189
1242
|
C: (f, a) => f(...a)
|
|
1190
1243
|
});
|
|
@@ -1194,7 +1247,7 @@ var SignalClient = class extends Resource {
|
|
|
1194
1247
|
async unsubscribeMessages(peer) {
|
|
1195
1248
|
invariant3(peer.peerKey, "Peer key required", {
|
|
1196
1249
|
F: __dxlog_file4,
|
|
1197
|
-
L:
|
|
1250
|
+
L: 215,
|
|
1198
1251
|
S: this,
|
|
1199
1252
|
A: [
|
|
1200
1253
|
"peer.peerKey",
|
|
@@ -1205,7 +1258,7 @@ var SignalClient = class extends Resource {
|
|
|
1205
1258
|
peer
|
|
1206
1259
|
}, {
|
|
1207
1260
|
F: __dxlog_file4,
|
|
1208
|
-
L:
|
|
1261
|
+
L: 216,
|
|
1209
1262
|
S: this,
|
|
1210
1263
|
C: (f, a) => f(...a)
|
|
1211
1264
|
});
|
|
@@ -1220,13 +1273,13 @@ var SignalClient = class extends Resource {
|
|
|
1220
1273
|
state: this._state
|
|
1221
1274
|
}, {
|
|
1222
1275
|
F: __dxlog_file4,
|
|
1223
|
-
L:
|
|
1276
|
+
L: 225,
|
|
1224
1277
|
S: this,
|
|
1225
1278
|
C: (f, a) => f(...a)
|
|
1226
1279
|
});
|
|
1227
1280
|
invariant3(!this._client, "Client already created", {
|
|
1228
1281
|
F: __dxlog_file4,
|
|
1229
|
-
L:
|
|
1282
|
+
L: 226,
|
|
1230
1283
|
S: this,
|
|
1231
1284
|
A: [
|
|
1232
1285
|
"!this._client",
|
|
@@ -1238,7 +1291,7 @@ var SignalClient = class extends Resource {
|
|
|
1238
1291
|
this._connectionCtx.onDispose(async () => {
|
|
1239
1292
|
log4("connection context disposed", void 0, {
|
|
1240
1293
|
F: __dxlog_file4,
|
|
1241
|
-
L:
|
|
1294
|
+
L: 233,
|
|
1242
1295
|
S: this,
|
|
1243
1296
|
C: (f, a) => f(...a)
|
|
1244
1297
|
});
|
|
@@ -1253,7 +1306,7 @@ var SignalClient = class extends Resource {
|
|
|
1253
1306
|
if (client === this._client) {
|
|
1254
1307
|
log4("socket connected", void 0, {
|
|
1255
1308
|
F: __dxlog_file4,
|
|
1256
|
-
L:
|
|
1309
|
+
L: 244,
|
|
1257
1310
|
S: this,
|
|
1258
1311
|
C: (f, a) => f(...a)
|
|
1259
1312
|
});
|
|
@@ -1268,7 +1321,7 @@ var SignalClient = class extends Resource {
|
|
|
1268
1321
|
state: this._state
|
|
1269
1322
|
}, {
|
|
1270
1323
|
F: __dxlog_file4,
|
|
1271
|
-
L:
|
|
1324
|
+
L: 253,
|
|
1272
1325
|
S: this,
|
|
1273
1326
|
C: (f, a) => f(...a)
|
|
1274
1327
|
});
|
|
@@ -1285,7 +1338,7 @@ var SignalClient = class extends Resource {
|
|
|
1285
1338
|
state: this._state
|
|
1286
1339
|
}, {
|
|
1287
1340
|
F: __dxlog_file4,
|
|
1288
|
-
L:
|
|
1341
|
+
L: 265,
|
|
1289
1342
|
S: this,
|
|
1290
1343
|
C: (f, a) => f(...a)
|
|
1291
1344
|
});
|
|
@@ -1310,14 +1363,14 @@ var SignalClient = class extends Resource {
|
|
|
1310
1363
|
state: this._state
|
|
1311
1364
|
}, {
|
|
1312
1365
|
F: __dxlog_file4,
|
|
1313
|
-
L:
|
|
1366
|
+
L: 280,
|
|
1314
1367
|
S: this,
|
|
1315
1368
|
C: (f, a) => f(...a)
|
|
1316
1369
|
});
|
|
1317
1370
|
if (this._state === SignalState.RECONNECTING) {
|
|
1318
1371
|
log4.info("Signal api already reconnecting.", void 0, {
|
|
1319
1372
|
F: __dxlog_file4,
|
|
1320
|
-
L:
|
|
1373
|
+
L: 283,
|
|
1321
1374
|
S: this,
|
|
1322
1375
|
C: (f, a) => f(...a)
|
|
1323
1376
|
});
|
|
@@ -1359,7 +1412,7 @@ var SignalClient = class extends Resource {
|
|
|
1359
1412
|
status: this.getStatus()
|
|
1360
1413
|
}, {
|
|
1361
1414
|
F: __dxlog_file4,
|
|
1362
|
-
L:
|
|
1415
|
+
L: 324,
|
|
1363
1416
|
S: this,
|
|
1364
1417
|
C: (f, a) => f(...a)
|
|
1365
1418
|
});
|
|
@@ -1379,12 +1432,34 @@ var SignalClient = class extends Resource {
|
|
|
1379
1432
|
});
|
|
1380
1433
|
this._client = void 0;
|
|
1381
1434
|
}
|
|
1435
|
+
/**
|
|
1436
|
+
* @param _host Signal server websocket URL.
|
|
1437
|
+
* @param onMessage called when a new message is received.
|
|
1438
|
+
* @param onSwarmEvent called when a new swarm event is received.
|
|
1439
|
+
* @param _getMetadata signal-message metadata provider, called for every message.
|
|
1440
|
+
*/
|
|
1441
|
+
constructor(_host, _getMetadata) {
|
|
1442
|
+
super(), _define_property5(this, "_host", void 0), _define_property5(this, "_getMetadata", void 0), _define_property5(this, "_monitor", void 0), _define_property5(this, "_state", void 0), _define_property5(this, "_lastError", void 0), _define_property5(this, "_lastReconciliationFailed", void 0), _define_property5(this, "_clientReady", void 0), _define_property5(this, "_connectionCtx", void 0), _define_property5(this, "_client", void 0), _define_property5(this, "_reconcileTask", void 0), _define_property5(this, "_reconnectTask", void 0), /**
|
|
1443
|
+
* Number of milliseconds after which the connection will be attempted again in case of error.
|
|
1444
|
+
*/
|
|
1445
|
+
_define_property5(this, "_reconnectAfter", void 0), _define_property5(this, "_instanceId", void 0), /**
|
|
1446
|
+
* @internal
|
|
1447
|
+
*/
|
|
1448
|
+
_define_property5(this, "localState", void 0), _define_property5(this, "statusChanged", void 0), _define_property5(this, "onMessage", void 0), _define_property5(this, "swarmEvent", void 0), 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();
|
|
1449
|
+
if (!this._host.startsWith("wss://") && !this._host.startsWith("ws://")) {
|
|
1450
|
+
throw new Error(`Signal server requires a websocket URL. Provided: ${this._host}`);
|
|
1451
|
+
}
|
|
1452
|
+
this.localState = new SignalLocalState(async (message) => {
|
|
1453
|
+
this._monitor.recordMessageReceived(message);
|
|
1454
|
+
this.onMessage.emit(message);
|
|
1455
|
+
}, async (event) => this.swarmEvent.emit(event));
|
|
1456
|
+
}
|
|
1382
1457
|
};
|
|
1383
1458
|
|
|
1384
|
-
//
|
|
1459
|
+
// src/signal-methods.ts
|
|
1385
1460
|
var PeerInfoHash = ({ peerKey }) => peerKey;
|
|
1386
1461
|
|
|
1387
|
-
//
|
|
1462
|
+
// src/signal-manager/memory-signal-manager.ts
|
|
1388
1463
|
import { Event as Event3, Trigger as Trigger3 } from "@dxos/async";
|
|
1389
1464
|
import { Context as Context3 } from "@dxos/context";
|
|
1390
1465
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
@@ -1392,38 +1467,35 @@ import { PublicKey as PublicKey5 } from "@dxos/keys";
|
|
|
1392
1467
|
import { log as log5 } from "@dxos/log";
|
|
1393
1468
|
import { schema as schema3 } from "@dxos/protocols/proto";
|
|
1394
1469
|
import { ComplexMap as ComplexMap3, ComplexSet as ComplexSet3 } from "@dxos/util";
|
|
1395
|
-
|
|
1470
|
+
function _define_property6(obj, key, value) {
|
|
1471
|
+
if (key in obj) {
|
|
1472
|
+
Object.defineProperty(obj, key, {
|
|
1473
|
+
value,
|
|
1474
|
+
enumerable: true,
|
|
1475
|
+
configurable: true,
|
|
1476
|
+
writable: true
|
|
1477
|
+
});
|
|
1478
|
+
} else {
|
|
1479
|
+
obj[key] = value;
|
|
1480
|
+
}
|
|
1481
|
+
return obj;
|
|
1482
|
+
}
|
|
1483
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/memory-signal-manager.ts";
|
|
1396
1484
|
var MemorySignalManagerContext = class {
|
|
1397
1485
|
constructor() {
|
|
1398
|
-
|
|
1399
|
-
this
|
|
1400
|
-
|
|
1401
|
-
this.swarms = new ComplexMap3(PublicKey5.hash);
|
|
1402
|
-
// Map of connections for each peer for signaling.
|
|
1403
|
-
this.connections = new ComplexMap3(PeerInfoHash);
|
|
1486
|
+
_define_property6(this, "swarmEvent", new Event3());
|
|
1487
|
+
_define_property6(this, "swarms", new ComplexMap3(PublicKey5.hash));
|
|
1488
|
+
_define_property6(this, "connections", new ComplexMap3(PeerInfoHash));
|
|
1404
1489
|
}
|
|
1405
1490
|
};
|
|
1406
1491
|
var MemorySignalManager = class {
|
|
1407
|
-
constructor(_context) {
|
|
1408
|
-
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
|
-
this._ctx = new Context3(void 0, {
|
|
1415
|
-
F: __dxlog_file5,
|
|
1416
|
-
L: 53
|
|
1417
|
-
});
|
|
1418
|
-
this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
|
|
1419
|
-
}
|
|
1420
1492
|
async open() {
|
|
1421
1493
|
if (!this._ctx.disposed) {
|
|
1422
1494
|
return;
|
|
1423
1495
|
}
|
|
1424
1496
|
this._ctx = new Context3(void 0, {
|
|
1425
1497
|
F: __dxlog_file5,
|
|
1426
|
-
L:
|
|
1498
|
+
L: 63
|
|
1427
1499
|
});
|
|
1428
1500
|
this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
|
|
1429
1501
|
await Promise.all([
|
|
@@ -1449,7 +1521,7 @@ var MemorySignalManager = class {
|
|
|
1449
1521
|
async join({ topic, peer }) {
|
|
1450
1522
|
invariant4(!this._ctx.disposed, "Closed", {
|
|
1451
1523
|
F: __dxlog_file5,
|
|
1452
|
-
L:
|
|
1524
|
+
L: 92,
|
|
1453
1525
|
S: this,
|
|
1454
1526
|
A: [
|
|
1455
1527
|
"!this._ctx.disposed",
|
|
@@ -1486,7 +1558,7 @@ var MemorySignalManager = class {
|
|
|
1486
1558
|
async leave({ topic, peer }) {
|
|
1487
1559
|
invariant4(!this._ctx.disposed, "Closed", {
|
|
1488
1560
|
F: __dxlog_file5,
|
|
1489
|
-
L:
|
|
1561
|
+
L: 124,
|
|
1490
1562
|
S: this,
|
|
1491
1563
|
A: [
|
|
1492
1564
|
"!this._ctx.disposed",
|
|
@@ -1519,13 +1591,13 @@ var MemorySignalManager = class {
|
|
|
1519
1591
|
...dec(payload)
|
|
1520
1592
|
}, {
|
|
1521
1593
|
F: __dxlog_file5,
|
|
1522
|
-
L:
|
|
1594
|
+
L: 157,
|
|
1523
1595
|
S: this,
|
|
1524
1596
|
C: (f, a) => f(...a)
|
|
1525
1597
|
});
|
|
1526
1598
|
invariant4(recipient, void 0, {
|
|
1527
1599
|
F: __dxlog_file5,
|
|
1528
|
-
L:
|
|
1600
|
+
L: 159,
|
|
1529
1601
|
S: this,
|
|
1530
1602
|
A: [
|
|
1531
1603
|
"recipient",
|
|
@@ -1534,7 +1606,7 @@ var MemorySignalManager = class {
|
|
|
1534
1606
|
});
|
|
1535
1607
|
invariant4(!this._ctx.disposed, "Closed", {
|
|
1536
1608
|
F: __dxlog_file5,
|
|
1537
|
-
L:
|
|
1609
|
+
L: 160,
|
|
1538
1610
|
S: this,
|
|
1539
1611
|
A: [
|
|
1540
1612
|
"!this._ctx.disposed",
|
|
@@ -1549,7 +1621,7 @@ var MemorySignalManager = class {
|
|
|
1549
1621
|
recipient
|
|
1550
1622
|
}, {
|
|
1551
1623
|
F: __dxlog_file5,
|
|
1552
|
-
L:
|
|
1624
|
+
L: 166,
|
|
1553
1625
|
S: this,
|
|
1554
1626
|
C: (f, a) => f(...a)
|
|
1555
1627
|
});
|
|
@@ -1561,7 +1633,7 @@ var MemorySignalManager = class {
|
|
|
1561
1633
|
recipient
|
|
1562
1634
|
}, {
|
|
1563
1635
|
F: __dxlog_file5,
|
|
1564
|
-
L:
|
|
1636
|
+
L: 171,
|
|
1565
1637
|
S: this,
|
|
1566
1638
|
C: (f, a) => f(...a)
|
|
1567
1639
|
});
|
|
@@ -1574,7 +1646,7 @@ var MemorySignalManager = class {
|
|
|
1574
1646
|
recipient
|
|
1575
1647
|
}, {
|
|
1576
1648
|
F: __dxlog_file5,
|
|
1577
|
-
L:
|
|
1649
|
+
L: 179,
|
|
1578
1650
|
S: this,
|
|
1579
1651
|
C: (f, a) => f(...a)
|
|
1580
1652
|
});
|
|
@@ -1586,7 +1658,7 @@ var MemorySignalManager = class {
|
|
|
1586
1658
|
...dec(payload)
|
|
1587
1659
|
}, {
|
|
1588
1660
|
F: __dxlog_file5,
|
|
1589
|
-
L:
|
|
1661
|
+
L: 183,
|
|
1590
1662
|
S: this,
|
|
1591
1663
|
C: (f, a) => f(...a)
|
|
1592
1664
|
});
|
|
@@ -1600,7 +1672,7 @@ var MemorySignalManager = class {
|
|
|
1600
1672
|
err
|
|
1601
1673
|
}, {
|
|
1602
1674
|
F: __dxlog_file5,
|
|
1603
|
-
L:
|
|
1675
|
+
L: 188,
|
|
1604
1676
|
S: this,
|
|
1605
1677
|
C: (f, a) => f(...a)
|
|
1606
1678
|
});
|
|
@@ -1611,7 +1683,7 @@ var MemorySignalManager = class {
|
|
|
1611
1683
|
peerInfo
|
|
1612
1684
|
}, {
|
|
1613
1685
|
F: __dxlog_file5,
|
|
1614
|
-
L:
|
|
1686
|
+
L: 193,
|
|
1615
1687
|
S: this,
|
|
1616
1688
|
C: (f, a) => f(...a)
|
|
1617
1689
|
});
|
|
@@ -1622,7 +1694,7 @@ var MemorySignalManager = class {
|
|
|
1622
1694
|
peerInfo
|
|
1623
1695
|
}, {
|
|
1624
1696
|
F: __dxlog_file5,
|
|
1625
|
-
L:
|
|
1697
|
+
L: 198,
|
|
1626
1698
|
S: this,
|
|
1627
1699
|
C: (f, a) => f(...a)
|
|
1628
1700
|
});
|
|
@@ -1634,6 +1706,26 @@ var MemorySignalManager = class {
|
|
|
1634
1706
|
unfreeze() {
|
|
1635
1707
|
this._freezeTrigger.wake();
|
|
1636
1708
|
}
|
|
1709
|
+
constructor(_context) {
|
|
1710
|
+
_define_property6(this, "_context", void 0);
|
|
1711
|
+
_define_property6(this, "statusChanged", void 0);
|
|
1712
|
+
_define_property6(this, "swarmEvent", void 0);
|
|
1713
|
+
_define_property6(this, "onMessage", void 0);
|
|
1714
|
+
_define_property6(this, "_joinedSwarms", void 0);
|
|
1715
|
+
_define_property6(this, "_ctx", void 0);
|
|
1716
|
+
_define_property6(this, "_freezeTrigger", void 0);
|
|
1717
|
+
this._context = _context;
|
|
1718
|
+
this.statusChanged = new Event3();
|
|
1719
|
+
this.swarmEvent = new Event3();
|
|
1720
|
+
this.onMessage = new Event3();
|
|
1721
|
+
this._joinedSwarms = new ComplexSet3(({ topic, peer }) => topic.toHex() + peer.peerKey);
|
|
1722
|
+
this._freezeTrigger = new Trigger3().wake();
|
|
1723
|
+
this._ctx = new Context3(void 0, {
|
|
1724
|
+
F: __dxlog_file5,
|
|
1725
|
+
L: 54
|
|
1726
|
+
});
|
|
1727
|
+
this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
|
|
1728
|
+
}
|
|
1637
1729
|
};
|
|
1638
1730
|
var dec = (payload) => {
|
|
1639
1731
|
if (!payload.type_url.endsWith("ReliablePayload")) {
|
|
@@ -1649,7 +1741,7 @@ var dec = (payload) => {
|
|
|
1649
1741
|
return {};
|
|
1650
1742
|
};
|
|
1651
1743
|
|
|
1652
|
-
//
|
|
1744
|
+
// src/signal-manager/websocket-signal-manager.ts
|
|
1653
1745
|
import { Event as Event4, sleep as sleep2, synchronized } from "@dxos/async";
|
|
1654
1746
|
import { LifecycleState, Resource as Resource2 } from "@dxos/context";
|
|
1655
1747
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
@@ -1658,7 +1750,7 @@ import { log as log6 } from "@dxos/log";
|
|
|
1658
1750
|
import { RateLimitExceededError, TimeoutError as TimeoutError3, trace as trace8 } from "@dxos/protocols";
|
|
1659
1751
|
import { BitField, safeAwaitAll as safeAwaitAll2 } from "@dxos/util";
|
|
1660
1752
|
|
|
1661
|
-
//
|
|
1753
|
+
// src/signal-manager/websocket-signal-manager-monitor.ts
|
|
1662
1754
|
import { trace as trace7 } from "@dxos/tracing";
|
|
1663
1755
|
var WebsocketSignalManagerMonitor = class {
|
|
1664
1756
|
recordRateLimitExceeded() {
|
|
@@ -1674,46 +1766,36 @@ var WebsocketSignalManagerMonitor = class {
|
|
|
1674
1766
|
}
|
|
1675
1767
|
};
|
|
1676
1768
|
|
|
1677
|
-
//
|
|
1769
|
+
// src/signal-manager/websocket-signal-manager.ts
|
|
1770
|
+
function _define_property7(obj, key, value) {
|
|
1771
|
+
if (key in obj) {
|
|
1772
|
+
Object.defineProperty(obj, key, {
|
|
1773
|
+
value,
|
|
1774
|
+
enumerable: true,
|
|
1775
|
+
configurable: true,
|
|
1776
|
+
writable: true
|
|
1777
|
+
});
|
|
1778
|
+
} else {
|
|
1779
|
+
obj[key] = value;
|
|
1780
|
+
}
|
|
1781
|
+
return obj;
|
|
1782
|
+
}
|
|
1678
1783
|
function _ts_decorate(decorators, target, key, desc) {
|
|
1679
1784
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1680
1785
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1681
1786
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1682
1787
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1683
1788
|
}
|
|
1684
|
-
var __dxlog_file6 = "/
|
|
1789
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts";
|
|
1685
1790
|
var MAX_SERVER_FAILURES = 5;
|
|
1686
1791
|
var WSS_SIGNAL_SERVER_REBOOT_DELAY = 3e3;
|
|
1687
1792
|
var WebsocketSignalManager = class extends Resource2 {
|
|
1688
|
-
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();
|
|
1690
|
-
log6("Created WebsocketSignalManager", {
|
|
1691
|
-
hosts: this._hosts
|
|
1692
|
-
}, {
|
|
1693
|
-
F: __dxlog_file6,
|
|
1694
|
-
L: 58,
|
|
1695
|
-
S: this,
|
|
1696
|
-
C: (f, a) => f(...a)
|
|
1697
|
-
});
|
|
1698
|
-
for (const host of this._hosts) {
|
|
1699
|
-
if (this._servers.has(host.server)) {
|
|
1700
|
-
continue;
|
|
1701
|
-
}
|
|
1702
|
-
const server = new SignalClient(host.server, this._getMetadata);
|
|
1703
|
-
server.swarmEvent.on((data) => this.swarmEvent.emit(data));
|
|
1704
|
-
server.onMessage.on((data) => this.onMessage.emit(data));
|
|
1705
|
-
server.statusChanged.on(() => this.statusChanged.emit(this.getStatus()));
|
|
1706
|
-
this._servers.set(host.server, server);
|
|
1707
|
-
this.failureCount.set(host.server, 0);
|
|
1708
|
-
}
|
|
1709
|
-
this._failedServersBitfield = BitField.zeros(this._hosts.length);
|
|
1710
|
-
}
|
|
1711
1793
|
async _open() {
|
|
1712
1794
|
log6("open signal manager", {
|
|
1713
1795
|
hosts: this._hosts
|
|
1714
1796
|
}, {
|
|
1715
1797
|
F: __dxlog_file6,
|
|
1716
|
-
L:
|
|
1798
|
+
L: 79,
|
|
1717
1799
|
S: this,
|
|
1718
1800
|
C: (f, a) => f(...a)
|
|
1719
1801
|
});
|
|
@@ -1721,7 +1803,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1721
1803
|
id: this._instanceId
|
|
1722
1804
|
}), {
|
|
1723
1805
|
F: __dxlog_file6,
|
|
1724
|
-
L:
|
|
1806
|
+
L: 80,
|
|
1725
1807
|
S: this,
|
|
1726
1808
|
C: (f, a) => f(...a)
|
|
1727
1809
|
});
|
|
@@ -1730,7 +1812,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1730
1812
|
id: this._instanceId
|
|
1731
1813
|
}), {
|
|
1732
1814
|
F: __dxlog_file6,
|
|
1733
|
-
L:
|
|
1815
|
+
L: 84,
|
|
1734
1816
|
S: this,
|
|
1735
1817
|
C: (f, a) => f(...a)
|
|
1736
1818
|
});
|
|
@@ -1743,13 +1825,13 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1743
1825
|
serverName
|
|
1744
1826
|
}, {
|
|
1745
1827
|
F: __dxlog_file6,
|
|
1746
|
-
L:
|
|
1828
|
+
L: 92,
|
|
1747
1829
|
S: this,
|
|
1748
1830
|
C: (f, a) => f(...a)
|
|
1749
1831
|
});
|
|
1750
1832
|
invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
1751
1833
|
F: __dxlog_file6,
|
|
1752
|
-
L:
|
|
1834
|
+
L: 93,
|
|
1753
1835
|
S: this,
|
|
1754
1836
|
A: [
|
|
1755
1837
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -1759,7 +1841,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1759
1841
|
const server = this._servers.get(serverName);
|
|
1760
1842
|
invariant5(server, "server not found", {
|
|
1761
1843
|
F: __dxlog_file6,
|
|
1762
|
-
L:
|
|
1844
|
+
L: 96,
|
|
1763
1845
|
S: this,
|
|
1764
1846
|
A: [
|
|
1765
1847
|
"server",
|
|
@@ -1779,13 +1861,13 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1779
1861
|
peer
|
|
1780
1862
|
}, {
|
|
1781
1863
|
F: __dxlog_file6,
|
|
1782
|
-
L:
|
|
1864
|
+
L: 109,
|
|
1783
1865
|
S: this,
|
|
1784
1866
|
C: (f, a) => f(...a)
|
|
1785
1867
|
});
|
|
1786
1868
|
invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
1787
1869
|
F: __dxlog_file6,
|
|
1788
|
-
L:
|
|
1870
|
+
L: 110,
|
|
1789
1871
|
S: this,
|
|
1790
1872
|
A: [
|
|
1791
1873
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -1803,13 +1885,13 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1803
1885
|
peer
|
|
1804
1886
|
}, {
|
|
1805
1887
|
F: __dxlog_file6,
|
|
1806
|
-
L:
|
|
1888
|
+
L: 116,
|
|
1807
1889
|
S: this,
|
|
1808
1890
|
C: (f, a) => f(...a)
|
|
1809
1891
|
});
|
|
1810
1892
|
invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
1811
1893
|
F: __dxlog_file6,
|
|
1812
|
-
L:
|
|
1894
|
+
L: 117,
|
|
1813
1895
|
S: this,
|
|
1814
1896
|
A: [
|
|
1815
1897
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -1829,13 +1911,13 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1829
1911
|
recipient
|
|
1830
1912
|
}, {
|
|
1831
1913
|
F: __dxlog_file6,
|
|
1832
|
-
L:
|
|
1914
|
+
L: 126,
|
|
1833
1915
|
S: this,
|
|
1834
1916
|
C: (f, a) => f(...a)
|
|
1835
1917
|
});
|
|
1836
1918
|
invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
1837
1919
|
F: __dxlog_file6,
|
|
1838
|
-
L:
|
|
1920
|
+
L: 127,
|
|
1839
1921
|
S: this,
|
|
1840
1922
|
A: [
|
|
1841
1923
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -1853,7 +1935,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1853
1935
|
err
|
|
1854
1936
|
}, {
|
|
1855
1937
|
F: __dxlog_file6,
|
|
1856
|
-
L:
|
|
1938
|
+
L: 135,
|
|
1857
1939
|
S: this,
|
|
1858
1940
|
C: (f, a) => f(...a)
|
|
1859
1941
|
});
|
|
@@ -1863,7 +1945,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1863
1945
|
err
|
|
1864
1946
|
}, {
|
|
1865
1947
|
F: __dxlog_file6,
|
|
1866
|
-
L:
|
|
1948
|
+
L: 138,
|
|
1867
1949
|
S: this,
|
|
1868
1950
|
C: (f, a) => f(...a)
|
|
1869
1951
|
});
|
|
@@ -1873,7 +1955,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1873
1955
|
err
|
|
1874
1956
|
}, {
|
|
1875
1957
|
F: __dxlog_file6,
|
|
1876
|
-
L:
|
|
1958
|
+
L: 141,
|
|
1877
1959
|
S: this,
|
|
1878
1960
|
C: (f, a) => f(...a)
|
|
1879
1961
|
});
|
|
@@ -1896,7 +1978,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1896
1978
|
failureCount
|
|
1897
1979
|
}, {
|
|
1898
1980
|
F: __dxlog_file6,
|
|
1899
|
-
L:
|
|
1981
|
+
L: 155,
|
|
1900
1982
|
S: this,
|
|
1901
1983
|
C: (f, a) => f(...a)
|
|
1902
1984
|
});
|
|
@@ -1914,7 +1996,7 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1914
1996
|
serverName
|
|
1915
1997
|
}, {
|
|
1916
1998
|
F: __dxlog_file6,
|
|
1917
|
-
L:
|
|
1999
|
+
L: 168,
|
|
1918
2000
|
S: this,
|
|
1919
2001
|
C: (f, a) => f(...a)
|
|
1920
2002
|
});
|
|
@@ -1927,13 +2009,13 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1927
2009
|
peer
|
|
1928
2010
|
}, {
|
|
1929
2011
|
F: __dxlog_file6,
|
|
1930
|
-
L:
|
|
2012
|
+
L: 175,
|
|
1931
2013
|
S: this,
|
|
1932
2014
|
C: (f, a) => f(...a)
|
|
1933
2015
|
});
|
|
1934
2016
|
invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
1935
2017
|
F: __dxlog_file6,
|
|
1936
|
-
L:
|
|
2018
|
+
L: 176,
|
|
1937
2019
|
S: this,
|
|
1938
2020
|
A: [
|
|
1939
2021
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -1947,13 +2029,13 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1947
2029
|
peer
|
|
1948
2030
|
}, {
|
|
1949
2031
|
F: __dxlog_file6,
|
|
1950
|
-
L:
|
|
2032
|
+
L: 182,
|
|
1951
2033
|
S: this,
|
|
1952
2034
|
C: (f, a) => f(...a)
|
|
1953
2035
|
});
|
|
1954
2036
|
invariant5(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
1955
2037
|
F: __dxlog_file6,
|
|
1956
|
-
L:
|
|
2038
|
+
L: 183,
|
|
1957
2039
|
S: this,
|
|
1958
2040
|
A: [
|
|
1959
2041
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -1965,6 +2047,32 @@ var WebsocketSignalManager = class extends Resource2 {
|
|
|
1965
2047
|
async _forEachServer(fn) {
|
|
1966
2048
|
return Promise.all(Array.from(this._servers.entries()).map(([serverName, server], idx) => fn(server, serverName, idx)));
|
|
1967
2049
|
}
|
|
2050
|
+
constructor(_hosts, _getMetadata) {
|
|
2051
|
+
super(), _define_property7(this, "_hosts", void 0), _define_property7(this, "_getMetadata", void 0), _define_property7(this, "_servers", void 0), _define_property7(this, "_monitor", void 0), /**
|
|
2052
|
+
* Used to avoid logging failed server restarts more than once until the server actually recovers.
|
|
2053
|
+
*/
|
|
2054
|
+
_define_property7(this, "_failedServersBitfield", void 0), _define_property7(this, "failureCount", void 0), _define_property7(this, "statusChanged", void 0), _define_property7(this, "swarmEvent", void 0), _define_property7(this, "onMessage", void 0), _define_property7(this, "_instanceId", void 0), 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();
|
|
2055
|
+
log6("Created WebsocketSignalManager", {
|
|
2056
|
+
hosts: this._hosts
|
|
2057
|
+
}, {
|
|
2058
|
+
F: __dxlog_file6,
|
|
2059
|
+
L: 59,
|
|
2060
|
+
S: this,
|
|
2061
|
+
C: (f, a) => f(...a)
|
|
2062
|
+
});
|
|
2063
|
+
for (const host of this._hosts) {
|
|
2064
|
+
if (this._servers.has(host.server)) {
|
|
2065
|
+
continue;
|
|
2066
|
+
}
|
|
2067
|
+
const server = new SignalClient(host.server, this._getMetadata);
|
|
2068
|
+
server.swarmEvent.on((data) => this.swarmEvent.emit(data));
|
|
2069
|
+
server.onMessage.on((data) => this.onMessage.emit(data));
|
|
2070
|
+
server.statusChanged.on(() => this.statusChanged.emit(this.getStatus()));
|
|
2071
|
+
this._servers.set(host.server, server);
|
|
2072
|
+
this.failureCount.set(host.server, 0);
|
|
2073
|
+
}
|
|
2074
|
+
this._failedServersBitfield = BitField.zeros(this._hosts.length);
|
|
2075
|
+
}
|
|
1968
2076
|
};
|
|
1969
2077
|
_ts_decorate([
|
|
1970
2078
|
synchronized
|
|
@@ -1976,34 +2084,32 @@ _ts_decorate([
|
|
|
1976
2084
|
synchronized
|
|
1977
2085
|
], WebsocketSignalManager.prototype, "checkServerFailure", null);
|
|
1978
2086
|
|
|
1979
|
-
//
|
|
2087
|
+
// src/signal-manager/edge-signal-manager.ts
|
|
1980
2088
|
import { Event as Event5, scheduleMicroTask } from "@dxos/async";
|
|
1981
|
-
import {
|
|
2089
|
+
import { Resource as Resource3, cancelWithContext as cancelWithContext3 } from "@dxos/context";
|
|
1982
2090
|
import { protocol } from "@dxos/edge-client";
|
|
1983
2091
|
import { invariant as invariant6 } from "@dxos/invariant";
|
|
1984
2092
|
import { PublicKey as PublicKey7 } from "@dxos/keys";
|
|
1985
2093
|
import { log as log7 } from "@dxos/log";
|
|
1986
2094
|
import { EdgeService } from "@dxos/protocols";
|
|
1987
2095
|
import { bufWkt } from "@dxos/protocols/buf";
|
|
1988
|
-
import {
|
|
2096
|
+
import { SwarmRequest_Action as SwarmRequestAction, SwarmRequestSchema, SwarmResponseSchema } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
|
|
1989
2097
|
import { ComplexMap as ComplexMap4, ComplexSet as ComplexSet4 } from "@dxos/util";
|
|
1990
|
-
|
|
2098
|
+
function _define_property8(obj, key, value) {
|
|
2099
|
+
if (key in obj) {
|
|
2100
|
+
Object.defineProperty(obj, key, {
|
|
2101
|
+
value,
|
|
2102
|
+
enumerable: true,
|
|
2103
|
+
configurable: true,
|
|
2104
|
+
writable: true
|
|
2105
|
+
});
|
|
2106
|
+
} else {
|
|
2107
|
+
obj[key] = value;
|
|
2108
|
+
}
|
|
2109
|
+
return obj;
|
|
2110
|
+
}
|
|
2111
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/edge-signal-manager.ts";
|
|
1991
2112
|
var EdgeSignalManager = class extends Resource3 {
|
|
1992
|
-
constructor({ edgeConnection }) {
|
|
1993
|
-
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
|
-
this._edgeConnection = edgeConnection;
|
|
2006
|
-
}
|
|
2007
2113
|
async _open() {
|
|
2008
2114
|
this._ctx.onDispose(this._edgeConnection.onMessage((message) => this._onMessage(message)));
|
|
2009
2115
|
this._ctx.onDispose(this._edgeConnection.onReconnected(() => {
|
|
@@ -2023,7 +2129,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2023
2129
|
}
|
|
2024
2130
|
}, {
|
|
2025
2131
|
F: __dxlog_file7,
|
|
2026
|
-
L:
|
|
2132
|
+
L: 66,
|
|
2027
2133
|
S: this,
|
|
2028
2134
|
C: (f, a) => f(...a)
|
|
2029
2135
|
});
|
|
@@ -2085,7 +2191,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2085
2191
|
}
|
|
2086
2192
|
}, {
|
|
2087
2193
|
F: __dxlog_file7,
|
|
2088
|
-
L:
|
|
2194
|
+
L: 122,
|
|
2089
2195
|
S: this,
|
|
2090
2196
|
C: (f, a) => f(...a)
|
|
2091
2197
|
});
|
|
@@ -2120,7 +2226,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2120
2226
|
_processSwarmResponse(message) {
|
|
2121
2227
|
invariant6(protocol.getPayloadType(message) === SwarmResponseSchema.typeName, "Wrong payload type", {
|
|
2122
2228
|
F: __dxlog_file7,
|
|
2123
|
-
L:
|
|
2229
|
+
L: 159,
|
|
2124
2230
|
S: this,
|
|
2125
2231
|
A: [
|
|
2126
2232
|
"protocol.getPayloadType(message) === SwarmResponseSchema.typeName",
|
|
@@ -2164,7 +2270,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2164
2270
|
_processMessage(message) {
|
|
2165
2271
|
invariant6(protocol.getPayloadType(message) === bufWkt.AnySchema.typeName, "Wrong payload type", {
|
|
2166
2272
|
F: __dxlog_file7,
|
|
2167
|
-
L:
|
|
2273
|
+
L: 197,
|
|
2168
2274
|
S: this,
|
|
2169
2275
|
A: [
|
|
2170
2276
|
"protocol.getPayloadType(message) === bufWkt.AnySchema.typeName",
|
|
@@ -2174,7 +2280,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2174
2280
|
const payload = protocol.getPayload(message, bufWkt.AnySchema);
|
|
2175
2281
|
invariant6(message.source, "source is missing", {
|
|
2176
2282
|
F: __dxlog_file7,
|
|
2177
|
-
L:
|
|
2283
|
+
L: 199,
|
|
2178
2284
|
S: this,
|
|
2179
2285
|
A: [
|
|
2180
2286
|
"message.source",
|
|
@@ -2183,7 +2289,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2183
2289
|
});
|
|
2184
2290
|
invariant6(message.target, "target is missing", {
|
|
2185
2291
|
F: __dxlog_file7,
|
|
2186
|
-
L:
|
|
2292
|
+
L: 200,
|
|
2187
2293
|
S: this,
|
|
2188
2294
|
A: [
|
|
2189
2295
|
"message.target",
|
|
@@ -2192,7 +2298,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2192
2298
|
});
|
|
2193
2299
|
invariant6(message.target.length === 1, "target should have exactly one item", {
|
|
2194
2300
|
F: __dxlog_file7,
|
|
2195
|
-
L:
|
|
2301
|
+
L: 201,
|
|
2196
2302
|
S: this,
|
|
2197
2303
|
A: [
|
|
2198
2304
|
"message.target.length === 1",
|
|
@@ -2216,7 +2322,7 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2216
2322
|
swarms: Array.from(this._swarmPeers.keys())
|
|
2217
2323
|
}, {
|
|
2218
2324
|
F: __dxlog_file7,
|
|
2219
|
-
L:
|
|
2325
|
+
L: 220,
|
|
2220
2326
|
S: this,
|
|
2221
2327
|
C: (f, a) => f(...a)
|
|
2222
2328
|
});
|
|
@@ -2231,6 +2337,17 @@ var EdgeSignalManager = class extends Resource3 {
|
|
|
2231
2337
|
});
|
|
2232
2338
|
}
|
|
2233
2339
|
}
|
|
2340
|
+
constructor({ edgeConnection }) {
|
|
2341
|
+
super(), /**
|
|
2342
|
+
* @deprecated
|
|
2343
|
+
*/
|
|
2344
|
+
_define_property8(this, "swarmEvent", new Event5()), _define_property8(this, "swarmState", new Event5()), _define_property8(this, "onMessage", new Event5()), /**
|
|
2345
|
+
* Swarm key -> { peer: <own state payload>, joinedPeers: <state of swarm> }.
|
|
2346
|
+
*/
|
|
2347
|
+
// TODO(mykola): This class should not contain swarm state joinedPeers. Temporary before network-manager API changes to accept list of peers.
|
|
2348
|
+
_define_property8(this, "_swarmPeers", new ComplexMap4(PublicKey7.hash)), _define_property8(this, "_edgeConnection", void 0);
|
|
2349
|
+
this._edgeConnection = edgeConnection;
|
|
2350
|
+
}
|
|
2234
2351
|
};
|
|
2235
2352
|
var createMessageSource = (topic, peerInfo) => {
|
|
2236
2353
|
return {
|
|
@@ -2239,11 +2356,11 @@ var createMessageSource = (topic, peerInfo) => {
|
|
|
2239
2356
|
};
|
|
2240
2357
|
};
|
|
2241
2358
|
|
|
2242
|
-
//
|
|
2359
|
+
// src/signal-manager/utils.ts
|
|
2243
2360
|
import { invariant as invariant7 } from "@dxos/invariant";
|
|
2244
2361
|
import { log as log8 } from "@dxos/log";
|
|
2245
2362
|
import { DeviceKind } from "@dxos/protocols/proto/dxos/client/services";
|
|
2246
|
-
var __dxlog_file8 = "/
|
|
2363
|
+
var __dxlog_file8 = "/__w/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/utils.ts";
|
|
2247
2364
|
var setIdentityTags = ({ identityService, devicesService, setTag }) => {
|
|
2248
2365
|
identityService.queryIdentity().subscribe((idqr) => {
|
|
2249
2366
|
if (!idqr?.identity?.identityKey) {
|
|
@@ -2306,4 +2423,4 @@ export {
|
|
|
2306
2423
|
EdgeSignalManager,
|
|
2307
2424
|
setIdentityTags
|
|
2308
2425
|
};
|
|
2309
|
-
//# sourceMappingURL=chunk-
|
|
2426
|
+
//# sourceMappingURL=chunk-46VUJLOF.mjs.map
|