@dxos/messaging 0.5.8 → 0.5.9-main.079a532

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/lib/browser/index.mjs +812 -559
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +778 -545
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/types/src/messenger-monitor.d.ts +8 -0
  8. package/dist/types/src/messenger-monitor.d.ts.map +1 -0
  9. package/dist/types/src/messenger.d.ts +1 -0
  10. package/dist/types/src/messenger.d.ts.map +1 -1
  11. package/dist/types/src/signal-client/signal-client-monitor.d.ts +30 -0
  12. package/dist/types/src/signal-client/signal-client-monitor.d.ts.map +1 -0
  13. package/dist/types/src/signal-client/signal-client.d.ts +25 -50
  14. package/dist/types/src/signal-client/signal-client.d.ts.map +1 -1
  15. package/dist/types/src/signal-client/signal-local-state.d.ts +46 -0
  16. package/dist/types/src/signal-client/signal-local-state.d.ts.map +1 -0
  17. package/dist/types/src/signal-client/signal-rpc-client-monitor.d.ts +6 -0
  18. package/dist/types/src/signal-client/signal-rpc-client-monitor.d.ts.map +1 -0
  19. package/dist/types/src/signal-client/signal-rpc-client.d.ts +4 -2
  20. package/dist/types/src/signal-client/signal-rpc-client.d.ts.map +1 -1
  21. package/dist/types/src/signal-manager/memory-signal-manager.d.ts +0 -2
  22. package/dist/types/src/signal-manager/memory-signal-manager.d.ts.map +1 -1
  23. package/dist/types/src/signal-manager/signal-manager.d.ts +0 -2
  24. package/dist/types/src/signal-manager/signal-manager.d.ts.map +1 -1
  25. package/dist/types/src/signal-manager/websocket-signal-manager-monitor.d.ts +8 -0
  26. package/dist/types/src/signal-manager/websocket-signal-manager-monitor.d.ts.map +1 -0
  27. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts +7 -3
  28. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts.map +1 -1
  29. package/dist/types/src/signal-methods.d.ts +6 -4
  30. package/dist/types/src/signal-methods.d.ts.map +1 -1
  31. package/package.json +13 -12
  32. package/src/messenger-monitor.ts +20 -0
  33. package/src/messenger.ts +16 -5
  34. package/src/signal-client/signal-client-monitor.ts +111 -0
  35. package/src/signal-client/signal-client.test.ts +111 -259
  36. package/src/signal-client/signal-client.ts +141 -252
  37. package/src/signal-client/signal-local-state.ts +156 -0
  38. package/src/signal-client/signal-rpc-client-monitor.ts +15 -0
  39. package/src/signal-client/signal-rpc-client.ts +38 -21
  40. package/src/signal-manager/memory-signal-manager.ts +0 -2
  41. package/src/signal-manager/signal-manager.ts +0 -3
  42. package/src/signal-manager/websocket-signal-manager-monitor.ts +20 -0
  43. package/src/signal-manager/websocket-signal-manager.ts +48 -26
  44. package/src/signal-methods.ts +7 -4
@@ -1,82 +1,56 @@
1
1
  import { Event } from '@dxos/async';
2
2
  import { type Any } from '@dxos/codec-protobuf';
3
+ import { Resource } from '@dxos/context';
3
4
  import { PublicKey } from '@dxos/keys';
