@rindle/daemon-client 0.2.0 → 0.4.2
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/index.d.ts +134 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +171 -0
package/dist/index.d.ts
CHANGED
|
@@ -94,10 +94,80 @@ export type RowChangeTxn = {
|
|
|
94
94
|
old: WireValue[];
|
|
95
95
|
row: WireValue[];
|
|
96
96
|
}>;
|
|
97
|
+
/** The room write-behind extensions (RINDLE-REALTIME §5.3, each opt-in by
|
|
98
|
+
* presence): the placement fence (`doc` + `epoch` — a stale epoch gets a
|
|
99
|
+
* `409 {error:"fenced"}`), the §8.3 batch identity (`batchHash` — same id +
|
|
100
|
+
* different body is a loud 500), and the CAS preconditions (`cas: true` — a miss
|
|
101
|
+
* gets a `409 {error:"conflict", conflicts}` with authoritative images, nothing
|
|
102
|
+
* applied). Plain change sources send none and are byte-compatible unchanged. */
|
|
103
|
+
doc?: string;
|
|
104
|
+
epoch?: number;
|
|
105
|
+
batchHash?: string;
|
|
106
|
+
cas?: boolean;
|
|
97
107
|
};
|
|
98
108
|
export interface RowChangeTxnOutput {
|
|
109
|
+
/** `false` = the `(source, offset)` keyset absorbed a replay. */
|
|
110
|
+
applied?: boolean;
|
|
99
111
|
cv?: number;
|
|
100
112
|
}
|
|
113
|
+
/** `/claim-room-epoch` (RINDLE-REALTIME §2.5): bump + return the placement epoch. */
|
|
114
|
+
export interface ClaimRoomEpochInput {
|
|
115
|
+
doc: string;
|
|
116
|
+
}
|
|
117
|
+
export interface ClaimRoomEpochOutput {
|
|
118
|
+
epoch: number;
|
|
119
|
+
}
|
|
120
|
+
/** `/room-lmids` (§3.3): the ledger's lmid per client — the room's boot probe. */
|
|
121
|
+
export interface RoomLmidsInput {
|
|
122
|
+
clients: string[];
|
|
123
|
+
}
|
|
124
|
+
export interface RoomLmidsOutput {
|
|
125
|
+
lmids: Record<string, number>;
|
|
126
|
+
}
|
|
127
|
+
/** `/mutate-session/begin` (DAEMON-INTERACTIVE-TXN-DESIGN.md §4.1): open an interactive write
|
|
128
|
+
* transaction on the master, held open across round trips under the daemon-owned deadline.
|
|
129
|
+
* Client-attributed sessions (`clientID` + `mid`) get mid dedup/gap resolution UP FRONT — an
|
|
130
|
+
* absorbed replay opens no session and the caller must skip the mutator. `statements` is the
|
|
131
|
+
* accumulated write prefix to replay into the fresh transaction (sound: nothing before the
|
|
132
|
+
* first read observed DB state); `query` rides the begin so a one-read mutator pays exactly
|
|
133
|
+
* one extra round trip over the batch path. */
|
|
134
|
+
export interface MutationSessionBegin {
|
|
135
|
+
clientID?: string;
|
|
136
|
+
mid?: number;
|
|
137
|
+
idempotencyKey?: string;
|
|
138
|
+
statements?: SqlStatement[];
|
|
139
|
+
query?: SqlStatement;
|
|
140
|
+
}
|
|
141
|
+
export interface MutationSessionBeginOutput {
|
|
142
|
+
/** Present iff a session opened. */
|
|
143
|
+
sessionId?: string;
|
|
144
|
+
/** The `query` read's result, when one rode the begin (`{cols, rows}`, bare cell arrays). */
|
|
145
|
+
read?: SqlReadOutput;
|
|
146
|
+
/** True when mid/idempotency dedup absorbed the envelope at begin: NO session opened, the
|
|
147
|
+
* mutator must not run — the remaining fields are the authoritative replay output, the same
|
|
148
|
+
* shape {@link RindleDaemonClient.executeSqlTxn} answers for a deduped mid. */
|
|
149
|
+
absorbed?: boolean;
|
|
150
|
+
applied?: boolean;
|
|
151
|
+
lmid?: number;
|
|
152
|
+
lmidAdvances?: Array<{
|
|
153
|
+
clientID: string;
|
|
154
|
+
lmid: number;
|
|
155
|
+
}>;
|
|
156
|
+
}
|
|
157
|
+
export interface MutationSessionExec {
|
|
158
|
+
sessionId: string;
|
|
159
|
+
statements: SqlStatement[];
|
|
160
|
+
}
|
|
161
|
+
/** A read through the open transaction (read-your-writes) — flat `{sessionId, sql, params}`,
|
|
162
|
+
* answered in the `/execute-sql-read` shape. */
|
|
163
|
+
export interface MutationSessionQuery {
|
|
164
|
+
sessionId: string;
|
|
165
|
+
sql: string;
|
|
166
|
+
params?: WireValue[];
|
|
167
|
+
}
|
|
168
|
+
export interface MutationSessionRef {
|
|
169
|
+
sessionId: string;
|
|
170
|
+
}
|
|
101
171
|
export interface MutationRejection {
|
|
102
172
|
clientID: string;
|
|
103
173
|
mid: number;
|
|
@@ -125,6 +195,29 @@ export interface MigrateOutput {
|
|
|
125
195
|
schemaVersion?: string;
|
|
126
196
|
restarting?: boolean;
|
|
127
197
|
}
|
|
198
|
+
/** One entry in a {@link MigrateBatchOutput}: the migration `id` and whether this apply ran it
|
|
199
|
+
* (false = the `id` was already journaled, an idempotent no-op). */
|
|
200
|
+
export interface MigrateResultItem {
|
|
201
|
+
id: string;
|
|
202
|
+
applied: boolean;
|
|
203
|
+
schemaVersion?: string;
|
|
204
|
+
}
|
|
205
|
+
/** The response to the ARRAY form of `/migrate` ({@link HttpRindleDaemonClient.migrateBatch}): a
|
|
206
|
+
* whole ordered set applied in one round-trip so a supervised daemon self-restarts ONCE for the
|
|
207
|
+
* set instead of once per migration. `results` are the migrations processed before any failure, in
|
|
208
|
+
* order; `applied` counts the newly-applied ones; `schemaVersion` is the latest applied id;
|
|
209
|
+
* `restarting` is true when the daemon is self-restarting to re-introspect (wait for it before the
|
|
210
|
+
* next call). On a failed migration `error`/`failedId` name it — the batch stops there, earlier
|
|
211
|
+
* migrations are committed (forward-only), and the daemon does NOT restart: fix forward and
|
|
212
|
+
* re-send. Unlike the single-migration form, this always arrives as HTTP 200; inspect `error`. */
|
|
213
|
+
export interface MigrateBatchOutput {
|
|
214
|
+
results: MigrateResultItem[];
|
|
215
|
+
applied: number;
|
|
216
|
+
schemaVersion?: string;
|
|
217
|
+
restarting?: boolean;
|
|
218
|
+
error?: string;
|
|
219
|
+
failedId?: string;
|
|
220
|
+
}
|
|
128
221
|
/** The SSR one-shot read (`SSR-DESIGN.md` §3). Materialize-or-reuse the query, read its current
|
|
129
222
|
* view ONCE, return it assembled; registers no subscriber. `visibilityKey`/`ttlMs` are optional. */
|
|
130
223
|
export interface QueryOnceInput {
|
|
@@ -156,6 +249,10 @@ export interface SchemaColumn {
|
|
|
156
249
|
* `"boolean"`/`"json"` intent is not recoverable from the file (`DRIZZLE-MIGRATIONS-DESIGN.md`
|
|
157
250
|
* §6.2). The full vocabulary is `"string" | "number" | "boolean" | "json"`. */
|
|
158
251
|
type: string;
|
|
252
|
+
/** `true` when the column is nullable (introspected `pragma_table_info.notnull == 0`); the
|
|
253
|
+
* generated column becomes `.nullable()`, typing it `T | null`. PK columns are always `false`
|
|
254
|
+
* (row identity). Absent on older daemons ⇒ treat as non-nullable. See design 206. */
|
|
255
|
+
nullable?: boolean;
|
|
159
256
|
}
|
|
160
257
|
/** One base table in the daemon's introspected schema: its name, ordered columns, and PK columns. */
|
|
161
258
|
export interface SchemaTable {
|
|
@@ -187,6 +284,24 @@ export interface RindleDaemonClient {
|
|
|
187
284
|
* the daemon is bounced (migrate-at-bounce, §5.2) — this applies DDL to the file but does not
|
|
188
285
|
* re-introspect the running engine. Drive it from a migration runner, not the request path. */
|
|
189
286
|
migrate(input: MigrateInput): Promise<MigrateOutput>;
|
|
287
|
+
/** Open an interactive mutation session (DAEMON-INTERACTIVE-TXN-DESIGN.md §4) — the write
|
|
288
|
+
* transaction a read-bearing mutator lazily upgrades onto. Optional as a group with the four
|
|
289
|
+
* ops below: only the daemon's control plane serves sessions (master-only — a follower's
|
|
290
|
+
* write-fence rejects begin); a client that lacks them forces the legacy committed-state
|
|
291
|
+
* read path. Session ops against a finished/expired session reject with a
|
|
292
|
+
* {@link DaemonHttpError} whose `status` is 410 — treat it as infra (retry the envelope;
|
|
293
|
+
* begin-time dedup absorbs a committed outcome). */
|
|
294
|
+
beginMutationSession?(input: MutationSessionBegin): Promise<MutationSessionBeginOutput>;
|
|
295
|
+
execInMutationSession?(input: MutationSessionExec): Promise<unknown>;
|
|
296
|
+
queryInMutationSession?(input: MutationSessionQuery): Promise<SqlReadOutput>;
|
|
297
|
+
commitMutationSession?(input: MutationSessionRef): Promise<SqlTxnOutput>;
|
|
298
|
+
rollbackMutationSession?(input: MutationSessionRef): Promise<unknown>;
|
|
299
|
+
/** Claim the next placement epoch for a room's doc (RINDLE-REALTIME §2.5). Optional:
|
|
300
|
+
* only daemons serving as a room write authority implement it; the API server's
|
|
301
|
+
* room host refuses loudly when its configured client lacks it. */
|
|
302
|
+
claimRoomEpoch?(input: ClaimRoomEpochInput): Promise<ClaimRoomEpochOutput>;
|
|
303
|
+
/** The room's boot probe (§3.3). Optional, same contract as {@link claimRoomEpoch}. */
|
|
304
|
+
roomLmids?(input: RoomLmidsInput): Promise<RoomLmidsOutput>;
|
|
190
305
|
}
|
|
191
306
|
export interface HttpRindleDaemonClientPaths {
|
|
192
307
|
materialize: string;
|
|
@@ -198,6 +313,13 @@ export interface HttpRindleDaemonClientPaths {
|
|
|
198
313
|
query: string;
|
|
199
314
|
migrate: string;
|
|
200
315
|
schema: string;
|
|
316
|
+
claimRoomEpoch: string;
|
|
317
|
+
roomLmids: string;
|
|
318
|
+
mutateSessionBegin: string;
|
|
319
|
+
mutateSessionExec: string;
|
|
320
|
+
mutateSessionQuery: string;
|
|
321
|
+
mutateSessionCommit: string;
|
|
322
|
+
mutateSessionRollback: string;
|
|
201
323
|
}
|
|
202
324
|
export type HeaderValue = string | undefined;
|
|
203
325
|
export type HeadersInput = Record<string, HeaderValue>;
|
|
@@ -249,9 +371,21 @@ export declare class HttpRindleDaemonClient implements RindleDaemonClient {
|
|
|
249
371
|
executeSqlTxn(input: SqlTxn): Promise<SqlTxnOutput>;
|
|
250
372
|
executeSqlRead(input: SqlRead): Promise<SqlReadOutput>;
|
|
251
373
|
applyRowChangeTxn(input: RowChangeTxn): Promise<RowChangeTxnOutput>;
|
|
374
|
+
claimRoomEpoch(input: ClaimRoomEpochInput): Promise<ClaimRoomEpochOutput>;
|
|
375
|
+
roomLmids(input: RoomLmidsInput): Promise<RoomLmidsOutput>;
|
|
252
376
|
rejectMutation(input: MutationRejection): Promise<MutationRejectionOutput>;
|
|
377
|
+
beginMutationSession(input: MutationSessionBegin): Promise<MutationSessionBeginOutput>;
|
|
378
|
+
execInMutationSession(input: MutationSessionExec): Promise<unknown>;
|
|
379
|
+
queryInMutationSession(input: MutationSessionQuery): Promise<SqlReadOutput>;
|
|
380
|
+
commitMutationSession(input: MutationSessionRef): Promise<SqlTxnOutput>;
|
|
381
|
+
rollbackMutationSession(input: MutationSessionRef): Promise<unknown>;
|
|
253
382
|
query(input: QueryOnceInput): Promise<QueryOnceOutput>;
|
|
254
383
|
migrate(input: MigrateInput): Promise<MigrateOutput>;
|
|
384
|
+
/** Apply an ordered SET of migrations in one round-trip — the array form of {@link migrate}. The
|
|
385
|
+
* daemon applies them in order (stopping at the first failure) and, when supervised, self-restarts
|
|
386
|
+
* ONCE for the whole set. Drive it from a migration runner (`rindle migrate apply` does). See
|
|
387
|
+
* {@link MigrateBatchOutput} — inspect its `error` field rather than relying on the HTTP status. */
|
|
388
|
+
migrateBatch(inputs: MigrateInput[]): Promise<MigrateBatchOutput>;
|
|
255
389
|
/** The daemon's introspected base-table schema for client-schema codegen
|
|
256
390
|
* (`DRIZZLE-MIGRATIONS-DESIGN.md` §6.2). Read-only `GET /schema`, bearer-auth'd when the daemon
|
|
257
391
|
* has a token configured. Deliberately NOT on {@link RindleDaemonClient}: schema codegen is a
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAEzD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,CAAC;AAE/C,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;gEAG4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED;;;;;;;;;sFASsF;AACtF,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;qGAEqG;AACrG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CACV;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,SAAS,EAAE,CAAA;KAAE,GAC9C;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,SAAS,EAAE,CAAA;KAAE,GACjD;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,SAAS,EAAE,CAAC;QAAC,GAAG,EAAE,SAAS,EAAE,CAAA;KAAE,CACpE,CAAC;IACF;;;;;sFAKkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;;;;;gDAMgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;oFAEgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED;iDACiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;+EAG+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;sGAIsG;AACtG,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;qEACqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;mGAOmG;AACnG,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;qGACqG;AACrG,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;gGACgG;AAChG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACzE;;oGAEgG;IAChG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb;;;oFAGgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb;;2FAEuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qGAAqG;AACrG,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;qDAEqD;AACrD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjE,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD;;;qEAGiE;IACjE,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC3E,2FAA2F;IAC3F,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD;;;oGAGgG;IAChG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD;;;;;;yDAMqD;IACrD,oBAAoB,CAAC,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACxF,qBAAqB,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,sBAAsB,CAAC,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7E,qBAAqB,CAAC,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACzE,uBAAuB,CAAC,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;;wEAEoE;IACpE,cAAc,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3E,uFAAuF;IACvF,SAAS,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,MAAM,cAAc,GAAG,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB;0FACsF;IACtF,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAChD;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7C;;;;4GAIwG;IACxG,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAqBD,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAO7D;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAgC;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAA2B;IACrD,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,IAAI,EAAE,6BAA6B;IAQ/C,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIhE,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAItE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAInD,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAOtD,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIzE,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAI1D,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI1E,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAItF,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAInE,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAI3E,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvE,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpE,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAItD,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD;;;yGAGqG;IACrG,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIjE;;;sGAGkG;IAClG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;YAIjB,IAAI;IAalB;;qBAEiB;YACH,GAAG;IAajB;;sEAEkE;IAClE,OAAO,CAAC,aAAa;YAWP,cAAc;CAQ7B"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,13 @@ const defaultPaths = {
|
|
|
8
8
|
query: "/query",
|
|
9
9
|
migrate: "/migrate",
|
|
10
10
|
schema: "/schema",
|
|
11
|
+
claimRoomEpoch: "/claim-room-epoch",
|
|
12
|
+
roomLmids: "/room-lmids",
|
|
13
|
+
mutateSessionBegin: "/mutate-session/begin",
|
|
14
|
+
mutateSessionExec: "/mutate-session/exec",
|
|
15
|
+
mutateSessionQuery: "/mutate-session/query",
|
|
16
|
+
mutateSessionCommit: "/mutate-session/commit",
|
|
17
|
+
mutateSessionRollback: "/mutate-session/rollback",
|
|
11
18
|
};
|
|
12
19
|
export class DaemonHttpError extends Error {
|
|
13
20
|
status;
|
|
@@ -53,15 +60,43 @@ export class HttpRindleDaemonClient {
|
|
|
53
60
|
applyRowChangeTxn(input) {
|
|
54
61
|
return this.post(this.paths.applyRowChangeTxn, input);
|
|
55
62
|
}
|
|
63
|
+
claimRoomEpoch(input) {
|
|
64
|
+
return this.post(this.paths.claimRoomEpoch, input);
|
|
65
|
+
}
|
|
66
|
+
roomLmids(input) {
|
|
67
|
+
return this.post(this.paths.roomLmids, input);
|
|
68
|
+
}
|
|
56
69
|
rejectMutation(input) {
|
|
57
70
|
return this.post(this.paths.rejectMutation, input);
|
|
58
71
|
}
|
|
72
|
+
beginMutationSession(input) {
|
|
73
|
+
return this.post(this.paths.mutateSessionBegin, input);
|
|
74
|
+
}
|
|
75
|
+
execInMutationSession(input) {
|
|
76
|
+
return this.post(this.paths.mutateSessionExec, input);
|
|
77
|
+
}
|
|
78
|
+
queryInMutationSession(input) {
|
|
79
|
+
return this.post(this.paths.mutateSessionQuery, input);
|
|
80
|
+
}
|
|
81
|
+
commitMutationSession(input) {
|
|
82
|
+
return this.post(this.paths.mutateSessionCommit, input);
|
|
83
|
+
}
|
|
84
|
+
rollbackMutationSession(input) {
|
|
85
|
+
return this.post(this.paths.mutateSessionRollback, input);
|
|
86
|
+
}
|
|
59
87
|
query(input) {
|
|
60
88
|
return this.post(this.paths.query, input);
|
|
61
89
|
}
|
|
62
90
|
migrate(input) {
|
|
63
91
|
return this.post(this.paths.migrate, input);
|
|
64
92
|
}
|
|
93
|
+
/** Apply an ordered SET of migrations in one round-trip — the array form of {@link migrate}. The
|
|
94
|
+
* daemon applies them in order (stopping at the first failure) and, when supervised, self-restarts
|
|
95
|
+
* ONCE for the whole set. Drive it from a migration runner (`rindle migrate apply` does). See
|
|
96
|
+
* {@link MigrateBatchOutput} — inspect its `error` field rather than relying on the HTTP status. */
|
|
97
|
+
migrateBatch(inputs) {
|
|
98
|
+
return this.post(this.paths.migrate, inputs);
|
|
99
|
+
}
|
|
65
100
|
/** The daemon's introspected base-table schema for client-schema codegen
|
|
66
101
|
* (`DRIZZLE-MIGRATIONS-DESIGN.md` §6.2). Read-only `GET /schema`, bearer-auth'd when the daemon
|
|
67
102
|
* has a token configured. Deliberately NOT on {@link RindleDaemonClient}: schema codegen is a
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -90,12 +90,86 @@ export type RowChangeTxn = {
|
|
|
90
90
|
| { table: string; op: "remove"; old: WireValue[] }
|
|
91
91
|
| { table: string; op: "edit"; old: WireValue[]; row: WireValue[] }
|
|
92
92
|
>;
|
|
93
|
+
/** The room write-behind extensions (RINDLE-REALTIME §5.3, each opt-in by
|
|
94
|
+
* presence): the placement fence (`doc` + `epoch` — a stale epoch gets a
|
|
95
|
+
* `409 {error:"fenced"}`), the §8.3 batch identity (`batchHash` — same id +
|
|
96
|
+
* different body is a loud 500), and the CAS preconditions (`cas: true` — a miss
|
|
97
|
+
* gets a `409 {error:"conflict", conflicts}` with authoritative images, nothing
|
|
98
|
+
* applied). Plain change sources send none and are byte-compatible unchanged. */
|
|
99
|
+
doc?: string;
|
|
100
|
+
epoch?: number;
|
|
101
|
+
batchHash?: string;
|
|
102
|
+
cas?: boolean;
|
|
93
103
|
};
|
|
94
104
|
|
|
95
105
|
export interface RowChangeTxnOutput {
|
|
106
|
+
/** `false` = the `(source, offset)` keyset absorbed a replay. */
|
|
107
|
+
applied?: boolean;
|
|
96
108
|
cv?: number;
|
|
97
109
|
}
|
|
98
110
|
|
|
111
|
+
/** `/claim-room-epoch` (RINDLE-REALTIME §2.5): bump + return the placement epoch. */
|
|
112
|
+
export interface ClaimRoomEpochInput {
|
|
113
|
+
doc: string;
|
|
114
|
+
}
|
|
115
|
+
export interface ClaimRoomEpochOutput {
|
|
116
|
+
epoch: number;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** `/room-lmids` (§3.3): the ledger's lmid per client — the room's boot probe. */
|
|
120
|
+
export interface RoomLmidsInput {
|
|
121
|
+
clients: string[];
|
|
122
|
+
}
|
|
123
|
+
export interface RoomLmidsOutput {
|
|
124
|
+
lmids: Record<string, number>;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** `/mutate-session/begin` (DAEMON-INTERACTIVE-TXN-DESIGN.md §4.1): open an interactive write
|
|
128
|
+
* transaction on the master, held open across round trips under the daemon-owned deadline.
|
|
129
|
+
* Client-attributed sessions (`clientID` + `mid`) get mid dedup/gap resolution UP FRONT — an
|
|
130
|
+
* absorbed replay opens no session and the caller must skip the mutator. `statements` is the
|
|
131
|
+
* accumulated write prefix to replay into the fresh transaction (sound: nothing before the
|
|
132
|
+
* first read observed DB state); `query` rides the begin so a one-read mutator pays exactly
|
|
133
|
+
* one extra round trip over the batch path. */
|
|
134
|
+
export interface MutationSessionBegin {
|
|
135
|
+
clientID?: string;
|
|
136
|
+
mid?: number;
|
|
137
|
+
idempotencyKey?: string;
|
|
138
|
+
statements?: SqlStatement[];
|
|
139
|
+
query?: SqlStatement;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface MutationSessionBeginOutput {
|
|
143
|
+
/** Present iff a session opened. */
|
|
144
|
+
sessionId?: string;
|
|
145
|
+
/** The `query` read's result, when one rode the begin (`{cols, rows}`, bare cell arrays). */
|
|
146
|
+
read?: SqlReadOutput;
|
|
147
|
+
/** True when mid/idempotency dedup absorbed the envelope at begin: NO session opened, the
|
|
148
|
+
* mutator must not run — the remaining fields are the authoritative replay output, the same
|
|
149
|
+
* shape {@link RindleDaemonClient.executeSqlTxn} answers for a deduped mid. */
|
|
150
|
+
absorbed?: boolean;
|
|
151
|
+
applied?: boolean;
|
|
152
|
+
lmid?: number;
|
|
153
|
+
lmidAdvances?: Array<{ clientID: string; lmid: number }>;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export interface MutationSessionExec {
|
|
157
|
+
sessionId: string;
|
|
158
|
+
statements: SqlStatement[];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** A read through the open transaction (read-your-writes) — flat `{sessionId, sql, params}`,
|
|
162
|
+
* answered in the `/execute-sql-read` shape. */
|
|
163
|
+
export interface MutationSessionQuery {
|
|
164
|
+
sessionId: string;
|
|
165
|
+
sql: string;
|
|
166
|
+
params?: WireValue[];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export interface MutationSessionRef {
|
|
170
|
+
sessionId: string;
|
|
171
|
+
}
|
|
172
|
+
|
|
99
173
|
export interface MutationRejection {
|
|
100
174
|
clientID: string;
|
|
101
175
|
mid: number;
|
|
@@ -127,6 +201,31 @@ export interface MigrateOutput {
|
|
|
127
201
|
restarting?: boolean;
|
|
128
202
|
}
|
|
129
203
|
|
|
204
|
+
/** One entry in a {@link MigrateBatchOutput}: the migration `id` and whether this apply ran it
|
|
205
|
+
* (false = the `id` was already journaled, an idempotent no-op). */
|
|
206
|
+
export interface MigrateResultItem {
|
|
207
|
+
id: string;
|
|
208
|
+
applied: boolean;
|
|
209
|
+
schemaVersion?: string;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** The response to the ARRAY form of `/migrate` ({@link HttpRindleDaemonClient.migrateBatch}): a
|
|
213
|
+
* whole ordered set applied in one round-trip so a supervised daemon self-restarts ONCE for the
|
|
214
|
+
* set instead of once per migration. `results` are the migrations processed before any failure, in
|
|
215
|
+
* order; `applied` counts the newly-applied ones; `schemaVersion` is the latest applied id;
|
|
216
|
+
* `restarting` is true when the daemon is self-restarting to re-introspect (wait for it before the
|
|
217
|
+
* next call). On a failed migration `error`/`failedId` name it — the batch stops there, earlier
|
|
218
|
+
* migrations are committed (forward-only), and the daemon does NOT restart: fix forward and
|
|
219
|
+
* re-send. Unlike the single-migration form, this always arrives as HTTP 200; inspect `error`. */
|
|
220
|
+
export interface MigrateBatchOutput {
|
|
221
|
+
results: MigrateResultItem[];
|
|
222
|
+
applied: number;
|
|
223
|
+
schemaVersion?: string;
|
|
224
|
+
restarting?: boolean;
|
|
225
|
+
error?: string;
|
|
226
|
+
failedId?: string;
|
|
227
|
+
}
|
|
228
|
+
|
|
130
229
|
/** The SSR one-shot read (`SSR-DESIGN.md` §3). Materialize-or-reuse the query, read its current
|
|
131
230
|
* view ONCE, return it assembled; registers no subscriber. `visibilityKey`/`ttlMs` are optional. */
|
|
132
231
|
export interface QueryOnceInput {
|
|
@@ -157,6 +256,10 @@ export interface SchemaColumn {
|
|
|
157
256
|
* `"boolean"`/`"json"` intent is not recoverable from the file (`DRIZZLE-MIGRATIONS-DESIGN.md`
|
|
158
257
|
* §6.2). The full vocabulary is `"string" | "number" | "boolean" | "json"`. */
|
|
159
258
|
type: string;
|
|
259
|
+
/** `true` when the column is nullable (introspected `pragma_table_info.notnull == 0`); the
|
|
260
|
+
* generated column becomes `.nullable()`, typing it `T | null`. PK columns are always `false`
|
|
261
|
+
* (row identity). Absent on older daemons ⇒ treat as non-nullable. See design 206. */
|
|
262
|
+
nullable?: boolean;
|
|
160
263
|
}
|
|
161
264
|
|
|
162
265
|
/** One base table in the daemon's introspected schema: its name, ordered columns, and PK columns. */
|
|
@@ -191,6 +294,24 @@ export interface RindleDaemonClient {
|
|
|
191
294
|
* the daemon is bounced (migrate-at-bounce, §5.2) — this applies DDL to the file but does not
|
|
192
295
|
* re-introspect the running engine. Drive it from a migration runner, not the request path. */
|
|
193
296
|
migrate(input: MigrateInput): Promise<MigrateOutput>;
|
|
297
|
+
/** Open an interactive mutation session (DAEMON-INTERACTIVE-TXN-DESIGN.md §4) — the write
|
|
298
|
+
* transaction a read-bearing mutator lazily upgrades onto. Optional as a group with the four
|
|
299
|
+
* ops below: only the daemon's control plane serves sessions (master-only — a follower's
|
|
300
|
+
* write-fence rejects begin); a client that lacks them forces the legacy committed-state
|
|
301
|
+
* read path. Session ops against a finished/expired session reject with a
|
|
302
|
+
* {@link DaemonHttpError} whose `status` is 410 — treat it as infra (retry the envelope;
|
|
303
|
+
* begin-time dedup absorbs a committed outcome). */
|
|
304
|
+
beginMutationSession?(input: MutationSessionBegin): Promise<MutationSessionBeginOutput>;
|
|
305
|
+
execInMutationSession?(input: MutationSessionExec): Promise<unknown>;
|
|
306
|
+
queryInMutationSession?(input: MutationSessionQuery): Promise<SqlReadOutput>;
|
|
307
|
+
commitMutationSession?(input: MutationSessionRef): Promise<SqlTxnOutput>;
|
|
308
|
+
rollbackMutationSession?(input: MutationSessionRef): Promise<unknown>;
|
|
309
|
+
/** Claim the next placement epoch for a room's doc (RINDLE-REALTIME §2.5). Optional:
|
|
310
|
+
* only daemons serving as a room write authority implement it; the API server's
|
|
311
|
+
* room host refuses loudly when its configured client lacks it. */
|
|
312
|
+
claimRoomEpoch?(input: ClaimRoomEpochInput): Promise<ClaimRoomEpochOutput>;
|
|
313
|
+
/** The room's boot probe (§3.3). Optional, same contract as {@link claimRoomEpoch}. */
|
|
314
|
+
roomLmids?(input: RoomLmidsInput): Promise<RoomLmidsOutput>;
|
|
194
315
|
}
|
|
195
316
|
|
|
196
317
|
export interface HttpRindleDaemonClientPaths {
|
|
@@ -203,6 +324,13 @@ export interface HttpRindleDaemonClientPaths {
|
|
|
203
324
|
query: string;
|
|
204
325
|
migrate: string;
|
|
205
326
|
schema: string;
|
|
327
|
+
claimRoomEpoch: string;
|
|
328
|
+
roomLmids: string;
|
|
329
|
+
mutateSessionBegin: string;
|
|
330
|
+
mutateSessionExec: string;
|
|
331
|
+
mutateSessionQuery: string;
|
|
332
|
+
mutateSessionCommit: string;
|
|
333
|
+
mutateSessionRollback: string;
|
|
206
334
|
}
|
|
207
335
|
|
|
208
336
|
export type HeaderValue = string | undefined;
|
|
@@ -247,6 +375,13 @@ const defaultPaths: HttpRindleDaemonClientPaths = {
|
|
|
247
375
|
query: "/query",
|
|
248
376
|
migrate: "/migrate",
|
|
249
377
|
schema: "/schema",
|
|
378
|
+
claimRoomEpoch: "/claim-room-epoch",
|
|
379
|
+
roomLmids: "/room-lmids",
|
|
380
|
+
mutateSessionBegin: "/mutate-session/begin",
|
|
381
|
+
mutateSessionExec: "/mutate-session/exec",
|
|
382
|
+
mutateSessionQuery: "/mutate-session/query",
|
|
383
|
+
mutateSessionCommit: "/mutate-session/commit",
|
|
384
|
+
mutateSessionRollback: "/mutate-session/rollback",
|
|
250
385
|
};
|
|
251
386
|
|
|
252
387
|
export class DaemonHttpError extends Error {
|
|
@@ -302,10 +437,38 @@ export class HttpRindleDaemonClient implements RindleDaemonClient {
|
|
|
302
437
|
return this.post(this.paths.applyRowChangeTxn, input);
|
|
303
438
|
}
|
|
304
439
|
|
|
440
|
+
claimRoomEpoch(input: ClaimRoomEpochInput): Promise<ClaimRoomEpochOutput> {
|
|
441
|
+
return this.post(this.paths.claimRoomEpoch, input);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
roomLmids(input: RoomLmidsInput): Promise<RoomLmidsOutput> {
|
|
445
|
+
return this.post(this.paths.roomLmids, input);
|
|
446
|
+
}
|
|
447
|
+
|
|
305
448
|
rejectMutation(input: MutationRejection): Promise<MutationRejectionOutput> {
|
|
306
449
|
return this.post(this.paths.rejectMutation, input);
|
|
307
450
|
}
|
|
308
451
|
|
|
452
|
+
beginMutationSession(input: MutationSessionBegin): Promise<MutationSessionBeginOutput> {
|
|
453
|
+
return this.post(this.paths.mutateSessionBegin, input);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
execInMutationSession(input: MutationSessionExec): Promise<unknown> {
|
|
457
|
+
return this.post(this.paths.mutateSessionExec, input);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
queryInMutationSession(input: MutationSessionQuery): Promise<SqlReadOutput> {
|
|
461
|
+
return this.post(this.paths.mutateSessionQuery, input);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
commitMutationSession(input: MutationSessionRef): Promise<SqlTxnOutput> {
|
|
465
|
+
return this.post(this.paths.mutateSessionCommit, input);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
rollbackMutationSession(input: MutationSessionRef): Promise<unknown> {
|
|
469
|
+
return this.post(this.paths.mutateSessionRollback, input);
|
|
470
|
+
}
|
|
471
|
+
|
|
309
472
|
query(input: QueryOnceInput): Promise<QueryOnceOutput> {
|
|
310
473
|
return this.post(this.paths.query, input);
|
|
311
474
|
}
|
|
@@ -314,6 +477,14 @@ export class HttpRindleDaemonClient implements RindleDaemonClient {
|
|
|
314
477
|
return this.post(this.paths.migrate, input);
|
|
315
478
|
}
|
|
316
479
|
|
|
480
|
+
/** Apply an ordered SET of migrations in one round-trip — the array form of {@link migrate}. The
|
|
481
|
+
* daemon applies them in order (stopping at the first failure) and, when supervised, self-restarts
|
|
482
|
+
* ONCE for the whole set. Drive it from a migration runner (`rindle migrate apply` does). See
|
|
483
|
+
* {@link MigrateBatchOutput} — inspect its `error` field rather than relying on the HTTP status. */
|
|
484
|
+
migrateBatch(inputs: MigrateInput[]): Promise<MigrateBatchOutput> {
|
|
485
|
+
return this.post(this.paths.migrate, inputs);
|
|
486
|
+
}
|
|
487
|
+
|
|
317
488
|
/** The daemon's introspected base-table schema for client-schema codegen
|
|
318
489
|
* (`DRIZZLE-MIGRATIONS-DESIGN.md` §6.2). Read-only `GET /schema`, bearer-auth'd when the daemon
|
|
319
490
|
* has a token configured. Deliberately NOT on {@link RindleDaemonClient}: schema codegen is a
|