@livestore/adapter-cloudflare 0.4.0-dev.9 → 0.4.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.
@@ -1,14 +1,14 @@
1
- import type { Schedule, Scope } from '@livestore/utils/effect';
2
- import { Effect, WebSocket } from '@livestore/utils/effect';
3
- import type * as CfWorker from './cf-types.ts';
1
+ import type { CfTypes } from '@livestore/common-cf';
2
+ import { Effect, type Schedule, type Scope } from '@livestore/utils/effect';
3
+ import { WebSocket } from '@livestore/utils/effect/browser';
4
4
  /**
5
5
  * Creates a WebSocket connection and waits for the connection to be established.
6
6
  * Automatically closes the connection when the scope is closed.
7
7
  */
8
8
  export declare const makeWebSocket: ({ reconnect, url, durableObject, }: {
9
9
  /** CF Sync Backend DO with `/sync` endpoint */
10
- durableObject: CfWorker.DurableObjectStub;
10
+ durableObject: CfTypes.DurableObjectStub;
11
11
  url: URL;
12
12
  reconnect?: Schedule.Schedule<unknown> | false;
13
- }) => Effect.Effect<CfWorker.WebSocket, WebSocket.WebSocketError, Scope.Scope>;
13
+ }) => Effect.Effect<CfTypes.WebSocket, WebSocket.WebSocketError, Scope.Scope>;
14
14
  //# sourceMappingURL=WebSocket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocket.d.ts","sourceRoot":"","sources":["../src/WebSocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAkB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AAO9C;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,oCAK3B;IACD,+CAA+C;IAC/C,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAA;IACzC,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;CAC/C,KAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CA6CvE,CAAA"}
