@livestore/adapter-cloudflare 0.4.0-dev.9 → 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.
@@ -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 type { LogConfig, 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.LoggerOptions;
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,KAAK,EAAE,SAAS,EAAE,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;AAGlE,OAAO,EAAE,MAAM,EAA4B,MAAM,yBAAyB,CAAA;AAI1E,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,aAAa,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,sHAwB1C,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,+DAWnD,CAAA"}
@@ -1,9 +1,50 @@
1
1
  import { createStore, provideOtel } from '@livestore/livestore';
2
2
  import { makeDoRpcSync } from '@livestore/sync-cf/client';
3
- import { Effect, Logger, LogLevel, Scope } from '@livestore/utils/effect';
3
+ import { isDevEnv } from '@livestore/utils';
4
+ import { Effect, Layer, References, 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();
@@ -16,13 +57,39 @@ export const createStoreDo = ({ schema, storeId, clientId, sessionId, durableObj
16
57
  syncOptions: {
17
58
  backend: makeDoRpcSync({
18
59
  syncBackendStub,
60
+ durableObjectState: ctx,
19
61
  durableObjectContext: { bindingName, durableObjectId },
20
62
  }),
21
63
  livePull, // Uses DO RPC callbacks for reactive pull
22
- initialSyncOptions: { _tag: 'Blocking', timeout: 500 },
64
+ initialSyncOptions,
23
65
  },
24
66
  });
25
- return yield* createStore({ schema, adapter, storeId }).pipe(Scope.extend(scope), provideOtel({}));
67
+ return yield* createStore({ schema, adapter, storeId }).pipe(Scope.provide(scope), provideOtel({}));
26
68
  });
27
- export const createStoreDoPromise = (options) => createStoreDo(options).pipe(Logger.withMinimumLogLevel(LogLevel.Debug), Effect.provide(Logger.consoleWithThread('DoClient')), Effect.tapCauseLogPretty, Effect.runPromise);
69
+ /**
70
+ * Promise-based wrapper around `createStoreDo` for simpler async/await usage.
71
+ *
72
+ * Equivalent to calling `createStoreDo(options).pipe(Effect.runPromise)` with
73
+ * logging configured automatically.
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * import { createStoreDoPromise } from '@livestore/adapter-cloudflare'
78
+ *
79
+ * export class MyDurableObject extends DurableObject {
80
+ * async fetch(request: Request) {
81
+ * const store = await createStoreDoPromise({
82
+ * schema,
83
+ * storeId: 'my-store',
84
+ * clientId: this.ctx.id.toString(),
85
+ * sessionId: 'do-session',
86
+ * durableObject: { ctx: this.ctx, env: this.env, bindingName: 'MY_DO' },
87
+ * syncBackendStub: this.env.SYNC_BACKEND_DO.get(syncBackendId),
88
+ * })
89
+ * // Use store...
90
+ * }
91
+ * }
92
+ * ```
93
+ */
94
+ export const createStoreDoPromise = (options) => createStoreDo(options).pipe(Effect.provide(Layer.mergeAll(options.logger ?? Layer.empty, Layer.succeed(References.MinimumLogLevel, options.logLevel ?? (isDevEnv() === true ? 'Debug' : 'Info')))), Effect.tapCauseLogPretty, Effect.runPromise);
28
95
  //# 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":"AAEA,OAAO,EAAE,WAAW,EAAwB,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAE1E,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,kBAAkB,EAAE,GAAG;gBACvB,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,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AACrG,CAAC,CAAC,CAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAKlC,OAAoD,EACpD,EAAE,CACF,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,MAAM,CAAC,OAAO,CACZ,KAAK,CAAC,QAAQ,CACZ,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAC7B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACxG,CACF,EACD,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,EAGjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAgBnD,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,OAoID,CAAA"}
@@ -1,39 +1,37 @@
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, StateHead, } from '@livestore/common';
2
+ import { Eventlog, LeaderThreadCtx, makeLeaderThreadLayer, streamEventsWithSyncState, } from '@livestore/common/leader-thread';
3
+ import { getStateDbBaseName } from '@livestore/common/schema';
3
4
  import { LiveStoreEvent } from '@livestore/livestore';
4
- import { sqliteDbFactory } from '@livestore/sqlite-wasm/cf';
5
+ import { CF_SQL_VFS_REQUIRED_PRAGMAS, sqliteDbFactory } from '@livestore/sqlite-wasm/cf';
5
6
  import { loadSqlite3Wasm } from '@livestore/sqlite-wasm/load-wasm';
