@livestore/sync-cf 0.3.0-dev.11 → 0.3.0-dev.2

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.
Files changed (50) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cf-worker/durable-object.d.ts +34 -27
  3. package/dist/cf-worker/durable-object.d.ts.map +1 -1
  4. package/dist/cf-worker/durable-object.js +129 -150
  5. package/dist/cf-worker/durable-object.js.map +1 -1
  6. package/dist/cf-worker/index.d.ts +6 -1
  7. package/dist/cf-worker/index.d.ts.map +1 -1
  8. package/dist/cf-worker/index.js +64 -30
  9. package/dist/cf-worker/index.js.map +1 -1
  10. package/dist/common/ws-message-types.d.ts +207 -54
  11. package/dist/common/ws-message-types.d.ts.map +1 -1
  12. package/dist/common/ws-message-types.js +3 -3
  13. package/dist/common/ws-message-types.js.map +1 -1
  14. package/dist/sync-impl/ws-impl.d.ts +12 -3
  15. package/dist/sync-impl/ws-impl.d.ts.map +1 -1
  16. package/dist/sync-impl/ws-impl.js +4 -5
  17. package/dist/sync-impl/ws-impl.js.map +1 -1
  18. package/package.json +13 -15
  19. package/src/cf-worker/durable-object.ts +161 -215
  20. package/src/cf-worker/index.ts +84 -0
  21. package/src/common/ws-message-types.ts +3 -3
  22. package/src/sync-impl/ws-impl.ts +16 -8
  23. package/dist/cf-worker/make-worker.d.ts +0 -6
  24. package/dist/cf-worker/make-worker.d.ts.map +0 -1
  25. package/dist/cf-worker/make-worker.js +0 -31
  26. package/dist/cf-worker/make-worker.js.map +0 -1
  27. package/dist/cf-worker/mod.d.ts +0 -3
  28. package/dist/cf-worker/mod.d.ts.map +0 -1
  29. package/dist/cf-worker/mod.js +0 -3
  30. package/dist/cf-worker/mod.js.map +0 -1
  31. package/dist/cf-worker/types.d.ts +0 -2
  32. package/dist/cf-worker/types.d.ts.map +0 -1
  33. package/dist/cf-worker/types.js +0 -2
  34. package/dist/cf-worker/types.js.map +0 -1
  35. package/dist/cf-worker/worker.d.ts +0 -6
  36. package/dist/cf-worker/worker.d.ts.map +0 -1
  37. package/dist/cf-worker/worker.js +0 -29
  38. package/dist/cf-worker/worker.js.map +0 -1
  39. package/dist/common/mod.d.ts +0 -2
  40. package/dist/common/mod.d.ts.map +0 -1
  41. package/dist/common/mod.js +0 -2
  42. package/dist/common/mod.js.map +0 -1
  43. package/dist/sync-impl/mod.d.ts +0 -2
  44. package/dist/sync-impl/mod.d.ts.map +0 -1
  45. package/dist/sync-impl/mod.js +0 -2
  46. package/dist/sync-impl/mod.js.map +0 -1
  47. package/src/cf-worker/mod.ts +0 -2
  48. package/src/cf-worker/worker.ts +0 -39
  49. /package/src/common/{mod.ts → index.ts} +0 -0
  50. /package/src/sync-impl/{mod.ts → index.ts} +0 -0
@@ -1,25 +1,26 @@
1
- import { DbSchema } from '@livestore/common/schema';
2
- import { Effect, Option, Schema } from '@livestore/utils/effect';
1
+ import { DbSchema, type MutationEvent } from '@livestore/common/schema';
2
+ import { Option, Schema } from '@livestore/utils/effect';
3
3
  import { DurableObject } from 'cloudflare:workers';
4
- import { WSMessage } from '../common/mod.js';
4
+ import type { SyncMetadata } from '../common/ws-message-types.js';
5
5
  export interface Env {
6
- WEBSOCKET_SERVER: DurableObjectNamespace;
6
+ WEBSOCKET_SERVER: DurableObjectNamespace<WebSocketServer>;
7
7
  DB: D1Database;
8
8
  ADMIN_SECRET: string;
9
9
  }
