@dxos/messaging 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc

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 (62) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/neutral/chunk-EC4H56J5.mjs +497 -0
  3. package/dist/lib/neutral/chunk-EC4H56J5.mjs.map +7 -0
  4. package/dist/lib/neutral/index.mjs +1249 -0
  5. package/dist/lib/neutral/index.mjs.map +7 -0
  6. package/dist/lib/neutral/meta.json +1 -0
  7. package/dist/lib/{browser → neutral}/testing/index.mjs +4 -9
  8. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  9. package/dist/types/src/messenger-monitor.d.ts.map +1 -1
  10. package/dist/types/src/messenger.blueprint-test.d.ts +1 -1
  11. package/dist/types/src/messenger.blueprint-test.d.ts.map +1 -1
  12. package/dist/types/src/messenger.d.ts +3 -2
  13. package/dist/types/src/messenger.d.ts.map +1 -1
  14. package/dist/types/src/signal-client/signal-client-monitor.d.ts.map +1 -1
  15. package/dist/types/src/signal-client/signal-client.d.ts +5 -6
  16. package/dist/types/src/signal-client/signal-client.d.ts.map +1 -1
  17. package/dist/types/src/signal-client/signal-local-state.d.ts.map +1 -1
  18. package/dist/types/src/signal-client/signal-rpc-client-monitor.d.ts.map +1 -1
  19. package/dist/types/src/signal-client/signal-rpc-client.d.ts +3 -3
  20. package/dist/types/src/signal-client/signal-rpc-client.d.ts.map +1 -1
  21. package/dist/types/src/signal-manager/edge-signal-manager.d.ts +5 -5
  22. package/dist/types/src/signal-manager/edge-signal-manager.d.ts.map +1 -1
  23. package/dist/types/src/signal-manager/memory-signal-manager.d.ts +5 -4
  24. package/dist/types/src/signal-manager/memory-signal-manager.d.ts.map +1 -1
  25. package/dist/types/src/signal-manager/utils.d.ts.map +1 -1
  26. package/dist/types/src/signal-manager/websocket-signal-manager-monitor.d.ts.map +1 -1
  27. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts +5 -6
  28. package/dist/types/src/signal-manager/websocket-signal-manager.d.ts.map +1 -1
  29. package/dist/types/src/signal-methods.d.ts +5 -5
  30. package/dist/types/src/signal-methods.d.ts.map +1 -1
  31. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  32. package/dist/types/src/testing/test-peer.d.ts.map +1 -1
  33. package/dist/types/src/testing/utils.d.ts.map +1 -1
  34. package/dist/types/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +25 -30
  36. package/src/messenger.blueprint-test.ts +13 -12
  37. package/src/messenger.ts +37 -32
  38. package/src/signal-client/signal-client.node.test.ts +9 -9
  39. package/src/signal-client/signal-client.ts +6 -10
  40. package/src/signal-client/signal-local-state.ts +0 -1
  41. package/src/signal-client/signal-rpc-client.ts +4 -6
  42. package/src/signal-manager/edge-signal-manager.ts +10 -7
  43. package/src/signal-manager/memory-signal-manager.ts +17 -15
  44. package/src/signal-manager/websocket-signal-manager.node.test.ts +13 -13
  45. package/src/signal-manager/websocket-signal-manager.ts +9 -16
  46. package/src/signal-methods.ts +5 -5
  47. package/src/testing/test-builder.ts +4 -3
  48. package/src/testing/test-peer.ts +0 -1
  49. package/src/testing/utils.ts +0 -1
  50. package/dist/lib/browser/chunk-L7NDSF6K.mjs +0 -2380
  51. package/dist/lib/browser/chunk-L7NDSF6K.mjs.map +0 -7
  52. package/dist/lib/browser/index.mjs +0 -22
  53. package/dist/lib/browser/index.mjs.map +0 -7
  54. package/dist/lib/browser/meta.json +0 -1
  55. package/dist/lib/browser/testing/index.mjs.map +0 -7
  56. package/dist/lib/node-esm/chunk-PVWR5V42.mjs +0 -2380
  57. package/dist/lib/node-esm/chunk-PVWR5V42.mjs.map +0 -7
  58. package/dist/lib/node-esm/index.mjs +0 -22
  59. package/dist/lib/node-esm/index.mjs.map +0 -7
  60. package/dist/lib/node-esm/meta.json +0 -1
  61. package/dist/lib/node-esm/testing/index.mjs +0 -149
  62. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
