@rindle/api-server 0.7.12 → 0.8.0
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 +54 -0
- package/dist/index.d.ts +71 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +130 -2
- package/dist/index.js.map +1 -1
- package/dist/streams.d.ts +373 -0
- package/dist/streams.d.ts.map +1 -0
- package/dist/streams.js +1047 -0
- package/dist/streams.js.map +1 -0
- package/package.json +8 -6
- package/src/index.ts +248 -11
- package/src/streams.ts +1341 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streams.js","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rindle/api-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,22 +25,24 @@
|
|
|
25
25
|
"README.md"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@rindle/client": "0.
|
|
29
|
-
"@rindle/
|
|
30
|
-
"@rindle/
|
|
31
|
-
"@rindle/sql-client": "0.
|
|
28
|
+
"@rindle/client": "0.8.0",
|
|
29
|
+
"@rindle/query-compiler": "0.8.0",
|
|
30
|
+
"@rindle/daemon-client": "0.8.0",
|
|
31
|
+
"@rindle/sql-client": "0.8.0"
|
|
32
32
|
},
|
|
33
33
|
"optionalDependencies": {
|
|
34
|
-
"@rindle/room": "0.
|
|
34
|
+
"@rindle/room": "0.8.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "^22.10.0",
|
|
38
|
+
"fast-check": "^4.9.0",
|
|
38
39
|
"typescript": "^5.7.0"
|
|
39
40
|
},
|
|
40
41
|
"scripts": {
|
|
41
42
|
"build": "tsc -p tsconfig.build.json",
|
|
42
43
|
"typecheck": "tsc --noEmit",
|
|
43
44
|
"test": "tsc --noEmit && node --conditions=@rindle/source --test test/*.test.ts",
|
|
45
|
+
"test:pbt": "node --conditions=@rindle/source --test test/streams.property.test.ts",
|
|
44
46
|
"test:rust-daemon": "node --conditions=@rindle/source test/session.e2e.mjs"
|
|
45
47
|
}
|
|
46
48
|
}
|
package/src/index.ts
CHANGED
|
@@ -74,6 +74,22 @@ import {
|
|
|
74
74
|
splitRoomDoc,
|
|
75
75
|
} from "./rooms.ts";
|
|
76
76
|
import type { RoomProfile, RoomScopeSpec, RoomTableSpec } from "./rooms.ts";
|
|
77
|
+
import {
|
|
78
|
+
STREAM_SSE_HEADERS,
|
|
79
|
+
StreamForbidden,
|
|
80
|
+
StreamPlane,
|
|
81
|
+
resolveStreamColumns,
|
|
82
|
+
streamFramesToSse,
|
|
83
|
+
streamRequestFromHttp,
|
|
84
|
+
} from "./streams.ts";
|
|
85
|
+
import type {
|
|
86
|
+
OpenStreamInput,
|
|
87
|
+
RindleStreamOptions,
|
|
88
|
+
StreamHandle,
|
|
89
|
+
StreamSubscription,
|
|
90
|
+
StreamTables,
|
|
91
|
+
SubscribeStreamInput,
|
|
92
|
+
} from "./streams.ts";
|
|
77
93
|
// The room lease token (RINDLE-REALTIME §10.1): minted here, verified by the room SHELL against
|
|
78
94
|
// its `downstream.tokenKeys` ring — the `/token` subpath is pure WebCrypto (no wasm, no shell).
|
|
79
95
|
// Loaded LAZILY at the first mint: `@rindle/room` is an OPTIONAL dependency (see package.json), so
|
|
@@ -107,6 +123,40 @@ export { queryRealtimeLabel, queryResultToAst } from "./rooms.ts";
|
|
|
107
123
|
export type { RoomProfile, RoomScopeSpec, RoomTableSpec } from "./rooms.ts";
|
|
108
124
|
export type { RealtimeQueryLabel } from "@rindle/client";
|
|
109
125
|
|
|
126
|
+
// The LM stream plane (designs/LM-STREAM-CHECKPOINT-DESIGN.md): a model response runs on two planes
|
|
127
|
+
// — every delta straight to subscribers, one chunk row per coarse checkpoint to the app's tables —
|
|
128
|
+
// joined by one monotone `seq`. The plane itself (`StreamPlane`) stays internal; the api-server owns
|
|
129
|
+
// it and feeds it the backend's outside-transaction SQL surface (checkpoints are SYSTEM writes: no
|
|
130
|
+
// clientID, no mid, no lmid).
|
|
131
|
+
export {
|
|
132
|
+
STREAM_SSE_HEADERS,
|
|
133
|
+
STREAM_STATUS_STREAMING,
|
|
134
|
+
StreamOpenRefused,
|
|
135
|
+
assembleDurableText,
|
|
136
|
+
frameResumePoint,
|
|
137
|
+
spliceStreamText,
|
|
138
|
+
streamChunkId,
|
|
139
|
+
streamChunkTableDdl,
|
|
140
|
+
streamFramesToSse,
|
|
141
|
+
streamRequestFromHttp,
|
|
142
|
+
} from "./streams.ts";
|
|
143
|
+
export type {
|
|
144
|
+
AuthorizeStreamInput,
|
|
145
|
+
OpenStreamInput,
|
|
146
|
+
RindleStreamOptions,
|
|
147
|
+
StreamCheckpointPolicy,
|
|
148
|
+
StreamCheckpointTarget,
|
|
149
|
+
StreamColumns,
|
|
150
|
+
StreamCommit,
|
|
151
|
+
StreamCommitInput,
|
|
152
|
+
StreamFrame,
|
|
153
|
+
StreamHandle,
|
|
154
|
+
StreamStatus,
|
|
155
|
+
StreamSubscription,
|
|
156
|
+
StreamTables,
|
|
157
|
+
SubscribeStreamInput,
|
|
158
|
+
} from "./streams.ts";
|
|
159
|
+
|
|
110
160
|
export const DEFAULT_RINDLE_API_ROUTES = {
|
|
111
161
|
query: "/api/rindle/query",
|
|
112
162
|
read: "/api/rindle/read",
|
|
@@ -118,6 +168,9 @@ export const DEFAULT_RINDLE_API_ROUTES = {
|
|
|
118
168
|
roomLmids: "/api/rindle/room-lmids",
|
|
119
169
|
// The DO shell's cold-boot callback (§10.1) — active only when `realtime` is configured.
|
|
120
170
|
roomBoot: "/api/rindle/room-boot",
|
|
171
|
+
// The LM stream subscribe leg (LM-STREAM-CHECKPOINT §4) — active only when `streams` is
|
|
172
|
+
// configured. GET + `EventSource` is the intended shape (`Last-Event-ID` IS the resume offset).
|
|
173
|
+
stream: "/api/rindle/stream",
|
|
121
174
|
} as const;
|
|
122
175
|
|
|
123
176
|
export type MaybePromise<T> = T | PromiseLike<T>;
|
|
@@ -170,7 +223,12 @@ export interface MutationContext<User> {
|
|
|
170
223
|
export interface ServerSql {
|
|
171
224
|
/** Queue/execute one statement. A transaction-bound call commits with the surrounding mutation. */
|
|
172
225
|
execute(sql: string, params?: readonly WireValue[]): Promise<void>;
|
|
173
|
-
/** Queue/execute an ordered statement batch. An empty batch is a no-op.
|
|
226
|
+
/** Queue/execute an ordered statement batch. An empty batch is a no-op. On an
|
|
227
|
+
* outside-transaction surface ({@link MutationScope.sql}, `backend.outsideSql`) the batch MUST
|
|
228
|
+
* execute as ONE atomic transaction — all statements or none. Every built-in backend does (the
|
|
229
|
+
* daemon's `execute-sql-txn`, the sql-client's `/v1/sql/batch`, the Postgres plugger's
|
|
230
|
+
* BEGIN/COMMIT); a custom backend that loops statements without a transaction silently breaks
|
|
231
|
+
* the stream plane's chunk+CAS and compaction invariants, which ride single `batch` calls. */
|
|
174
232
|
batch(statements: readonly SqlStatement[]): Promise<void>;
|
|
175
233
|
/** Run a read and return rows keyed by their column names. */
|
|
176
234
|
query<Row = Record<string, unknown>>(sql: string, params?: readonly WireValue[]): Promise<Row[]>;
|
|
@@ -261,8 +319,27 @@ export interface MutationScope {
|
|
|
261
319
|
*
|
|
262
320
|
* A THROW from the body that is not a {@link BackendError} is a BUSINESS rejection: the data rolls
|
|
263
321
|
* back, `lmid` advances alone, and this method throws {@link MutationRejected} (so surrounding
|
|
264
|
-
* code can compensate). A {@link BackendError} is INFRA: it propagates (the client retries).
|
|
265
|
-
|
|
322
|
+
* code can compensate). A {@link BackendError} is INFRA: it propagates (the client retries).
|
|
323
|
+
*
|
|
324
|
+
* **The callback form RETURNS ITS BODY'S VALUE**, and only on the committed path — a rejection
|
|
325
|
+
* throws, so there is never a value to act on for a transaction that rolled back. That is what
|
|
326
|
+
* lets a post-commit effect be decided by a TRANSACTIONAL read instead of a second, racy one
|
|
327
|
+
* afterwards:
|
|
328
|
+
*
|
|
329
|
+
* ```ts
|
|
330
|
+
* const kick = await scope.transact(async (tx) => {
|
|
331
|
+
* const prior = await tx.row("message", { id: a.assistantMessageId });
|
|
332
|
+
* if (prior) return undefined; // a replayed envelope — do NOT re-fire the effect
|
|
333
|
+
* tx.insert("message", …);
|
|
334
|
+
* return { streamId: a.assistantMessageId, history: await readHistory(tx, a.chatId) };
|
|
335
|
+
* });
|
|
336
|
+
* if (kick) void startGeneration(kick); // committed, and decided against committed state
|
|
337
|
+
* ```
|
|
338
|
+
*
|
|
339
|
+
* A tx-form mutator cannot do this: its return value is already the logical-write channel
|
|
340
|
+
* ({@link ApiMutatorResult}). A post-commit effect chosen by a transactional read is exactly what
|
|
341
|
+
* the scoped form is for. */
|
|
342
|
+
transact<T>(run: (tx: ServerMutationTx) => T | Promise<T>): Promise<T>;
|
|
266
343
|
transact<A, C extends MutatorCtx>(mutator: SharedMutator<A, C>, args: A, ctx: C): Promise<void>;
|
|
267
344
|
}
|
|
268
345
|
|
|
@@ -534,6 +611,7 @@ export interface RindleApiRoutes {
|
|
|
534
611
|
claimRoomEpoch: string;
|
|
535
612
|
roomLmids: string;
|
|
536
613
|
roomBoot: string;
|
|
614
|
+
stream: string;
|
|
537
615
|
}
|
|
538
616
|
|
|
539
617
|
/** A room-host reply the transport writes VERBATIM (`status` + JSON `body`): the
|
|
@@ -880,6 +958,11 @@ export interface RindleApiServerOptions<User> {
|
|
|
880
958
|
* Presence activates the room flush trio AND `/room-boot`; absence keeps every room
|
|
881
959
|
* endpoint 403. Takes precedence over the deprecated {@link authorizeRoom}. */
|
|
882
960
|
realtime?: RindleRealtimeOptions<User>;
|
|
961
|
+
/** The LM stream plane (LM-STREAM-CHECKPOINT-DESIGN.md): the ONE named opt-in for streaming a
|
|
962
|
+
* model response live while the durable store only ever sees coarse checkpoints. Presence
|
|
963
|
+
* activates {@link RindleApiServer.openStream}/{@link RindleApiServer.subscribeStream} and
|
|
964
|
+
* `/stream`; absence keeps them 403. */
|
|
965
|
+
streams?: RindleStreamOptions<User>;
|
|
883
966
|
/** The room write-authority gate (§5.3.1): validates the caller is a placed room —
|
|
884
967
|
* the epoch-bound flush credential rides `context.request`, and what it means is
|
|
885
968
|
* the app's to define. The room endpoints are DISABLED (403) until this is set:
|
|
@@ -934,9 +1017,37 @@ export interface RindleApiServerOptions<User> {
|
|
|
934
1017
|
|
|
935
1018
|
export interface RindleApiServer<User> {
|
|
936
1019
|
readonly routes: RindleApiRoutes;
|
|
937
|
-
/** Close the SQL client created from {@link RindleApiServerOptions.database}
|
|
938
|
-
*
|
|
1020
|
+
/** Close the SQL client created from {@link RindleApiServerOptions.database}, and drop every live
|
|
1021
|
+
* stream's readers and timers WITHOUT a durable write (that is {@link drainStreams}). Injected
|
|
1022
|
+
* SQL sessions and custom backends remain caller-owned. Idempotent. */
|
|
939
1023
|
close(): void;
|
|
1024
|
+
/** Open an LM stream (LM-STREAM-CHECKPOINT §2): commits the durable POINTER row, then hands back
|
|
1025
|
+
* the producer handle. A resolved handle means the message already exists for every client's
|
|
1026
|
+
* query — so a subscriber that arrives before the first token has something to attach to.
|
|
1027
|
+
* Throws 403 unless {@link RindleApiServerOptions.streams} is configured. */
|
|
1028
|
+
openStream(input: OpenStreamInput<User>): Promise<StreamHandle>;
|
|
1029
|
+
/** Attach a reader at `from` — the same call serves a first-touch subscriber (`from: 0`), a late
|
|
1030
|
+
* joiner (`from` = the seq its IVM view shows), and a reconnect (`from` = `Last-Event-ID`).
|
|
1031
|
+
* Terminates with `end`, or with `stale`/`absent` when the client should fall back to the
|
|
1032
|
+
* durable plane (both are ordinary answers, never errors). */
|
|
1033
|
+
subscribeStream(input: SubscribeStreamInput<User>): Promise<StreamSubscription>;
|
|
1034
|
+
/** Parse a default `{streamId, from?}` subscribe body and run {@link subscribeStream}. For the
|
|
1035
|
+
* GET + `EventSource` shape, use {@link streamResponse} (or build the body with
|
|
1036
|
+
* `streamRequestFromHttp(request)` yourself). */
|
|
1037
|
+
handleStreamJson(body: unknown, context: ApiContext<User>): Promise<StreamSubscription>;
|
|
1038
|
+
/** The subscribe route in ONE call: parse a GET (`?streamId=…&from=…`, with `Last-Event-ID`
|
|
1039
|
+
* winning), authorize + subscribe, and encode the SSE response. A refusal comes back as a JSON
|
|
1040
|
+
* error `Response` (403 for denied or unconfigured) rather than a throw, so the route body is a
|
|
1041
|
+
* single expression after authentication. For custom transports, compose
|
|
1042
|
+
* `streamRequestFromHttp` + {@link subscribeStream} + `streamFramesToSse` instead. */
|
|
1043
|
+
streamResponse(
|
|
1044
|
+
request: { url: string; headers: { get(name: string): string | null } },
|
|
1045
|
+
context: ApiContext<User> & { keepAliveMs?: number },
|
|
1046
|
+
): Promise<Response>;
|
|
1047
|
+
/** Checkpoint every live stream's outstanding tail, then seal it `interrupted`
|
|
1048
|
+
* (LM-STREAM-CHECKPOINT §5). Wire it to SIGTERM: without it a rolling deploy drops each
|
|
1049
|
+
* response's un-checkpointed tail and strands rows saying `streaming` forever. */
|
|
1050
|
+
drainStreams(): Promise<void>;
|
|
940
1051
|
createQueryLease(input: QueryLeaseRequest<User>): Promise<QueryLeaseResponse>;
|
|
941
1052
|
/** (Re-)materialize every `pinnedQueries` entry with a pinned policy. Idempotent — the daemon
|
|
942
1053
|
* dedupes by canonical query, so a re-assert reuses the existing materialization. Call it at
|
|
@@ -2478,10 +2589,10 @@ class MutationScopeImpl implements MutationScope {
|
|
|
2478
2589
|
}
|
|
2479
2590
|
|
|
2480
2591
|
transact(
|
|
2481
|
-
first: SharedMutator<any, any> | ((tx: ServerMutationTx) =>
|
|
2592
|
+
first: SharedMutator<any, any> | ((tx: ServerMutationTx) => unknown),
|
|
2482
2593
|
args?: unknown,
|
|
2483
2594
|
ctx?: MutatorCtx,
|
|
2484
|
-
): Promise<
|
|
2595
|
+
): Promise<any> {
|
|
2485
2596
|
if (this.attempted) throw new Error("scope.transact may be called at most once per mutation");
|
|
2486
2597
|
this.attempted = true;
|
|
2487
2598
|
const promise = this.drive(first, args, ctx);
|
|
@@ -2496,17 +2607,20 @@ class MutationScopeImpl implements MutationScope {
|
|
|
2496
2607
|
}
|
|
2497
2608
|
|
|
2498
2609
|
private async drive(
|
|
2499
|
-
first: SharedMutator<any, any> | ((tx: ServerMutationTx) =>
|
|
2610
|
+
first: SharedMutator<any, any> | ((tx: ServerMutationTx) => unknown),
|
|
2500
2611
|
args?: unknown,
|
|
2501
2612
|
ctx?: MutatorCtx,
|
|
2502
|
-
): Promise<
|
|
2613
|
+
): Promise<unknown> {
|
|
2614
|
+
// The callback form's return value, captured INSIDE the transaction and handed back only below,
|
|
2615
|
+
// after the commit is confirmed accepted — so a value can never describe work that rolled back.
|
|
2616
|
+
let value: unknown;
|
|
2503
2617
|
// A shared (generator) mutator is driven via the isomorphic seam; a plain callback gets the raw tx.
|
|
2504
2618
|
const run = isGeneratorMutator(first)
|
|
2505
2619
|
? async (tx: ServerMutationTx) => {
|
|
2506
2620
|
await runSharedMutation(first as SharedMutator<unknown, MutatorCtx>, args, ctx as MutatorCtx, tx);
|
|
2507
2621
|
}
|
|
2508
2622
|
: async (tx: ServerMutationTx) => {
|
|
2509
|
-
await (first as (tx: ServerMutationTx) =>
|
|
2623
|
+
value = await (first as (tx: ServerMutationTx) => unknown)(tx);
|
|
2510
2624
|
};
|
|
2511
2625
|
let outcome: MutationOutcome;
|
|
2512
2626
|
try {
|
|
@@ -2518,6 +2632,7 @@ class MutationScopeImpl implements MutationScope {
|
|
|
2518
2632
|
}
|
|
2519
2633
|
this.outcome = outcome;
|
|
2520
2634
|
if (!outcome.accepted) throw new MutationRejected(outcome.reason);
|
|
2635
|
+
return value;
|
|
2521
2636
|
}
|
|
2522
2637
|
}
|
|
2523
2638
|
|
|
@@ -3305,14 +3420,87 @@ export function createRindleApiServer<User = unknown>(options: RindleApiServerOp
|
|
|
3305
3420
|
throw e;
|
|
3306
3421
|
};
|
|
3307
3422
|
|
|
3423
|
+
// The LM stream plane (LM-STREAM-CHECKPOINT §2). Checkpoints are SYSTEM writes — no clientID, no
|
|
3424
|
+
// mid, no `lmid` advance (that exists to release a CLIENT's optimistic rebase point, and a
|
|
3425
|
+
// server-authored checkpoint has no prediction to release) — so they ride the backend's
|
|
3426
|
+
// outside-transaction SQL surface, whose `batch` is one transaction on every backend. CDC → IVM
|
|
3427
|
+
// fanout happens on any write; it never needed an envelope.
|
|
3428
|
+
if (opts.streams && "tables" in opts.streams.checkpoint) {
|
|
3429
|
+
assertStreamTables(opts.streams.checkpoint.tables, opts.schema);
|
|
3430
|
+
}
|
|
3431
|
+
const streamPlane = opts.streams
|
|
3432
|
+
? new StreamPlane<User>(
|
|
3433
|
+
opts.streams,
|
|
3434
|
+
backend.outsideSql ? { dialect: backend.dialect, sql: backend.outsideSql } : undefined,
|
|
3435
|
+
)
|
|
3436
|
+
: undefined;
|
|
3437
|
+
const streams = (): StreamPlane<User> => {
|
|
3438
|
+
if (!streamPlane) throw new RindleApiError("forbidden", "streams not configured", 403);
|
|
3439
|
+
return streamPlane;
|
|
3440
|
+
};
|
|
3441
|
+
// The plane's own refusal, translated at the seam (it stays free of the server's error type so
|
|
3442
|
+
// `streams.ts` can be imported without the server — no cycle).
|
|
3443
|
+
const streamForbidden = (e: unknown): never => {
|
|
3444
|
+
if (e instanceof StreamForbidden) throw new RindleApiError("forbidden", "rindle request forbidden", 403);
|
|
3445
|
+
throw e;
|
|
3446
|
+
};
|
|
3447
|
+
|
|
3308
3448
|
return {
|
|
3309
3449
|
routes,
|
|
3310
|
-
close: () =>
|
|
3450
|
+
close: () => {
|
|
3451
|
+
streamPlane?.closeSync();
|
|
3452
|
+
ownedSql?.close();
|
|
3453
|
+
},
|
|
3311
3454
|
createQueryLease,
|
|
3312
3455
|
readQuery,
|
|
3313
3456
|
assertPins,
|
|
3314
3457
|
pushMutation,
|
|
3315
3458
|
pushMutations,
|
|
3459
|
+
// `async` throughout so a misconfiguration surfaces as a REJECTION like every other refusal on
|
|
3460
|
+
// this interface, never as a synchronous throw the transport forgot to catch.
|
|
3461
|
+
openStream: async (input) => streams().open(input),
|
|
3462
|
+
subscribeStream: async (input) => streams().subscribe(input).catch(streamForbidden),
|
|
3463
|
+
drainStreams: async () => streamPlane?.drainStreams(),
|
|
3464
|
+
handleStreamJson: async (body, context) => {
|
|
3465
|
+
const msg = parseObject(body, "stream request");
|
|
3466
|
+
const from = msg.from === undefined ? undefined : parseNumber(msg.from, "from");
|
|
3467
|
+
// A non-negative INTEGER, like the GET leg's clamp: a fractional `from` would yield a replay
|
|
3468
|
+
// chunk whose `text.length !== seq - from`, breaking the frame invariant on the client.
|
|
3469
|
+
if (from !== undefined && (!Number.isInteger(from) || from < 0)) {
|
|
3470
|
+
throw new RindleApiError("bad-request", "invalid from", 400);
|
|
3471
|
+
}
|
|
3472
|
+
return streams()
|
|
3473
|
+
.subscribe({
|
|
3474
|
+
user: context.user,
|
|
3475
|
+
streamId: parseString(msg.streamId, "streamId"),
|
|
3476
|
+
...(from !== undefined ? { from } : {}),
|
|
3477
|
+
request: context.request,
|
|
3478
|
+
})
|
|
3479
|
+
.catch(streamForbidden);
|
|
3480
|
+
},
|
|
3481
|
+
streamResponse: async (request, context) => {
|
|
3482
|
+
try {
|
|
3483
|
+
const { streamId, from } = streamRequestFromHttp(request);
|
|
3484
|
+
const sub = await streams()
|
|
3485
|
+
.subscribe({ user: context.user, streamId, from, request: context.request ?? request })
|
|
3486
|
+
.catch(streamForbidden);
|
|
3487
|
+
const sse = streamFramesToSse(
|
|
3488
|
+
sub,
|
|
3489
|
+
context.keepAliveMs !== undefined ? { keepAliveMs: context.keepAliveMs } : undefined,
|
|
3490
|
+
);
|
|
3491
|
+
return new Response(sse, { headers: STREAM_SSE_HEADERS });
|
|
3492
|
+
} catch (e) {
|
|
3493
|
+
// The route helper OWNS the transport, so refusals become responses here rather than
|
|
3494
|
+
// throws the route forgot to catch. The generic body never reveals stream existence.
|
|
3495
|
+
if (e instanceof RindleApiError) {
|
|
3496
|
+
return new Response(JSON.stringify({ error: e.message }), {
|
|
3497
|
+
status: e.status,
|
|
3498
|
+
headers: { "content-type": "application/json" },
|
|
3499
|
+
});
|
|
3500
|
+
}
|
|
3501
|
+
throw e;
|
|
3502
|
+
}
|
|
3503
|
+
},
|
|
3316
3504
|
handleApplyRowChangeTxnJson: async (body, context) => {
|
|
3317
3505
|
await roomGate(context);
|
|
3318
3506
|
const msg = parseObject(body, "row-change txn");
|
|
@@ -3509,6 +3697,55 @@ function applyResultToTx(result: ApiMutatorResult, tx: ServerMutationTx): void {
|
|
|
3509
3697
|
}
|
|
3510
3698
|
}
|
|
3511
3699
|
|
|
3700
|
+
/**
|
|
3701
|
+
* The stream table mapping, checked LOUDLY at construction (the room-profile rule — a misconfigured
|
|
3702
|
+
* mapping should fail the deploy, not a 3am generation). Only checkable when a `schema` is
|
|
3703
|
+
* configured; without one the plane's SQL fails at the first checkpoint like any other unschema'd
|
|
3704
|
+
* write. The message table is the APP's, so only the three-to-five columns the plane touches are
|
|
3705
|
+
* asserted — never its shape.
|
|
3706
|
+
*/
|
|
3707
|
+
function assertStreamTables(tables: StreamTables, schema: Schema | undefined): void {
|
|
3708
|
+
if (!schema) return;
|
|
3709
|
+
const c = resolveStreamColumns(tables.columns);
|
|
3710
|
+
const columnsOf = (table: string): Set<string> | undefined => {
|
|
3711
|
+
const meta = (schema.tables as Record<string, { columns?: Record<string, unknown> }> | undefined)?.[table];
|
|
3712
|
+
return meta?.columns ? new Set(Object.keys(meta.columns)) : undefined;
|
|
3713
|
+
};
|
|
3714
|
+
const check = (table: string, needed: Array<[string, string]>): void => {
|
|
3715
|
+
const cols = columnsOf(table);
|
|
3716
|
+
if (!cols) {
|
|
3717
|
+
throw new TypeError(
|
|
3718
|
+
`streams.checkpoint.tables names "${table}", which is not in the configured schema — add it (and run its ` +
|
|
3719
|
+
`migration; \`streamChunkTableDdl\` generates the chunk table's DDL)`,
|
|
3720
|
+
);
|
|
3721
|
+
}
|
|
3722
|
+
for (const [role, name] of needed) {
|
|
3723
|
+
if (!cols.has(name)) {
|
|
3724
|
+
throw new TypeError(
|
|
3725
|
+
`streams.checkpoint.tables: "${table}" has no column "${name}" (the ${role} column) — ` +
|
|
3726
|
+
`add it, or point \`columns.${role}\` at the one you have. Known columns: ${[...cols].join(", ")}`,
|
|
3727
|
+
);
|
|
3728
|
+
}
|
|
3729
|
+
}
|
|
3730
|
+
};
|
|
3731
|
+
check(tables.message, [
|
|
3732
|
+
["key", c.key],
|
|
3733
|
+
["body", c.body],
|
|
3734
|
+
["status", c.status],
|
|
3735
|
+
["seq", c.seq],
|
|
3736
|
+
// `cancel`/`error`/`host` are opt-in BY NAMING — present here only when the app asked for them.
|
|
3737
|
+
...(c.cancel !== undefined ? ([["cancel", c.cancel]] as Array<[string, string]>) : []),
|
|
3738
|
+
...(c.error !== undefined ? ([["error", c.error]] as Array<[string, string]>) : []),
|
|
3739
|
+
...(c.host !== undefined ? ([["host", c.host]] as Array<[string, string]>) : []),
|
|
3740
|
+
]);
|
|
3741
|
+
check(tables.chunks, [
|
|
3742
|
+
["chunkKey", c.chunkKey],
|
|
3743
|
+
["chunkStream", c.chunkStream],
|
|
3744
|
+
["chunkSeq", c.chunkSeq],
|
|
3745
|
+
["chunkText", c.chunkText],
|
|
3746
|
+
]);
|
|
3747
|
+
}
|
|
3748
|
+
|
|
3512
3749
|
async function assertAuthorized<T>(authorizer: Authorizer<T> | undefined, input: T): Promise<void> {
|
|
3513
3750
|
if (!authorizer) return;
|
|
3514
3751
|
const result = await authorizer(input);
|