@livestore/sync-s2 0.4.0-dev.21 → 0.4.0-dev.23
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/api-schema.d.ts.map +1 -1
- package/dist/api-schema.js.map +1 -1
- package/dist/api-schema.test.js +1 -1
- package/dist/api-schema.test.js.map +1 -1
- package/dist/decode.d.ts.map +1 -1
- package/dist/decode.js.map +1 -1
- package/dist/http-client-generated.d.ts +22 -22
- package/dist/http-client-generated.d.ts.map +1 -1
- package/dist/http-client-generated.js +64 -22
- package/dist/http-client-generated.js.map +1 -1
- package/dist/limits.js +2 -2
- package/dist/limits.js.map +1 -1
- package/dist/limits.test.js.map +1 -1
- package/dist/make-s2-url.d.ts.map +1 -1
- package/dist/make-s2-url.js.map +1 -1
- package/dist/s2-proxy-helpers.d.ts +10 -2
- package/dist/s2-proxy-helpers.d.ts.map +1 -1
- package/dist/s2-proxy-helpers.js +16 -10
- package/dist/s2-proxy-helpers.js.map +1 -1
- package/dist/sync-provider.d.ts +4 -4
- package/dist/sync-provider.d.ts.map +1 -1
- package/dist/sync-provider.js +31 -31
- package/dist/sync-provider.js.map +1 -1
- package/package.json +76 -13
- package/src/api-schema.test.ts +3 -1
- package/src/api-schema.ts +1 -0
- package/src/decode.ts +1 -0
- package/src/http-client-generated.ts +74 -53
- package/src/limits.test.ts +3 -1
- package/src/limits.ts +2 -2
- package/src/make-s2-url.ts +1 -0
- package/src/s2-proxy-helpers.ts +27 -10
- package/src/sync-provider.ts +45 -37
package/dist/limits.js
CHANGED
|
@@ -14,7 +14,7 @@ export const MAX_BATCH_METERED_BYTES = 1_048_576; // 1 MiB
|
|
|
14
14
|
*/
|
|
15
15
|
export const MAX_RECORDS_PER_BATCH = 1_000;
|
|
16
16
|
const LimitType = Schema.Literal('record-metered-bytes', 'batch-metered-bytes', 'batch-count');
|
|
17
|
-
export class S2LimitExceededError extends Schema.TaggedError()('S2LimitExceededError', {
|
|
17
|
+
export class S2LimitExceededError extends Schema.TaggedError('~@livestore/sync-s2/S2LimitExceededError')('S2LimitExceededError', {
|
|
18
18
|
limitType: LimitType,
|
|
19
19
|
max: Schema.Number,
|
|
20
20
|
actual: Schema.Number,
|
|
@@ -76,7 +76,7 @@ export const chunkEventsForS2 = (events) => {
|
|
|
76
76
|
return mapPreparedChunks(chunks);
|
|
77
77
|
}
|
|
78
78
|
catch (error) {
|
|
79
|
-
if (error && typeof error === 'object' && error._tag === 'OversizeChunkItemError') {
|
|
79
|
+
if (error !== undefined && typeof error === 'object' && error._tag === 'OversizeChunkItemError') {
|
|
80
80
|
const oversize = error;
|
|
81
81
|
throw new S2LimitExceededError({
|
|
82
82
|
limitType: 'record-metered-bytes',
|
package/dist/limits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE/D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAAA,CAAC,QAAQ;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAA,CAAC,QAAQ;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAA;AAE1C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,aAAa,CAAC,CAAA;AAE9F,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"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"}
|
package/dist/limits.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.test.js","sourceRoot":"","sources":["../src/limits.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"limits.test.js","sourceRoot":"","sources":["../src/limits.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAI7C,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AAEpB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AAEjC,MAAM,SAAS,GAAG,CAAC,aAAqB,EAAE,KAAK,GAAG,CAAC,EAAiC,EAAE,CAAC,CAAC;IACtF,IAAI,EAAE,SAAS,KAAK,EAAE;IACtB,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;IAC5C,MAAM,EAAE,KAAwC;IAChD,YAAY,EAAE,KAAwC;IACtD,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,SAAS;CACrB,CAAC,CAAA;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;QAC3D,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,CAAA;QACjE,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;QACpF,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;QAEvC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;QACvD,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-s2-url.d.ts","sourceRoot":"","sources":["../src/make-s2-url.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"make-s2-url.d.ts","sourceRoot":"","sources":["../src/make-s2-url.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAE5C,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,WAA0D,CAAA;AAE1G;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,cAAc,eAAe,KAAG,OAAO,SAAS,CAAC,QAAQ,CAAC,IAaxG,CAAA"}
|
package/dist/make-s2-url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-s2-url.js","sourceRoot":"","sources":["../src/make-s2-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"make-s2-url.js","sourceRoot":"","sources":["../src/make-s2-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAE1G;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,YAA6B,EAAkC,EAAE;IAC9G,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAA;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAE1G,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CACtB,kEAAkE,EAClE,YAAY,EACZ,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAC3C,CAAA;IACH,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAA;AAC9B,CAAC,CAAA"}
|
|
@@ -12,7 +12,15 @@ export interface S2Config {
|
|
|
12
12
|
accountBase?: string;
|
|
13
13
|
/** @default 'https://{basin}.b.aws.s2.dev/v1' */
|
|
14
14
|
basinBase?: string;
|
|
15
|
+
/**
|
|
16
|
+
* When true, adds `S2-Basin` header to requests. This is required for s2-lite
|
|
17
|
+
* (the open-source self-hosted S2) which uses header-based basin routing instead
|
|
18
|
+
* of subdomain-based routing used by hosted S2.
|
|
19
|
+
* @see https://github.com/s2-streamstore/s2-lite
|
|
20
|
+
*/
|
|
21
|
+
lite?: boolean;
|
|
15
22
|
}
|
|
23
|
+
export declare const isLiteMode: (config: S2Config) => boolean;
|
|
16
24
|
export declare const getBasinUrl: (config: S2Config, path: string) => string;
|
|
17
25
|
export declare const getAccountUrl: (config: S2Config, path: string) => string;
|
|
18
26
|
export declare const getStreamRecordsUrl: (config: S2Config, stream: string, params?: {
|
|
@@ -22,8 +30,8 @@ export declare const getStreamRecordsUrl: (config: S2Config, stream: string, par
|
|
|
22
30
|
wait?: number;
|
|
23
31
|
}) => string;
|
|
24
32
|
export declare const getAuthHeaders: (token: string) => Record<string, string>;
|
|
25
|
-
export declare const getSSEHeaders: (
|
|
26
|
-
export declare const getPushHeaders: (
|
|
33
|
+
export declare const getSSEHeaders: (config: S2Config) => Record<string, string>;
|
|
34
|
+
export declare const getPushHeaders: (config: S2Config) => Record<string, string>;
|
|
27
35
|
export declare const ensureBasin: (config: S2Config) => Promise<void>;
|
|
28
36
|
export declare const ensureStream: (config: S2Config, stream: string) => Promise<void>;
|
|
29
37
|
export declare const buildPullRequest: ({ config, args, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s2-proxy-helpers.d.ts","sourceRoot":"","sources":["../src/s2-proxy-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"s2-proxy-helpers.d.ts","sourceRoot":"","sources":["../src/s2-proxy-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI/C,uCAAuC;AACvC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,QAAQ,KAAG,OAA+B,CAAA;AAM7E,eAAO,MAAM,WAAW,GAAI,QAAQ,QAAQ,EAAE,MAAM,MAAM,KAAG,MAG5D,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,QAAQ,EAAE,MAAM,MAAM,KAAG,MAG9D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,SAAS;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,MAgBF,CAAA;AAGD,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAElE,CAAA;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,QAAQ,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAKpE,CAAA;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,QAAQ,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAKrE,CAAA;AAGF,eAAO,MAAM,WAAW,GAAU,QAAQ,QAAQ,KAAG,OAAO,CAAC,IAAI,CAahE,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,QAAQ,QAAQ,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAcjF,CAAA;AAGD,eAAO,MAAM,gBAAgB,GAAI,mBAG9B;IACD,MAAM,EAAE,QAAQ,CAAA;IAChB,IAAI,EAAE,QAAQ,CAAA;CACf,KAAG;IACF,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAiBhC,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,6BAI/B;IACD,MAAM,EAAE,QAAQ,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,SAAS,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;CAChD,KAAG,aAAa,CAAC,aAAa,CAW9B,CAAA;AAGD,eAAO,MAAM,kBAAkB,QAAO,QAIrC,CAAA;AAED,eAAO,MAAM,oBAAoB,QAAO,QAKvC,CAAA;AAED,eAAO,MAAM,eAAe,QAAO,QAKlC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,EAAE,eAAY,KAAG,QAK7D,CAAA"}
|
package/dist/s2-proxy-helpers.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { chunkEventsForS2 } from "./limits.js";
|
|
6
6
|
import { makeS2StreamName } from "./make-s2-url.js";
|
|
7
|
+
export const isLiteMode = (config) => config.lite === true;
|
|
8
|
+
const getBasinHeader = (config) => isLiteMode(config) === true ? { 's2-basin': config.basin } : {};
|
|
7
9
|
// URL construction helpers
|
|
8
10
|
export const getBasinUrl = (config, path) => {
|
|
9
11
|
const base = config.basinBase ?? `https://${config.basin}.b.aws.s2.dev/v1`;
|
|
@@ -15,7 +17,7 @@ export const getAccountUrl = (config, path) => {
|
|
|
15
17
|
};
|
|
16
18
|
export const getStreamRecordsUrl = (config, stream, params) => {
|
|
17
19
|
const base = getBasinUrl(config, `/streams/${encodeURIComponent(stream)}/records`);
|
|
18
|
-
if (
|
|
20
|
+
if (params == null)
|
|
19
21
|
return base;
|
|
20
22
|
const searchParams = new URLSearchParams();
|
|
21
23
|
/** seq_num - The sequence number to start from. See: https://docs.s2.dev/api#seq_num */
|
|
@@ -30,19 +32,22 @@ export const getStreamRecordsUrl = (config, stream, params) => {
|
|
|
30
32
|
/** wait - How long to wait for new records before returning. See: https://docs.s2.dev/api#wait */
|
|
31
33
|
if (params.wait !== undefined)
|
|
32
34
|
searchParams.append('wait', params.wait.toString());
|
|
33
|
-
|
|
35
|
+
const searchParamsString = searchParams.toString();
|
|
36
|
+
return searchParamsString.length > 0 ? `${base}?${searchParams}` : base;
|
|
34
37
|
};
|
|
35
38
|
// Header helpers
|
|
36
39
|
export const getAuthHeaders = (token) => ({
|
|
37
40
|
Authorization: `Bearer ${token}`,
|
|
38
41
|
});
|
|
39
|
-
export const getSSEHeaders = (
|
|
40
|
-
...getAuthHeaders(token),
|
|
42
|
+
export const getSSEHeaders = (config) => ({
|
|
43
|
+
...getAuthHeaders(config.token),
|
|
44
|
+
...getBasinHeader(config),
|
|
41
45
|
accept: 'text/event-stream',
|
|
42
46
|
's2-format': 'raw',
|
|
43
47
|
});
|
|
44
|
-
export const getPushHeaders = (
|
|
45
|
-
...getAuthHeaders(token),
|
|
48
|
+
export const getPushHeaders = (config) => ({
|
|
49
|
+
...getAuthHeaders(config.token),
|
|
50
|
+
...getBasinHeader(config),
|
|
46
51
|
'content-type': 'application/json',
|
|
47
52
|
's2-format': 'raw',
|
|
48
53
|
});
|
|
@@ -68,6 +73,7 @@ export const ensureStream = async (config, stream) => {
|
|
|
68
73
|
method: 'POST',
|
|
69
74
|
headers: {
|
|
70
75
|
...getAuthHeaders(config.token),
|
|
76
|
+
...getBasinHeader(config),
|
|
71
77
|
'content-type': 'application/json',
|
|
72
78
|
},
|
|
73
79
|
body: JSON.stringify({ stream }),
|
|
@@ -83,16 +89,16 @@ export const buildPullRequest = ({ config, args, }) => {
|
|
|
83
89
|
// Convert cursor (last seen record) to seq_num (where to start reading)
|
|
84
90
|
// cursor points to last processed record, seq_num needs to be the next record
|
|
85
91
|
const seq_num = args.s2SeqNum === 'from-start' ? 0 : args.s2SeqNum + 1;
|
|
86
|
-
if (args.live) {
|
|
92
|
+
if (args.live === true) {
|
|
87
93
|
const url = getStreamRecordsUrl(config, streamName, { seq_num, clamp: true });
|
|
88
|
-
return { url, headers: getSSEHeaders(config
|
|
94
|
+
return { url, headers: getSSEHeaders(config) };
|
|
89
95
|
}
|
|
90
96
|
else {
|
|
91
97
|
// Non-live pulls also stream over SSE. We ask S2 to return immediately when
|
|
92
98
|
// the tail is reached by setting wait=0 which gives us an explicit
|
|
93
99
|
// end-of-stream without requesting an arbitrarily large page size.
|
|
94
100
|
const url = getStreamRecordsUrl(config, streamName, { seq_num, wait: 0, clamp: true });
|
|
95
|
-
return { url, headers: getSSEHeaders(config
|
|
101
|
+
return { url, headers: getSSEHeaders(config) };
|
|
96
102
|
}
|
|
97
103
|
};
|
|
98
104
|
/**
|
|
@@ -108,7 +114,7 @@ export const buildPushRequests = ({ config, storeId, batch, }) => {
|
|
|
108
114
|
return chunks.map((chunk) => ({
|
|
109
115
|
url,
|
|
110
116
|
method: 'POST',
|
|
111
|
-
headers: getPushHeaders(config
|
|
117
|
+
headers: getPushHeaders(config),
|
|
112
118
|
body: JSON.stringify({ records: chunk.records }),
|
|
113
119
|
}));
|
|
114
120
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s2-proxy-helpers.js","sourceRoot":"","sources":["../src/s2-proxy-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"s2-proxy-helpers.js","sourceRoot":"","sources":["../src/s2-proxy-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/sync-provider.d.ts
CHANGED
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
* DO NOT couple these systems together or assume 1:1 correspondence.
|
|
29
29
|
*
|
|
30
30
|
* Errors
|
|
31
|
-
* - push →
|
|
31
|
+
* - push → UnknownError on non‑2xx; pull → UnknownError on non‑2xx; ping/connect map timeouts to offline.
|
|
32
32
|
* - The proxy should surface helpful status codes and error bodies.
|
|
33
33
|
*/
|
|
34
|
-
import {
|
|
34
|
+
import { SyncBackend, UnknownError } from '@livestore/common';
|
|
35
35
|
import { type Duration, Schedule } from '@livestore/utils/effect';
|
|
36
36
|
import type { SyncMetadata } from './types.ts';
|
|
37
37
|
export interface SyncS2Options {
|
|
@@ -50,9 +50,9 @@ export interface SyncS2Options {
|
|
|
50
50
|
};
|
|
51
51
|
retry?: {
|
|
52
52
|
/** Custom retry schedule for non-live pulls (default: 2 recurs, 100ms spaced) */
|
|
53
|
-
pull?: Schedule.Schedule<number,
|
|
53
|
+
pull?: Schedule.Schedule<number, UnknownError>;
|
|
54
54
|
/** Custom retry schedule for pushes (default: 2 recurs, 100ms spaced) */
|
|
55
|
-
push?: Schedule.Schedule<number,
|
|
55
|
+
push?: Schedule.Schedule<number, UnknownError>;
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
export declare const defaultRetry: Schedule.Schedule<number, unknown, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-provider.d.ts","sourceRoot":"","sources":["../src/sync-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-provider.d.ts","sourceRoot":"","sources":["../src/sync-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAG7D,OAAO,EACL,KAAK,QAAQ,EAMb,QAAQ,EAKT,MAAM,yBAAyB,CAAA;AAMhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EACJ,MAAM,GACN;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACL,IAAI,CAAC,EAAE;QACL,yCAAyC;QACzC,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,uDAAuD;QACvD,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAA;QACvC,kDAAkD;QAClD,eAAe,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAA;KACzC,CAAA;IACD,KAAK,CAAC,EAAE;QACN,iFAAiF;QACjF,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAC9C,yEAAyE;QACzE,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;KAC/C,CAAA;CACF;AAED,eAAO,MAAM,YAAY,2CAA6D,CAAA;AActF,eAAO,MAAM,eAAe,GACzB,wCAAwC,aAAa,KAAG,WAAW,CAAC,sBAAsB,CAAC,YAAY,CA+NpG,CAAA"}
|
package/dist/sync-provider.js
CHANGED
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
* DO NOT couple these systems together or assume 1:1 correspondence.
|
|
29
29
|
*
|
|
30
30
|
* Errors
|
|
31
|
-
* - push →
|
|
31
|
+
* - push → UnknownError on non‑2xx; pull → UnknownError on non‑2xx; ping/connect map timeouts to offline.
|
|
32
32
|
* - The proxy should surface helpful status codes and error bodies.
|
|
33
33
|
*/
|
|
34
|
-
import {
|
|
34
|
+
import { SyncBackend, UnknownError } from '@livestore/common';
|
|
35
35
|
import { shouldNeverHappen } from '@livestore/utils';
|
|
36
36
|
import { Effect, HttpClient, HttpClientRequest, HttpClientResponse, Option, Schedule, Schema, Sse, Stream, SubscriptionRef, } from '@livestore/utils/effect';
|
|
37
37
|
import * as ApiSchema from "./api-schema.js";
|
|
@@ -39,14 +39,21 @@ import { decodeReadBatch } from "./decode.js";
|
|
|
39
39
|
import * as HttpClientGenerated from "./http-client-generated.js";
|
|
40
40
|
import { chunkEventsForS2, S2LimitExceededError } from "./limits.js";
|
|
41
41
|
export const defaultRetry = Schedule.compose(Schedule.recurs(2), Schedule.spaced(100));
|
|
42
|
+
const getBrowserOrigin = () => {
|
|
43
|
+
if (typeof globalThis !== 'object' || globalThis === null || !('location' in globalThis)) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const { location } = globalThis;
|
|
47
|
+
return typeof location?.origin === 'string' ? location.origin : undefined;
|
|
48
|
+
};
|
|
42
49
|
export const makeSyncBackend = ({ endpoint, ping: pingOptions, retry }) => ({ storeId, payload }) => Effect.gen(function* () {
|
|
43
50
|
const isConnected = yield* SubscriptionRef.make(false);
|
|
44
51
|
const pullEndpoint = typeof endpoint === 'string' ? endpoint : endpoint.pull;
|
|
45
52
|
const pushEndpoint = typeof endpoint === 'string' ? endpoint : endpoint.push;
|
|
46
53
|
const pingEndpoint = typeof endpoint === 'string' ? endpoint : endpoint.ping;
|
|
47
54
|
const httpClient = yield* HttpClient.HttpClient;
|
|
48
|
-
const
|
|
49
|
-
|
|
55
|
+
const browserOrigin = getBrowserOrigin();
|
|
56
|
+
const pullEndpointHasSameOrigin = pullEndpoint.startsWith('/') || (browserOrigin !== undefined && browserOrigin === new URL(pullEndpoint).origin);
|
|
50
57
|
const pingTimeout = pingOptions?.requestTimeout ?? 10_000;
|
|
51
58
|
const ping = Effect.gen(function* () {
|
|
52
59
|
yield* httpClient.pipe(HttpClient.filterStatusOk).head(pingEndpoint);
|
|
@@ -57,9 +64,7 @@ export const makeSyncBackend = ({ endpoint, ping: pingOptions, retry }) => ({ st
|
|
|
57
64
|
yield* ping.pipe(Effect.repeat(Schedule.spaced(pingInterval)), Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
58
65
|
}
|
|
59
66
|
// No need to connect if the pull endpoint has the same origin as the current page
|
|
60
|
-
const connect = pullEndpointHasSameOrigin
|
|
61
|
-
? Effect.void
|
|
62
|
-
: ping.pipe(UnknownError.mapToUnknownError);
|
|
67
|
+
const connect = pullEndpointHasSameOrigin === true ? Effect.void : ping.pipe(UnknownError.mapToUnknownError);
|
|
63
68
|
const runPullSse = (cursor, live) => {
|
|
64
69
|
// Extract S2 seqNum from metadata for SSE cursor
|
|
65
70
|
const s2SeqNum = cursor.pipe(Option.flatMap((_) => _.metadata), Option.map((_) => _.s2SeqNum), Option.getOrElse(() => 'from-start'));
|
|
@@ -76,7 +81,7 @@ export const makeSyncBackend = ({ endpoint, ping: pingOptions, retry }) => ({ st
|
|
|
76
81
|
if (evt === 'ping')
|
|
77
82
|
return Option.none();
|
|
78
83
|
if (evt === 'error') {
|
|
79
|
-
return yield* new
|
|
84
|
+
return yield* new UnknownError({ cause: new Error(`SSE error: ${msg.data}`) });
|
|
80
85
|
}
|
|
81
86
|
if (evt === 'batch') {
|
|
82
87
|
const readBatch = yield* Schema.decode(Schema.parseJson(HttpClientGenerated.ReadBatch))(msg.data);
|
|
@@ -99,12 +104,12 @@ export const makeSyncBackend = ({ endpoint, ping: pingOptions, retry }) => ({ st
|
|
|
99
104
|
}
|
|
100
105
|
return shouldNeverHappen(`Unexpected SSE event: ${evt}`, msg);
|
|
101
106
|
})), Stream.filterMap((_) => _), // filter out Option.none()
|
|
102
|
-
Stream.mapError((cause) =>
|
|
107
|
+
Stream.mapError((cause) => cause._tag === 'UnknownError' ? cause : new UnknownError({ cause })), Stream.retry(retry?.pull ?? defaultRetry));
|
|
103
108
|
};
|
|
104
109
|
const ssePull = (startCursor) => {
|
|
105
110
|
const computeNextCursor = (lastItem, current) => lastItem.pipe(Option.flatMap((item) => {
|
|
106
111
|
const lastBatchItem = item.batch.at(-1);
|
|
107
|
-
if (
|
|
112
|
+
if (lastBatchItem == null)
|
|
108
113
|
return Option.none();
|
|
109
114
|
return Option.some({
|
|
110
115
|
eventSequenceNumber: lastBatchItem.eventEncoded.seqNum,
|
|
@@ -116,7 +121,7 @@ export const makeSyncBackend = ({ endpoint, ping: pingOptions, retry }) => ({ st
|
|
|
116
121
|
batch: [],
|
|
117
122
|
pageInfo: SyncBackend.pageInfoNoMore,
|
|
118
123
|
}));
|
|
119
|
-
const stream = isFirst ? sseStream(false) : sseStream(true);
|
|
124
|
+
const stream = isFirst === true ? sseStream(false) : sseStream(true);
|
|
120
125
|
return stream.pipe(
|
|
121
126
|
// Reconnect from last item if stream
|
|
122
127
|
Stream.concatWithLastElement((lastItem) => loop(computeNextCursor(lastItem, cursor), false)));
|
|
@@ -126,7 +131,7 @@ export const makeSyncBackend = ({ endpoint, ping: pingOptions, retry }) => ({ st
|
|
|
126
131
|
return SyncBackend.of({
|
|
127
132
|
connect,
|
|
128
133
|
pull: (cursor, options) => {
|
|
129
|
-
if (options?.live) {
|
|
134
|
+
if (options?.live === true) {
|
|
130
135
|
return ssePull(cursor);
|
|
131
136
|
}
|
|
132
137
|
else {
|
|
@@ -137,38 +142,33 @@ export const makeSyncBackend = ({ endpoint, ping: pingOptions, retry }) => ({ st
|
|
|
137
142
|
}
|
|
138
143
|
},
|
|
139
144
|
push: (batch) => Effect.gen(function* () {
|
|
140
|
-
const
|
|
141
|
-
if (cause instanceof InvalidPushError) {
|
|
142
|
-
return cause;
|
|
143
|
-
}
|
|
145
|
+
const toUnknownError = (cause) => {
|
|
144
146
|
if (cause instanceof UnknownError) {
|
|
145
|
-
return
|
|
147
|
+
return cause;
|
|
146
148
|
}
|
|
147
149
|
if (cause instanceof S2LimitExceededError) {
|
|
148
150
|
const note = cause.limitType === 'record-metered-bytes'
|
|
149
151
|
? `S2 record exceeded ${cause.max} metered bytes (actual: ${cause.actual})`
|
|
150
152
|
: `S2 batch exceeded ${cause.max} (type: ${cause.limitType}, actual: ${cause.actual})`;
|
|
151
|
-
return new
|
|
152
|
-
cause
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
},
|
|
161
|
-
}),
|
|
153
|
+
return new UnknownError({
|
|
154
|
+
cause,
|
|
155
|
+
note,
|
|
156
|
+
payload: {
|
|
157
|
+
limitType: cause.limitType,
|
|
158
|
+
max: cause.max,
|
|
159
|
+
actual: cause.actual,
|
|
160
|
+
recordIndex: cause.recordIndex,
|
|
161
|
+
},
|
|
162
162
|
});
|
|
163
163
|
}
|
|
164
|
-
return new
|
|
164
|
+
return new UnknownError({ cause });
|
|
165
165
|
};
|
|
166
|
-
const chunks = yield* Effect.sync(() => chunkEventsForS2(batch)).pipe(Effect.mapError(
|
|
166
|
+
const chunks = yield* Effect.sync(() => chunkEventsForS2(batch)).pipe(Effect.mapError(toUnknownError));
|
|
167
167
|
for (const chunk of chunks) {
|
|
168
168
|
yield* HttpClientRequest.schemaBodyJson(ApiSchema.PushPayload)(HttpClientRequest.post(pushEndpoint), {
|
|
169
169
|
storeId,
|
|
170
170
|
batch: chunk.events,
|
|
171
|
-
}).pipe(Effect.andThen(httpClient.pipe(HttpClient.filterStatusOk).execute), Effect.andThen(HttpClientResponse.schemaBodyJson(ApiSchema.PushResponse)), Effect.mapError(
|
|
171
|
+
}).pipe(Effect.andThen(httpClient.pipe(HttpClient.filterStatusOk).execute), Effect.andThen(HttpClientResponse.schemaBodyJson(ApiSchema.PushResponse)), Effect.mapError(toUnknownError), Effect.retry(retry?.push ?? defaultRetry));
|
|
172
172
|
}
|
|
173
173
|
}),
|
|
174
174
|
ping,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-provider.js","sourceRoot":"","sources":["../src/sync-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-provider.js","sourceRoot":"","sources":["../src/sync-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,27 +1,90 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/sync-s2",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.23",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/livestorejs/livestore.git"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"package.json",
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
4
14
|
"type": "module",
|
|
5
15
|
"sideEffects": false,
|
|
6
16
|
"exports": {
|
|
7
17
|
".": "./dist/mod.js",
|
|
8
18
|
"./s2-proxy-helpers": "./dist/s2-proxy-helpers.js"
|
|
9
19
|
},
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"@livestore/common": "0.4.0-dev.21",
|
|
12
|
-
"@livestore/livestore": "0.4.0-dev.21",
|
|
13
|
-
"@livestore/utils": "0.4.0-dev.21"
|
|
14
|
-
},
|
|
15
|
-
"devDependencies": {},
|
|
16
|
-
"files": [
|
|
17
|
-
"package.json",
|
|
18
|
-
"src",
|
|
19
|
-
"dist"
|
|
20
|
-
],
|
|
21
|
-
"license": "Apache-2.0",
|
|
22
20
|
"publishConfig": {
|
|
23
21
|
"access": "public"
|
|
24
22
|
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@livestore/common": "^0.4.0-dev.23",
|
|
25
|
+
"@livestore/utils": "^0.4.0-dev.23",
|
|
26
|
+
"@livestore/livestore": "^0.4.0-dev.23"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@effect/ai": "0.35.0",
|
|
30
|
+
"@effect/cli": "0.75.1",
|
|
31
|
+
"@effect/cluster": "0.58.2",
|
|
32
|
+
"@effect/experimental": "0.60.0",
|
|
33
|
+
"@effect/opentelemetry": "0.63.0",
|
|
34
|
+
"@effect/platform": "0.96.1",
|
|
35
|
+
"@effect/platform-browser": "0.76.0",
|
|
36
|
+
"@effect/platform-bun": "0.89.0",
|
|
37
|
+
"@effect/platform-node": "0.106.0",
|
|
38
|
+
"@effect/printer": "0.49.0",
|
|
39
|
+
"@effect/printer-ansi": "0.49.0",
|
|
40
|
+
"@effect/rpc": "0.75.1",
|
|
41
|
+
"@effect/sql": "0.51.1",
|
|
42
|
+
"@effect/typeclass": "0.40.0",
|
|
43
|
+
"@effect/vitest": "0.29.0",
|
|
44
|
+
"@opentelemetry/api": "1.9.0",
|
|
45
|
+
"@opentelemetry/resources": "2.2.0",
|
|
46
|
+
"@standard-schema/spec": "1.1.0",
|
|
47
|
+
"effect": "3.21.2",
|
|
48
|
+
"vitest": "3.2.4"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"@effect/ai": "^0.35.0",
|
|
52
|
+
"@effect/cli": "^0.75.1",
|
|
53
|
+
"@effect/cluster": "^0.58.2",
|
|
54
|
+
"@effect/experimental": "^0.60.0",
|
|
55
|
+
"@effect/opentelemetry": "^0.63.0",
|
|
56
|
+
"@effect/platform": "^0.96.1",
|
|
57
|
+
"@effect/platform-browser": "^0.76.0",
|
|
58
|
+
"@effect/platform-bun": "^0.89.0",
|
|
59
|
+
"@effect/platform-node": "^0.106.0",
|
|
60
|
+
"@effect/printer": "^0.49.0",
|
|
61
|
+
"@effect/printer-ansi": "^0.49.0",
|
|
62
|
+
"@effect/rpc": "^0.75.1",
|
|
63
|
+
"@effect/sql": "^0.51.1",
|
|
64
|
+
"@effect/typeclass": "^0.40.0",
|
|
65
|
+
"@effect/vitest": "^0.29.0",
|
|
66
|
+
"@opentelemetry/api": "^1.9.0",
|
|
67
|
+
"@opentelemetry/resources": "^2.2.0",
|
|
68
|
+
"@standard-schema/spec": "^1.1.0",
|
|
69
|
+
"effect": "^3.21.2"
|
|
70
|
+
},
|
|
71
|
+
"$genie": {
|
|
72
|
+
"source": "package.json.genie.ts",
|
|
73
|
+
"warning": "DO NOT EDIT - changes will be overwritten",
|
|
74
|
+
"workspaceClosureDirs": [
|
|
75
|
+
"packages/@livestore/adapter-web",
|
|
76
|
+
"packages/@livestore/common",
|
|
77
|
+
"packages/@livestore/common-cf",
|
|
78
|
+
"packages/@livestore/devtools-web-common",
|
|
79
|
+
"packages/@livestore/livestore",
|
|
80
|
+
"packages/@livestore/sqlite-wasm",
|
|
81
|
+
"packages/@livestore/sync-s2",
|
|
82
|
+
"packages/@livestore/utils",
|
|
83
|
+
"packages/@livestore/utils-dev",
|
|
84
|
+
"packages/@livestore/wa-sqlite",
|
|
85
|
+
"packages/@livestore/webmesh"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
25
88
|
"scripts": {
|
|
26
89
|
"build": "",
|
|
27
90
|
"test": "echo 'No tests yet'"
|
package/src/api-schema.test.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { Schema } from '@livestore/utils/effect'
|
|
2
1
|
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { Schema } from '@livestore/utils/effect'
|
|
4
|
+
|
|
3
5
|
import * as Api from './api-schema.ts'
|
|
4
6
|
import { decodePullArgsFromSearchParams } from './make-s2-url.ts'
|
|
5
7
|
import { s2SeqNum } from './types.ts'
|
package/src/api-schema.ts
CHANGED