1
+ {"version":3,"file":"WebSocket.d.ts","sourceRoot":"","sources":["../src/WebSocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAkB,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAO3D;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,oCAK3B;IACD,+CAA+C;IAC/C,aAAa,EAAE,OAAO,CAAC,iBAAiB,CAAA;IACxC,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;CAC/C,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAkDtE,CAAA"}
package/dist/WebSocket.js CHANGED
@@ -1,4 +1,5 @@
1
- import { Effect, Exit, identity, WebSocket } from '@livestore/utils/effect';
1
+ import { Effect, Exit, identity } from '@livestore/utils/effect';
2
+ import { WebSocket } from '@livestore/utils/effect/browser';
2
3
  // TODO refactor using Effect socket implementation
3
4
  // https://github.com/Effect-TS/effect/blob/main/packages%2Fexperimental%2Fsrc%2FDevTools%2FClient.ts#L113
4
5
  // "In a Stream pipeline everything above the pipeThrough is the outgoing (send) messages. Everything below is the incoming (message event) messages."
@@ -12,14 +13,16 @@ export const makeWebSocket = ({
12
13
  reconnect, url, durableObject, }) => Effect.gen(function* () {
13
14
  // yield* validateUrl(url)
14
15
  const socket = yield* Effect.tryPromise({
15
- try: () => durableObject.fetch(url, { headers: { Upgrade: 'websocket' } }).then((res) => {
16
- if (!res.webSocket) {
16
+ try: () =>
17
+ // NOTE: .toString() required due to type mismatch between standard URL and CF's URL types
18
+ durableObject.fetch(url.toString(), { headers: { Upgrade: 'websocket' } }).then((res) => {
19
+ if (res.webSocket == null) {
17
20
  throw new Error('WebSocket upgrade failed');
18
21
  }
19
22
  return res.webSocket;
20
23
  }),
21
24
  catch: (cause) => new WebSocket.WebSocketError({ cause }),
22
- }).pipe(reconnect ? Effect.retry(reconnect) : identity, Effect.withSpan('make-websocket-durable-object'));
25
+ }).pipe(reconnect !== undefined && reconnect !== false ? Effect.retry(reconnect) : identity, Effect.withSpan('make-websocket-durable-object'));
23
26
  socket.accept();
24
27
  /**
25
28
  * Common WebSocket close codes: https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close
@@ -35,17 +38,17 @@ reconnect, url, durableObject, }) => Effect.gen(function* () {
35
38
  * 4000-4999: Available for applications
36
39
  */
37
40
  yield* Effect.addFinalizer(Effect.fn(function* (exit) {
38
- try {
39
- if (Exit.isFailure(exit)) {
40
- socket.close(3000);
41
- }
42
- else {
43
- socket.close(1000);
44
- }
45
- }
46
- catch (error) {
47
- yield* Effect.die(new WebSocket.WebSocketError({ cause: error }));
48
- }
41
+ yield* Effect.try({
42
+ try: () => {
43
+ if (Exit.isFailure(exit) === true) {
44
+ socket.close(3000);
45
+ }
46
+ else {
47
+ socket.close(1000);
48
+ }
49
+ },
50
+ catch: (error) => new WebSocket.WebSocketError({ cause: error }),
51
+ }).pipe(Effect.orDie);
49
52
  }));
50
53
  return socket;
51
54
  });
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocket.js","sourceRoot":"","sources":["../src/WebSocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAG3E,mDAAmD;AACnD,0GAA0G;AAC1G,sJAAsJ;AACtJ,2FAA2F;AAE3F;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;AAC5B,MAAM;AACN,SAAS,EACT,GAAG,EACH,aAAa,GAMd,EAA4E,EAAE,CAC7E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,0BAA0B;IAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACtC,GAAG,EAAE,GAAG,EAAE,CACR,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE;YAChF,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,CAAC;YACD,OAAO,GAAG,CAAC,SAA+B,CAAA;QAC5C,CAAC,CAAC;QACJ,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1D,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAA;IAEzG,MAAM,CAAC,MAAM,EAAE,CAAA;IAEf;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CACxB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI;QACvB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"WebSocket.js","sourceRoot":"","sources":["../src/WebSocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAA6B,MAAM,yBAAyB,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAE3D,mDAAmD;AACnD,0GAA0G;AAC1G,sJAAsJ;AACtJ,2FAA2F;AAE3F;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;AAC5B,MAAM;AACN,SAAS,EACT,GAAG,EACH,aAAa,GAMd,EAA2E,EAAE,CAC5E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,0BAA0B;IAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACtC,GAAG,EAAE,GAAG,EAAE;QACR,0FAA0F;QAC1F,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE;YAC3F,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,CAAC;YACD,OAAO,GAAG,CAAC,SAA8B,CAAA;QAC3C,CAAC,CAAC;QACJ,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1D,CAAC,CAAC,IAAI,CACL,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EACnF,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CACjD,CAAA;IAED,MAAM,CAAC,MAAM,EAAE,CAAA;IAEf;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CACxB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI;QACvB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAChB,GAAG,EAAE,GAAG,EAAE;gBACR,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACpB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SACjE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAC,CACH,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA"}
@@ -1,10 +1,10 @@
1
- import type { HelperTypes } from '@livestore/common-cf';
1
+ import { LogConfig, type SyncOptions } from '@livestore/common';
2
+ import type { CfTypes, HelperTypes } from '@livestore/common-cf';
2
3
  import { type LiveStoreSchema } from '@livestore/livestore';
3
4
  import type * as CfSyncBackend from '@livestore/sync-cf/cf-worker';
4
5
  import { Effect } from '@livestore/utils/effect';
5
- import type * as CfWorker from './cf-types.ts';
6
6
  export type Env = {
7
- SYNC_BACKEND_DO: CfWorker.DurableObjectNamespace<CfSyncBackend.SyncBackendRpcInterface>;
7
+ SYNC_BACKEND_DO: CfTypes.DurableObjectNamespace<CfSyncBackend.SyncBackendRpcInterface>;
8
8
  };
9
9
  export type CreateStoreDoOptions<TSchema extends LiveStoreSchema, TEnv, TState> = {
10
10
  /** LiveStore schema that defines state, migrations, and validators. */
@@ -25,7 +25,7 @@ export type CreateStoreDoOptions<TSchema extends LiveStoreSchema, TEnv, TState>
25
25
  bindingName: HelperTypes.ExtractDurableObjectKeys<NoInfer<TEnv>>;
26
26
  };
27
27
  /** RPC stub pointing at the sync backend Durable Object used for replication. */
28
- syncBackendStub: CfWorker.DurableObjectStub<CfSyncBackend.SyncBackendRpcInterface>;
28
+ syncBackendStub: CfTypes.DurableObjectStub<CfSyncBackend.SyncBackendRpcInterface>;
29
29
  /**
30
30
  * Enables live pull mode to receive sync updates via Durable Object RPC callbacks.
31
31
  *
@@ -38,7 +38,78 @@ export type CreateStoreDoOptions<TSchema extends LiveStoreSchema, TEnv, TState>
38
38
  * Note: Only use this for development purposes.
39
39
  */
40
40
  resetPersistence?: boolean;
41
- };
42
- export declare const createStoreDo: <TSchema extends LiveStoreSchema, TEnv, TState extends CfWorker.DurableObjectState = CfWorker.DurableObjectState>({ schema, storeId, clientId, sessionId, durableObject, syncBackendStub, livePull, resetPersistence, }: CreateStoreDoOptions<TSchema, TEnv, TState>) => Effect.Effect<import("@livestore/livestore").Store<TSchema, {}>, import("@livestore/common").UnexpectedError, never>;
43
- export declare const createStoreDoPromise: <TSchema extends LiveStoreSchema, TEnv, TState extends CfWorker.DurableObjectState = CfWorker.DurableObjectState>(options: CreateStoreDoOptions<TSchema, TEnv, TState>) => Promise<import("@livestore/livestore").Store<TSchema, {}>>;
41
+ /**
42
+ * Controls how initial sync behaves when the store boots.
43
+ *
44
+ * @default { _tag: 'Blocking', timeout: 500 }
45
+ */
46
+ initialSyncOptions?: SyncOptions['initialSyncOptions'];
47
+ } & LogConfig.WithLoggerOptions;
48
+ /**
49
+ * Creates a LiveStore instance inside a Cloudflare Durable Object.
50
+ *
51
+ * This function bootstraps a full LiveStore client within a Durable Object, enabling
52
+ * persistent state management with automatic sync to a sync backend. Use this when you
53
+ * need server-side LiveStore instances that can communicate with other clients.
54
+ *
55
+ * Returns an Effect that resolves to a Store instance. For a Promise-based API,
56
+ * use `createStoreDoPromise` instead.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import { createStoreDo } from '@livestore/adapter-cloudflare'
61
+ * import { schema } from './schema'
62
+ *
63
+ * export class MyDurableObject extends DurableObject {
64
+ * store: Store | undefined
65
+ *
66
+ * async fetch(request: Request) {
67
+ * if (!this.store) {
68
+ * this.store = await createStoreDo({
69
+ * schema,
70
+ * storeId: 'my-store',
71
+ * clientId: this.ctx.id.toString(),
72
+ * sessionId: 'do-session',
73
+ * durableObject: {
74
+ * ctx: this.ctx,
75
+ * env: this.env,
76
+ * bindingName: 'MY_DO',
77
+ * },
78
+ * syncBackendStub: this.env.SYNC_BACKEND_DO.get(syncBackendId),
79
+ * }).pipe(Effect.runPromise)
80
+ * }
81
+ * // Use this.store...
82
+ * }
83
+ * }
84
+ * ```
85
+ *
86
+ * @see https://livestore.dev/docs/reference/adapters/cloudflare for setup guide
87
+ */
88
+ export declare const createStoreDo: <TSchema extends LiveStoreSchema, TEnv, TState extends CfTypes.DurableObjectState = CfTypes.DurableObjectState>({ schema, storeId, clientId, sessionId, durableObject, syncBackendStub, livePull, resetPersistence, initialSyncOptions, }: CreateStoreDoOptions<TSchema, TEnv, TState>) => Effect.Effect<import("@livestore/livestore").Store<TSchema, {}>, import("@livestore/common").UnknownError, never>;
89
+ /**
90
+ * Promise-based wrapper around `createStoreDo` for simpler async/await usage.
91
+ *
92
+ * Equivalent to calling `createStoreDo(options).pipe(Effect.runPromise)` with
93
+ * logging configured automatically.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * import { createStoreDoPromise } from '@livestore/adapter-cloudflare'
98
+ *
99
+ * export class MyDurableObject extends DurableObject {
100
+ * async fetch(request: Request) {
101
+ * const store = await createStoreDoPromise({
102
+ * schema,
103
+ * storeId: 'my-store',
104
+ * clientId: this.ctx.id.toString(),
105
+ * sessionId: 'do-session',
106
+ * durableObject: { ctx: this.ctx, env: this.env, bindingName: 'MY_DO' },
107
+ * syncBackendStub: this.env.SYNC_BACKEND_DO.get(syncBackendId),
108
+ * })
109
+ * // Use store...
110
+ * }
111
+ * }
112
+ * ```
113
+ */
114
+ export declare const createStoreDoPromise: <TSchema extends LiveStoreSchema, TEnv, TState extends CfTypes.DurableObjectState = CfTypes.DurableObjectState>(options: CreateStoreDoOptions<TSchema, TEnv, TState>) => Promise<import("@livestore/livestore").Store<TSchema, {}>>;
44
115
  //# sourceMappingURL=create-store-do.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-store-do.d.ts","sourceRoot":"","sources":["../src/create-store-do.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAe,KAAK,eAAe,EAAe,MAAM,sBAAsB,CAAA;AACrF,OAAO,KAAK,KAAK,aAAa,MAAM,8BAA8B,CAAA;AAElE,OAAO,EAAE,MAAM,EAA2B,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AAG9C,MAAM,MAAM,GAAG,GAAG;IAChB,eAAe,EAAE,QAAQ,CAAC,sBAAsB,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAA;CACxF,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,EAAE,IAAI,EAAE,MAAM,IAAI;IAChF,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAA;IACf,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAA;IACf,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAA;IACjB,8HAA8H;IAC9H,aAAa,EAAE;QACb,qDAAqD;QACrD,GAAG,EAAE,MAAM,CAAA;QACX,+DAA+D;QAC/D,GAAG,EAAE,IAAI,CAAA;QACT,oFAAoF;QACpF,WAAW,EAAE,WAAW,CAAC,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;KACjE,CAAA;IACD,iFAAiF;IACjF,eAAe,EAAE,QAAQ,CAAC,iBAAiB,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAA;IAClF;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAGD,eAAO,MAAM,aAAa,GACxB,OAAO,SAAS,eAAe,EAC/B,IAAI,EACJ,MAAM,SAAS,QAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,EACxE,uGASC,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,yHAuB1C,CAAA;AAEJ,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,eAAe,EAC/B,IAAI,EACJ,MAAM,SAAS,QAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,EAExE,SAAS,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,+DAOnD,CAAA"}
