@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.
Files changed (50) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/channel/message-channel-internal.d.ts +3 -3
  3. package/dist/channel/message-channel-internal.d.ts.map +1 -1
  4. package/dist/channel/message-channel-internal.js +8 -8
  5. package/dist/channel/message-channel-internal.js.map +1 -1
  6. package/dist/channel/message-channel.d.ts +5 -5
  7. package/dist/channel/message-channel.d.ts.map +1 -1
  8. package/dist/channel/message-channel.js +22 -22
  9. package/dist/channel/message-channel.js.map +1 -1
  10. package/dist/channel/proxy-channel.d.ts +2 -2
  11. package/dist/channel/proxy-channel.d.ts.map +1 -1
  12. package/dist/channel/proxy-channel.js +18 -14
  13. package/dist/channel/proxy-channel.js.map +1 -1
  14. package/dist/common.d.ts +15 -12
  15. package/dist/common.d.ts.map +1 -1
  16. package/dist/common.js +5 -3
  17. package/dist/common.js.map +1 -1
  18. package/dist/mesh-schema.d.ts +33 -10
  19. package/dist/mesh-schema.d.ts.map +1 -1
  20. package/dist/mesh-schema.js +19 -7
  21. package/dist/mesh-schema.js.map +1 -1
  22. package/dist/mod.d.ts +2 -2
  23. package/dist/mod.d.ts.map +1 -1
  24. package/dist/mod.js +2 -2
  25. package/dist/mod.js.map +1 -1
  26. package/dist/node.d.ts +26 -19
  27. package/dist/node.d.ts.map +1 -1
  28. package/dist/node.js +147 -83
  29. package/dist/node.js.map +1 -1
  30. package/dist/node.test.js +42 -25
  31. package/dist/node.test.js.map +1 -1
  32. package/dist/{websocket-connection.d.ts → websocket-edge.d.ts} +12 -12
  33. package/dist/websocket-edge.d.ts.map +1 -0
  34. package/dist/{websocket-connection.js → websocket-edge.js} +17 -16
  35. package/dist/websocket-edge.js.map +1 -0
  36. package/dist/websocket-server.js +6 -6
  37. package/dist/websocket-server.js.map +1 -1
  38. package/package.json +3 -3
  39. package/src/channel/message-channel-internal.ts +10 -10
  40. package/src/channel/message-channel.ts +25 -25
  41. package/src/channel/proxy-channel.ts +20 -16
  42. package/src/common.ts +8 -11
  43. package/src/mesh-schema.ts +23 -9
  44. package/src/mod.ts +2 -2
  45. package/src/node.test.ts +60 -25
  46. package/src/node.ts +206 -113
  47. package/src/{websocket-connection.ts → websocket-edge.ts} +20 -15
  48. package/src/websocket-server.ts +6 -6
  49. package/dist/websocket-connection.d.ts.map +0 -1
  50. 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 WSConnectionInit extends Schema.TaggedStruct('WSConnectionInit', {
19
+ export class WSEdgeInit extends Schema.TaggedStruct('WSEdgeInit', {
20
20
  from: Schema.String,
21
21
  }) {}
22
22
 
23
- export class WSConnectionPayload extends Schema.TaggedStruct('WSConnectionPayload', {
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 WSConnectionMessage extends Schema.Union(WSConnectionInit, WSConnectionPayload) {}
28
+ export class WSEdgeMessage extends Schema.Union(WSEdgeInit, WSEdgePayload) {}
29
29
 
30
- export const MessageMsgPack = Schema.MsgPack(WSConnectionMessage)
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 connection = yield* makeWebSocketConnection(socket, { _tag: 'leaf', from: node.nodeName })
57
+ const edgeChannel = yield* makeWebSocketEdge(socket, { _tag: 'leaf', from: node.nodeName })
58
58
 
59
- yield* node.addConnection({ target: 'ws', connectionChannel: connection.webChannel, replaceIfExists: true })
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 makeWebSocketConnection = (
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 === 'WSConnectionInit') {
92
+ if (msg._tag === 'WSEdgeInit') {
91
93
  yield* Deferred.succeed(fromDeferred, msg.from)
92
94
  } else {
93
- const decodedPayload = yield* Schema.decode(WebmeshSchema.Packet)(msg.payload)
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: 'WSConnectionInit', from }))
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(WebmeshSchema.Packet)(message)
137
- socket.send(Schema.encodeSync(MessageMsgPack)({ _tag: 'WSConnectionPayload', payload, from }))
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(Stream.map(Either.right))
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: { listen: WebmeshSchema.Packet, send: WebmeshSchema.Packet },
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('makeWebSocketConnection')),
158
+ }).pipe(Effect.withSpanScoped('makeWebSocketEdge')),
154
159
  )
@@ -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 { makeWebSocketConnection } from './websocket-connection.js'
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* makeWebSocketConnection(socket, { _tag: 'relay' })
40
+ const { webChannel, from } = yield* makeWebSocketEdge(socket, { _tag: 'relay' })
41
41
 
42
- yield* node.addConnection({ target: from, connectionChannel: webChannel, replaceIfExists: true })
43
- yield* Effect.log(`WS Relay ${relayNodeName}: added connection from '${from}'`)
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.removeConnection(from)
48
- yield* Effect.log(`WS Relay ${relayNodeName}: removed connection from '${from}'`)
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":"AAAA,OAAO,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,GACV,MAAM,yBAAyB,CAAA;AAGhC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AAGjD,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;IAC5E,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,YAAY,CAAC,qBAAqB,EAAE;IAClF,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,OAAO,EAAE,MAAM,CAAC,GAAG;CACpB,CAAC;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;CAAG;AAE/F,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;AAWjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,IAAI,EACJ,GAAG,EACH,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAKtC,EAA2C,EAAE,CAC5C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAA;IAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;IAEjE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAEpF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEhG,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;IAE5G,KAAK,CAAC,CAAC,YAAY,CAAA;AACrB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAEzF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,MAAsD,EACtD,UAAsB,EAQtB,EAAE,CACF,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,UAAU,GAAG,aAAa,CAAA;IAEjC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAU,CAAA;IAEnD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAoC,CAAC,IAAI,CACjF,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CACtC,CAAA;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAe,MAAa,EAAE,SAAS,CAAC,CAAC,IAAI,CAC1E,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EACzF,MAAM,CAAC,OAAO,EAAE,EAChB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACpC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC9E,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,CAAC,CACH,EACD,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEpF,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,YAAY,CAAA;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAA;IAE1E,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAChC,aAAa,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAEtD,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEzG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CACzB,MAAM,EACN,OAAO,EACP,GAAG,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAA;QAC7B,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;IACpD,CAAC,CAAC,EACJ,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,OAAyC,EAAE,EAAE,CACzD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAA;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAA;QACnE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAChG,CAAC,CAAC,CAAA;IAEJ,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAE3E,MAAM,UAAU,GAAG;QACjB,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,gBAAgB;QAC1D,IAAI;QACJ,MAAM;QACN,cAAc;QACd,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE;QACpE,qBAAqB,EAAE,KAAK;QAC5B,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;KAC4D,CAAA;IAErG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;AAC7B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAC1D,CAAA"}