@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.
- package/README.md +19 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/channel/{message-channel-internal.d.ts → direct-channel-internal.d.ts} +7 -7
- package/dist/channel/direct-channel-internal.d.ts.map +1 -0
- package/dist/channel/{message-channel-internal.js → direct-channel-internal.js} +22 -22
- package/dist/channel/direct-channel-internal.js.map +1 -0
- package/dist/channel/{message-channel.d.ts → direct-channel.d.ts} +3 -3
- package/dist/channel/direct-channel.d.ts.map +1 -0
- package/dist/channel/{message-channel.js → direct-channel.js} +17 -17
- package/dist/channel/direct-channel.js.map +1 -0
- package/dist/channel/proxy-channel.d.ts.map +1 -1
- package/dist/channel/proxy-channel.js +84 -21
- package/dist/channel/proxy-channel.js.map +1 -1
- package/dist/common.d.ts +11 -5
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +6 -1
- package/dist/common.js.map +1 -1
- package/dist/mesh-schema.d.ts +15 -15
- package/dist/mesh-schema.d.ts.map +1 -1
- package/dist/mesh-schema.js +9 -9
- package/dist/mesh-schema.js.map +1 -1
- package/dist/node.d.ts +10 -5
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +68 -30
- package/dist/node.js.map +1 -1
- package/dist/node.test.js +114 -17
- package/dist/node.test.js.map +1 -1
- package/dist/websocket-edge.d.ts +2 -1
- package/dist/websocket-edge.d.ts.map +1 -1
- package/dist/websocket-edge.js +6 -2
- package/dist/websocket-edge.js.map +1 -1
- package/package.json +8 -4
- package/src/channel/{message-channel-internal.ts → direct-channel-internal.ts} +29 -29
- package/src/channel/{message-channel.ts → direct-channel.ts} +20 -20
- package/src/channel/proxy-channel.ts +107 -25
- package/src/common.ts +12 -4
- package/src/mesh-schema.ts +16 -19
- package/src/node.test.ts +185 -17
- package/src/node.ts +97 -35
- package/src/websocket-edge.ts +7 -1
- package/dist/channel/message-channel-internal.d.ts.map +0 -1
- package/dist/channel/message-channel-internal.js.map +0 -1
- package/dist/channel/message-channel.d.ts.map +0 -1
- package/dist/channel/message-channel.js.map +0 -1
- package/tmp/pack.tgz +0 -0
- 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
|
|
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.
|
|
13
|
-
checkTransferableEdges: (packet: typeof MeshSchema.
|
|
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
|
|
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
|
|
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.
|
|
26
|
-
//# sourceMappingURL=
|
|
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
|
|
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.
|
|
21
|
-
listen: Schema.Union(schema_.listen, MeshSchema.
|
|
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 === '
|
|
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.
|
|
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 === '
|
|
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 '
|
|
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.
|
|
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
|
|
108
|
+
span?.addEvent(`winner side: creating direct channel and sending response`);
|
|
109
109
|
const mc = new MessageChannel();
|
|
110
|
-
// We're using a
|
|
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.
|
|
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.
|
|
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.
|
|
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 `
|
|
141
|
+
// Wait for `DirectChannelResponseSuccess` packet
|
|
142
142
|
channelStateRef.current = { _tag: 'loser:WaitingForResponse', otherSourceId: packet.sourceId };
|
|
143
143
|
}
|
|
144
144
|
break;
|
|
145
145
|
}
|
|
146
|
-
case '
|
|
146
|
+
case 'DirectChannelResponseSuccess': {
|
|
147
147
|
if (channelState._tag !== 'loser:WaitingForResponse') {
|
|
148
|
-
return shouldNeverHappen(`Expected to find
|
|
148
|
+
return shouldNeverHappen(`Expected to find direct channel response from ${target}, but was in ${channelState._tag} state`);
|
|
149
149
|
}
|
|
150
|
-
// See
|
|
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.
|
|
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.
|
|
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.
|
|
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(`
|
|
217
|
-
//# sourceMappingURL=
|
|
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":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Deferred, Effect, Scope, WebChannel } from '@livestore/utils/effect';
|
|
2
|
-
import type {
|
|
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
|
|
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=
|
|
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 {
|
|
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
|
|
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
|
|
40
|
+
const makeDirectChannelScope = yield* Scope.make();
|
|
41
41
|
// Attach the new scope to the parent scope
|
|
42
|
-
yield* Effect.addFinalizer((ex) => Scope.close(
|
|
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 `
|
|
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 =
|
|
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:
|
|
71
|
-
}).pipe(Scope.extend(
|
|
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(
|
|
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(
|
|
83
|
+
yield* Scope.close(makeDirectChannelScope, channelExit);
|
|
84
84
|
if (Cause.isFailType(channelExit.cause) &&
|
|
85
|
-
Schema.is(WebmeshSchema.
|
|
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,
|
|
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,
|
|
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(
|
|
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(
|
|
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(
|
|
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=
|
|
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,
|
|
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.
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
109
|
-
|
|
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:
|
|
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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"}
|