1
+ {"version":3,"file":"create-store-do.d.ts","sourceRoot":"","sources":["../src/create-store-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAe,KAAK,eAAe,EAAe,MAAM,sBAAsB,CAAA;AACrF,OAAO,KAAK,KAAK,aAAa,MAAM,8BAA8B,CAAA;AAElE,OAAO,EAAE,MAAM,EAAiB,MAAM,yBAAyB,CAAA;AAI/D,MAAM,MAAM,GAAG,GAAG;IAChB,eAAe,EAAE,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAA;CACvF,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,EAAE,IAAI,EAAE,MAAM,IAAI;IAChF,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAA;IACf,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAA;IACf,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAA;IACjB,8HAA8H;IAC9H,aAAa,EAAE;QACb,qDAAqD;QACrD,GAAG,EAAE,MAAM,CAAA;QACX,+DAA+D;QAC/D,GAAG,EAAE,IAAI,CAAA;QACT,oFAAoF;QACpF,WAAW,EAAE,WAAW,CAAC,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;KACjE,CAAA;IACD,iFAAiF;IACjF,eAAe,EAAE,OAAO,CAAC,iBAAiB,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAA;IACjF;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAA;CACvD,GAAG,SAAS,CAAC,iBAAiB,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,eAAO,MAAM,aAAa,GACxB,OAAO,SAAS,eAAe,EAC/B,IAAI,EACJ,MAAM,SAAS,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,EACtE,2HAUC,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,sHAuB1C,CAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,eAAe,EAC/B,IAAI,EACJ,MAAM,SAAS,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,EAEtE,SAAS,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,+DASnD,CAAA"}
@@ -1,9 +1,50 @@
1
+ import { LogConfig } from '@livestore/common';
1
2
  import { createStore, provideOtel } from '@livestore/livestore';
2
3
  import { makeDoRpcSync } from '@livestore/sync-cf/client';
3
- import { Effect, Logger, LogLevel, Scope } from '@livestore/utils/effect';
4
+ import { Effect, Logger, Scope } from '@livestore/utils/effect';
4
5
  import { makeAdapter } from "./make-adapter.js";
6
+ /**
7
+ * Creates a LiveStore instance inside a Cloudflare Durable Object.
8
+ *
9
+ * This function bootstraps a full LiveStore client within a Durable Object, enabling
10
+ * persistent state management with automatic sync to a sync backend. Use this when you
11
+ * need server-side LiveStore instances that can communicate with other clients.
12
+ *
13
+ * Returns an Effect that resolves to a Store instance. For a Promise-based API,
14
+ * use `createStoreDoPromise` instead.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { createStoreDo } from '@livestore/adapter-cloudflare'
19
+ * import { schema } from './schema'
20
+ *
21
+ * export class MyDurableObject extends DurableObject {
22
+ * store: Store | undefined
23
+ *
24
+ * async fetch(request: Request) {
25
+ * if (!this.store) {
26
+ * this.store = await createStoreDo({
27
+ * schema,
28
+ * storeId: 'my-store',
29
+ * clientId: this.ctx.id.toString(),
30
+ * sessionId: 'do-session',
31
+ * durableObject: {
32
+ * ctx: this.ctx,
33
+ * env: this.env,
34
+ * bindingName: 'MY_DO',
35
+ * },
36
+ * syncBackendStub: this.env.SYNC_BACKEND_DO.get(syncBackendId),
37
+ * }).pipe(Effect.runPromise)
38
+ * }
39
+ * // Use this.store...
40
+ * }
41
+ * }
42
+ * ```
43
+ *
44
+ * @see https://livestore.dev/docs/reference/adapters/cloudflare for setup guide
45
+ */
5
46
  // TODO Also support in Cloudflare workers outside of a durable object context.
6
- export const createStoreDo = ({ schema, storeId, clientId, sessionId, durableObject, syncBackendStub, livePull = false, resetPersistence = false, }) => Effect.gen(function* () {
47
+ export const createStoreDo = ({ schema, storeId, clientId, sessionId, durableObject, syncBackendStub, livePull = false, resetPersistence = false, initialSyncOptions = { _tag: 'Blocking', timeout: 500 }, }) => Effect.gen(function* () {
7
48
  const { ctx, bindingName } = durableObject;
8
49
  const storage = ctx.storage;
9
50
  const durableObjectId = ctx.id.toString();
@@ -19,10 +60,38 @@ export const createStoreDo = ({ schema, storeId, clientId, sessionId, durableObj
19
60
  durableObjectContext: { bindingName, durableObjectId },
20
61
  }),
21
62
  livePull, // Uses DO RPC callbacks for reactive pull
22
- initialSyncOptions: { _tag: 'Blocking', timeout: 500 },
63
+ initialSyncOptions,
23
64
  },
24
65
  });
25
66
  return yield* createStore({ schema, adapter, storeId }).pipe(Scope.extend(scope), provideOtel({}));
26
67
  });
