@lovrozagar/oat 0.6.2 → 0.7.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.
Files changed (121) hide show
  1. package/README.md +443 -146
  2. package/dist/cli.js +35 -29
  3. package/dist/config/define-config.d.ts +125 -3
  4. package/dist/config/define-config.d.ts.map +1 -1
  5. package/dist/config/define-config.js +6 -0
  6. package/dist/config/define-config.js.map +1 -1
  7. package/dist/index.d.ts +7 -2
  8. package/dist/index.js +4 -1
  9. package/dist/reference/defects.d.ts +16 -0
  10. package/dist/reference/defects.d.ts.map +1 -1
  11. package/dist/reference/defects.js +16 -0
  12. package/dist/reference/defects.js.map +1 -1
  13. package/dist/reference/model.d.ts +9 -0
  14. package/dist/reference/model.d.ts.map +1 -1
  15. package/dist/reference/model.js +20 -0
  16. package/dist/reference/model.js.map +1 -1
  17. package/dist/reference/query.d.ts +5 -0
  18. package/dist/reference/query.d.ts.map +1 -1
  19. package/dist/reference/query.js +87 -21
  20. package/dist/reference/query.js.map +1 -1
  21. package/dist/reference/spec.d.ts.map +1 -1
  22. package/dist/reference/spec.js +47 -2
  23. package/dist/reference/spec.js.map +1 -1
  24. package/dist/reference/store-api.d.ts +5 -1
  25. package/dist/reference/store-api.d.ts.map +1 -1
  26. package/dist/reference/store-api.js +9 -1
  27. package/dist/reference/store-api.js.map +1 -1
  28. package/dist/reference/stores/memory.d.ts.map +1 -1
  29. package/dist/reference/stores/memory.js +11 -0
  30. package/dist/reference/stores/memory.js.map +1 -1
  31. package/dist/reference/stores/postgres.d.ts.map +1 -1
  32. package/dist/reference/stores/postgres.js +75 -19
  33. package/dist/reference/stores/postgres.js.map +1 -1
  34. package/dist/reference/stores/sqlite-driver.d.ts.map +1 -1
  35. package/dist/reference/stores/sqlite-driver.js +3 -0
  36. package/dist/reference/stores/sqlite-driver.js.map +1 -1
  37. package/dist/reference/stores/sqlite.d.ts.map +1 -1
  38. package/dist/reference/stores/sqlite.js +78 -17
  39. package/dist/reference/stores/sqlite.js.map +1 -1
  40. package/dist/report/console.d.ts +7 -1
  41. package/dist/report/console.d.ts.map +1 -1
  42. package/dist/report/console.js +210 -1
  43. package/dist/report/console.js.map +1 -1
  44. package/dist/report/render.d.ts.map +1 -1
  45. package/dist/report/render.js +4 -2
  46. package/dist/report/render.js.map +1 -1
  47. package/dist/runtime/auth.d.ts +22 -2
  48. package/dist/runtime/auth.d.ts.map +1 -1
  49. package/dist/runtime/auth.js +129 -16
  50. package/dist/runtime/auth.js.map +1 -1
  51. package/dist/runtime/body.d.ts.map +1 -1
  52. package/dist/runtime/body.js +6 -3
  53. package/dist/runtime/body.js.map +1 -1
  54. package/dist/runtime/checks.d.ts +9 -0
  55. package/dist/runtime/checks.d.ts.map +1 -1
  56. package/dist/runtime/checks.js +1414 -18
  57. package/dist/runtime/checks.js.map +1 -1
  58. package/dist/runtime/client.d.ts +23 -1
  59. package/dist/runtime/client.d.ts.map +1 -1
  60. package/dist/runtime/client.js +35 -5
  61. package/dist/runtime/client.js.map +1 -1
  62. package/dist/runtime/finding.d.ts +2 -0
  63. package/dist/runtime/finding.d.ts.map +1 -1
  64. package/dist/runtime/finding.js.map +1 -1
  65. package/dist/runtime/input.d.ts +7 -0
  66. package/dist/runtime/input.d.ts.map +1 -0
  67. package/dist/runtime/input.js +46 -0
  68. package/dist/runtime/input.js.map +1 -0
  69. package/dist/runtime/poll.d.ts +29 -0
  70. package/dist/runtime/poll.d.ts.map +1 -0
  71. package/dist/runtime/poll.js +59 -0
  72. package/dist/runtime/poll.js.map +1 -0
  73. package/dist/runtime/principals.d.ts +29 -0
  74. package/dist/runtime/principals.d.ts.map +1 -0
  75. package/dist/runtime/principals.js +97 -0
  76. package/dist/runtime/principals.js.map +1 -0
  77. package/dist/runtime/progress.d.ts +21 -0
  78. package/dist/runtime/progress.d.ts.map +1 -1
  79. package/dist/runtime/progress.js +63 -21
  80. package/dist/runtime/progress.js.map +1 -1
  81. package/dist/runtime/query-capabilities.d.ts +24 -0
  82. package/dist/runtime/query-capabilities.d.ts.map +1 -0
  83. package/dist/runtime/query-capabilities.js +66 -0
  84. package/dist/runtime/query-capabilities.js.map +1 -0
  85. package/dist/runtime/run.d.ts +14 -1
  86. package/dist/runtime/run.d.ts.map +1 -1
  87. package/dist/runtime/run.js +198 -39
  88. package/dist/runtime/run.js.map +1 -1
  89. package/dist/runtime/runs.d.ts +23 -0
  90. package/dist/runtime/runs.d.ts.map +1 -0
  91. package/dist/runtime/runs.js +53 -0
  92. package/dist/runtime/runs.js.map +1 -0
  93. package/dist/runtime/upload.d.ts +1 -0
  94. package/dist/runtime/upload.d.ts.map +1 -1
  95. package/dist/runtime/upload.js.map +1 -1
  96. package/dist/runtime/wait.d.ts +32 -0
  97. package/dist/runtime/wait.d.ts.map +1 -0
  98. package/dist/runtime/wait.js +125 -0
  99. package/dist/runtime/wait.js.map +1 -0
  100. package/dist/runtime/world.d.ts.map +1 -1
  101. package/dist/runtime/world.js +2 -0
  102. package/dist/runtime/world.js.map +1 -1
  103. package/dist/spec/conventions.d.ts +10 -2
  104. package/dist/spec/conventions.d.ts.map +1 -1
  105. package/dist/spec/conventions.js +61 -7
  106. package/dist/spec/conventions.js.map +1 -1
  107. package/dist/spec/extensions.d.ts +27 -0
  108. package/dist/spec/extensions.d.ts.map +1 -1
  109. package/dist/spec/extensions.js +40 -5
  110. package/dist/spec/extensions.js.map +1 -1
  111. package/dist/spec/graph.d.ts +2 -1
  112. package/dist/spec/graph.d.ts.map +1 -1
  113. package/dist/spec/graph.js +2 -1
  114. package/dist/spec/graph.js.map +1 -1
  115. package/dist/spec/query-capabilities.d.ts +154 -0
  116. package/dist/spec/query-capabilities.d.ts.map +1 -0
  117. package/dist/spec/query-capabilities.js +734 -0
  118. package/dist/spec/query-capabilities.js.map +1 -0
  119. package/labs/annotated-openapi.yaml +21 -2
  120. package/labs/demo.mjs +4 -2
  121. package/package.json +4 -2
