@livestore/sync-cf 0.4.0-dev.17 → 0.4.0-dev.19
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/do/layer.d.ts +3 -3
- package/dist/cf-worker/do/layer.d.ts.map +1 -1
- package/dist/cf-worker/do/layer.js +5 -5
- package/dist/cf-worker/do/layer.js.map +1 -1
- package/dist/cf-worker/do/pull.d.ts.map +1 -1
- package/dist/cf-worker/do/pull.js +3 -3
- package/dist/cf-worker/do/pull.js.map +1 -1
- package/dist/cf-worker/do/push.js +4 -4
- package/dist/cf-worker/do/push.js.map +1 -1
- package/dist/cf-worker/do/sqlite.js +3 -3
- package/dist/cf-worker/do/sqlite.js.map +1 -1
- package/dist/cf-worker/do/sync-storage.d.ts +6 -6
- package/dist/cf-worker/do/sync-storage.d.ts.map +1 -1
- package/dist/cf-worker/do/sync-storage.js +10 -10
- package/dist/cf-worker/do/sync-storage.js.map +1 -1
- package/dist/cf-worker/shared.d.ts +1 -3
- package/dist/cf-worker/shared.d.ts.map +1 -1
- package/dist/cf-worker/shared.js.map +1 -1
- package/dist/cf-worker/worker.d.ts +1 -1
- package/dist/cf-worker/worker.js +4 -4
- package/dist/cf-worker/worker.js.map +1 -1
- package/dist/client/transport/do-rpc-client.d.ts.map +1 -1
- package/dist/client/transport/do-rpc-client.js +4 -6
- package/dist/client/transport/do-rpc-client.js.map +1 -1
- package/dist/client/transport/http-rpc-client.d.ts.map +1 -1
- package/dist/client/transport/http-rpc-client.js +6 -6
- package/dist/client/transport/http-rpc-client.js.map +1 -1
- package/dist/client/transport/ws-rpc-client.d.ts +2 -1
- package/dist/client/transport/ws-rpc-client.d.ts.map +1 -1
- package/dist/client/transport/ws-rpc-client.js +5 -5
- package/dist/client/transport/ws-rpc-client.js.map +1 -1
- package/dist/common/http-rpc-schema.d.ts +2 -2
- package/dist/common/http-rpc-schema.d.ts.map +1 -1
- package/dist/common/http-rpc-schema.js +2 -2
- package/dist/common/http-rpc-schema.js.map +1 -1
- package/dist/common/sync-message-types.js +3 -3
- package/dist/common/sync-message-types.js.map +1 -1
- package/package.json +5 -5
- package/src/cf-worker/do/layer.ts +6 -6
- package/src/cf-worker/do/pull.ts +3 -5
- package/src/cf-worker/do/push.ts +4 -4
- package/src/cf-worker/do/sqlite.ts +3 -3
- package/src/cf-worker/do/sync-storage.ts +26 -26
- package/src/cf-worker/shared.ts +1 -3
- package/src/cf-worker/worker.ts +4 -4
- package/src/client/transport/do-rpc-client.ts +4 -6
- package/src/client/transport/http-rpc-client.ts +7 -7
- package/src/client/transport/ws-rpc-client.ts +7 -7
- package/src/common/http-rpc-schema.ts +2 -2
- package/src/common/sync-message-types.ts +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InvalidPullError, InvalidPushError, SyncBackend,
|
|
1
|
+
import { InvalidPullError, InvalidPushError, SyncBackend, UnknownError } from '@livestore/common';
|
|
2
2
|
import { splitChunkBySize } from '@livestore/common/sync';
|
|
3
3
|
import { omit } from '@livestore/utils';
|
|
4
4
|
import { Chunk, Effect, HttpClient, HttpClientRequest, identity, Layer, Option, RpcClient, RpcSerialization, Schedule, Schema, Stream, SubscriptionRef, UrlParams, } from '@livestore/utils/effect';
|
|
@@ -16,7 +16,7 @@ export const makeHttpSync = (options) => ({ storeId, payload }) => Effect.gen(fu
|
|
|
16
16
|
storeId,
|
|
17
17
|
payload,
|
|
18
18
|
transport: 'http',
|
|
19
|
-
}).pipe(
|
|
19
|
+
}).pipe(UnknownError.mapToUnknownError);
|
|
20
20
|
const urlParams = UrlParams.fromInput(urlParamsData);
|
|
21
21
|
// Setup HTTP RPC Protocol
|
|
22
22
|
const HttpProtocolLive = RpcClient.layerProtocolHttp({
|
|
@@ -32,14 +32,14 @@ export const makeHttpSync = (options) => ({ storeId, payload }) => Effect.gen(fu
|
|
|
32
32
|
const ping = Effect.gen(function* () {
|
|
33
33
|
yield* rpcClient.SyncHttpRpc.Ping({ storeId, payload });
|
|
34
34
|
yield* SubscriptionRef.set(isConnected, true);
|
|
35
|
-
}).pipe(
|
|
35
|
+
}).pipe(UnknownError.mapToUnknownError, Effect.timeout(pingTimeout), Effect.catchTag('TimeoutException', () => SubscriptionRef.set(isConnected, false)));
|
|
36
36
|
const pingInterval = options.ping?.requestInterval ?? 10_000;
|
|
37
37
|
if (options.ping?.enabled !== false) {
|
|
38
38
|
// Automatically ping the server to keep the connection alive
|
|
39
39
|
yield* ping.pipe(Effect.repeat(Schedule.spaced(pingInterval)), Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
40
40
|
}
|
|
41
41
|
// Helps already establish a TCP connection to the server
|
|
42
|
-
const connect = ping.pipe(
|
|
42
|
+
const connect = ping.pipe(UnknownError.mapToUnknownError);
|
|
43
43
|
const backendIdHelper = yield* SyncBackend.makeBackendIdHelper;
|
|
44
44
|
const mapCursor = (cursor) => cursor.pipe(Option.map((a) => ({
|
|
45
45
|
eventSequenceNumber: a.eventSequenceNumber,
|
|
@@ -76,12 +76,12 @@ export const makeHttpSync = (options) => ({ storeId, payload }) => Effect.gen(fu
|
|
|
76
76
|
payload,
|
|
77
77
|
backendId,
|
|
78
78
|
}),
|
|
79
|
-
}), Effect.mapError((cause) => new InvalidPushError({ cause: new
|
|
79
|
+
}), Effect.mapError((cause) => new InvalidPushError({ cause: new UnknownError({ cause }) })));
|
|
80
80
|
for (const chunk of Chunk.toReadonlyArray(batchChunks)) {
|
|
81
81
|
const chunkArray = Chunk.toReadonlyArray(chunk);
|
|
82
82
|
yield* rpcClient.SyncHttpRpc.Push({ storeId, payload, batch: chunkArray, backendId });
|
|
83
83
|
}
|
|
84
|
-
}).pipe(pushSemaphore.withPermits(1), Effect.mapError((cause) => cause._tag === 'InvalidPushError' ? cause : new InvalidPushError({ cause: new
|
|
84
|
+
}).pipe(pushSemaphore.withPermits(1), Effect.mapError((cause) => cause._tag === 'InvalidPushError' ? cause : new InvalidPushError({ cause: new UnknownError({ cause }) })), Effect.withSpan('http-sync-client:push'));
|
|
85
85
|
return SyncBackend.of({
|
|
86
86
|
connect,
|
|
87
87
|
isConnected,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-rpc-client.js","sourceRoot":"","sources":["../../../src/client/transport/http-rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"http-rpc-client.js","sourceRoot":"","sources":["../../../src/client/transport/http-rpc-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SyncBackend } from '@livestore/common';
|
|
2
|
-
import { type Duration, Effect, type Scope
|
|
2
|
+
import { type Duration, Effect, type Scope } from '@livestore/utils/effect';
|
|
3
|
+
import type { WebSocket } from '@livestore/utils/effect/browser';
|
|
3
4
|
import type { SyncMetadata } from '../../common/sync-message-types.ts';
|
|
4
5
|
export interface WsSyncOptions {
|
|
5
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-rpc-client.d.ts","sourceRoot":"","sources":["../../../src/client/transport/ws-rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,WAAW,
|
|
1
|
+
{"version":3,"file":"ws-rpc-client.d.ts","sourceRoot":"","sources":["../../../src/client/transport/ws-rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,WAAW,EAAgB,MAAM,mBAAmB,CAAA;AAIjH,OAAO,EAEL,KAAK,QAAQ,EACb,MAAM,EAON,KAAK,KAAK,EAKX,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAGtE,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAChH,IAAI,CAAC,EAAE;QACL;;WAEG;QACH,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB;;;WAGG;QACH,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAA;QACvC;;;WAGG;QACH,eAAe,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAA;KACzC,CAAA;CACF;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACpB,SAAS,aAAa,KAAG,WAAW,CAAC,sBAAsB,CAAC,YAAY,CAqIrE,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InvalidPullError, InvalidPushError, IsOfflineError, SyncBackend,
|
|
1
|
+
import { InvalidPullError, InvalidPushError, IsOfflineError, SyncBackend, UnknownError } from '@livestore/common';
|
|
2
2
|
import { splitChunkBySize } from '@livestore/common/sync';
|
|
3
3
|
import { omit } from '@livestore/utils';
|
|
4
4
|
import { Chunk, Effect, Layer, Option, RpcClient, RpcSerialization, Schedule, Schema, Socket, Stream, SubscriptionRef, UrlParams, } from '@livestore/utils/effect';
|
|
@@ -19,7 +19,7 @@ export const makeWsSync = (options) => ({ storeId, payload }) => Effect.gen(func
|
|
|
19
19
|
storeId,
|
|
20
20
|
payload,
|
|
21
21
|
transport: 'ws',
|
|
22
|
-
}).pipe(
|
|
22
|
+
}).pipe(UnknownError.mapToUnknownError);
|
|
23
23
|
const urlParams = UrlParams.fromInput(urlParamsData);
|
|
24
24
|
const wsUrl = `${options.url}?${UrlParams.toString(urlParams)}`;
|
|
25
25
|
const isConnected = yield* SubscriptionRef.make(false);
|
|
@@ -49,7 +49,7 @@ export const makeWsSync = (options) => ({ storeId, payload }) => Effect.gen(func
|
|
|
49
49
|
const pinger = yield* RpcClient.SocketPinger.pipe(Effect.provide(ctx));
|
|
50
50
|
yield* pinger.ping;
|
|
51
51
|
yield* SubscriptionRef.set(isConnected, true);
|
|
52
|
-
}).pipe(Effect.timeout(pingTimeout), Effect.catchTag('TimeoutException', () => SubscriptionRef.set(isConnected, false)),
|
|
52
|
+
}).pipe(Effect.timeout(pingTimeout), Effect.catchTag('TimeoutException', () => SubscriptionRef.set(isConnected, false)), UnknownError.mapToUnknownError, Effect.withSpan('ping'));
|
|
53
53
|
const backendIdHelper = yield* SyncBackend.makeBackendIdHelper;
|
|
54
54
|
return SyncBackend.of({
|
|
55
55
|
isConnected,
|
|
@@ -80,7 +80,7 @@ export const makeWsSync = (options) => ({ storeId, payload }) => Effect.gen(func
|
|
|
80
80
|
maxItems: MAX_PUSH_EVENTS_PER_REQUEST,
|
|
81
81
|
maxBytes: MAX_WS_MESSAGE_BYTES,
|
|
82
82
|
encode: encodePayload,
|
|
83
|
-
}), Effect.mapError((cause) => new InvalidPushError({ cause: new
|
|
83
|
+
}), Effect.mapError((cause) => new InvalidPushError({ cause: new UnknownError({ cause }) })));
|
|
84
84
|
for (const sub of chunksChunk) {
|
|
85
85
|
yield* rpcClient.SyncWsRpc.Push({
|
|
86
86
|
storeId,
|
|
@@ -89,7 +89,7 @@ export const makeWsSync = (options) => ({ storeId, payload }) => Effect.gen(func
|
|
|
89
89
|
backendId: backendIdHelper.get(),
|
|
90
90
|
}).pipe(Effect.mapError((cause) => cause._tag === 'InvalidPushError'
|
|
91
91
|
? cause
|
|
92
|
-
: new InvalidPushError({ cause: new
|
|
92
|
+
: new InvalidPushError({ cause: new UnknownError({ cause }) })));
|
|
93
93
|
}
|
|
94
94
|
}).pipe(Effect.withSpan('push')),
|
|
95
95
|
ping,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-rpc-client.js","sourceRoot":"","sources":["../../../src/client/transport/ws-rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"ws-rpc-client.js","sourceRoot":"","sources":["../../../src/client/transport/ws-rpc-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InvalidPullError, InvalidPushError,
|
|
1
|
+
import { InvalidPullError, InvalidPushError, UnknownError } from '@livestore/common';
|
|
2
2
|
import { Rpc, RpcGroup, Schema } from '@livestore/utils/effect';
|
|
3
3
|
declare const SyncHttpRpc_base: RpcGroup.RpcGroup<Rpc.Rpc<"SyncHttpRpc.Pull", Schema.Struct<{
|
|
4
4
|
cursor: Schema.Option<Schema.Struct<{
|
|
@@ -44,7 +44,7 @@ declare const SyncHttpRpc_base: RpcGroup.RpcGroup<Rpc.Rpc<"SyncHttpRpc.Pull", Sc
|
|
|
44
44
|
payload: Schema.optional<Schema.Schema<Schema.JsonValue, Schema.JsonValue, never>>;
|
|
45
45
|
}>, Schema.Struct<{
|
|
46
46
|
_tag: Schema.tag<"SyncMessage.Pong">;
|
|
47
|
-
}>, typeof
|
|
47
|
+
}>, typeof UnknownError, never>>;
|
|
48
48
|
/**
|
|
49
49
|
* HTTP RPC Schema for LiveStore CF Sync Provider
|
|
50
50
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-rpc-schema.d.ts","sourceRoot":"","sources":["../../src/common/http-rpc-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"http-rpc-schema.d.ts","sourceRoot":"","sources":["../../src/common/http-rpc-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG/D;;;;;;GAMG;AACH,qBAAa,WAAY,SAAQ,gBA4BhC;CAAG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InvalidPullError, InvalidPushError,
|
|
1
|
+
import { InvalidPullError, InvalidPushError, UnknownError } from '@livestore/common';
|
|
2
2
|
import { Rpc, RpcGroup, Schema } from '@livestore/utils/effect';
|
|
3
3
|
import * as SyncMessage from "./sync-message-types.js";
|
|
4
4
|
/**
|
|
@@ -31,7 +31,7 @@ export class SyncHttpRpc extends RpcGroup.make(Rpc.make('SyncHttpRpc.Pull', {
|
|
|
31
31
|
payload: Schema.optional(Schema.JsonValue),
|
|
32
32
|
}),
|
|
33
33
|
success: SyncMessage.Pong,
|
|
34
|
-
error:
|
|
34
|
+
error: UnknownError,
|
|
35
35
|
})) {
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=http-rpc-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-rpc-schema.js","sourceRoot":"","sources":["../../src/common/http-rpc-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"http-rpc-schema.js","sourceRoot":"","sources":["../../src/common/http-rpc-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ,CAAC,IAAI,CAC5C,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC1C,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM;KAClC,CAAC;IACF,OAAO,EAAE,WAAW,CAAC,YAAY;IACjC,KAAK,EAAE,gBAAgB;IACvB,MAAM,EAAE,IAAI;CACb,CAAC,EACF,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC1C,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM;KAClC,CAAC;IACF,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,KAAK,EAAE,gBAAgB;CACxB,CAAC,EACF,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;KAC3C,CAAC;IACF,OAAO,EAAE,WAAW,CAAC,IAAI;IACzB,KAAK,EAAE,YAAY;CACpB,CAAC,CACH;CAAG"}
|
|
@@ -14,12 +14,12 @@ export const PullRequest = Schema.Struct({
|
|
|
14
14
|
/** Omitting the cursor will start from the beginning */
|
|
15
15
|
cursor: Schema.Option(Schema.Struct({
|
|
16
16
|
backendId: BackendId,
|
|
17
|
-
eventSequenceNumber: EventSequenceNumber.
|
|
17
|
+
eventSequenceNumber: EventSequenceNumber.Global.Schema,
|
|
18
18
|
})),
|
|
19
19
|
}).annotations({ title: '@livestore/sync-cf:PullRequest' });
|
|
20
20
|
export const PullResponse = Schema.Struct({
|
|
21
21
|
batch: Schema.Array(Schema.Struct({
|
|
22
|
-
eventEncoded: LiveStoreEvent.
|
|
22
|
+
eventEncoded: LiveStoreEvent.Global.Encoded,
|
|
23
23
|
metadata: Schema.Option(SyncMetadata),
|
|
24
24
|
})),
|
|
25
25
|
pageInfo: SyncBackend.PullResPageInfo,
|
|
@@ -31,7 +31,7 @@ export const emptyPullResponse = (backendId) => PullResponse.make({
|
|
|
31
31
|
backendId,
|
|
32
32
|
});
|
|
33
33
|
export const PushRequest = Schema.Struct({
|
|
34
|
-
batch: Schema.Array(LiveStoreEvent.
|
|
34
|
+
batch: Schema.Array(LiveStoreEvent.Global.Encoded),
|
|
35
35
|
backendId: Schema.Option(BackendId),
|
|
36
36
|
}).annotations({ title: '@livestore/sync-cf:PushRequest' });
|
|
37
37
|
export const PushAck = Schema.Struct({}).annotations({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-message-types.js","sourceRoot":"","sources":["../../src/common/sync-message-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD;;;;GAIG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,0BAA0B,EAAE;IAC1E,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAA;AAI5D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,MAAM,CAAC;QACZ,SAAS,EAAE,SAAS;QACpB,mBAAmB,EAAE,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"sync-message-types.js","sourceRoot":"","sources":["../../src/common/sync-message-types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/sync-cf",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.19",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
"./cf-worker": "./dist/cf-worker/mod.js"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@cloudflare/workers-types": "4.
|
|
13
|
-
"@livestore/common": "0.4.0-dev.
|
|
14
|
-
"@livestore/
|
|
15
|
-
"@livestore/
|
|
12
|
+
"@cloudflare/workers-types": "4.20251118.0",
|
|
13
|
+
"@livestore/common": "0.4.0-dev.19",
|
|
14
|
+
"@livestore/utils": "0.4.0-dev.19",
|
|
15
|
+
"@livestore/common-cf": "0.4.0-dev.19"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UnknownError } from '@livestore/common'
|
|
2
2
|
import { EventSequenceNumber, State } from '@livestore/common/schema'
|
|
3
3
|
import type { CfTypes } from '@livestore/common-cf'
|
|
4
4
|
import { shouldNeverHappen } from '@livestore/utils'
|
|
@@ -43,7 +43,7 @@ export class DoCtx extends Effect.Service<DoCtx>()('DoCtx', {
|
|
|
43
43
|
if (opt?._tag === 'd1') {
|
|
44
44
|
const db = (doSelf.env as any)[opt.binding]
|
|
45
45
|
if (!db) {
|
|
46
|
-
return yield*
|
|
46
|
+
return yield* UnknownError.make({ cause: new Error(`D1 binding '${opt.binding}' not found on env`) })
|
|
47
47
|
}
|
|
48
48
|
return { _tag: 'd1' as const, db }
|
|
49
49
|
} else if (opt?._tag === 'do-sqlite' || opt === undefined) {
|
|
@@ -77,14 +77,14 @@ export class DoCtx extends Effect.Service<DoCtx>()('DoCtx', {
|
|
|
77
77
|
.exec(`SELECT * FROM "${contextTable.sqliteDef.name}" WHERE storeId = ?`, storeId)
|
|
78
78
|
.toArray()[0] as typeof contextTable.rowSchema.Type | undefined
|
|
79
79
|
|
|
80
|
-
const currentHeadRef = { current: storageRow?.currentHead ?? EventSequenceNumber.ROOT.global }
|
|
80
|
+
const currentHeadRef = { current: storageRow?.currentHead ?? EventSequenceNumber.Client.ROOT.global }
|
|
81
81
|
|
|
82
82
|
// TODO do concistency check with eventlog table to make sure the head is consistent
|
|
83
83
|
|
|
84
84
|
// Should be the same backendId for lifetime of the durable object
|
|
85
85
|
const backendId = storageRow?.backendId ?? nanoid()
|
|
86
86
|
|
|
87
|
-
const updateCurrentHead = (currentHead: EventSequenceNumber.
|
|
87
|
+
const updateCurrentHead = (currentHead: EventSequenceNumber.Global.Type) => {
|
|
88
88
|
doSelf.ctx.storage.sql.exec(
|
|
89
89
|
`INSERT OR REPLACE INTO "${contextTable.sqliteDef.name}" (storeId, currentHead, backendId) VALUES (?, ?, ?)`,
|
|
90
90
|
storeId,
|
|
@@ -117,12 +117,12 @@ export class DoCtx extends Effect.Service<DoCtx>()('DoCtx', {
|
|
|
117
117
|
|
|
118
118
|
// Set initial current head to root
|
|
119
119
|
if (storageRow === undefined) {
|
|
120
|
-
updateCurrentHead(EventSequenceNumber.ROOT.global)
|
|
120
|
+
updateCurrentHead(EventSequenceNumber.Client.ROOT.global)
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
return storageCache
|
|
124
124
|
},
|
|
125
|
-
|
|
125
|
+
UnknownError.mapToUnknownError,
|
|
126
126
|
Effect.withSpan('@livestore/sync-cf:durable-object:makeDoCtx'),
|
|
127
127
|
),
|
|
128
128
|
}) {}
|
package/src/cf-worker/do/pull.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BackendIdMismatchError, InvalidPullError, SyncBackend,
|
|
1
|
+
import { BackendIdMismatchError, InvalidPullError, SyncBackend, UnknownError } from '@livestore/common'
|
|
2
2
|
import { splitChunkBySize } from '@livestore/common/sync'
|
|
3
3
|
import { Chunk, Effect, Option, Schema, Stream } from '@livestore/utils/effect'
|
|
4
4
|
import { MAX_PULL_EVENTS_PER_MESSAGE, MAX_WS_MESSAGE_BYTES } from '../../common/constants.ts'
|
|
@@ -24,9 +24,7 @@ export const makeEndingPullStream = (
|
|
|
24
24
|
const { doOptions, backendId, storeId, storage } = yield* DoCtx
|
|
25
25
|
|
|
26
26
|
if (doOptions?.onPull) {
|
|
27
|
-
yield* Effect.tryAll(() => doOptions!.onPull!(req, { storeId, payload })).pipe(
|
|
28
|
-
UnexpectedError.mapToUnexpectedError,
|
|
29
|
-
)
|
|
27
|
+
yield* Effect.tryAll(() => doOptions!.onPull!(req, { storeId, payload })).pipe(UnknownError.mapToUnknownError)
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
if (req.cursor._tag === 'Some' && req.cursor.value.backendId !== backendId) {
|
|
@@ -64,7 +62,7 @@ export const makeEndingPullStream = (
|
|
|
64
62
|
Stream.tap(
|
|
65
63
|
Effect.fn(function* (res) {
|
|
66
64
|
if (doOptions?.onPullRes) {
|
|
67
|
-
yield* Effect.tryAll(() => doOptions.onPullRes!(res)).pipe(
|
|
65
|
+
yield* Effect.tryAll(() => doOptions.onPullRes!(res)).pipe(UnknownError.mapToUnknownError)
|
|
68
66
|
}
|
|
69
67
|
}),
|
|
70
68
|
),
|
package/src/cf-worker/do/push.ts
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
InvalidPushError,
|
|
4
4
|
ServerAheadError,
|
|
5
5
|
SyncBackend,
|
|
6
|
-
|
|
6
|
+
UnknownError,
|
|
7
7
|
} from '@livestore/common'
|
|
8
8
|
import { splitChunkBySize } from '@livestore/common/sync'
|
|
9
9
|
import { type CfTypes, emitStreamResponse } from '@livestore/common-cf'
|
|
@@ -41,7 +41,7 @@ export const makePush =
|
|
|
41
41
|
|
|
42
42
|
if (options?.onPush) {
|
|
43
43
|
yield* Effect.tryAll(() => options.onPush!(pushRequest, { storeId, payload })).pipe(
|
|
44
|
-
|
|
44
|
+
UnknownError.mapToUnknownError,
|
|
45
45
|
)
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -127,7 +127,7 @@ export const makePush =
|
|
|
127
127
|
for (const { response, encoded } of responses) {
|
|
128
128
|
// Only calling once for now.
|
|
129
129
|
if (options?.onPullRes) {
|
|
130
|
-
yield* Effect.tryAll(() => options.onPullRes!(response)).pipe(
|
|
130
|
+
yield* Effect.tryAll(() => options.onPullRes!(response)).pipe(UnknownError.mapToUnknownError)
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
// NOTE we're also sending the pullRes chunk to the pushing ws client as confirmation
|
|
@@ -181,7 +181,7 @@ export const makePush =
|
|
|
181
181
|
Effect.tap(
|
|
182
182
|
Effect.fn(function* (message) {
|
|
183
183
|
if (options?.onPushRes) {
|
|
184
|
-
yield* Effect.tryAll(() => options.onPushRes!(message)).pipe(
|
|
184
|
+
yield* Effect.tryAll(() => options.onPushRes!(message)).pipe(UnknownError.mapToUnknownError)
|
|
185
185
|
}
|
|
186
186
|
}),
|
|
187
187
|
),
|
|
@@ -11,8 +11,8 @@ export const eventlogTable = State.SQLite.table({
|
|
|
11
11
|
// NOTE actual table name is determined at runtime to use proper storeId
|
|
12
12
|
name: `eventlog_${PERSISTENCE_FORMAT_VERSION}_$storeId`,
|
|
13
13
|
columns: {
|
|
14
|
-
seqNum: State.SQLite.integer({ primaryKey: true, schema: EventSequenceNumber.
|
|
15
|
-
parentSeqNum: State.SQLite.integer({ schema: EventSequenceNumber.
|
|
14
|
+
seqNum: State.SQLite.integer({ primaryKey: true, schema: EventSequenceNumber.Global.Schema }),
|
|
15
|
+
parentSeqNum: State.SQLite.integer({ schema: EventSequenceNumber.Global.Schema }),
|
|
16
16
|
name: State.SQLite.text({}),
|
|
17
17
|
args: State.SQLite.text({ schema: Schema.parseJson(Schema.Any), nullable: true }),
|
|
18
18
|
/** ISO date format. Currently only used for debugging purposes. */
|
|
@@ -31,7 +31,7 @@ export const contextTable = State.SQLite.table({
|
|
|
31
31
|
name: `context_${PERSISTENCE_FORMAT_VERSION}`,
|
|
32
32
|
columns: {
|
|
33
33
|
storeId: State.SQLite.text({ primaryKey: true }),
|
|
34
|
-
currentHead: State.SQLite.integer({ schema: EventSequenceNumber.
|
|
34
|
+
currentHead: State.SQLite.integer({ schema: EventSequenceNumber.Global.Schema }),
|
|
35
35
|
backendId: State.SQLite.text({}),
|
|
36
36
|
},
|
|
37
37
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UnknownError } from '@livestore/common'
|
|
2
2
|
import type { LiveStoreEvent } from '@livestore/common/schema'
|
|
3
3
|
import type { CfTypes } from '@livestore/common-cf'
|
|
4
4
|
import { Chunk, Effect, Option, Schema, Stream } from '@livestore/utils/effect'
|
|
@@ -12,17 +12,17 @@ export type SyncStorage = {
|
|
|
12
12
|
{
|
|
13
13
|
total: number
|
|
14
14
|
stream: Stream.Stream<
|
|
15
|
-
{ eventEncoded: LiveStoreEvent.
|
|
16
|
-
|
|
15
|
+
{ eventEncoded: LiveStoreEvent.Global.Encoded; metadata: Option.Option<SyncMetadata> },
|
|
16
|
+
UnknownError
|
|
17
17
|
>
|
|
18
18
|
},
|
|
19
|
-
|
|
19
|
+
UnknownError
|
|
20
20
|
>
|
|
21
21
|
appendEvents: (
|
|
22
|
-
batch: ReadonlyArray<LiveStoreEvent.
|
|
22
|
+
batch: ReadonlyArray<LiveStoreEvent.Global.Encoded>,
|
|
23
23
|
createdAt: string,
|
|
24
|
-
) => Effect.Effect<void,
|
|
25
|
-
resetStore: Effect.Effect<void,
|
|
24
|
+
) => Effect.Effect<void, UnknownError>
|
|
25
|
+
resetStore: Effect.Effect<void, UnknownError>
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export const makeStorage = (
|
|
@@ -35,7 +35,7 @@ export const makeStorage = (
|
|
|
35
35
|
const execDb = <T>(cb: (db: CfTypes.D1Database) => Promise<CfTypes.D1Result<T>>) =>
|
|
36
36
|
Effect.tryPromise({
|
|
37
37
|
try: () => cb(engine._tag === 'd1' ? engine.db : (undefined as never)),
|
|
38
|
-
catch: (error) => new
|
|
38
|
+
catch: (error) => new UnknownError({ cause: error, payload: { dbName } }),
|
|
39
39
|
}).pipe(
|
|
40
40
|
Effect.map((_) => _.results),
|
|
41
41
|
Effect.withSpan('@livestore/sync-cf:durable-object:execDb'),
|
|
@@ -76,11 +76,11 @@ export const makeStorage = (
|
|
|
76
76
|
{
|
|
77
77
|
total: number
|
|
78
78
|
stream: Stream.Stream<
|
|
79
|
-
{ eventEncoded: LiveStoreEvent.
|
|
80
|
-
|
|
79
|
+
{ eventEncoded: LiveStoreEvent.Global.Encoded; metadata: Option.Option<SyncMetadata> },
|
|
80
|
+
UnknownError
|
|
81
81
|
>
|
|
82
82
|
},
|
|
83
|
-
|
|
83
|
+
UnknownError
|
|
84
84
|
> =>
|
|
85
85
|
Effect.gen(function* () {
|
|
86
86
|
const countStatement =
|
|
@@ -96,13 +96,13 @@ export const makeStorage = (
|
|
|
96
96
|
const total = Number(countRows[0]?.total ?? 0)
|
|
97
97
|
|
|
98
98
|
type State = { cursor: number | undefined; limit: number }
|
|
99
|
-
type EmittedEvent = { eventEncoded: LiveStoreEvent.
|
|
99
|
+
type EmittedEvent = { eventEncoded: LiveStoreEvent.Global.Encoded; metadata: Option.Option<SyncMetadata> }
|
|
100
100
|
|
|
101
101
|
const initialState: State = { cursor, limit: D1_INITIAL_PAGE_SIZE }
|
|
102
102
|
|
|
103
103
|
const fetchPage = (
|
|
104
104
|
state: State,
|
|
105
|
-
): Effect.Effect<Option.Option<readonly [Chunk.Chunk<EmittedEvent>, State]>,
|
|
105
|
+
): Effect.Effect<Option.Option<readonly [Chunk.Chunk<EmittedEvent>, State]>, UnknownError> =>
|
|
106
106
|
Effect.gen(function* () {
|
|
107
107
|
const statement =
|
|
108
108
|
state.cursor === undefined
|
|
@@ -147,7 +147,7 @@ export const makeStorage = (
|
|
|
147
147
|
|
|
148
148
|
return { total, stream }
|
|
149
149
|
}).pipe(
|
|
150
|
-
|
|
150
|
+
UnknownError.mapToUnknownError,
|
|
151
151
|
Effect.withSpan('@livestore/sync-cf:durable-object:getEvents', {
|
|
152
152
|
attributes: { dbName, cursor, engine: engine._tag },
|
|
153
153
|
}),
|
|
@@ -188,14 +188,14 @@ export const makeStorage = (
|
|
|
188
188
|
)
|
|
189
189
|
}
|
|
190
190
|
}).pipe(
|
|
191
|
-
|
|
191
|
+
UnknownError.mapToUnknownError,
|
|
192
192
|
Effect.withSpan('@livestore/sync-cf:durable-object:appendEvents', {
|
|
193
193
|
attributes: { dbName, batchLength: batch.length, engine: engine._tag },
|
|
194
194
|
}),
|
|
195
195
|
)
|
|
196
196
|
|
|
197
197
|
const resetStore = Effect.promise(() => ctx.storage.deleteAll()).pipe(
|
|
198
|
-
|
|
198
|
+
UnknownError.mapToUnknownError,
|
|
199
199
|
Effect.withSpan('@livestore/sync-cf:durable-object:resetStore'),
|
|
200
200
|
)
|
|
201
201
|
|
|
@@ -206,11 +206,11 @@ export const makeStorage = (
|
|
|
206
206
|
{
|
|
207
207
|
total: number
|
|
208
208
|
stream: Stream.Stream<
|
|
209
|
-
{ eventEncoded: LiveStoreEvent.
|
|
210
|
-
|
|
209
|
+
{ eventEncoded: LiveStoreEvent.Global.Encoded; metadata: Option.Option<SyncMetadata> },
|
|
210
|
+
UnknownError
|
|
211
211
|
>
|
|
212
212
|
},
|
|
213
|
-
|
|
213
|
+
UnknownError
|
|
214
214
|
> =>
|
|
215
215
|
Effect.gen(function* () {
|
|
216
216
|
const selectCountSql =
|
|
@@ -228,18 +228,18 @@ export const makeStorage = (
|
|
|
228
228
|
}
|
|
229
229
|
return computed
|
|
230
230
|
},
|
|
231
|
-
catch: (error) => new
|
|
231
|
+
catch: (error) => new UnknownError({ cause: error, payload: { dbName, stage: 'count' } }),
|
|
232
232
|
})
|
|
233
233
|
|
|
234
234
|
type State = { cursor: number | undefined }
|
|
235
|
-
type EmittedEvent = { eventEncoded: LiveStoreEvent.
|
|
235
|
+
type EmittedEvent = { eventEncoded: LiveStoreEvent.Global.Encoded; metadata: Option.Option<SyncMetadata> }
|
|
236
236
|
|
|
237
237
|
const DO_PAGE_SIZE = 256
|
|
238
238
|
const initialState: State = { cursor }
|
|
239
239
|
|
|
240
240
|
const fetchPage = (
|
|
241
241
|
state: State,
|
|
242
|
-
): Effect.Effect<Option.Option<readonly [Chunk.Chunk<EmittedEvent>, State]>,
|
|
242
|
+
): Effect.Effect<Option.Option<readonly [Chunk.Chunk<EmittedEvent>, State]>, UnknownError> =>
|
|
243
243
|
Effect.try({
|
|
244
244
|
try: () => {
|
|
245
245
|
const sql =
|
|
@@ -270,14 +270,14 @@ export const makeStorage = (
|
|
|
270
270
|
|
|
271
271
|
return Option.some([eventsChunk, nextState] as const)
|
|
272
272
|
},
|
|
273
|
-
catch: (error) => new
|
|
273
|
+
catch: (error) => new UnknownError({ cause: error, payload: { dbName, stage: 'select' } }),
|
|
274
274
|
})
|
|
275
275
|
|
|
276
276
|
const stream = Stream.unfoldChunkEffect(initialState, fetchPage)
|
|
277
277
|
|
|
278
278
|
return { total, stream }
|
|
279
279
|
}).pipe(
|
|
280
|
-
|
|
280
|
+
UnknownError.mapToUnknownError,
|
|
281
281
|
Effect.withSpan('@livestore/sync-cf:durable-object:getEvents', {
|
|
282
282
|
attributes: { dbName, cursor, engine: engine._tag },
|
|
283
283
|
}),
|
|
@@ -305,12 +305,12 @@ export const makeStorage = (
|
|
|
305
305
|
ctx.storage.sql.exec(sql, ...params)
|
|
306
306
|
}
|
|
307
307
|
},
|
|
308
|
-
catch: (error) => new
|
|
308
|
+
catch: (error) => new UnknownError({ cause: error, payload: { dbName, stage: 'insert' } }),
|
|
309
309
|
}).pipe(
|
|
310
310
|
Effect.withSpan('@livestore/sync-cf:durable-object:appendEvents', {
|
|
311
311
|
attributes: { dbName, batchLength: batch.length, engine: engine._tag },
|
|
312
312
|
}),
|
|
313
|
-
|
|
313
|
+
UnknownError.mapToUnknownError,
|
|
314
314
|
)
|
|
315
315
|
|
|
316
316
|
if (engine._tag === 'd1') {
|
package/src/cf-worker/shared.ts
CHANGED
|
@@ -5,9 +5,7 @@ import { Effect, Schema, UrlParams } from '@livestore/utils/effect'
|
|
|
5
5
|
import type { SearchParams } from '../common/mod.ts'
|
|
6
6
|
import { SearchParamsSchema, SyncMessage } from '../common/mod.ts'
|
|
7
7
|
|
|
8
|
-
export
|
|
9
|
-
ADMIN_SECRET: string
|
|
10
|
-
}
|
|
8
|
+
export type Env = {}
|
|
11
9
|
|
|
12
10
|
export type MakeDurableObjectClassOptions = {
|
|
13
11
|
onPush?: (
|
package/src/cf-worker/worker.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { env as importedEnv } from 'cloudflare:workers'
|
|
2
|
-
import {
|
|
2
|
+
import { UnknownError } from '@livestore/common'
|
|
3
3
|
import type { HelperTypes } from '@livestore/common-cf'
|
|
4
4
|
import { Effect, Schema } from '@livestore/utils/effect'
|
|
5
5
|
import type { CfTypes, SearchParams } from '../common/mod.ts'
|
|
@@ -151,7 +151,7 @@ export const makeWorker = <
|
|
|
151
151
|
* }
|
|
152
152
|
* ```
|
|
153
153
|
*
|
|
154
|
-
* @throws {
|
|
154
|
+
* @throws {UnknownError} If the payload is invalid
|
|
155
155
|
*/
|
|
156
156
|
export const handleSyncRequest = <
|
|
157
157
|
TEnv extends Env = Env,
|
|
@@ -192,7 +192,7 @@ export const handleSyncRequest = <
|
|
|
192
192
|
|
|
193
193
|
const result = yield* Effect.promise(async () =>
|
|
194
194
|
validatePayload(decodedEither.right as TSyncPayload, { storeId }),
|
|
195
|
-
).pipe(
|
|
195
|
+
).pipe(UnknownError.mapToUnknownError, Effect.either)
|
|
196
196
|
|
|
197
197
|
if (result._tag === 'Left') {
|
|
198
198
|
console.error('Invalid payload (validation failed)', result.left)
|
|
@@ -200,7 +200,7 @@ export const handleSyncRequest = <
|
|
|
200
200
|
}
|
|
201
201
|
} else {
|
|
202
202
|
const result = yield* Effect.promise(async () => validatePayload(payload as TSyncPayload, { storeId })).pipe(
|
|
203
|
-
|
|
203
|
+
UnknownError.mapToUnknownError,
|
|
204
204
|
Effect.either,
|
|
205
205
|
)
|
|
206
206
|
|