@@ -14,7 +14,6 @@ import { type QueryRequest } from '@dxos/protocols/proto/dxos/edge/signal';
14
14
  import { ComplexMap, ComplexSet } from '@dxos/util';
15
15
 
16
16
  import { type Message, type PeerInfo, PeerInfoHash, type SignalStatus, type SwarmEvent } from '../signal-methods';
17
-
18
17
  import { type SignalManager } from './signal-manager';
19
18
 
20
19
  /**
@@ -63,7 +62,7 @@ export class MemorySignalManager implements SignalManager {
63
62
  this._ctx = new Context();
64
63
  this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));
65
64
 
66
- await Promise.all([...this._joinedSwarms.values()].map((value) => this.join(value)));
65
+ await Promise.all([...this._joinedSwarms.values()].map((value) => this.join(this._ctx, value)));
67
66
  }
68
67
 
69
68
  async close(): Promise<void> {
@@ -76,7 +75,7 @@ export class MemorySignalManager implements SignalManager {
76
75
  [...this._joinedSwarms.values()],
77
76
  );
78
77
 
79
- await Promise.all([...this._joinedSwarms.values()].map((value) => this.leave(value)));
78
+ await Promise.all([...this._joinedSwarms.values()].map((value) => this.leave(this._ctx, value)));
80
79
 
81
80
  // assign joined swarms back because .leave() deletes it.
82
81
  this._joinedSwarms = joinedSwarmsCopy;
@@ -88,7 +87,7 @@ export class MemorySignalManager implements SignalManager {
88
87
  return [];
89
88
  }
90
89
 
91
- async join({ topic, peer }: { topic: PublicKey; peer: PeerInfo }): Promise<void> {
90
+ async join(_ctx: Context, { topic, peer }: { topic: PublicKey; peer: PeerInfo }): Promise<void> {
92
91
  invariant(!this._ctx.disposed, 'Closed');
93
92
 
94
93
  this._joinedSwarms.add({ topic, peer });
@@ -120,7 +119,7 @@ export class MemorySignalManager implements SignalManager {
120
119
  }
121
120
  }
122
121
 
123
- async leave({ topic, peer }: { topic: PublicKey; peer: PeerInfo }): Promise<void> {
122
+ async leave(_ctx: Context, { topic, peer }: { topic: PublicKey; peer: PeerInfo }): Promise<void> {
124
123
  invariant(!this._ctx.disposed, 'Closed');
125
124
 
126
125
  this._joinedSwarms.delete({ topic, peer });
@@ -141,19 +140,22 @@ export class MemorySignalManager implements SignalManager {
141
140
  this._context.swarmEvent.emit(swarmEvent);
142
141
  }
143
142
 
144
- async query(request: QueryRequest): Promise<SwarmResponse> {
143
+ async query(_ctx: Context, request: QueryRequest): Promise<SwarmResponse> {
145
144
  throw new Error('Not implemented');
146
145
  }
147
146
 
148
- async sendMessage({
149
- author,
150
- recipient,
151
- payload,
152
- }: {
153
- author: PeerInfo;
154
- recipient: PeerInfo;
155
- payload: Any;
156
- }): Promise<void> {
147
+ async sendMessage(
148
+ _ctx: Context,
149
+ {
150
+ author,
151
+ recipient,
152
+ payload,
153
+ }: {
154
+ author: PeerInfo;
155
+ recipient: PeerInfo;
156
+ payload: Any;
157
+ },
158
+ ): Promise<void> {
157
159
  log('send message', { author, recipient, ...dec(payload) });
158
160
 
159
161
  invariant(recipient);
@@ -5,12 +5,12 @@
5
5
  import { afterAll, beforeAll, describe, test } from 'vitest';
6
6
 
7
7
  import { asyncTimeout, sleep } from '@dxos/async';
8
+ import { Context } from '@dxos/context';
8
9
  import { PublicKey } from '@dxos/keys';
9
10
  import { type SignalServerRunner, runTestSignalServer } from '@dxos/signal';
10
11
  import { openAndClose } from '@dxos/test-utils';
11
12
 
12
13
  import { createMessage, expectPeerAvailable, expectReceivedMessage } from '../testing';
13
-
14
14
  import { WebsocketSignalManager } from './websocket-signal-manager';
15
15
 
16
16
  describe.skip('WebSocketSignalManager', () => {
@@ -40,9 +40,9 @@ describe.skip('WebSocketSignalManager', () => {
40
40
  const joined21 = expectPeerAvailable(client2, topic, { peerKey: peer1.toHex() });
41
41
  const joined31 = expectPeerAvailable(client3, topic, { peerKey: peer1.toHex() });
42
42
 
43
- await client1.join({ topic, peer: { peerKey: peer1.toHex() } });
44
- await client2.join({ topic, peer: { peerKey: peer2.toHex() } });
45
- await client3.join({ topic, peer: { peerKey: peer3.toHex() } });
43
+ await client1.join(Context.default(), { topic, peer: { peerKey: peer1.toHex() } });
44
+ await client2.join(Context.default(), { topic, peer: { peerKey: peer2.toHex() } });
45
+ await client3.join(Context.default(), { topic, peer: { peerKey: peer3.toHex() } });
46
46
 
47
47
  await Promise.all([joined12, joined13, joined21, joined31]);
48
48
  });
@@ -57,8 +57,8 @@ describe.skip('WebSocketSignalManager', () => {
57
57
  const joined12 = expectPeerAvailable(client1, topic, { peerKey: peer2.toHex() });
58
58
  const joined21 = expectPeerAvailable(client2, topic, { peerKey: peer1.toHex() });
59
59
 
60
- await client1.join({ topic, peer: { peerKey: peer1.toHex() } });
61
- await client2.join({ topic, peer: { peerKey: peer2.toHex() } });
60
+ await client1.join(Context.default(), { topic, peer: { peerKey: peer1.toHex() } });
61
+ await client2.join(Context.default(), { topic, peer: { peerKey: peer2.toHex() } });
62
62
 
63
63
  await asyncTimeout(Promise.all([joined12, joined21]), 1_000);
64
64
 
@@ -67,7 +67,7 @@ describe.skip('WebSocketSignalManager', () => {
67
67
  const received = expectReceivedMessage(client2.onMessage, message);
68
68
  await client2.subscribeMessages({ peerKey: peer2.toHex() });
69
69
  await sleep(50);
70
- await client1.sendMessage(message);
70
+ await client1.sendMessage(Context.default(), message);
71
71
 
72
72
  await asyncTimeout(received, 1_000);
73
73
  });
@@ -82,8 +82,8 @@ describe.skip('WebSocketSignalManager', () => {
82
82
  const joined12 = expectPeerAvailable(client1, topic, { peerKey: peer2.toHex() });
83
83
  const joined21 = expectPeerAvailable(client2, topic, { peerKey: peer1.toHex() });
84
84
 
85
- await client1.join({ topic, peer: { peerKey: peer1.toHex() } });
86
- await client2.join({ topic, peer: { peerKey: peer2.toHex() } });
85
+ await client1.join(Context.default(), { topic, peer: { peerKey: peer1.toHex() } });
86
+ await client2.join(Context.default(), { topic, peer: { peerKey: peer2.toHex() } });
87
87
 
88
88
  await Promise.all([joined12, joined21]);
89
89
  });
@@ -98,15 +98,15 @@ describe.skip('WebSocketSignalManager', () => {
98
98
  const joined112 = expectPeerAvailable(client1, topic1, { peerKey: peer2.toHex() });
99
99
  const joined121 = expectPeerAvailable(client2, topic1, { peerKey: peer1.toHex() });
100
100
 
101
- await client1.join({ topic: topic1, peer: { peerKey: peer1.toHex() } });
102
- await client2.join({ topic: topic1, peer: { peerKey: peer2.toHex() } });
101
+ await client1.join(Context.default(), { topic: topic1, peer: { peerKey: peer1.toHex() } });
102
+ await client2.join(Context.default(), { topic: topic1, peer: { peerKey: peer2.toHex() } });
103
103
  await Promise.all([joined112, joined121]);
104
104
 
105
105
  const joined212 = expectPeerAvailable(client1, topic2, { peerKey: peer2.toHex() });
106
106
  const joined221 = expectPeerAvailable(client2, topic2, { peerKey: peer1.toHex() });
107
107
 
108
- await client1.join({ topic: topic2, peer: { peerKey: peer1.toHex() } });
109
- await client2.join({ topic: topic2, peer: { peerKey: peer2.toHex() } });
108
+ await client1.join(Context.default(), { topic: topic2, peer: { peerKey: peer1.toHex() } });
109
+ await client2.join(Context.default(), { topic: topic2, peer: { peerKey: peer2.toHex() } });
110
110
  await Promise.all([joined212, joined221]);
111
111
  });
112
112
  });
@@ -3,11 +3,10 @@
3
3
  //
4
4
 
5
5
  import { Event, sleep, synchronized } from '@dxos/async';
6
- import { LifecycleState, Resource } from '@dxos/context';
6
+ import { type Context, LifecycleState, Resource } from '@dxos/context';
7
7
  import { invariant } from '@dxos/invariant';
8
- import { PublicKey } from '@dxos/keys';
9
8
  import { log } from '@dxos/log';
10
- import { RateLimitExceededError, TimeoutError, trace } from '@dxos/protocols';
9
+ import { RateLimitExceededError, TimeoutError } from '@dxos/protocols';
11
10
  import { type Runtime } from '@dxos/protocols/proto/dxos/config';
12
11
  import { type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';
13
12
  import { type JoinRequest, type LeaveRequest, type QueryRequest } from '@dxos/protocols/proto/dxos/edge/signal';
@@ -22,7 +21,6 @@ import {
22
21
  type SignalStatus,
23
22
  type SwarmEvent,
24
23
  } from '../signal-methods';
25
-
26
24
  import { type SignalManager } from './signal-manager';
27
25
  import { WebsocketSignalManagerMonitor } from './websocket-signal-manager-monitor';
28
26
 
@@ -49,8 +47,6 @@ export class WebsocketSignalManager extends Resource implements SignalManager {
49
47
 
50
48
  readonly onMessage = new Event<Message>();
51
49
 
52
- private readonly _instanceId = PublicKey.random().toHex();
53
-
54
50
  constructor(
55
51
  private readonly _hosts: Runtime.Services.Signal[],
56
52
  private readonly _getMetadata?: () => any,
@@ -77,11 +73,8 @@ export class WebsocketSignalManager extends Resource implements SignalManager {
77
73
 
78
74
  protected override async _open(): Promise<void> {
79
75
  log('open signal manager', { hosts: this._hosts });
80
- log.trace('dxos.mesh.websocket-signal-manager.open', trace.begin({ id: this._instanceId }));
81
76
 
82
77
  await safeAwaitAll(this._servers.values(), (server) => server.open());
83
-
84
- log.trace('dxos.mesh.websocket-signal-manager.open', trace.end({ id: this._instanceId }));
85
78
  }
86
79
 
87
80
  protected override async _close(): Promise<void> {
@@ -105,30 +98,30 @@ export class WebsocketSignalManager extends Resource implements SignalManager {
105
98
  }
106
99
 
107
100
  @synchronized
108
- async join({ topic, peer }: JoinRequest): Promise<void> {
101
+ async join(_ctx: Context, { topic, peer }: JoinRequest): Promise<void> {
109
102
  log('join', { topic, peer });
110
103
  invariant(this._lifecycleState === LifecycleState.OPEN);
111
- await this._forEachServer((server) => server.join({ topic, peer }));
104
+ await this._forEachServer((server) => server.join(_ctx, { topic, peer }));
112
105
  }
113
106
 
114
107
  @synchronized
115
- async leave({ topic, peer }: LeaveRequest): Promise<void> {
108
+ async leave(_ctx: Context, { topic, peer }: LeaveRequest): Promise<void> {
116
109
  log('leaving', { topic, peer });
117
110
  invariant(this._lifecycleState === LifecycleState.OPEN);
118
- await this._forEachServer((server) => server.leave({ topic, peer }));
111
+ await this._forEachServer((server) => server.leave(_ctx, { topic, peer }));
119
112
  }
120
113
 
121
- async query({ topic }: QueryRequest): Promise<SwarmResponse> {
114
+ async query(_ctx: Context, { topic }: QueryRequest): Promise<SwarmResponse> {
122
115
  throw new Error('Not implemented');
123
116
  }
124
117
 
125
- async sendMessage({ author, recipient, payload }: Message): Promise<void> {
118
+ async sendMessage(_ctx: Context, { author, recipient, payload }: Message): Promise<void> {
126
119
  log('signal', { recipient });
127
120
  invariant(this._lifecycleState === LifecycleState.OPEN);
128
121
 
129
122
  void this._forEachServer(async (server, serverName, index) => {
130
123
  void server
131
- .sendMessage({ author, recipient, payload })
124
+ .sendMessage(_ctx, { author, recipient, payload })
132
125
  .then(() => this._clearServerFailedFlag(serverName, index))
133
126
  .catch((err) => {
134
127
  if (err instanceof RateLimitExceededError) {
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { type Event } from '@dxos/async';
6
- import { type Lifecycle } from '@dxos/context';
6
+ import { type Context, type Lifecycle } from '@dxos/context';
7
7
  import { type Peer, type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';
8
8
  import {
9
9
  type JoinRequest,
@@ -51,22 +51,22 @@ export interface SignalMethods {
51
51
  /**
52
52
  * Join topic on signal network, to be discoverable by other peers.
53
53
  */
