@livestore/webmesh 0.3.0-dev.5 → 0.3.0-dev.51

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 +43 -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 +56 -23
  28. package/dist/node.d.ts.map +1 -1
  29. package/dist/node.js +323 -115
  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 +56 -0
  40. package/dist/websocket-edge.d.ts.map +1 -0
  41. package/dist/websocket-edge.js +93 -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 +482 -156
  52. package/src/utils.ts +13 -2
  53. package/src/websocket-edge.ts +191 -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/dist/node.js CHANGED
@@ -1,35 +1,37 @@
1
- import { LS_DEV, shouldNeverHappen } from '@livestore/utils';
2
- import { Cause, Duration, Effect, Fiber, Option, PubSub, Queue, Schema, Stream, WebChannel, } from '@livestore/utils/effect';
3
- import { makeMessageChannel } from './channel/message-channel.js';
1
+ import { indent, LS_DEV, shouldNeverHappen } from '@livestore/utils';
2
+ import { Cause, Deferred, Duration, Effect, Exit, Fiber, Option, PubSub, Queue, Schema, Scope, Stream, WebChannel, } from '@livestore/utils/effect';
3
+ import { makeDirectChannel } from './channel/direct-channel.js';
4
4
  import { makeProxyChannel } from './channel/proxy-channel.js';
5
- import { ConnectionAlreadyExistsError, packetAsOtelAttributes } from './common.js';
6
- import * as MeshSchema from './mesh-schema.js';
5
+ import { EdgeAlreadyExistsError, packetAsOtelAttributes } from './common.js';
6
+ import * as WebmeshSchema from './mesh-schema.js';
7
7
  import { TimeoutSet } from './utils.js';