27
- export const createStoreDoPromise = (options) => createStoreDo(options).pipe(Logger.withMinimumLogLevel(LogLevel.Debug), Effect.provide(Logger.consoleWithThread('DoClient')), Effect.tapCauseLogPretty, Effect.runPromise);
68
+ /**
69
+ * Promise-based wrapper around `createStoreDo` for simpler async/await usage.
70
+ *
71
+ * Equivalent to calling `createStoreDo(options).pipe(Effect.runPromise)` with
72
+ * logging configured automatically.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * import { createStoreDoPromise } from '@livestore/adapter-cloudflare'
77
+ *
78
+ * export class MyDurableObject extends DurableObject {
79
+ * async fetch(request: Request) {
80
+ * const store = await createStoreDoPromise({
81
+ * schema,
82
+ * storeId: 'my-store',
83
+ * clientId: this.ctx.id.toString(),
84
+ * sessionId: 'do-session',
85
+ * durableObject: { ctx: this.ctx, env: this.env, bindingName: 'MY_DO' },
86
+ * syncBackendStub: this.env.SYNC_BACKEND_DO.get(syncBackendId),
87
+ * })
88
+ * // Use store...
89
+ * }
90
+ * }
91
+ * ```
92
+ */
93
+ export const createStoreDoPromise = (options) => createStoreDo(options).pipe(LogConfig.withLoggerConfig(options, {
94
+ threadName: 'DoClient',
95
+ defaultLogger: Logger.consoleWithThread('DoClient'),
96
+ }), Effect.tapCauseLogPretty, Effect.runPromise);
28
97
  //# sourceMappingURL=create-store-do.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-store-do.js","sourceRoot":"","sources":["../src/create-store-do.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAwB,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAwC/C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAI3B,EACA,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,EACT,aAAa,EACb,eAAe,EACf,QAAQ,GAAG,KAAK,EAChB,gBAAgB,GAAG,KAAK,GACoB,EAAE,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,aAAa,CAAA;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;IAC3B,MAAM,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IAEjC,MAAM,OAAO,GAAG,WAAW,CAAC;QAC1B,QAAQ;QACR,SAAS;QACT,OAAO;QACP,gBAAgB;QAChB,WAAW,EAAE;YACX,OAAO,EAAE,aAAa,CAAC;gBACrB,eAAe;gBACf,oBAAoB,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;aACvD,CAAC;YACF,QAAQ,EAAE,0CAA0C;YACpD,kBAAkB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;SACvD;KACF,CAAC,CAAA;IAEF,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AACpG,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAKlC,OAAoD,EACpD,EAAE,CACF,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EACpD,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA"}
