@livestore/sync-cf 0.3.0-dev.10 → 0.3.0-dev.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/cf-worker/durable-object.d.ts +1 -1
- package/dist/cf-worker/durable-object.d.ts.map +1 -1
- package/dist/cf-worker/durable-object.js +102 -81
- package/dist/cf-worker/durable-object.js.map +1 -1
- package/dist/common/ws-message-types.d.ts +3 -44
- package/dist/common/ws-message-types.d.ts.map +1 -1
- package/dist/common/ws-message-types.js +3 -9
- package/dist/common/ws-message-types.js.map +1 -1
- package/dist/sync-impl/ws-impl.d.ts.map +1 -1
- package/dist/sync-impl/ws-impl.js +19 -25
- package/dist/sync-impl/ws-impl.js.map +1 -1
- package/package.json +3 -3
- package/src/cf-worker/durable-object.ts +145 -112
- package/src/common/ws-message-types.ts +2 -20
- package/src/sync-impl/ws-impl.ts +21 -32
|
@@ -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;
|
|
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,sBAyL/B,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { makeColumnSpec } from '@livestore/common';
|
|
1
|
+
import { makeColumnSpec, UnexpectedError } from '@livestore/common';
|
|
2
2
|
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';
|
|
@@ -7,8 +7,8 @@ import { WSMessage } from '../common/mod.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
|
-
// NOTE actual table name is determined at runtime
|
|
11
|
-
export const mutationLogTable = DbSchema.table('
|
|
10
|
+
// NOTE actual table name is determined at runtime
|
|
11
|
+
export const mutationLogTable = DbSchema.table('mutation_log_${PERSISTENCE_FORMAT_VERSION}_${storeId}', {
|
|
12
12
|
id: DbSchema.integer({ primaryKey: true, schema: EventId.GlobalEventId }),
|
|
13
13
|
parentId: DbSchema.integer({ schema: EventId.GlobalEventId }),
|
|
14
14
|
mutation: DbSchema.text({}),
|
|
@@ -16,6 +16,9 @@ export const mutationLogTable = DbSchema.table('__unused', {
|
|
|
16
16
|
/** ISO date format. Currently only used for debugging purposes. */
|
|
17
17
|
createdAt: DbSchema.text({}),
|
|
18
18
|
});
|
|
19
|
+
const WebSocketAttachmentSchema = Schema.parseJson(Schema.Struct({
|
|
20
|
+
storeId: Schema.String,
|
|
21
|
+
}));
|
|
19
22
|
/**
|
|
20
23
|
* Needs to be bumped when the storage format changes (e.g. mutationLogTable schema changes)
|
|
21
24
|
*
|
|
@@ -24,22 +27,20 @@ export const mutationLogTable = DbSchema.table('__unused', {
|
|
|
24
27
|
export const PERSISTENCE_FORMAT_VERSION = 2;
|
|
25
28
|
export const makeDurableObject = (options) => {
|
|
26
29
|
return class WebSocketServerBase extends DurableObject {
|
|
27
|
-
storage = undefined;
|
|
28
30
|
constructor(ctx, env) {
|
|
29
31
|
super(ctx, env);
|
|
30
32
|
}
|
|
31
33
|
fetch = async (request) => Effect.gen(this, function* () {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const dbName = `mutation_log_${PERSISTENCE_FORMAT_VERSION}_${toValidTableName(storeId)}`;
|
|
35
|
-
this.storage = makeStorage(this.ctx, this.env, dbName);
|
|
36
|
-
}
|
|
34
|
+
const storeId = getStoreId(request);
|
|
35
|
+
const storage = makeStorage(this.ctx, this.env, storeId);
|
|
37
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 }));
|
|
38
39
|
// See https://developers.cloudflare.com/durable-objects/examples/websocket-hibernation-server
|
|
39
40
|
this.ctx.acceptWebSocket(server);
|
|
40
41
|
this.ctx.setWebSocketAutoResponse(new WebSocketRequestResponsePair(encodeIncomingMessage(WSMessage.Ping.make({ requestId: 'ping' })), encodeOutgoingMessage(WSMessage.Pong.make({ requestId: 'ping' }))));
|
|
41
42
|
const colSpec = makeColumnSpec(mutationLogTable.sqliteDef.ast);
|
|
42
|
-
this.env.DB.exec(`CREATE TABLE IF NOT EXISTS ${
|
|
43
|
+
this.env.DB.exec(`CREATE TABLE IF NOT EXISTS ${storage.dbName} (${colSpec}) strict`);
|
|
43
44
|
return new Response(null, {
|
|
44
45
|
status: 101,
|
|
45
46
|
webSocket: client,
|
|
@@ -51,14 +52,13 @@ export const makeDurableObject = (options) => {
|
|
|
51
52
|
console.error('Invalid message received', decodedMessageRes.left);
|
|
52
53
|
return;
|
|
53
54
|
}
|
|
55
|
+
const { storeId } = yield* Schema.decode(WebSocketAttachmentSchema)(ws.deserializeAttachment());
|
|
56
|
+
const storage = makeStorage(this.ctx, this.env, storeId);
|
|
54
57
|
const decodedMessage = decodedMessageRes.right;
|
|
55
58
|
const requestId = decodedMessage.requestId;
|
|
56
|
-
const storage = this.storage;
|
|
57
|
-
if (storage === undefined) {
|
|
58
|
-
throw new Error('storage not initialized');
|
|
59
|
-
}
|
|
60
59
|
try {
|
|
61
60
|
switch (decodedMessage._tag) {
|
|
61
|
+
// TODO allow pulling concurrently to not block incoming push requests
|
|
62
62
|
case 'WSMessage.PullReq': {
|
|
63
63
|
if (options?.onPull) {
|
|
64
64
|
yield* Effect.tryAll(() => options.onPull(decodedMessage));
|
|
@@ -66,14 +66,12 @@ export const makeDurableObject = (options) => {
|
|
|
66
66
|
const cursor = decodedMessage.cursor;
|
|
67
67
|
const CHUNK_SIZE = 100;
|
|
68
68
|
// TODO use streaming
|
|
69
|
-
const remainingEvents =
|
|
69
|
+
const remainingEvents = yield* storage.getEvents(cursor);
|
|
70
70
|
// NOTE we want to make sure the WS server responds at least once with `InitRes` even if `events` is empty
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
71
|
+
for (let i = 0; i < remainingEvents.length; i += CHUNK_SIZE) {
|
|
72
|
+
const batch = remainingEvents.slice(i, i + CHUNK_SIZE);
|
|
73
|
+
const remaining = remainingEvents.length - i - 1;
|
|
74
|
+
ws.send(encodeOutgoingMessage(WSMessage.PullRes.make({ batch, remaining })));
|
|
77
75
|
}
|
|
78
76
|
break;
|
|
79
77
|
}
|
|
@@ -81,44 +79,48 @@ export const makeDurableObject = (options) => {
|
|
|
81
79
|
if (options?.onPush) {
|
|
82
80
|
yield* Effect.tryAll(() => options.onPush(decodedMessage));
|
|
83
81
|
}
|
|
82
|
+
if (decodedMessage.batch.length === 0) {
|
|
83
|
+
ws.send(encodeOutgoingMessage(WSMessage.PushAck.make({ requestId })));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
84
86
|
// TODO check whether we could use the Durable Object storage for this to speed up the lookup
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
87
|
+
const expectedParentId = yield* storage.getHead;
|
|
88
|
+
// TODO handle clientId unique conflict
|
|
89
|
+
// Validate the batch
|
|
90
|
+
const firstEvent = decodedMessage.batch[0];
|
|
91
|
+
if (firstEvent.parentId !== expectedParentId) {
|
|
92
|
+
const err = WSMessage.Error.make({
|
|
93
|
+
message: `Invalid parent id. Received ${firstEvent.parentId} but expected ${expectedParentId}`,
|
|
94
|
+
requestId,
|
|
95
|
+
});
|
|
96
|
+
yield* Effect.logError(err);
|
|
97
|
+
ws.send(encodeOutgoingMessage(err));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
ws.send(encodeOutgoingMessage(WSMessage.PushAck.make({ requestId })));
|
|
101
|
+
const createdAt = new Date().toISOString();
|
|
102
|
+
// NOTE we're not waiting for this to complete yet to allow the broadcast to happen right away
|
|
103
|
+
// while letting the async storage write happen in the background
|
|
104
|
+
const storeFiber = yield* storage.appendEvents(decodedMessage.batch, createdAt).pipe(Effect.fork);
|
|
105
|
+
const connectedClients = this.ctx.getWebSockets();
|
|
106
|
+
// console.debug(`Broadcasting push batch to ${this.subscribedWebSockets.size} clients`)
|
|
107
|
+
if (connectedClients.length > 0) {
|
|
108
|
+
const pullRes = encodeOutgoingMessage(
|
|
109
|
+
// TODO refactor to batch api
|
|
110
|
+
WSMessage.PullRes.make({
|
|
111
|
+
batch: decodedMessage.batch.map((mutationEventEncoded) => ({
|
|
109
112
|
mutationEventEncoded,
|
|
110
113
|
metadata: Option.some({ createdAt }),
|
|
111
|
-
}))
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
114
|
+
})),
|
|
115
|
+
remaining: 0,
|
|
116
|
+
}));
|
|
117
|
+
// NOTE we're also sending the pullRes to the pushing ws client as a confirmation
|
|
118
|
+
for (const conn of connectedClients) {
|
|
119
|
+
conn.send(pullRes);
|
|
118
120
|
}
|
|
119
|
-
yield* Effect.promise(() => storePromise);
|
|
120
|
-
i++;
|
|
121
121
|
}
|
|
122
|
+
// Wait for the storage write to complete before finishing this request
|
|
123
|
+
yield* storeFiber;
|
|
122
124
|
break;
|
|
123
125
|
}
|
|
124
126
|
case 'WSMessage.AdminResetRoomReq': {
|
|
@@ -126,7 +128,7 @@ export const makeDurableObject = (options) => {
|
|
|
126
128
|
ws.send(encodeOutgoingMessage(WSMessage.Error.make({ message: 'Invalid admin secret', requestId })));
|
|
127
129
|
return;
|
|
128
130
|
}
|
|
129
|
-
yield*
|
|
131
|
+
yield* storage.resetStore;
|
|
130
132
|
ws.send(encodeOutgoingMessage(WSMessage.AdminResetRoomRes.make({ requestId })));
|
|
131
133
|
break;
|
|
132
134
|
}
|
|
@@ -154,39 +156,58 @@ export const makeDurableObject = (options) => {
|
|
|
154
156
|
};
|
|
155
157
|
};
|
|
156
158
|
};
|
|
157
|
-
const makeStorage = (ctx, env,
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
159
|
+
const makeStorage = (ctx, env, storeId) => {
|
|
160
|
+
const dbName = `mutation_log_${PERSISTENCE_FORMAT_VERSION}_${toValidTableName(storeId)}`;
|
|
161
|
+
const execDb = (cb) => Effect.tryPromise({
|
|
162
|
+
try: () => cb(env.DB),
|
|
163
|
+
catch: (error) => new UnexpectedError({ cause: error, payload: { dbName } }),
|
|
164
|
+
}).pipe(Effect.map((_) => _.results));
|
|
165
|
+
const getHead = Effect.gen(function* () {
|
|
166
|
+
const result = yield* execDb((db) => db.prepare(`SELECT id FROM ${dbName} ORDER BY id DESC LIMIT 1`).all());
|
|
167
|
+
return result[0]?.id ?? EventId.ROOT.global;
|
|
168
|
+
}).pipe(UnexpectedError.mapToUnexpectedError);
|
|
169
|
+
const getEvents = (cursor) => Effect.gen(function* () {
|
|
167
170
|
const whereClause = cursor === undefined ? '' : `WHERE id > ${cursor}`;
|
|
168
171
|
const sql = `SELECT * FROM ${dbName} ${whereClause} ORDER BY id ASC`;
|
|
169
172
|
// TODO handle case where `cursor` was not found
|
|
170
|
-
const rawEvents =
|
|
171
|
-
|
|
172
|
-
throw new Error(rawEvents.error);
|
|
173
|
-
}
|
|
174
|
-
const events = Schema.decodeUnknownSync(Schema.Array(mutationLogTable.schema))(rawEvents.results).map(({ createdAt, ...mutationEventEncoded }) => ({
|
|
173
|
+
const rawEvents = yield* execDb((db) => db.prepare(sql).all());
|
|
174
|
+
const events = Schema.decodeUnknownSync(Schema.Array(mutationLogTable.schema))(rawEvents).map(({ createdAt, ...mutationEventEncoded }) => ({
|
|
175
175
|
mutationEventEncoded,
|
|
176
176
|
metadata: Option.some({ createdAt }),
|
|
177
177
|
}));
|
|
178
178
|
return events;
|
|
179
|
-
};
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
179
|
+
});
|
|
180
|
+
const appendEvents = (batch, createdAt) => Effect.gen(function* () {
|
|
181
|
+
// If there are no events, do nothing.
|
|
182
|
+
if (batch.length === 0)
|
|
183
|
+
return;
|
|
184
|
+
// CF D1 limits:
|
|
185
|
+
// Maximum bound parameters per query 100, Maximum arguments per SQL function 32
|
|
186
|
+
// Thus we need to split the batch into chunks of max (100/5=)20 events each.
|
|
187
|
+
const CHUNK_SIZE = 20;
|
|
188
|
+
for (let i = 0; i < batch.length; i += CHUNK_SIZE) {
|
|
189
|
+
const chunk = batch.slice(i, i + CHUNK_SIZE);
|
|
190
|
+
// Create a list of placeholders ("(?, ?, ?, ?, ?), …") corresponding to each event.
|
|
191
|
+
const valuesPlaceholders = chunk.map(() => '(?, ?, ?, ?, ?)').join(', ');
|
|
192
|
+
const sql = `INSERT INTO ${dbName} (id, parentId, args, mutation, createdAt) VALUES ${valuesPlaceholders}`;
|
|
193
|
+
// Flatten the event properties into a parameters array.
|
|
194
|
+
const params = chunk.flatMap((event) => [
|
|
195
|
+
event.id,
|
|
196
|
+
event.parentId,
|
|
197
|
+
JSON.stringify(event.args),
|
|
198
|
+
event.mutation,
|
|
199
|
+
createdAt,
|
|
200
|
+
]);
|
|
201
|
+
yield* execDb((db) => db
|
|
202
|
+
.prepare(sql)
|
|
203
|
+
.bind(...params)
|
|
204
|
+
.run());
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
const resetStore = Effect.gen(function* () {
|
|
208
|
+
yield* Effect.promise(() => ctx.storage.deleteAll());
|
|
209
|
+
}).pipe(UnexpectedError.mapToUnexpectedError);
|
|
210
|
+
return { dbName, getHead, getEvents, appendEvents, resetStore };
|
|
190
211
|
};
|
|
191
212
|
const getStoreId = (request) => {
|
|
192
213
|
const url = new URL(request.url);
|
|
@@ -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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"}
|
|
@@ -11,8 +11,7 @@ export declare const SyncMetadata: Schema.Struct<{
|
|
|
11
11
|
}>;
|
|
12
12
|
export type SyncMetadata = typeof SyncMetadata.Type;
|
|
13
13
|
export declare const PullRes: Schema.TaggedStruct<"WSMessage.PullRes", {
|
|
14
|
-
|
|
15
|
-
events: Schema.Array$<Schema.Struct<{
|
|
14
|
+
batch: Schema.Array$<Schema.Struct<{
|
|
16
15
|
mutationEventEncoded: Schema.Struct<{
|
|
17
16
|
mutation: typeof Schema.String;
|
|
18
17
|
args: typeof Schema.Any;
|
|
@@ -27,19 +26,6 @@ export declare const PullRes: Schema.TaggedStruct<"WSMessage.PullRes", {
|
|
|
27
26
|
remaining: typeof Schema.Number;
|
|
28
27
|
}>;
|
|
29
28
|
export type PullRes = typeof PullRes.Type;
|
|
30
|
-
export declare const PushBroadcast: Schema.TaggedStruct<"WSMessage.PushBroadcast", {
|
|
31
|
-
mutationEventEncoded: Schema.Struct<{
|
|
32
|
-
mutation: typeof Schema.String;
|
|
33
|
-
args: typeof Schema.Any;
|
|
34
|
-
id: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
35
|
-
parentId: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
36
|
-
}>;
|
|
37
|
-
metadata: Schema.Option<Schema.Struct<{
|
|
38
|
-
/** ISO date format */
|
|
39
|
-
createdAt: typeof Schema.String;
|
|
40
|
-
}>>;
|
|
41
|
-
}>;
|
|
42
|
-
export type PushBroadcast = typeof PushBroadcast.Type;
|
|
43
29
|
export declare const PushReq: Schema.TaggedStruct<"WSMessage.PushReq", {
|
|
44
30
|
requestId: typeof Schema.String;
|
|
45
31
|
batch: Schema.Array$<Schema.Struct<{
|
|
@@ -52,7 +38,6 @@ export declare const PushReq: Schema.TaggedStruct<"WSMessage.PushReq", {
|
|
|
52
38
|
export type PushReq = typeof PushReq.Type;
|
|
53
39
|
export declare const PushAck: Schema.TaggedStruct<"WSMessage.PushAck", {
|
|
54
40
|
requestId: typeof Schema.String;
|
|
55
|
-
mutationId: typeof Schema.Number;
|
|
56
41
|
}>;
|
|
57
42
|
export type PushAck = typeof PushAck.Type;
|
|
58
43
|
export declare const Error: Schema.TaggedStruct<"WSMessage.Error", {
|
|
@@ -93,8 +78,7 @@ export declare const Message: Schema.Union<[Schema.TaggedStruct<"WSMessage.PullR
|
|
|
93
78
|
/** Omitting the cursor will start from the beginning */
|
|
94
79
|
cursor: Schema.optional<typeof Schema.Number>;
|
|
95
80
|
}>, Schema.TaggedStruct<"WSMessage.PullRes", {
|
|
96
|
-
|
|
97
|
-
events: Schema.Array$<Schema.Struct<{
|
|
81
|
+
batch: Schema.Array$<Schema.Struct<{
|
|
98
82
|
mutationEventEncoded: Schema.Struct<{
|
|
99
83
|
mutation: typeof Schema.String;
|
|
100
84
|
args: typeof Schema.Any;
|
|
@@ -107,17 +91,6 @@ export declare const Message: Schema.Union<[Schema.TaggedStruct<"WSMessage.PullR
|
|
|
107
91
|
}>>;
|
|
108
92
|
}>>;
|
|
109
93
|
remaining: typeof Schema.Number;
|
|
110
|
-
}>, Schema.TaggedStruct<"WSMessage.PushBroadcast", {
|
|
111
|
-
mutationEventEncoded: Schema.Struct<{
|
|
112
|
-
mutation: typeof Schema.String;
|
|
113
|
-
args: typeof Schema.Any;
|
|
114
|
-
id: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
115
|
-
parentId: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
116
|
-
}>;
|
|
117
|
-
metadata: Schema.Option<Schema.Struct<{
|
|
118
|
-
/** ISO date format */
|
|
119
|
-
createdAt: typeof Schema.String;
|
|
120
|
-
}>>;
|
|
121
94
|
}>, Schema.TaggedStruct<"WSMessage.PushReq", {
|
|
122
95
|
requestId: typeof Schema.String;
|
|
123
96
|
batch: Schema.Array$<Schema.Struct<{
|
|
@@ -128,7 +101,6 @@ export declare const Message: Schema.Union<[Schema.TaggedStruct<"WSMessage.PullR
|
|
|
128
101
|
}>>;
|
|
129
102
|
}>, Schema.TaggedStruct<"WSMessage.PushAck", {
|
|
130
103
|
requestId: typeof Schema.String;
|
|
131
|
-
mutationId: typeof Schema.Number;
|
|
132
104
|
}>, Schema.TaggedStruct<"WSMessage.Error", {
|
|
133
105
|
requestId: typeof Schema.String;
|
|
134
106
|
message: typeof Schema.String;
|
|
@@ -153,8 +125,7 @@ export declare const Message: Schema.Union<[Schema.TaggedStruct<"WSMessage.PullR
|
|
|
153
125
|
export type Message = typeof Message.Type;
|
|
154
126
|
export type MessageEncoded = typeof Message.Encoded;
|
|
155
127
|
export declare const BackendToClientMessage: Schema.Union<[Schema.TaggedStruct<"WSMessage.PullRes", {
|
|
156
|
-
|
|
157
|
-
events: Schema.Array$<Schema.Struct<{
|
|
128
|
+
batch: Schema.Array$<Schema.Struct<{
|
|
158
129
|
mutationEventEncoded: Schema.Struct<{
|
|
159
130
|
mutation: typeof Schema.String;
|
|
160
131
|
args: typeof Schema.Any;
|
|
@@ -167,20 +138,8 @@ export declare const BackendToClientMessage: Schema.Union<[Schema.TaggedStruct<"
|
|
|
167
138
|
}>>;
|
|
168
139
|
}>>;
|
|
169
140
|
remaining: typeof Schema.Number;
|
|
170
|
-
}>, Schema.TaggedStruct<"WSMessage.PushBroadcast", {
|
|
171
|
-
mutationEventEncoded: Schema.Struct<{
|
|
172
|
-
mutation: typeof Schema.String;
|
|
173
|
-
args: typeof Schema.Any;
|
|
174
|
-
id: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
175
|
-
parentId: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
176
|
-
}>;
|
|
177
|
-
metadata: Schema.Option<Schema.Struct<{
|
|
178
|
-
/** ISO date format */
|
|
179
|
-
createdAt: typeof Schema.String;
|
|
180
|
-
}>>;
|
|
181
141
|
}>, Schema.TaggedStruct<"WSMessage.PushAck", {
|
|
182
142
|
requestId: typeof Schema.String;
|
|
183
|
-
mutationId: typeof Schema.Number;
|
|
184
143
|
}>, Schema.TaggedStruct<"WSMessage.AdminResetRoomRes", {
|
|
185
144
|
requestId: typeof Schema.String;
|
|
186
145
|
}>, Schema.TaggedStruct<"WSMessage.AdminInfoRes", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-message-types.d.ts","sourceRoot":"","sources":["../../src/common/ws-message-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,eAAO,MAAM,OAAO;;IAElB,wDAAwD;;EAExD,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,eAAO,MAAM,YAAY;IACvB,sBAAsB;;EAEtB,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"ws-message-types.d.ts","sourceRoot":"","sources":["../../src/common/ws-message-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,24 +10,18 @@ export const SyncMetadata = Schema.Struct({
|
|
|
10
10
|
createdAt: Schema.String,
|
|
11
11
|
});
|
|
12
12
|
export const PullRes = Schema.TaggedStruct('WSMessage.PullRes', {
|
|
13
|
-
|
|
14
|
-
events: Schema.Array(Schema.Struct({
|
|
13
|
+
batch: Schema.Array(Schema.Struct({
|
|
15
14
|
mutationEventEncoded: MutationEvent.AnyEncodedGlobal,
|
|
16
15
|
metadata: Schema.Option(SyncMetadata),
|
|
17
16
|
})),
|
|
18
17
|
remaining: Schema.Number,
|
|
19
18
|
});
|
|
20
|
-
export const PushBroadcast = Schema.TaggedStruct('WSMessage.PushBroadcast', {
|
|
21
|
-
mutationEventEncoded: MutationEvent.AnyEncodedGlobal,
|
|
22
|
-
metadata: Schema.Option(SyncMetadata),
|
|
23
|
-
});
|
|
24
19
|
export const PushReq = Schema.TaggedStruct('WSMessage.PushReq', {
|
|
25
20
|
requestId: Schema.String,
|
|
26
21
|
batch: Schema.Array(MutationEvent.AnyEncodedGlobal),
|
|
27
22
|
});
|
|
28
23
|
export const PushAck = Schema.TaggedStruct('WSMessage.PushAck', {
|
|
29
24
|
requestId: Schema.String,
|
|
30
|
-
mutationId: Schema.Number,
|
|
31
25
|
});
|
|
32
26
|
export const Error = Schema.TaggedStruct('WSMessage.Error', {
|
|
33
27
|
requestId: Schema.String,
|
|
@@ -56,7 +50,7 @@ export const AdminInfoRes = Schema.TaggedStruct('WSMessage.AdminInfoRes', {
|
|
|
56
50
|
durableObjectId: Schema.String,
|
|
57
51
|
}),
|
|
58
52
|
});
|
|
59
|
-
export const Message = Schema.Union(PullReq, PullRes,
|
|
60
|
-
export const BackendToClientMessage = Schema.Union(PullRes,
|
|
53
|
+
export const Message = Schema.Union(PullReq, PullRes, PushReq, PushAck, Error, Ping, Pong, AdminResetRoomReq, AdminResetRoomRes, AdminInfoReq, AdminInfoRes);
|
|
54
|
+
export const BackendToClientMessage = Schema.Union(PullRes, PushAck, AdminResetRoomRes, AdminInfoRes, Error, Pong);
|
|
61
55
|
export const ClientToBackendMessage = Schema.Union(PullReq, PushReq, AdminResetRoomReq, AdminInfoReq, Ping);
|
|
62
56
|
//# sourceMappingURL=ws-message-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-message-types.js","sourceRoot":"","sources":["../../src/common/ws-message-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE;IAC9D,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACvC,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE;IAC9D,
|
|
1
|
+
{"version":3,"file":"ws-message-types.js","sourceRoot":"","sources":["../../src/common/ws-message-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-impl.d.ts","sourceRoot":"","sources":["../../src/sync-impl/ws-impl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAEL,MAAM,EASP,MAAM,yBAAyB,CAAA;AAIhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,UAAU,YAAa,aAAa,KAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"ws-impl.d.ts","sourceRoot":"","sources":["../../src/sync-impl/ws-impl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAEL,MAAM,EASP,MAAM,yBAAyB,CAAA;AAIhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,UAAU,YAAa,aAAa,KAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAyD3G,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
import { InvalidPullError, InvalidPushError } from '@livestore/common';
|
|
3
|
-
import {
|
|
3
|
+
import { LS_DEV } from '@livestore/utils';
|
|
4
4
|
import { Deferred, Effect, Option, PubSub, Queue, Schedule, Schema, Stream, SubscriptionRef, WebSocket, } from '@livestore/utils/effect';
|
|
5
5
|
import { nanoid } from '@livestore/utils/nanoid';
|
|
6
6
|
import { WSMessage } from '../common/mod.js';
|
|
@@ -14,27 +14,18 @@ export const makeWsSync = (options) => Effect.gen(function* () {
|
|
|
14
14
|
const requestId = nanoid();
|
|
15
15
|
const cursor = Option.getOrUndefined(args)?.cursor.global;
|
|
16
16
|
yield* send(WSMessage.PullReq.make({ cursor, requestId }));
|
|
17
|
-
return Stream.fromPubSub(incomingMessages).pipe(Stream.
|
|
17
|
+
return Stream.fromPubSub(incomingMessages).pipe(Stream.tap((_) => _._tag === 'WSMessage.Error' && _.requestId === requestId
|
|
18
18
|
? new InvalidPullError({ message: _.message })
|
|
19
|
-
: Effect.void),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
batch: msg.events.map(({ mutationEventEncoded, metadata }) => ({
|
|
23
|
-
mutationEventEncoded,
|
|
24
|
-
metadata,
|
|
25
|
-
})),
|
|
26
|
-
remaining: msg.remaining,
|
|
27
|
-
}));
|
|
19
|
+
: Effect.void),
|
|
20
|
+
// This call is mostly here to for type narrowing
|
|
21
|
+
Stream.filter(Schema.is(WSMessage.PullRes)));
|
|
28
22
|
}).pipe(Stream.unwrap),
|
|
29
23
|
push: (batch) => Effect.gen(function* () {
|
|
30
24
|
const ready = yield* Deferred.make();
|
|
31
25
|
const requestId = nanoid();
|
|
32
|
-
yield* Stream.fromPubSub(incomingMessages).pipe(Stream.
|
|
26
|
+
yield* Stream.fromPubSub(incomingMessages).pipe(Stream.tap((_) => _._tag === 'WSMessage.Error' && _.requestId === requestId
|
|
33
27
|
? Deferred.fail(ready, new InvalidPushError({ reason: { _tag: 'Unexpected', message: _.message } }))
|
|
34
|
-
: Effect.void), Stream.filter(
|
|
35
|
-
// TODO bring back filterting of "own events"
|
|
36
|
-
// Stream.filter((_) => _.mutationId === mutationEventEncoded.id.global),
|
|
37
|
-
Stream.take(1), Stream.tap(() => Deferred.succeed(ready, void 0)), Stream.runDrain, Effect.tapCauseLogPretty, Effect.fork);
|
|
28
|
+
: Effect.void), Stream.filter((_) => _._tag === 'WSMessage.PushAck' && _.requestId === requestId), Stream.take(1), Stream.tap(() => Deferred.succeed(ready, void 0)), Stream.runDrain, Effect.tapCauseLogPretty, Effect.fork);
|
|
38
29
|
yield* send(WSMessage.PushReq.make({ batch, requestId }));
|
|
39
30
|
yield* ready;
|
|
40
31
|
const createdAt = new Date().toISOString();
|
|
@@ -51,17 +42,19 @@ const connect = (wsUrl) => Effect.gen(function* () {
|
|
|
51
42
|
const send = (message) => Effect.gen(function* () {
|
|
52
43
|
// Wait first until we're online
|
|
53
44
|
yield* waitUntilOnline;
|
|
54
|
-
yield* Effect.spanEvent(`Sending message: ${message._tag}`, message._tag === 'WSMessage.PushReq'
|
|
55
|
-
? {
|
|
56
|
-
id: message.batch[0].id,
|
|
57
|
-
parentId: message.batch[0].parentId,
|
|
58
|
-
batchLength: message.batch.length,
|
|
59
|
-
}
|
|
60
|
-
: message._tag === 'WSMessage.PullReq'
|
|
61
|
-
? { cursor: message.cursor ?? '-' }
|
|
62
|
-
: {});
|
|
63
45
|
// TODO use MsgPack instead of JSON to speed up the serialization / reduce the size of the messages
|
|
64
46
|
socketRef.current.send(Schema.encodeSync(Schema.parseJson(WSMessage.Message))(message));
|
|
47
|
+
if (LS_DEV) {
|
|
48
|
+
yield* Effect.spanEvent(`Sent message: ${message._tag}`, message._tag === 'WSMessage.PushReq'
|
|
49
|
+
? {
|
|
50
|
+
id: message.batch[0].id,
|
|
51
|
+
parentId: message.batch[0].parentId,
|
|
52
|
+
batchLength: message.batch.length,
|
|
53
|
+
}
|
|
54
|
+
: message._tag === 'WSMessage.PullReq'
|
|
55
|
+
? { cursor: message.cursor ?? '-' }
|
|
56
|
+
: {});
|
|
57
|
+
}
|
|
65
58
|
});
|
|
66
59
|
const innerConnect = Effect.gen(function* () {
|
|
67
60
|
// If the browser already tells us we're offline, then we'll at least wait until the browser
|
|
@@ -69,6 +62,7 @@ const connect = (wsUrl) => Effect.gen(function* () {
|
|
|
69
62
|
while (typeof navigator !== 'undefined' && navigator.onLine === false) {
|
|
70
63
|
yield* Effect.sleep(1000);
|
|
71
64
|
}
|
|
65
|
+
// TODO bring this back in a cross-platform way
|
|
72
66
|
// if (navigator.onLine === false) {
|
|
73
67
|
// yield* Effect.async((cb) => self.addEventListener('online', () => cb(Effect.void)))
|
|
74
68
|
// }
|