8
8
  export const makeMeshNode = (nodeName) => Effect.gen(function* () {
9
- const connectionChannels = new Map();
9
+ const edgeChannels = new Map();
10
10
  // To avoid unbounded memory growth, we automatically forget about packet ids after a while
11
- const handledPacketIds = new TimeoutSet({ timeout: Duration.minutes(1) });
12
- const newConnectionAvailablePubSub = yield* PubSub.unbounded().pipe(Effect.acquireRelease(PubSub.shutdown));
11
+ const handledPacketIds = yield* TimeoutSet.make(Duration.minutes(1));
12
+ const newEdgeAvailablePubSub = yield* PubSub.unbounded().pipe(Effect.acquireRelease(PubSub.shutdown));
13
13
  // const proxyPacketsToProcess = yield* Queue.unbounded<ProxyQueueItem>().pipe(Effect.acquireRelease(Queue.shutdown))
14
14
  // const messagePacketsToProcess = yield* Queue.unbounded<MessageQueueItem>().pipe(
15
15
  // Effect.acquireRelease(Queue.shutdown),
16
16
  // )
17
17
  const channelMap = new Map();
18
- const checkTransferableConnections = (packet) => {
19
- if ((packet._tag === 'MessageChannelRequest' &&
20
- (connectionChannels.size === 0 ||
21
- // Either if direct connection does not support transferables ...
22
- connectionChannels.get(packet.target)?.channel.supportsTransferables === false)) ||
23
- // ... or if no forward-connections support transferables
24
- ![...connectionChannels.values()].some((c) => c.channel.supportsTransferables === true)) {
25
- return MeshSchema.MessageChannelResponseNoTransferables.make({
18
+ const channelRequestsQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
19
+ const topologyRequestsMap = new Map();
20
+ const broadcastChannelListenQueueMap = new Map();
21
+ const checkTransferableEdges = (packet) => {
22
+ if ((packet._tag === 'DirectChannelRequest' &&
23
+ (edgeChannels.size === 0 ||
24
+ // Either if direct edge does not support transferables ...
25
+ edgeChannels.get(packet.target)?.channel.supportsTransferables === false)) ||
26
+ // ... or if no forward-edges support transferables
27
+ ![...edgeChannels.values()].some((c) => c.channel.supportsTransferables === true)) {
28
+ return WebmeshSchema.DirectChannelResponseNoTransferables.make({
26
29
  reqId: packet.id,
27
30
  channelName: packet.channelName,
28
31
  // NOTE for now we're "pretending" that the message is coming from the target node
29
32
  // even though we're already handling it here.
30
33
  // TODO we should clean this up at some point
31
34
  source: packet.target,
32
- // source: nodeName,
33
35
  target: packet.source,
34
36
  remainingHops: packet.hops,
35
37
  hops: [],
@@ -37,180 +39,386 @@ export const makeMeshNode = (nodeName) => Effect.gen(function* () {
37
39
  }
38
40
  };
39
41
  const sendPacket = (packet) => Effect.gen(function* () {
40
- if (Schema.is(MeshSchema.NetworkConnectionAdded)(packet)) {
41
- yield* Effect.spanEvent('NetworkConnectionAdded', { packet, nodeName });
42
- yield* PubSub.publish(newConnectionAvailablePubSub, packet.target);
43
- const connectionsToForwardTo = Array.from(connectionChannels)
42
+ // yield* Effect.log(`${nodeName}: sendPacket:${packet._tag} [${packet.id}]`)
43
+ if (Schema.is(WebmeshSchema.NetworkEdgeAdded)(packet)) {
44
+ yield* Effect.spanEvent('NetworkEdgeAdded', { packet, nodeName });
45
+ yield* PubSub.publish(newEdgeAvailablePubSub, packet.target);
46
+ const edgesToForwardTo = Array.from(edgeChannels)
44
47
  .filter(([name]) => name !== packet.source)
45
48
  .map(([_, con]) => con.channel);
46
- yield* Effect.forEach(connectionsToForwardTo, (con) => con.send(packet), { concurrency: 'unbounded' });
49
+ yield* Effect.forEach(edgesToForwardTo, (con) => con.send(packet), { concurrency: 'unbounded' });
47
50
  return;
48
51
  }
49
- // We have a direct connection to the target node
50
- if (connectionChannels.has(packet.target)) {
51
- const connectionChannel = connectionChannels.get(packet.target).channel;
52
+ if (Schema.is(WebmeshSchema.BroadcastChannelPacket)(packet)) {
53
+ const edgesToForwardTo = Array.from(edgeChannels)
54
+ .filter(([name]) => !packet.hops.includes(name))
55
+ .map(([_, con]) => con.channel);
56
+ const adjustedPacket = {
57
+ ...packet,
58
+ hops: [...packet.hops, nodeName],
59
+ };
60
+ yield* Effect.forEach(edgesToForwardTo, (con) => con.send(adjustedPacket), { concurrency: 'unbounded' });
61
+ // Don't emit the packet to the own node listen queue
62
+ if (packet.source === nodeName) {
63
+ return;
64
+ }
65
+ const queue = broadcastChannelListenQueueMap.get(packet.channelName);
66
+ // In case this node is listening to this channel, add the packet to the listen queue
67
+ if (queue !== undefined) {
68
+ yield* Queue.offer(queue, packet);
69
+ }
70
+ return;
71
+ }
72
+ if (Schema.is(WebmeshSchema.NetworkTopologyRequest)(packet)) {
73
+ if (packet.source !== nodeName) {
74
+ const backEdgeName = packet.hops.at(-1) ?? shouldNeverHappen(`${nodeName}: Expected hops for packet`, packet);
75
+ const backEdgeChannel = edgeChannels.get(backEdgeName).channel;
76
+ // Respond with own edge info
77
+ const response = WebmeshSchema.NetworkTopologyResponse.make({
78
+ reqId: packet.id,
79
+ source: packet.source,
80
+ target: packet.target,
81
+ remainingHops: packet.hops.slice(0, -1),
82
+ nodeName,
83
+ edges: Array.from(edgeChannels.keys()),
84
+ });
85
+ yield* backEdgeChannel.send(response);
86
+ }
87
+ // Forward the packet to all edges except the already visited ones
88
+ const edgesToForwardTo = Array.from(edgeChannels)
89
+ .filter(([name]) => !packet.hops.includes(name))
90
+ .map(([_, con]) => con.channel);
91
+ const adjustedPacket = {
92
+ ...packet,
93
+ hops: [...packet.hops, nodeName],
94
+ };
95
+ yield* Effect.forEach(edgesToForwardTo, (con) => con.send(adjustedPacket), { concurrency: 'unbounded' });
96
+ return;
97
+ }
98
+ if (Schema.is(WebmeshSchema.NetworkTopologyResponse)(packet)) {
99
+ if (packet.source === nodeName) {
100
+ const topologyRequestItem = topologyRequestsMap.get(packet.reqId);
101
+ topologyRequestItem.set(packet.nodeName, new Set(packet.edges));
102
+ }
103
+ else {
104
+ const remainingHops = packet.remainingHops;
105
+ // Forwarding the response to the original sender via the route back
106
+ const routeBack = remainingHops.at(-1) ?? shouldNeverHappen(`${nodeName}: Expected remaining hops for packet`, packet);
107
+ const edgeChannel = edgeChannels.get(routeBack)?.channel ??
108
+ shouldNeverHappen(`${nodeName}: Expected edge channel (${routeBack}) for packet`, packet, 'Available edges:', Array.from(edgeChannels.keys()));
109
+ yield* edgeChannel.send({ ...packet, remainingHops: packet.remainingHops.slice(0, -1) });
110
+ }
111
+ return;
112
+ }
113
+ // We have a direct edge to the target node
114
+ if (edgeChannels.has(packet.target)) {
115
+ const edgeChannel = edgeChannels.get(packet.target).channel;
52
116
  const hops = packet.source === nodeName ? [] : [...packet.hops, nodeName];
53
- yield* connectionChannel.send({ ...packet, hops });
117
+ yield* Effect.annotateCurrentSpan({ hasDirectEdge: true });
118
+ yield* edgeChannel.send({ ...packet, hops });
54
119
  }
55
120
  // In this case we have an expected route back we should follow
56
121
  // eslint-disable-next-line unicorn/no-negated-condition
57
122
  else if (packet.remainingHops !== undefined) {
58
- const hopTarget = packet.remainingHops[0] ?? shouldNeverHappen(`${nodeName}: Expected remaining hops for packet`, packet);
59
- const connectionChannel = connectionChannels.get(hopTarget)?.channel;
60
- if (connectionChannel === undefined) {
61
- yield* Effect.logWarning(`${nodeName}: Expected to find hop target ${hopTarget} in connections. Dropping packet.`, packet);
123
+ const hopTarget = packet.remainingHops.at(-1) ?? shouldNeverHappen(`${nodeName}: Expected remaining hops for packet`, packet);
124
+ const edgeChannel = edgeChannels.get(hopTarget)?.channel;
125
+ if (edgeChannel === undefined) {
126
+ yield* Effect.logWarning(`${nodeName}: Expected to find hop target ${hopTarget} in edges. Dropping packet.`, packet);
62
127
  return;
63
128
  }
64
- yield* connectionChannel.send({
129
+ yield* edgeChannel.send({
65
130
  ...packet,
66
- remainingHops: packet.remainingHops.slice(1),
131
+ remainingHops: packet.remainingHops.slice(0, -1),
67
132
  hops: [...packet.hops, nodeName],
68
133
  });
69
134
  }
70
- // No route found, forward to all connections
135
+ // No route found, forward to all edges
71
136
  else {
72
137
  const hops = packet.source === nodeName ? [] : [...packet.hops, nodeName];
73
- // Optimization: filter out connection where packet just came from
74
- const connectionsToForwardTo = Array.from(connectionChannels)
138
+ // Optimization: filter out edge where packet just came from
139
+ const edgesToForwardTo = Array.from(edgeChannels)
75
140
  .filter(([name]) => name !== packet.source)
76
- .map(([_, con]) => con.channel);
141
+ .map(([name, con]) => ({ name, channel: con.channel }));
77
142
  // TODO if hops-depth=0, we should fail right away with no route found
78
- if (hops.length === 0 && connectionsToForwardTo.length === 0 && LS_DEV) {
79
- console.log(nodeName, 'no route found', packet._tag, 'TODO handle better');
143
+ if (hops.length === 0 && edgesToForwardTo.length === 0 && LS_DEV) {
144
+ yield* Effect.logWarning(nodeName, 'no route found to', packet.target, packet._tag, 'TODO handle better');
80
145
  // TODO return a expected failure
81
146
  }
82
147
  const packetToSend = { ...packet, hops };
83
148
  // console.debug(nodeName, 'sendPacket:forwarding', packetToSend)
84
- yield* Effect.forEach(connectionsToForwardTo, (con) => con.send(packetToSend), { concurrency: 'unbounded' });
149
+ yield* Effect.annotateCurrentSpan({ edgesToForwardTo: edgesToForwardTo.map(({ name }) => name) });
150
+ yield* Effect.forEach(edgesToForwardTo, ({ channel }) => channel.send(packetToSend), {
151
+ concurrency: 'unbounded',
152
+ });
85
153
  }
86
154
  }).pipe(Effect.withSpan(`sendPacket:${packet._tag}:${packet.source}→${packet.target}`, {
87
155
  attributes: packetAsOtelAttributes(packet),
88
156
  }), Effect.orDie);
89
- const addConnection = ({ target: targetNodeName, connectionChannel, replaceIfExists = false, }) => Effect.gen(function* () {
90
- if (connectionChannels.has(targetNodeName)) {
157
+ const addEdge = ({ target: targetNodeName, edgeChannel, replaceIfExists = false }) => Effect.gen(function* () {
158
+ if (edgeChannels.has(targetNodeName)) {
91
159
  if (replaceIfExists) {
92
- yield* removeConnection(targetNodeName).pipe(Effect.orDie);
93
- // console.log('interrupting', targetNodeName)
94
- // yield* Fiber.interrupt(connectionChannels.get(targetNodeName)!.listenFiber)
160
+ yield* removeEdge(targetNodeName).pipe(Effect.orDie);
95
161
  }
96
162
  else {
97
- return yield* new ConnectionAlreadyExistsError({ target: targetNodeName });
163
+ return yield* new EdgeAlreadyExistsError({ target: targetNodeName });
98
164
  }
99
165
  }
100
- // TODO use a priority queue instead to prioritize network-changes/connection-requests over payloads
101
- const listenFiber = yield* connectionChannel.listen.pipe(Stream.flatten(), Stream.tap((message) => Effect.gen(function* () {
102
- const packet = yield* Schema.decodeUnknown(MeshSchema.Packet)(message);
103
- // console.debug(nodeName, 'received', packet._tag, packet.source, packet.target)
166
+ // TODO use a priority queue instead to prioritize network-changes/edge-requests over payloads
167
+ const listenFiber = yield* edgeChannel.listen.pipe(Stream.flatten(), Stream.tap((message) => Effect.gen(function* () {
168
+ const packet = yield* Schema.decodeUnknown(WebmeshSchema.Packet)(message);
169
+ // console.debug(nodeName, 'recv', packet._tag, packet.source, packet.target)
104
170
  if (handledPacketIds.has(packet.id))
105
171
  return;
106
172
  handledPacketIds.add(packet.id);
107
- if (packet._tag === 'NetworkConnectionAdded') {
108
- yield* sendPacket(packet);
109
- }
110
- else if (packet.target === nodeName) {
111
- const channelKey = `${packet.source}-${packet.channelName}`;
112
- if (!channelMap.has(channelKey)) {
113
- const queue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
114
- channelMap.set(channelKey, { queue, debugInfo: undefined });
173
+ switch (packet._tag) {
174
+ case 'NetworkEdgeAdded':
175
+ case 'NetworkTopologyRequest':
176
+ case 'NetworkTopologyResponse': {
177
+ yield* sendPacket(packet);
178
+ break;
115
179
  }
116
- const queue = channelMap.get(channelKey).queue;
117
- const respondToSender = (outgoingPacket) => connectionChannel
118
- .send(outgoingPacket)
119
- .pipe(Effect.withSpan(`respondToSender:${outgoingPacket._tag}:${outgoingPacket.source}→${outgoingPacket.target}`, { attributes: packetAsOtelAttributes(outgoingPacket) }), Effect.orDie);
120
- if (Schema.is(MeshSchema.ProxyChannelPacket)(packet)) {
121
- yield* Queue.offer(queue, { packet, respondToSender });
122
- }
123
- else if (Schema.is(MeshSchema.MessageChannelPacket)(packet)) {
124
- yield* Queue.offer(queue, { packet, respondToSender });
125
- }
126
- }
127
- else {
128
- if (Schema.is(MeshSchema.MessageChannelPacket)(packet)) {
129
- const noTransferableResponse = checkTransferableConnections(packet);
130
- if (noTransferableResponse !== undefined) {
131
- yield* Effect.spanEvent(`No transferable connections found for ${packet.source}→${packet.target}`);
132
- return yield* connectionChannel.send(noTransferableResponse).pipe(Effect.withSpan(`sendNoTransferableResponse:${packet.source}→${packet.target}`, {
133
- attributes: packetAsOtelAttributes(noTransferableResponse),
134
- }));
180
+ default: {
181
+ if (packet.target === nodeName) {
182
+ const channelKey = `target:${packet.source}, channelName:${packet.channelName}`;
183
+ if (!channelMap.has(channelKey)) {
184
+ const channelQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
185
+ channelMap.set(channelKey, { queue: channelQueue, debugInfo: undefined });
186
+ }
187
+ const channelQueue = channelMap.get(channelKey).queue;
188
+ const respondToSender = (outgoingPacket) => edgeChannel
189
+ .send(outgoingPacket)
190
+ .pipe(Effect.withSpan(`respondToSender:${outgoingPacket._tag}:${outgoingPacket.source}→${outgoingPacket.target}`, { attributes: packetAsOtelAttributes(outgoingPacket) }), Effect.orDie);
191
+ if (Schema.is(WebmeshSchema.ProxyChannelPacket)(packet)) {
192
+ yield* Queue.offer(channelQueue, { packet, respondToSender });
193
+ }
194
+ else if (Schema.is(WebmeshSchema.DirectChannelPacket)(packet)) {
195
+ yield* Queue.offer(channelQueue, { packet, respondToSender });
196
+ }
197
+ if (packet._tag === 'ProxyChannelRequest' || packet._tag === 'DirectChannelRequest') {
198
+ yield* Queue.offer(channelRequestsQueue, {
199
+ channelName: packet.channelName,
200
+ source: packet.source,
201
+ mode: packet._tag === 'ProxyChannelRequest' ? 'proxy' : 'direct',
202
+ });
203
+ }
204
+ }
205
+ else {
206
+ if (Schema.is(WebmeshSchema.DirectChannelPacket)(packet)) {
207
+ const noTransferableResponse = checkTransferableEdges(packet);
208
+ if (noTransferableResponse !== undefined) {
209
+ yield* Effect.spanEvent(`No transferable edges found for ${packet.source}→${packet.target}`);
210
+ return yield* edgeChannel.send(noTransferableResponse).pipe(Effect.withSpan(`sendNoTransferableResponse:${packet.source}→${packet.target}`, {
211
+ attributes: packetAsOtelAttributes(noTransferableResponse),
212
+ }));
213
+ }
214
+ }
215
+ yield* sendPacket(packet);
135
216
  }
136
217
  }
137
- yield* sendPacket(packet);
138
218
  }
139
- })), Stream.runDrain, Effect.orDie, Effect.tapCauseLogPretty, Effect.forkScoped);
140
- connectionChannels.set(targetNodeName, { channel: connectionChannel, listenFiber });
141
- const connectionAddedPacket = MeshSchema.NetworkConnectionAdded.make({
219
+ })), Stream.runDrain, Effect.interruptible, Effect.orDie, Effect.tapCauseLogPretty, Effect.forkScoped);
220
+ edgeChannels.set(targetNodeName, { channel: edgeChannel, listenFiber });
221
+ const edgeAddedPacket = WebmeshSchema.NetworkEdgeAdded.make({
142
222
  source: nodeName,
143
223
  target: targetNodeName,
144
224
  });
145
- yield* sendPacket(connectionAddedPacket).pipe(Effect.ignoreLogged);
146
- }).pipe(Effect.withSpan(`addConnection:${nodeName}→${targetNodeName}`, {
147
- attributes: { supportsTransferables: connectionChannel.supportsTransferables },
225
+ yield* sendPacket(edgeAddedPacket).pipe(Effect.orDie);
226
+ }).pipe(Effect.annotateLogs({ 'addEdge:target': targetNodeName, nodeName }), Effect.withSpan(`addEdge:${nodeName}→${targetNodeName}`, {
227
+ attributes: { supportsTransferables: edgeChannel.supportsTransferables },
148
228
  })); // any-cast needed for error/never overload
149
- const removeConnection = (targetNodeName) => Effect.gen(function* () {
150
- if (!connectionChannels.has(targetNodeName)) {
151
- yield* new Cause.NoSuchElementException(`No connection found for ${targetNodeName}`);
229
+ const removeEdge = (targetNodeName) => Effect.gen(function* () {
230
+ if (!edgeChannels.has(targetNodeName)) {
231
+ yield* new Cause.NoSuchElementException(`No edge found for ${targetNodeName}`);
152
232
  }
153
- yield* Fiber.interrupt(connectionChannels.get(targetNodeName).listenFiber);
154
- connectionChannels.delete(targetNodeName);
233
+ yield* Fiber.interrupt(edgeChannels.get(targetNodeName).listenFiber);
234
+ edgeChannels.delete(targetNodeName);
155
235
  });
156
- // TODO add heartbeat to detect dead connections (for both e2e and proxying)
236
+ const hasChannel = ({ target, channelName }) => Effect.sync(() => channelMap.has(`target:${target}, channelName:${channelName}`));
237
+ // TODO add heartbeat to detect dead edges (for both e2e and proxying)
157
238
  // TODO when a channel is established in the same origin, we can use a weblock to detect disconnects
158
239
  const makeChannel = ({ target, channelName, schema: inputSchema,
159
- // TODO in the future we could have a mode that prefers messagechannels and then falls back to proxies if needed
160
- mode, timeout = Duration.seconds(1), }) => Effect.gen(function* () {
240
+ // TODO in the future we could have a mode that prefers directs and then falls back to proxies if needed
241
+ mode, timeout = Duration.seconds(1), closeExisting = false, }) => Effect.gen(function* () {
161
242
  const schema = WebChannel.mapSchema(inputSchema);
162
- const channelKey = `${target}-${channelName}`;
163
- if (!channelMap.has(channelKey)) {
164
- const queue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
165
- channelMap.set(channelKey, { queue, debugInfo: undefined });
243
+ const channelKey = `target:${target}, channelName:${channelName}`;
244
+ if (channelMap.has(channelKey)) {
245
+ const existingChannel = channelMap.get(channelKey).debugInfo?.channel;
246
+ if (existingChannel) {
247
+ if (closeExisting) {
248
+ yield* existingChannel.shutdown;
249
+ channelMap.delete(channelKey);
250
+ }
251
+ else {
252
+ shouldNeverHappen(`Channel ${channelKey} already exists`, existingChannel);
253
+ }
254
+ }
255
+ }
256
+ if (channelMap.has(channelKey) === false) {
257
+ const channelQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
258
+ channelMap.set(channelKey, { queue: channelQueue, debugInfo: undefined });
166
259
  }
167
- const queue = channelMap.get(channelKey).queue;
260
+ const channelQueue = channelMap.get(channelKey).queue;
168
261
  yield* Effect.addFinalizer(() => Effect.sync(() => channelMap.delete(channelKey)));
169
- if (mode === 'messagechannel') {
170
- // console.debug(nodeName, 'message mode', modeRef.current)
262
+ if (mode === 'direct') {
263
+ const incomingPacketsQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
264
+ // We're we're draining the queue into another new queue.
265
+ // It's a bit of a mystery why this is needed, since the unit tests also work without it.
266
+ // But for the LiveStore devtools to actually work, we need to do this.
267
+ // We should figure out some day why this is needed and further simplify if possible.
268
+ yield* Queue.takeBetween(channelQueue, 1, 10).pipe(Effect.tap((_) => Queue.offerAll(incomingPacketsQueue, _)), Effect.forever, Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
171
269
  // NOTE already retries internally when transferables are required
172
- const channel = yield* makeMessageChannel({
270
+ const { webChannel, initialEdgeDeferred } = yield* makeDirectChannel({
173
271
  nodeName,
174
- queue,
175
- newConnectionAvailablePubSub,
272
+ incomingPacketsQueue,
273
+ newEdgeAvailablePubSub,
176
274
  target,
177
275
  channelName,
178
276
  schema,
179
277
  sendPacket,
180
- checkTransferableConnections,
278
+ checkTransferableEdges,
181
279
  });
182
- channelMap.set(channelKey, { queue, debugInfo: { channel, target } });
183
- return channel;
280
+ channelMap.set(channelKey, { queue: channelQueue, debugInfo: { channel: webChannel, target } });
281
+ yield* initialEdgeDeferred;
282
+ return webChannel;
184
283
  }
185
284
  else {
186
285
  const channel = yield* makeProxyChannel({
187
286
  nodeName,
188
- newConnectionAvailablePubSub,
287
+ newEdgeAvailablePubSub,
189
288
  target,
190
289
  channelName,
191
290
  schema,
192
- queue,
291
+ queue: channelQueue,
193
292
  sendPacket,
194
293
  });
195
- channelMap.set(channelKey, { queue, debugInfo: { channel, target } });
294
+ channelMap.set(channelKey, { queue: channelQueue, debugInfo: { channel, target } });
196
295
  return channel;
197
296
  }
198
- }).pipe(Effect.withSpanScoped(`makeChannel:${nodeName}→${target}(${channelName})`, {
297
+ }).pipe(
298
+ // Effect.timeout(timeout),
299
+ Effect.withSpanScoped(`makeChannel:${nodeName}→${target}(${channelName})`, {
199
300
  attributes: { target, channelName, mode, timeout },
200
- }), Effect.annotateLogs({ nodeName }));
201
- const connectionKeys = Effect.sync(() => new Set(connectionChannels.keys()));
301
+ }), Effect.annotateLogs({ nodeName, target, channelName }));
302
+ // TODO consider supporting multiple listeners
303
+ // TODO also provide a way to allow for reconnects
304
+ let listenAlreadyStarted = false;
305
+ const listenForChannel = Stream.suspend(() => {
306
+ if (listenAlreadyStarted) {
307
+ return shouldNeverHappen('listenForChannel already started');
308
+ }
309
+ listenAlreadyStarted = true;
310
+ const hash = (res) => `${res.channelName}:${res.source}:${res.mode}`;
311
+ const seen = new Set();
312
+ return Stream.fromQueue(channelRequestsQueue).pipe(Stream.filter((res) => {
313
+ const hashed = hash(res);
314
+ if (seen.has(hashed)) {
315
+ return false;
316
+ }
317
+ seen.add(hashed);
318
+ return true;
319
+ }));
320
+ });
321
+ const makeBroadcastChannel = ({ channelName, schema }) => Effect.scopeWithCloseable((scope) => Effect.gen(function* () {
322
+ if (broadcastChannelListenQueueMap.has(channelName)) {
323
+ return shouldNeverHappen(`Broadcast channel ${channelName} already exists`, broadcastChannelListenQueueMap.get(channelName));
324
+ }
325
+ const debugInfo = {};
326
+ const queue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
327
+ broadcastChannelListenQueueMap.set(channelName, queue);
328
+ const send = (message) => Effect.gen(function* () {
329
+ const payload = yield* Schema.encode(schema)(message);
330
+ const packet = WebmeshSchema.BroadcastChannelPacket.make({
331
+ channelName,
332
+ payload,
333
+ source: nodeName,
334
+ target: '-',
335
+ hops: [],
336
+ });
337
+ yield* sendPacket(packet);
338
+ });
339
+ const listen = Stream.fromQueue(queue).pipe(Stream.filter(Schema.is(WebmeshSchema.BroadcastChannelPacket)), Stream.map((_) => Schema.decodeEither(schema)(_.payload)));
340
+ const closedDeferred = yield* Deferred.make().pipe(Effect.acquireRelease(Deferred.done(Exit.void)));
341
+ return {
342
+ [WebChannel.WebChannelSymbol]: WebChannel.WebChannelSymbol,
343
+ send,
344
+ listen,
345
+ closedDeferred,
346
+ supportsTransferables: false,
347
+ schema: { listen: schema, send: schema },
348
+ shutdown: Scope.close(scope, Exit.void),
349
+ debugInfo,
350
+ };
351
+ }));
352
+ const edgeKeys = Effect.sync(() => new Set(edgeChannels.keys()));
353
+ const runtime = yield* Effect.runtime();
202
354
  const debug = {
203
355
  print: () => {
204
- console.log('Connections:', connectionChannels.size);
205
- for (const [key, value] of connectionChannels) {
356
+ console.log('Webmesh debug info for node:', nodeName);
357
+ console.log('Edges:', edgeChannels.size);
358
+ for (const [key, value] of edgeChannels) {
206
359
  console.log(` ${key}: supportsTransferables=${value.channel.supportsTransferables}`);
207
360
  }
208
361
  console.log('Channels:', channelMap.size);
209
362
  for (const [key, value] of channelMap) {
210
- console.log(` ${key}: \n`, ` Queue: ${value.queue.unsafeSize().pipe(Option.getOrUndefined)}`, value.queue, '\n', ` Channel: target=${value.debugInfo?.target} supportsTransferables=${value.debugInfo?.channel.supportsTransferables}`, value.debugInfo?.channel);
363
+ console.log(indent(key, 2), '\n', Object.entries({
364
+ target: value.debugInfo?.target,
365
+ supportsTransferables: value.debugInfo?.channel.supportsTransferables,
366
+ ...value.debugInfo?.channel.debugInfo,
367
+ })
368
+ .map(([key, value]) => indent(`${key}=${value}`, 4))
369
+ .join('\n'), ' ', value.debugInfo?.channel, '\n', indent(`Queue: ${value.queue.unsafeSize().pipe(Option.getOrUndefined)}`, 4), value.queue);
211
370
  }
371
+ console.log('Broadcast channels:', broadcastChannelListenQueueMap.size);
372
+ for (const [key, _value] of broadcastChannelListenQueueMap) {
373
+ console.log(indent(key, 2));
374
+ }
375
+ },
376
+ ping: (payload) => {
377
+ Effect.gen(function* () {
378
+ const msg = (via) => WebChannel.DebugPingMessage.make({ message: `ping from ${nodeName} via ${via}`, payload });
379
+ for (const [channelName, con] of edgeChannels) {
380
+ yield* Effect.logDebug(`sending ping via edge ${channelName}`);
381
+ yield* con.channel.send(msg(`edge ${channelName}`));
382
+ }
383
+ for (const [channelKey, channel] of channelMap) {
384
+ if (channel.debugInfo === undefined) {
385
+ yield* Effect.logDebug(`channel ${channelKey} has no debug info`);
386
+ continue;
387
+ }
388
+ // if (channel.debugInfo === undefined) continue
389
+ yield* Effect.logDebug(`sending ping via channel ${channelKey}`);
390
+ yield* channel.debugInfo.channel.send(msg(`channel ${channelKey}`));
391
+ }
392
+ }).pipe(Effect.provide(runtime), Effect.tapCauseLogPretty, Effect.runFork);
212
393
  },
394
+ requestTopology: (timeoutMs = 1000) => Effect.gen(function* () {
395
+ const packet = WebmeshSchema.NetworkTopologyRequest.make({
396
+ source: nodeName,
397
+ target: '-',
398
+ hops: [],
399
+ });
400
+ const item = new Map();
401
+ item.set(nodeName, new Set(edgeChannels.keys()));
402
+ topologyRequestsMap.set(packet.id, item);
403
+ yield* sendPacket(packet);
404
+ yield* Effect.logDebug(`Waiting ${timeoutMs}ms for topology response`);
405
+ yield* Effect.sleep(timeoutMs);
406
+ yield* Effect.logDebug(`Topology response (from ${nodeName}):`);
407
+ for (const [key, value] of item) {
408
+ yield* Effect.logDebug(` node '${key}' has edge to: ${Array.from(value.values()).join(', ')}`);
409
+ }
410
+ }).pipe(Effect.provide(runtime), Effect.tapCauseLogPretty, Effect.runPromise),
411
+ };
412
+ return {
413
+ nodeName,
414
+ addEdge,
415
+ removeEdge,
416
+ hasChannel,
417
+ makeChannel,
418
+ listenForChannel,
419
+ makeBroadcastChannel,
420
+ edgeKeys,
421
+ debug,
213
422
  };
214
- return { nodeName, addConnection, removeConnection, makeChannel, connectionKeys, debug };
215
- }).pipe(Effect.withSpan(`makeMeshNode:${nodeName}`));
423
+ }).pipe(Effect.withSpan(`makeMeshNode:${nodeName}`), Effect.annotateLogs({ 'makeMeshNode.nodeName': nodeName }));
216
424
  //# sourceMappingURL=node.js.map
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ import '@livestore/utils-dev/node-vitest-polyfill';
2
2
  //# sourceMappingURL=node.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.test.d.ts","sourceRoot":"","sources":["../src/node.test.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"node.test.d.ts","sourceRoot":"","sources":["../src/node.test.ts"],"names":[],"mappings":"AAAA,OAAO,2CAA2C,CAAA"}