@livestore/common-cf 0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2 → 0.0.0-snapshot-7594f44e1dae838d58f3489ee25a5df735c2dcb6

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.
@@ -14,8 +14,18 @@
14
14
  *
15
15
  * @see {@link https://developers.cloudflare.com/durable-objects/best-practices/websockets/ Cloudflare WebSocket Best Practices}
16
16
  */
17
- import { Layer, Mailbox, RpcMessage, RpcServer } from '@livestore/utils/effect';
17
+ import { Context, Layer, Mailbox, RpcMessage, RpcServer } from '@livestore/utils/effect';
18
18
  import type * as CfTypes from '../cf-types.ts';
19
+ declare const WsContext_base: Context.TagClass<WsContext, "WsContext", {
20
+ readonly ws: CfTypes.WebSocket;
21
+ }>;
22
+ /**
23
+ * Context service providing access to the current WebSocket.
24
+ * This is useful for reading WebSocket attachment data (e.g., forwarded headers)
25
+ * inside RPC handlers.
26
+ */
27
+ export declare class WsContext extends WsContext_base {
28
+ }
19
29
  /**
20
30
  * Configuration options for setting up WebSocket RPC on a Durable Object.
21
31
  */
@@ -28,8 +38,22 @@ export interface DurableObjectWebSocketRpcConfig {
28
38
  * - 'accept': Use traditional WebSocket handling (not yet implemented)
29
39
  */
30
40
  webSocketMode: 'hibernate' | 'accept';
31
- /** Effect RPC layer that defines the available RPC methods and handlers */
32
- rpcLayer: Layer.Layer<never, never, RpcServer.Protocol>;
41
+ /**
42
+ * Effect RPC layer that requires `RpcServer.Protocol` (and `WsContext` if used)
43
+ * and provides the RPC server runtime.
44
+ *
45
+ * This is typically created by:
46
+ * ```typescript
47
+ * RpcServer.layer(MyRpcs).pipe(Layer.provide(handlersLayer))
48
+ * ```
49
+ *
50
+ * `WsContext` is provided by the WebSocket protocol layer, so handlers can access
51
+ * WebSocket attachment data (e.g., forwarded headers stored after WebSocket upgrade).
52
+ *
53
+ * The layer requirements (`RIn`) must be a subset of `RpcServer.Protocol | WsContext`,
54
+ * which are both provided by the WebSocket protocol layer.
55
+ */
56
+ rpcLayer: Layer.Layer<never, never, RpcServer.Protocol | WsContext>;
33
57
  /** Function to get access to incoming requests */
34
58
  onMessage?: (msg: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void;
35
59
  mainLayer?: Layer.Layer<never, never, never>;
@@ -107,4 +131,5 @@ export interface WsRpcServerArgs {
107
131
  /** Mailbox queue for receiving incoming messages from the WebSocket */
108
132
  incomingQueue: Mailbox.Mailbox<Uint8Array<ArrayBufferLike> | string>;
109
133
  }
134
+ export {};
110
135
  //# sourceMappingURL=ws-rpc-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws-rpc-server.d.ts","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAIL,KAAK,EAGL,OAAO,EACP,UAAU,EAEV,SAAS,EAGV,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAE9C;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC,aAAa,CAAA;IAC7B;;;;OAIG;IACH,aAAa,EAAE,WAAW,GAAG,QAAQ,CAAA;IACrC,2EAA2E;IAC3E,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IACvD,kDAAkD;IAClD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;IAC9E,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;CAC7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,8BAA8B,GAAI,4DAM5C,+BAA+B;;;CAsFjC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;IAClF,uEAAuE;IACvE,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,CAAA;CACrE"}
1
+ {"version":3,"file":"ws-rpc-server.d.ts","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACL,OAAO,EAIP,KAAK,EAGL,OAAO,EACP,UAAU,EAEV,SAAS,EAGV,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;;iBAOoC,OAAO,CAAC,SAAS;;AALnG;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,cAAyE;CAAG;AAE3G;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC,aAAa,CAAA;IAC7B;;;;OAIG;IACH,aAAa,EAAE,WAAW,GAAG,QAAQ,CAAA;IACrC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IACnE,kDAAkD;IAClD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;IAC9E,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;CAC7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,8BAA8B,GAAI,4DAM5C,+BAA+B;;;CAsFjC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;IAClF,uEAAuE;IACvE,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,CAAA;CACrE"}
@@ -15,7 +15,14 @@
15
15
  * @see {@link https://developers.cloudflare.com/durable-objects/best-practices/websockets/ Cloudflare WebSocket Best Practices}
16
16
  */
17
17
  import { notYetImplemented, omitUndefineds } from '@livestore/utils';
18
- import { constVoid, Effect, Exit, Layer, Logger, LogLevel, Mailbox, RpcMessage, RpcSerialization, RpcServer, Scope, Stream, } from '@livestore/utils/effect';
18
+ import { Context, constVoid, Effect, Exit, Layer, Logger, LogLevel, Mailbox, RpcMessage, RpcSerialization, RpcServer, Scope, Stream, } from '@livestore/utils/effect';
19
+ /**
20
+ * Context service providing access to the current WebSocket.
21
+ * This is useful for reading WebSocket attachment data (e.g., forwarded headers)
22
+ * inside RPC handlers.
23
+ */
24
+ export class WsContext extends Context.Tag('WsContext')() {
25
+ }
19
26
  /**
20
27
  * Sets up WebSocket RPC functionality on a Cloudflare Durable Object with hibernation support.
21
28
  *
@@ -133,12 +140,15 @@ export const setupDurableObjectWebSocketRpc = ({ doSelf, rpcLayer, webSocketMode
133
140
  * This layer handles the low-level WebSocket protocol details for RPC communication,
134
141
  * including message serialization, routing, and error handling.
135
142
  *
143
+ * Also provides `WsContext` with the current WebSocket so handlers can access
144
+ * WebSocket attachment data (e.g., forwarded headers).
145
+ *
136
146
  * @param args Configuration for WebSocket RPC protocol
137
- * @returns Effect layer that provides RPC server protocol functionality
147
+ * @returns Effect layer that provides RPC server protocol functionality and WsContext
138
148
  *
139
149
  * @internal This is typically used internally by `setupDurableObjectWebSocketRpc`
140
150
  */
141
- export const layerRpcServerWebsocket = (args) => Layer.scoped(RpcServer.Protocol, makeSocketProtocol(args));
151
+ export const layerRpcServerWebsocket = (args) => Layer.mergeAll(Layer.scoped(RpcServer.Protocol, makeSocketProtocol(args)), Layer.succeed(WsContext, { ws: args.ws }));
142
152
  /**
143
153
  * Creates the low-level RPC protocol implementation for WebSocket communication.
144
154
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ws-rpc-server.js","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-rpc-server.js","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/common-cf",
3
- "version": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2",
3
+ "version": "0.0.0-snapshot-7594f44e1dae838d58f3489ee25a5df735c2dcb6",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -9,13 +9,13 @@
9
9
  },
10
10
  "dependencies": {
11
11
  "@cloudflare/workers-types": "4.20251118.0",
12
- "@livestore/utils": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2",
13
- "@livestore/common": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2"
12
+ "@livestore/common": "0.0.0-snapshot-7594f44e1dae838d58f3489ee25a5df735c2dcb6",
13
+ "@livestore/utils": "0.0.0-snapshot-7594f44e1dae838d58f3489ee25a5df735c2dcb6"
14
14
  },
15
15
  "devDependencies": {
16
16
  "vitest": "3.2.4",
17
17
  "wrangler": "4.42.2",
18
- "@livestore/utils-dev": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2"
18
+ "@livestore/utils-dev": "0.0.0-snapshot-7594f44e1dae838d58f3489ee25a5df735c2dcb6"
19
19
  },
20
20
  "files": [
21
21
  "dist",
@@ -17,6 +17,7 @@
17
17
 
18
18
  import { notYetImplemented, omitUndefineds } from '@livestore/utils'
19
19
  import {
20
+ Context,
20
21
  constVoid,
21
22
  Effect,
22
23
  Exit,
@@ -32,6 +33,13 @@ import {
32
33
  } from '@livestore/utils/effect'
33
34
  import type * as CfTypes from '../cf-types.ts'
34
35
 
36
+ /**
37
+ * Context service providing access to the current WebSocket.
38
+ * This is useful for reading WebSocket attachment data (e.g., forwarded headers)
39
+ * inside RPC handlers.
40
+ */
41
+ export class WsContext extends Context.Tag('WsContext')<WsContext, { readonly ws: CfTypes.WebSocket }>() {}
42
+
35
43
  /**
36
44
  * Configuration options for setting up WebSocket RPC on a Durable Object.
37
45
  */
@@ -44,8 +52,22 @@ export interface DurableObjectWebSocketRpcConfig {
44
52
  * - 'accept': Use traditional WebSocket handling (not yet implemented)
45
53
  */
46
54
  webSocketMode: 'hibernate' | 'accept'
47
- /** Effect RPC layer that defines the available RPC methods and handlers */
48
- rpcLayer: Layer.Layer<never, never, RpcServer.Protocol>
55
+ /**
56
+ * Effect RPC layer that requires `RpcServer.Protocol` (and `WsContext` if used)
57
+ * and provides the RPC server runtime.
58
+ *
59
+ * This is typically created by:
60
+ * ```typescript
61
+ * RpcServer.layer(MyRpcs).pipe(Layer.provide(handlersLayer))
62
+ * ```
63
+ *
64
+ * `WsContext` is provided by the WebSocket protocol layer, so handlers can access
65
+ * WebSocket attachment data (e.g., forwarded headers stored after WebSocket upgrade).
66
+ *
67
+ * The layer requirements (`RIn`) must be a subset of `RpcServer.Protocol | WsContext`,
68
+ * which are both provided by the WebSocket protocol layer.
69
+ */
70
+ rpcLayer: Layer.Layer<never, never, RpcServer.Protocol | WsContext>
49
71
  /** Function to get access to incoming requests */
50
72
  onMessage?: (msg: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void
51
73
  mainLayer?: Layer.Layer<never, never, never>
@@ -221,13 +243,16 @@ export interface WsRpcServerArgs {
221
243
  * This layer handles the low-level WebSocket protocol details for RPC communication,
222
244
  * including message serialization, routing, and error handling.
223
245
  *
246
+ * Also provides `WsContext` with the current WebSocket so handlers can access
247
+ * WebSocket attachment data (e.g., forwarded headers).
248
+ *
224
249
  * @param args Configuration for WebSocket RPC protocol
225
- * @returns Effect layer that provides RPC server protocol functionality
250
+ * @returns Effect layer that provides RPC server protocol functionality and WsContext
226
251
  *
227
252
  * @internal This is typically used internally by `setupDurableObjectWebSocketRpc`
228
253
  */
229
254
  export const layerRpcServerWebsocket = (args: WsRpcServerArgs) =>
230
- Layer.scoped(RpcServer.Protocol, makeSocketProtocol(args))
255
+ Layer.mergeAll(Layer.scoped(RpcServer.Protocol, makeSocketProtocol(args)), Layer.succeed(WsContext, { ws: args.ws }))
231
256
 
232
257
  /**
233
258
  * Creates the low-level RPC protocol implementation for WebSocket communication.