@livestore/common-cf 0.4.0-dev.22 → 0.4.0-dev.24
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 +53 -6
- package/dist/declare/cf-declare.d.ts.map +1 -1
- package/dist/declare/cf-declare.js +9 -10
- package/dist/declare/cf-declare.js.map +1 -1
- package/dist/do-rpc/client.d.ts +1 -1
- package/dist/do-rpc/client.d.ts.map +1 -1
- package/dist/do-rpc/client.js +10 -17
- package/dist/do-rpc/client.js.map +1 -1
- package/dist/do-rpc/rpc.test.js +3 -3
- package/dist/do-rpc/rpc.test.js.map +1 -1
- package/dist/do-rpc/server.d.ts +1 -1
- package/dist/do-rpc/server.d.ts.map +1 -1
- package/dist/do-rpc/server.js +31 -21
- package/dist/do-rpc/server.js.map +1 -1
- package/dist/do-rpc/test-fixtures/worker.d.ts.map +1 -1
- package/dist/do-rpc/test-fixtures/worker.js +1 -1
- package/dist/do-rpc/test-fixtures/worker.js.map +1 -1
- package/dist/ws-rpc/test-fixtures/worker.d.ts.map +1 -1
- package/dist/ws-rpc/test-fixtures/worker.js +2 -2
- package/dist/ws-rpc/test-fixtures/worker.js.map +1 -1
- package/dist/ws-rpc/ws-rpc-server.d.ts +18 -3
- package/dist/ws-rpc/ws-rpc-server.d.ts.map +1 -1
- package/dist/ws-rpc/ws-rpc-server.js +3 -3
- package/dist/ws-rpc/ws-rpc-server.js.map +1 -1
- package/dist/ws-rpc/ws-rpc.test.js +3 -3
- package/dist/ws-rpc/ws-rpc.test.js.map +1 -1
- package/package.json +46 -13
- package/src/declare/cf-declare.ts +18 -10
- package/src/do-rpc/README.md +1 -2
- package/src/do-rpc/client.ts +15 -19
- package/src/do-rpc/rpc.test.ts +5 -3
- package/src/do-rpc/server.ts +45 -32
- package/src/do-rpc/test-fixtures/worker.ts +4 -2
- package/src/ws-rpc/README.md +1 -1
- package/src/ws-rpc/test-fixtures/worker.ts +6 -4
- package/src/ws-rpc/ws-rpc-server.ts +9 -8
- package/src/ws-rpc/ws-rpc.test.ts +5 -3
- package/src/do-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite +0 -0
- package/src/do-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-shm +0 -0
- package/src/do-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-wal +0 -0
- package/src/ws-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite +0 -0
- package/src/ws-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-shm +0 -0
- package/src/ws-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-wal +0 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/// <reference types="@cloudflare/workers-types" />
|
|
2
2
|
|
|
3
3
|
import { DurableObject } from 'cloudflare:workers'
|
|
4
|
+
|
|
4
5
|
import { Effect, Layer, Option, RpcServer, Schedule, Stream } from '@livestore/utils/effect'
|
|
6
|
+
|
|
5
7
|
import type * as CfTypes from '../../cf-types.ts'
|
|
6
8
|
import { setupDurableObjectWebSocketRpc } from '../ws-rpc-server.ts'
|
|
7
9
|
import { TestRpcs } from './rpc-schema.ts'
|
|
@@ -11,7 +13,7 @@ export interface Env {
|
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export class TestRpcDurableObject extends DurableObject<Env, unknown> {
|
|
14
|
-
__DURABLE_OBJECT_BRAND = 'TestRpcDurableObject' as never
|
|
16
|
+
override __DURABLE_OBJECT_BRAND = 'TestRpcDurableObject' as never
|
|
15
17
|
|
|
16
18
|
constructor(state: DurableObjectState, env: Env) {
|
|
17
19
|
super(state, env)
|
|
@@ -59,7 +61,7 @@ export class TestRpcDurableObject extends DurableObject<Env, unknown> {
|
|
|
59
61
|
})
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
async fetch(request: Request): Promise<Response> {
|
|
64
|
+
override async fetch(request: Request): Promise<Response> {
|
|
63
65
|
const upgradeHeader = request.headers.get('Upgrade')
|
|
64
66
|
if (upgradeHeader === undefined || upgradeHeader !== 'websocket') {
|
|
65
67
|
return new Response('Durable Object expected Upgrade: websocket', { status: 426 })
|
|
@@ -81,7 +83,7 @@ export default {
|
|
|
81
83
|
async fetch(request: Request, env: Env): Promise<Response> {
|
|
82
84
|
try {
|
|
83
85
|
const upgradeHeader = request.headers.get('Upgrade')
|
|
84
|
-
if (
|
|
86
|
+
if (upgradeHeader == null || upgradeHeader !== 'websocket') {
|
|
85
87
|
return new Response('Durable Object expected Upgrade: websocket', { status: 426 })
|
|
86
88
|
}
|
|
87
89
|
|
|
@@ -89,7 +91,7 @@ export default {
|
|
|
89
91
|
|
|
90
92
|
return serverDO.fetch(request)
|
|
91
93
|
} catch (error) {
|
|
92
|
-
return new Response(`Error: ${error}`, { status: 500 })
|
|
94
|
+
return new Response(`Error: ${String(error)}`, { status: 500 })
|
|
93
95
|
}
|
|
94
96
|
},
|
|
95
97
|
}
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
Scope,
|
|
32
32
|
Stream,
|
|
33
33
|
} from '@livestore/utils/effect'
|
|
34
|
+
|
|
34
35
|
import type * as CfTypes from '../cf-types.ts'
|
|
35
36
|
|
|
36
37
|
/**
|
|
@@ -70,7 +71,7 @@ export interface DurableObjectWebSocketRpcConfig {
|
|
|
70
71
|
rpcLayer: Layer.Layer<never, never, RpcServer.Protocol | WsContext>
|
|
71
72
|
/** Function to get access to incoming requests */
|
|
72
73
|
onMessage?: (msg: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void
|
|
73
|
-
mainLayer?: Layer.Layer<never
|
|
74
|
+
mainLayer?: Layer.Layer<never>
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
/**
|
|
@@ -154,7 +155,7 @@ export const setupDurableObjectWebSocketRpc = ({
|
|
|
154
155
|
|
|
155
156
|
const launchServer = (ws: CfTypes.WebSocket) =>
|
|
156
157
|
Effect.gen(function* () {
|
|
157
|
-
if (serverCtxMap.has(ws)) {
|
|
158
|
+
if (serverCtxMap.has(ws) === true) {
|
|
158
159
|
return serverCtxMap.get(ws)!
|
|
159
160
|
}
|
|
160
161
|
|
|
@@ -162,7 +163,7 @@ export const setupDurableObjectWebSocketRpc = ({
|
|
|
162
163
|
|
|
163
164
|
const scope = yield* Scope.make()
|
|
164
165
|
|
|
165
|
-
const incomingQueue = yield* Mailbox.make<Uint8Array
|
|
166
|
+
const incomingQueue = yield* Mailbox.make<Uint8Array | string>()
|
|
166
167
|
|
|
167
168
|
yield* Scope.addFinalizer(scope, incomingQueue.shutdown)
|
|
168
169
|
|
|
@@ -182,7 +183,7 @@ export const setupDurableObjectWebSocketRpc = ({
|
|
|
182
183
|
scope,
|
|
183
184
|
onMessage: (message: string | ArrayBuffer) =>
|
|
184
185
|
incomingQueue
|
|
185
|
-
.offer(message as Uint8Array
|
|
186
|
+
.offer(message as Uint8Array | string)
|
|
186
187
|
.pipe(
|
|
187
188
|
Effect.asVoid,
|
|
188
189
|
Effect.withSpan('ws-rpc-server/onMessage', { root: true }),
|
|
@@ -212,7 +213,7 @@ export const setupDurableObjectWebSocketRpc = ({
|
|
|
212
213
|
const webSocketClose: CfTypes.DurableObject['webSocketClose'] = async (ws, _code, _reason, _wasClean) => {
|
|
213
214
|
const ctx = serverCtxMap.get(ws)
|
|
214
215
|
// console.log('webSocketClose', ctx, ws)
|
|
215
|
-
if (ctx) {
|
|
216
|
+
if (ctx !== undefined) {
|
|
216
217
|
await Scope.close(ctx.scope, Exit.void).pipe(Effect.runPromise)
|
|
217
218
|
serverCtxMap.delete(ws)
|
|
218
219
|
}
|
|
@@ -234,7 +235,7 @@ export interface WsRpcServerArgs {
|
|
|
234
235
|
ws: CfTypes.WebSocket
|
|
235
236
|
onMessage?: (message: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void
|
|
236
237
|
/** Mailbox queue for receiving incoming messages from the WebSocket */
|
|
237
|
-
incomingQueue: Mailbox.Mailbox<Uint8Array
|
|
238
|
+
incomingQueue: Mailbox.Mailbox<Uint8Array | string>
|
|
238
239
|
}
|
|
239
240
|
|
|
240
241
|
/**
|
|
@@ -270,7 +271,7 @@ const makeSocketProtocol = ({ incomingQueue, ws, onMessage }: WsRpcServerArgs) =
|
|
|
270
271
|
const serialization = yield* RpcSerialization.RpcSerialization
|
|
271
272
|
const disconnects = yield* Mailbox.make<number>()
|
|
272
273
|
|
|
273
|
-
const writeRaw = (msg: Uint8Array
|
|
274
|
+
const writeRaw = (msg: Uint8Array | string) => Effect.succeed(ws.send(msg))
|
|
274
275
|
|
|
275
276
|
let writeRequest!: (clientId: number, message: RpcMessage.FromClientEncoded) => Effect.Effect<void>
|
|
276
277
|
|
|
@@ -303,7 +304,7 @@ const makeSocketProtocol = ({ incomingQueue, ws, onMessage }: WsRpcServerArgs) =
|
|
|
303
304
|
while: () => i < decoded.length,
|
|
304
305
|
body: () => {
|
|
305
306
|
const request = decoded[i++]!
|
|
306
|
-
if (onMessage) {
|
|
307
|
+
if (onMessage !== undefined) {
|
|
307
308
|
onMessage(request, ws)
|
|
308
309
|
}
|
|
309
310
|
return writeRequest(id, request)
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { expect } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest'
|
|
4
|
+
import { WranglerDevServerService } from '@livestore/utils-dev/wrangler'
|
|
1
5
|
import {
|
|
2
6
|
Chunk,
|
|
3
7
|
Effect,
|
|
@@ -12,9 +16,7 @@ import {
|
|
|
12
16
|
Stream,
|
|
13
17
|
} from '@livestore/utils/effect'
|
|
14
18
|
import { PlatformNode } from '@livestore/utils/node'
|
|
15
|
-
|
|
16
|
-
import { WranglerDevServerService } from '@livestore/utils-dev/wrangler'
|
|
17
|
-
import { expect } from 'vitest'
|
|
19
|
+
|
|
18
20
|
import { TestRpcs } from './test-fixtures/rpc-schema.ts'
|
|
19
21
|
|
|
20
22
|
const testTimeout = 60_000
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|