@livestore/webmesh 0.3.0-dev.36 → 0.3.0-dev.38

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 (46) hide show
  1. package/README.md +19 -3
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/channel/{message-channel-internal.d.ts → direct-channel-internal.d.ts} +7 -7
  4. package/dist/channel/direct-channel-internal.d.ts.map +1 -0
  5. package/dist/channel/{message-channel-internal.js → direct-channel-internal.js} +22 -22
  6. package/dist/channel/direct-channel-internal.js.map +1 -0
  7. package/dist/channel/{message-channel.d.ts → direct-channel.d.ts} +3 -3
  8. package/dist/channel/direct-channel.d.ts.map +1 -0
  9. package/dist/channel/{message-channel.js → direct-channel.js} +17 -17
  10. package/dist/channel/direct-channel.js.map +1 -0
  11. package/dist/channel/proxy-channel.d.ts.map +1 -1
  12. package/dist/channel/proxy-channel.js +84 -21
  13. package/dist/channel/proxy-channel.js.map +1 -1
  14. package/dist/common.d.ts +11 -5
  15. package/dist/common.d.ts.map +1 -1
  16. package/dist/common.js +6 -1
  17. package/dist/common.js.map +1 -1
  18. package/dist/mesh-schema.d.ts +15 -15
  19. package/dist/mesh-schema.d.ts.map +1 -1
  20. package/dist/mesh-schema.js +9 -9
  21. package/dist/mesh-schema.js.map +1 -1
  22. package/dist/node.d.ts +10 -5
  23. package/dist/node.d.ts.map +1 -1
  24. package/dist/node.js +68 -30
  25. package/dist/node.js.map +1 -1
  26. package/dist/node.test.js +114 -17
  27. package/dist/node.test.js.map +1 -1
  28. package/dist/websocket-edge.d.ts +2 -1
  29. package/dist/websocket-edge.d.ts.map +1 -1
  30. package/dist/websocket-edge.js +6 -2
  31. package/dist/websocket-edge.js.map +1 -1
  32. package/package.json +8 -4
  33. package/src/channel/{message-channel-internal.ts → direct-channel-internal.ts} +29 -29
  34. package/src/channel/{message-channel.ts → direct-channel.ts} +20 -20
  35. package/src/channel/proxy-channel.ts +107 -25
  36. package/src/common.ts +12 -4
  37. package/src/mesh-schema.ts +16 -19
  38. package/src/node.test.ts +185 -17
  39. package/src/node.ts +97 -35
  40. package/src/websocket-edge.ts +7 -1
  41. package/dist/channel/message-channel-internal.d.ts.map +0 -1
  42. package/dist/channel/message-channel-internal.js.map +0 -1
  43. package/dist/channel/message-channel.d.ts.map +0 -1
  44. package/dist/channel/message-channel.js.map +0 -1
  45. package/tmp/pack.tgz +0 -0
  46. package/tsconfig.json +0 -11
@@ -2,25 +2,25 @@ import type { PubSub } from '@livestore/utils/effect';
2
2
  import { Effect, Queue, Scope, WebChannel } from '@livestore/utils/effect';
3
3
  import { type ChannelName, type MeshNodeName, type MessageQueueItem } from '../common.js';
4
4
  import * as MeshSchema from '../mesh-schema.js';
