@livestore/common-cf 0.0.0-snapshot-96f3cc0bb1e5feea4aa4876aeeecc6c4a8e553d1 → 0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2
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,18 +14,8 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @see {@link https://developers.cloudflare.com/durable-objects/best-practices/websockets/ Cloudflare WebSocket Best Practices}
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
17
|
+
import { 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
|
-
}
|
|
29
19
|
/**
|
|
30
20
|
* Configuration options for setting up WebSocket RPC on a Durable Object.
|
|
31
21
|
*/
|
|
@@ -38,22 +28,8 @@ export interface DurableObjectWebSocketRpcConfig {
|
|
|
38
28
|
* - 'accept': Use traditional WebSocket handling (not yet implemented)
|
|
39
29
|
*/
|
|
40
30
|
webSocketMode: 'hibernate' | 'accept';
|
|
41
|
-
/**
|
|
42
|
-
|
|
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>;
|
|
31
|
+
/** Effect RPC layer that defines the available RPC methods and handlers */
|
|
32
|
+
rpcLayer: Layer.Layer<never, never, RpcServer.Protocol>;
|
|
57
33
|
/** Function to get access to incoming requests */
|
|
58
34
|
onMessage?: (msg: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void;
|
|
59
35
|
mainLayer?: Layer.Layer<never, never, never>;
|
|
@@ -131,5 +107,4 @@ export interface WsRpcServerArgs {
|
|
|
131
107
|
/** Mailbox queue for receiving incoming messages from the WebSocket */
|
|
132
108
|
incomingQueue: Mailbox.Mailbox<Uint8Array<ArrayBufferLike> | string>;
|
|
133
109
|
}
|
|
134
|
-
export {};
|
|
135
110
|
//# 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,
|
|
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"}
|
|
@@ -15,14 +15,7 @@
|
|
|
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 {
|
|
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
|
-
}
|
|
18
|
+
import { constVoid, Effect, Exit, Layer, Logger, LogLevel, Mailbox, RpcMessage, RpcSerialization, RpcServer, Scope, Stream, } from '@livestore/utils/effect';
|
|
26
19
|
/**
|
|
27
20
|
* Sets up WebSocket RPC functionality on a Cloudflare Durable Object with hibernation support.
|
|
28
21
|
*
|
|
@@ -140,15 +133,12 @@ export const setupDurableObjectWebSocketRpc = ({ doSelf, rpcLayer, webSocketMode
|
|
|
140
133
|
* This layer handles the low-level WebSocket protocol details for RPC communication,
|
|
141
134
|
* including message serialization, routing, and error handling.
|
|
142
135
|
*
|
|
143
|
-
* Also provides `WsContext` with the current WebSocket so handlers can access
|
|
144
|
-
* WebSocket attachment data (e.g., forwarded headers).
|
|
145
|
-
*
|
|
146
136
|
* @param args Configuration for WebSocket RPC protocol
|
|
147
|
-
* @returns Effect layer that provides RPC server protocol functionality
|
|
137
|
+
* @returns Effect layer that provides RPC server protocol functionality
|
|
148
138
|
*
|
|
149
139
|
* @internal This is typically used internally by `setupDurableObjectWebSocketRpc`
|
|
150
140
|
*/
|
|
151
|
-
export const layerRpcServerWebsocket = (args) => Layer.
|
|
141
|
+
export const layerRpcServerWebsocket = (args) => Layer.scoped(RpcServer.Protocol, makeSocketProtocol(args));
|
|
152
142
|
/**
|
|
153
143
|
* Creates the low-level RPC protocol implementation for WebSocket communication.
|
|
154
144
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-rpc-server.js","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACL,
|
|
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-
|
|
3
|
+
"version": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2",
|
|
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/
|
|
13
|
-
"@livestore/
|
|
12
|
+
"@livestore/utils": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2",
|
|
13
|
+
"@livestore/common": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2"
|
|
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-
|
|
18
|
+
"@livestore/utils-dev": "0.0.0-snapshot-1f9c9c089ebe6383b200e90029453307ef7a8ae2"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"dist",
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
|
|
18
18
|
import { notYetImplemented, omitUndefineds } from '@livestore/utils'
|
|
19
19
|
import {
|
|
20
|
-
Context,
|
|
21
20
|
constVoid,
|
|
22
21
|
Effect,
|
|
23
22
|
Exit,
|
|
@@ -33,13 +32,6 @@ import {
|
|
|
33
32
|
} from '@livestore/utils/effect'
|
|
34
33
|
import type * as CfTypes from '../cf-types.ts'
|
|
35
34
|
|
|
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
|
-
|
|
43
35
|
/**
|
|
44
36
|
* Configuration options for setting up WebSocket RPC on a Durable Object.
|
|
45
37
|
*/
|
|
@@ -52,22 +44,8 @@ export interface DurableObjectWebSocketRpcConfig {
|
|
|
52
44
|
* - 'accept': Use traditional WebSocket handling (not yet implemented)
|
|
53
45
|
*/
|
|
54
46
|
webSocketMode: 'hibernate' | 'accept'
|
|
55
|
-
/**
|
|
56
|
-
|
|
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>
|
|
47
|
+
/** Effect RPC layer that defines the available RPC methods and handlers */
|
|
48
|
+
rpcLayer: Layer.Layer<never, never, RpcServer.Protocol>
|
|
71
49
|
/** Function to get access to incoming requests */
|
|
72
50
|
onMessage?: (msg: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void
|
|
73
51
|
mainLayer?: Layer.Layer<never, never, never>
|
|
@@ -243,16 +221,13 @@ export interface WsRpcServerArgs {
|
|
|
243
221
|
* This layer handles the low-level WebSocket protocol details for RPC communication,
|
|
244
222
|
* including message serialization, routing, and error handling.
|
|
245
223
|
*
|
|
246
|
-
* Also provides `WsContext` with the current WebSocket so handlers can access
|
|
247
|
-
* WebSocket attachment data (e.g., forwarded headers).
|
|
248
|
-
*
|
|
249
224
|
* @param args Configuration for WebSocket RPC protocol
|
|
250
|
-
* @returns Effect layer that provides RPC server protocol functionality
|
|
225
|
+
* @returns Effect layer that provides RPC server protocol functionality
|
|
251
226
|
*
|
|
252
227
|
* @internal This is typically used internally by `setupDurableObjectWebSocketRpc`
|
|
253
228
|
*/
|
|
254
229
|
export const layerRpcServerWebsocket = (args: WsRpcServerArgs) =>
|
|
255
|
-
Layer.
|
|
230
|
+
Layer.scoped(RpcServer.Protocol, makeSocketProtocol(args))
|
|
256
231
|
|
|
257
232
|
/**
|
|
258
233
|
* Creates the low-level RPC protocol implementation for WebSocket communication.
|