1
+ {"version":3,"file":"create-store-do.js","sourceRoot":"","sources":["../src/create-store-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,WAAW,EAAwB,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AA8C/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAI3B,EACA,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,EACT,aAAa,EACb,eAAe,EACf,QAAQ,GAAG,KAAK,EAChB,gBAAgB,GAAG,KAAK,EACxB,kBAAkB,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,GACX,EAAE,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,aAAa,CAAA;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;IAC3B,MAAM,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IAEjC,MAAM,OAAO,GAAG,WAAW,CAAC;QAC1B,QAAQ;QACR,SAAS;QACT,OAAO;QACP,gBAAgB;QAChB,WAAW,EAAE;YACX,OAAO,EAAE,aAAa,CAAC;gBACrB,eAAe;gBACf,oBAAoB,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;aACvD,CAAC;YACF,QAAQ,EAAE,0CAA0C;YACpD,kBAAkB;SACnB;KACF,CAAC,CAAA;IAEF,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AACpG,CAAC,CAAC,CAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAKlC,OAAoD,EACpD,EAAE,CACF,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE;IAClC,UAAU,EAAE,UAAU;IACtB,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC;CACpD,CAAC,EACF,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { type Adapter, type SyncOptions } from '@livestore/common';
2
- import type * as CfWorker from './cf-types.ts';
2
+ import type { CfTypes } from '@livestore/common-cf';
3
3
  export declare const makeAdapter: ({ storage, clientId, syncOptions, sessionId, resetPersistence, }: {
4
- storage: CfWorker.DurableObjectStorage;
4
+ storage: CfTypes.DurableObjectStorage;
5
5
  clientId: string;
6
6
  syncOptions: SyncOptions;
7
7
  sessionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"make-adapter.d.ts","sourceRoot":"","sources":["../src/make-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAKZ,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAA;AAM1B,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AAE9C,eAAO,MAAM,WAAW,GACrB,kEAME;IACD,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAA;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,KAAG,OA6HD,CAAA"}
1
+ {"version":3,"file":"make-adapter.d.ts","sourceRoot":"","sources":["../src/make-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAKZ,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAcnD,eAAO,MAAM,WAAW,GACrB,kEAME;IACD,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAA;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,KAAG,OA+ID,CAAA"}
@@ -1,39 +1,38 @@
1
- import { ClientSessionLeaderThreadProxy, liveStoreStorageFormatVersion, makeClientSession, UnexpectedError, } from '@livestore/common';
2
- import { Eventlog, LeaderThreadCtx, makeLeaderThreadLayer } from '@livestore/common/leader-thread';
1
+ import { ClientSessionLeaderThreadProxy, liveStoreStorageFormatVersion, makeClientSession, UnknownError, } from '@livestore/common';
2
+ import { Eventlog, LeaderThreadCtx, makeLeaderThreadLayer, streamEventsWithSyncState, } from '@livestore/common/leader-thread';
3
3
  import { LiveStoreEvent } from '@livestore/livestore';
4
- import { sqliteDbFactory } from '@livestore/sqlite-wasm/cf';
4
+ import { CF_SQL_VFS_REQUIRED_PRAGMAS, sqliteDbFactory } from '@livestore/sqlite-wasm/cf';
5
+ import { makeSqliteDb as makeDoSqliteDb } from "./make-sqlite-db.js";
5
6
  import { loadSqlite3Wasm } from '@livestore/sqlite-wasm/load-wasm';
6
7
  import { Effect, FetchHttpClient, Layer, Schedule, SubscriptionRef, WebChannel } from '@livestore/utils/effect';
7
8
  export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPersistence = false, }) => (adapterArgs) => Effect.gen(function* () {
8
- const { storeId, /* devtoolsEnabled, shutdown, bootStatusQueue, */ syncPayload, schema } = adapterArgs;
9
+ const { storeId,
10
+ /* devtoolsEnabled, shutdown, bootStatusQueue, */
11
+ syncPayloadEncoded, syncPayloadSchema, schema, } = adapterArgs;
9
12
  const devtoolsOptions = { enabled: false };
10
13
  const sqlite3 = yield* Effect.promise(() => loadSqlite3Wasm());
11
14
  const makeSqliteDb = sqliteDbFactory({ sqlite3 });
12
- const syncInMemoryDb = yield* makeSqliteDb({ _tag: 'in-memory', storage, configureDb: () => { } }).pipe(UnexpectedError.mapToUnexpectedError);
15
+ const syncInMemoryDb = yield* makeSqliteDb({ _tag: 'in-memory', storage, configureDb: () => { } }).pipe(UnknownError.mapToUnknownError);
13
16
  const schemaHashSuffix = schema.state.sqlite.migrations.strategy === 'manual' ? 'fixed' : schema.state.sqlite.hash.toString();
14
- const stateDbFileName = getStateDbFileName(schemaHashSuffix);
15
- const eventlogDbFileName = getEventlogDbFileName();
16
17
  if (resetPersistence === true) {
17
- yield* resetDurableObjectPersistence({
18
- storage,
19
- storeId,
20
- dbFileNames: [stateDbFileName, eventlogDbFileName],
21
- });
18
+ yield* resetDurableObjectPersistence({ storage, storeId });
22
19
  }
20
+ const stateDbFileName = getStateDbFileName(schemaHashSuffix);
23
21
  const dbState = yield* makeSqliteDb({
24
22
  _tag: 'storage',
25
23
  storage,
26
24
  fileName: stateDbFileName,
25
+ configureDb: (db) => db.execute([...CF_SQL_VFS_REQUIRED_PRAGMAS, 'cache_size=-8000'].map((p) => `PRAGMA ${p}`).join(';\n')),
26
+ }).pipe(UnknownError.mapToUnknownError);
27
+ // dbEventlog runs on DO SQLite directly (not through the VFS). SQL-level transaction
28
+ // control (BEGIN/COMMIT/ROLLBACK) is silently dropped — see isTransactionControlStatement
29
+ // in make-sqlite-db.ts for details on why this is safe.
30
+ const dbEventlog = yield* makeDoSqliteDb({
31
+ _tag: 'file',
32
+ db: storage.sql,
27
33
  configureDb: () => { },
28
- }).pipe(UnexpectedError.mapToUnexpectedError);
29
- const dbEventlog = yield* makeSqliteDb({
30
- _tag: 'storage',
31
- storage,
32
- fileName: eventlogDbFileName,
33
- configureDb: () => { },
34
- }).pipe(UnexpectedError.mapToUnexpectedError);
34
+ }).pipe(UnknownError.mapToUnknownError);
35
35
  const shutdownChannel = yield* WebChannel.noopChannel();
36
- // Use Durable Object sync backend if no backend is specified
37
36
  const layer = yield* Layer.build(makeLeaderThreadLayer({
38
37
  schema,
39
38
  storeId,
@@ -44,22 +43,33 @@ export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPe
44
43
  dbEventlog,
45
44
  devtoolsOptions,
46
45
  shutdownChannel,
47
- syncPayload,
46
+ syncPayloadEncoded,
47
+ syncPayloadSchema,
48
48
  }));
49
49
  const { leaderThread, initialSnapshot } = yield* Effect.gen(function* () {
50
- const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState } = yield* LeaderThreadCtx;
50
+ const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState, networkStatus } = yield* LeaderThreadCtx;
51
51
  const initialLeaderHead = Eventlog.getClientHeadFromDb(dbEventlog);
52
52
  // const initialLeaderHead = EventSequenceNumber.ROOT
53
53
  const leaderThread = ClientSessionLeaderThreadProxy.of({
54
54
  events: {
55
55
  pull: ({ cursor }) => syncProcessor.pull({ cursor }),
56
- push: (batch) => syncProcessor.push(batch.map((item) => new LiveStoreEvent.EncodedWithMeta(item)), { waitForProcessing: true }),
56
+ push: (batch) => syncProcessor.push(batch.map((item) => new LiveStoreEvent.Client.EncodedWithMeta(item)), { waitForProcessing: true }),
57
+ stream: (options) => streamEventsWithSyncState({
58
+ dbEventlog,
59
+ syncState: syncProcessor.syncState,
60
+ options,
61
+ }),
62
+ },
63
+ initialState: {
64
+ leaderHead: initialLeaderHead,
65
+ migrationsReport: initialState.migrationsReport,
66
+ storageMode: 'persisted',
57
67
  },
58
- initialState: { leaderHead: initialLeaderHead, migrationsReport: initialState.migrationsReport },
59
68
  export: Effect.sync(() => dbState.export()),
60
69
  getEventlogData: Effect.sync(() => dbEventlog.export()),
61
- getSyncState: syncProcessor.syncState,
70
+ syncState: syncProcessor.syncState,
62
71
  sendDevtoolsMessage: (message) => extraIncomingMessagesQueue.offer(message),
72
+ networkStatus,
63
73
  }, {
64
74
  // overrides: testing?.overrides?.clientSession?.leaderThreadProxy
65
75
  });
@@ -73,14 +83,14 @@ export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPe
73
83
  sqliteDb: syncInMemoryDb,
74
84
  webmeshMode: 'proxy',
75
85
  connectWebmeshNode: Effect.fnUntraced(function* ({ webmeshNode }) {
76
- console.log('connectWebmeshNode', { webmeshNode });
77
- // if (devtoolsOptions.enabled) {
78
- // yield* Webmesh.connectViaWebSocket({
79
- // node: webmeshNode,
80
- // url: `ws://${devtoolsOptions.host}:${devtoolsOptions.port}`,
81
- // openTimeout: 500,
82
- // }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped)
83
- // }
86
+ if (devtoolsOptions.enabled === true) {
87
+ console.log('connectWebmeshNode', { webmeshNode });
88
+ // yield* Webmesh.connectViaWebSocket({
89
+ // node: webmeshNode,
90
+ // url: `ws://${devtoolsOptions.host}:${devtoolsOptions.port}`,
91
+ // openTimeout: 500,
92
+ // }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped)
93
+ }
84
94
  }),
85
95
  leaderThread,
86
96
  lockStatus,
@@ -89,34 +99,37 @@ export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPe
89
99
  isLeader: true,
90
100
  // Not really applicable for node as there is no "reload the app" concept
91
101
  registerBeforeUnload: (_onBeforeUnload) => () => { },
102
+ origin: undefined,
92
103
  });
93
104
  return clientSession;
94
105
  }).pipe(Effect.withSpan('@livestore/adapter-cloudflare:makeAdapter', { attributes: { clientId, sessionId } }), Effect.provide(FetchHttpClient.layer));