5
- export interface MakeMessageChannelArgs {
5
+ export interface MakeDirectChannelArgs {
6
6
  nodeName: MeshNodeName;
7
7
  /** Queue of incoming messages for this channel */
8
8
  incomingPacketsQueue: Queue.Queue<MessageQueueItem>;
9
9
  newEdgeAvailablePubSub: PubSub.PubSub<MeshNodeName>;
10
10
  channelName: ChannelName;
11
11
  target: MeshNodeName;
12
- sendPacket: (packet: typeof MeshSchema.MessageChannelPacket.Type) => Effect.Effect<void>;
13
- checkTransferableEdges: (packet: typeof MeshSchema.MessageChannelPacket.Type) => typeof MeshSchema.MessageChannelResponseNoTransferables.Type | undefined;
12
+ sendPacket: (packet: typeof MeshSchema.DirectChannelPacket.Type) => Effect.Effect<void>;
13
+ checkTransferableEdges: (packet: typeof MeshSchema.DirectChannelPacket.Type) => typeof MeshSchema.DirectChannelResponseNoTransferables.Type | undefined;
14
14
  schema: WebChannel.OutputSchema<any, any, any, any>;
15
15
  }
16
16
  /**
17
17
  * The channel version is important here, as a channel will only be established once both sides have the same version.
18
18
  * The version is used to avoid concurrency issues where both sides have different incompatible message ports.
19
19
  */
20
- export declare const makeMessageChannelInternal: ({ nodeName, incomingPacketsQueue, target, checkTransferableEdges, channelName, schema: schema_, sendPacket, channelVersion, scope, sourceId, }: MakeMessageChannelArgs & {
20
+ export declare const makeDirectChannelInternal: ({ nodeName, incomingPacketsQueue, target, checkTransferableEdges, channelName, schema: schema_, sendPacket, channelVersion, scope, sourceId, }: MakeDirectChannelArgs & {
21
21
  channelVersion: number;
22
- /** We're passing in the closeable scope from the wrapping message channel */
22
+ /** We're passing in the closeable scope from the wrapping direct channel */
23
23
  scope: Scope.CloseableScope;
24
24
  sourceId: string;
25
- }) => Effect.Effect<WebChannel.WebChannel<any, any>, typeof MeshSchema.MessageChannelResponseNoTransferables.Type, Scope.Scope>;
26
- //# sourceMappingURL=message-channel-internal.d.ts.map
25
+ }) => Effect.Effect<WebChannel.WebChannel<any, any>, typeof MeshSchema.DirectChannelResponseNoTransferables.Type, Scope.Scope>;
26
+ //# sourceMappingURL=direct-channel-internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-channel-internal.d.ts","sourceRoot":"","sources":["../../src/channel/direct-channel-internal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAEL,MAAM,EAIN,KAAK,EAEL,KAAK,EAEL,UAAU,EACX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAA0B,MAAM,cAAc,CAAA;AACjH,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAE/C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,CAAA;IACtB,kDAAkD;IAClD,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnD,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACnD,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvF,sBAAsB,EAAE,CACtB,MAAM,EAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC,IAAI,KAC/C,OAAO,UAAU,CAAC,oCAAoC,CAAC,IAAI,GAAG,SAAS,CAAA;IAC5E,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CACpD;AAOD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GAAI,gJAWvC,qBAAqB,GAAG;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,KAAK,EAAE,KAAK,CAAC,cAAc,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,MAAM,CAAC,MAAM,CACf,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAC/B,OAAO,UAAU,CAAC,oCAAoC,CAAC,IAAI,EAC3D,KAAK,CAAC,KAAK,CAuS0D,CAAA"}
@@ -7,7 +7,7 @@ const makeDeferredResult = (Deferred.make);
7
7
  * The channel version is important here, as a channel will only be established once both sides have the same version.
8
8
  * The version is used to avoid concurrency issues where both sides have different incompatible message ports.
9
9
  */
10
- export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, target, checkTransferableEdges, channelName, schema: schema_, sendPacket, channelVersion, scope, sourceId, }) => Effect.gen(function* () {
10
+ export const makeDirectChannelInternal = ({ nodeName, incomingPacketsQueue, target, checkTransferableEdges, channelName, schema: schema_, sendPacket, channelVersion, scope, sourceId, }) => Effect.gen(function* () {
11
11
  // yield* Effect.addFinalizer((exit) =>
12
12
  // Effect.spanEvent(`shutdown:${exit._tag === 'Success' ? 'Success' : Cause.pretty(exit.cause)}`),
13
13
  // )
@@ -17,8 +17,8 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
17
17
  // addEvent: (...msg: any[]) => console.log(`${nodeName}→${channelName}→${target}[${channelVersion}]`, ...msg),
18
18
  // }
19
19
  const schema = {
20
- send: Schema.Union(schema_.send, MeshSchema.MessageChannelPing, MeshSchema.MessageChannelPong),
21
- listen: Schema.Union(schema_.listen, MeshSchema.MessageChannelPing, MeshSchema.MessageChannelPong),
20
+ send: Schema.Union(schema_.send, MeshSchema.DirectChannelPing, MeshSchema.DirectChannelPong),
21
+ listen: Schema.Union(schema_.listen, MeshSchema.DirectChannelPing, MeshSchema.DirectChannelPong),
22
22
  };
23
23
  const channelStateRef = {
24
24
  current: { _tag: 'Initial' },
@@ -38,7 +38,7 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
38
38
  // )
39
39
  if (channelState._tag === 'Initial')
40
40
  return shouldNeverHappen();
41
- if (packet._tag === 'MessageChannelResponseNoTransferables') {
41
+ if (packet._tag === 'DirectChannelResponseNoTransferables') {
42
42
  yield* Deferred.fail(deferred, packet);
43
43
  return 'close';
44
44
  }
@@ -53,7 +53,7 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
53
53
  // If this channel has a higher version, we need to signal the other side to close
54
54
  // and recreate the channel with the new version
55
55
  if (packet.channelVersion < channelVersion) {
56
- const newPacket = MeshSchema.MessageChannelRequest.make({
56
+ const newPacket = MeshSchema.DirectChannelRequest.make({
57
57
  source: nodeName,
58
58
  sourceId,
59
59
  target,
@@ -67,7 +67,7 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
67
67
  yield* sendPacket(newPacket);
68
68
  return;
69
69
  }
70
- if (channelState._tag === 'Established' && packet._tag === 'MessageChannelRequest') {
70
+ if (channelState._tag === 'Established' && packet._tag === 'DirectChannelRequest') {
71
71
  if (packet.sourceId === channelState.otherSourceId) {
72
72
  return;
73
73
  }
@@ -81,7 +81,7 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
81
81
  }
82
82
  switch (packet._tag) {
83
83
  // Assumption: Each side has sent an initial request and another request as a response for an incoming request
84
- case 'MessageChannelRequest': {
84
+ case 'DirectChannelRequest': {
85
85
  if (channelState._tag !== 'RequestSent') {
86
86
  // We can safely ignore further incoming requests as we're already creating a channel
87
87
  return;
@@ -90,7 +90,7 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
90
90
  // Circuit-breaker: We've already sent a request so we don't need to send another one
91
91
  }
92
92
  else {
93
- const newRequestPacket = MeshSchema.MessageChannelRequest.make({
93
+ const newRequestPacket = MeshSchema.DirectChannelRequest.make({
94
94
  source: nodeName,
95
95
  sourceId,
96
96
  target,
@@ -105,9 +105,9 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
105
105
  }
106
106
  const isWinner = nodeName > target;
107
107
  if (isWinner) {
108
- span?.addEvent(`winner side: creating message channel and sending response`);
108
+ span?.addEvent(`winner side: creating direct channel and sending response`);
109
109
  const mc = new MessageChannel();
110
- // We're using a message channel with acks here to make sure messages are not lost
110
+ // We're using a direct channel with acks here to make sure messages are not lost
111
111
  // which might happen during re-edge scenarios.
112
112
  // Also we need to eagerly start listening since we're using the channel "ourselves"
113
113
  // for the initial ping-pong sequence.
@@ -116,7 +116,7 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
116
116
  schema,
117
117
  debugId: channelVersion,
118
118
  }).pipe(Effect.andThen(WebChannel.toOpenChannel));
119
- yield* respondToSender(MeshSchema.MessageChannelResponseSuccess.make({
119
+ yield* respondToSender(MeshSchema.DirectChannelResponseSuccess.make({
120
120
  reqId: packet.id,
121
121
  target,
122
122
  source: nodeName,
@@ -129,38 +129,38 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
129
129
  channelStateRef.current = { _tag: 'winner:ResponseSent', channel, otherSourceId: packet.sourceId };
130
130
  // span?.addEvent(`winner side: waiting for ping`)
131
131
  // Now we wait for the other side to respond via the channel
132
- yield* channel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(MeshSchema.MessageChannelPing)), Stream.take(1), Stream.runDrain);
132
+ yield* channel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(MeshSchema.DirectChannelPing)), Stream.take(1), Stream.runDrain);
133
133
  // span?.addEvent(`winner side: sending pong`)
134
- yield* channel.send(MeshSchema.MessageChannelPong.make({}));
134
+ yield* channel.send(MeshSchema.DirectChannelPong.make({}));
135
135
  span?.addEvent(`winner side: established`);
136
136
  channelStateRef.current = { _tag: 'Established', otherSourceId: packet.sourceId };
137
137
  yield* Deferred.succeed(deferred, channel);
138
138
  }
139
139
  else {
140
140
  span?.addEvent(`loser side: waiting for response`);
141
- // Wait for `MessageChannelResponseSuccess` packet
141
+ // Wait for `DirectChannelResponseSuccess` packet
142
142
  channelStateRef.current = { _tag: 'loser:WaitingForResponse', otherSourceId: packet.sourceId };
143
143
  }
144
144
  break;
145
145
  }
146
- case 'MessageChannelResponseSuccess': {
146
+ case 'DirectChannelResponseSuccess': {
147
147
  if (channelState._tag !== 'loser:WaitingForResponse') {
148
- return shouldNeverHappen(`Expected to find message channel response from ${target}, but was in ${channelState._tag} state`);
148
+ return shouldNeverHappen(`Expected to find direct channel response from ${target}, but was in ${channelState._tag} state`);
149
149
  }
150
- // See message-channel notes above
150
+ // See direct-channel notes above
151
151
  const channel = yield* WebChannel.messagePortChannelWithAck({
152
152
  port: packet.port,
153
153
  schema,
154
154
  debugId: channelVersion,
155
155
  }).pipe(Effect.andThen(WebChannel.toOpenChannel));
156
- const waitForPongFiber = yield* channel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(MeshSchema.MessageChannelPong)), Stream.take(1), Stream.runDrain, Effect.fork);
156
+ const waitForPongFiber = yield* channel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(MeshSchema.DirectChannelPong)), Stream.take(1), Stream.runDrain, Effect.fork);
157
157
  // span?.addEvent(`loser side: sending ping`)
158
158
  // There seems to be some scenario where the initial ping message is lost.
159
159
  // As a workaround until we find the root cause, we're retrying the ping a few times.
160
160
  // TODO write a test that reproduces this issue and fix the root cause ()
161
161
  // https://github.com/livestorejs/livestore/issues/262
162
162
  yield* channel
163
- .send(MeshSchema.MessageChannelPing.make({}))
163
+ .send(MeshSchema.DirectChannelPing.make({}))
164
164
  .pipe(Effect.timeout(10), Effect.retry({ times: 2 }));
165
165
  // span?.addEvent(`loser side: waiting for pong`)
166
166
  yield* waitForPongFiber;
@@ -191,7 +191,7 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
191
191
  return shouldNeverHappen(`Expected channel to be in Initial state, but was in ${channelState._tag} state`);
192
192
  }
193
193
  const edgeRequest = Effect.gen(function* () {
194
- const packet = MeshSchema.MessageChannelRequest.make({
194
+ const packet = MeshSchema.DirectChannelRequest.make({
195
195
  source: nodeName,
196
196
  sourceId,
197
197
  target,
@@ -213,5 +213,5 @@ export const makeMessageChannelInternal = ({ nodeName, incomingPacketsQueue, tar
213
213
  yield* edgeRequest;
214
214
  const channel = yield* deferred;
215
215
  return channel;
216
- }).pipe(Effect.withSpanScoped(`makeMessageChannel:${channelVersion}`));
217
- //# sourceMappingURL=message-channel-internal.js.map
216
+ }).pipe(Effect.withSpanScoped(`makeDirectChannel:${channelVersion}`));
217
+ //# sourceMappingURL=direct-channel-internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-channel-internal.js","sourceRoot":"","sources":["../../src/channel/direct-channel-internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAElE,OAAO,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,GACX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAA8D,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACjH,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAgB/C,MAAM,kBAAkB,GAAG,CAAA,QAAQ,CAAC,IAGnC,CAAA,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACxC,QAAQ,EACR,oBAAoB,EACpB,MAAM,EACN,sBAAsB,EACtB,WAAW,EACX,MAAM,EAAE,OAAO,EACf,UAAU,EACV,cAAc,EACd,KAAK,EACL,QAAQ,GAMT,EAIC,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,uCAAuC;IACvC,oGAAoG;IACpG,IAAI;IAwBJ,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,kBAAkB,EAAE,CAAA;IAE5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACrG,iBAAiB;IACjB,iHAAiH;IACjH,IAAI;IAEJ,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,CAAC;QAC5F,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,CAAC;KACjG,CAAA;IAED,MAAM,eAAe,GAA8B;QACjD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC7B,CAAA;IAED,MAAM,oBAAoB,GAAG,CAAC,EAAE,MAAM,EAAE,eAAe,EAAoB,EAAE,EAAE,CAC7E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAA;QAE5C,IAAI,EAAE,QAAQ,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,EAAE;YACvC,YAAY,EAAE,YAAY,CAAC,IAAI;YAC/B,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,WAAW,EAAE,MAAM,CAAC,KAAK;YACzB,oBAAoB,EAAE,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;SAC1G,CAAC,CAAA;QAEF,mBAAmB;QACnB,uGAAuG;QACvG,qBAAqB;QACrB,4JAA4J;QAC5J,IAAI;QAEJ,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,iBAAiB,EAAE,CAAA;QAE/D,IAAI,MAAM,CAAC,IAAI,KAAK,sCAAsC,EAAE,CAAC;YAC3D,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YACtC,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,4EAA4E;QAC5E,mCAAmC;QACnC,IAAI,MAAM,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC;YAC3C,IAAI,EAAE,QAAQ,CAAC,uCAAuC,MAAM,CAAC,cAAc,oBAAoB,CAAC,CAAA;YAChG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAA;YAClE,gGAAgG;YAChG,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,kFAAkF;QAClF,gDAAgD;QAChD,IAAI,MAAM,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBACrD,MAAM,EAAE,QAAQ;gBAChB,QAAQ;gBACR,MAAM;gBACN,WAAW;gBACX,cAAc;gBACd,IAAI,EAAE,EAAE;gBACR,aAAa,EAAE,MAAM,CAAC,IAAI;gBAC1B,KAAK,EAAE,SAAS;aACjB,CAAC,CAAA;YACF,IAAI,EAAE,QAAQ,CACZ,sCAAsC,MAAM,CAAC,cAAc,oCAAoC,SAAS,CAAC,EAAE,GAAG,CAC/G,CAAA;YAED,KAAK,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;YAE5B,OAAM;QACR,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAClF,IAAI,MAAM,CAAC,QAAQ,KAAK,YAAY,CAAC,aAAa,EAAE,CAAC;gBACnD,OAAM;YACR,CAAC;iBAAM,CAAC;gBACN,+EAA+E;gBAC/E,mCAAmC;gBACnC,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;gBACnC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAA;gBAC5D,OAAO,OAAO,CAAA;YAChB,CAAC;QACH,CAAC;QAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,8GAA8G;YAC9G,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,IAAI,YAAY,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACxC,qFAAqF;oBACrF,OAAM;gBACR,CAAC;gBAED,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;oBAC9C,qFAAqF;gBACvF,CAAC;qBAAM,CAAC;oBACN,MAAM,gBAAgB,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC;wBAC5D,MAAM,EAAE,QAAQ;wBAChB,QAAQ;wBACR,MAAM;wBACN,WAAW;wBACX,cAAc;wBACd,IAAI,EAAE,EAAE;wBACR,aAAa,EAAE,MAAM,CAAC,IAAI;wBAC1B,KAAK,EAAE,MAAM,CAAC,EAAE;qBACjB,CAAC,CAAA;oBACF,IAAI,EAAE,QAAQ,CAAC,2BAA2B,gBAAgB,CAAC,EAAE,2BAA2B,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;oBAErG,KAAK,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;gBACrC,CAAC;gBAED,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;gBAElC,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,EAAE,QAAQ,CAAC,2DAA2D,CAAC,CAAA;oBAC3E,MAAM,EAAE,GAAG,IAAI,cAAc,EAAE,CAAA;oBAE/B,iFAAiF;oBACjF,+CAA+C;oBAC/C,oFAAoF;oBACpF,sCAAsC;oBACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,yBAAyB,CAAC;wBAC1D,IAAI,EAAE,EAAE,CAAC,KAAK;wBACd,MAAM;wBACN,OAAO,EAAE,cAAc;qBACxB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAA;oBAEjD,KAAK,CAAC,CAAC,eAAe,CACpB,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC;wBAC3C,KAAK,EAAE,MAAM,CAAC,EAAE;wBAChB,MAAM;wBACN,MAAM,EAAE,QAAQ;wBAChB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,IAAI,EAAE,EAAE;wBACR,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACvC,IAAI,EAAE,EAAE,CAAC,KAAK;wBACd,cAAc;qBACf,CAAC,CACH,CAAA;oBAED,eAAe,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;oBAElG,kDAAkD;oBAElD,4DAA4D;oBAC5D,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACxB,MAAM,CAAC,OAAO,EAAE,EAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,EACtD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EACd,MAAM,CAAC,QAAQ,CAChB,CAAA;oBAED,8CAA8C;oBAE9C,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;oBAE1D,IAAI,EAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAA;oBAC1C,eAAe,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;oBAEjF,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAC5C,CAAC;qBAAM,CAAC;oBACN,IAAI,EAAE,QAAQ,CAAC,kCAAkC,CAAC,CAAA;oBAClD,iDAAiD;oBACjD,eAAe,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;gBAChG,CAAC;gBAED,MAAK;YACP,CAAC;YACD,KAAK,8BAA8B,CAAC,CAAC,CAAC;gBACpC,IAAI,YAAY,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;oBACrD,OAAO,iBAAiB,CACtB,iDAAiD,MAAM,gBAAgB,YAAY,CAAC,IAAI,QAAQ,CACjG,CAAA;gBACH,CAAC;gBAED,iCAAiC;gBACjC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,yBAAyB,CAAC;oBAC1D,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM;oBACN,OAAO,EAAE,cAAc;iBACxB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAA;gBAEjD,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACjD,MAAM,CAAC,OAAO,EAAE,EAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,EACtD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EACd,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,IAAI,CACZ,CAAA;gBAED,6CAA6C;gBAE7C,0EAA0E;gBAC1E,qFAAqF;gBACrF,yEAAyE;gBACzE,sDAAsD;gBACtD,KAAK,CAAC,CAAC,OAAO;qBACX,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAEvD,iDAAiD;gBAEjD,KAAK,CAAC,CAAC,gBAAgB,CAAA;gBAEvB,IAAI,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAA;gBACzC,eAAe,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,CAAC,aAAa,EAAE,CAAA;gBAE5F,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAE1C,OAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,YAAY,CAAC,MAAM,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,uBAAuB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;QACtF,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC;KAC3C,CAAC,CACH,CAAA;IAEH,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YACtD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;YAC/C,0DAA0D;YAC1D,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAE1E,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAA;IAE5C,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,iBAAiB,CAAC,uDAAuD,YAAY,CAAC,IAAI,QAAQ,CAAC,CAAA;IAC5G,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAClD,MAAM,EAAE,QAAQ;YAChB,QAAQ;YACR,MAAM;YACN,WAAW;YACX,cAAc;YACd,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;QAEF,eAAe,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,CAAA;QAEzE,4FAA4F;QAE5F,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;QAC7D,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;YACzC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,mCAAmC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAC5F,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACnD,CAAC;QAED,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACzB,IAAI,EAAE,QAAQ,CAAC,8BAA8B,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,KAAK,CAAC,CAAC,WAAW,CAAA;IAElB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAA;IAE/B,OAAO,OAAO,CAAA;AAChB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,qBAAqB,cAAc,EAAE,CAAC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Deferred, Effect, Scope, WebChannel } from '@livestore/utils/effect';
2
- import type { MakeMessageChannelArgs } from './message-channel-internal.js';
2
+ import type { MakeDirectChannelArgs } from './direct-channel-internal.js';
3
3
  /**
4
4
  * Behaviour:
5
5
  * - Waits until there is an initial edge
@@ -15,8 +15,8 @@ import type { MakeMessageChannelArgs } from './message-channel-internal.js';
15
15
  *
16
16
  * If needed we can also implement further functionality (like heartbeat) in this wrapper channel.
17
17
  */
18
- export declare const makeMessageChannel: ({ schema, newEdgeAvailablePubSub, channelName, checkTransferableEdges, nodeName, incomingPacketsQueue, target, sendPacket, }: MakeMessageChannelArgs) => Effect.Effect<{
18
+ export declare const makeDirectChannel: ({ schema, newEdgeAvailablePubSub, channelName, checkTransferableEdges, nodeName, incomingPacketsQueue, target, sendPacket, }: MakeDirectChannelArgs) => Effect.Effect<{
19
19
  webChannel: WebChannel.WebChannel<any, any>;
20
20
  initialEdgeDeferred: Deferred.Deferred<void, never>;
21
21
  }, never, Scope.Scope>;
22
- //# sourceMappingURL=message-channel.d.ts.map
22
+ //# sourceMappingURL=direct-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-channel.d.ts","sourceRoot":"","sources":["../../src/channel/direct-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,MAAM,EAMN,KAAK,EAGL,UAAU,EACX,MAAM,yBAAyB,CAAA;AAIhC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAGzE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,GAAI,8HAS/B,qBAAqB;gBAyLU,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;;sBAI9D,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Cause, Deferred, Effect, Either, Exit, Option, Queue, Schema, Scope, Stream, TQueue, WebChannel, } from '@livestore/utils/effect';
2
2
  import { nanoid } from '@livestore/utils/nanoid';
3
3
  import * as WebmeshSchema from '../mesh-schema.js';
4
- import { makeMessageChannelInternal } from './message-channel-internal.js';
4
+ import { makeDirectChannelInternal } from './direct-channel-internal.js';
5
5
  /**
6
6
  * Behaviour:
7
7
  * - Waits until there is an initial edge
@@ -17,7 +17,7 @@ import { makeMessageChannelInternal } from './message-channel-internal.js';
17
17
  *
18
18
  * If needed we can also implement further functionality (like heartbeat) in this wrapper channel.
19
19
  */
20
- export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName, checkTransferableEdges, nodeName, incomingPacketsQueue, target, sendPacket, }) => Effect.scopeWithCloseable((scope) => Effect.gen(function* () {
20
+ export const makeDirectChannel = ({ schema, newEdgeAvailablePubSub, channelName, checkTransferableEdges, nodeName, incomingPacketsQueue, target, sendPacket, }) => Effect.scopeWithCloseable((scope) => Effect.gen(function* () {
21
21
  /** Only used to identify whether a source is the same instance to know when to reconnect */
22
22
  const sourceId = nanoid();
23
23
  const listenQueue = yield* Queue.unbounded();
@@ -37,9 +37,9 @@ export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName
37
37
  debugInfo.connectCounter++;
38
38
  const channelVersion = debugInfo.connectCounter;
39
39
  yield* Effect.spanEvent(`Connecting#${channelVersion}`);
40
- const makeMessageChannelScope = yield* Scope.make();
40
+ const makeDirectChannelScope = yield* Scope.make();
41
41
  // Attach the new scope to the parent scope
42
- yield* Effect.addFinalizer((ex) => Scope.close(makeMessageChannelScope, ex));
42
+ yield* Effect.addFinalizer((ex) => Scope.close(makeDirectChannelScope, ex));
43
43
  /**
44
44
  * Expected concurrency behaviour:
45
45
  * - We're concurrently running the edge setup and the waitForNewEdgeFiber
@@ -47,7 +47,7 @@ export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName
47
47
  * - The edge setup succeeds and we can interrupt the waitForNewEdgeFiber
48
48
  * - Tricky paths:
49
49
  * - While a edge is still being setup, we want to re-try when there is a new edge
50
- * - If the edge setup returns a `MessageChannelResponseNoTransferables` error,
50
+ * - If the edge setup returns a `DirectChannelResponseNoTransferables` error,
51
51
  * we want to wait for a new edge and then re-try
52
52
  * - Further notes:
53
53
  * - If the parent scope closes, we want to also interrupt both the edge setup and the waitForNewEdgeFiber
@@ -56,7 +56,7 @@ export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName
56
56
  * - We need to make sure that "interruption" isn't "bubbling out"
57
57
  */
58
58
  const waitForNewEdgeFiber = yield* Stream.fromPubSub(newEdgeAvailablePubSub).pipe(Stream.tap((edgeName) => Effect.spanEvent(`new-conn:${edgeName}`)), Stream.take(1), Stream.runDrain, Effect.as('new-edge'), Effect.fork);
59
- const makeChannel = makeMessageChannelInternal({
59
+ const makeChannel = makeDirectChannelInternal({
60
60
  nodeName,
61
61
  sourceId,
62
62
  incomingPacketsQueue,
@@ -67,35 +67,35 @@ export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName
67
67
  channelVersion,
68
68
  newEdgeAvailablePubSub,
69
69
  sendPacket,
70
- scope: makeMessageChannelScope,
71
- }).pipe(Scope.extend(makeMessageChannelScope), Effect.forkIn(makeMessageChannelScope),
70
+ scope: makeDirectChannelScope,
71
+ }).pipe(Scope.extend(makeDirectChannelScope), Effect.forkIn(makeDirectChannelScope),
72
72
  // Given we only call `Effect.exit` later when joining the fiber,
73
73
  // we don't want Effect to produce a "unhandled error" log message
74
74
  Effect.withUnhandledErrorLogLevel(Option.none()));
75
75
  const raceResult = yield* Effect.raceFirst(makeChannel, waitForNewEdgeFiber.pipe(Effect.disconnect));
76
76
  if (raceResult === 'new-edge') {
77
- yield* Scope.close(makeMessageChannelScope, Exit.fail('new-edge'));
77
+ yield* Scope.close(makeDirectChannelScope, Exit.fail('new-edge'));
78
78
  // We'll try again
79
79
  }
80
80
  else {
81
81
  const channelExit = yield* raceResult.pipe(Effect.exit);
82
82
  if (channelExit._tag === 'Failure') {
83
- yield* Scope.close(makeMessageChannelScope, channelExit);
83
+ yield* Scope.close(makeDirectChannelScope, channelExit);
84
84
  if (Cause.isFailType(channelExit.cause) &&
85
- Schema.is(WebmeshSchema.MessageChannelResponseNoTransferables)(channelExit.cause.error)) {
85
+ Schema.is(WebmeshSchema.DirectChannelResponseNoTransferables)(channelExit.cause.error)) {
86
86
  // Only retry when there is a new edge available
87
87
  yield* waitForNewEdgeFiber.pipe(Effect.exit);
88
88
  }
89
89
  }
90
90
  else {
91
91
  const channel = channelExit.value;
92
- yield* Deferred.succeed(resultDeferred, { channel, makeMessageChannelScope, channelVersion });
92
+ yield* Deferred.succeed(resultDeferred, { channel, makeDirectChannelScope, channelVersion });
93
93
  break;
94
94
  }
95
95
  }
96
96
  }
97
97
  // Now we wait until the first channel is established
98
- const { channel, makeMessageChannelScope, channelVersion } = yield* resultDeferred;
98
+ const { channel, makeDirectChannelScope, channelVersion } = yield* resultDeferred;
99
99
  yield* Effect.spanEvent(`Connected#${channelVersion}`);
100
100
  debugInfo.isConnected = true;
101
101
  debugInfo.innerChannelRef.current = channel;
@@ -103,7 +103,7 @@ export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName
103
103
  // We'll now forward all incoming messages to the listen queue
104
104
  yield* channel.listen.pipe(Stream.flatten(),
105
105
  // Stream.tap((msg) => Effect.log(`${target}→${channelName}→${nodeName}:message:${msg.message}`)),
106
- Stream.tapChunk((chunk) => Queue.offerAll(listenQueue, chunk)), Stream.runDrain, Effect.tapCauseLogPretty, Effect.forkIn(makeMessageChannelScope));
106
+ Stream.tapChunk((chunk) => Queue.offerAll(listenQueue, chunk)), Stream.runDrain, Effect.tapCauseLogPretty, Effect.forkIn(makeDirectChannelScope));
107
107
  yield* Effect.gen(function* () {
108
108
  while (true) {
109
109
  const [msg, deferred] = yield* TQueue.peek(sendQueue);
@@ -114,10 +114,10 @@ export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName
114
114
  yield* Deferred.succeed(deferred, void 0);
115
115
  yield* TQueue.take(sendQueue); // Remove the message from the queue
116
116
  }
117
- }).pipe(Effect.forkIn(makeMessageChannelScope));
117
+ }).pipe(Effect.forkIn(makeDirectChannelScope));
118
118
  // Wait until the channel is closed and then try to reconnect
119
119
  yield* channel.closedDeferred;
120
- yield* Scope.close(makeMessageChannelScope, Exit.succeed('channel-closed'));
120
+ yield* Scope.close(makeDirectChannelScope, Exit.succeed('channel-closed'));
121
121
  yield* Effect.spanEvent(`Disconnected#${channelVersion}`);
122
122
  debugInfo.isConnected = false;
123
123
  debugInfo.innerChannelRef.current = undefined;
@@ -150,4 +150,4 @@ export const makeMessageChannel = ({ schema, newEdgeAvailablePubSub, channelName
150
150
  initialEdgeDeferred,
151
151
  };
152
152
  }));
153
- //# sourceMappingURL=message-channel.js.map
153
+ //# sourceMappingURL=direct-channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-channel.js","sourceRoot":"","sources":["../../src/channel/direct-channel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-channel.d.ts","sourceRoot":"","sources":["../../src/channel/proxy-channel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAEL,MAAM,EAKN,KAAK,EAEL,MAAM,EACN,KAAK,EAGL,UAAU,EACX,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAE/C,UAAU,oBAAoB;IAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAClC,QAAQ,EAAE,YAAY,CAAA;IACtB,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACnD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC,kBAAkB,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACtF,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KAChC,CAAA;CACF;AAED,eAAO,MAAM,gBAAgB,GAAI,uFAQ9B,oBAAoB,8EAsTpB,CAAA"}
1
+ {"version":3,"file":"proxy-channel.d.ts","sourceRoot":"","sources":["../../src/channel/proxy-channel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAEL,MAAM,EAKN,KAAK,EAEL,MAAM,EACN,KAAK,EAGL,UAAU,EACX,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAE/C,UAAU,oBAAoB;IAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAClC,QAAQ,EAAE,YAAY,CAAA;IACtB,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACnD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC,kBAAkB,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACtF,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KAChC,CAAA;CACF;AAED,eAAO,MAAM,gBAAgB,GAAI,uFAQ9B,oBAAoB,8EAwYpB,CAAA"}
@@ -6,6 +6,7 @@ import * as MeshSchema from '../mesh-schema.js';
6
6
  export const makeProxyChannel = ({ queue, nodeName, newEdgeAvailablePubSub, sendPacket, target, channelName, schema, }) => Effect.scopeWithCloseable((scope) => Effect.gen(function* () {
7
7
  const channelStateRef = { current: { _tag: 'Initial' } };
8
8
  const debugInfo = {
9
+ kind: 'proxy-channel',
9
10
  pendingSends: 0,
10
11
  totalSends: 0,
11
12
  connectCounter: 0,
@@ -38,25 +39,52 @@ export const makeProxyChannel = ({ queue, nodeName, newEdgeAvailablePubSub, send
38
39
  });
39
40
  const edgeRequest = Effect.suspend(() => sendPacket(MeshSchema.ProxyChannelRequest.make({ channelName, hops: [], source: nodeName, target, channelIdCandidate })));
40
41
  const getCombinedChannelId = (otherSideChannelIdCandidate) => [channelIdCandidate, otherSideChannelIdCandidate].sort().join('_');
42
+ const earlyPayloadBuffer = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
41
43
  const processProxyPacket = ({ packet, respondToSender }) => Effect.gen(function* () {
42
- // yield* Effect.log(`${nodeName}:processing packet ${packet._tag} from ${packet.source}`)
44
+ // yield* Effect.logDebug(
45
+ // `[${nodeName}] processProxyPacket received: ${packet._tag} from ${packet.source} (reqId: ${packet.id})`,
46
+ // )
43
47
  const otherSideName = packet.source;
44
48
  const channelKey = `target:${otherSideName}, channelName:${packet.channelName}`;
45
49
  const channelState = channelStateRef.current;
46
50
  switch (packet._tag) {
47
51
  case 'ProxyChannelRequest': {
48
52
  const combinedChannelId = getCombinedChannelId(packet.channelIdCandidate);
49
- if (channelState._tag === 'Initial' || channelState._tag === 'Established') {
50
- yield* SubscriptionRef.set(connectedStateRef, false);
51
- channelStateRef.current = { _tag: 'Pending', initiatedVia: 'incoming-request' };
52
- yield* Effect.spanEvent(`Reconnecting`).pipe(Effect.withParentSpan(channelSpan));
53
- debugInfo.isConnected = false;
54
- debugInfo.connectCounter++;
55
- // If we're already connected, we need to re-establish the edge
56
- if (channelState._tag === 'Established' && channelState.combinedChannelId !== combinedChannelId) {
53
+ // Handle Established state explicitly
54
+ if (channelState._tag === 'Established') {
55
+ // Check if the incoming request is for the *same* channel instance
56
+ if (channelState.combinedChannelId === combinedChannelId) {
57
+ // Already established with the same ID, likely a redundant request.
58
+ // Just respond and stay established.
59
+ // yield* Effect.logDebug(
60
+ // `[${nodeName}] Received redundant ProxyChannelRequest for already established channel instance ${combinedChannelId}. Responding.`,
61
+ // )
62
+ }
63
+ else {
64
+ // Established, but the incoming request has a different ID.
65
+ // This implies a reconnect scenario where IDs don't match. Reset to Pending and re-initiate.
66
+ yield* Effect.logWarning(`[${nodeName}] Received ProxyChannelRequest with different channel ID (${combinedChannelId}) while established with ${channelState.combinedChannelId}. Re-establishing.`);
67
+ yield* SubscriptionRef.set(connectedStateRef, false);
68
+ channelStateRef.current = { _tag: 'Pending', initiatedVia: 'incoming-request' };
69
+ yield* Effect.spanEvent(`Reconnecting (received conflicting ProxyChannelRequest)`).pipe(Effect.withParentSpan(channelSpan));
70
+ debugInfo.isConnected = false;
71
+ debugInfo.connectCounter++;
72
+ // We need to send our own request as well to complete the handshake for the new ID
57
73
  yield* edgeRequest;
58
74
  }
59
75
  }
76
+ else if (channelState._tag === 'Initial') {
77
+ // Standard initial connection: set to Pending
78
+ yield* SubscriptionRef.set(connectedStateRef, false); // Ensure connectedStateRef is false if we were somehow Initial but it wasn't false
79
+ channelStateRef.current = { _tag: 'Pending', initiatedVia: 'incoming-request' };
80
+ yield* Effect.spanEvent(`Connecting (received ProxyChannelRequest)`).pipe(Effect.withParentSpan(channelSpan));
81
+ debugInfo.isConnected = false; // Should be false already, but ensure consistency
82
+ debugInfo.connectCounter++;
83
+ // No need to send edgeRequest here, the response acts as our part of the handshake for the incoming request's ID
84
+ }
85
+ // If state is 'Pending', we are already trying to connect.
86
+ // Just let the response go out, don't change state.
87
+ // Send the response regardless of the initial state (unless an error occurred)
60
88
  yield* respondToSender(MeshSchema.ProxyChannelResponseSuccess.make({
61
89
  reqId: packet.id,
62
90
  remainingHops: packet.hops,
@@ -71,13 +99,17 @@ export const makeProxyChannel = ({ queue, nodeName, newEdgeAvailablePubSub, send
71
99
  }
72
100
  case 'ProxyChannelResponseSuccess': {
73
101
  if (channelState._tag !== 'Pending') {
74
- // return shouldNeverHappen(`Expected proxy channel to be pending but got ${channelState._tag}`)
75
102
  if (channelState._tag === 'Established' &&
76
103
  channelState.combinedChannelId !== packet.combinedChannelId) {
77
104
  return shouldNeverHappen(`ProxyChannel[${channelKey}]: Expected proxy channel to have the same combinedChannelId as the packet:\n${channelState.combinedChannelId} (channel) === ${packet.combinedChannelId} (packet)`);
78
105
  }
106
+ else if (channelState._tag === 'Established') {
107
+ // yield* Effect.logDebug(`[${nodeName}] Ignoring redundant ResponseSuccess with same ID ${packet.id}`)
108
+ return;
109
+ }
79
110
  else {
80
- // for now just ignore it but should be looked into (there seems to be some kind of race condition/inefficiency)
111
+ yield* Effect.logWarning(`[${nodeName}] Ignoring ResponseSuccess ${packet.id} received in unexpected state ${channelState._tag}`);
112
+ return;
81
113
  }
82
114
  }
83
115
  const combinedChannelId = getCombinedChannelId(packet.channelIdCandidate);
@@ -85,17 +117,32 @@ export const makeProxyChannel = ({ queue, nodeName, newEdgeAvailablePubSub, send
85
117
  return yield* Effect.die(`ProxyChannel[${channelKey}]: Expected proxy channel to have the same combinedChannelId as the packet:\n${combinedChannelId} (channel) === ${packet.combinedChannelId} (packet)`);
86
118
  }
87
119
  yield* setStateToEstablished(packet.combinedChannelId);
120
+ const establishedState = channelStateRef.current;
121
+ if (establishedState._tag === 'Established') {
122
+ //
123
+ const bufferedPackets = yield* Queue.takeAll(earlyPayloadBuffer);
124
+ // yield* Effect.logDebug(
125
+ // `[${nodeName}] Draining early payload buffer (${bufferedPackets.length}) after ResponseSuccess`,
126
+ // )
127
+ for (const bufferedPacket of bufferedPackets) {
128
+ if (establishedState.combinedChannelId !== bufferedPacket.combinedChannelId) {
129
+ yield* Effect.logWarning(`[${nodeName}] Discarding buffered payload ${bufferedPacket.id}: Combined channel ID mismatch during drain. Expected ${establishedState.combinedChannelId}, got ${bufferedPacket.combinedChannelId}`);
130
+ continue;
131
+ }
132
+ const decodedMessage = yield* Schema.decodeUnknown(establishedState.listenSchema)(bufferedPacket.payload);
133
+ yield* establishedState.listenQueue.pipe(Queue.offer(decodedMessage));
134
+ }
135
+ }
136
+ else {
137
+ yield* Effect.logError(`[${nodeName}] State is not Established immediately after setStateToEstablished was called. Cannot drain buffer. State: ${establishedState._tag}`);
138
+ }
88
139
  return;
89
140
  }
90
141
  case 'ProxyChannelPayload': {
91
- if (channelState._tag !== 'Established') {
92
- // return yield* Effect.die(`Not yet connected to ${target}. dropping message`)
93
- yield* Effect.spanEvent(`Not yet connected to ${target}. dropping message`, { packet });
94
- return;
95
- }
96
- if (channelState.combinedChannelId !== packet.combinedChannelId) {
142
+ if (channelState._tag === 'Established' && channelState.combinedChannelId !== packet.combinedChannelId) {
97
143
  return yield* Effect.die(`ProxyChannel[${channelKey}]: Expected proxy channel to have the same combinedChannelId as the packet:\n${channelState.combinedChannelId} (channel) === ${packet.combinedChannelId} (packet)`);
98
144
  }
145
+ // yield* Effect.logDebug(`[${nodeName}] Received payload reqId: ${packet.id}. Sending Ack.`)
99
146
  yield* respondToSender(MeshSchema.ProxyChannelPayloadAck.make({
100
147
  reqId: packet.id,
101
148
  remainingHops: packet.hops,
@@ -103,15 +150,25 @@ export const makeProxyChannel = ({ queue, nodeName, newEdgeAvailablePubSub, send
103
150
  target,
104
151
  source: nodeName,
105
152
  channelName,
106
- combinedChannelId: channelState.combinedChannelId,
153
+ combinedChannelId: channelState._tag === 'Established' ? channelState.combinedChannelId : packet.combinedChannelId,
107
154
  }));
108
- const decodedMessage = yield* Schema.decodeUnknown(channelState.listenSchema)(packet.payload);
109
- yield* channelState.listenQueue.pipe(Queue.offer(decodedMessage));
155
+ if (channelState._tag === 'Established') {
156
+ const decodedMessage = yield* Schema.decodeUnknown(channelState.listenSchema)(packet.payload);
157
+ yield* channelState.listenQueue.pipe(Queue.offer(decodedMessage));
158
+ }
159
+ else {
160
+ // yield* Effect.logDebug(
161
+ // `[${nodeName}] Buffering early payload reqId: ${packet.id} (state: ${channelState._tag})`,
162
+ // )
163
+ yield* Queue.offer(earlyPayloadBuffer, packet);
164
+ }
110
165
  return;
111
166
  }
112
167
  case 'ProxyChannelPayloadAck': {
168
+ // yield* Effect.logDebug(`[${nodeName}] Received Ack for reqId: ${packet.reqId}`)
113
169
  if (channelState._tag !== 'Established') {
114
170
  yield* Effect.spanEvent(`Not yet connected to ${target}. dropping message`);
171
+ yield* Effect.logWarning(`[${nodeName}] Received Ack but not established (State: ${channelState._tag}). Dropping Ack for ${packet.reqId}`);
115
172
  return;
116
173
  }
117
174
  const ack = channelState.ackMap.get(packet.reqId) ??
@@ -183,15 +240,21 @@ export const makeProxyChannel = ({ queue, nodeName, newEdgeAvailablePubSub, send
183
240
  }).pipe(Effect.scoped, Effect.withSpan(`sendAckWithRetry:ProxyChannelPayload`), Effect.withParentSpan(channelSpan));
184
241
  const listen = Stream.fromQueue(listenQueue).pipe(Stream.map(Either.right));
185
242
  const closedDeferred = yield* Deferred.make().pipe(Effect.acquireRelease(Deferred.done(Exit.void)));
243
+ const runtime = yield* Effect.runtime();
186
244
  const webChannel = {
187
245
  [WebChannel.WebChannelSymbol]: WebChannel.WebChannelSymbol,
188
246
  send,
189
247
  listen,
190
248
  closedDeferred,
191
- supportsTransferables: true,
249
+ supportsTransferables: false,
192
250
  schema,
193
251
  shutdown: Scope.close(scope, Exit.void),
194
252
  debugInfo,
253
+ ...{
254
+ debug: {
255
+ ping: (message = 'ping') => send(WebChannel.DebugPingMessage.make({ message })).pipe(Effect.provide(runtime), Effect.tapCauseLogPretty, Effect.runFork),
256
+ },
257
+ },
195
258
  };
196
259
  return webChannel;
197
260
  }).pipe(Effect.withSpanScoped('makeProxyChannel')));
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-channel.js","sourceRoot":"","sources":["../../src/channel/proxy-channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy-channel.js","sourceRoot":"","sources":["../../src/channel/proxy-channel.ts"],"names":[],"mappings":"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"}