package/dist/cli.js CHANGED
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createWriteStream, writeFileSync } from "node:fs";
3
- import { mkdir, rm, writeFile } from "node:fs/promises";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
4
  import { dirname, resolve } from "node:path";
5
5
  import { pathToFileURL } from "node:url";
6
6
  import { interpolate, loadConfig } from "./config/load.js";
7
7
  import { report } from "./report/console.js";
8
8
  import { renderMatrixGraph, renderMatrixHtml } from "./report/matrix.js";
9
9
  import { ISSUE_REPRO_DIR, renderConsole, renderJson, renderMarkdown, renderRepros } from "./report/render.js";
10
- import { createStderrProgress, formatProgressJsonl, formatProgressLine, formatProgressTsv, PROGRESS_GLOSSARY, PROGRESS_TSV_HEADER, } from "./runtime/progress.js";
10
+ import { createProgressPump, createStderrProgress, formatProgressJsonl, formatProgressLine, formatProgressTsv, PROGRESS_GLOSSARY, PROGRESS_TSV_HEADER, } from "./runtime/progress.js";
11
+ import { allocateRunDir, DEFAULT_RUNS_ROOT } from "./runtime/runs.js";
11
12
  import { renderTeardown } from "./runtime/teardown.js";
12
13
  import { buildModel } from "./spec/graph.js";
13
14
  import { dereference, loadSpec } from "./spec/load.js";
@@ -73,7 +74,7 @@ Flags
73
74
  --only comma-separated entity names to restrict the run to
74
75
  --profile named profile gating which operations run (built-in: full, cheap)
75
76
  --seed integer seed for fixture generation (default 1)
76
- --out output directory for the report (default ./oat-out)
77
+ --out history root; each run is <out>/<datetime>/ (default ./.oat/runs)
77
78
  --keep-fixtures leave created records in place instead of tearing them down
78
79
  --max-in-flight requests allowed in flight at once (default 4)
79
80
  --quiet no live progress on stderr (progress.log still written)
@@ -117,38 +118,33 @@ async function commandRun(flags) {
117
118
  }
118
119
  const startedAt = new Date();
119
120
  const began = performance.now();
120
- const outDir = resolve(str(flags, "out") ?? config.outDir ?? "oat-out");
121
- await mkdir(outDir, { recursive: true });
121
+ const allocated = await allocateRunDir(str(flags, "out") ?? config.outDir ?? DEFAULT_RUNS_ROOT, startedAt);
122
+ const outDir = allocated.runDir;
122
123
  const stderrProgress = flags.quiet === true ? undefined : createStderrProgress(startedAt.getTime());
123
124
  const progressLog = createWriteStream(resolve(outDir, "progress.log"));
124
125
  const progressTsv = createWriteStream(resolve(outDir, "progress.tsv"));
125
126
  const progressJsonl = createWriteStream(resolve(outDir, "progress.jsonl"));
126
127
  progressLog.write(`${PROGRESS_GLOSSARY}\n`);
127
128
  progressTsv.write(`${PROGRESS_TSV_HEADER}\n`);
128
- let lastLogKey = "";
129
- let lastLogAt = 0;
130
129
  let lastJsonAt = 0;