54
- join: (params: JoinRequest) => Promise<void>;
54
+ join: (ctx: Context, params: JoinRequest) => Promise<void>;
55
55
 
56
56
  /**
57
57
  * Leave topic on signal network, to stop being discoverable by other peers.
58
58
  */
59
- leave: (params: LeaveRequest) => Promise<void>;
59
+ leave: (ctx: Context, params: LeaveRequest) => Promise<void>;
60
60
 
61
61
  /**
62
62
  * Query peers in the swarm without joining it.
63
63
  */
64
- query: (params: QueryRequest) => Promise<SwarmResponse>;
64
+ query: (ctx: Context, params: QueryRequest) => Promise<SwarmResponse>;
65
65
 
66
66
  /**
67
67
  * Send message to peer.
68
68
  */
69
- sendMessage: (message: Message) => Promise<void>;
69
+ sendMessage: (ctx: Context, message: Message) => Promise<void>;
70
70
 
71
71
  /**
72
72
  * Start receiving messages from peer.
@@ -2,9 +2,10 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
+ import { type Context } from '@dxos/context';
6
+
5
7
  import { MemorySignalManager, MemorySignalManagerContext, type SignalManager } from '../signal-manager';
6
8
  import { type Message } from '../signal-methods';
7
-
8
9
  import { TestPeer } from './test-peer';
9
10
 
10
11
  export type TestBuilderOptions = {
@@ -25,9 +26,9 @@ export class TestBuilder {
25
26
  if (this.options.messageDisruption) {
26
27
  // Imitates signal network disruptions (e. g. message doubling, ).
27
28
  const trueSend = signalManager.sendMessage.bind(signalManager);
28
- signalManager.sendMessage = async (message: Message) => {
29
+ signalManager.sendMessage = async (ctx: Context, message: Message) => {
29
30
  for (const msg of this.options.messageDisruption!(message)) {
30
- await trueSend(msg);
31
+ await trueSend(ctx, msg);
31
32
  }
32
33
  };
33
34
  }
@@ -12,7 +12,6 @@ import { buf } from '@dxos/protocols/buf';
12
12
  import { Messenger } from '../messenger';
13
13
  import { type SignalManager } from '../signal-manager';
14
14
  import { type Message, type PeerInfo } from '../signal-methods';
15
-
16
15
  import { type TestBuilder } from './test-builder';
17
16
  import { expectPeerAvailable, expectPeerLeft, expectReceivedMessage } from './utils';
18
17
 
@@ -7,7 +7,6 @@ import { type Any } from '@dxos/codec-protobuf';
7
7
  import { PublicKey } from '@dxos/keys';
8
8
 
9
9
  import { type Message, type PeerInfo, type SignalMethods } from '../signal-methods';
10
-
11
10
  import { PAYLOAD_1 } from './test-messages';
12
11
 
13
12
  export const expectPeerAvailable = (client: SignalMethods, expectedTopic: PublicKey, peer: PeerInfo) =>