6
- import { Effect, FetchHttpClient, Layer, Schedule, SubscriptionRef, WebChannel } from '@livestore/utils/effect';
7
+ import { Effect, FetchHttpClient, Layer, Queue, Schedule, SubscriptionRef, WebChannel } from '@livestore/utils/effect';
8
+ import { makeSqliteDb as makeDoSqliteDb } from "./make-sqlite-db.js";
7
9
  export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPersistence = false, }) => (adapterArgs) => Effect.gen(function* () {
8
- const { storeId, /* devtoolsEnabled, shutdown, bootStatusQueue, */ syncPayload, schema } = adapterArgs;
10
+ const { storeId,
11
+ /* devtoolsEnabled, shutdown, bootStatusQueue, */
12
+ syncPayloadEncoded, syncPayloadSchema, schema, } = adapterArgs;
9
13
  const devtoolsOptions = { enabled: false };
10
14
  const sqlite3 = yield* Effect.promise(() => loadSqlite3Wasm());
11
15
  const makeSqliteDb = sqliteDbFactory({ sqlite3 });
12
- const syncInMemoryDb = yield* makeSqliteDb({ _tag: 'in-memory', storage, configureDb: () => { } }).pipe(UnexpectedError.mapToUnexpectedError);
13
- const schemaHashSuffix = schema.state.sqlite.migrations.strategy === 'manual' ? 'fixed' : schema.state.sqlite.hash.toString();
14
- const stateDbFileName = getStateDbFileName(schemaHashSuffix);
15
- const eventlogDbFileName = getEventlogDbFileName();
16
+ const syncInMemoryDb = yield* makeSqliteDb({ _tag: 'in-memory', storage, configureDb: () => { } }).pipe(UnknownError.mapToUnknownError);
16
17
  if (resetPersistence === true) {
17
- yield* resetDurableObjectPersistence({
18
- storage,
19
- storeId,
20
- dbFileNames: [stateDbFileName, eventlogDbFileName],
21
- });
18
+ yield* resetDurableObjectPersistence({ storage, storeId });
22
19
  }
23
20
  const dbState = yield* makeSqliteDb({
24
21
  _tag: 'storage',
25
22
  storage,
26
- fileName: stateDbFileName,
27
- configureDb: () => { },
28
- }).pipe(UnexpectedError.mapToUnexpectedError);
29
- const dbEventlog = yield* makeSqliteDb({
30
- _tag: 'storage',
31
- storage,
32
- fileName: eventlogDbFileName,
23
+ fileName: `${getStateDbBaseName(schema)}@${liveStoreStorageFormatVersion}.db`,
24
+ configureDb: (db) => db.execute([...CF_SQL_VFS_REQUIRED_PRAGMAS, 'cache_size=-8000'].map((p) => `PRAGMA ${p}`).join(';\n')),
25
+ }).pipe(UnknownError.mapToUnknownError);
26
+ // dbEventlog runs on DO SQLite directly (not through the VFS). SQL-level transaction
27
+ // control (BEGIN/COMMIT/ROLLBACK) is silently dropped — see isTransactionControlStatement
28
+ // in make-sqlite-db.ts for details on why this is safe.
29
+ const dbEventlog = yield* makeDoSqliteDb({
30
+ _tag: 'file',
31
+ db: storage.sql,
33
32
  configureDb: () => { },
34
- }).pipe(UnexpectedError.mapToUnexpectedError);
33
+ }).pipe(UnknownError.mapToUnknownError);
35
34
  const shutdownChannel = yield* WebChannel.noopChannel();