95
106
  const getStateDbFileName = (suffix) => `state${suffix}@${liveStoreStorageFormatVersion}.db`;
96
- const getEventlogDbFileName = () => `eventlog@${liveStoreStorageFormatVersion}.db`;
97
- const resetDurableObjectPersistence = ({ storage, storeId, dbFileNames, }) => Effect.try({
98
- try: () => storage.transactionSync(() => {
99
- for (const baseName of dbFileNames) {
100
- const likePattern = `${baseName}%`;
101
- safeSqlExec(storage, 'DELETE FROM vfs_blocks WHERE file_path LIKE ?', likePattern);
102
- safeSqlExec(storage, 'DELETE FROM vfs_files WHERE file_path LIKE ?', likePattern);
103
- }
107
+ const resetDurableObjectPersistence = ({ storage, storeId, }) => Effect.try({
108
+ try: () =>
109
+ // All three tables live in the DO's single storage.sql database but are
110
+ // owned by different layers during normal operation:
111
+ // - vfs_pages: written by the wa-sqlite VFS layer (backs dbState)
112
+ // - eventlog, __livestore_sync_status: written directly by dbEventlog via storage.sql
113
+ storage.transactionSync(() => {
114
+ safeSqlExec(storage, 'DELETE FROM vfs_pages');
115
+ safeSqlExec(storage, 'DELETE FROM eventlog');
116
+ safeSqlExec(storage, 'DELETE FROM __livestore_sync_status');
104
117
  }),
105
- catch: (cause) => new UnexpectedError({
118
+ catch: (cause) => new UnknownError({
106
119
  cause,
107
120
  note: `@livestore/adapter-cloudflare: Failed to reset persistence for store ${storeId}`,
108
121
  }),
109
122
  }).pipe(Effect.retry({ schedule: Schedule.exponentialBackoff10Sec }), Effect.withSpan('@livestore/adapter-cloudflare:resetPersistence', { attributes: { storeId } }));
110
123
  const safeSqlExec = (storage, query, binding) => {
111
124
  try {
112
- storage.sql.exec(query, binding);
125
+ binding !== undefined ? storage.sql.exec(query, binding) : storage.sql.exec(query);
113
126
  }
114
127
  catch (error) {
115
- if (isMissingVfsTableError(error)) {
128
+ if (isMissingTableError(error) === true) {
116
129
  return;
117
130
  }
118
131
  throw error;
119
132
  }
120
133
  };
121
- const isMissingVfsTableError = (error) => error instanceof Error && error.message.toLowerCase().includes('no such table');
134
+ const isMissingTableError = (error) => error instanceof Error && error.message.toLowerCase().includes('no such table');
122
135
  //# sourceMappingURL=make-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"make-adapter.js","sourceRoot":"","sources":["../src/make-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"make-adapter.js","sourceRoot":"","sources":["../src/make-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,8BAA8B,EAE9B,6BAA6B,EAC7B,iBAAiB,EAEjB,YAAY,GACb,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAEL,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACxF,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE/G,MAAM,CAAC,MAAM,WAAW,GACtB,CAAC,EACC,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EACT,gBAAgB,GAAG,KAAK,GAOzB,EAAW,EAAE,CACd,CAAC,WAAW,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EACJ,OAAO;IACP,kDAAkD;IAClD,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,GACP,GAAG,WAAW,CAAA;IAEf,MAAM,eAAe,GAAG,EAAE,OAAO,EAAE,KAAK,EAAqB,CAAA;IAE7D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAA;IAE9D,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAEjD,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CACpG,YAAY,CAAC,iBAAiB,CAC/B,CAAA;IAED,MAAM,gBAAgB,GACpB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAEtG,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9B,KAAK,CAAC,CAAC,6BAA6B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,MAAM,eAAe,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAE5D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;QAClC,IAAI,EAAE,SAAS;QACf,OAAO;QACP,QAAQ,EAAE,eAAe;QACzB,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAClB,EAAE,CAAC,OAAO,CACR,CAAC,GAAG,2BAA2B,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3F;KACJ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;IAEvC,qFAAqF;IACrF,0FAA0F;IAC1F,wDAAwD;IACxD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;QACvC,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,OAAO,CAAC,GAAG;QACf,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;KACtB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;IAEvC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,EAAY,CAAA;IAEjE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAC9B,qBAAqB,CAAC;QACpB,MAAM;QACN,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,OAAO;QACP,UAAU;QACV,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,iBAAiB;KAClB,CAAC,CACH,CAAA;IAED,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,0BAA0B,EAAE,YAAY,EAAE,aAAa,EAAE,GACnG,KAAK,CAAC,CAAC,eAAe,CAAA;QAExB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;QAClE,qDAAqD;QAErD,MAAM,YAAY,GAAG,8BAA8B,CAAC,EAAE,CACpD;YACE,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;gBACpD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,aAAa,CAAC,IAAI,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EACpE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B;gBACH,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAClB,yBAAyB,CAAC;oBACxB,UAAU;oBACV,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,OAAO;iBACR,CAAC;aACL;YACD,YAAY,EAAE;gBACZ,UAAU,EAAE,iBAAiB;gBAC7B,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;gBAC/C,WAAW,EAAE,WAAW;aACzB;YACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3C,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACvD,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3E,aAAa;SACd,EACD;QACE,kEAAkE;SACnE,CACF,CAAA;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;QAExC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,CAAA;IAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;IAE9B,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAEtC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAa,UAAU,CAAC,CAAA;IAEtE,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAC7C,GAAG,WAAW;QACd,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,OAAO;QACpB,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE;YAC9D,IAAI,eAAe,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;gBAClD,yCAAyC;gBACzC,yBAAyB;gBACzB,mEAAmE;gBACnE,wBAAwB;gBACxB,yDAAyD;YAC3D,CAAC;QACH,CAAC,CAAC;QACF,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,SAAS;QACT,QAAQ,EAAE,IAAI;QACd,yEAAyE;QACzE,oBAAoB,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;QACnD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAA;IAEF,OAAO,aAAa,CAAA;AACtB,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,2CAA2C,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,EACrG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CACtC,CAAA;AAEL,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,QAAQ,MAAM,IAAI,6BAA6B,KAAK,CAAA;AAEnG,MAAM,6BAA6B,GAAG,CAAC,EACrC,OAAO,EACP,OAAO,GAIR,EAAE,EAAE,CACH,MAAM,CAAC,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,EAAE;IACR,wEAAwE;IACxE,qDAAqD;IACrD,kEAAkE;IAClE,sFAAsF;IACtF,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE;QAC3B,WAAW,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAA;QAC7C,WAAW,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;QAC5C,WAAW,CAAC,OAAO,EAAE,qCAAqC,CAAC,CAAA;IAC7D,CAAC,CAAC;IACJ,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,YAAY,CAAC;QACf,KAAK;QACL,IAAI,EAAE,wEAAwE,OAAO,EAAE;KACxF,CAAC;CACL,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,uBAAuB,EAAE,CAAC,EAC5D,MAAM,CAAC,QAAQ,CAAC,gDAAgD,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAC/F,CAAA;AAEH,MAAM,WAAW,GAAG,CAAC,OAAqC,EAAE,KAAa,EAAE,OAAgB,EAAE,EAAE;IAC7F,IAAI,CAAC;QACH,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,OAAM;QACR,CAAC;QAED,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAW,EAAE,CACtD,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { MakeSqliteDb, PersistenceInfo, SqliteDb } from '@livestore/common';
2
- import type * as CfWorker from './cf-types.ts';
2
+ import type { CfTypes } from '@livestore/common-cf';
3
3
  type Metadata = {
4
4
  _tag: 'file';
5
5
  dbPointer: number;
@@ -9,11 +9,11 @@ type Metadata = {
9
9
  };
10
10
  type CloudflareDatabaseInput = {
11
11
  _tag: 'file';
12
- db: CfWorker.SqlStorage;
12
+ db: CfTypes.SqlStorage;
13
13
  configureDb: (db: SqliteDb) => void;
14
14
  } | {
15
15
  _tag: 'in-memory';
16
- db: CfWorker.SqlStorage;
16
+ db: CfTypes.SqlStorage;
17
17
  configureDb: (db: SqliteDb) => void;
18
18
  };
19
19
  export type MakeCloudflareSqliteDb = MakeSqliteDb<Metadata, CloudflareDatabaseInput, {
@@ -24,7 +24,7 @@ export declare const makeSqliteDb_: <TMetadata extends {
24
24
  persistenceInfo: PersistenceInfo;
25
25
  configureDb: (db: SqliteDb<TMetadata>) => void;
26
26
  }>({ sqlStorage, metadata, }: {
27
- sqlStorage: CfWorker.SqlStorage;
27
+ sqlStorage: CfTypes.SqlStorage;
28
28
  metadata: TMetadata;
29
29
  }) => SqliteDb<TMetadata>;
30
30
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"make-sqlite-db.d.ts","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAGf,QAAQ,EAGT,MAAM,mBAAmB,CAAA;AAI1B,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AA6D9C,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,KAAK,EAAE,uBAAuB,CAAA;IAC9B,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,KAAK,uBAAuB,GACxB;IACE,IAAI,EAAE,MAAM,CAAA;IAGZ,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAA;IACvB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,GACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAA;IACvB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAEL,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,QAAQ,EAAE,uBAAuB,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG,QAAQ,CAAC,CAAA;AAEvH,eAAO,MAAM,YAAY,EAAE,sBA8BvB,CAAA;AAEJ,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS;IAChB,eAAe,EAAE,eAAe,CAAA;IAEhC,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;CAC/C,EACD,2BAGC;IACD,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAA;IAC/B,QAAQ,EAAE,SAAS,CAAA;CACpB,KAAG,QAAQ,CAAC,SAAS,CAuHrB,CAAA"}
1
+ {"version":3,"file":"make-sqlite-db.d.ts","sourceRoot":"","sources":["../src/make-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAGf,QAAQ,EAGT,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAkEnD,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,eAAe,CAAA;IAChC,KAAK,EAAE,uBAAuB,CAAA;IAC9B,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,KAAK,uBAAuB,GACxB;IACE,IAAI,EAAE,MAAM,CAAA;IAGZ,EAAE,EAAE,OAAO,CAAC,UAAU,CAAA;IACtB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,GACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,EAAE,EAAE,OAAO,CAAC,UAAU,CAAA;IACtB,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC,CAAA;AAEL,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,QAAQ,EAAE,uBAAuB,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG,QAAQ,CAAC,CAAA;AAEvH,eAAO,MAAM,YAAY,EAAE,sBA2BvB,CAAA;AAEJ,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS;IAChB,eAAe,EAAE,eAAe,CAAA;IAChC,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;CAC/C,EACD,2BAGC;IACD,UAAU,EAAE,OAAO,CAAC,UAAU,CAAA;IAC9B,QAAQ,EAAE,SAAS,CAAA;CACpB,KAAG,QAAQ,CAAC,SAAS,CAkHrB,CAAA"}