@livestore/webmesh 0.3.0-dev.9 → 0.3.1-dev.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/LICENSE +201 -0
- package/README.md +40 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/channel/direct-channel-internal.d.ts +26 -0
- package/dist/channel/direct-channel-internal.d.ts.map +1 -0
- package/dist/channel/direct-channel-internal.js +217 -0
- package/dist/channel/direct-channel-internal.js.map +1 -0
- package/dist/channel/direct-channel.d.ts +22 -0
- package/dist/channel/direct-channel.d.ts.map +1 -0
- package/dist/channel/direct-channel.js +153 -0
- package/dist/channel/direct-channel.js.map +1 -0
- package/dist/channel/proxy-channel.d.ts +3 -3
- package/dist/channel/proxy-channel.d.ts.map +1 -1
- package/dist/channel/proxy-channel.js +119 -37
- package/dist/channel/proxy-channel.js.map +1 -1
- package/dist/common.d.ts +47 -19
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +13 -5
- package/dist/common.js.map +1 -1
- package/dist/mesh-schema.d.ts +79 -13
- package/dist/mesh-schema.d.ts.map +1 -1
- package/dist/mesh-schema.js +59 -10
- package/dist/mesh-schema.js.map +1 -1
- package/dist/mod.d.ts +2 -2
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +2 -2
- package/dist/mod.js.map +1 -1
- package/dist/node.d.ts +56 -23
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +323 -115
- package/dist/node.js.map +1 -1
- package/dist/node.test.d.ts +1 -1
- package/dist/node.test.d.ts.map +1 -1
- package/dist/node.test.js +489 -157
- package/dist/node.test.js.map +1 -1
- package/dist/utils.d.ts +4 -4
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +7 -1
- package/dist/utils.js.map +1 -1
- package/dist/websocket-edge.d.ts +56 -0
- package/dist/websocket-edge.d.ts.map +1 -0
- package/dist/websocket-edge.js +93 -0
- package/dist/websocket-edge.js.map +1 -0
- package/package.json +9 -6
- package/src/channel/direct-channel-internal.ts +356 -0
- package/src/channel/direct-channel.ts +234 -0
- package/src/channel/proxy-channel.ts +344 -234
- package/src/common.ts +24 -17
- package/src/mesh-schema.ts +73 -20
- package/src/mod.ts +2 -2
- package/src/node.test.ts +723 -190
- package/src/node.ts +482 -156
- package/src/utils.ts +13 -2
- package/src/websocket-edge.ts +191 -0
- package/dist/channel/message-channel.d.ts +0 -20
- package/dist/channel/message-channel.d.ts.map +0 -1
- package/dist/channel/message-channel.js +0 -183
- package/dist/channel/message-channel.js.map +0 -1
- package/dist/websocket-connection.d.ts +0 -51
- package/dist/websocket-connection.d.ts.map +0 -1
- package/dist/websocket-connection.js +0 -74
- package/dist/websocket-connection.js.map +0 -1
- package/dist/websocket-server.d.ts +0 -7
- package/dist/websocket-server.d.ts.map +0 -1
- package/dist/websocket-server.js +0 -24
- package/dist/websocket-server.js.map +0 -1
- package/src/channel/message-channel.ts +0 -354
- package/src/websocket-connection.ts +0 -158
- package/src/websocket-server.ts +0 -40
- package/tsconfig.json +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-schema.d.ts","sourceRoot":"","sources":["../src/mesh-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,yBAAyB,CAAA
|
|
1
|
+
{"version":3,"file":"mesh-schema.d.ts","sourceRoot":"","sources":["../src/mesh-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,yBAAyB,CAAA;;;;IA6B5D,oEAAoE;;IAEpE;;;OAGG;;;;;;;;AAhBL;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,yBAWxC;CAAG;;;;;;;;;;;;AAEL,qBAAa,4BAA6B,SAAQ,iCAOhD;CAAG;;;;;;;;;;AAEL,qBAAa,oCAAqC,SAAQ,yCAIxD;CAAG;;;;;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAIvC;CAAG;;;;;;;;;;;;AAEL,qBAAa,2BAA4B,SAAQ,gCAM/C;CAAG;;;;;;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAKvC;CAAG;;;;;;;;;;;AAEL,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;;AAEL;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAIpC;CAAG;;;;IAKH,iDAAiD;;;;AAHnD,qBAAa,sBAAuB,SAAQ,2BAM1C;CAAG;;;;;;;IAQH,iDAAiD;;;;AANnD,qBAAa,uBAAwB,SAAQ,4BAS3C;CAAG;AAEL,eAAO,MAAM,sBAAsB;;;IAGjC;;;OAGG;;;;;EAKH,CAAA;;AAEF,qBAAa,mBAAoB,SAAQ,wBAIxC;CAAG;;AAEJ,qBAAa,kBAAmB,SAAQ,uBAKvC;CAAG;;;;IArBF;;;OAGG;;;;;;AAoBL,qBAAa,MAAO,SAAQ,WAO3B;CAAG;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAA4C;CAAG;;AACtF,qBAAa,iBAAkB,SAAQ,sBAA4C;CAAG"}
|
package/dist/mesh-schema.js
CHANGED
|
@@ -9,21 +9,36 @@ const defaultPacketFields = {
|
|
|
9
9
|
hops: Schema.Array(Schema.String),
|
|
10
10
|
};
|
|
11
11
|
const remainingHopsUndefined = Schema.Undefined.pipe(Schema.optional);
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Needs to go through already existing DirectChannel edges, times out otherwise
|
|
14
|
+
*
|
|
15
|
+
* Can't yet contain the `port` because the request might be duplicated while forwarding to multiple nodes.
|
|
16
|
+
* We need a clear path back to the sender to avoid this, thus we respond with a separate
|
|
17
|
+
* `DirectChannelResponseSuccess` which contains the `port`.
|
|
18
|
+
*/
|
|
19
|
+
export class DirectChannelRequest extends Schema.TaggedStruct('DirectChannelRequest', {
|
|
14
20
|
...defaultPacketFields,
|
|
15
|
-
remainingHops:
|
|
21
|
+
remainingHops: Schema.Array(Schema.String).pipe(Schema.optional),
|
|
22
|
+
channelVersion: Schema.Number,
|
|
23
|
+
/** Only set if the request is in response to an incoming request */
|
|
24
|
+
reqId: Schema.UndefinedOr(Schema.String),
|
|
25
|
+
/**
|
|
26
|
+
* Additionally to the `source` field, we use this field to track whether the instance of a
|
|
27
|
+
* source has changed.
|
|
28
|
+
*/
|
|
29
|
+
sourceId: Schema.String,
|
|
16
30
|
}) {
|
|
17
31
|
}
|
|
18
|
-
export class
|
|
32
|
+
export class DirectChannelResponseSuccess extends Schema.TaggedStruct('DirectChannelResponseSuccess', {
|
|
19
33
|
...defaultPacketFields,
|
|
20
34
|
reqId: Schema.String,
|
|
21
35
|
port: Transferable.MessagePort,
|
|
22
36
|
// Since we can't copy this message, we need to follow the exact route back to the sender
|
|
23
37
|
remainingHops: Schema.Array(Schema.String),
|
|
38
|
+
channelVersion: Schema.Number,
|
|
24
39
|
}) {
|
|
25
40
|
}
|
|
26
|
-
export class
|
|
41
|
+
export class DirectChannelResponseNoTransferables extends Schema.TaggedStruct('DirectChannelResponseNoTransferables', {
|
|
27
42
|
...defaultPacketFields,
|
|
28
43
|
reqId: Schema.String,
|
|
29
44
|
remainingHops: Schema.Array(Schema.String),
|
|
@@ -58,20 +73,54 @@ export class ProxyChannelPayloadAck extends Schema.TaggedStruct('ProxyChannelPay
|
|
|
58
73
|
}) {
|
|
59
74
|
}
|
|
60
75
|
/**
|
|
61
|
-
* Broadcast to all nodes when a new
|
|
76
|
+
* Broadcast to all nodes when a new edge is added.
|
|
62
77
|
* Mostly used for auto-reconnect purposes.
|
|
63
78
|
*/
|
|
64
|
-
|
|
65
|
-
export class NetworkConnectionAdded extends Schema.TaggedStruct('NetworkConnectionAdded', {
|
|
79
|
+
export class NetworkEdgeAdded extends Schema.TaggedStruct('NetworkEdgeAdded', {
|
|
66
80
|
id,
|
|
67
81
|
source: Schema.String,
|
|
68
82
|
target: Schema.String,
|
|
69
83
|
}) {
|
|
70
84
|
}
|
|
71
|
-
export class
|
|
85
|
+
export class NetworkTopologyRequest extends Schema.TaggedStruct('NetworkTopologyRequest', {
|
|
86
|
+
id,
|
|
87
|
+
hops: Schema.Array(Schema.String),
|
|
88
|
+
/** Always fixed to who requested the topology */
|
|
89
|
+
source: Schema.String,
|
|
90
|
+
target: Schema.Literal('-'),
|
|
91
|
+
}) {
|
|
92
|
+
}
|
|
93
|
+
export class NetworkTopologyResponse extends Schema.TaggedStruct('NetworkTopologyResponse', {
|
|
94
|
+
id,
|
|
95
|
+
reqId: Schema.String,
|
|
96
|
+
remainingHops: Schema.Array(Schema.String),
|
|
97
|
+
nodeName: Schema.String,
|
|
98
|
+
edges: Schema.Array(Schema.String),
|
|
99
|
+
/** Always fixed to who requested the topology */
|
|
100
|
+
source: Schema.String,
|
|
101
|
+
target: Schema.Literal('-'),
|
|
102
|
+
}) {
|
|
103
|
+
}
|
|
104
|
+
export const BroadcastChannelPacket = Schema.TaggedStruct('BroadcastChannelPacket', {
|
|
105
|
+
id,
|
|
106
|
+
channelName: Schema.String,
|
|
107
|
+
/**
|
|
108
|
+
* The payload is expected to be encoded/decoded by the send/listen schema.
|
|
109
|
+
* Transferables are not supported.
|
|
110
|
+
*/
|
|
111
|
+
payload: Schema.Any,
|
|
112
|
+
hops: Schema.Array(Schema.String),
|
|
113
|
+
source: Schema.String,
|
|
114
|
+
target: Schema.Literal('-'),
|
|
115
|
+
});
|
|
116
|
+
export class DirectChannelPacket extends Schema.Union(DirectChannelRequest, DirectChannelResponseSuccess, DirectChannelResponseNoTransferables) {
|
|
72
117
|
}
|
|
73
118
|
export class ProxyChannelPacket extends Schema.Union(ProxyChannelRequest, ProxyChannelResponseSuccess, ProxyChannelPayload, ProxyChannelPayloadAck) {
|
|
74
119
|
}
|
|
75
|
-
export class Packet extends Schema.Union(
|
|
120
|
+
export class Packet extends Schema.Union(DirectChannelPacket, ProxyChannelPacket, NetworkEdgeAdded, NetworkTopologyRequest, NetworkTopologyResponse, BroadcastChannelPacket) {
|
|
121
|
+
}
|
|
122
|
+
export class DirectChannelPing extends Schema.TaggedStruct('DirectChannelPing', {}) {
|
|
123
|
+
}
|
|
124
|
+
export class DirectChannelPong extends Schema.TaggedStruct('DirectChannelPong', {}) {
|
|
76
125
|
}
|
|
77
126
|
//# sourceMappingURL=mesh-schema.js.map
|
package/dist/mesh-schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-schema.js","sourceRoot":"","sources":["../src/mesh-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAC3B,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CACnF,CAAA;AAED,MAAM,mBAAmB,GAAG;IAC1B,EAAE;IACF,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;CAClC,CAAA;AAED,MAAM,sBAAsB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAErE
|
|
1
|
+
{"version":3,"file":"mesh-schema.js","sourceRoot":"","sources":["../src/mesh-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/mod.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './websocket-
|
|
1
|
+
export * from './websocket-edge.js';
|
|
2
2
|
export * from './node.js';
|
|
3
3
|
export * as WebmeshSchema from './mesh-schema.js';
|
|
4
|
-
export {
|
|
4
|
+
export { EdgeAlreadyExistsError } from './common.js';
|
|
5
5
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA;AACzB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/mod.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './websocket-
|
|
1
|
+
export * from './websocket-edge.js';
|
|
2
2
|
export * from './node.js';
|
|
3
3
|
export * as WebmeshSchema from './mesh-schema.js';
|
|
4
|
-
export {
|
|
4
|
+
export { EdgeAlreadyExistsError } from './common.js';
|
|
5
5
|
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA;AACzB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/node.d.ts
CHANGED
|
@@ -1,41 +1,59 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
connectionKeys: Effect.Effect<Set<MeshNodeName>>;
|
|
1
|
+
import { Cause, Duration, Effect, Schema, Scope, Stream, WebChannel } from '@livestore/utils/effect';
|
|
2
|
+
import type { ListenForChannelResult, MeshNodeName } from './common.js';
|
|
3
|
+
import { EdgeAlreadyExistsError } from './common.js';
|
|
4
|
+
import * as WebmeshSchema from './mesh-schema.js';
|
|
5
|
+
type EdgeChannel = WebChannel.WebChannel<typeof WebmeshSchema.Packet.Type, typeof WebmeshSchema.Packet.Type>;
|
|
6
|
+
export interface MeshNode<TName extends MeshNodeName = MeshNodeName> {
|
|
7
|
+
nodeName: TName;
|
|
8
|
+
edgeKeys: Effect.Effect<Set<MeshNodeName>>;
|
|
10
9
|
debug: {
|
|
11
10
|
print: () => void;
|
|
11
|
+
/** Sends a ping message to all connected nodes and channels */
|
|
12
|
+
ping: (payload?: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Requests the topology of the network from all connected nodes
|
|
15
|
+
*/
|
|
16
|
+
requestTopology: (timeoutMs?: number) => Promise<void>;
|
|
12
17
|
};
|
|
13
18
|
/**
|
|
14
|
-
* Manually adds a
|
|
19
|
+
* Manually adds a edge to get connected to the network of nodes with an existing WebChannel.
|
|
15
20
|
*
|
|
16
|
-
* Assumptions about the WebChannel
|
|
17
|
-
* - 1:1
|
|
21
|
+
* Assumptions about the WebChannel edge:
|
|
22
|
+
* - 1:1 edge
|
|
18
23
|
* - Queues messages internally to never drop messages
|
|
19
24
|
* - Automatically reconnects
|
|
20
25
|
* - Ideally supports transferables
|
|
21
26
|
*/
|
|
22
|
-
|
|
27
|
+
addEdge: {
|
|
23
28
|
(options: {
|
|
24
29
|
target: MeshNodeName;
|
|
25
|
-
|
|
30
|
+
edgeChannel: EdgeChannel;
|
|
26
31
|
replaceIfExists: true;
|
|
27
32
|
}): Effect.Effect<void, never, Scope.Scope>;
|
|
28
33
|
(options: {
|
|
29
34
|
target: MeshNodeName;
|
|
30
|
-
|
|
35
|
+
edgeChannel: EdgeChannel;
|
|
31
36
|
replaceIfExists?: boolean;
|
|
32
|
-
}): Effect.Effect<void,
|
|
37
|
+
}): Effect.Effect<void, EdgeAlreadyExistsError, Scope.Scope>;
|
|
33
38
|
};
|
|
34
|
-
|
|
39
|
+
removeEdge: (targetNodeName: MeshNodeName) => Effect.Effect<void, Cause.NoSuchElementException>;
|
|
40
|
+
hasChannel: ({ target, channelName, }: {
|
|
41
|
+
target: MeshNodeName;
|
|
42
|
+
channelName: string;
|
|
43
|
+
}) => Effect.Effect<boolean, never, Scope.Scope>;
|
|
35
44
|
/**
|
|
36
|
-
* Tries to broker a
|
|
45
|
+
* Tries to broker a DirectChannel edge between the nodes, otherwise will proxy messages via hop-nodes
|
|
46
|
+
*
|
|
47
|
+
* For a channel to successfully open, both sides need to have a edge and call `makeChannel`.
|
|
48
|
+
*
|
|
49
|
+
* Example:
|
|
50
|
+
* ```ts
|
|
51
|
+
* // Code on node A
|
|
52
|
+
* const channel = nodeA.makeChannel({ target: 'B', channelName: 'my-channel', schema: ... })
|
|
37
53
|
*
|
|
38
|
-
*
|
|
54
|
+
* // Code on node B
|
|
55
|
+
* const channel = nodeB.makeChannel({ target: 'A', channelName: 'my-channel', schema: ... })
|
|
56
|
+
* ```
|
|
39
57
|
*/
|
|
40
58
|
makeChannel: <MsgListen, MsgSend>(args: {
|
|
41
59
|
target: MeshNodeName;
|
|
@@ -49,17 +67,32 @@ export interface MeshNode {
|
|
|
49
67
|
send: Schema.Schema<MsgSend, any>;
|
|
50
68
|
};
|
|
51
69
|
/**
|
|
52
|
-
* If possible, prefer using a
|
|
70
|
+
* If possible, prefer using a DirectChannel with transferables (i.e. transferring memory instead of copying it).
|
|
53
71
|
*/
|
|
54
|
-
mode: '
|
|
72
|
+
mode: 'direct' | 'proxy';
|
|
55
73
|
/**
|
|
56
|
-
* Amount of time before we consider a channel creation failed and retry when a new
|
|
74
|
+
* Amount of time before we consider a channel creation failed and retry when a new edge is available
|
|
57
75
|
*
|
|
58
76
|
* @default 1 second
|
|
59
77
|
*/
|
|
60
78
|
timeout?: Duration.DurationInput;
|
|
79
|
+
/**
|
|
80
|
+
* If true, will close an existing channel if it exists.
|
|
81
|
+
*
|
|
82
|
+
* @default false
|
|
83
|
+
*/
|
|
84
|
+
closeExisting?: boolean;
|
|
61
85
|
}) => Effect.Effect<WebChannel.WebChannel<MsgListen, MsgSend>, never, Scope.Scope>;
|
|
86
|
+
listenForChannel: Stream.Stream<ListenForChannelResult>;
|
|
87
|
+
/**
|
|
88
|
+
* Creates a WebChannel that is broadcasted to all connected nodes.
|
|
89
|
+
* Messages won't be buffered for nodes that join the network after the broadcast channel has been created.
|
|
90
|
+
*/
|
|
91
|
+
makeBroadcastChannel: <Msg>(args: {
|
|
92
|
+
channelName: string;
|
|
93
|
+
schema: Schema.Schema<Msg, any>;
|
|
94
|
+
}) => Effect.Effect<WebChannel.WebChannel<Msg, Msg>, never, Scope.Scope>;
|
|
62
95
|
}
|
|
63
|
-
export declare const makeMeshNode: (nodeName:
|
|
96
|
+
export declare const makeMeshNode: <TName extends MeshNodeName>(nodeName: TName) => Effect.Effect<MeshNode<TName>, never, Scope.Scope>;
|
|
64
97
|
export {};
|
|
65
98
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|