36
- // Use Durable Object sync backend if no backend is specified
37
35
  const layer = yield* Layer.build(makeLeaderThreadLayer({
38
36
  schema,
39
37
  storeId,
@@ -44,22 +42,33 @@ export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPe
44
42
  dbEventlog,
45
43
  devtoolsOptions,
46
44
  shutdownChannel,
47
- syncPayload,
48
- }));
45
+ syncPayloadEncoded,
46
+ syncPayloadSchema,
47
+ }).pipe(Layer.provide(StateHead.layer({ dbState }))));
49
48
  const { leaderThread, initialSnapshot } = yield* Effect.gen(function* () {
50
- const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState } = yield* LeaderThreadCtx;
49
+ const { dbState, dbEventlog, syncProcessor, extraIncomingMessagesQueue, initialState, networkStatus } = yield* LeaderThreadCtx;
51
50
  const initialLeaderHead = Eventlog.getClientHeadFromDb(dbEventlog);
52
51
  // const initialLeaderHead = EventSequenceNumber.ROOT
53
52
  const leaderThread = ClientSessionLeaderThreadProxy.of({
54
53
  events: {
55
54
  pull: ({ cursor }) => syncProcessor.pull({ cursor }),
56
- push: (batch) => syncProcessor.push(batch.map((item) => new LiveStoreEvent.EncodedWithMeta(item)), { waitForProcessing: true }),
55
+ push: (batch) => syncProcessor.push(batch.map((item) => new LiveStoreEvent.Client.EncodedWithMeta(item))),
56
+ stream: (options) => streamEventsWithSyncState({
57
+ dbEventlog,
58
+ syncState: syncProcessor.syncState,
59
+ options,
60
+ }),
61
+ },
62
+ initialState: {
63
+ leaderHead: initialLeaderHead,
64
+ migrationsReport: initialState.migrationsReport,
65
+ storageMode: 'persisted',
57
66
  },
58
- initialState: { leaderHead: initialLeaderHead, migrationsReport: initialState.migrationsReport },
59
67
  export: Effect.sync(() => dbState.export()),
60
68
  getEventlogData: Effect.sync(() => dbEventlog.export()),
61
- getSyncState: syncProcessor.syncState,
62
- sendDevtoolsMessage: (message) => extraIncomingMessagesQueue.offer(message),
69
+ syncState: syncProcessor.syncState,
70
+ sendDevtoolsMessage: (message) => Queue.offer(extraIncomingMessagesQueue, message),
71
+ networkStatus,
63
72
  }, {
64
73
  // overrides: testing?.overrides?.clientSession?.leaderThreadProxy
65
74
  });
@@ -73,14 +82,14 @@ export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPe
73
82
  sqliteDb: syncInMemoryDb,
74
83
  webmeshMode: 'proxy',
75
84
  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
- // }
85
+ if (devtoolsOptions.enabled === true) {
86
+ console.log('connectWebmeshNode', { webmeshNode });
87
+ // yield* Webmesh.connectViaWebSocket({
88
+ // node: webmeshNode,
89
+ // url: `ws://${devtoolsOptions.host}:${devtoolsOptions.port}`,
90
+ // openTimeout: 500,
91
+ // }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped)
92
+ }
84
93
  }),
85
94
  leaderThread,
86
95
  lockStatus,
@@ -89,34 +98,36 @@ export const makeAdapter = ({ storage, clientId, syncOptions, sessionId, resetPe
89
98
  isLeader: true,
90
99
  // Not really applicable for node as there is no "reload the app" concept
91
100
  registerBeforeUnload: (_onBeforeUnload) => () => { },
101
+ origin: undefined,
92
102
  });
93
103
  return clientSession;
94
104
  }).pipe(Effect.withSpan('@livestore/adapter-cloudflare:makeAdapter', { attributes: { clientId, sessionId } }), Effect.provide(FetchHttpClient.layer));
95
- 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
- }
105
+ const resetDurableObjectPersistence = ({ storage, storeId, }) => Effect.try({
106
+ try: () =>
107
+ // All three tables live in the DO's single storage.sql database but are
108
+ // owned by different layers during normal operation:
109
+ // - vfs_pages: written by the wa-sqlite VFS layer (backs dbState)
110
+ // - eventlog, __livestore_sync_status: written directly by dbEventlog via storage.sql
111
+ storage.transactionSync(() => {
112
+ safeSqlExec(storage, 'DELETE FROM vfs_pages');
113
+ safeSqlExec(storage, 'DELETE FROM eventlog');
114
+ safeSqlExec(storage, 'DELETE FROM __livestore_sync_status');
104
115
  }),
105
- catch: (cause) => new UnexpectedError({
116
+ catch: (cause) => new UnknownError({
106
117
  cause,
107
118
  note: `@livestore/adapter-cloudflare: Failed to reset persistence for store ${storeId}`,
108
119
  }),
109
120
  }).pipe(Effect.retry({ schedule: Schedule.exponentialBackoff10Sec }), Effect.withSpan('@livestore/adapter-cloudflare:resetPersistence', { attributes: { storeId } }));
110
121
  const safeSqlExec = (storage, query, binding) => {
111
122
  try {
112
- storage.sql.exec(query, binding);
123
+ binding !== undefined ? storage.sql.exec(query, binding) : storage.sql.exec(query);
113
124
  }
114
125
  catch (error) {
115
- if (isMissingVfsTableError(error)) {
126
+ if (isMissingTableError(error) === true) {
116
127
  return;
117
128
  }
118
129
  throw error;
119
130
  }
120
131
  };
121
- const isMissingVfsTableError = (error) => error instanceof Error && error.message.toLowerCase().includes('no such table');
132
+ const isMissingTableError = (error) => error instanceof Error && error.message.toLowerCase().includes('no such table');
122
133
  //# 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":"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"}
@@ -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;AAiEnD,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"}