@syncular/client 0.0.1 → 0.0.2-126
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/README.md +23 -0
- package/dist/blobs/index.js +3 -3
- package/dist/client.d.ts +10 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +70 -21
- package/dist/client.js.map +1 -1
- package/dist/conflicts.d.ts.map +1 -1
- package/dist/conflicts.js +1 -7
- package/dist/conflicts.js.map +1 -1
- package/dist/create-client.d.ts +5 -1
- package/dist/create-client.d.ts.map +1 -1
- package/dist/create-client.js +22 -10
- package/dist/create-client.js.map +1 -1
- package/dist/engine/SyncEngine.d.ts +24 -2
- package/dist/engine/SyncEngine.d.ts.map +1 -1
- package/dist/engine/SyncEngine.js +290 -43
- package/dist/engine/SyncEngine.js.map +1 -1
- package/dist/engine/index.js +2 -2
- package/dist/engine/types.d.ts +16 -4
- package/dist/engine/types.d.ts.map +1 -1
- package/dist/handlers/create-handler.d.ts +15 -5
- package/dist/handlers/create-handler.d.ts.map +1 -1
- package/dist/handlers/create-handler.js +35 -24
- package/dist/handlers/create-handler.js.map +1 -1
- package/dist/handlers/types.d.ts +5 -5
- package/dist/handlers/types.d.ts.map +1 -1
- package/dist/index.js +19 -19
- package/dist/migrate.d.ts +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +148 -28
- package/dist/migrate.js.map +1 -1
- package/dist/mutations.d.ts +3 -1
- package/dist/mutations.d.ts.map +1 -1
- package/dist/mutations.js +93 -18
- package/dist/mutations.js.map +1 -1
- package/dist/outbox.d.ts.map +1 -1
- package/dist/outbox.js +1 -11
- package/dist/outbox.js.map +1 -1
- package/dist/plugins/incrementing-version.d.ts +1 -1
- package/dist/plugins/incrementing-version.js +2 -2
- package/dist/plugins/index.js +2 -2
- package/dist/proxy/dialect.js +1 -1
- package/dist/proxy/driver.js +1 -1
- package/dist/proxy/index.js +4 -4
- package/dist/proxy/mutations.js +1 -1
- package/dist/pull-engine.d.ts +29 -3
- package/dist/pull-engine.d.ts.map +1 -1
- package/dist/pull-engine.js +314 -78
- package/dist/pull-engine.js.map +1 -1
- package/dist/push-engine.d.ts.map +1 -1
- package/dist/push-engine.js +28 -3
- package/dist/push-engine.js.map +1 -1
- package/dist/query/QueryContext.js +1 -1
- package/dist/query/index.js +3 -3
- package/dist/query/tracked-select.d.ts +2 -1
- package/dist/query/tracked-select.d.ts.map +1 -1
- package/dist/query/tracked-select.js +1 -1
- package/dist/schema.d.ts +2 -2
- package/dist/schema.d.ts.map +1 -1
- package/dist/sync-loop.d.ts +5 -1
- package/dist/sync-loop.d.ts.map +1 -1
- package/dist/sync-loop.js +167 -18
- package/dist/sync-loop.js.map +1 -1
- package/package.json +30 -6
- package/src/client.test.ts +369 -0
- package/src/client.ts +101 -22
- package/src/conflicts.ts +1 -10
- package/src/create-client.ts +33 -5
- package/src/engine/SyncEngine.test.ts +157 -0
- package/src/engine/SyncEngine.ts +359 -40
- package/src/engine/types.ts +22 -4
- package/src/handlers/create-handler.ts +86 -37
- package/src/handlers/types.ts +10 -4
- package/src/migrate.ts +215 -33
- package/src/mutations.ts +143 -21
- package/src/outbox.ts +1 -15
- package/src/plugins/incrementing-version.ts +2 -2
- package/src/pull-engine.test.ts +147 -0
- package/src/pull-engine.ts +392 -77
- package/src/push-engine.ts +33 -1
- package/src/query/tracked-select.ts +1 -1
- package/src/schema.ts +2 -2
- package/src/sync-loop.ts +215 -19
package/dist/push-engine.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @syncular/client - Sync push engine (commit-based)
|
|
3
3
|
*/
|
|
4
|
-
import { upsertConflictsForRejectedCommit } from './conflicts';
|
|
5
|
-
import { getNextSendableOutboxCommit, markOutboxCommitAcked, markOutboxCommitFailed, markOutboxCommitPending, } from './outbox';
|
|
4
|
+
import { upsertConflictsForRejectedCommit } from './conflicts.js';
|
|
5
|
+
import { getNextSendableOutboxCommit, markOutboxCommitAcked, markOutboxCommitFailed, markOutboxCommitPending, } from './outbox.js';
|
|
6
|
+
function hasPushViaWs(transport) {
|
|
7
|
+
return 'pushViaWs' in transport && typeof transport.pushViaWs === 'function';
|
|
8
|
+
}
|
|
6
9
|
function clonePushRequest(request) {
|
|
7
10
|
if (typeof structuredClone === 'function')
|
|
8
11
|
return structuredClone(request);
|
|
@@ -43,7 +46,29 @@ export async function syncPushOnce(db, transport, options) {
|
|
|
43
46
|
}
|
|
44
47
|
let res;
|
|
45
48
|
try {
|
|
46
|
-
|
|
49
|
+
// Try WS push first if the transport supports it
|
|
50
|
+
let wsResponse = null;
|
|
51
|
+
if (hasPushViaWs(transport)) {
|
|
52
|
+
wsResponse = await transport.pushViaWs(requestToSend);
|
|
53
|
+
}
|
|
54
|
+
if (wsResponse) {
|
|
55
|
+
res = wsResponse;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Fall back to HTTP
|
|
59
|
+
const combined = await transport.sync({
|
|
60
|
+
clientId: requestToSend.clientId,
|
|
61
|
+
push: {
|
|
62
|
+
clientCommitId: requestToSend.clientCommitId,
|
|
63
|
+
operations: requestToSend.operations,
|
|
64
|
+
schemaVersion: requestToSend.schemaVersion,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
if (!combined.push) {
|
|
68
|
+
throw new Error('Server returned no push response');
|
|
69
|
+
}
|
|
70
|
+
res = combined.push;
|
|
71
|
+
}
|
|
47
72
|
}
|
|
48
73
|
catch (err) {
|
|
49
74
|
const message = err instanceof Error ? err.message : 'Unknown error';
|
package/dist/push-engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-engine.js","sourceRoot":"","sources":["../src/push-engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"push-engine.js","sourceRoot":"","sources":["../src/push-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides a query context with tracked selectFrom for scope tracking
|
|
5
5
|
* and automatic fingerprint generation.
|
|
6
6
|
*/
|
|
7
|
-
import { createTrackedSelectFrom } from './tracked-select';
|
|
7
|
+
import { createTrackedSelectFrom } from './tracked-select.js';
|
|
8
8
|
/**
|
|
9
9
|
* Create a query context with tracked selectFrom.
|
|
10
10
|
*/
|
package/dist/query/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @syncular/client - Query utilities exports
|
|
3
3
|
*/
|
|
4
|
-
export { FingerprintCollector } from './FingerprintCollector';
|
|
5
|
-
export { canFingerprint, computeFingerprint, } from './fingerprint';
|
|
6
|
-
export { createQueryContext } from './QueryContext';
|
|
4
|
+
export { FingerprintCollector } from './FingerprintCollector.js';
|
|
5
|
+
export { canFingerprint, computeFingerprint, } from './fingerprint.js';
|
|
6
|
+
export { createQueryContext } from './QueryContext.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
import type { Kysely } from 'kysely';
|
|
9
9
|
import type { FingerprintCollector } from './FingerprintCollector';
|
|
10
10
|
/** Portable type alias for Kysely's selectFrom method signature */
|
|
11
|
-
|
|
11
|
+
type TrackedSelectFrom<DB> = Kysely<DB>['selectFrom'];
|
|
12
12
|
import { type MutationTimestampSource } from './fingerprint';
|
|
13
13
|
/**
|
|
14
14
|
* Create a tracked selectFrom that registers scopes and generates fingerprints.
|
|
15
15
|
*/
|
|
16
16
|
export declare function createTrackedSelectFrom<DB>(db: Kysely<DB>, scopeCollector: Set<string>, fingerprintCollector: FingerprintCollector, engine: MutationTimestampSource, keyField?: string): TrackedSelectFrom<DB>;
|
|
17
|
+
export {};
|
|
17
18
|
//# sourceMappingURL=tracked-select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracked-select.d.ts","sourceRoot":"","sources":["../../src/query/tracked-select.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"tracked-select.d.ts","sourceRoot":"","sources":["../../src/query/tracked-select.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,mEAAmE;AACnE,KAAK,iBAAiB,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;AAEtD,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,eAAe,CAAC;AA4FvB;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EACxC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EACd,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,SAAO,GACd,iBAAiB,CAAC,EAAE,CAAC,CAkBvB"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 1. Tracks tables as watched scopes when called
|
|
6
6
|
* 2. Intercepts .execute() to auto-generate fingerprints
|
|
7
7
|
*/
|
|
8
|
-
import { computeRowFingerprint, computeValueFingerprint, hasKeyField, } from './fingerprint';
|
|
8
|
+
import { computeRowFingerprint, computeValueFingerprint, hasKeyField, } from './fingerprint.js';
|
|
9
9
|
function isExecutableQuery(value) {
|
|
10
10
|
if (typeof value !== 'object' || value === null)
|
|
11
11
|
return false;
|
package/dist/schema.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export interface SyncSubscriptionStateTable {
|
|
|
18
18
|
state_id: string;
|
|
19
19
|
/** Subscription identifier (client-chosen) */
|
|
20
20
|
subscription_id: string;
|
|
21
|
-
/**
|
|
22
|
-
|
|
21
|
+
/** Table name for this subscription */
|
|
22
|
+
table: string;
|
|
23
23
|
/** JSON string of ScopeValues for this subscription */
|
|
24
24
|
scopes_json: string;
|
|
25
25
|
/** JSON string of params */
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,YAAY,GAAG,YAAY,IAAI,IAAI,CAC3E,MAAM,CAAC,EAAE,CAAC,EACV,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAC3D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,0BAA0B;IACzC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,YAAY,GAAG,YAAY,IAAI,IAAI,CAC3E,MAAM,CAAC,EAAE,CAAC,EACV,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAC3D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,0BAA0B;IACzC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,qCAAqC;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,4EAA4E;IAC5E,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,uBAAuB,EAAE,0BAA0B,CAAC;IACpD,mBAAmB,EAAE,sBAAsB,CAAC;IAC5C,cAAc,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,oBAAoB,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
|
package/dist/sync-loop.d.ts
CHANGED
|
@@ -20,11 +20,15 @@ export interface SyncOnceOptions {
|
|
|
20
20
|
stateId?: string;
|
|
21
21
|
maxPushCommits?: number;
|
|
22
22
|
maxPullRounds?: number;
|
|
23
|
+
/** When 'ws', peek outbox first and skip push if empty. */
|
|
24
|
+
trigger?: 'ws' | 'local' | 'poll';
|
|
25
|
+
/** Custom SHA-256 hash function (for platforms without crypto.subtle) */
|
|
26
|
+
sha256?: (bytes: Uint8Array) => Promise<string>;
|
|
23
27
|
}
|
|
24
28
|
export interface SyncOnceResult {
|
|
25
29
|
pushedCommits: number;
|
|
26
30
|
pullRounds: number;
|
|
27
31
|
pullResponse: SyncPullResponse;
|
|
28
32
|
}
|
|
29
|
-
export declare function syncOnce<DB extends SyncClientDb>(db: Kysely<DB>, transport: SyncTransport,
|
|
33
|
+
export declare function syncOnce<DB extends SyncClientDb>(db: Kysely<DB>, transport: SyncTransport, handlers: ClientTableRegistry<DB>, options: SyncOnceOptions): Promise<SyncOnceResult>;
|
|
30
34
|
//# sourceMappingURL=sync-loop.d.ts.map
|
package/dist/sync-loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-loop.d.ts","sourceRoot":"","sources":["../src/sync-loop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,
|
|
1
|
+
{"version":3,"file":"sync-loop.d.ts","sourceRoot":"","sources":["../src/sync-loop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAIhB,uBAAuB,EACvB,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAc/D,OAAO,EAAE,KAAK,mBAAmB,EAAgB,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAqH7C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACzC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;IAClC,yEAAyE;IACzE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAiMD,wBAAsB,QAAQ,CAAC,EAAE,SAAS,YAAY,EACpD,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EACd,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,mBAAmB,CAAC,EAAE,CAAC,EACjC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAEzB"}
|
package/dist/sync-loop.js
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Helpers that run push/pull repeatedly until the client is caught up.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { upsertConflictsForRejectedCommit } from './conflicts.js';
|
|
7
|
+
import { getNextSendableOutboxCommit, markOutboxCommitAcked, markOutboxCommitFailed, markOutboxCommitPending, } from './outbox.js';
|
|
8
|
+
import { applyPullResponse, buildPullRequest, syncPullOnce, } from './pull-engine.js';
|
|
9
|
+
import { syncPushOnce } from './push-engine.js';
|
|
8
10
|
async function syncPushUntilSettled(db, transport, options) {
|
|
9
11
|
const maxCommits = Math.max(1, Math.min(1000, options.maxCommits ?? 20));
|
|
10
12
|
let pushedCount = 0;
|
|
@@ -20,6 +22,9 @@ async function syncPushUntilSettled(db, transport, options) {
|
|
|
20
22
|
}
|
|
21
23
|
return { pushedCount };
|
|
22
24
|
}
|
|
25
|
+
function hasPushViaWs(transport) {
|
|
26
|
+
return 'pushViaWs' in transport && typeof transport.pushViaWs === 'function';
|
|
27
|
+
}
|
|
23
28
|
function needsAnotherPull(res) {
|
|
24
29
|
for (const sub of res.subscriptions ?? []) {
|
|
25
30
|
if (sub.status !== 'active')
|
|
@@ -52,13 +57,13 @@ function mergePullResponse(targetBySubId, res) {
|
|
|
52
57
|
targetBySubId.set(sub.id, merged);
|
|
53
58
|
}
|
|
54
59
|
}
|
|
55
|
-
async function syncPullUntilSettled(db, transport,
|
|
60
|
+
async function syncPullUntilSettled(db, transport, handlers, options) {
|
|
56
61
|
const maxRounds = Math.max(1, Math.min(1000, options.maxRounds ?? 20));
|
|
57
62
|
const aggregatedBySubId = new Map();
|
|
58
63
|
let rounds = 0;
|
|
59
64
|
for (let i = 0; i < maxRounds; i++) {
|
|
60
65
|
rounds += 1;
|
|
61
|
-
const res = await syncPullOnce(db, transport,
|
|
66
|
+
const res = await syncPullOnce(db, transport, handlers, options);
|
|
62
67
|
mergePullResponse(aggregatedBySubId, res);
|
|
63
68
|
if (!needsAnotherPull(res))
|
|
64
69
|
break;
|
|
@@ -73,14 +78,17 @@ async function syncPullUntilSettled(db, transport, shapes, options) {
|
|
|
73
78
|
rounds,
|
|
74
79
|
};
|
|
75
80
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Sync once using a WS-first push strategy for the first outbox commit.
|
|
83
|
+
*
|
|
84
|
+
* - If transport supports `pushViaWs` and the commit succeeds over WS, this call
|
|
85
|
+
* sends only an HTTP pull request.
|
|
86
|
+
* - Otherwise it falls back to combined HTTP push+pull.
|
|
87
|
+
*
|
|
88
|
+
* Remaining outbox commits are then settled via `syncPushUntilSettled`.
|
|
89
|
+
*/
|
|
90
|
+
async function syncOnceCombined(db, transport, handlers, options) {
|
|
91
|
+
const pullOpts = {
|
|
84
92
|
clientId: options.clientId,
|
|
85
93
|
actorId: options.actorId,
|
|
86
94
|
plugins: options.plugins,
|
|
@@ -90,12 +98,153 @@ export async function syncOnce(db, transport, shapes, options) {
|
|
|
90
98
|
maxSnapshotPages: options.maxSnapshotPages,
|
|
91
99
|
dedupeRows: options.dedupeRows,
|
|
92
100
|
stateId: options.stateId,
|
|
93
|
-
|
|
94
|
-
});
|
|
95
|
-
return {
|
|
96
|
-
pushedCommits: pushed.pushedCount,
|
|
97
|
-
pullRounds: pulled.rounds,
|
|
98
|
-
pullResponse: pulled.response,
|
|
101
|
+
sha256: options.sha256,
|
|
99
102
|
};
|
|
103
|
+
// Build pull request (reads subscription state)
|
|
104
|
+
const pullState = await buildPullRequest(db, pullOpts);
|
|
105
|
+
const { clientId } = pullState.request;
|
|
106
|
+
// Grab at most one outbox commit
|
|
107
|
+
const outbox = await getNextSendableOutboxCommit(db);
|
|
108
|
+
const plugins = options.plugins ?? [];
|
|
109
|
+
const ctx = {
|
|
110
|
+
actorId: options.actorId ?? 'unknown',
|
|
111
|
+
clientId,
|
|
112
|
+
};
|
|
113
|
+
// Build push request, running beforePush plugins
|
|
114
|
+
let pushRequest;
|
|
115
|
+
if (outbox) {
|
|
116
|
+
pushRequest = {
|
|
117
|
+
clientId,
|
|
118
|
+
clientCommitId: outbox.client_commit_id,
|
|
119
|
+
operations: outbox.operations,
|
|
120
|
+
schemaVersion: outbox.schema_version,
|
|
121
|
+
};
|
|
122
|
+
for (const plugin of plugins) {
|
|
123
|
+
if (!plugin.beforePush)
|
|
124
|
+
continue;
|
|
125
|
+
pushRequest = await plugin.beforePush(ctx, pushRequest);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Try WS push first for the first outbox commit (if realtime transport supports it).
|
|
129
|
+
// Fall back to HTTP push in the combined request when WS is unavailable or fails.
|
|
130
|
+
let wsPushResponse = null;
|
|
131
|
+
if (pushRequest && hasPushViaWs(transport)) {
|
|
132
|
+
try {
|
|
133
|
+
wsPushResponse = await transport.pushViaWs(pushRequest);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
wsPushResponse = null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const combined = await transport.sync({
|
|
140
|
+
clientId,
|
|
141
|
+
...(pushRequest && !wsPushResponse
|
|
142
|
+
? {
|
|
143
|
+
push: {
|
|
144
|
+
clientCommitId: pushRequest.clientCommitId,
|
|
145
|
+
operations: pushRequest.operations,
|
|
146
|
+
schemaVersion: pushRequest.schemaVersion,
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
: {}),
|
|
150
|
+
pull: {
|
|
151
|
+
limitCommits: pullState.request.limitCommits,
|
|
152
|
+
limitSnapshotRows: pullState.request.limitSnapshotRows,
|
|
153
|
+
maxSnapshotPages: pullState.request.maxSnapshotPages,
|
|
154
|
+
dedupeRows: pullState.request.dedupeRows,
|
|
155
|
+
subscriptions: pullState.request.subscriptions,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// Process push response
|
|
159
|
+
let pushedCommits = 0;
|
|
160
|
+
if (outbox && pushRequest) {
|
|
161
|
+
let pushRes = wsPushResponse ?? combined.push;
|
|
162
|
+
if (!pushRes) {
|
|
163
|
+
await markOutboxCommitPending(db, {
|
|
164
|
+
id: outbox.id,
|
|
165
|
+
error: 'MISSING_PUSH_RESPONSE',
|
|
166
|
+
});
|
|
167
|
+
throw new Error('Server returned no push response');
|
|
168
|
+
}
|
|
169
|
+
// Run afterPush plugins
|
|
170
|
+
for (const plugin of plugins) {
|
|
171
|
+
if (!plugin.afterPush)
|
|
172
|
+
continue;
|
|
173
|
+
pushRes = await plugin.afterPush(ctx, {
|
|
174
|
+
request: pushRequest,
|
|
175
|
+
response: pushRes,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const responseJson = JSON.stringify(pushRes);
|
|
179
|
+
if (pushRes.status === 'applied' || pushRes.status === 'cached') {
|
|
180
|
+
await markOutboxCommitAcked(db, {
|
|
181
|
+
id: outbox.id,
|
|
182
|
+
commitSeq: pushRes.commitSeq ?? null,
|
|
183
|
+
responseJson,
|
|
184
|
+
});
|
|
185
|
+
pushedCommits = 1;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
// Check if all errors are retriable
|
|
189
|
+
const errorResults = pushRes.results.filter((r) => r.status === 'error');
|
|
190
|
+
const allRetriable = errorResults.length > 0 &&
|
|
191
|
+
errorResults.every((r) => r.retriable === true);
|
|
192
|
+
if (allRetriable) {
|
|
193
|
+
await markOutboxCommitPending(db, {
|
|
194
|
+
id: outbox.id,
|
|
195
|
+
error: 'Retriable',
|
|
196
|
+
responseJson,
|
|
197
|
+
});
|
|
198
|
+
pushedCommits = 1;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
await upsertConflictsForRejectedCommit(db, {
|
|
202
|
+
outboxCommitId: outbox.id,
|
|
203
|
+
clientCommitId: outbox.client_commit_id,
|
|
204
|
+
response: pushRes,
|
|
205
|
+
});
|
|
206
|
+
await markOutboxCommitFailed(db, {
|
|
207
|
+
id: outbox.id,
|
|
208
|
+
error: 'REJECTED',
|
|
209
|
+
responseJson,
|
|
210
|
+
});
|
|
211
|
+
pushedCommits = 1;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Settle remaining outbox commits
|
|
215
|
+
const remaining = await syncPushUntilSettled(db, transport, {
|
|
216
|
+
clientId: options.clientId,
|
|
217
|
+
actorId: options.actorId,
|
|
218
|
+
plugins: options.plugins,
|
|
219
|
+
maxCommits: (options.maxPushCommits ?? 20) - 1,
|
|
220
|
+
});
|
|
221
|
+
pushedCommits += remaining.pushedCount;
|
|
222
|
+
}
|
|
223
|
+
// Process pull response
|
|
224
|
+
let pullResponse = { ok: true, subscriptions: [] };
|
|
225
|
+
let pullRounds = 0;
|
|
226
|
+
if (combined.pull) {
|
|
227
|
+
pullResponse = await applyPullResponse(db, transport, handlers, pullOpts, pullState, combined.pull);
|
|
228
|
+
pullRounds = 1;
|
|
229
|
+
// Continue pulling if more data
|
|
230
|
+
if (needsAnotherPull(pullResponse)) {
|
|
231
|
+
const aggregatedBySubId = new Map();
|
|
232
|
+
mergePullResponse(aggregatedBySubId, pullResponse);
|
|
233
|
+
const more = await syncPullUntilSettled(db, transport, handlers, {
|
|
234
|
+
...pullOpts,
|
|
235
|
+
maxRounds: (options.maxPullRounds ?? 20) - 1,
|
|
236
|
+
});
|
|
237
|
+
pullRounds += more.rounds;
|
|
238
|
+
mergePullResponse(aggregatedBySubId, more.response);
|
|
239
|
+
pullResponse = {
|
|
240
|
+
ok: true,
|
|
241
|
+
subscriptions: Array.from(aggregatedBySubId.values()),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return { pushedCommits, pullRounds, pullResponse };
|
|
246
|
+
}
|
|
247
|
+
export async function syncOnce(db, transport, handlers, options) {
|
|
248
|
+
return syncOnceCombined(db, transport, handlers, options);
|
|
100
249
|
}
|
|
101
250
|
//# sourceMappingURL=sync-loop.js.map
|
package/dist/sync-loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-loop.js","sourceRoot":"","sources":["../src/sync-loop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"sync-loop.js","sourceRoot":"","sources":["../src/sync-loop.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncular/client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2-126",
|
|
4
|
+
"description": "Client-side sync engine with offline-first support, outbox, and conflict resolution",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Benjamin Kniffler",
|
|
7
|
+
"homepage": "https://syncular.dev",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/syncular/syncular.git",
|
|
11
|
+
"directory": "packages/client"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/syncular/syncular/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"sync",
|
|
18
|
+
"offline-first",
|
|
19
|
+
"realtime",
|
|
20
|
+
"database",
|
|
21
|
+
"typescript"
|
|
22
|
+
],
|
|
4
23
|
"private": false,
|
|
5
24
|
"publishConfig": {
|
|
6
25
|
"access": "public"
|
|
7
26
|
},
|
|
8
27
|
"type": "module",
|
|
9
|
-
"files": [
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"src"
|
|
31
|
+
],
|
|
10
32
|
"exports": {
|
|
11
33
|
".": {
|
|
12
34
|
"bun": "./src/index.ts",
|
|
35
|
+
"browser": "./src/index.ts",
|
|
13
36
|
"import": {
|
|
14
37
|
"types": "./dist/index.d.ts",
|
|
15
38
|
"default": "./dist/index.js"
|
|
@@ -19,17 +42,18 @@
|
|
|
19
42
|
"scripts": {
|
|
20
43
|
"test": "bun test --pass-with-no-tests",
|
|
21
44
|
"tsgo": "tsgo --noEmit",
|
|
22
|
-
"build": "
|
|
45
|
+
"build": "tsgo",
|
|
46
|
+
"release": "bunx syncular-publish"
|
|
23
47
|
},
|
|
24
48
|
"dependencies": {
|
|
25
|
-
"@syncular/core": "
|
|
26
|
-
"@syncular/transport-http": "
|
|
49
|
+
"@syncular/core": "0.0.2-126",
|
|
50
|
+
"@syncular/transport-http": "0.0.2-126"
|
|
27
51
|
},
|
|
28
52
|
"peerDependencies": {
|
|
29
53
|
"kysely": "*"
|
|
30
54
|
},
|
|
31
55
|
"devDependencies": {
|
|
32
|
-
"@syncular/config": "
|
|
56
|
+
"@syncular/config": "0.0.0",
|
|
33
57
|
"kysely": "*"
|
|
34
58
|
}
|
|
35
59
|
}
|