@livestore/webmesh 0.3.0-dev.2 → 0.3.0-dev.21

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 (48) hide show
  1. package/README.md +26 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/channel/message-channel-internal.d.ts +26 -0
  4. package/dist/channel/message-channel-internal.d.ts.map +1 -0
  5. package/dist/channel/message-channel-internal.js +217 -0
  6. package/dist/channel/message-channel-internal.js.map +1 -0
  7. package/dist/channel/message-channel.d.ts +21 -19
  8. package/dist/channel/message-channel.d.ts.map +1 -1
  9. package/dist/channel/message-channel.js +132 -162
  10. package/dist/channel/message-channel.js.map +1 -1
  11. package/dist/channel/proxy-channel.d.ts +2 -2
  12. package/dist/channel/proxy-channel.d.ts.map +1 -1
  13. package/dist/channel/proxy-channel.js +30 -11
  14. package/dist/channel/proxy-channel.js.map +1 -1
  15. package/dist/common.d.ts +32 -5
  16. package/dist/common.d.ts.map +1 -1
  17. package/dist/common.js +2 -1
  18. package/dist/common.js.map +1 -1
  19. package/dist/mesh-schema.d.ts +68 -2
  20. package/dist/mesh-schema.d.ts.map +1 -1
  21. package/dist/mesh-schema.js +53 -4
  22. package/dist/mesh-schema.js.map +1 -1
  23. package/dist/node.d.ts +31 -9
  24. package/dist/node.d.ts.map +1 -1
  25. package/dist/node.js +225 -49
  26. package/dist/node.js.map +1 -1
  27. package/dist/node.test.d.ts +1 -1
  28. package/dist/node.test.d.ts.map +1 -1
  29. package/dist/node.test.js +384 -149
  30. package/dist/node.test.js.map +1 -1
  31. package/dist/websocket-connection.d.ts +5 -6
  32. package/dist/websocket-connection.d.ts.map +1 -1
  33. package/dist/websocket-connection.js +21 -26
  34. package/dist/websocket-connection.js.map +1 -1
  35. package/dist/websocket-server.d.ts.map +1 -1
  36. package/dist/websocket-server.js +17 -3
  37. package/dist/websocket-server.js.map +1 -1
  38. package/package.json +7 -6
  39. package/src/channel/message-channel-internal.ts +356 -0
  40. package/src/channel/message-channel.ts +190 -310
  41. package/src/channel/proxy-channel.ts +257 -229
  42. package/src/common.ts +4 -2
  43. package/src/mesh-schema.ts +60 -4
  44. package/src/node.test.ts +544 -179
  45. package/src/node.ts +363 -69
  46. package/src/websocket-connection.ts +96 -95
  47. package/src/websocket-server.ts +20 -3
  48. package/tmp/pack.tgz +0 -0
@@ -16,10 +16,24 @@ const defaultPacketFields = {
16
16
 
17
17
  const remainingHopsUndefined = Schema.Undefined.pipe(Schema.optional)
18
18
 
19
- // Needs to go through already existing MessageChannel connections, times out otherwise
19
+ /**
20
+ * Needs to go through already existing MessageChannel connections, times out otherwise
21
+ *
22
+ * Can't yet contain the `port` because the request might be duplicated while forwarding to multiple nodes.
23
+ * We need a clear path back to the sender to avoid this, thus we respond with a separate
24
+ * `MessageChannelResponseSuccess` which contains the `port`.
25
+ */
20
26
  export class MessageChannelRequest extends Schema.TaggedStruct('MessageChannelRequest', {
21
27
  ...defaultPacketFields,
22
- remainingHops: remainingHopsUndefined,
28
+ remainingHops: Schema.Array(Schema.String).pipe(Schema.optional),
29
+ channelVersion: Schema.Number,
30
+ /** Only set if the request is in response to an incoming request */
31
+ reqId: Schema.UndefinedOr(Schema.String),
32
+ /**
33
+ * Additionally to the `source` field, we use this field to track whether the instance of a
34
+ * source has changed.
35
+ */
36
+ sourceId: Schema.String,
23
37
  }) {}
24
38
 
25
39
  export class MessageChannelResponseSuccess extends Schema.TaggedStruct('MessageChannelResponseSuccess', {
@@ -28,6 +42,7 @@ export class MessageChannelResponseSuccess extends Schema.TaggedStruct('MessageC
28
42
  port: Transferable.MessagePort,
29
43
  // Since we can't copy this message, we need to follow the exact route back to the sender
30
44
  remainingHops: Schema.Array(Schema.String),
45
+ channelVersion: Schema.Number,
31
46
  }) {}
32
47
 
33
48
  export class MessageChannelResponseNoTransferables extends Schema.TaggedStruct(
@@ -71,13 +86,44 @@ export class ProxyChannelPayloadAck extends Schema.TaggedStruct('ProxyChannelPay
71
86
  * Broadcast to all nodes when a new connection is added.
72
87
  * Mostly used for auto-reconnect purposes.
73
88
  */
74
- // TODO actually use for this use case
75
89
  export class NetworkConnectionAdded extends Schema.TaggedStruct('NetworkConnectionAdded', {
76
90
  id,
77
91
  source: Schema.String,
78
92
  target: Schema.String,
79
93
  }) {}
80
94
 
95
+ export class NetworkConnectionTopologyRequest extends Schema.TaggedStruct('NetworkConnectionTopologyRequest', {
96
+ id,
97
+ hops: Schema.Array(Schema.String),
98
+ /** Always fixed to who requested the topology */
99
+ source: Schema.String,
100
+ target: Schema.Literal('-'),
101
+ }) {}
102
+
103
+ export class NetworkConnectionTopologyResponse extends Schema.TaggedStruct('NetworkConnectionTopologyResponse', {
104
+ id,
105
+ reqId: Schema.String,
106
+ remainingHops: Schema.Array(Schema.String),
107
+ nodeName: Schema.String,
108
+ connections: Schema.Array(Schema.String),
109
+ /** Always fixed to who requested the topology */
110
+ source: Schema.String,
111
+ target: Schema.Literal('-'),
112
+ }) {}
113
+
114
+ export const BroadcastChannelPacket = Schema.TaggedStruct('BroadcastChannelPacket', {
115
+ id,
116
+ channelName: Schema.String,
117
+ /**
118
+ * The payload is expected to be encoded/decoded by the send/listen schema.
119
+ * Transferables are not supported.
120
+ */
121
+ payload: Schema.Any,
122
+ hops: Schema.Array(Schema.String),
123
+ source: Schema.String,
124
+ target: Schema.Literal('-'),
125
+ })
126
+
81
127
  export class MessageChannelPacket extends Schema.Union(
82
128
  MessageChannelRequest,
83
129
  MessageChannelResponseSuccess,
@@ -91,4 +137,14 @@ export class ProxyChannelPacket extends Schema.Union(
91
137
  ProxyChannelPayloadAck,
92
138
  ) {}
93
139
 
94
- export class Packet extends Schema.Union(MessageChannelPacket, ProxyChannelPacket, NetworkConnectionAdded) {}
140
+ export class Packet extends Schema.Union(
141
+ MessageChannelPacket,
142
+ ProxyChannelPacket,
143
+ NetworkConnectionAdded,
144
+ NetworkConnectionTopologyRequest,
145
+ NetworkConnectionTopologyResponse,
146
+ BroadcastChannelPacket,
147
+ ) {}
148
+
149
+ export class MessageChannelPing extends Schema.TaggedStruct('MessageChannelPing', {}) {}
150
+ export class MessageChannelPong extends Schema.TaggedStruct('MessageChannelPong', {}) {}