@livestore/webmesh 0.0.0-snapshot-ee8e0fc3b894cf3159269c9c8969a8fc4b398dca → 0.0.0-snapshot-fec375f0f61a7bc75278adc60d1a55f96a9c292a
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/dist/.tsbuildinfo +1 -1
- package/dist/channel/message-channel-internal.d.ts +3 -3
- package/dist/channel/message-channel-internal.d.ts.map +1 -1
- package/dist/channel/message-channel-internal.js +8 -8
- package/dist/channel/message-channel-internal.js.map +1 -1
- package/dist/channel/message-channel.d.ts +5 -5
- package/dist/channel/message-channel.d.ts.map +1 -1
- package/dist/channel/message-channel.js +22 -22
- package/dist/channel/message-channel.js.map +1 -1
- package/dist/channel/proxy-channel.d.ts +2 -2
- package/dist/channel/proxy-channel.d.ts.map +1 -1
- package/dist/channel/proxy-channel.js +18 -14
- package/dist/channel/proxy-channel.js.map +1 -1
- package/dist/common.d.ts +15 -12
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +5 -3
- package/dist/common.js.map +1 -1
- package/dist/mesh-schema.d.ts +33 -10
- package/dist/mesh-schema.d.ts.map +1 -1
- package/dist/mesh-schema.js +19 -7
- package/dist/mesh-schema.js.map +1 -1
- package/dist/mod.d.ts +2 -2
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +2 -2
- package/dist/mod.js.map +1 -1
- package/dist/node.d.ts +26 -19
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +147 -83
- package/dist/node.js.map +1 -1
- package/dist/node.test.js +42 -25
- package/dist/node.test.js.map +1 -1
- package/dist/{websocket-connection.d.ts → websocket-edge.d.ts} +12 -12
- package/dist/websocket-edge.d.ts.map +1 -0
- package/dist/{websocket-connection.js → websocket-edge.js} +17 -16
- package/dist/websocket-edge.js.map +1 -0
- package/dist/websocket-server.js +6 -6
- package/dist/websocket-server.js.map +1 -1
- package/package.json +3 -3
- package/src/channel/message-channel-internal.ts +10 -10
- package/src/channel/message-channel.ts +25 -25
- package/src/channel/proxy-channel.ts +20 -16
- package/src/common.ts +8 -11
- package/src/mesh-schema.ts +23 -9
- package/src/mod.ts +2 -2
- package/src/node.test.ts +60 -25
- package/src/node.ts +206 -113
- package/src/{websocket-connection.ts → websocket-edge.ts} +20 -15
- package/src/websocket-server.ts +6 -6
- package/dist/websocket-connection.d.ts.map +0 -1
- package/dist/websocket-connection.js.map +0 -1
|
@@ -16,18 +16,18 @@ import type * as NodeWebSocket from 'ws'
|
|
|
16
16
|
import * as WebmeshSchema from './mesh-schema.js'
|
|
17
17
|
import type { MeshNode } from './node.js'
|
|
18
18
|
|
|
19
|
-
export class
|
|
19
|
+
export class WSEdgeInit extends Schema.TaggedStruct('WSEdgeInit', {
|
|
20
20
|
from: Schema.String,
|
|
21
21
|
}) {}
|
|
22
22
|
|
|
23
|
-
export class
|
|
23
|
+
export class WSEdgePayload extends Schema.TaggedStruct('WSEdgePayload', {
|
|
24
24
|
from: Schema.String,
|
|
25
25
|
payload: Schema.Any,
|
|
26
26
|
}) {}
|
|
27
27
|
|
|
28
|
-
export class
|
|
28
|
+
export class WSEdgeMessage extends Schema.Union(WSEdgeInit, WSEdgePayload) {}
|
|
29
29
|
|
|
30
|
-
export const MessageMsgPack = Schema.MsgPack(
|
|
30
|
+
export const MessageMsgPack = Schema.MsgPack(WSEdgeMessage)
|
|
31
31
|
|
|
32
32
|
export type SocketType =
|
|
33
33
|
| {
|
|
@@ -54,14 +54,14 @@ export const connectViaWebSocket = ({
|
|
|
54
54
|
|
|
55
55
|
socket.addEventListener('close', () => Deferred.unsafeDone(disconnected, Exit.void))
|
|
56
56
|
|
|
57
|
-
const
|
|
57
|
+
const edgeChannel = yield* makeWebSocketEdge(socket, { _tag: 'leaf', from: node.nodeName })
|
|
58
58
|
|
|
59
|
-
yield* node.
|
|
59
|
+
yield* node.addEdge({ target: 'ws', edgeChannel: edgeChannel.webChannel, replaceIfExists: true })
|
|
60
60
|
|
|
61
61
|
yield* disconnected
|
|
62
62
|
}).pipe(Effect.scoped, Effect.forever, Effect.catchTag('WebSocketError', Effect.orDie))
|
|
63
63
|
|
|
64
|
-
export const
|
|
64
|
+
export const makeWebSocketEdge = (
|
|
65
65
|
socket: globalThis.WebSocket | NodeWebSocket.WebSocket,
|
|
66
66
|
socketType: SocketType,
|
|
67
67
|
): Effect.Effect<
|
|
@@ -82,15 +82,17 @@ export const makeWebSocketConnection = (
|
|
|
82
82
|
Effect.acquireRelease(Queue.shutdown),
|
|
83
83
|
)
|
|
84
84
|
|
|
85
|
+
const schema = WebChannel.mapSchema(WebmeshSchema.Packet)
|
|
86
|
+
|
|
85
87
|
yield* Stream.fromEventListener<MessageEvent>(socket as any, 'message').pipe(
|
|
86
88
|
Stream.map((msg) => Schema.decodeUnknownEither(MessageMsgPack)(new Uint8Array(msg.data))),
|
|
87
89
|
Stream.flatten(),
|
|
88
90
|
Stream.tap((msg) =>
|
|
89
91
|
Effect.gen(function* () {
|
|
90
|
-
if (msg._tag === '
|
|
92
|
+
if (msg._tag === 'WSEdgeInit') {
|
|
91
93
|
yield* Deferred.succeed(fromDeferred, msg.from)
|
|
92
94
|
} else {
|
|
93
|
-
const decodedPayload = yield* Schema.decode(
|
|
95
|
+
const decodedPayload = yield* Schema.decode(schema.listen)(msg.payload)
|
|
94
96
|
yield* Queue.offer(listenQueue, decodedPayload)
|
|
95
97
|
}
|
|
96
98
|
}),
|
|
@@ -102,7 +104,7 @@ export const makeWebSocketConnection = (
|
|
|
102
104
|
)
|
|
103
105
|
|
|
104
106
|
const initHandshake = (from: string) =>
|
|
105
|
-
socket.send(Schema.encodeSync(MessageMsgPack)({ _tag: '
|
|
107
|
+
socket.send(Schema.encodeSync(MessageMsgPack)({ _tag: 'WSEdgeInit', from }))
|
|
106
108
|
|
|
107
109
|
if (socketType._tag === 'leaf') {
|
|
108
110
|
initHandshake(socketType.from)
|
|
@@ -133,22 +135,25 @@ export const makeWebSocketConnection = (
|
|
|
133
135
|
const send = (message: typeof WebmeshSchema.Packet.Type) =>
|
|
134
136
|
Effect.gen(function* () {
|
|
135
137
|
yield* isConnectedLatch.await
|
|
136
|
-
const payload = yield* Schema.encode(
|
|
137
|
-
socket.send(Schema.encodeSync(MessageMsgPack)({ _tag: '
|
|
138
|
+
const payload = yield* Schema.encode(schema.send)(message)
|
|
139
|
+
socket.send(Schema.encodeSync(MessageMsgPack)({ _tag: 'WSEdgePayload', payload, from }))
|
|
138
140
|
})
|
|
139
141
|
|
|
140
|
-
const listen = Stream.fromQueue(listenQueue).pipe(
|
|
142
|
+
const listen = Stream.fromQueue(listenQueue).pipe(
|
|
143
|
+
Stream.map(Either.right),
|
|
144
|
+
WebChannel.listenToDebugPing('websocket-edge'),
|
|
145
|
+
)
|
|
141
146
|
|
|
142
147
|
const webChannel = {
|
|
143
148
|
[WebChannel.WebChannelSymbol]: WebChannel.WebChannelSymbol,
|
|
144
149
|
send,
|
|
145
150
|
listen,
|
|
146
151
|
closedDeferred,
|
|
147
|
-
schema
|
|
152
|
+
schema,
|
|
148
153
|
supportsTransferables: false,
|
|
149
154
|
shutdown: Scope.close(scope, Exit.void),
|
|
150
155
|
} satisfies WebChannel.WebChannel<typeof WebmeshSchema.Packet.Type, typeof WebmeshSchema.Packet.Type>
|
|
151
156
|
|
|
152
157
|
return { webChannel, from }
|
|
153
|
-
}).pipe(Effect.withSpanScoped('
|
|
158
|
+
}).pipe(Effect.withSpanScoped('makeWebSocketEdge')),
|
|
154
159
|
)
|
package/src/websocket-server.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { Effect, FiberSet } from '@livestore/utils/effect'
|
|
|
4
4
|
import * as WebSocket from 'ws'
|
|
5
5
|
|
|
6
6
|
import { makeMeshNode } from './node.js'
|
|
7
|
-
import {
|
|
7
|
+
import { makeWebSocketEdge } from './websocket-edge.js'
|
|
8
8
|
|
|
9
9
|
export const makeWebSocketServer = ({
|
|
10
10
|
relayNodeName,
|
|
@@ -37,15 +37,15 @@ export const makeWebSocketServer = ({
|
|
|
37
37
|
// TODO handle node disconnects (i.e. remove respective connection)
|
|
38
38
|
server.on('connection', (socket) => {
|
|
39
39
|
Effect.gen(function* () {
|
|
40
|
-
const { webChannel, from } = yield*
|
|
40
|
+
const { webChannel, from } = yield* makeWebSocketEdge(socket, { _tag: 'relay' })
|
|
41
41
|
|
|
42
|
-
yield* node.
|
|
43
|
-
yield* Effect.log(`WS Relay ${relayNodeName}: added
|
|
42
|
+
yield* node.addEdge({ target: from, edgeChannel: webChannel, replaceIfExists: true })
|
|
43
|
+
yield* Effect.log(`WS Relay ${relayNodeName}: added edge from '${from}'`)
|
|
44
44
|
|
|
45
45
|
socket.addEventListener('close', () =>
|
|
46
46
|
Effect.gen(function* () {
|
|
47
|
-
yield* node.
|
|
48
|
-
yield* Effect.log(`WS Relay ${relayNodeName}: removed
|
|
47
|
+
yield* node.removeEdge(from)
|
|
48
|
+
yield* Effect.log(`WS Relay ${relayNodeName}: removed edge from '${from}'`)
|
|
49
49
|
}).pipe(Effect.provide(runtime), Effect.tapCauseLogPretty, Effect.runFork),
|
|
50
50
|
)
|
|
51
51
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-connection.d.ts","sourceRoot":"","sources":["../src/websocket-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAIN,QAAQ,EACR,MAAM,EACN,KAAK,EAEL,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,KAAK,aAAa,MAAM,IAAI,CAAA;AAExC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;;;;AAEzC,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAGvC;CAAG;;AAEL,qBAAa,mBAAoB,SAAQ,wBAAmD;CAAG;AAE/F,eAAO,MAAM,cAAc;;;;;;;;;;;;;;UAAsC,CAAA;AAEjE,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAEL,eAAO,MAAM,mBAAmB,GAAI,2BAIjC;IACD,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;CAC/C,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAa+C,CAAA;AAEzF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,UAAU,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,EACtD,YAAY,UAAU,KACrB,MAAM,CAAC,MAAM,CACd;IACE,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrG,IAAI,EAAE,MAAM,CAAA;CACb,EACD,KAAK,EACL,KAAK,CAAC,KAAK,CAiFV,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-connection.js","sourceRoot":"","sources":["../src/websocket-connection.ts"],"names":[],"mappings":"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"}
|