@livestore/webmesh 0.3.0-dev.4 → 0.3.0-dev.40

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 (69) hide show
  1. package/README.md +42 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/channel/direct-channel-internal.d.ts +26 -0
  4. package/dist/channel/direct-channel-internal.d.ts.map +1 -0
  5. package/dist/channel/direct-channel-internal.js +217 -0
  6. package/dist/channel/direct-channel-internal.js.map +1 -0
  7. package/dist/channel/direct-channel.d.ts +22 -0
  8. package/dist/channel/direct-channel.d.ts.map +1 -0
  9. package/dist/channel/direct-channel.js +153 -0
  10. package/dist/channel/direct-channel.js.map +1 -0
  11. package/dist/channel/proxy-channel.d.ts +3 -3
  12. package/dist/channel/proxy-channel.d.ts.map +1 -1
  13. package/dist/channel/proxy-channel.js +119 -37
  14. package/dist/channel/proxy-channel.js.map +1 -1
  15. package/dist/common.d.ts +47 -19
  16. package/dist/common.d.ts.map +1 -1
  17. package/dist/common.js +13 -5
  18. package/dist/common.js.map +1 -1
  19. package/dist/mesh-schema.d.ts +79 -13
  20. package/dist/mesh-schema.d.ts.map +1 -1
  21. package/dist/mesh-schema.js +59 -10
  22. package/dist/mesh-schema.js.map +1 -1
  23. package/dist/mod.d.ts +2 -2
  24. package/dist/mod.d.ts.map +1 -1
  25. package/dist/mod.js +2 -2
  26. package/dist/mod.js.map +1 -1
  27. package/dist/node.d.ts +51 -24
  28. package/dist/node.d.ts.map +1 -1
  29. package/dist/node.js +322 -111
  30. package/dist/node.js.map +1 -1
  31. package/dist/node.test.d.ts +1 -1
  32. package/dist/node.test.d.ts.map +1 -1
  33. package/dist/node.test.js +489 -157
  34. package/dist/node.test.js.map +1 -1
  35. package/dist/utils.d.ts +4 -4
  36. package/dist/utils.d.ts.map +1 -1
  37. package/dist/utils.js +7 -1
  38. package/dist/utils.js.map +1 -1
  39. package/dist/websocket-edge.d.ts +53 -0
  40. package/dist/websocket-edge.d.ts.map +1 -0
  41. package/dist/websocket-edge.js +89 -0
  42. package/dist/websocket-edge.js.map +1 -0
  43. package/package.json +10 -6
  44. package/src/channel/direct-channel-internal.ts +356 -0
  45. package/src/channel/direct-channel.ts +234 -0
  46. package/src/channel/proxy-channel.ts +344 -234
  47. package/src/common.ts +24 -17
  48. package/src/mesh-schema.ts +73 -20
  49. package/src/mod.ts +2 -2
  50. package/src/node.test.ts +723 -190
  51. package/src/node.ts +497 -152
  52. package/src/utils.ts +13 -2
  53. package/src/websocket-edge.ts +183 -0
  54. package/dist/channel/message-channel.d.ts +0 -20
  55. package/dist/channel/message-channel.d.ts.map +0 -1
  56. package/dist/channel/message-channel.js +0 -183
  57. package/dist/channel/message-channel.js.map +0 -1
  58. package/dist/websocket-connection.d.ts +0 -51
  59. package/dist/websocket-connection.d.ts.map +0 -1
  60. package/dist/websocket-connection.js +0 -74
  61. package/dist/websocket-connection.js.map +0 -1
  62. package/dist/websocket-server.d.ts +0 -7
  63. package/dist/websocket-server.d.ts.map +0 -1
  64. package/dist/websocket-server.js +0 -24
  65. package/dist/websocket-server.js.map +0 -1
  66. package/src/channel/message-channel.ts +0 -354
  67. package/src/websocket-connection.ts +0 -158
  68. package/src/websocket-server.ts +0 -40
  69. package/tsconfig.json +0 -11
package/README.md ADDED
@@ -0,0 +1,42 @@
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
+
31
+ ## Tradeoffs
32
+
33
+ - Webmesh isn't meant for larger networks
34
+ - Nodes are mostly stateless to simplify the protocol / implementation
35
+
36
+ ## Inspiration
37
+
38
+ - Elixir `Distribution` / OTP
39
+ - https://elixirschool.com/en/lessons/advanced/otp_distribution
40
+ - https://serokell.io/blog/elixir-otp-guide
41
+ - Consul by HashiCorp
42
+ - Ethernet