@dxos/messaging 0.9.1-staging.ee54ba693a → 0.11.0
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/chunk-memory-signal-manager.mjs +652 -0
- package/dist/lib/chunk-memory-signal-manager.mjs.map +1 -0
- package/dist/lib/index.mjs +377 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/testing.mjs +288 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- 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-manager/edge-signal-manager.d.ts +21 -4
- package/dist/types/src/signal-manager/edge-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/edge-signal-manager.test.d.ts +2 -0
- package/dist/types/src/signal-manager/edge-signal-manager.test.d.ts.map +1 -0
- package/dist/types/src/signal-manager/index.d.ts +1 -2
- package/dist/types/src/signal-manager/index.d.ts.map +1 -1
- package/dist/types/src/signal-manager/memory-signal-manager.d.ts +12 -10
- package/dist/types/src/signal-manager/memory-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/memory-signal-manager.test.d.ts +2 -0
- package/dist/types/src/signal-manager/memory-signal-manager.test.d.ts.map +1 -0
- package/dist/types/src/signal-manager/signal-manager.d.ts +5 -0
- package/dist/types/src/signal-manager/signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/utils.d.ts +6 -4
- package/dist/types/src/signal-manager/utils.d.ts.map +1 -1
- package/dist/types/src/signal-methods.d.ts +33 -22
- package/dist/types/src/signal-methods.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-edge-mesh.d.ts +61 -0
- package/dist/types/src/testing/test-edge-mesh.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +19 -19
- package/src/index.ts +0 -1
- package/src/messenger.blueprint-test.ts +0 -25
- package/src/messenger.node.test.ts +1 -1
- package/src/messenger.ts +42 -18
- package/src/signal-manager/edge-signal-manager.test.ts +193 -0
- package/src/signal-manager/edge-signal-manager.ts +145 -12
- package/src/signal-manager/index.ts +1 -2
- package/src/signal-manager/memory-signal-manager.test.ts +199 -0
- package/src/signal-manager/memory-signal-manager.ts +87 -47
- package/src/signal-manager/signal-manager.ts +7 -0
- package/src/signal-manager/utils.ts +30 -21
- package/src/signal-methods.ts +37 -26
- package/src/testing/index.ts +1 -0
- package/src/testing/test-edge-mesh.ts +196 -0
- package/src/testing/utils.ts +2 -2
- package/dist/lib/neutral/chunk-EC4H56J5.mjs +0 -497
- package/dist/lib/neutral/chunk-EC4H56J5.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -1249
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/testing/index.mjs +0 -155
- package/dist/lib/neutral/testing/index.mjs.map +0 -7
- package/dist/types/src/signal-client/index.d.ts +0 -2
- package/dist/types/src/signal-client/index.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-client-monitor.d.ts +0 -30
- package/dist/types/src/signal-client/signal-client-monitor.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-client.d.ts +0 -59
- package/dist/types/src/signal-client/signal-client.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-client.node.test.d.ts +0 -2
- package/dist/types/src/signal-client/signal-client.node.test.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-local-state.d.ts +0 -38
- package/dist/types/src/signal-client/signal-local-state.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-rpc-client-monitor.d.ts +0 -6
- package/dist/types/src/signal-client/signal-rpc-client-monitor.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-rpc-client.d.ts +0 -47
- package/dist/types/src/signal-client/signal-rpc-client.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-rpc-client.node.test.d.ts +0 -2
- package/dist/types/src/signal-client/signal-rpc-client.node.test.d.ts.map +0 -1
- package/dist/types/src/signal-manager/websocket-signal-manager-monitor.d.ts +0 -8
- package/dist/types/src/signal-manager/websocket-signal-manager-monitor.d.ts.map +0 -1
- package/dist/types/src/signal-manager/websocket-signal-manager.d.ts +0 -41
- package/dist/types/src/signal-manager/websocket-signal-manager.d.ts.map +0 -1
- package/dist/types/src/signal-manager/websocket-signal-manager.node.test.d.ts +0 -2
- package/dist/types/src/signal-manager/websocket-signal-manager.node.test.d.ts.map +0 -1
- package/src/signal-client/index.ts +0 -5
- package/src/signal-client/signal-client-monitor.ts +0 -111
- package/src/signal-client/signal-client.node.test.ts +0 -185
- package/src/signal-client/signal-client.ts +0 -339
- package/src/signal-client/signal-local-state.ts +0 -174
- package/src/signal-client/signal-rpc-client-monitor.ts +0 -15
- package/src/signal-client/signal-rpc-client.node.test.ts +0 -102
- package/src/signal-client/signal-rpc-client.ts +0 -227
- package/src/signal-manager/websocket-signal-manager-monitor.ts +0 -20
- package/src/signal-manager/websocket-signal-manager.node.test.ts +0 -112
- package/src/signal-manager/websocket-signal-manager.ts +0 -188
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Event } from '@dxos/async';
|
|
2
|
-
import { type Context
|
|
2
|
+
import { type Context } from '@dxos/context';
|
|
3
3
|
import { type Peer, type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';
|
|
4
4
|
import { type JoinRequest, type LeaveRequest, type Message, type QueryRequest, type SwarmEvent } from '@dxos/protocols/proto/dxos/edge/signal';
|
|
5
5
|
import { type SignalState } from '@dxos/protocols/proto/dxos/mesh/signal';
|
|
@@ -14,6 +14,29 @@ export type SignalStatus = {
|
|
|
14
14
|
connectionStarted: Date;
|
|
15
15
|
lastStateChange: Date;
|
|
16
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* Parameters for {@link SignalMethods.subscribeMessages}.
|
|
19
|
+
*/
|
|
20
|
+
export type SubscribeMessagesParams = {
|
|
21
|
+
/**
|
|
22
|
+
* The subscribing peer. Point-to-point messages addressed to this `peerKey` are delivered.
|
|
23
|
+
*/
|
|
24
|
+
peer: PeerInfo;
|
|
25
|
+
/**
|
|
26
|
+
* OR-subscription tags (DX-1125). When provided, swarm broadcasts whose tags intersect this set are
|
|
27
|
+
* also delivered. Only meaningful for edge signaling; other transports ignore them.
|
|
28
|
+
*/
|
|
29
|
+
tags?: string[];
|
|
30
|
+
/**
|
|
31
|
+
* Invoked for every message delivered to this subscription (point-to-point or matching broadcast).
|
|
32
|
+
*/
|
|
33
|
+
onMessage: (message: Message) => void;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Tears down a subscription created by {@link SignalMethods.subscribeMessages} and releases its
|
|
37
|
+
* transport resources (edge tag registration / receive stream). The subscriber owns this lifecycle.
|
|
38
|
+
*/
|
|
39
|
+
export type UnsubscribeCallback = () => Promise<void>;
|
|
17
40
|
/**
|
|
18
41
|
* Message routing interface.
|
|
19
42
|
*/
|
|
@@ -24,10 +47,6 @@ export interface SignalMethods {
|
|
|
24
47
|
* TODO(mykola): Use swarmState in network-manager instead.
|
|
25
48
|
*/
|
|
26
49
|
swarmEvent: Event<SwarmEvent>;
|
|
27
|
-
/**
|
|
28
|
-
* Emits when a message is received.
|
|
29
|
-
*/
|
|
30
|
-
onMessage: Event<Message>;
|
|
31
50
|
/**
|
|
32
51
|
* Emits when the swarm state changes.
|
|
33
52
|
*/
|
|
@@ -45,26 +64,18 @@ export interface SignalMethods {
|
|
|
45
64
|
*/
|
|
46
65
|
query: (ctx: Context, params: QueryRequest) => Promise<SwarmResponse>;
|
|
47
66
|
/**
|
|
48
|
-
* Send message to
|
|
67
|
+
* Send a message. Point-to-point when `recipient` is set; a swarm broadcast (DX-1125) when `tags`
|
|
68
|
+
* are set — fanned out to every peer whose tag subscription intersects, with the target swarm taken
|
|
69
|
+
* from `author.swarmKey`. Exactly one of `recipient` / `tags` must be present. Broadcasts are only
|
|
70
|
+
* supported by edge signaling.
|
|
49
71
|
*/
|
|
50
72
|
sendMessage: (ctx: Context, message: Message) => Promise<void>;
|
|
51
73
|
/**
|
|
52
|
-
* Start receiving messages
|
|
53
|
-
*
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Stop receiving messages from peer.
|
|
58
|
-
* @deprecated
|
|
74
|
+
* Start receiving messages for `peer`: its point-to-point messages, plus — when `tags` are provided
|
|
75
|
+
* (DX-1125) — swarm broadcasts whose tags intersect. Matching messages are routed to
|
|
76
|
+
* `params.onMessage`; routing and the transport stream are owned here. Returns a callback that tears
|
|
77
|
+
* the subscription down; the subscriber owns that lifecycle.
|
|
59
78
|
*/
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Signaling client.
|
|
64
|
-
* TODO(mykola): Delete.
|
|
65
|
-
* @deprecated
|
|
66
|
-
*/
|
|
67
|
-
export interface SignalClientMethods extends SignalMethods, Required<Lifecycle> {
|
|
68
|
-
getStatus(): SignalStatus;
|
|
79
|
+
subscribeMessages: (params: SubscribeMessagesParams) => Promise<UnsubscribeCallback>;
|
|
69
80
|
}
|
|
70
81
|
//# 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,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"signal-methods.d.ts","sourceRoot":"","sources":["../../../src/signal-methods.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE1E,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACpC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC;AAC5B,eAAO,MAAM,YAAY,gBAAiB,QAAQ,WAAY,CAAC;AAE/D,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,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IAEf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE9B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAElC;;OAEG;IACH,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;OAEG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;OAEG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAEtE;;;;;OAKG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/D;;;;;OAKG;IACH,iBAAiB,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACtF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type Context } from '@dxos/context';
|
|
2
|
+
import { type EdgeConnection } from '@dxos/edge-client';
|
|
3
|
+
import { type Message } from '@dxos/protocols/buf/dxos/edge/messenger_pb';
|
|
4
|
+
/**
|
|
5
|
+
* In-memory stand-in for the EDGE router + swarm, feature-complete for the messaging paths
|
|
6
|
+
* {@link EdgeSignalManager} exercises: swarm membership (JOIN/LEAVE), tag subscriptions (SUBSCRIBE),
|
|
7
|
+
* point-to-point relay, and tag broadcast fan-out (DX-1125). Multiple {@link TestEdgeConnection}s
|
|
8
|
+
* attach to one mesh, so a broadcast from one client is delivered to the matching subscribers of
|
|
9
|
+
* another — mirroring the real edge without a WebSocket or Durable Object.
|
|
10
|
+
*/
|
|
11
|
+
export declare class TestEdgeMesh {
|
|
12
|
+
/** peerKey -> connection. */
|
|
13
|
+
private readonly _connections;
|
|
14
|
+
/** swarmKey -> (peerKey -> subscription tags). */
|
|
15
|
+
private readonly _subscriptions;
|
|
16
|
+
/** swarmKey -> set of member peerKeys. */
|
|
17
|
+
private readonly _members;
|
|
18
|
+
createConnection({ peerKey, identityDid }: {
|
|
19
|
+
peerKey: string;
|
|
20
|
+
identityDid: string;
|
|
21
|
+
}): TestEdgeConnection;
|
|
22
|
+
removeConnection(peerKey: string): void;
|
|
23
|
+
/** Handle a message sent by a client connection. */
|
|
24
|
+
receive(fromPeerKey: string, message: Message): void;
|
|
25
|
+
private _handleSwarmRequest;
|
|
26
|
+
private _handleSignal;
|
|
27
|
+
private _memberSet;
|
|
28
|
+
private _subscriptionMap;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* In-memory {@link EdgeConnection} bound to a {@link TestEdgeMesh}. Only the members
|
|
32
|
+
* {@link EdgeSignalManager} uses are functional; the rest are inert stubs.
|
|
33
|
+
*/
|
|
34
|
+
export declare class TestEdgeConnection implements EdgeConnection {
|
|
35
|
+
readonly statusChanged: EdgeConnection['statusChanged'];
|
|
36
|
+
private readonly _messageListeners;
|
|
37
|
+
private readonly _peerKey;
|
|
38
|
+
private readonly _identityDid;
|
|
39
|
+
private readonly _mesh;
|
|
40
|
+
constructor({ peerKey, identityDid, mesh }: {
|
|
41
|
+
peerKey: string;
|
|
42
|
+
identityDid: string;
|
|
43
|
+
mesh: TestEdgeMesh;
|
|
44
|
+
});
|
|
45
|
+
get info(): any;
|
|
46
|
+
get identityDid(): string;
|
|
47
|
+
get peerKey(): string;
|
|
48
|
+
get isOpen(): boolean;
|
|
49
|
+
get status(): EdgeConnection['status'];
|
|
50
|
+
setIdentity(): void;
|
|
51
|
+
send(_ctx: Context, message: Message): Promise<void>;
|
|
52
|
+
onMessage(listener: (message: Message) => void): () => void;
|
|
53
|
+
onReconnected(listener: () => void, opts?: {
|
|
54
|
+
emitCurrentState?: boolean;
|
|
55
|
+
}): () => void;
|
|
56
|
+
/** Deliver a message from the mesh to this connection's listeners. */
|
|
57
|
+
deliver(message: Message): void;
|
|
58
|
+
open(): Promise<void>;
|
|
59
|
+
close(): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=test-edge-mesh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-edge-mesh.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-edge-mesh.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,mBAAmB,CAAC;AAElE,OAAO,EACL,KAAK,OAAO,EAGb,MAAM,4CAA4C,CAAC;AAEpD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;IACtE,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAC3E,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,gBAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,CAIvG;IAED,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQtC;IAED,oDAAoD;IACpD,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CASnD;IAED,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,gBAAgB;CAQzB;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,SAAgB,aAAa,EAAE,cAAc,CAAC,eAAe,CAAC,CAAoB;IAClF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAC3E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,EAIvG;IAED,IAAI,IAAI,IAAI,GAAG,CAEd;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,CAErC;IAED,WAAW,IAAI,IAAI,CAAG;IAEhB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAG1D;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,IAAI,CAKrF;IAED,sEAAsE;IACtE,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAI9B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
|