@doync/client 0.1.0 → 0.1.1
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 +1 -17
- package/dist/adapter.cjs +1 -1
- package/dist/adapter.d.cts +1 -1
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.js +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/client-Bv6QMenB.cjs +15 -0
- package/dist/client-Db0Jfwuy.js +16 -0
- package/dist/client-Db0Jfwuy.js.map +1 -0
- package/dist/{client-CNyLMCw0.d.ts → client-OAVaC3pt.d.ts} +79 -91
- package/dist/client-OAVaC3pt.d.ts.map +1 -0
- package/dist/{client-DHXO0dbf.d.cts → client-OPt8Axyp.d.cts} +79 -91
- package/dist/client-OPt8Axyp.d.cts.map +1 -0
- package/dist/index.d.cts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/internal.cjs +1 -1
- package/dist/internal.d.cts +3 -12
- package/dist/internal.d.cts.map +1 -1
- package/dist/internal.d.ts +3 -12
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/package.json +3 -3
- package/src/client.ts +82 -32
- package/src/engine.ts +188 -134
- package/src/index.ts +1 -6
- package/src/internal.ts +4 -4
- package/src/migrate.ts +1 -1
- package/src/replica/db/0002_prefs_table.sql +9 -0
- package/src/replica/db/meta/0002_snapshot.json +191 -0
- package/src/replica/db/meta/_journal.json +7 -0
- package/src/replica/db/schema.ts +12 -3
- package/src/replica/index.ts +5 -4
- package/src/replica/meta.ts +23 -0
- package/src/replica/track.ts +20 -39
- package/src/socket-reconnect.ts +29 -5
- package/dist/client-C6jAdhbe.cjs +0 -15
- package/dist/client-CNyLMCw0.d.ts.map +0 -1
- package/dist/client-ClV8ce6X.js +0 -16
- package/dist/client-ClV8ce6X.js.map +0 -1
- package/dist/client-DHXO0dbf.d.cts.map +0 -1
- package/src/client-mutation-registry.ts +0 -31
- package/src/mutations.ts +0 -96
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ClientMessage, ServerMessage } from "@doync/core/internal";
|
|
2
|
-
import { BoundQuery, DoyncSchema, MutationDefinition, MutationTree, SqlValue } from "@doync/core";
|
|
2
|
+
import { AuthContext, AuthData, BoundQuery, DoyncSchema, MutationDefinition, MutationTree, SqlValue } from "@doync/core";
|
|
3
3
|
|
|
4
4
|
//#region ../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts
|
|
5
5
|
/** The Standard Typed interface. This is a base type extended by other specs. */
|
|
@@ -126,48 +126,6 @@ interface LocalDb {
|
|
|
126
126
|
*/
|
|
127
127
|
declare function extractWriteTable(sql: string): string | null;
|
|
128
128
|
//#endregion
|
|
129
|
-
//#region src/mutations.d.ts
|
|
130
|
-
/**
|
|
131
|
-
* Write surface a client mutation body runs against: one parameterized
|
|
132
|
-
* statement at a time inside the mutation's savepoint, returning its rows. Same
|
|
133
|
-
* shape the Origin uses, so a shared body runs identically on device and
|
|
134
|
-
* server.
|
|
135
|
-
*/
|
|
136
|
-
interface ClientMutationTx {
|
|
137
|
-
exec<T extends LocalRow = LocalRow>(query: string, ...params: SqlValue[]): T[];
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Client mutation body `(args, ctx, sql)`. Must be deterministic and DB-only
|
|
141
|
-
* (may still be async for local work). Generate ids on the client and pass them
|
|
142
|
-
* in `args` — the body is replayed on rebase. External I/O belongs in a server
|
|
143
|
-
* override, not the client bundle.
|
|
144
|
-
*/
|
|
145
|
-
type ClientMutationHandler = (args: unknown, ctx: Record<string, unknown>, sql: ClientMutationTx) => void | Promise<void>;
|
|
146
|
-
/**
|
|
147
|
-
* A registered client mutation: body plus optional standard-schema args
|
|
148
|
-
* validator applied at `mutate()` time. A bare handler is also accepted.
|
|
149
|
-
*/
|
|
150
|
-
interface ClientMutation {
|
|
151
|
-
readonly args?: StandardSchemaV1;
|
|
152
|
-
readonly handler: ClientMutationHandler;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Name-keyed client mutation registry. Keys match the server's dotted names so
|
|
156
|
-
* a push reaches the matching authoritative body.
|
|
157
|
-
*/
|
|
158
|
-
type ClientMutationRegistry = Readonly<Record<string, ClientMutation | ClientMutationHandler>>;
|
|
159
|
-
/**
|
|
160
|
-
* Normalize a registry entry (bare handler or `{args, handler}`) to the object
|
|
161
|
-
* form.
|
|
162
|
-
*/
|
|
163
|
-
declare function asClientMutation(entry: ClientMutation | ClientMutationHandler): ClientMutation;
|
|
164
|
-
/**
|
|
165
|
-
* Validate `args` through a standard-schema synchronously (mirrors
|
|
166
|
-
* `@doync/core` query-args). Async validators refuse loudly — the body is
|
|
167
|
-
* deterministic on both ends. Returns validated value or throws.
|
|
168
|
-
*/
|
|
169
|
-
declare function validateMutationArgs(schema: StandardSchemaV1, args: unknown): unknown;
|
|
170
|
-
//#endregion
|
|
171
129
|
//#region src/socket.d.ts
|
|
172
130
|
/**
|
|
173
131
|
* Minimal transport the client engine uses to talk to its Mirror. Platform
|
|
@@ -217,6 +175,13 @@ interface SyncSocketHandlers {
|
|
|
217
175
|
declare function readMeta(db: LocalDb, key: string): string | null;
|
|
218
176
|
/** Upsert one `__doync_meta` value. Columns are `k`/`v` (ADR-0024). */
|
|
219
177
|
declare function writeMeta(db: LocalDb, key: string, value: string): void;
|
|
178
|
+
/**
|
|
179
|
+
* Read one `__doync_prefs` value, or `null` if unset. Columns are `k`/`v`
|
|
180
|
+
* (ADR-0024).
|
|
181
|
+
*/
|
|
182
|
+
declare function readPref(db: LocalDb, key: string): string | null;
|
|
183
|
+
/** Upsert one `__doync_prefs` value. Columns are `k`/`v` (ADR-0024). */
|
|
184
|
+
declare function writePref(db: LocalDb, key: string, value: string): void;
|
|
220
185
|
//#endregion
|
|
221
186
|
//#region src/replica/stamps.d.ts
|
|
222
187
|
/**
|
|
@@ -275,8 +240,9 @@ declare function applyBundledMigrations(db: LocalDb, schema: DoyncSchema, fromVe
|
|
|
275
240
|
* Drop every consumer (synced) table (ADR-0020's wipe fallback): the first step
|
|
276
241
|
* of wipe-replica-and-resync, run with foreign keys already off so no cascade
|
|
277
242
|
* fires and drop order is irrelevant (ADR-0009). `__doync_`-prefixed engine
|
|
278
|
-
* tables
|
|
279
|
-
*
|
|
243
|
+
* tables are left alone here; the caller drops pending / sync meta and mints a
|
|
244
|
+
* fresh clientId (ADR-0037). The `__doync_engine` ledger and `__doync_prefs`
|
|
245
|
+
* survive.
|
|
280
246
|
*/
|
|
281
247
|
declare function dropConsumerTables(db: LocalDb, schema: DoyncSchema): void;
|
|
282
248
|
//#endregion
|
|
@@ -299,12 +265,12 @@ interface MutationResult {
|
|
|
299
265
|
*/
|
|
300
266
|
type LogoutBehavior = "keep" | "forget";
|
|
301
267
|
/**
|
|
302
|
-
* The `
|
|
268
|
+
* The `__doync_prefs` key the durable {@link LogoutBehavior} lives under
|
|
303
269
|
* (closeio/doync#135) — shared by the direct engine's
|
|
304
270
|
* {@link ClientEngine.setLogoutBehavior} / `createClient` write and the web DB
|
|
305
271
|
* worker's per-identity write + boot read, so the ends can never drift.
|
|
306
272
|
*/
|
|
307
|
-
declare const
|
|
273
|
+
declare const __LOGOUT_BEHAVIOR_PREF_KEY = "logout_behavior";
|
|
308
274
|
/**
|
|
309
275
|
* The `__doync_meta` key the Client's durable connected-time counter lives
|
|
310
276
|
* under (ADR-0014 client-half addendum / closeio/doync#223). Blob-typed
|
|
@@ -319,12 +285,17 @@ declare const __CONNECTED_CLOCK_META_KEY = "connected_clock";
|
|
|
319
285
|
* after deploying a matching client. Terminal until reload.
|
|
320
286
|
* - `server-behind` — client is ahead of a mid-deploy Mirror; the client backs
|
|
321
287
|
* off and re-handshakes automatically.
|
|
322
|
-
* - `resync` — local
|
|
323
|
-
* clientId
|
|
288
|
+
* - `resync` — local sync state wiped and rebuilding as a fresh Client under the
|
|
289
|
+
* same identity (pending writes dropped, new clientId). Transient; clears
|
|
290
|
+
* when sync resumes.
|
|
291
|
+
* - `reaped` — same fresh-client rebuild as `resync`, but the Origin forgot this
|
|
292
|
+
* Client (gone past the client-state lifetime). Transient; clears when sync
|
|
293
|
+
* resumes. Distinct so the app can say "you were away too long" rather than
|
|
294
|
+
* "data refreshed".
|
|
324
295
|
* - `forget` — local store erased (including identity); boots as a fresh client.
|
|
325
296
|
* Transient; clears when sync resumes.
|
|
326
297
|
*/
|
|
327
|
-
type SchemaEventKind = "reload" | "server-behind" | "resync" | "forget";
|
|
298
|
+
type SchemaEventKind = "reload" | "server-behind" | "resync" | "reaped" | "forget";
|
|
328
299
|
/**
|
|
329
300
|
* One schema-status transition: `kind` plus a human-readable `message` for
|
|
330
301
|
* diagnostics (not a control signal). `null` on the client means nominal.
|
|
@@ -461,17 +432,18 @@ interface DoyncClient {
|
|
|
461
432
|
*/
|
|
462
433
|
onSchemaChange(listener: () => void): () => void;
|
|
463
434
|
/**
|
|
464
|
-
*
|
|
465
|
-
*
|
|
435
|
+
* Rebuild sync state as a fresh Client under the same identity: drop pending
|
|
436
|
+
* writes, mint a new clientId, wipe the replica, and rebootstrap. Destructive
|
|
437
|
+
* to unsent work — not a harmless refresh. Optional on the interface —
|
|
466
438
|
* platform clients implement it.
|
|
467
439
|
*/
|
|
468
|
-
resync
|
|
440
|
+
resync(): void;
|
|
469
441
|
/**
|
|
470
442
|
* Erase this identity's local data (replica, pendings, identity). Privacy /
|
|
471
443
|
* logout-forget path. Optional on the interface — platform clients implement
|
|
472
444
|
* it.
|
|
473
445
|
*/
|
|
474
|
-
forget
|
|
446
|
+
forget(identity?: string): void;
|
|
475
447
|
/**
|
|
476
448
|
* Durably set {@link LogoutBehavior} at runtime (e.g. a "remember me"
|
|
477
449
|
* checkbox). Survives restart. Optional — platform clients implement it.
|
|
@@ -542,15 +514,15 @@ interface ClientEngineConfig {
|
|
|
542
514
|
* Named mutation bodies resolved on `push` — deterministic, DB-only
|
|
543
515
|
* (ADR-0017/0021).
|
|
544
516
|
*/
|
|
545
|
-
readonly mutations:
|
|
517
|
+
readonly mutations: Record<string, MutationDefinition>;
|
|
546
518
|
/** The Mirror socket seam (ADR-0016). */
|
|
547
519
|
readonly socket: SyncSocket;
|
|
548
520
|
/**
|
|
549
521
|
* The asserted projected auth context (ADR-0018 addendum / closeio/doync#167)
|
|
550
522
|
* queries and mutation bodies read. Consumer-owned; the library ships no
|
|
551
|
-
* decode.
|
|
523
|
+
* decode. `null` when anonymous.
|
|
552
524
|
*/
|
|
553
|
-
readonly ctx?:
|
|
525
|
+
readonly ctx?: AuthContext;
|
|
554
526
|
/**
|
|
555
527
|
* Transport credential PRESENTED as `connect{jwt}` (ADR-0016/0018) — the
|
|
556
528
|
* Mirror resolves token-first. Auth must ride the HANDSHAKE, not only the
|
|
@@ -639,17 +611,17 @@ declare class ClientEngine implements DoyncClient {
|
|
|
639
611
|
get schemaStatus(): SchemaEvent | null;
|
|
640
612
|
mutate<Args = unknown>(mutation: MutationDefinition<Args>, args: Args, options?: MutationOptions): MutationResult;
|
|
641
613
|
/**
|
|
642
|
-
* Adopt a refreshed SAME-USER identity
|
|
643
|
-
*
|
|
644
|
-
*
|
|
645
|
-
*
|
|
646
|
-
*
|
|
614
|
+
* Adopt a refreshed SAME-USER identity (#167). When connected with a bearer,
|
|
615
|
+
* send in-band `updateAuth` (ADR-0018 / #85) so the Mirror extends auth
|
|
616
|
+
* without reconnect when userId matches and `issuedAt` is newer. Identity
|
|
617
|
+
* CHANGE (different `userId`, incl. anon↔user) is topology-level replica swap
|
|
618
|
+
* — SharedWorker routes only same-user refreshes here.
|
|
647
619
|
*
|
|
648
620
|
* Token is stored for the next reconnect (#92: surviving SharedWorker must
|
|
649
621
|
* not reuse a stale token). `ctx`/`userId` asserted, never derived. Halted
|
|
650
|
-
* engines never emit.
|
|
622
|
+
* engines never emit. Pass `ctx: null` for anonymous.
|
|
651
623
|
*/
|
|
652
|
-
updateAuth(token: string | null | undefined, ctx?:
|
|
624
|
+
updateAuth(token: string | null | undefined, ctx?: AuthContext, userId?: string | null): void;
|
|
653
625
|
/**
|
|
654
626
|
* Subscribe to a registered query (ADR-0021): resolve under args+ctx,
|
|
655
627
|
* register upstream, return a reactive {@link View}. Local snapshots run
|
|
@@ -682,23 +654,25 @@ declare class ClientEngine implements DoyncClient {
|
|
|
682
654
|
*/
|
|
683
655
|
local<Row extends Record<string, unknown> = Record<string, SqlValue>>(sql: string, ...params: SqlValue[]): View<Row>;
|
|
684
656
|
/**
|
|
685
|
-
* Rebuild sync state (ADR-0022
|
|
686
|
-
*
|
|
687
|
-
*
|
|
688
|
-
*
|
|
657
|
+
* Rebuild sync state as a fresh Client under the same identity (ADR-0022 /
|
|
658
|
+
* ADR-0037 resync): drop pending writes, mint a new clientId, wipe replica /
|
|
659
|
+
* memberships / cookie, rebootstrap. Same core as failed-migration,
|
|
660
|
+
* cookie-above-head, and heldAt-ahead heals ({@link #wipeAndResync}).
|
|
661
|
+
* Exclusive chain; offline rebootstrap rides next reconnect. Preferences
|
|
662
|
+
* survive (`__doync_prefs`).
|
|
689
663
|
*/
|
|
690
664
|
resync(): void;
|
|
691
665
|
/**
|
|
692
666
|
* Erase this identity's local data (ADR-0022 forget): wipe replica,
|
|
693
|
-
* memberships, pending, and
|
|
694
|
-
*
|
|
695
|
-
* rejected. Topology can
|
|
696
|
-
* current store. Exclusive chain.
|
|
667
|
+
* memberships, pending, meta, and preferences, then fresh first-sight under a
|
|
668
|
+
* new clientId. Erases WHO, not just WHAT. Awaiters of forgotten writes are
|
|
669
|
+
* rejected. Topology can erase the identity's database file on active forget
|
|
670
|
+
* (#134); this resets the current store. Exclusive chain.
|
|
697
671
|
*/
|
|
698
672
|
forget(): void;
|
|
699
673
|
/**
|
|
700
674
|
* Durably set {@link LogoutBehavior} at runtime ({@link
|
|
701
|
-
* DoyncClient.setLogoutBehavior}). Via {@link #
|
|
675
|
+
* DoyncClient.setLogoutBehavior}). Via {@link #sideWritePref} so it commits
|
|
702
676
|
* outside the optimistic overlay (#135 / ADR-0019). Direct engine stores for
|
|
703
677
|
* RN; web DB worker reports to hub.
|
|
704
678
|
*/
|
|
@@ -756,7 +730,7 @@ declare function settledRejection(error: unknown): MutationResult;
|
|
|
756
730
|
* Options for {@link createClient}. Platform adapters (`@doync/web`,
|
|
757
731
|
* `@doync/mobile`) fill these; app code rarely calls `createClient` directly.
|
|
758
732
|
*/
|
|
759
|
-
interface CreateClientOptions<
|
|
733
|
+
interface CreateClientOptions<TAuthContext extends AuthContext = AuthContext> {
|
|
760
734
|
/** Synchronous local SQLite port (wa-sqlite / node:sqlite / op-sqlite). */
|
|
761
735
|
readonly db: LocalDb;
|
|
762
736
|
/** Synced schema shared with Origin and Mirror. */
|
|
@@ -769,22 +743,16 @@ interface CreateClientOptions<TAuthData = unknown> {
|
|
|
769
743
|
/** Transport to the Mirror. */
|
|
770
744
|
readonly socket: SyncSocket;
|
|
771
745
|
/**
|
|
772
|
-
*
|
|
773
|
-
*
|
|
774
|
-
*/
|
|
775
|
-
readonly token?: string;
|
|
776
|
-
/**
|
|
777
|
-
* Projected auth context for optimistic query/mutation resolution (mirror
|
|
778
|
-
* your server `toContext`). Defaults to `{}`.
|
|
746
|
+
* Whole client identity, or `null` for anonymous. `token` is optional inside
|
|
747
|
+
* {@link AuthData} (cookie auth); `ctx` is required when authenticated.
|
|
779
748
|
*/
|
|
780
|
-
readonly
|
|
749
|
+
readonly authData: AuthData<TAuthContext> | null;
|
|
781
750
|
/**
|
|
782
|
-
*
|
|
783
|
-
*
|
|
751
|
+
* Standard Schema for `authData.ctx`. When present, construction validates
|
|
752
|
+
* synchronously and throws on failure. Platform adapters pass the consumer's
|
|
753
|
+
* shared `ctxValidationSchema`.
|
|
784
754
|
*/
|
|
785
|
-
readonly
|
|
786
|
-
/** Pin a durable client id across restarts. */
|
|
787
|
-
readonly clientId?: string;
|
|
755
|
+
readonly ctxValidationSchema: StandardSchemaV1<unknown, TAuthContext>;
|
|
788
756
|
/** Observe schema/recovery transitions. */
|
|
789
757
|
readonly onSchemaEvent?: (event: SchemaEvent) => void;
|
|
790
758
|
/**
|
|
@@ -799,14 +767,34 @@ interface CreateClientOptions<TAuthData = unknown> {
|
|
|
799
767
|
* Mirror socket. App code normally goes through `@doync/web` / `@doync/mobile`
|
|
800
768
|
* instead.
|
|
801
769
|
*/
|
|
802
|
-
declare function createClient<
|
|
770
|
+
declare function createClient<TAuthContext extends AuthContext = AuthContext>(options: CreateClientOptions<TAuthContext>): DoyncClient;
|
|
771
|
+
/**
|
|
772
|
+
* {@link CreateClientOptions} for trusted internal construction: the web DB
|
|
773
|
+
* worker receives tab-validated identity over the wire and cannot hold the
|
|
774
|
+
* consumer's schema (a validator is a function), so the schema is optional here
|
|
775
|
+
* — absent means the caller already validated.
|
|
776
|
+
*/
|
|
777
|
+
type CreateClientEngineOptions<TAuthContext extends AuthContext = AuthContext> = Omit<CreateClientOptions<TAuthContext>, "ctxValidationSchema"> & {
|
|
778
|
+
readonly ctxValidationSchema?: StandardSchemaV1<unknown, TAuthContext>; /** Pin a durable client id (monorepo test/bench lanes only). */
|
|
779
|
+
readonly clientId?: string;
|
|
780
|
+
};
|
|
803
781
|
/**
|
|
804
782
|
* Concrete-engine factory (ADR-0033 / closeio/doync#241). Same construction as
|
|
805
783
|
* {@link createClient}, but typed as {@link ClientEngine} so platform adapters
|
|
806
784
|
* (web DB-worker, mobile wrapper) can reach engine-only fields like `clientId`
|
|
807
785
|
* without an unchecked downcast. Exported on `@doync/client/internal` only.
|
|
808
786
|
*/
|
|
809
|
-
declare function createClientEngine<
|
|
787
|
+
declare function createClientEngine<TAuthContext extends AuthContext = AuthContext>(options: CreateClientEngineOptions<TAuthContext>): ClientEngine;
|
|
788
|
+
/**
|
|
789
|
+
* Validate and flatten `authData` for engine slots. When a schema is present
|
|
790
|
+
* and identity is non-null, `ctx` is validated synchronously (throws at the
|
|
791
|
+
* call site). Anonymous (`null`) yields `userId: null`, `ctx: null`, no token.
|
|
792
|
+
*/
|
|
793
|
+
declare function resolveClientAuthData<TAuthContext extends AuthContext>(authData: AuthData<TAuthContext> | null, ctxValidationSchema?: StandardSchemaV1<unknown, TAuthContext>): {
|
|
794
|
+
userId: string | null;
|
|
795
|
+
token: string | undefined;
|
|
796
|
+
ctx: AuthContext;
|
|
797
|
+
};
|
|
810
798
|
//#endregion
|
|
811
|
-
export {
|
|
812
|
-
//# sourceMappingURL=client-
|
|
799
|
+
export { replayMigrations as A, extractWriteTable as B, __LOGOUT_BEHAVIOR_PREF_KEY as C, applyBundledMigrations as D, settledRejection as E, SeamStatus as F, SyncSocket as I, SyncSocketHandlers as L, readPref as M, writeMeta as N, createEngineTables as O, writePref as P, LocalDb as R, __CONNECTED_CLOCK_META_KEY as S, normalizeQuerySurface as T, SchemaEvent as _, ClientEngine as a, View as b, DoyncClient as c, MutationOptions as d, MutationResult as f, QueryStatus as g, PreloadOptions as h, resolveClientAuthData as i, readMeta as j, dropConsumerTables as k, FalsyQuery as l, PreloadHandle as m, createClient as n, ClientEngineConfig as o, OnceView as p, createClientEngine as r, ConnectionStatus as s, CreateClientOptions as t, LogoutBehavior as u, SchemaEventKind as v, isFalsyQuery as w, ViewStatus as x, SubscribeOptions as y, LocalRow as z };
|
|
800
|
+
//# sourceMappingURL=client-OAVaC3pt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-OAVaC3pt.d.ts","names":["Input","Output","StandardTypedV1","Props","version","vendor","types","Types","input","output","InferInput","Schema","NonNullable","InferOutput","StandardSchemaV1","validate","value","Options","options","Result","Promise","SuccessResult","FailureResult","issues","libraryOptions","Record","ReadonlyArray","Issue","message","path","PropertyKey","PathSegment","key","StandardJSONSchemaV1","jsonSchema","Converter","Target","target"],"sources":["../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../src/port.ts","../src/socket.ts","../src/replica/meta.ts","../src/replica/stamps.ts","../src/replica/index.ts","../src/engine.ts","../src/client.ts"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BoundQuery, DoyncSchema, MutationDefinition, MutationTree, SqlValue } from "@doync/core";
|
|
1
|
+
import { AuthContext, AuthData, BoundQuery, DoyncSchema, MutationDefinition, MutationTree, SqlValue } from "@doync/core";
|
|
2
2
|
import { ClientMessage, ServerMessage } from "@doync/core/internal";
|
|
3
3
|
|
|
4
4
|
//#region ../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts
|
|
@@ -126,48 +126,6 @@ interface LocalDb {
|
|
|
126
126
|
*/
|
|
127
127
|
declare function extractWriteTable(sql: string): string | null;
|
|
128
128
|
//#endregion
|
|
129
|
-
//#region src/mutations.d.ts
|
|
130
|
-
/**
|
|
131
|
-
* Write surface a client mutation body runs against: one parameterized
|
|
132
|
-
* statement at a time inside the mutation's savepoint, returning its rows. Same
|
|
133
|
-
* shape the Origin uses, so a shared body runs identically on device and
|
|
134
|
-
* server.
|
|
135
|
-
*/
|
|
136
|
-
interface ClientMutationTx {
|
|
137
|
-
exec<T extends LocalRow = LocalRow>(query: string, ...params: SqlValue[]): T[];
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Client mutation body `(args, ctx, sql)`. Must be deterministic and DB-only
|
|
141
|
-
* (may still be async for local work). Generate ids on the client and pass them
|
|
142
|
-
* in `args` — the body is replayed on rebase. External I/O belongs in a server
|
|
143
|
-
* override, not the client bundle.
|
|
144
|
-
*/
|
|
145
|
-
type ClientMutationHandler = (args: unknown, ctx: Record<string, unknown>, sql: ClientMutationTx) => void | Promise<void>;
|
|
146
|
-
/**
|
|
147
|
-
* A registered client mutation: body plus optional standard-schema args
|
|
148
|
-
* validator applied at `mutate()` time. A bare handler is also accepted.
|
|
149
|
-
*/
|
|
150
|
-
interface ClientMutation {
|
|
151
|
-
readonly args?: StandardSchemaV1;
|
|
152
|
-
readonly handler: ClientMutationHandler;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Name-keyed client mutation registry. Keys match the server's dotted names so
|
|
156
|
-
* a push reaches the matching authoritative body.
|
|
157
|
-
*/
|
|
158
|
-
type ClientMutationRegistry = Readonly<Record<string, ClientMutation | ClientMutationHandler>>;
|
|
159
|
-
/**
|
|
160
|
-
* Normalize a registry entry (bare handler or `{args, handler}`) to the object
|
|
161
|
-
* form.
|
|
162
|
-
*/
|
|
163
|
-
declare function asClientMutation(entry: ClientMutation | ClientMutationHandler): ClientMutation;
|
|
164
|
-
/**
|
|
165
|
-
* Validate `args` through a standard-schema synchronously (mirrors
|
|
166
|
-
* `@doync/core` query-args). Async validators refuse loudly — the body is
|
|
167
|
-
* deterministic on both ends. Returns validated value or throws.
|
|
168
|
-
*/
|
|
169
|
-
declare function validateMutationArgs(schema: StandardSchemaV1, args: unknown): unknown;
|
|
170
|
-
//#endregion
|
|
171
129
|
//#region src/socket.d.ts
|
|
172
130
|
/**
|
|
173
131
|
* Minimal transport the client engine uses to talk to its Mirror. Platform
|
|
@@ -217,6 +175,13 @@ interface SyncSocketHandlers {
|
|
|
217
175
|
declare function readMeta(db: LocalDb, key: string): string | null;
|
|
218
176
|
/** Upsert one `__doync_meta` value. Columns are `k`/`v` (ADR-0024). */
|
|
219
177
|
declare function writeMeta(db: LocalDb, key: string, value: string): void;
|
|
178
|
+
/**
|
|
179
|
+
* Read one `__doync_prefs` value, or `null` if unset. Columns are `k`/`v`
|
|
180
|
+
* (ADR-0024).
|
|
181
|
+
*/
|
|
182
|
+
declare function readPref(db: LocalDb, key: string): string | null;
|
|
183
|
+
/** Upsert one `__doync_prefs` value. Columns are `k`/`v` (ADR-0024). */
|
|
184
|
+
declare function writePref(db: LocalDb, key: string, value: string): void;
|
|
220
185
|
//#endregion
|
|
221
186
|
//#region src/replica/stamps.d.ts
|
|
222
187
|
/**
|
|
@@ -275,8 +240,9 @@ declare function applyBundledMigrations(db: LocalDb, schema: DoyncSchema, fromVe
|
|
|
275
240
|
* Drop every consumer (synced) table (ADR-0020's wipe fallback): the first step
|
|
276
241
|
* of wipe-replica-and-resync, run with foreign keys already off so no cascade
|
|
277
242
|
* fires and drop order is irrelevant (ADR-0009). `__doync_`-prefixed engine
|
|
278
|
-
* tables
|
|
279
|
-
*
|
|
243
|
+
* tables are left alone here; the caller drops pending / sync meta and mints a
|
|
244
|
+
* fresh clientId (ADR-0037). The `__doync_engine` ledger and `__doync_prefs`
|
|
245
|
+
* survive.
|
|
280
246
|
*/
|
|
281
247
|
declare function dropConsumerTables(db: LocalDb, schema: DoyncSchema): void;
|
|
282
248
|
//#endregion
|
|
@@ -299,12 +265,12 @@ interface MutationResult {
|
|
|
299
265
|
*/
|
|
300
266
|
type LogoutBehavior = "keep" | "forget";
|
|
301
267
|
/**
|
|
302
|
-
* The `
|
|
268
|
+
* The `__doync_prefs` key the durable {@link LogoutBehavior} lives under
|
|
303
269
|
* (closeio/doync#135) — shared by the direct engine's
|
|
304
270
|
* {@link ClientEngine.setLogoutBehavior} / `createClient` write and the web DB
|
|
305
271
|
* worker's per-identity write + boot read, so the ends can never drift.
|
|
306
272
|
*/
|
|
307
|
-
declare const
|
|
273
|
+
declare const __LOGOUT_BEHAVIOR_PREF_KEY = "logout_behavior";
|
|
308
274
|
/**
|
|
309
275
|
* The `__doync_meta` key the Client's durable connected-time counter lives
|
|
310
276
|
* under (ADR-0014 client-half addendum / closeio/doync#223). Blob-typed
|
|
@@ -319,12 +285,17 @@ declare const __CONNECTED_CLOCK_META_KEY = "connected_clock";
|
|
|
319
285
|
* after deploying a matching client. Terminal until reload.
|
|
320
286
|
* - `server-behind` — client is ahead of a mid-deploy Mirror; the client backs
|
|
321
287
|
* off and re-handshakes automatically.
|
|
322
|
-
* - `resync` — local
|
|
323
|
-
* clientId
|
|
288
|
+
* - `resync` — local sync state wiped and rebuilding as a fresh Client under the
|
|
289
|
+
* same identity (pending writes dropped, new clientId). Transient; clears
|
|
290
|
+
* when sync resumes.
|
|
291
|
+
* - `reaped` — same fresh-client rebuild as `resync`, but the Origin forgot this
|
|
292
|
+
* Client (gone past the client-state lifetime). Transient; clears when sync
|
|
293
|
+
* resumes. Distinct so the app can say "you were away too long" rather than
|
|
294
|
+
* "data refreshed".
|
|
324
295
|
* - `forget` — local store erased (including identity); boots as a fresh client.
|
|
325
296
|
* Transient; clears when sync resumes.
|
|
326
297
|
*/
|
|
327
|
-
type SchemaEventKind = "reload" | "server-behind" | "resync" | "forget";
|
|
298
|
+
type SchemaEventKind = "reload" | "server-behind" | "resync" | "reaped" | "forget";
|
|
328
299
|
/**
|
|
329
300
|
* One schema-status transition: `kind` plus a human-readable `message` for
|
|
330
301
|
* diagnostics (not a control signal). `null` on the client means nominal.
|
|
@@ -461,17 +432,18 @@ interface DoyncClient {
|
|
|
461
432
|
*/
|
|
462
433
|
onSchemaChange(listener: () => void): () => void;
|
|
463
434
|
/**
|
|
464
|
-
*
|
|
465
|
-
*
|
|
435
|
+
* Rebuild sync state as a fresh Client under the same identity: drop pending
|
|
436
|
+
* writes, mint a new clientId, wipe the replica, and rebootstrap. Destructive
|
|
437
|
+
* to unsent work — not a harmless refresh. Optional on the interface —
|
|
466
438
|
* platform clients implement it.
|
|
467
439
|
*/
|
|
468
|
-
resync
|
|
440
|
+
resync(): void;
|
|
469
441
|
/**
|
|
470
442
|
* Erase this identity's local data (replica, pendings, identity). Privacy /
|
|
471
443
|
* logout-forget path. Optional on the interface — platform clients implement
|
|
472
444
|
* it.
|
|
473
445
|
*/
|
|
474
|
-
forget
|
|
446
|
+
forget(identity?: string): void;
|
|
475
447
|
/**
|
|
476
448
|
* Durably set {@link LogoutBehavior} at runtime (e.g. a "remember me"
|
|
477
449
|
* checkbox). Survives restart. Optional — platform clients implement it.
|
|
@@ -542,15 +514,15 @@ interface ClientEngineConfig {
|
|
|
542
514
|
* Named mutation bodies resolved on `push` — deterministic, DB-only
|
|
543
515
|
* (ADR-0017/0021).
|
|
544
516
|
*/
|
|
545
|
-
readonly mutations:
|
|
517
|
+
readonly mutations: Record<string, MutationDefinition>;
|
|
546
518
|
/** The Mirror socket seam (ADR-0016). */
|
|
547
519
|
readonly socket: SyncSocket;
|
|
548
520
|
/**
|
|
549
521
|
* The asserted projected auth context (ADR-0018 addendum / closeio/doync#167)
|
|
550
522
|
* queries and mutation bodies read. Consumer-owned; the library ships no
|
|
551
|
-
* decode.
|
|
523
|
+
* decode. `null` when anonymous.
|
|
552
524
|
*/
|
|
553
|
-
readonly ctx?:
|
|
525
|
+
readonly ctx?: AuthContext;
|
|
554
526
|
/**
|
|
555
527
|
* Transport credential PRESENTED as `connect{jwt}` (ADR-0016/0018) — the
|
|
556
528
|
* Mirror resolves token-first. Auth must ride the HANDSHAKE, not only the
|
|
@@ -639,17 +611,17 @@ declare class ClientEngine implements DoyncClient {
|
|
|
639
611
|
get schemaStatus(): SchemaEvent | null;
|
|
640
612
|
mutate<Args = unknown>(mutation: MutationDefinition<Args>, args: Args, options?: MutationOptions): MutationResult;
|
|
641
613
|
/**
|
|
642
|
-
* Adopt a refreshed SAME-USER identity
|
|
643
|
-
*
|
|
644
|
-
*
|
|
645
|
-
*
|
|
646
|
-
*
|
|
614
|
+
* Adopt a refreshed SAME-USER identity (#167). When connected with a bearer,
|
|
615
|
+
* send in-band `updateAuth` (ADR-0018 / #85) so the Mirror extends auth
|
|
616
|
+
* without reconnect when userId matches and `issuedAt` is newer. Identity
|
|
617
|
+
* CHANGE (different `userId`, incl. anon↔user) is topology-level replica swap
|
|
618
|
+
* — SharedWorker routes only same-user refreshes here.
|
|
647
619
|
*
|
|
648
620
|
* Token is stored for the next reconnect (#92: surviving SharedWorker must
|
|
649
621
|
* not reuse a stale token). `ctx`/`userId` asserted, never derived. Halted
|
|
650
|
-
* engines never emit.
|
|
622
|
+
* engines never emit. Pass `ctx: null` for anonymous.
|
|
651
623
|
*/
|
|
652
|
-
updateAuth(token: string | null | undefined, ctx?:
|
|
624
|
+
updateAuth(token: string | null | undefined, ctx?: AuthContext, userId?: string | null): void;
|
|
653
625
|
/**
|
|
654
626
|
* Subscribe to a registered query (ADR-0021): resolve under args+ctx,
|
|
655
627
|
* register upstream, return a reactive {@link View}. Local snapshots run
|
|
@@ -682,23 +654,25 @@ declare class ClientEngine implements DoyncClient {
|
|
|
682
654
|
*/
|
|
683
655
|
local<Row extends Record<string, unknown> = Record<string, SqlValue>>(sql: string, ...params: SqlValue[]): View<Row>;
|
|
684
656
|
/**
|
|
685
|
-
* Rebuild sync state (ADR-0022
|
|
686
|
-
*
|
|
687
|
-
*
|
|
688
|
-
*
|
|
657
|
+
* Rebuild sync state as a fresh Client under the same identity (ADR-0022 /
|
|
658
|
+
* ADR-0037 resync): drop pending writes, mint a new clientId, wipe replica /
|
|
659
|
+
* memberships / cookie, rebootstrap. Same core as failed-migration,
|
|
660
|
+
* cookie-above-head, and heldAt-ahead heals ({@link #wipeAndResync}).
|
|
661
|
+
* Exclusive chain; offline rebootstrap rides next reconnect. Preferences
|
|
662
|
+
* survive (`__doync_prefs`).
|
|
689
663
|
*/
|
|
690
664
|
resync(): void;
|
|
691
665
|
/**
|
|
692
666
|
* Erase this identity's local data (ADR-0022 forget): wipe replica,
|
|
693
|
-
* memberships, pending, and
|
|
694
|
-
*
|
|
695
|
-
* rejected. Topology can
|
|
696
|
-
* current store. Exclusive chain.
|
|
667
|
+
* memberships, pending, meta, and preferences, then fresh first-sight under a
|
|
668
|
+
* new clientId. Erases WHO, not just WHAT. Awaiters of forgotten writes are
|
|
669
|
+
* rejected. Topology can erase the identity's database file on active forget
|
|
670
|
+
* (#134); this resets the current store. Exclusive chain.
|
|
697
671
|
*/
|
|
698
672
|
forget(): void;
|
|
699
673
|
/**
|
|
700
674
|
* Durably set {@link LogoutBehavior} at runtime ({@link
|
|
701
|
-
* DoyncClient.setLogoutBehavior}). Via {@link #
|
|
675
|
+
* DoyncClient.setLogoutBehavior}). Via {@link #sideWritePref} so it commits
|
|
702
676
|
* outside the optimistic overlay (#135 / ADR-0019). Direct engine stores for
|
|
703
677
|
* RN; web DB worker reports to hub.
|
|
704
678
|
*/
|
|
@@ -756,7 +730,7 @@ declare function settledRejection(error: unknown): MutationResult;
|
|
|
756
730
|
* Options for {@link createClient}. Platform adapters (`@doync/web`,
|
|
757
731
|
* `@doync/mobile`) fill these; app code rarely calls `createClient` directly.
|
|
758
732
|
*/
|
|
759
|
-
interface CreateClientOptions<
|
|
733
|
+
interface CreateClientOptions<TAuthContext extends AuthContext = AuthContext> {
|
|
760
734
|
/** Synchronous local SQLite port (wa-sqlite / node:sqlite / op-sqlite). */
|
|
761
735
|
readonly db: LocalDb;
|
|
762
736
|
/** Synced schema shared with Origin and Mirror. */
|
|
@@ -769,22 +743,16 @@ interface CreateClientOptions<TAuthData = unknown> {
|
|
|
769
743
|
/** Transport to the Mirror. */
|
|
770
744
|
readonly socket: SyncSocket;
|
|
771
745
|
/**
|
|
772
|
-
*
|
|
773
|
-
*
|
|
774
|
-
*/
|
|
775
|
-
readonly token?: string;
|
|
776
|
-
/**
|
|
777
|
-
* Projected auth context for optimistic query/mutation resolution (mirror
|
|
778
|
-
* your server `toContext`). Defaults to `{}`.
|
|
746
|
+
* Whole client identity, or `null` for anonymous. `token` is optional inside
|
|
747
|
+
* {@link AuthData} (cookie auth); `ctx` is required when authenticated.
|
|
779
748
|
*/
|
|
780
|
-
readonly
|
|
749
|
+
readonly authData: AuthData<TAuthContext> | null;
|
|
781
750
|
/**
|
|
782
|
-
*
|
|
783
|
-
*
|
|
751
|
+
* Standard Schema for `authData.ctx`. When present, construction validates
|
|
752
|
+
* synchronously and throws on failure. Platform adapters pass the consumer's
|
|
753
|
+
* shared `ctxValidationSchema`.
|
|
784
754
|
*/
|
|
785
|
-
readonly
|
|
786
|
-
/** Pin a durable client id across restarts. */
|
|
787
|
-
readonly clientId?: string;
|
|
755
|
+
readonly ctxValidationSchema: StandardSchemaV1<unknown, TAuthContext>;
|
|
788
756
|
/** Observe schema/recovery transitions. */
|
|
789
757
|
readonly onSchemaEvent?: (event: SchemaEvent) => void;
|
|
790
758
|
/**
|
|
@@ -799,14 +767,34 @@ interface CreateClientOptions<TAuthData = unknown> {
|
|
|
799
767
|
* Mirror socket. App code normally goes through `@doync/web` / `@doync/mobile`
|
|
800
768
|
* instead.
|
|
801
769
|
*/
|
|
802
|
-
declare function createClient<
|
|
770
|
+
declare function createClient<TAuthContext extends AuthContext = AuthContext>(options: CreateClientOptions<TAuthContext>): DoyncClient;
|
|
771
|
+
/**
|
|
772
|
+
* {@link CreateClientOptions} for trusted internal construction: the web DB
|
|
773
|
+
* worker receives tab-validated identity over the wire and cannot hold the
|
|
774
|
+
* consumer's schema (a validator is a function), so the schema is optional here
|
|
775
|
+
* — absent means the caller already validated.
|
|
776
|
+
*/
|
|
777
|
+
type CreateClientEngineOptions<TAuthContext extends AuthContext = AuthContext> = Omit<CreateClientOptions<TAuthContext>, "ctxValidationSchema"> & {
|
|
778
|
+
readonly ctxValidationSchema?: StandardSchemaV1<unknown, TAuthContext>; /** Pin a durable client id (monorepo test/bench lanes only). */
|
|
779
|
+
readonly clientId?: string;
|
|
780
|
+
};
|
|
803
781
|
/**
|
|
804
782
|
* Concrete-engine factory (ADR-0033 / closeio/doync#241). Same construction as
|
|
805
783
|
* {@link createClient}, but typed as {@link ClientEngine} so platform adapters
|
|
806
784
|
* (web DB-worker, mobile wrapper) can reach engine-only fields like `clientId`
|
|
807
785
|
* without an unchecked downcast. Exported on `@doync/client/internal` only.
|
|
808
786
|
*/
|
|
809
|
-
declare function createClientEngine<
|
|
787
|
+
declare function createClientEngine<TAuthContext extends AuthContext = AuthContext>(options: CreateClientEngineOptions<TAuthContext>): ClientEngine;
|
|
788
|
+
/**
|
|
789
|
+
* Validate and flatten `authData` for engine slots. When a schema is present
|
|
790
|
+
* and identity is non-null, `ctx` is validated synchronously (throws at the
|
|
791
|
+
* call site). Anonymous (`null`) yields `userId: null`, `ctx: null`, no token.
|
|
792
|
+
*/
|
|
793
|
+
declare function resolveClientAuthData<TAuthContext extends AuthContext>(authData: AuthData<TAuthContext> | null, ctxValidationSchema?: StandardSchemaV1<unknown, TAuthContext>): {
|
|
794
|
+
userId: string | null;
|
|
795
|
+
token: string | undefined;
|
|
796
|
+
ctx: AuthContext;
|
|
797
|
+
};
|
|
810
798
|
//#endregion
|
|
811
|
-
export {
|
|
812
|
-
//# sourceMappingURL=client-
|
|
799
|
+
export { replayMigrations as A, extractWriteTable as B, __LOGOUT_BEHAVIOR_PREF_KEY as C, applyBundledMigrations as D, settledRejection as E, SeamStatus as F, SyncSocket as I, SyncSocketHandlers as L, readPref as M, writeMeta as N, createEngineTables as O, writePref as P, LocalDb as R, __CONNECTED_CLOCK_META_KEY as S, normalizeQuerySurface as T, SchemaEvent as _, ClientEngine as a, View as b, DoyncClient as c, MutationOptions as d, MutationResult as f, QueryStatus as g, PreloadOptions as h, resolveClientAuthData as i, readMeta as j, dropConsumerTables as k, FalsyQuery as l, PreloadHandle as m, createClient as n, ClientEngineConfig as o, OnceView as p, createClientEngine as r, ConnectionStatus as s, CreateClientOptions as t, LogoutBehavior as u, SchemaEventKind as v, isFalsyQuery as w, ViewStatus as x, SubscribeOptions as y, LocalRow as z };
|
|
800
|
+
//# sourceMappingURL=client-OPt8Axyp.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-OPt8Axyp.d.cts","names":["Input","Output","StandardTypedV1","Props","version","vendor","types","Types","input","output","InferInput","Schema","NonNullable","InferOutput","StandardSchemaV1","validate","value","Options","options","Result","Promise","SuccessResult","FailureResult","issues","libraryOptions","Record","ReadonlyArray","Issue","message","path","PropertyKey","PathSegment","key","StandardJSONSchemaV1","jsonSchema","Converter","Target","target"],"sources":["../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../src/port.ts","../src/socket.ts","../src/replica/meta.ts","../src/replica/stamps.ts","../src/replica/index.ts","../src/engine.ts","../src/client.ts"],"x_google_ignoreList":[0],"mappings":"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"}
|