4
5
  import { type SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
5
6
  import { type Message, type SignalClientMethods, type SignalStatus } from '../signal-methods';
6
- export type CommandTrace = {
7
- messageId: string;
8
- host: string;
9
- incoming: boolean;
10
- time: number;
11
- method: string;
12
- payload: any;
13
- response?: any;
14
- error?: string;
15
- };
16
7
  /**
17
8
  * KUBE-specific signaling client.
18
9
  * Establishes a websocket connection to signal server and provides RPC methods.
10
+ * Subscription state updates are executed immediately against the local state which
11
+ * is reconciled periodically.
19
12
  */
20
- export declare class SignalClient implements SignalClientMethods {
13
+ export declare class SignalClient extends Resource implements SignalClientMethods {
21
14
  private readonly _host;
22
- private readonly _onMessage;
23
- private readonly _onSwarmEvent;
24
15
  private readonly _getMetadata?;
16
+ private readonly _monitor;
25
17
  private _state;
26
18
  private _lastError?;
27
- /**
28
- * Number of milliseconds after which the connection will be attempted again in case of error.
29
- */
30
- private _reconnectAfter;
31
- /**
32
- * Timestamp of when the connection attempt was began.
33
- */
34
- private _connectionStarted;
35
- /**
36
- * Timestamp of last state change.
37
- */
38
- private _lastStateChange;
39
- private _client?;
19
+ private _lastReconciliationFailed;
40
20
  private readonly _clientReady;
41
- private _ctx?;
42
21
  private _connectionCtx?;
22
+ private _client?;
43
23
  private _reconcileTask?;
44
24
  private _reconnectTask?;
45
- readonly statusChanged: Event<SignalStatus>;
46
- readonly commandTrace: Event<CommandTrace>;
47
- /**
48
- * Swarm events streams. Keys represent actually joined topic and peerId.
49
- */
50
- private readonly _swarmStreams;
51
- /**
52
- * Represent desired joined topic and peerId.
53
- */
54
- private readonly _joinedTopics;
55
25
  /**
56
- * Represent desired message subscriptions.
26
+ * Number of milliseconds after which the connection will be attempted again in case of error.
57
27
  */
58
- private readonly _subscribedMessages;
28
+ private _reconnectAfter;
59
29
  private readonly _instanceId;
60
- private readonly _performance;
30
+ readonly statusChanged: Event<SignalStatus>;
61
31
  /**
62
32
  * @param _host Signal server websocket URL.
33
+ * @param onMessage called when a new message is received.
34
+ * @param onSwarmEvent called when a new swarm event is received.
35
+ * @param _getMetadata signal-message metadata provider, called for every message.
63
36
  */
64
- constructor(_host: string, _onMessage: (params: {
37
+ constructor(_host: string, onMessage: (params: {
65
38
  author: PublicKey;
66
39
  recipient: PublicKey;
67
40
  payload: Any;
68
- }) => Promise<void>, _onSwarmEvent: (params: {
41
+ }) => Promise<void>, onSwarmEvent: (params: {
69
42
  topic: PublicKey;
70
43
  swarmEvent: SwarmEvent;
71
44
  }) => Promise<void>, _getMetadata?: (() => any) | undefined);
72
- open(): Promise<void>;
73
- close(): Promise<void>;
45
+ protected _open(): Promise<void>;
46
+ protected _catch(err: Error): Promise<void>;
47
+ protected _close(): Promise<void>;
74
48
  getStatus(): SignalStatus;
75
- join({ topic, peerId }: {
49
+ join(args: {
76
50
  topic: PublicKey;
77
51
  peerId: PublicKey;
78
52
  }): Promise<void>;
79
- leave({ topic, peerId }: {
53
+ leave(args: {
80
54
  topic: PublicKey;
81
55
  peerId: PublicKey;
82
56
  }): Promise<void>;
@@ -84,11 +58,12 @@ export declare class SignalClient implements SignalClientMethods {
84
58
  subscribeMessages(peerId: PublicKey): Promise<void>;
85
59
  unsubscribeMessages(peerId: PublicKey): Promise<void>;
86
60
  private _scheduleReconcileAfterError;
87
- private _setState;
88
61
  private _createClient;
89
- private _incrementReconnectTimeout;
90
62
  private _reconnect;
91
- private _reconcileSwarmSubscriptions;
92
- private _reconcileMessageSubscriptions;
63
+ private _onConnected;
64
+ private _onDisconnected;
65
+ private _setState;
66
+ private _updateReconnectTimeout;
67
+ private _safeResetClient;
93
68
  }
94
69
  //# sourceMappingURL=signal-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal-client.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-client.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,EAAsD,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAmC,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAKtF,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAO9F;;;;;GAKG;AAEH,qBAAa,YAAa,SAAQ,QAAS,YAAW,mBAAmB;IAmCrE,OAAO,CAAC,QAAQ,CAAC,KAAK;IAGtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IArChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,yBAAyB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAElC,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,cAAc,CAAC,CAAe;IAEtC;;OAEG;IACH,OAAO,CAAC,eAAe,CAA6B;IAEpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAO1D,QAAQ,CAAC,aAAa,sBAA6B;IAEnD;;;;;OAKG;gBAEgB,KAAK,EAAE,MAAM,EAC9B,SAAS,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EAC/F,YAAY,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EACpE,YAAY,CAAC,SAAQ,GAAG,aAAA;cAalB,KAAK;cA+CL,MAAM,CAAC,GAAG,EAAE,KAAK;cAWjB,MAAM;IAY/B,SAAS,IAAI,YAAY;IAUnB,IAAI,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,KAAK,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAMnC,mBAAmB,CAAC,MAAM,EAAE,SAAS;IAK3C,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,aAAa;YAuDP,UAAU;IAmBxB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,uBAAuB;YAOjB,gBAAgB;CAQ/B"}
@@ -0,0 +1,46 @@
1
+ import type { Any } from '@dxos/codec-protobuf';
2
+ import { type Context } from '@dxos/context';
3
+ import { PublicKey } from '@dxos/keys';
4
+ import { type SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
5
+ import { type SignalRPCClient } from './signal-rpc-client';
6
+ export declare class SignalLocalState {
7
+ private readonly _onMessage;
8
+ private readonly _onSwarmEvent;
9
+ /**
10
+ * Swarm events streams. Keys represent actually joined topic and peerId.
11
+ */
12
+ private readonly _swarmStreams;
13
+ /**
14
+ * Represent desired joined topic and peerId.
15
+ */
16
+ private readonly _joinedTopics;
17
+ /**
18
+ * Represent desired message subscriptions.
19
+ */
20
+ private readonly _subscribedMessages;
21
+ constructor(_onMessage: (params: {
22
+ author: PublicKey;
23
+ recipient: PublicKey;
24
+ payload: Any;
25
+ }) => Promise<void>, _onSwarmEvent: (params: {
26
+ topic: PublicKey;
27
+ swarmEvent: SwarmEvent;
28
+ }) => Promise<void>);
29
+ safeCloseStreams(): Promise<{
30
+ failureCount: number;
31
+ }>;
32
+ join({ topic, peerId }: {
33
+ topic: PublicKey;
34
+ peerId: PublicKey;
35
+ }): void;
36
+ leave({ topic, peerId }: {
37
+ topic: PublicKey;
38
+ peerId: PublicKey;
39
+ }): void;
40
+ subscribeMessages(peerId: PublicKey): void;
41
+ unsubscribeMessages(peerId: PublicKey): void;
42
+ reconcile(ctx: Context, client: SignalRPCClient): Promise<void>;
43
+ private _reconcileSwarmSubscriptions;
44
+ private _reconcileMessageSubscriptions;
45
+ }
46
+ //# sourceMappingURL=signal-local-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-local-state.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-local-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAU,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAGxG,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,qBAAa,gBAAgB;IAiCzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAjChC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyE;gBAe1F,UAAU,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EAChG,aAAa,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC;IAGnG,gBAAgB,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ3D,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAI/D,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAMhE,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAInC,mBAAmB,CAAC,MAAM,EAAE,SAAS;IAOxB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe;YAM9C,4BAA4B;YAkC5B,8BAA8B;CAkC7C"}
@@ -0,0 +1,6 @@
1
+ export declare class SignalRpcClientMonitor {
2
+ recordClientCloseFailure(params: {
3
+ failureReason: string;
4
+ }): void;
5
+ }
6
+ //# sourceMappingURL=signal-rpc-client-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-rpc-client-monitor.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-rpc-client-monitor.ts"],"names":[],"mappings":"AAMA,qBAAa,sBAAsB;IAC1B,wBAAwB,CAAC,MAAM,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE;CAOlE"}
@@ -16,14 +16,15 @@ export type SignalRPCClientParams = {
16
16
  callbacks?: SignalCallbacks;
17
17
  };
18
18
  export declare class SignalRPCClient {
19
- private _socket?;
20
- private _rpc?;
19
+ private readonly _socket;
20
+ private readonly _rpc;
21
21
  private readonly _connectTrigger;
22
22
  private _keepaliveCtx?;
23
23
  private _closed;
24
24
  private readonly _url;
25
25
  private readonly _callbacks;
26
26
  private readonly _closeComplete;
27
+ private readonly _monitor;
27
28
  constructor({ url, callbacks }: SignalRPCClientParams);
28
29
  close(): Promise<void>;
29
30
  join({ topic, peerId }: {
@@ -36,5 +37,6 @@ export declare class SignalRPCClient {
36
37
  recipient: PublicKey;
37
38
  payload: Any;
38
39
  }): Promise<void>;
40
+ private _safeCloseRpc;
39
41
  }
40
42
  //# sourceMappingURL=signal-rpc-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal-rpc-client.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-rpc-client.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,OAAO,IAAI,aAAa,EAAe,MAAM,wCAAwC,CAAC;AASpG,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAyB;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,aAAa,CAAC,CAAU;IAEhC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAEpC,EAAE,GAAG,EAAE,SAAc,EAAE,EAAE,qBAAqB;IA2FpD,KAAK;IAgBL,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAc/D,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAYlE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE;CAY5G"}
1
+ {"version":3,"file":"signal-rpc-client.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-rpc-client.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,OAAO,IAAI,aAAa,EAAe,MAAM,wCAAwC,CAAC;AAWpG,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,OAAO,CAAC,aAAa,CAAC,CAAU;IAEhC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;gBAE7C,EAAE,GAAG,EAAE,SAAc,EAAE,EAAE,qBAAqB;IA2FpD,KAAK;IAsBL,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAa/D,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAWlE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE;YAY7F,aAAa;CAQ5B"}
@@ -4,7 +4,6 @@ import { PublicKey } from '@dxos/keys';
4
4
  import { type SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
5
5
  import { ComplexMap, ComplexSet } from '@dxos/util';
6
6
  import { type SignalManager } from './signal-manager';
7
- import { type CommandTrace } from '../signal-client';
8
7
  import { type SignalStatus } from '../signal-methods';
9
8
  /**
10
9
  * Common signaling context that connects multiple MemorySignalManager instances.
@@ -23,7 +22,6 @@ export declare class MemorySignalManagerContext {
23
22
  export declare class MemorySignalManager implements SignalManager {
24
23
  private readonly _context;
25
24
  readonly statusChanged: Event<SignalStatus[]>;
26
- readonly commandTrace: Event<CommandTrace>;
27
25
  readonly swarmEvent: Event<{
28
26
  topic: PublicKey;
29
27
  swarmEvent: SwarmEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"memory-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/memory-signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,qBAAa,0BAA0B;IAErC,QAAQ,CAAC,UAAU;eACV,SAAS;oBACJ,UAAU;OACnB;IAGL,QAAQ,CAAC,MAAM,+CAAoE;IAGnF,QAAQ,CAAC,WAAW,6CAAkE;CACvF;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAwB3C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAvBrC,QAAQ,CAAC,aAAa,wBAA+B;IACrD,QAAQ,CAAC,YAAY,sBAA6B;IAClD,QAAQ,CAAC,UAAU;eACV,SAAS;oBACJ,UAAU;OACnB;IAEL,QAAQ,CAAC,SAAS;gBACR,SAAS;mBACN,SAAS;iBACX,GAAG;OACT;IAEL,gEAAgE;IAChE,OAAO,CAAC,aAAa,CAEnB;IAEF,OAAO,CAAC,IAAI,CAAW;IAGvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;gBAE1B,QAAQ,EAAE,0BAA0B;IAM3D,IAAI;IAUJ,KAAK;IAkBX,SAAS,IAAI,YAAY,EAAE;IAIrB,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAoC/D,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAoBhE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE;IAoCrG,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAKnC,mBAAmB,CAAC,MAAM,EAAE,SAAS;IAK3C,MAAM;IAIN,QAAQ;CAGT"}
1
+ {"version":3,"file":"memory-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/memory-signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,qBAAa,0BAA0B;IAErC,QAAQ,CAAC,UAAU;eACV,SAAS;oBACJ,UAAU;OACnB;IAGL,QAAQ,CAAC,MAAM,+CAAoE;IAGnF,QAAQ,CAAC,WAAW,6CAAkE;CACvF;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAuB3C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAtBrC,QAAQ,CAAC,aAAa,wBAA+B;IACrD,QAAQ,CAAC,UAAU;eACV,SAAS;oBACJ,UAAU;OACnB;IAEL,QAAQ,CAAC,SAAS;gBACR,SAAS;mBACN,SAAS;iBACX,GAAG;OACT;IAEL,gEAAgE;IAChE,OAAO,CAAC,aAAa,CAEnB;IAEF,OAAO,CAAC,IAAI,CAAW;IAGvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;gBAE1B,QAAQ,EAAE,0BAA0B;IAM3D,IAAI;IAUJ,KAAK;IAkBX,SAAS,IAAI,YAAY,EAAE;IAIrB,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAoC/D,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAoBhE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE;IAoCrG,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAKnC,mBAAmB,CAAC,MAAM,EAAE,SAAS;IAK3C,MAAM;IAIN,QAAQ;CAGT"}
@@ -1,7 +1,6 @@
1
1
  import { type Event } from '@dxos/async';
2
2
  import { type PublicKey } from '@dxos/keys';
3
3
  import { type SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
4
- import { type CommandTrace } from '../signal-client';
5
4
  import { type Message, type SignalMethods, type SignalStatus } from '../signal-methods';
6
5
  /**
7
6
  * Manages a collection of signaling clients.
@@ -11,7 +10,6 @@ export interface SignalManager extends SignalMethods {
11
10
  close(): Promise<void>;
12
11
  getStatus(): SignalStatus[];
13
12
  statusChanged: Event<SignalStatus[]>;
14
- commandTrace: Event<CommandTrace>;
15
13
  swarmEvent: Event<{
16
14
  topic: PublicKey;
17
15
  swarmEvent: SwarmEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,SAAS,IAAI,YAAY,EAAE,CAAC;IAE5B,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACrC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAChE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CAC3B"}
1
+ {"version":3,"file":"signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,SAAS,IAAI,YAAY,EAAE,CAAC;IAE5B,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACrC,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAChE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CAC3B"}
@@ -0,0 +1,8 @@
1
+ export declare class WebsocketSignalManagerMonitor {
2
+ recordRateLimitExceeded(): void;
3
+ recordServerFailure(params: {
4
+ serverName: string;
5
+ willRestart: boolean;
6
+ }): void;
7
+ }
8
+ //# sourceMappingURL=websocket-signal-manager-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-signal-manager-monitor.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/websocket-signal-manager-monitor.ts"],"names":[],"mappings":"AAMA,qBAAa,6BAA6B;IACjC,uBAAuB;IAIvB,mBAAmB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;CAQhF"}
@@ -4,7 +4,6 @@ import { PublicKey } from '@dxos/keys';
4
4
  import { type Runtime } from '@dxos/protocols/proto/dxos/config';
5
5
  import { type SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
6
6
  import { type SignalManager } from './signal-manager';
7
- import { type CommandTrace } from '../signal-client';
8
7
  import { type SignalStatus } from '../signal-methods';
9
8
  /**
10
9
  * Manages connection to multiple Signal Servers over WebSocket
@@ -13,11 +12,15 @@ export declare class WebsocketSignalManager implements SignalManager {
13
12
  private readonly _hosts;
14
13
  private readonly _getMetadata?;
15
14
  private readonly _servers;
15
+ private readonly _monitor;
16
+ /**
17
+ * Used to avoid logging failed server restarts more than once until the server actually recovers.
18
+ */
19
+ private readonly _failedServersBitfield;
16
20
  private _ctx;
17
21
  private _opened;
18
22
  readonly failureCount: Map<string, number>;
19
23
  readonly statusChanged: Event<SignalStatus[]>;
20
- readonly commandTrace: Event<CommandTrace>;
21
24
  readonly swarmEvent: Event<{
22
25
  topic: PublicKey;
23
26
  swarmEvent: SwarmEvent;
@@ -46,7 +49,8 @@ export declare class WebsocketSignalManager implements SignalManager {
46
49
  recipient: PublicKey;
47
50
  payload: Any;
48
51
  }): Promise<void>;
49
- checkServerFailure(serverName: string): Promise<void>;
52
+ checkServerFailure(serverName: string, index: number): Promise<void>;
53
+ private _clearServerFailedFlag;
50
54
  subscribeMessages(peerId: PublicKey): Promise<void>;
51
55
  unsubscribeMessages(peerId: PublicKey): Promise<void>;
52
56
  private _initContext;
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/websocket-signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAuB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAgD,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKpG;;GAEG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IAuBxD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAvBhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAEnE,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,QAAQ,CAAC,YAAY,sBAA6B;IAClD,QAAQ,CAAC,aAAa,wBAA+B;IACrD,QAAQ,CAAC,YAAY,sBAA6B;IAClD,QAAQ,CAAC,UAAU;eACV,SAAS;oBACJ,UAAU;OACnB;IAEL,QAAQ,CAAC,SAAS;gBACR,SAAS;mBACN,SAAS;iBACX,GAAG;OACT;IAEL,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAGvC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,EACjC,YAAY,CAAC,SAAQ,GAAG,aAAA;IAyBrC,IAAI;IAiBJ,KAAK;IAWL,aAAa,CAAC,UAAU,EAAE,MAAM;IAYtC,SAAS,IAAI,YAAY,EAAE;IAKrB,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAO/D,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAOhE,WAAW,CAAC,EAChB,MAAM,EACN,SAAS,EACT,OAAO,GACR,EAAE;QACD,MAAM,EAAE,SAAS,CAAC;QAClB,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,GAAG,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBX,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAYrC,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAOnC,mBAAmB,CAAC,MAAM,EAAE,SAAS;IAO3C,OAAO,CAAC,YAAY;YAMN,cAAc;CAK7B"}
1
+ {"version":3,"file":"websocket-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/websocket-signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAuB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAGzE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAgD,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKpG;;GAEG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IA4BxD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IA5BhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAEhE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAa;IAEpD,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,QAAQ,CAAC,YAAY,sBAA6B;IAClD,QAAQ,CAAC,aAAa,wBAA+B;IACrD,QAAQ,CAAC,UAAU;eACV,SAAS;oBACJ,UAAU;OACnB;IAEL,QAAQ,CAAC,SAAS;gBACR,SAAS;mBACN,SAAS;iBACX,GAAG;OACT;IAEL,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAGvC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,EACjC,YAAY,CAAC,SAAQ,GAAG,aAAA;IAyBrC,IAAI;IAgBJ,KAAK;IASL,aAAa,CAAC,UAAU,EAAE,MAAM;IAYtC,SAAS,IAAI,YAAY,EAAE;IAKrB,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAO/D,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;IAMhE,WAAW,CAAC,EAChB,MAAM,EACN,SAAS,EACT,OAAO,GACR,EAAE;QACD,MAAM,EAAE,SAAS,CAAC;QAClB,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,GAAG,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBX,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAiB1D,OAAO,CAAC,sBAAsB;IAQxB,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAOnC,mBAAmB,CAAC,MAAM,EAAE,SAAS;IAO3C,OAAO,CAAC,YAAY;YAMN,cAAc;CAO7B"}
@@ -1,10 +1,12 @@
1
- import { type Any } from '@dxos/codec-protobuf';
2
1
  import { type PublicKey } from '@dxos/keys';
3
2
  import { type SignalState } from '@dxos/protocols/proto/dxos/mesh/signal';
4
3
  export interface Message {
5
4
  author: PublicKey;
6
5
  recipient: PublicKey;
7
- payload: Any;
6
+ payload: {
7
+ type_url: string;
8
+ value: Uint8Array;
9
+ };
8
10
  }
9
11
  export type SignalStatus = {
10
12
  host: string;
@@ -49,8 +51,8 @@ export interface SignalMethods {
49
51
  * Signaling client.
50
52
  */
51
53
  export interface SignalClientMethods extends SignalMethods {
52
- open(): Promise<void>;
53
- close(): Promise<void>;
54
+ open(): Promise<this>;
55
+ close(): Promise<this>;
54
56
  getStatus(): SignalStatus;
55
57
  }
56
58
  //# sourceMappingURL=signal-methods.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal-methods.d.ts","sourceRoot":"","sources":["../../../src/signal-methods.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC;CACd;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,IAAI,CAAC;IACxB,eAAe,EAAE,IAAI,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE;;OAEG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;OAEG;IACH,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD;;OAEG;IACH,iBAAiB,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;OAEG;IACH,mBAAmB,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,SAAS,IAAI,YAAY,CAAC;CAC3B"}
1
+ {"version":3,"file":"signal-methods.d.ts","sourceRoot":"","sources":["../../../src/signal-methods.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,UAAU,CAAC;KACnB,CAAC;CACH;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,IAAI,CAAC;IACxB,eAAe,EAAE,IAAI,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE;;OAEG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;OAEG;IACH,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD;;OAEG;IAEH,iBAAiB,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;OAEG;IACH,mBAAmB,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,SAAS,IAAI,YAAY,CAAC;CAC3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/messaging",
3
- "version": "0.5.8",
3
+ "version": "0.5.9-main.079a532",
4
4
  "description": "Messaging",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -19,23 +19,24 @@
19
19
  "dependencies": {
20
20
  "isomorphic-ws": "^5.0.0",
21
21
  "ws": "^8.14.2",
22
- "@dxos/codec-protobuf": "0.5.8",
23
- "@dxos/async": "0.5.8",
24
- "@dxos/context": "0.5.8",
25
- "@dxos/invariant": "0.5.8",
26
- "@dxos/log": "0.5.8",
27
- "@dxos/node-std": "0.5.8",
28
- "@dxos/protocols": "0.5.8",
29
- "@dxos/rpc": "0.5.8",
30
- "@dxos/keys": "0.5.8",
31
- "@dxos/util": "0.5.8"
22
+ "@dxos/async": "0.5.9-main.079a532",
23
+ "@dxos/codec-protobuf": "0.5.9-main.079a532",
24
+ "@dxos/context": "0.5.9-main.079a532",
25
+ "@dxos/invariant": "0.5.9-main.079a532",
26
+ "@dxos/keys": "0.5.9-main.079a532",
27
+ "@dxos/log": "0.5.9-main.079a532",
28
+ "@dxos/node-std": "0.5.9-main.079a532",
29
+ "@dxos/protocols": "0.5.9-main.079a532",
30
+ "@dxos/rpc": "0.5.9-main.079a532",
31
+ "@dxos/tracing": "0.5.9-main.079a532",
32
+ "@dxos/util": "0.5.9-main.079a532"
32
33
  },
33
34
  "devDependencies": {
34
35
  "@types/node": "^18.11.9",
35
36
  "earljs": "~0.1.10",
36
37
  "typescript": "^5.4.5",
37
38
  "wait-for-expect": "^3.0.2",
38
- "@dxos/signal": "0.5.8"
39
+ "@dxos/signal": "0.5.9-main.079a532"
39
40
  },
40
41
  "publishConfig": {
41
42
  "access": "public"
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { trace } from '@dxos/tracing';
6
+
7
+ export class MessengerMonitor {
8
+ public recordMessageAckFailed() {
9
+ trace.metrics.increment('mesh.signal.messenger.failed-ack', 1);
10
+ }
11
+
12
+ public recordReliableMessage(params: { sendAttempts: number; sent: boolean }) {
13
+ trace.metrics.increment('mesh.signal.messenger.reliable-send', 1, {
14
+ tags: {
15
+ success: params.sent,
16
+ attempts: params.sendAttempts,
17
+ },
18
+ });
19
+ }
20
+ }
package/src/messenger.ts CHANGED
@@ -12,6 +12,7 @@ import { TimeoutError as ProtocolTimeoutError, schema, trace } from '@dxos/proto
12
12
  import { type ReliablePayload } from '@dxos/protocols/proto/dxos/mesh/messaging';
13
13
  import { ComplexMap, ComplexSet } from '@dxos/util';
14
14
 
15
+ import { MessengerMonitor } from './messenger-monitor';
15
16
  import { type SignalManager } from './signal-manager';
16
17
  import { type Message } from './signal-methods';
17
18
  import { MESSAGE_TIMEOUT } from './timeouts';
@@ -32,6 +33,7 @@ const RECEIVED_MESSAGES_GC_INTERVAL = 120_000;
32
33
  * Reliable messenger that works trough signal network.
33
34
  */
34
35
  export class Messenger {
36
+ private readonly _monitor = new MessengerMonitor();
35
37
  private readonly _signalManager: SignalManager;
36
38
  // { peerId, payloadType } => listeners set
37
39
  private readonly _listeners = new ComplexMap<{ peerId: PublicKey; payloadType: string }, Set<OnMessage>>(
@@ -111,6 +113,7 @@ export class Messenger {
111
113
 
112
114
  let messageReceived: () => void;
113
115
  let timeoutHit: (err: Error) => void;
116
+ let sendAttempts = 0;
114
117
 
115
118
  const promise = new Promise<void>((resolve, reject) => {
116
119
  messageReceived = resolve;
@@ -122,6 +125,7 @@ export class Messenger {
122
125
  messageContext,
123
126
  async () => {
124
127
  log('retrying message', { messageId: reliablePayload.messageId });
128
+ sendAttempts++;
125
129
  await this._encodeAndSend({ author, recipient, reliablePayload }).catch((err) =>
126
130
  log('failed to send message', { err }),
127
131
  );
@@ -141,6 +145,7 @@ export class Messenger {
141
145
  ),
142
146
  );
143
147
  void messageContext.dispose();
148
+ this._monitor.recordReliableMessage({ sendAttempts, sent: false });
144
149
  },
145
150
  MESSAGE_TIMEOUT,
146
151
  );
@@ -149,6 +154,7 @@ export class Messenger {
149
154
  messageReceived();
150
155
  this._onAckCallbacks.delete(reliablePayload.messageId!);
151
156
  void messageContext.dispose();
157
+ this._monitor.recordReliableMessage({ sendAttempts, sent: true });
152
158
  });
153
159
 
154
160
  await this._encodeAndSend({ author, recipient, reliablePayload });
@@ -234,11 +240,16 @@ export class Messenger {
234
240
 
235
241
  log('handling message', { messageId: reliablePayload.messageId });
236
242
 
237
- await this._sendAcknowledgement({
238
- author,
239
- recipient,
240
- messageId: reliablePayload.messageId,
241
- });
243
+ try {
244
+ await this._sendAcknowledgement({
245
+ author,
246
+ recipient,
247
+ messageId: reliablePayload.messageId,
248
+ });
249
+ } catch (err) {
250
+ this._monitor.recordMessageAckFailed();
251
+ throw err;
252
+ }
242
253
 
243
254
  // Ignore message if it was already received, i.e. from multiple signal servers.
244
255
  if (this._receivedMessages.has(reliablePayload.messageId!)) {
@@ -0,0 +1,111 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { trace } from '@dxos/tracing';
6
+
7
+ import type { Message } from '../signal-methods';
8
+
9
+ export class SignalClientMonitor {
10
+ private readonly _performance = {
11
+ sentMessages: 0,
12
+ receivedMessages: 0,
13
+ reconnectCounter: 0,
14
+ joinCounter: 0,
15
+ leaveCounter: 0,
16
+ };
17
+
18
+ /**
19
+ * Timestamp of when the connection attempt was began.
20
+ */
21
+ private _connectionStarted = new Date();
22
+ /**
23
+ * Timestamp of last state change.
24
+ */
25
+ private _lastStateChange = new Date();
26
+
27
+ public getRecordedTimestamps() {
28
+ return {
29
+ connectionStarted: this._connectionStarted,
30
+ lastStateChange: this._lastStateChange,
31
+ };
32
+ }
33
+
34
+ public recordStateChangeTime() {
35
+ this._lastStateChange = new Date();
36
+ }
37
+
38
+ public recordConnectionStartTime() {
39
+ this._connectionStarted = new Date();
40
+ }
41
+
42
+ public recordReconnect(params: { success: boolean }) {
43
+ this._performance.reconnectCounter++;
44
+ trace.metrics.increment('mesh.signal.signal-client.reconnect', 1, {
45
+ tags: {
46
+ success: params.success,
47
+ },
48
+ });
49
+ }
50
+
51
+ public recordJoin() {
52
+ this._performance.joinCounter++;
53
+ }
54
+
55
+ public recordLeave() {
56
+ this._performance.leaveCounter++;
57
+ }
58
+
59
+ public recordMessageReceived(message: Message) {
60
+ this._performance.receivedMessages++;
61
+ trace.metrics.increment('mesh.signal.signal-client.received-total', 1, {
62
+ tags: createIdentityTags(message),
63
+ });
64
+ trace.metrics.distribution('mesh.signal.signal-client.bytes-in', getByteCount(message), {
65
+ tags: createIdentityTags(message),
66
+ });
67
+ }
68
+
69
+ public async recordMessageSending(message: Message, sendMessage: () => Promise<void>) {
70
+ this._performance.sentMessages++;
71
+ const tags = createIdentityTags(message);
72
+ let success = true;
73
+ try {
74
+ const reqStart = Date.now();
75
+ await sendMessage();
76
+ const reqDuration = Date.now() - reqStart;
77
+ trace.metrics.distribution('mesh.signal.signal-client.send-duration', reqDuration, { tags });
78
+ trace.metrics.distribution('mesh.signal.signal-client.bytes-out', getByteCount(message), { tags });
79
+ } catch (err) {
80
+ success = false;
81
+ }
82
+ trace.metrics.increment('mesh.signal.signal-client.sent-total', 1, {
83
+ tags: { ...tags, success },
84
+ });
85
+ }
86
+
87
+ public recordStreamCloseErrors(count: number) {
88
+ trace.metrics.increment('mesh.signal.signal-client.stream-close-errors', count);
89
+ }
90
+
91
+ public recordReconciliation(params: { success: boolean }) {
92
+ trace.metrics.increment('mesh.signal.signal-client.reconciliation', 1, {
93
+ tags: {
94
+ success: params.success,
95
+ },
96
+ });
97
+ }
98
+ }
99
+
100
+ const getByteCount = (message: Message): number => {
101
+ return (
102
+ message.author.asUint8Array().length +
103
+ message.recipient.asUint8Array().length +
104
+ message.payload.type_url.length +
105
+ message.payload.value.length
106
+ );
107
+ };
108
+
109
+ const createIdentityTags = (message: Message) => {
110
+ return { peer: message.author.toHex() };
111
+ };