10
+ type WebSocketClient = WebSocket;
10
11
  export declare const mutationLogTable: DbSchema.TableDef<{
11
12
  name: "__unused";
12
13
  columns: {
13
- id: {
14
+ idGlobal: {
14
15
  columnType: "integer";
15
- schema: Schema.Schema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
16
+ schema: Schema.Schema<number, number, never>;
16
17
  default: Option.None<never>;
17
18
  nullable: false;
18
19
  primaryKey: true;
19
20
  };
20
- parentId: {
21
+ parentIdGlobal: {
21
22
  columnType: "integer";
22
- schema: Schema.Schema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
23
+ schema: Schema.Schema<number, number, never>;
23
24
  default: Option.None<never>;
24
25
  nullable: false;
25
26
  primaryKey: false;
@@ -45,6 +46,7 @@ export declare const mutationLogTable: DbSchema.TableDef<{
45
46
  nullable: false;
46
47
  primaryKey: false;
47
48
  };
49
+ id: DbSchema.SqliteDsl.ColumnDefinition<string, string>;
48
50
  };
49
51
  indexes?: ReadonlyArray<DbSchema.SqliteDsl.Index>;
50
52
  ast: import("@livestore/db-schema/dist/ast/sqlite.js").Table;
@@ -53,32 +55,37 @@ export declare const mutationLogTable: DbSchema.TableDef<{
53
55
  disableAutomaticIdColumn: false;
54
56
  deriveMutations: never;
55
57
  isSingleColumn: false;
56
- requiredInsertColumnNames: "createdAt" | "mutation" | "args" | "id" | "parentId";
58
+ requiredInsertColumnNames: "createdAt" | "idGlobal" | "parentIdGlobal" | "mutation" | "args";
57
59
  }, Schema.Schema<{
58
- readonly id: number & import("effect/Brand").Brand<"GlobalEventId">;
59
- readonly parentId: number & import("effect/Brand").Brand<"GlobalEventId">;
60
+ readonly idGlobal: number;
61
+ readonly parentIdGlobal: number;
60
62
  readonly mutation: string;
61
63
  readonly args: any;
62
64
  readonly createdAt: string;
65
+ readonly id: string;
63
66
  }, {
64
- readonly id: number;
65
- readonly parentId: number;
67
+ readonly idGlobal: number;
68
+ readonly parentIdGlobal: number;
66
69
  readonly mutation: string;
67
70
  readonly args: string;
68
71
  readonly createdAt: string;
72
+ readonly id: string;
69
73
  }, never>>;
70
- /**
71
- * Needs to be bumped when the storage format changes (e.g. mutationLogTable schema changes)
72
- *
73
- * Changing this version number will lead to a "soft reset".
74
- */
75
- export declare const PERSISTENCE_FORMAT_VERSION = 2;
76
- export type MakeDurableObjectClassOptions = {
77
- onPush?: (message: WSMessage.PushReq) => Effect.Effect<void> | Promise<void>;
78
- onPull?: (message: WSMessage.PullReq) => Effect.Effect<void> | Promise<void>;
79
- };
80
- export type MakeDurableObjectClass = (options?: MakeDurableObjectClassOptions) => {
81
- new (ctx: DurableObjectState, env: Env): DurableObject<Env>;
82
- };
83
- export declare const makeDurableObject: MakeDurableObjectClass;
74
+ export declare class WebSocketServer extends DurableObject<Env> {
75
+ dbName: string;
76
+ storage: {
77
+ getLatestEvent: () => Promise<MutationEvent.Any | undefined>;
78
+ getEvents: (cursor: number | undefined) => Promise<ReadonlyArray<{
79
+ mutationEventEncoded: MutationEvent.AnyEncoded;
80
+ metadata: Option.Option<SyncMetadata>;
81
+ }>>;
82
+ appendEvent: (event: MutationEvent.Any, createdAt: string) => Promise<void>;
83
+ resetRoom: () => Promise<void>;
84
+ };
85
+ constructor(ctx: DurableObjectState, env: Env);
86
+ fetch: (_request: Request) => Promise<Response>;
87
+ webSocketMessage: (ws: WebSocketClient, message: ArrayBuffer | string) => Promise<undefined>;
88
+ webSocketClose: (ws: WebSocketClient, code: number, _reason: string, _wasClean: boolean) => Promise<void>;
89
+ }
90
+ export {};
84
91
  //# sourceMappingURL=durable-object.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"durable-object.d.ts","sourceRoot":"","sources":["../../src/cf-worker/durable-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA+B,MAAM,0BAA0B,CAAA;AAEhF,OAAO,EAAE,MAAM,EAAoB,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG5C,MAAM,WAAW,GAAG;IAClB,gBAAgB,EAAE,sBAAsB,CAAA;IACxC,EAAE,EAAE,UAAU,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;CACrB;AASD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAO3B,CAAA;AAQF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAE3C,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7E,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,6BAA6B,KAAK;IAChF,KAAK,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;CAC5D,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,sBA6L/B,CAAA"}
1
+ {"version":3,"file":"durable-object.d.ts","sourceRoot":"","sources":["../../src/cf-worker/durable-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAW,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAEhF,OAAO,EAA4B,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEjE,MAAM,WAAW,GAAG;IAClB,gBAAgB,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAA;IACzD,EAAE,EAAE,UAAU,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,KAAK,eAAe,GAAG,SAAS,CAAA;AAOhC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAO3B,CAAA;AAGF,qBAAa,eAAgB,SAAQ,aAAa,CAAC,GAAG,CAAC;IACrD,MAAM,SAA2C;IACjD,OAAO;8BA8K0B,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,SAAS,CAAC;4BAe7D,MAAM,GAAG,SAAS,KACzB,OAAO,CACR,aAAa,CAAC;YAAE,oBAAoB,EAAE,aAAa,CAAC,UAAU,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;SAAE,CAAC,CACzG;6BAsBiC,aAAa,CAAC,GAAG,aAAa,MAAM;;MAtNhB;gBAE1C,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;IAI7C,KAAK,aAAoB,OAAO,uBAsBsB;IAEtD,gBAAgB,OAAQ,eAAe,WAAW,WAAW,GAAG,MAAM,wBAuInE;IAEH,cAAc,OAAc,eAAe,QAAQ,MAAM,WAAW,MAAM,aAAa,OAAO,mBAG7F;CACF"}
@@ -3,199 +3,178 @@ import { DbSchema, EventId } from '@livestore/common/schema';
3
3
  import { shouldNeverHappen } from '@livestore/utils';
4
4
  import { Effect, Logger, LogLevel, Option, Schema } from '@livestore/utils/effect';
5
5
  import { DurableObject } from 'cloudflare:workers';
6
- import { WSMessage } from '../common/mod.js';
6
+ import { WSMessage } from '../common/index.js';
7
7
  const encodeOutgoingMessage = Schema.encodeSync(Schema.parseJson(WSMessage.BackendToClientMessage));
8
8
  const encodeIncomingMessage = Schema.encodeSync(Schema.parseJson(WSMessage.ClientToBackendMessage));
9
9
  const decodeIncomingMessage = Schema.decodeUnknownEither(Schema.parseJson(WSMessage.ClientToBackendMessage));
10
10
  // NOTE actual table name is determined at runtime by `WebSocketServer.dbName`
11
11
  export const mutationLogTable = DbSchema.table('__unused', {
12
- id: DbSchema.integer({ primaryKey: true, schema: EventId.GlobalEventId }),
13
- parentId: DbSchema.integer({ schema: EventId.GlobalEventId }),
12
+ idGlobal: DbSchema.integer({ primaryKey: true }),
13
+ parentIdGlobal: DbSchema.integer({}),
14
14
  mutation: DbSchema.text({}),
15
15
  args: DbSchema.text({ schema: Schema.parseJson(Schema.Any) }),
16
- /** ISO date format. Currently only used for debugging purposes. */
16
+ /** ISO date format */
17
17
  createdAt: DbSchema.text({}),
18
18
  });
19
- const WebSocketAttachmentSchema = Schema.parseJson(Schema.Struct({
20
- storeId: Schema.String,
21
- }));
22
- /**
23
- * Needs to be bumped when the storage format changes (e.g. mutationLogTable schema changes)
24
- *
25
- * Changing this version number will lead to a "soft reset".
26
- */
27
- export const PERSISTENCE_FORMAT_VERSION = 2;
28
- export const makeDurableObject = (options) => {
29
- return class WebSocketServerBase extends DurableObject {
30
- constructor(ctx, env) {
31
- super(ctx, env);
19
+ // Durable Object
20
+ export class WebSocketServer extends DurableObject {
21
+ dbName = `mutation_log_${this.ctx.id.toString()}`;
22
+ storage = makeStorage(this.ctx, this.env, this.dbName);
23
+ constructor(ctx, env) {
24
+ super(ctx, env);
25
+ }
26
+ fetch = async (_request) => Effect.gen(this, function* () {
27
+ const { 0: client, 1: server } = new WebSocketPair();
28
+ // See https://developers.cloudflare.com/durable-objects/examples/websocket-hibernation-server
29
+ this.ctx.acceptWebSocket(server);
30
+ this.ctx.setWebSocketAutoResponse(new WebSocketRequestResponsePair(encodeIncomingMessage(WSMessage.Ping.make({ requestId: 'ping' })), encodeOutgoingMessage(WSMessage.Pong.make({ requestId: 'ping' }))));
31
+ const colSpec = makeColumnSpec(mutationLogTable.sqliteDef.ast);
32
+ this.env.DB.exec(`CREATE TABLE IF NOT EXISTS ${this.dbName} (${colSpec}) strict`);
33
+ return new Response(null, {
34
+ status: 101,
35
+ webSocket: client,
36
+ });
37
+ }).pipe(Effect.tapCauseLogPretty, Effect.runPromise);
38
+ webSocketMessage = (ws, message) => Effect.gen(this, function* () {
39
+ const decodedMessageRes = decodeIncomingMessage(message);
40
+ if (decodedMessageRes._tag === 'Left') {
41
+ console.error('Invalid message received', decodedMessageRes.left);
42
+ return;
32
43
  }
33
- fetch = async (request) => Effect.gen(this, function* () {
34
- const storeId = getStoreId(request);
35
- const storage = makeStorage(this.ctx, this.env, storeId);
36
- const { 0: client, 1: server } = new WebSocketPair();
37
- // Since we're using websocket hibernation, we need to remember the storeId for subsequent `webSocketMessage` calls
38
- server.serializeAttachment(Schema.encodeSync(WebSocketAttachmentSchema)({ storeId }));
39
- // See https://developers.cloudflare.com/durable-objects/examples/websocket-hibernation-server
40
- this.ctx.acceptWebSocket(server);
41
- this.ctx.setWebSocketAutoResponse(new WebSocketRequestResponsePair(encodeIncomingMessage(WSMessage.Ping.make({ requestId: 'ping' })), encodeOutgoingMessage(WSMessage.Pong.make({ requestId: 'ping' }))));
42
- const colSpec = makeColumnSpec(mutationLogTable.sqliteDef.ast);
43
- this.env.DB.exec(`CREATE TABLE IF NOT EXISTS ${storage.dbName} (${colSpec}) strict`);
44
- return new Response(null, {
45
- status: 101,
46
- webSocket: client,
47
- });
48
- }).pipe(Effect.tapCauseLogPretty, Effect.runPromise);
49
- webSocketMessage = (ws, message) => Effect.gen(this, function* () {
50
- const decodedMessageRes = decodeIncomingMessage(message);
51
- if (decodedMessageRes._tag === 'Left') {
52
- console.error('Invalid message received', decodedMessageRes.left);
53
- return;
54
- }
55
- const { storeId } = yield* Schema.decode(WebSocketAttachmentSchema)(ws.deserializeAttachment());
56
- const storage = makeStorage(this.ctx, this.env, storeId);
57
- const decodedMessage = decodedMessageRes.right;
58
- const requestId = decodedMessage.requestId;
59
- try {
60
- switch (decodedMessage._tag) {
61
- case 'WSMessage.PullReq': {
62
- if (options?.onPull) {
63
- yield* Effect.tryAll(() => options.onPull(decodedMessage));
64
- }
65
- const cursor = decodedMessage.cursor;
66
- const CHUNK_SIZE = 100;
67
- // TODO use streaming
68
- const remainingEvents = [...(yield* Effect.promise(() => storage.getEvents(cursor)))];
69
- // NOTE we want to make sure the WS server responds at least once with `InitRes` even if `events` is empty
70
- while (true) {
71
- const events = remainingEvents.splice(0, CHUNK_SIZE);
72
- ws.send(encodeOutgoingMessage(WSMessage.PullRes.make({ events, remaining: remainingEvents.length, requestId })));
73
- if (remainingEvents.length === 0) {
74
- break;
75
- }
44
+ const decodedMessage = decodedMessageRes.right;
45
+ const requestId = decodedMessage.requestId;
46
+ try {
47
+ switch (decodedMessage._tag) {
48
+ case 'WSMessage.PullReq': {
49
+ const cursor = decodedMessage.cursor;
50
+ const CHUNK_SIZE = 100;
51
+ // TODO use streaming
52
+ const remainingEvents = [...(yield* Effect.promise(() => this.storage.getEvents(cursor)))];
53
+ // NOTE we want to make sure the WS server responds at least once with `InitRes` even if `events` is empty
54
+ while (true) {
55
+ const events = remainingEvents.splice(0, CHUNK_SIZE);
56
+ ws.send(encodeOutgoingMessage(WSMessage.PullRes.make({ events, remaining: remainingEvents.length, requestId })));
57
+ if (remainingEvents.length === 0) {
58
+ break;
76
59
  }
77
- break;
78
60
  }
79
- case 'WSMessage.PushReq': {
80
- if (options?.onPush) {
81
- yield* Effect.tryAll(() => options.onPush(decodedMessage));
61
+ break;
62
+ }
63
+ case 'WSMessage.PushReq': {
64
+ // TODO check whether we could use the Durable Object storage for this to speed up the lookup
65
+ const latestEvent = yield* Effect.promise(() => this.storage.getLatestEvent());
66
+ const expectedParentId = latestEvent?.id ?? EventId.ROOT;
67
+ let i = 0;
68
+ for (const mutationEventEncoded of decodedMessage.batch) {
69
+ if (mutationEventEncoded.parentId.global !== expectedParentId.global + i) {
70
+ const err = WSMessage.Error.make({
71
+ message: `Invalid parent id. Received ${mutationEventEncoded.parentId.global} but expected ${expectedParentId.global}`,
72
+ requestId,
73
+ });
74
+ yield* Effect.fail(err).pipe(Effect.ignoreLogged);
75
+ ws.send(encodeOutgoingMessage(err));
76
+ return;
82
77
  }
83
- // TODO check whether we could use the Durable Object storage for this to speed up the lookup
84
- const latestEvent = yield* Effect.promise(() => storage.getLatestEvent());
85
- const expectedParentId = latestEvent?.id ?? EventId.ROOT.global;
86
- let i = 0;
87
- for (const mutationEventEncoded of decodedMessage.batch) {
88
- if (mutationEventEncoded.parentId !== expectedParentId + i) {
89
- const err = WSMessage.Error.make({
90
- message: `Invalid parent id. Received ${mutationEventEncoded.parentId} but expected ${expectedParentId}`,
91
- requestId,
92
- });
93
- yield* Effect.fail(err).pipe(Effect.ignoreLogged);
94
- ws.send(encodeOutgoingMessage(err));
95
- return;
78
+ // TODO handle clientId unique conflict
79
+ const createdAt = new Date().toISOString();
80
+ // NOTE we're currently not blocking on this to allow broadcasting right away
81
+ const storePromise = this.storage.appendEvent(mutationEventEncoded, createdAt);
82
+ ws.send(encodeOutgoingMessage(WSMessage.PushAck.make({ mutationId: mutationEventEncoded.id.global, requestId })));
83
+ // console.debug(`Broadcasting mutation event to ${this.subscribedWebSockets.size} clients`)
84
+ const connectedClients = this.ctx.getWebSockets();
85
+ if (connectedClients.length > 0) {
86
+ const broadcastMessage = encodeOutgoingMessage(
87
+ // TODO refactor to batch api
88
+ WSMessage.PushBroadcast.make({
89
+ mutationEventEncoded,
90
+ metadata: Option.some({ createdAt }),
91
+ }));
92
+ for (const conn of connectedClients) {
93
+ console.log('Broadcasting to client', conn === ws ? 'self' : 'other');
94
+ // if (conn !== ws) {
95
+ conn.send(broadcastMessage);
96
+ // }
96
97
  }
97
- // TODO handle clientId unique conflict
98
- const createdAt = new Date().toISOString();
99
- // NOTE we're currently not blocking on this to allow broadcasting right away
100
- const storePromise = storage.appendEvent(mutationEventEncoded, createdAt);
101
- ws.send(encodeOutgoingMessage(WSMessage.PushAck.make({ mutationId: mutationEventEncoded.id, requestId })));
102
- // console.debug(`Broadcasting mutation event to ${this.subscribedWebSockets.size} clients`)
103
- const connectedClients = this.ctx.getWebSockets();
104
- if (connectedClients.length > 0) {
105
- const broadcastMessage = encodeOutgoingMessage(
106
- // TODO refactor to batch api
107
- WSMessage.PushBroadcast.make({
108
- mutationEventEncoded,
109
- metadata: Option.some({ createdAt }),
110
- }));
111
- for (const conn of connectedClients) {
112
- console.log('Broadcasting to client', conn === ws ? 'self' : 'other');
113
- // if (conn !== ws) {
114
- conn.send(broadcastMessage);
115
- // }
116
- }
117
- }
118
- yield* Effect.promise(() => storePromise);
119
- i++;
120
98
  }
121
- break;
99
+ yield* Effect.promise(() => storePromise);
100
+ i++;
122
101
  }
123
- case 'WSMessage.AdminResetRoomReq': {
124
- if (decodedMessage.adminSecret !== this.env.ADMIN_SECRET) {
125
- ws.send(encodeOutgoingMessage(WSMessage.Error.make({ message: 'Invalid admin secret', requestId })));
126
- return;
127
- }
128
- yield* Effect.promise(() => storage.resetRoom());
129
- ws.send(encodeOutgoingMessage(WSMessage.AdminResetRoomRes.make({ requestId })));
130
- break;
131
- }
132
- case 'WSMessage.AdminInfoReq': {
133
- if (decodedMessage.adminSecret !== this.env.ADMIN_SECRET) {
134
- ws.send(encodeOutgoingMessage(WSMessage.Error.make({ message: 'Invalid admin secret', requestId })));
135
- return;
136
- }
137
- ws.send(encodeOutgoingMessage(WSMessage.AdminInfoRes.make({ requestId, info: { durableObjectId: this.ctx.id.toString() } })));
138
- break;
102
+ break;
103
+ }
104
+ case 'WSMessage.AdminResetRoomReq': {
105
+ if (decodedMessage.adminSecret !== this.env.ADMIN_SECRET) {
106
+ ws.send(encodeOutgoingMessage(WSMessage.Error.make({ message: 'Invalid admin secret', requestId })));
107
+ return;
139
108
  }
140
- default: {
141
- console.error('unsupported message', decodedMessage);
142
- return shouldNeverHappen();
109
+ yield* Effect.promise(() => this.storage.resetRoom());
110
+ ws.send(encodeOutgoingMessage(WSMessage.AdminResetRoomRes.make({ requestId })));
111
+ break;
112
+ }
113
+ case 'WSMessage.AdminInfoReq': {
114
+ if (decodedMessage.adminSecret !== this.env.ADMIN_SECRET) {
115
+ ws.send(encodeOutgoingMessage(WSMessage.Error.make({ message: 'Invalid admin secret', requestId })));
116
+ return;
143
117
  }
118
+ ws.send(encodeOutgoingMessage(WSMessage.AdminInfoRes.make({ requestId, info: { durableObjectId: this.ctx.id.toString() } })));
119
+ break;
120
+ }
121
+ default: {
122
+ console.error('unsupported message', decodedMessage);
123
+ return shouldNeverHappen();
144
124
  }
145
125
  }
146
- catch (error) {
147
- ws.send(encodeOutgoingMessage(WSMessage.Error.make({ message: error.message, requestId })));
148
- }
149
- }).pipe(Effect.withSpan('@livestore/sync-cf:durable-object:webSocketMessage'), Effect.tapCauseLogPretty, Logger.withMinimumLogLevel(LogLevel.Debug), Effect.provide(Logger.pretty), Effect.runPromise);
150
- webSocketClose = async (ws, code, _reason, _wasClean) => {
151
- // If the client closes the connection, the runtime will invoke the webSocketClose() handler.
152
- ws.close(code, 'Durable Object is closing WebSocket');
153
- };
126
+ }
127
+ catch (error) {
128
+ ws.send(encodeOutgoingMessage(WSMessage.Error.make({ message: error.message, requestId })));
129
+ }
130
+ }).pipe(Effect.withSpan('@livestore/sync-cf:durable-object:webSocketMessage'), Effect.tapCauseLogPretty, Logger.withMinimumLogLevel(LogLevel.Debug), Effect.provide(Logger.pretty), Effect.runPromise);
131
+ webSocketClose = async (ws, code, _reason, _wasClean) => {
132
+ // If the client closes the connection, the runtime will invoke the webSocketClose() handler.
133
+ ws.close(code, 'Durable Object is closing WebSocket');
154
134
  };
155
- };
156
- const makeStorage = (ctx, env, storeId) => {
157
- const dbName = `mutation_log_${PERSISTENCE_FORMAT_VERSION}_${toValidTableName(storeId)}`;
135
+ }
136
+ const makeStorage = (ctx, env, dbName) => {
158
137
  const getLatestEvent = async () => {
159
- const rawEvents = await env.DB.prepare(`SELECT * FROM ${dbName} ORDER BY id DESC LIMIT 1`).all();
138
+ const rawEvents = await env.DB.prepare(`SELECT * FROM ${dbName} ORDER BY idGlobal DESC LIMIT 1`).all();
160
139
  if (rawEvents.error) {
161
140
  throw new Error(rawEvents.error);
162
141
  }
163
- const events = Schema.decodeUnknownSync(Schema.Array(mutationLogTable.schema))(rawEvents.results);
142
+ const events = Schema.decodeUnknownSync(Schema.Array(mutationLogTable.schema))(rawEvents.results).map((e) => ({
143
+ ...e,
144
+ // TODO remove local ids
145
+ id: { global: e.idGlobal, local: 0 },
146
+ parentId: { global: e.parentIdGlobal, local: 0 },
147
+ }));
164
148
  return events[0];
165
149
  };
166
150
  const getEvents = async (cursor) => {
167
- const whereClause = cursor === undefined ? '' : `WHERE id > ${cursor}`;
168
- const sql = `SELECT * FROM ${dbName} ${whereClause} ORDER BY id ASC`;
151
+ const whereClause = cursor === undefined ? '' : `WHERE idGlobal > ${cursor}`;
152
+ const sql = `SELECT * FROM ${dbName} ${whereClause} ORDER BY idGlobal ASC`;
169
153
  // TODO handle case where `cursor` was not found
170
154
  const rawEvents = await env.DB.prepare(sql).all();
171
155
  if (rawEvents.error) {
172
156
  throw new Error(rawEvents.error);
173
157
  }
174
- const events = Schema.decodeUnknownSync(Schema.Array(mutationLogTable.schema))(rawEvents.results).map(({ createdAt, ...mutationEventEncoded }) => ({
175
- mutationEventEncoded,
158
+ const events = Schema.decodeUnknownSync(Schema.Array(mutationLogTable.schema))(rawEvents.results).map(({ createdAt, ...e }) => ({
159
+ mutationEventEncoded: {
160
+ ...e,
161
+ // TODO remove local ids
162
+ id: { global: e.idGlobal, local: 0 },
163
+ parentId: { global: e.parentIdGlobal, local: 0 },
164
+ },
176
165
  metadata: Option.some({ createdAt }),
177
166
  }));
178
167
  return events;
179
168
  };
180
169
  const appendEvent = async (event, createdAt) => {
181
- const sql = `INSERT INTO ${dbName} (id, parentId, args, mutation, createdAt) VALUES (?, ?, ?, ?, ?)`;
170
+ const sql = `INSERT INTO ${dbName} (idGlobal, parentIdGlobal, args, mutation, createdAt) VALUES (?, ?, ?, ?, ?)`;
182
171
  await env.DB.prepare(sql)
183
- .bind(event.id, event.parentId, JSON.stringify(event.args), event.mutation, createdAt)
172
+ .bind(event.id.global, event.parentId.global, JSON.stringify(event.args), event.mutation, createdAt)
184
173
  .run();
185
174
  };
186
175
  const resetRoom = async () => {
187
176
  await ctx.storage.deleteAll();
188
177
  };
189
- return { dbName, getLatestEvent, getEvents, appendEvent, resetRoom };
190
- };
191
- const getStoreId = (request) => {
192
- const url = new URL(request.url);
193
- const searchParams = url.searchParams;
194
- const storeId = searchParams.get('storeId');
195
- if (storeId === null) {
196
- throw new Error('storeId search param is required');
197
- }
198
- return storeId;
178
+ return { getLatestEvent, getEvents, appendEvent, resetRoom };
199
179
  };
200
- const toValidTableName = (str) => str.replaceAll(/[^a-zA-Z0-9]/g, '_');
201
180
  //# sourceMappingURL=durable-object.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"durable-object.js","sourceRoot":"","sources":["../../src/cf-worker/durable-object.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"durable-object.js","sourceRoot":"","sources":["../../src/cf-worker/durable-object.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
1
  /// <reference no-default-lib="true"/>
2
- export {};
2
+ import type { Env } from './durable-object.js';
3
+ export * from './durable-object.js';
4
+ declare const _default: {
5
+ fetch: (request: Request, env: Env, _ctx: ExecutionContext) => Promise<Response>;
6
+ };
7
+ export default _default;
3
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cf-worker/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cf-worker/index.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAE9C,cAAc,qBAAqB,CAAA;;qBA4CV,OAAO,OAAO,GAAG,QAAQ,gBAAgB,KAAG,OAAO,CAAC,QAAQ,CAAC;;AADtF,wBAgCC"}
@@ -1,33 +1,67 @@
1
1
  /// <reference no-default-lib="true"/>
2
2
  /// <reference lib="esnext" />
3
- export {};
4
- // export * from './durable-object.js'
5
- // export default {
6
- // fetch: async (request: Request, env: Env, _ctx: ExecutionContext): Promise<Response> => {
7
- // const url = new URL(request.url)
8
- // const searchParams = url.searchParams
9
- // const roomId = searchParams.get('room')
10
- // if (roomId === null) {
11
- // return new Response('Room ID is required', { status: 400 })
12
- // }
13
- // // This example will refer to the same Durable Object instance,
14
- // // since the name "foo" is hardcoded.
15
- // const id = env.WEBSOCKET_SERVER.idFromName(roomId)
16
- // const durableObject = env.WEBSOCKET_SERVER.get(id)
17
- // if (url.pathname.endsWith('/websocket')) {
18
- // const upgradeHeader = request.headers.get('Upgrade')
19
- // if (!upgradeHeader || upgradeHeader !== 'websocket') {
20
- // return new Response('Durable Object expected Upgrade: websocket', { status: 426 })
21
- // }
22
- // return durableObject.fetch(request)
23
- // }
24
- // return new Response(null, {
25
- // status: 400,
26
- // statusText: 'Bad Request',
27
- // headers: {
28
- // 'Content-Type': 'text/plain',
29
- // },
30
- // })
31
- // },
32
- // }
3
+ export * from './durable-object.js';
4
+ // const handleRequest = (request: Request, env: Env) =>
5
+ // HttpServer.router.empty.pipe(
6
+ // HttpServer.router.get(
7
+ // '/websocket',
8
+ // Effect.gen(function* () {
9
+ // // This example will refer to the same Durable Object instance,
10
+ // // since the name "foo" is hardcoded.
11
+ // const id = env.WEBSOCKET_SERVER.idFromName('foo')
12
+ // const durableObject = env.WEBSOCKET_SERVER.get(id)
13
+ // HttpServer.
14
+ // // Expect to receive a WebSocket Upgrade request.
15
+ // // If there is one, accept the request and return a WebSocket Response.
16
+ // const headerRes = yield* HttpServer.request
17
+ // .schemaHeaders(
18
+ // Schema.Struct({
19
+ // Upgrade: Schema.Literal('websocket'),
20
+ // }),
21
+ // )
22
+ // .pipe(Effect.either)
23
+ // if (headerRes._tag === 'Left') {
24
+ // // return new Response('Durable Object expected Upgrade: websocket', { status: 426 })
25
+ // return yield* HttpServer.response.text('Durable Object expected Upgrade: websocket', { status: 426 })
26
+ // }
27
+ // HttpServer.response.empty
28
+ // return yield* Effect.promise(() => durableObject.fetch(request))
29
+ // }),
30
+ // ),
31
+ // HttpServer.router.catchAll((e) => {
32
+ // console.log(e)
33
+ // return HttpServer.response.empty({ status: 400 })
34
+ // }),
35
+ // (_) => HttpServer.app.toWebHandler(_)(request),
36
+ // // request
37
+ // )
38
+ // Worker
39
+ export default {
40
+ fetch: async (request, env, _ctx) => {
41
+ const url = new URL(request.url);
42
+ const searchParams = url.searchParams;
43
+ const roomId = searchParams.get('room');
44
+ if (roomId === null) {
45
+ return new Response('Room ID is required', { status: 400 });
46
+ }
47
+ // This example will refer to the same Durable Object instance,
48
+ // since the name "foo" is hardcoded.
49
+ const id = env.WEBSOCKET_SERVER.idFromName(roomId);
50
+ const durableObject = env.WEBSOCKET_SERVER.get(id);
51
+ if (url.pathname.endsWith('/websocket')) {
52
+ const upgradeHeader = request.headers.get('Upgrade');
53
+ if (!upgradeHeader || upgradeHeader !== 'websocket') {
54
+ return new Response('Durable Object expected Upgrade: websocket', { status: 426 });
55
+ }
56
+ return durableObject.fetch(request);
57
+ }
58
+ return new Response(null, {
59
+ status: 400,
60
+ statusText: 'Bad Request',
61
+ headers: {
62
+ 'Content-Type': 'text/plain',
63
+ },
64
+ });
65
+ },
66
+ };
33
67
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cf-worker/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,8BAA8B;;AAI9B,sCAAsC;AAEtC,mBAAmB;AACnB,8FAA8F;AAC9F,uCAAuC;AACvC,4CAA4C;AAC5C,8CAA8C;AAE9C,6BAA6B;AAC7B,oEAAoE;AACpE,QAAQ;AAER,sEAAsE;AACtE,4CAA4C;AAC5C,yDAAyD;AACzD,yDAAyD;AAEzD,iDAAiD;AACjD,6DAA6D;AAC7D,+DAA+D;AAC/D,6FAA6F;AAC7F,UAAU;AAEV,4CAA4C;AAC5C,QAAQ;AAER,kCAAkC;AAClC,qBAAqB;AACrB,mCAAmC;AACnC,mBAAmB;AACnB,wCAAwC;AACxC,WAAW;AACX,SAAS;AACT,OAAO;AACP,IAAI"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cf-worker/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,8BAA8B;AAO9B,cAAc,qBAAqB,CAAA;AAEnC,wDAAwD;AACxD,kCAAkC;AAClC,6BAA6B;AAC7B,sBAAsB;AACtB,kCAAkC;AAClC,0EAA0E;AAC1E,gDAAgD;AAChD,4DAA4D;AAC5D,6DAA6D;AAE7D,sBAAsB;AAEtB,4DAA4D;AAC5D,kFAAkF;AAClF,sDAAsD;AACtD,4BAA4B;AAC5B,8BAA8B;AAC9B,sDAAsD;AACtD,kBAAkB;AAClB,cAAc;AACd,iCAAiC;AAEjC,2CAA2C;AAC3C,kGAAkG;AAClG,kHAAkH;AAClH,YAAY;AAEZ,oCAAoC;AAEpC,2EAA2E;AAC3E,YAAY;AACZ,SAAS;AACT,0CAA0C;AAC1C,uBAAuB;AACvB,0DAA0D;AAC1D,UAAU;AACV,sDAAsD;AACtD,iBAAiB;AACjB,MAAM;AAEN,SAAS;AACT,eAAe;IACb,KAAK,EAAE,KAAK,EAAE,OAAgB,EAAE,GAAQ,EAAE,IAAsB,EAAqB,EAAE;QACrF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChC,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAA;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC7D,CAAC;QAED,+DAA+D;QAC/D,qCAAqC;QACrC,MAAM,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAClD,MAAM,aAAa,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAElD,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACpD,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBACpD,OAAO,IAAI,QAAQ,CAAC,4CAA4C,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YACpF,CAAC;YAED,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE;gBACP,cAAc,EAAE,YAAY;aAC7B;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}