131
- const onProgress = (snap) => {
132
- stderrProgress?.emit(snap);
133
- const key = `${snap.phase}|${snap.entity ?? ""}|${snap.check ?? ""}|${snap.message ?? ""}`;
134
- const due = Date.now() - lastLogAt >= 2_000;
135
- if (key !== lastLogKey || due || snap.phase === "done" || snap.phase === "load") {
136
- lastLogKey = key;
137
- lastLogAt = Date.now();
138
- const now = Date.now();
139
- progressLog.write(`${formatProgressLine(snap, now)}\n`);
140
- progressTsv.write(`${formatProgressTsv(snap, now)}\n`);
141
- progressJsonl.write(`${formatProgressJsonl(snap, now)}\n`);
142
- }
143
- if (Date.now() - lastJsonAt >= 1_000 || snap.phase === "done") {
144
- lastJsonAt = Date.now();
130
+ const fileProgress = createProgressPump(startedAt.getTime(), (snap, now) => {
131
+ progressLog.write(`${formatProgressLine(snap, now)}\n`);
132
+ progressTsv.write(`${formatProgressTsv(snap, now)}\n`);
133
+ progressJsonl.write(`${formatProgressJsonl(snap, now)}\n`);
134
+ if (now - lastJsonAt >= 1_000 || snap.phase === "done") {
135
+ lastJsonAt = now;
136
+ const ageFrom = snap.inflight !== undefined ? snap.inflight.at : snap.last !== undefined ? snap.last.at : undefined;
145
137
  const payload = {
146
138
  ...snap,
147
- lastAgoMs: snap.last === undefined ? null : Date.now() - snap.last.at,
148
- updatedAt: new Date().toISOString(),
139
+ lastAgoMs: ageFrom === undefined ? null : now - ageFrom,
140
+ updatedAt: new Date(now).toISOString(),
149
141
  };
150
142
  writeFileSync(resolve(outDir, "progress.json"), `${JSON.stringify(payload, null, 2)}\n`);
151
143
  }
144
+ });
145
+ const onProgress = (snap) => {
146
+ stderrProgress?.emit(snap);
147
+ fileProgress.emit(snap);
152
148
  };
153
149
  let result;
154
150
  try {
@@ -166,6 +162,10 @@ async function commandRun(flags) {
166
162
  ...(profile === undefined ? {} : { profile }),
167
163
  ...(config.profiles === undefined ? {} : { profiles: config.profiles }),
168
164
  ...(config.rateLimits === undefined ? {} : { rateLimits: config.rateLimits }),
165
+ ...(config.origins === undefined ? {} : { origins: config.origins }),
166
+ ...(config.outOfBand === undefined ? {} : { outOfBand: config.outOfBand }),
167
+ ...(config.query === undefined ? {} : { query: config.query }),
168
+ ...(config.entities === undefined ? {} : { entities: config.entities }),
169
169
  keepFixtures: flags["keep-fixtures"] === true || config.keepFixtures === true,
170
170
  maxInFlight: Number.parseInt(str(flags, "max-in-flight") ?? "", 10) || config.maxInFlight || 4,
171
171
  seed: seedFlag === undefined ? (config.seed ?? 1) : Number.parseInt(seedFlag, 10),
@@ -174,6 +174,7 @@ async function commandRun(flags) {
174
174
  }
175
175
  finally {
176
176
  stderrProgress?.stop();
177
+ fileProgress.stop();
177
178
  progressLog.end();
178
179
  progressTsv.end();
179
180
  progressJsonl.end();
@@ -194,10 +195,7 @@ async function commandRun(flags) {
194
195
  profileExclusions: result.profileExclusions,
195
196
  startedAt,
196
197
  };
197
- /* Wipe both the old name and the current one. A leftover script from a previous
198
- * finding reads as a current defect. The folder is only created when there is an issue. */
199
- await rm(resolve(outDir, "repro"), { force: true, recursive: true });
200
- await rm(resolve(outDir, ISSUE_REPRO_DIR), { force: true, recursive: true });
198
+ await writeFile(resolve(outDir, "principals.json"), `${JSON.stringify({ principals: result.principals }, null, 2)}\n`);
201
199
  await writeFile(resolve(outDir, "oat-report.md"), renderMarkdown(input));
202
200
  await writeFile(resolve(outDir, "oat-report.json"), renderJson(input));
203
201
  await writeFile(resolve(outDir, "matrix.html"), renderMatrixHtml(input));
@@ -217,7 +215,8 @@ async function commandRun(flags) {
217
215
  process.stdout.write(` report: ${resolve(outDir, "oat-report.md")}\n`);
218
216
  process.stdout.write(` matrix: ${resolve(outDir, "matrix.html")}\n`);
219
217
  process.stdout.write(` graph: ${resolve(outDir, "matrix.json")}\n`);
220
- process.stdout.write(` progress: ${resolve(outDir, "progress.log")} · ${resolve(outDir, "progress.jsonl")}\n\n`);
218
+ process.stdout.write(` progress: ${resolve(outDir, "progress.log")} · ${resolve(outDir, "progress.jsonl")}\n`);
219
+ process.stdout.write(` latest: ${allocated.latest}\n\n`);
221
220
  /* Exit code counts root causes, not raw findings: gaps and blocked entries are information,
222
221
  * not failures, and a CI gate should react to defects only. */
223
222
  return result.findings.filter((f) => f.verdict !== "COVERAGE_GAP" && f.verdict !== "BLOCKED").length > 0 ? 1 : 0;
@@ -430,7 +429,14 @@ export async function main() {
430
429
  process.stdout.write(report.plan(model, flags.json === true));
431
430
  return 0;
432
431
  case "doctor": {
433
- const output = report.doctor(model, externalRefs, flags.json === true);
432
+ const config = configPath === undefined ? undefined : interpolate(await loadConfig(configPath));
433
+ const output = report.doctor(model, externalRefs, flags.json === true, config === undefined
434
+ ? undefined
435
+ : {
436
+ ...(config.query === undefined ? {} : { query: config.query }),
437
+ ...(config.entities === undefined ? {} : { entities: config.entities }),
438
+ ...(config.hooks === undefined ? {} : { hooks: config.hooks }),
439
+ });
434
440
  process.stdout.write(output.text);
435
441
  return output.blocking > 0 ? 1 : 0;
436
442
  }
@@ -5,6 +5,8 @@
5
5
  * is a compile error rather than a surprise at request time. Everything backend-specific lives
6
6
  * here or in `x-*` spec tags; oat itself knows nothing about any particular API.
7
7
  */
8
+ import type { FilterableField, QueryCapabilities } from "../spec/query-capabilities.ts";
9
+ export type { FieldType, FilterOp, FilterableField, FilterableFrom, QueryCapabilities, SortableField, } from "../spec/query-capabilities.ts";
8
10
  interface StepBase {
9
11
  /**
10
12
  * Binds parts of the response into the flow's scope. Later steps interpolate them as
@@ -32,6 +34,8 @@ export interface OperationStep extends StepBase {
32
34
  body?: unknown;
33
35
  headers?: Record<string, string>;
34
36
  query?: Record<string, string>;
37
+ /** Named `origins[]` entry. Omit to hit the primary `baseUrl`. */
38
+ origin?: string;
35
39
  }
36
40
  /** Calls a raw path, for endpoints the document does not describe. */
37
41
  export interface RequestStep extends StepBase {
@@ -40,6 +44,8 @@ export interface RequestStep extends StepBase {
40
44
  body?: unknown;
41
45
  headers?: Record<string, string>;
42
46
  query?: Record<string, string>;
47
+ /** Named `origins[]` entry. Omit to hit the primary `baseUrl`. */
48
+ origin?: string;
43
49
  }
44
50
  /**
45
51
  * A value that never travels over HTTP — an emailed verification token, an OTP, a magic link.
@@ -86,12 +92,31 @@ export interface AuthFlow {
86
92
  */
87
93
  refresh?: AuthRefresh;
88
94
  }
95
+ /**
96
+ * Credential harvested outside oat (Google OAuth on a harvest page, a KV pair).
97
+ * oat polls `hooks.resolvePrincipalAuth` with the same backoff as `resolveOutOfBand`.
98
+ */
99
+ export interface HookAuth {
100
+ fromHook: string;
101
+ header?: string;
102
+ template?: string;
103
+ assumeTtlMs?: number;
104
+ refreshBufferMs?: number;
105
+ }
106
+ export type PrincipalAuth = AuthFlow | HookAuth;
107
+ export declare function isHookAuth(auth: PrincipalAuth): auth is HookAuth;
108
+ export declare function isAuthFlow(auth: PrincipalAuth): auth is AuthFlow;
109
+ export interface PrincipalAuthResult {
110
+ credential: string;
111
+ refreshToken?: string;
112
+ expiresIn?: number;
113
+ }
89
114
  export interface Principal {
90
115
  id: string;
91
116
  /** Sent on every request this principal makes — for a long-lived key, this is all you need. */
92
117
  headers?: Record<string, string>;
93
118
  /** How to obtain a credential. Omit for a principal that authenticates by static header. */
94
- auth?: AuthFlow;
119
+ auth?: PrincipalAuth;
95
120
  /** Path parameters this principal owns — its tenant. */
96
121
  roots?: Record<string, string>;
97
122
  /**
@@ -123,6 +148,39 @@ export interface OutOfBandRequest {
123
148
  /** 1-based; oat retries with backoff until a value arrives or the attempts run out. */
124
149
  attempt: number;
125
150
  }
151
+ /**
152
+ * Poll schedule for `resolveOutOfBand` and `resolvePrincipalAuth`.
153
+ *
154
+ * Defaults match 0.6.2: 6 attempts, 200 ms first sleep, doubling, cap 3000 ms.
155
+ * Worst-case wait is the sum of every sleep, including after the last miss:
156
+ * `200+400+800+1600+3000+3000 = 9000` ms. `{ attempts: 20, initialMs: 1000, maxMs: 8000 }`
157
+ * is `1000+2000+4000+8000×17 = 143000` ms. The hook must not sleep; oat owns the backoff.
158
+ */
159
+ export interface OutOfBandConfig {
160
+ attempts?: number;
161
+ initialMs?: number;
162
+ maxMs?: number;
163
+ }
164
+ export interface HeaderRequest {
165
+ method: string;
166
+ url: string;
167
+ operationId?: string;
168
+ }
169
+ export interface InputRequest {
170
+ operationId: string;
171
+ /** Property name at this depth. */
172
+ field: string;
173
+ /** JSON-path style pointer, e.g. `$.payment_method_id`. */
174
+ pointer: string;
175
+ schema: unknown;
176
+ }
177
+ export interface SideEffectRequest {
178
+ /** The write that should have produced the side effect. */
179
+ operationId: string;
180
+ /** Latest poll body, or the write response when no poll has landed yet. */
181
+ record: unknown;
182
+ attempt: number;
183
+ }
126
184
  export interface UploadRequest {
127
185
  operationId: string;
128
186
  /** The request's multipart / json / urlencoded media type. */
@@ -170,6 +228,50 @@ export interface Hooks {
170
228
  * Returning `UploadFile` replaces that field. `{ fields }` replaces the whole request.
171
229
  */
172
230
  resolveUpload?: (request: UploadRequest) => Promise<UploadResolution>;
231
+ /**
232
+ * Per-request headers, merged after `globalHeaders` and before the principal's credential.
233
+ * Called on every dispatch (including 401 retries) so a one-shot captcha token can be fresh.
234
+ * Return `null` or `{}` to add nothing. oat does not speak Turnstile.
235
+ */
236
+ resolveHeaders?: (request: HeaderRequest) => Promise<Record<string, string> | null>;
237
+ /**
238
+ * Replace a generated JSON field. Return `null` to keep the generator.
239
+ * Same idea as `resolveUpload`, for JSON (Stripe `pm_…`, vendor tokens).
240
+ */
241
+ resolveInput?: (request: InputRequest) => Promise<unknown | null>;
242
+ /**
243
+ * Harvested principal: `auth: { fromHook: "oauth-google" }`.
244
+ * Return `null` to retry with the `outOfBand` backoff so a human can finish the click.
245
+ */
246
+ resolvePrincipalAuth?: (fromHook: string) => Promise<PrincipalAuthResult | null>;
247
+ /**
248
+ * After a write that declares `x-wait`, return `true` when the side effect is visible.
249
+ * `null` retries until `x-wait.timeoutMs` (default 30s).
250
+ */
251
+ awaitSideEffect?: (request: SideEffectRequest) => Promise<true | null>;
252
+ /**
253
+ * After seed, add or replace any axis of the query catalog for one entity. Return `null`
254
+ * to keep the merged tag+config catalog. A provided `filterable` / `sortable` /
255
+ * `searchable` / `selectable` list replaces that axis; omitted axes stay. `get` runs a
256
+ * named operation (or `"GET /path"`) with the seeded scope so a follow-up read can
257
+ * harvest dynamic columns.
258
+ */
259
+ resolveQueryCapabilities?: (request: QueryCapabilitiesRequest) => Promise<FilterableField[] | Partial<QueryCapabilities> | null>;
260
+ }
261
+ export interface QueryCapabilitiesRequest {
262
+ entity: string;
263
+ scope: Record<string, string>;
264
+ get: (operationId: string, scope?: Record<string, string>) => Promise<unknown>;
265
+ }
266
+ /** Per-entity overlays. Only `query` is in scope this release. Unknown names are ignored. */
267
+ export interface EntityConfig {
268
+ query?: QueryCapabilities;
269
+ }
270
+ /** A second host with its own OpenAPI. Auth stays on the primary; the JWT is reused. */
271
+ export interface OriginSpec {
272
+ id: string;
273
+ baseUrl: string;
274
+ spec: string;
173
275
  }
174
276
  /**
175
277
  * Which operations a run is allowed to touch, filtering on what `x-cost` / `x-destructive`
@@ -223,6 +325,17 @@ export interface OatConfig {
223
325
  uploads?: Uploads;
224
326
  /** Sent on every request. Request-id / correlation-id headers are recorded on each exchange; the rest is opaque. */
225
327
  globalHeaders?: Record<string, string>;
328
+ /**
329
+ * Extra hosts, each with its own document. Do not merge those routes into the primary spec.
330
+ * After primary auth, oat binds the same principals and runs the matrix against each origin.
331
+ * A second `defineConfig` can also reuse `.oat/runs/latest/principals.json` via `loadPersistedPrincipals`.
332
+ */
333
+ origins?: OriginSpec[];
334
+ /**
335
+ * Backoff for `resolveOutOfBand` and `resolvePrincipalAuth`.
336
+ * Defaults: `{ attempts: 6, initialMs: 200, maxMs: 3000 }` (~9s worst case).
337
+ */
338
+ outOfBand?: OutOfBandConfig;
226
339
  /** Path parameters oat cannot create. Also declarable in-spec via `x-root`. */
227
340
  roots?: Record<string, string>;
228
341
  /** Fixture generation derives from this, so a failing run is exactly reproducible. */
@@ -246,9 +359,19 @@ export interface OatConfig {
246
359
  * request — the environment-specific belief wins over the document's general claim.
247
360
  */
248
361
  rateLimits?: RateLimitSpec[];
362
+ /**
363
+ * Global filter catalog defaults. Overlay on every entity after the list operation's `x-query`.
364
+ * Does not invent operators — new ops still have to be listed here or on the tag.
365
+ */
366
+ query?: QueryCapabilities;
367
+ /** Per-entity overlays. Unknown names are ignored (`oat doctor` warns). */
368
+ entities?: Record<string, EntityConfig>;
249
369
  /** Leave created records in place instead of tearing them down. */
250
370
  keepFixtures?: boolean;
251
- /** Report destination. Defaults to `./oat-out`. */
371
+ /**
372
+ * History root. Each run writes `<outDir>/<datetime>/` and updates `<outDir>/latest`.
373
+ * Defaults to `./.oat/runs`.
374
+ */
252
375
  outDir?: string;
253
376
  }
254
377
  /**
@@ -265,5 +388,4 @@ export interface OatConfig {
265
388
  * ```
266
389
  */
267
390
  export declare function defineConfig(config: OatConfig): OatConfig;
268
- export {};
269
391
  //# sourceMappingURL=define-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,UAAU,QAAQ;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAChE,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,2FAA2F;AAC3F,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC9C,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B;AAED,sEAAsE;AACtE,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CACxD;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,CAAA;AAIlE,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC3B,uEAAuE;IACvE,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,QAAQ;IACxB,+EAA+E;IAC/E,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;IAChC,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAA;IACtB,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,4FAA4F;IAC5F,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAID,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAA;IACjB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAA;CAAE,GAAG,IAAI,CAAA;AAElG,MAAM,WAAW,OAAO;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CACf;AAED,MAAM,WAAW,KAAK;IACrB,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxE;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACrE;AAID;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC3B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACnC,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAID;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAID,MAAM,WAAW,SAAS;IACzB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oHAAoH;IACpH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACtC,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,EAAE,CAAA;IAC5B,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAEzD"}
1
+ {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,12 @@
5
5
  * is a compile error rather than a surprise at request time. Everything backend-specific lives
6
6
  * here or in `x-*` spec tags; oat itself knows nothing about any particular API.
7
7
  */
8
+ export function isHookAuth(auth) {
9
+ return "fromHook" in auth && typeof auth.fromHook === "string" && !("steps" in auth);
10
+ }
11
+ export function isAuthFlow(auth) {
12
+ return "steps" in auth;
13
+ }
8
14
  /**
9
15
  * Identity function that gives a config file full type checking and editor completion.
10
16
  *
@@ -1 +1 @@
1
- {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4QH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC7C,OAAO,MAAM,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoHH,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC7C,OAAO,UAAU,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC7C,OAAO,OAAO,IAAI,IAAI,CAAA;AACvB,CAAC;AAwSD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC7C,OAAO,MAAM,CAAA;AACd,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,11 @@
1
- export { defineConfig } from "./config/define-config.ts";
2
- export type { AuthFlow, AuthRefresh, AuthStep, Hooks, OatConfig, OperationStep, OutOfBandRequest, OutOfBandStep, Principal, ProfileSpec, RateLimitSpec, RequestStep, UploadFile, UploadRequest, UploadResolution, Uploads, } from "./config/define-config.ts";
1
+ export { defineConfig, isAuthFlow, isHookAuth } from "./config/define-config.ts";
2
+ export type { AuthFlow, AuthRefresh, AuthStep, EntityConfig, FieldType, FilterOp, FilterableField, FilterableFrom, HeaderRequest, HookAuth, Hooks, InputRequest, OatConfig, OperationStep, OriginSpec, OutOfBandConfig, OutOfBandRequest, OutOfBandStep, Principal, PrincipalAuth, PrincipalAuthResult, ProfileSpec, QueryCapabilities, QueryCapabilitiesRequest, RateLimitSpec, RequestStep, SideEffectRequest, UploadFile, UploadRequest, UploadResolution, Uploads, } from "./config/define-config.ts";
3
3
  export { loadConfig } from "./config/load.ts";
4
+ export { loadPersistedPrincipals, parsePersistedPrincipals } from "./runtime/principals.ts";
5
+ export type { PersistedPrincipal } from "./runtime/principals.ts";
6
+ export { allocateRunDir, DEFAULT_RUNS_ROOT, formatRunStamp } from "./runtime/runs.ts";
7
+ export type { AllocatedRunDir } from "./runtime/runs.ts";
8
+ export { worstCaseWaitMs, resolveBackoff, DEFAULT_OUT_OF_BAND } from "./runtime/poll.ts";
4
9
  export { deriveCollectionShape, deriveIdentity } from "./spec/collection.ts";
5
10
  export type { CollectionShape } from "./spec/collection.ts";
6
11
  export { buildModel } from "./spec/graph.ts";
package/dist/index.js CHANGED
@@ -1,5 +1,8 @@
1
- export { defineConfig } from "./config/define-config.js";
1
+ export { defineConfig, isAuthFlow, isHookAuth } from "./config/define-config.js";
2
2
  export { loadConfig } from "./config/load.js";
3
+ export { loadPersistedPrincipals, parsePersistedPrincipals } from "./runtime/principals.js";
4
+ export { allocateRunDir, DEFAULT_RUNS_ROOT, formatRunStamp } from "./runtime/runs.js";
5
+ export { worstCaseWaitMs, resolveBackoff, DEFAULT_OUT_OF_BAND } from "./runtime/poll.js";
3
6
  export { deriveCollectionShape, deriveIdentity } from "./spec/collection.js";
4
7
  export { buildModel } from "./spec/graph.js";
5
8
  export { dereference, loadSpec, normalisePath, parseRouteRef } from "./spec/load.js";
@@ -121,6 +121,22 @@ export declare const DEFECTS: {
121
121
  * is the only thing that reads the claim and then tries it.
122
122
  */
123
123
  readonly SPEC_OVERCLAIMS_FILTERABLE: "x-query declares a field filterable that the backend rejects";
124
+ /** `in.(a,b)` only honours the first member. */
125
+ readonly FILTER_IN_FIRST_ONLY: "in() matches only the first listed value";
126
+ /** `gte` is compiled as `gt`. */
127
+ readonly FILTER_GTE_IS_GT: "gte is implemented as gt";
128
+ /** `ilike` is compiled as case-sensitive `like`. */
129
+ readonly FILTER_ILIKE_IS_LIKE: "ilike is implemented as like";
130
+ /** `is.null` matches every row. */
131
+ readonly FILTER_IS_NULL_MATCHES_ALL: "is.null matches every row";
132
+ /** An operator outside the field's allowlist is ignored (200 + full set). */
133
+ readonly FILTER_ILLEGAL_OP_IGNORED: "an illegal filter operator is accepted and ignored";
134
+ /** Numeric sort compares as text. */
135
+ readonly SORT_NUMERIC_AS_TEXT: "a numeric sortable field is ordered lexicographically";
136
+ /** Only the first order key is honoured. */
137
+ readonly SORT_MULTI_KEY_IGNORED: "the second sort key is ignored";
138
+ /** A requested select field is omitted from the projection. */
139
+ readonly SELECT_FIELD_MISSING: "a requested select field is dropped from the projection";
124
140
  /**
125
141
  * The document declares a field sortable that the backend rejects.
126
142
  *
@@ -1 +1 @@
1
- {"version":3,"file":"defects.d.ts","sourceRoot":"","sources":["../../src/reference/defects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,OAAO;IACnB,iFAAiF;;IAEjF,qFAAqF;;IAErF,kEAAkE;;IAElE,iFAAiF;;IAEjF,wEAAwE;;IAExE,6CAA6C;;IAE7C,mFAAmF;;IAEnF;;;;;;OAMG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;OAMG;;IAGH;;;;OAIG;;IAGH;;;OAGG;;IAGH;;;;;;;;OAQG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;;OAQG;;IAEH;;;;;OAKG;;IAEH,wDAAwD;;IAExD,gDAAgD;;IAEhD,iDAAiD;;IAEjD,yDAAyD;;IAEzD,sDAAsD;;IAEtD,6DAA6D;;IAE7D,yDAAyD;;IAEzD,iDAAiD;;IAEjD,gDAAgD;;IAEhD,uDAAuD;;IAEvD,iEAAiE;;IAEjE,2EAA2E;;IAE3E,kDAAkD;;IAElD,oDAAoD;;IAEpD,4DAA4D;;IAE5D;;;;;OAKG;;IAEH;;;;;OAKG;;IAEH,6DAA6D;;IAE7D,gDAAgD;;IAEhD,kDAAkD;;IAElD,8DAA8D;;IAE9D,6DAA6D;;IAE7D,+DAA+D;;IAE/D,8DAA8D;;IAE9D,+DAA+D;;IAE/D,yFAAyF;;IAEzF,uFAAuF;;IAEvF,mEAAmE;;IAEnE,+EAA+E;;IAE/E,mDAAmD;;IAEnD,2EAA2E;;IAE3E;;;;;;;OAOG;;IAEH;;;OAGG;;IAEH;;;OAGG;;IAEH;;;;OAIG;;IAEH;;;;;;OAMG;;IAEH,4EAA4E;;IAE5E,6DAA6D;;CAEpD,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAA;AAE7C,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,KAAK,GAAE,SAAS,MAAM,EAAO;IAIzC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAUpD,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAI9B,IAAI,IAAI,UAAU,EAAE;CAGpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D"}
1
+ {"version":3,"file":"defects.d.ts","sourceRoot":"","sources":["../../src/reference/defects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,OAAO;IACnB,iFAAiF;;IAEjF,qFAAqF;;IAErF,kEAAkE;;IAElE,iFAAiF;;IAEjF,wEAAwE;;IAExE,6CAA6C;;IAE7C,mFAAmF;;IAEnF;;;;;;OAMG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;OAMG;;IAGH;;;;OAIG;;IAGH;;;OAGG;;IAGH;;;;;;;;OAQG;;IAEH;;;;;;;OAOG;;IAEH,gDAAgD;;IAEhD,iCAAiC;;IAEjC,oDAAoD;;IAEpD,mCAAmC;;IAEnC,6EAA6E;;IAE7E,qCAAqC;;IAErC,4CAA4C;;IAE5C,+DAA+D;;IAE/D;;;;;;OAMG;;IAEH;;;;;;;;OAQG;;IAEH;;;;;OAKG;;IAEH,wDAAwD;;IAExD,gDAAgD;;IAEhD,iDAAiD;;IAEjD,yDAAyD;;IAEzD,sDAAsD;;IAEtD,6DAA6D;;IAE7D,yDAAyD;;IAEzD,iDAAiD;;IAEjD,gDAAgD;;IAEhD,uDAAuD;;IAEvD,iEAAiE;;IAEjE,2EAA2E;;IAE3E,kDAAkD;;IAElD,oDAAoD;;IAEpD,4DAA4D;;IAE5D;;;;;OAKG;;IAEH;;;;;OAKG;;IAEH,6DAA6D;;IAE7D,gDAAgD;;IAEhD,kDAAkD;;IAElD,8DAA8D;;IAE9D,6DAA6D;;IAE7D,+DAA+D;;IAE/D,8DAA8D;;IAE9D,+DAA+D;;IAE/D,yFAAyF;;IAEzF,uFAAuF;;IAEvF,mEAAmE;;IAEnE,+EAA+E;;IAE/E,mDAAmD;;IAEnD,2EAA2E;;IAE3E;;;;;;;OAOG;;IAEH;;;OAGG;;IAEH;;;OAGG;;IAEH;;;;OAIG;;IAEH;;;;;;OAMG;;IAEH,4EAA4E;;IAE5E,6DAA6D;;CAEpD,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAA;AAE7C,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,KAAK,GAAE,SAAS,MAAM,EAAO;IAIzC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAUpD,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAI9B,IAAI,IAAI,UAAU,EAAE;CAGpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D"}
@@ -121,6 +121,22 @@ export const DEFECTS = {
121
121
  * is the only thing that reads the claim and then tries it.
122
122
  */
123
123
  SPEC_OVERCLAIMS_FILTERABLE: "x-query declares a field filterable that the backend rejects",
124
+ /** `in.(a,b)` only honours the first member. */
125
+ FILTER_IN_FIRST_ONLY: "in() matches only the first listed value",
126
+ /** `gte` is compiled as `gt`. */
127
+ FILTER_GTE_IS_GT: "gte is implemented as gt",
128
+ /** `ilike` is compiled as case-sensitive `like`. */
129
+ FILTER_ILIKE_IS_LIKE: "ilike is implemented as like",
130
+ /** `is.null` matches every row. */
131
+ FILTER_IS_NULL_MATCHES_ALL: "is.null matches every row",
132
+ /** An operator outside the field's allowlist is ignored (200 + full set). */
133
+ FILTER_ILLEGAL_OP_IGNORED: "an illegal filter operator is accepted and ignored",
134
+ /** Numeric sort compares as text. */
135
+ SORT_NUMERIC_AS_TEXT: "a numeric sortable field is ordered lexicographically",
136
+ /** Only the first order key is honoured. */
137
+ SORT_MULTI_KEY_IGNORED: "the second sort key is ignored",
138
+ /** A requested select field is omitted from the projection. */
139
+ SELECT_FIELD_MISSING: "a requested select field is dropped from the projection",
124
140
  /**
125
141
  * The document declares a field sortable that the backend rejects.
126
142
  *
@@ -1 +1 @@
1
- {"version":3,"file":"defects.js","sourceRoot":"","sources":["../../src/reference/defects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defects.js","sourceRoot":"","sources":["../../src/reference/defects.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,15 @@ export interface EntityDef {
35
35
  fields: FieldDef[];
36
36
  defaultLimit: number;
37
37
  maxLimit: number;
38
+ /** Optional closed filter/select catalog for conformance of declared-or-skip checks. */
39
+ filterCatalog?: {
40
+ emptyIn?: "reject" | "match-none";
41
+ maxInValues?: number;
42
+ maxFilterConditions?: number;
43
+ opsByField?: Record<string, readonly string[]>;
44
+ selectUnknown?: "reject" | "ignore";
45
+ aliases?: Record<string, string>;
46
+ };
38
47
  }
39
48
  export declare const TABLE: EntityDef;
40
49
  export declare const ROW: EntityDef;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/reference/model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CAChB;AAOD,eAAO,MAAM,KAAK,EAAE,SA4CnB,CAAA;AAED,eAAO,MAAM,GAAG,EAAE,SAqCjB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,SA6DjB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,SAAS,SAAS,EAAsB,CAAA;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,eAAe,CAAA;AAE7C,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,QAAQ,GAAG,MAAM,EAAE,CAE5E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAMxF"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/reference/model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,wFAAwF;IACxF,aAAa,CAAC,EAAE;QACf,OAAO,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAA;QACjC,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;QAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;QAC9C,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;QACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAChC,CAAA;CACD;AAOD,eAAO,MAAM,KAAK,EAAE,SAgEnB,CAAA;AAED,eAAO,MAAM,GAAG,EAAE,SAqCjB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,SA6DjB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,SAAS,SAAS,EAAsB,CAAA;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,eAAe,CAAA;AAE7C,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,QAAQ,GAAG,MAAM,EAAE,CAE5E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAMxF"}
@@ -52,6 +52,26 @@ export const TABLE = {
52
52
  parents: ["project_id"],
53
53
  plural: "tables",
54
54
  softDeleteField: "deleted_at",
55
+ filterCatalog: {
56
+ aliases: { ne: "neq" },
57
+ emptyIn: "match-none",
58
+ maxFilterConditions: 20,
59
+ maxInValues: 100,
60
+ opsByField: {
61
+ created_at: ["eq", "gt", "gte", "lt", "lte", "is"],
62
+ deleted_at: ["eq", "is"],
63
+ description: ["eq", "neq", "like", "ilike", "is"],
64
+ id: ["eq", "neq", "ne", "in", "nin"],
65
+ name: ["eq", "neq", "like", "ilike", "in"],
66
+ position: ["eq", "neq", "gt", "gte", "lt", "lte", "in"],
67
+ project_id: ["eq", "neq", "in"],
68
+ row_count: ["eq", "gt", "gte", "lt", "lte"],
69
+ slug: ["eq", "neq", "like", "ilike", "in"],
70
+ status: ["eq", "neq", "in", "nin"],
71
+ updated_at: ["eq", "gt", "gte", "lt", "lte", "is"],
72
+ },
73
+ selectUnknown: "reject",
74
+ },
55
75
  };
56
76
  export const ROW = {
57
77
  collectionPath: "/v1/projects/{project_id}/tables/{table_id}/rows",
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/reference/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/reference/model.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,11 @@ export interface QueryOptions {
27
27
  maxLimit: number;
28
28
  /** Fields the document still declares selectable that the backend has stopped honouring. */
29
29
  excludedSelect?: readonly string[];
30
+ emptyIn?: "reject" | "match-none";
31
+ maxInValues?: number;
32
+ maxFilterConditions?: number;
33
+ allowedOpsByField?: Record<string, readonly string[]>;
34
+ selectUnknown?: "reject" | "ignore";
30
35
  }
31
36
  export interface QueryResult {
32
37
  items: Row[];
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/reference/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAM7C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEvD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEzC,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,4FAA4F;IAC5F,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AAED,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACb;AA8ND,wBAAgB,QAAQ,CACvB,MAAM,EAAE,SAAS,GAAG,EAAE,EACtB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,SAAS;AAClB;2EAC2E;AAC3E,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS,GACzC,WAAW,CAyFb;AAoBD,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/reference/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAM7C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEvD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEzC,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,4FAA4F;IAC5F,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,OAAO,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACrD,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CACnC;AAED,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACb;AAyRD,wBAAgB,QAAQ,CACvB,MAAM,EAAE,SAAS,GAAG,EAAE,EACtB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,SAAS;AAClB;2EAC2E;AAC3E,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS,GACzC,WAAW,CAkGb;AAgCD,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD"}