@livestore/webmesh 0.3.0-dev.5 → 0.3.0-dev.50
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/README.md +43 -0
- 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 +10 -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
package/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# @livestore/webmesh
|
|
2
|
+
|
|
3
|
+
Webmesh is a library for connecting multiple nodes (windows/tabs, workers, threads, ...) in a network-like topology. It helps to establish communication channels between nodes.
|
|
4
|
+
|
|
5
|
+
There are three types of channels:
|
|
6
|
+
- ProxyChannel: a virtual channel by proxying messages along edges (via hop nodes)
|
|
7
|
+
- DirectChannel: an end-to-end channel with support for transferable objects (e.g. `Uint8Array`)
|
|
8
|
+
- BroadcastChannel: a virtual channel by broadcasting messages to all connected nodes
|
|
9
|
+
|
|
10
|
+
ProxyChannels and DirectChannels have the following properties (similar to TCP):
|
|
11
|
+
- Has a unique name across the network
|
|
12
|
+
- Auto-reconnects
|
|
13
|
+
- Ordered messages
|
|
14
|
+
- Reliable (buffers messages and acks each message)
|
|
15
|
+
|
|
16
|
+
## Available edge connection implementations
|
|
17
|
+
|
|
18
|
+
- `MessageChannel`
|
|
19
|
+
- `BroadcastChannel` (both web and Node.js)
|
|
20
|
+
- `WebSocket`
|
|
21
|
+
- `window.postMessage`
|
|
22
|
+
|
|
23
|
+
## Important notes
|
|
24
|
+
|
|
25
|
+
- Each node name needs to be unique in the network.
|
|
26
|
+
- The node name is also used as a "tie-breaker" as part of the messaging protocol.
|
|
27
|
+
- It's using the `WebChannel` concept from the `@livestore/utils` package.
|
|
28
|
+
- We assume network edges to be low-latency (a few ms)
|
|
29
|
+
- Webmesh is used in LiveStore as the foundation for the LiveStore devtools protocol communication.
|
|
30
|
+
- The implementation should avoid timeout-based "solutions" as much as possible.
|
|
31
|
+
|
|
32
|
+
## Tradeoffs
|
|
33
|
+
|
|
34
|
+
- Webmesh isn't meant for larger networks
|
|
35
|
+
- Nodes are mostly stateless to simplify the protocol / implementation
|
|
36
|
+
|
|
37
|
+
## Inspiration
|
|
38
|
+
|
|
39
|
+
- Elixir `Distribution` / OTP
|
|
40
|
+
- https://elixirschool.com/en/lessons/advanced/otp_distribution
|
|
41
|
+
- https://serokell.io/blog/elixir-otp-guide
|
|
42
|
+
- Consul by HashiCorp
|
|
43
|
+
- Ethernet
|