@livestore/common-cf 0.4.0 → 0.5.0-dev.0
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/declare/cf-declare.d.ts +1 -21
- package/dist/declare/cf-declare.d.ts.map +1 -1
- package/dist/do-rpc/client.d.ts.map +1 -1
- package/dist/do-rpc/client.js +17 -27
- package/dist/do-rpc/client.js.map +1 -1
- package/dist/do-rpc/client.test.d.ts +2 -0
- package/dist/do-rpc/client.test.d.ts.map +1 -0
- package/dist/do-rpc/client.test.js +99 -0
- package/dist/do-rpc/client.test.js.map +1 -0
- package/dist/do-rpc/rpc.test.js +25 -57
- package/dist/do-rpc/rpc.test.js.map +1 -1
- package/dist/do-rpc/server.d.ts +9 -4
- package/dist/do-rpc/server.d.ts.map +1 -1
- package/dist/do-rpc/server.js +84 -43
- package/dist/do-rpc/server.js.map +1 -1
- package/dist/do-rpc/test-fixtures/rpc-schema.d.ts +27 -27
- package/dist/do-rpc/test-fixtures/rpc-schema.js +11 -11
- package/dist/do-rpc/test-fixtures/worker.d.ts.map +1 -1
- package/dist/do-rpc/test-fixtures/worker.js +9 -9
- package/dist/do-rpc/test-fixtures/worker.js.map +1 -1
- package/dist/ws-rpc/test-fixtures/rpc-schema.d.ts +27 -27
- package/dist/ws-rpc/test-fixtures/rpc-schema.js +9 -9
- package/dist/ws-rpc/ws-rpc-server.d.ts +6 -5
- package/dist/ws-rpc/ws-rpc-server.d.ts.map +1 -1
- package/dist/ws-rpc/ws-rpc-server.js +17 -17
- package/dist/ws-rpc/ws-rpc-server.js.map +1 -1
- package/dist/ws-rpc/ws-rpc.test.js +27 -59
- package/dist/ws-rpc/ws-rpc.test.js.map +1 -1
- package/package.json +11 -20
- package/src/declare/cf-declare.ts +1 -1
- package/src/do-rpc/client.test.ts +122 -0
- package/src/do-rpc/client.ts +21 -31
- package/src/do-rpc/rpc.test.ts +29 -59
- package/src/do-rpc/server.ts +119 -54
- package/src/do-rpc/test-fixtures/rpc-schema.ts +11 -11
- package/src/do-rpc/test-fixtures/worker.ts +9 -12
- package/src/ws-rpc/test-fixtures/rpc-schema.ts +9 -9
- package/src/ws-rpc/ws-rpc-server.ts +37 -28
- package/src/ws-rpc/ws-rpc.test.ts +31 -61
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @see {@link https://developers.cloudflare.com/durable-objects/best-practices/websockets/ Cloudflare WebSocket Best Practices}
|
|
16
16
|
*/
|
|
17
|
-
import { Context, Layer,
|
|
17
|
+
import { Context, Layer, Queue, RpcMessage, RpcSerialization, RpcServer, Scope } from '@livestore/utils/effect';
|
|
18
18
|
import type * as CfTypes from '../cf-types.ts';
|
|
19
|
-
declare const WsContext_base: Context.
|
|
19
|
+
declare const WsContext_base: Context.ServiceClass<WsContext, "WsContext", {
|
|
20
20
|
readonly ws: CfTypes.WebSocket;
|
|
21
21
|
}>;
|
|
22
22
|
/**
|
|
@@ -40,7 +40,7 @@ export interface DurableObjectWebSocketRpcConfig {
|
|
|
40
40
|
webSocketMode: 'hibernate' | 'accept';
|
|
41
41
|
/**
|
|
42
42
|
* Effect RPC layer that requires `RpcServer.Protocol` (and `WsContext` if used)
|
|
43
|
-
* and provides the RPC server
|
|
43
|
+
* and provides the RPC server services.
|
|
44
44
|
*
|
|
45
45
|
* This is typically created by:
|
|
46
46
|
* ```typescript
|
|
@@ -127,9 +127,10 @@ export declare const setupDurableObjectWebSocketRpc: ({ doSelf, rpcLayer, webSoc
|
|
|
127
127
|
*/
|
|
128
128
|
export interface WsRpcServerArgs {
|
|
129
129
|
ws: CfTypes.WebSocket;
|
|
130
|
+
scope: Scope.Scope;
|
|
130
131
|
onMessage?: (message: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void;
|
|
131
|
-
/**
|
|
132
|
-
incomingQueue:
|
|
132
|
+
/** Queue for receiving incoming messages from the WebSocket */
|
|
133
|
+
incomingQueue: Queue.Queue<Uint8Array | string>;
|
|
133
134
|
}
|
|
134
135
|
/**
|
|
135
136
|
* Creates an RPC server protocol layer for WebSocket communication.
|
|
@@ -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,EACL,OAAO,EAIP,KAAK,
|
|
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,EAEL,KAAK,EAEL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,KAAK,EAEN,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;;iBAO2B,OAAO,CAAC,SAAS;;AAL1F;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,cAA6E;CAAG;AAE/G;;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,CAAC,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,8BAA8B,GAAI,4DAM5C,+BAA+B;;;CA0FjC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC,SAAS,CAAA;IACrB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;IAClB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;IAClF,+DAA+D;IAC/D,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,CAAA;CAChD;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,eAAe,0FAI1D,CAAA"}
|
|
@@ -15,13 +15,13 @@
|
|
|
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 { Context,
|
|
18
|
+
import { Context, Effect, Function, Exit, Layer, Logger, Queue, References, RpcMessage, RpcSerialization, RpcServer, Scope, Stream, } from '@livestore/utils/effect';
|
|
19
19
|
/**
|
|
20
20
|
* Context service providing access to the current WebSocket.
|
|
21
21
|
* This is useful for reading WebSocket attachment data (e.g., forwarded headers)
|
|
22
22
|
* inside RPC handlers.
|
|
23
23
|
*/
|
|
24
|
-
export class WsContext extends Context.
|
|
24
|
+
export class WsContext extends Context.Service()('WsContext') {
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Sets up WebSocket RPC functionality on a Cloudflare Durable Object with hibernation support.
|
|
@@ -94,26 +94,25 @@ export const setupDurableObjectWebSocketRpc = ({ doSelf, rpcLayer, webSocketMode
|
|
|
94
94
|
}
|
|
95
95
|
yield* Effect.logDebug(`Launching WebSocket Effect RPC server`);
|
|
96
96
|
const scope = yield* Scope.make();
|
|
97
|
-
const incomingQueue = yield*
|
|
98
|
-
yield* Scope.addFinalizer(scope,
|
|
97
|
+
const incomingQueue = yield* Queue.unbounded();
|
|
98
|
+
yield* Scope.addFinalizer(scope, Queue.shutdown(incomingQueue).pipe(Effect.asVoid));
|
|
99
99
|
const ProtocolLive = layerRpcServerWebsocket({
|
|
100
100
|
ws,
|
|
101
|
+
scope,
|
|
101
102
|
incomingQueue,
|
|
102
103
|
...omitUndefineds({ onMessage }),
|
|
103
104
|
}).pipe(Layer.provide(RpcSerialization.layerJson));
|
|
104
105
|
const ServerLive = rpcLayer.pipe(Layer.provide(ProtocolLive));
|
|
105
106
|
yield* Layer.launch(ServerLive).pipe(Effect.tapCauseLogPretty, Effect.forkIn(scope));
|
|
106
|
-
const
|
|
107
|
+
const services = yield* Effect.context();
|
|
107
108
|
const ctx = {
|
|
108
109
|
scope,
|
|
109
|
-
onMessage: (message) => incomingQueue
|
|
110
|
-
.offer(message)
|
|
111
|
-
.pipe(Effect.asVoid, Effect.withSpan('ws-rpc-server/onMessage', { root: true }), Effect.provide(runtime), Effect.runPromise),
|
|
110
|
+
onMessage: (message) => Queue.offer(incomingQueue, message).pipe(Effect.asVoid, Effect.withSpan('ws-rpc-server/onMessage', { root: true }), Effect.runPromiseWith(services)),
|
|
112
111
|
};
|
|
113
112
|
serverCtxMap.set(ws, ctx);
|
|
114
113
|
return ctx;
|
|
115
|
-
}).pipe(Effect.tapCauseLogPretty, Logger.
|
|
116
|
-
|
|
114
|
+
}).pipe(Effect.tapCauseLogPretty, Effect.annotateLogs({ thread: 'ws-rpc-server' }), Effect.provide(Layer.mergeAll(Logger.layer([Logger.consoleStructured]), Layer.succeed(References.MinimumLogLevel, 'Debug'), // Useful for debugging
|
|
115
|
+
mainLayer ?? Layer.empty)), Effect.withSpan('effect-ws-rpc-server'), Effect.runPromise);
|
|
117
116
|
const webSocketMessage = async (ws, message) => {
|
|
118
117
|
// console.log('webSocketMessage', message, serverCtxMap.has(ws))
|
|
119
118
|
const { onMessage } = await launchServer(ws);
|
|
@@ -148,7 +147,7 @@ export const setupDurableObjectWebSocketRpc = ({ doSelf, rpcLayer, webSocketMode
|
|
|
148
147
|
*
|
|
149
148
|
* @internal This is typically used internally by `setupDurableObjectWebSocketRpc`
|
|
150
149
|
*/
|
|
151
|
-
export const layerRpcServerWebsocket = (args) => Layer.mergeAll(Layer.
|
|
150
|
+
export const layerRpcServerWebsocket = (args) => Layer.mergeAll(Layer.effect(RpcServer.Protocol, makeSocketProtocol(args)), Layer.succeed(WsContext, WsContext.of({ ws: args.ws })));
|
|
152
151
|
/**
|
|
153
152
|
* Creates the low-level RPC protocol implementation for WebSocket communication.
|
|
154
153
|
*
|
|
@@ -160,12 +159,12 @@ export const layerRpcServerWebsocket = (args) => Layer.mergeAll(Layer.scoped(Rpc
|
|
|
160
159
|
*
|
|
161
160
|
* @internal Used internally by `layerRpcServerWebsocket`
|
|
162
161
|
*/
|
|
163
|
-
const makeSocketProtocol = ({ incomingQueue, ws, onMessage }) => Effect.gen(function* () {
|
|
162
|
+
const makeSocketProtocol = ({ incomingQueue, scope, ws, onMessage }) => Effect.gen(function* () {
|
|
164
163
|
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
165
|
-
const disconnects = yield*
|
|
164
|
+
const disconnects = yield* Queue.unbounded();
|
|
166
165
|
const writeRaw = (msg) => Effect.succeed(ws.send(msg));
|
|
167
166
|
let writeRequest;
|
|
168
|
-
const parser = serialization.
|
|
167
|
+
const parser = serialization.makeUnsafe();
|
|
169
168
|
const id = 0;
|
|
170
169
|
const write = (response) => {
|
|
171
170
|
try {
|
|
@@ -182,7 +181,7 @@ const makeSocketProtocol = ({ incomingQueue, ws, onMessage }) => Effect.gen(func
|
|
|
182
181
|
const protocol = yield* RpcServer.Protocol.make((writeRequest_) => {
|
|
183
182
|
writeRequest = writeRequest_;
|
|
184
183
|
// Start processing messages now that writeRequest is available
|
|
185
|
-
const startProcessing =
|
|
184
|
+
const startProcessing = Stream.fromQueue(incomingQueue).pipe(Stream.tap((data) => {
|
|
186
185
|
try {
|
|
187
186
|
const decoded = parser.decode(data);
|
|
188
187
|
if (decoded.length === 0)
|
|
@@ -197,13 +196,13 @@ const makeSocketProtocol = ({ incomingQueue, ws, onMessage }) => Effect.gen(func
|
|
|
197
196
|
}
|
|
198
197
|
return writeRequest(id, request);
|
|
199
198
|
},
|
|
200
|
-
step: constVoid,
|
|
199
|
+
step: Function.constVoid,
|
|
201
200
|
});
|
|
202
201
|
}
|
|
203
202
|
catch (cause) {
|
|
204
203
|
return Effect.orDie(writeRaw(parser.encode(RpcMessage.ResponseDefectEncoded(cause))));
|
|
205
204
|
}
|
|
206
|
-
}), Stream.runDrain, Effect.tapCauseLogPretty, Effect.
|
|
205
|
+
}), Stream.runDrain, Effect.tapCauseLogPretty, Effect.forkIn(scope));
|
|
207
206
|
// Start the message processing
|
|
208
207
|
return Effect.map(startProcessing, () => ({
|
|
209
208
|
disconnects,
|
|
@@ -217,6 +216,7 @@ const makeSocketProtocol = ({ incomingQueue, ws, onMessage }) => Effect.gen(func
|
|
|
217
216
|
supportsAck: true,
|
|
218
217
|
supportsTransferables: false,
|
|
219
218
|
supportsSpanPropagation: true,
|
|
219
|
+
supportsNotifications: true,
|
|
220
220
|
}));
|
|
221
221
|
});
|
|
222
222
|
return protocol;
|
|
@@ -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,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"ws-rpc-server.js","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,114 +1,82 @@
|
|
|
1
1
|
import { expect } from 'vitest';
|
|
2
2
|
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { WranglerDevServer } from '@livestore/utils-dev/wrangler';
|
|
4
|
+
import { Effect, FetchHttpClient, Layer, Option, References, RpcClient, RpcSerialization, Socket, Stream, } from '@livestore/utils/effect';
|
|
5
5
|
import { PlatformNode } from '@livestore/utils/node';
|
|
6
6
|
import { TestRpcs } from "./test-fixtures/rpc-schema.js";
|
|
7
7
|
const testTimeout = 60_000;
|
|
8
8
|
const withWranglerTest = Vitest.makeWithTestCtx({
|
|
9
9
|
timeout: testTimeout,
|
|
10
|
-
makeLayer: () =>
|
|
10
|
+
makeLayer: () => WranglerDevServer.layer({
|
|
11
11
|
cwd: `${import.meta.dirname}/test-fixtures`,
|
|
12
|
-
}).pipe(Layer.provide(Layer.mergeAll(PlatformNode.
|
|
12
|
+
}).pipe(Layer.provide(Layer.mergeAll(PlatformNode.NodeServices.layer, FetchHttpClient.layer, Layer.succeed(References.MinimumLogLevel, 'Debug')))),
|
|
13
13
|
});
|
|
14
14
|
const ProtocolLive = Layer.suspend(() => Effect.gen(function* () {
|
|
15
|
-
const server = yield*
|
|
15
|
+
const server = yield* WranglerDevServer.WranglerDevServer;
|
|
16
16
|
return RpcClient.layerProtocolSocket().pipe(Layer.provide(Socket.layerWebSocket(`ws://localhost:${server.port}`)), Layer.provide(Socket.layerWebSocketConstructorGlobal), Layer.provide(RpcSerialization.layerJson));
|
|
17
|
-
}).pipe(Layer.
|
|
17
|
+
}).pipe(Layer.unwrap));
|
|
18
18
|
Vitest.describe('Durable Object WebSocket RPC', { timeout: testTimeout }, () => {
|
|
19
19
|
// Direct HTTP RPC client tests
|
|
20
|
-
Vitest.
|
|
20
|
+
Vitest.live('should call ping method', (test) => Effect.gen(function* () {
|
|
21
21
|
const client = yield* RpcClient.make(TestRpcs);
|
|
22
22
|
const result = yield* client.Ping({ message: 'Hello HTTP RPC' });
|
|
23
23
|
expect(result).toEqual({ response: 'Pong: Hello HTTP RPC' });
|
|
24
24
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
25
|
-
Vitest.
|
|
25
|
+
Vitest.live('should call echo method', (test) => Effect.gen(function* () {
|
|
26
26
|
const client = yield* RpcClient.make(TestRpcs);
|
|
27
27
|
const result = yield* client.Echo({ text: 'Echo' });
|
|
28
28
|
expect(result).toEqual({ echo: 'Echo: Echo' });
|
|
29
29
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
30
|
-
Vitest.
|
|
30
|
+
Vitest.live('should call add method', (test) => Effect.gen(function* () {
|
|
31
31
|
const client = yield* RpcClient.make(TestRpcs);
|
|
32
32
|
const result = yield* client.Add({ a: 15, b: 25 });
|
|
33
33
|
expect(result).toEqual({ result: 40 });
|
|
34
34
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
35
|
-
Vitest.
|
|
35
|
+
Vitest.live('should handle RPC fail method', (test) => Effect.gen(function* () {
|
|
36
36
|
const client = yield* RpcClient.make(TestRpcs);
|
|
37
37
|
const error = yield* client.Fail({ message: 'test http failure' }).pipe(Effect.exit);
|
|
38
38
|
expect(error.toString()).toMatchInlineSnapshot(`
|
|
39
|
-
"
|
|
40
|
-
"_id": "Exit",
|
|
41
|
-
"_tag": "Failure",
|
|
42
|
-
"cause": {
|
|
43
|
-
"_id": "Cause",
|
|
44
|
-
"_tag": "Fail",
|
|
45
|
-
"failure": "RPC failure: test http failure"
|
|
46
|
-
}
|
|
47
|
-
}"
|
|
39
|
+
"Failure(Cause([Fail("RPC failure: test http failure")]))"
|
|
48
40
|
`);
|
|
49
41
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
50
|
-
Vitest.
|
|
42
|
+
Vitest.live('should handle defect method', (test) => Effect.gen(function* () {
|
|
51
43
|
const client = yield* RpcClient.make(TestRpcs);
|
|
52
44
|
const error = yield* client.Defect({ message: 'test http defect' }).pipe(Effect.exit);
|
|
53
45
|
expect(error.toString()).toMatchInlineSnapshot(`
|
|
54
|
-
"
|
|
55
|
-
"_id": "Exit",
|
|
56
|
-
"_tag": "Failure",
|
|
57
|
-
"cause": {
|
|
58
|
-
"_id": "Cause",
|
|
59
|
-
"_tag": "Die",
|
|
60
|
-
"defect": "some defect: test http defect"
|
|
61
|
-
}
|
|
62
|
-
}"
|
|
46
|
+
"Failure(Cause([Die("some defect: test http defect")]))"
|
|
63
47
|
`);
|
|
64
48
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
65
|
-
Vitest.
|
|
49
|
+
Vitest.live('should handle streaming RPC via HTTP', (test) => Effect.gen(function* () {
|
|
66
50
|
const client = yield* RpcClient.make(TestRpcs);
|
|
67
51
|
const stream = client.Stream({}).pipe(Stream.take(4), Stream.map((c) => c.maybeNumber.pipe(Option.getOrUndefined)));
|
|
68
|
-
const
|
|
69
|
-
expect(
|
|
52
|
+
const result = yield* Stream.runCollect(stream);
|
|
53
|
+
expect(result).toEqual([1, 4, 9, 16]); // squares of 1,2,3,4
|
|
70
54
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
71
|
-
Vitest.
|
|
55
|
+
Vitest.live('should handle streaming RPC with error via HTTP', (test) => Effect.gen(function* () {
|
|
72
56
|
const client = yield* RpcClient.make(TestRpcs);
|
|
73
57
|
const stream = client.StreamError({ count: 5, errorAfter: 4 });
|
|
74
58
|
const error = yield* Stream.runCollect(stream).pipe(Effect.exit);
|
|
75
59
|
expect(error.toString()).toMatchInlineSnapshot(`
|
|
76
|
-
"
|
|
77
|
-
"_id": "Exit",
|
|
78
|
-
"_tag": "Failure",
|
|
79
|
-
"cause": {
|
|
80
|
-
"_id": "Cause",
|
|
81
|
-
"_tag": "Fail",
|
|
82
|
-
"failure": "Stream error after 4: got 9"
|
|
83
|
-
}
|
|
84
|
-
}"
|
|
60
|
+
"Failure(Cause([Fail("Stream error after 4: got 9")]))"
|
|
85
61
|
`);
|
|
86
62
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
87
|
-
Vitest.
|
|
63
|
+
Vitest.live('should handle streaming RPC with defect via HTTP', (test) => Effect.gen(function* () {
|
|
88
64
|
const client = yield* RpcClient.make(TestRpcs);
|
|
89
65
|
const stream = client.StreamDefect({ count: 4, defectAfter: 1 });
|
|
90
66
|
const error = yield* Stream.runCollect(stream).pipe(Effect.exit);
|
|
91
67
|
expect(error.toString()).toMatchInlineSnapshot(`
|
|
92
|
-
"
|
|
93
|
-
"_id": "Exit",
|
|
94
|
-
"_tag": "Failure",
|
|
95
|
-
"cause": {
|
|
96
|
-
"_id": "Cause",
|
|
97
|
-
"_tag": "Die",
|
|
98
|
-
"defect": "Stream defect after 1: got 4"
|
|
99
|
-
}
|
|
100
|
-
}"
|
|
68
|
+
"Failure(Cause([Die("Stream defect after 1: got 4")]))"
|
|
101
69
|
`);
|
|
102
70
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
103
|
-
Vitest.
|
|
71
|
+
Vitest.live('should handle stream interruption via HTTP', (test) => Effect.gen(function* () {
|
|
104
72
|
const client = yield* RpcClient.make(TestRpcs);
|
|
105
73
|
const stream = client.StreamInterruptible({ delay: 50, interruptAfterCount: 3 }).pipe(Stream.take(3));
|
|
106
|
-
const
|
|
107
|
-
expect(
|
|
74
|
+
const result = yield* Stream.runCollect(stream);
|
|
75
|
+
expect(result).toEqual([1, 2, 3]);
|
|
108
76
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
109
77
|
});
|
|
110
78
|
Vitest.describe('Hibernation Tests', { timeout: 25000 }, () => {
|
|
111
|
-
Vitest.
|
|
79
|
+
Vitest.live('should maintain RPC functionality after hibernation', (test) => Effect.gen(function* () {
|
|
112
80
|
console.log('🧪 Testing RPC server persistence across hibernation...');
|
|
113
81
|
// Step 1: Create client and test initial functionality
|
|
114
82
|
console.log('Step 1: Establishing initial connection and testing RPC methods...');
|
|
@@ -149,12 +117,12 @@ Vitest.describe('Hibernation Tests', { timeout: 25000 }, () => {
|
|
|
149
117
|
// Step 4: Test streaming after hibernation
|
|
150
118
|
console.log('Testing streaming after hibernation...');
|
|
151
119
|
const stream = client.Stream({}).pipe(Stream.take(3), Stream.map((c) => c.maybeNumber.pipe(Option.getOrUndefined)));
|
|
152
|
-
const
|
|
153
|
-
expect(
|
|
120
|
+
const result = yield* Stream.runCollect(stream);
|
|
121
|
+
expect(result).toEqual([1, 4, 9]); // squares of 1,2,3
|
|
154
122
|
console.log('✅ Streaming after hibernation successful');
|
|
155
123
|
console.log('🎉 All RPC operations successful after hibernation!');
|
|
156
124
|
}).pipe(Effect.provide(ProtocolLive), withWranglerTest(test)));
|
|
157
|
-
Vitest.
|
|
125
|
+
Vitest.live('should handle rapid operations after hibernation', (test) => Effect.gen(function* () {
|
|
158
126
|
console.log('🧪 Testing rapid operations after hibernation...');
|
|
159
127
|
console.log('Step 1: Establishing initial connection...');
|
|
160
128
|
const client = yield* RpcClient.make(TestRpcs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-rpc.test.js","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ws-rpc.test.js","sourceRoot":"","sources":["../../src/ws-rpc/ws-rpc.test.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.
|
|
3
|
+
"version": "0.5.0-dev.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,33 +23,24 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@cloudflare/workers-types": "4.20251118.0",
|
|
26
|
-
"@livestore/utils": "^0.
|
|
26
|
+
"@livestore/utils": "^0.5.0-dev.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"vitest": "
|
|
29
|
+
"vitest": "4.1.9",
|
|
30
30
|
"wrangler": "4.42.2",
|
|
31
|
-
"@livestore/utils-dev": "^0.
|
|
31
|
+
"@livestore/utils-dev": "^0.5.0-dev.0"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@effect/
|
|
35
|
-
"@effect/
|
|
36
|
-
"@effect/
|
|
37
|
-
"@effect/
|
|
38
|
-
"@effect/
|
|
39
|
-
"@effect/
|
|
40
|
-
"@effect/platform-browser": "^0.76.0",
|
|
41
|
-
"@effect/platform-bun": "^0.89.0",
|
|
42
|
-
"@effect/platform-node": "^0.106.0",
|
|
43
|
-
"@effect/printer": "^0.49.0",
|
|
44
|
-
"@effect/printer-ansi": "^0.49.0",
|
|
45
|
-
"@effect/rpc": "^0.75.1",
|
|
46
|
-
"@effect/sql": "^0.51.1",
|
|
47
|
-
"@effect/typeclass": "^0.40.0",
|
|
48
|
-
"@effect/vitest": "^0.29.0",
|
|
34
|
+
"@effect/opentelemetry": "^4.0.0-rc.111",
|
|
35
|
+
"@effect/platform-browser": "^4.0.0-rc.111",
|
|
36
|
+
"@effect/platform-bun": "^4.0.0-rc.111",
|
|
37
|
+
"@effect/platform-node": "^4.0.0-rc.111",
|
|
38
|
+
"@effect/platform-node-shared": "^4.0.0-rc.111",
|
|
39
|
+
"@effect/vitest": "^4.0.0-rc.111",
|
|
49
40
|
"@opentelemetry/api": "^1.9.0",
|
|
50
41
|
"@opentelemetry/resources": "^2.2.0",
|
|
51
42
|
"@standard-schema/spec": "^1.1.0",
|
|
52
|
-
"effect": "^
|
|
43
|
+
"effect": "^4.0.0-rc.111"
|
|
53
44
|
},
|
|
54
45
|
"$genie": {
|
|
55
46
|
"source": "package.json.genie.ts",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type * as CF from '@cloudflare/workers-types'
|
|
6
6
|
|
|
7
7
|
// oxlint-disable-next-line typescript-eslint(no-unsafe-type-assertion) -- bridging standard Web API types to Cloudflare Worker types; inherent platform type mismatch
|
|
8
|
-
const cfGlobalThis = globalThis as
|
|
8
|
+
const cfGlobalThis = globalThis as unknown as {
|
|
9
9
|
ReadableStream: typeof CF.ReadableStream
|
|
10
10
|
Request: typeof CF.Request
|
|
11
11
|
Response: typeof CF.Response
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest'
|
|
2
|
+
import { Effect, Fiber, Rpc, RpcClient, RpcGroup, Schema, Stream } from '@livestore/utils/effect'
|
|
3
|
+
|
|
4
|
+
import type * as CfTypes from '../cf-types.ts'
|
|
5
|
+
import { layerProtocolDurableObject } from './client.ts'
|
|
6
|
+
import { toDurableObjectHandler } from './server.ts'
|
|
7
|
+
|
|
8
|
+
class Rpcs extends RpcGroup.make(
|
|
9
|
+
Rpc.make('BigStream', {
|
|
10
|
+
payload: Schema.Struct({ n: Schema.Finite }),
|
|
11
|
+
success: Schema.Struct({
|
|
12
|
+
seqNum: Schema.Finite,
|
|
13
|
+
name: Schema.String,
|
|
14
|
+
args: Schema.Struct({ a: Schema.Finite, b: Schema.String }),
|
|
15
|
+
}),
|
|
16
|
+
stream: true,
|
|
17
|
+
}),
|
|
18
|
+
Rpc.make('Echo', {
|
|
19
|
+
payload: Schema.Struct({ text: Schema.String }),
|
|
20
|
+
success: Schema.Struct({ echo: Schema.String }),
|
|
21
|
+
}),
|
|
22
|
+
) {}
|
|
23
|
+
|
|
24
|
+
const READ_CHUNK_SIZE = 4096
|
|
25
|
+
|
|
26
|
+
const expectedRows = [
|
|
27
|
+
{
|
|
28
|
+
seqNum: 0,
|
|
29
|
+
name: 'event-0',
|
|
30
|
+
args: { a: 0, b: 'x'.repeat(READ_CHUNK_SIZE) },
|
|
31
|
+
},
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
const ServerLive = Rpcs.toLayer({
|
|
35
|
+
BigStream: ({ n }) => Stream.fromIterable(expectedRows.slice(0, n)),
|
|
36
|
+
Echo: ({ text }) => Effect.succeed({ echo: `Echo: ${text}` }),
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
Vitest.live('keeps a straddling stream frame isolated from a concurrent unary response', () =>
|
|
40
|
+
Effect.gen(function* () {
|
|
41
|
+
let signalFirstStreamRead = () => {}
|
|
42
|
+
const firstStreamReadDone = new Promise<void>((resolve) => {
|
|
43
|
+
signalFirstStreamRead = resolve
|
|
44
|
+
})
|
|
45
|
+
let releaseStreamTail = () => {}
|
|
46
|
+
const streamTailReleased = new Promise<void>((resolve) => {
|
|
47
|
+
releaseStreamTail = resolve
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
const streamWithGatedTail = (bytes: Uint8Array) => {
|
|
51
|
+
let pos = 0
|
|
52
|
+
let isFirstRead = true
|
|
53
|
+
const stream = new ReadableStream<Uint8Array>({
|
|
54
|
+
async pull(controller) {
|
|
55
|
+
if (pos >= bytes.length) return controller.close()
|
|
56
|
+
if (isFirstRead === false) await streamTailReleased
|
|
57
|
+
controller.enqueue(bytes.subarray(pos, pos + READ_CHUNK_SIZE))
|
|
58
|
+
pos += READ_CHUNK_SIZE
|
|
59
|
+
if (isFirstRead === true) {
|
|
60
|
+
isFirstRead = false
|
|
61
|
+
signalFirstStreamRead()
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
})
|
|
65
|
+
// oxlint-disable-next-line typescript-eslint(no-unsafe-type-assertion) -- bridge platform ReadableStream to the CF type, like server.ts
|
|
66
|
+
return stream as unknown as CfTypes.ReadableStream
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const ProtocolLive = layerProtocolDurableObject({
|
|
70
|
+
callRpc: makeGatedCallRpc(streamWithGatedTail),
|
|
71
|
+
callerContext: { bindingName: 'TEST', durableObjectId: 'id' },
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
const result = yield* Effect.gen(function* () {
|
|
75
|
+
const client = yield* RpcClient.make(Rpcs)
|
|
76
|
+
const streamFiber = yield* client.BigStream({ n: expectedRows.length }).pipe(Stream.runCollect, Effect.forkChild)
|
|
77
|
+
|
|
78
|
+
yield* Effect.promise(() => firstStreamReadDone)
|
|
79
|
+
const echo = yield* client.Echo({ text: 'hi' }).pipe(Effect.timeout('500 millis'))
|
|
80
|
+
yield* Effect.sync(() => releaseStreamTail())
|
|
81
|
+
|
|
82
|
+
const rows = yield* Fiber.join(streamFiber)
|
|
83
|
+
return { rows: Array.from(rows), echo }
|
|
84
|
+
}).pipe(Effect.provide(ProtocolLive), Effect.timeout('2 seconds'))
|
|
85
|
+
|
|
86
|
+
Vitest.expect(result.echo).toEqual({ echo: 'Echo: hi' })
|
|
87
|
+
Vitest.expect(result.rows).toEqual(expectedRows)
|
|
88
|
+
}),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
const makeGatedCallRpc =
|
|
92
|
+
(gateStream: (bytes: Uint8Array) => CfTypes.ReadableStream) =>
|
|
93
|
+
(payload: Uint8Array): Promise<Uint8Array | CfTypes.ReadableStream> =>
|
|
94
|
+
toDurableObjectHandler(Rpcs, { layer: ServerLive })(new Uint8Array(payload)).pipe(
|
|
95
|
+
Effect.flatMap(
|
|
96
|
+
// Narrow on `Uint8Array`; the `ReadableStream` global differs from `CfTypes` across envs.
|
|
97
|
+
(result): Effect.Effect<Uint8Array | CfTypes.ReadableStream> =>
|
|
98
|
+
result instanceof Uint8Array
|
|
99
|
+
? Effect.succeed(result)
|
|
100
|
+
: Effect.promise(() => collectBytes(result)).pipe(Effect.map(gateStream)),
|
|
101
|
+
),
|
|
102
|
+
Effect.runPromise,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
const collectBytes = async (stream: CfTypes.ReadableStream) => {
|
|
106
|
+
const reader = stream.getReader()
|
|
107
|
+
const parts: Uint8Array[] = []
|
|
108
|
+
let total = 0
|
|
109
|
+
for (;;) {
|
|
110
|
+
const { done, value } = await reader.read()
|
|
111
|
+
if (done === true) break
|
|
112
|
+
parts.push(value)
|
|
113
|
+
total += value.length
|
|
114
|
+
}
|
|
115
|
+
const out = new Uint8Array(total)
|
|
116
|
+
let offset = 0
|
|
117
|
+
for (const part of parts) {
|
|
118
|
+
out.set(part, offset)
|
|
119
|
+
offset += part.length
|
|
120
|
+
}
|
|
121
|
+
return out
|
|
122
|
+
}
|