@lovrozagar/oat 0.4.0 → 0.6.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.
Files changed (55) hide show
  1. package/README.md +57 -33
  2. package/bin/oat.js +3 -1
  3. package/dist/cli.js +54 -12
  4. package/dist/config/define-config.d.ts +17 -3
  5. package/dist/config/define-config.d.ts.map +1 -1
  6. package/dist/config/define-config.js.map +1 -1
  7. package/dist/index.d.ts +2 -1
  8. package/dist/index.js +1 -0
  9. package/dist/reference/defects.d.ts +14 -0
  10. package/dist/reference/defects.d.ts.map +1 -1
  11. package/dist/reference/defects.js +14 -0
  12. package/dist/reference/defects.js.map +1 -1
  13. package/dist/reference/http.d.ts.map +1 -1
  14. package/dist/reference/http.js +4 -1
  15. package/dist/reference/http.js.map +1 -1
  16. package/dist/report/matrix.d.ts.map +1 -1
  17. package/dist/report/matrix.js +2 -0
  18. package/dist/report/matrix.js.map +1 -1
  19. package/dist/runtime/async.d.ts +1 -1
  20. package/dist/runtime/async.d.ts.map +1 -1
  21. package/dist/runtime/async.js +10 -3
  22. package/dist/runtime/async.js.map +1 -1
  23. package/dist/runtime/auth.d.ts +23 -3
  24. package/dist/runtime/auth.d.ts.map +1 -1
  25. package/dist/runtime/auth.js +111 -27
  26. package/dist/runtime/auth.js.map +1 -1
  27. package/dist/runtime/checks.d.ts +2 -0
  28. package/dist/runtime/checks.d.ts.map +1 -1
  29. package/dist/runtime/checks.js +285 -1
  30. package/dist/runtime/checks.js.map +1 -1
  31. package/dist/runtime/client.d.ts +17 -1
  32. package/dist/runtime/client.d.ts.map +1 -1
  33. package/dist/runtime/client.js +83 -58
  34. package/dist/runtime/client.js.map +1 -1
  35. package/dist/runtime/fixture.d.ts.map +1 -1
  36. package/dist/runtime/fixture.js +4 -3
  37. package/dist/runtime/fixture.js.map +1 -1
  38. package/dist/runtime/payloads.d.ts +20 -0
  39. package/dist/runtime/payloads.d.ts.map +1 -0
  40. package/dist/runtime/payloads.js +250 -0
  41. package/dist/runtime/payloads.js.map +1 -0
  42. package/dist/runtime/run.d.ts +0 -6
  43. package/dist/runtime/run.d.ts.map +1 -1
  44. package/dist/runtime/run.js +17 -19
  45. package/dist/runtime/run.js.map +1 -1
  46. package/dist/runtime/teardown.js +1 -1
  47. package/dist/runtime/teardown.js.map +1 -1
  48. package/dist/runtime/world.js +2 -2
  49. package/dist/runtime/world.js.map +1 -1
  50. package/dist/spec/load.d.ts +2 -0
  51. package/dist/spec/load.d.ts.map +1 -1
  52. package/dist/spec/load.js +12 -0
  53. package/dist/spec/load.js.map +1 -1
  54. package/labs/oob-auth.config.ts +11 -1
  55. package/package.json +1 -1
@@ -8,6 +8,16 @@
8
8
  */
9
9
  import { requestContent } from "../spec/collection.js";
10
10
  import { encodeRequest } from "./body.js";
11
+ export const DEFAULT_REFRESH_BUFFER_MS = 30_000;
12
+ /** Signup acquire without `auth.refresh` — re-running `steps` would register again. */
13
+ export class AuthRefreshRequiredError extends Error {
14
+ code = "AUTH_REFRESH_REQUIRED";
15
+ constructor(principalId) {
16
+ super(`oat: principal "${principalId}" cannot refresh — its acquire steps register a new account, ` +
17
+ "and re-running them is not a refresh. Declare auth.refresh with the refresh-token operation.");
18
+ this.name = "AuthRefreshRequiredError";
19
+ }
20
+ }
11
21
  export function readPath(body, path) {
12
22
  let node = body;
13
23
  for (const segment of path
@@ -60,11 +70,11 @@ export function jwtExpiryMs(credential) {
60
70
  const claims = jwtClaims(credential);
61
71
  return typeof claims?.exp === "number" ? claims.exp * 1000 : null;
62
72
  }
63
- /** Runs the chain once, returning the credential and everything bound along the way. */
64
- export async function runAcquireChain(spec, context) {
65
- const scope = {};
73
+ /** Runs an auth step list against an existing scope, returning the credential and bindings. */
74
+ export async function runAuthSteps(steps, spec, context, initialScope = {}) {
75
+ const scope = { ...initialScope };
66
76
  let last;
67
- for (const [index, step] of spec.steps.entries()) {
77
+ for (const [index, step] of steps.entries()) {
68
78
  const stepBind = "bind" in step ? step.bind : undefined;
69
79
  for (const [name, literal] of Object.entries(stepBind ?? {})) {
70
80
  scope[name] = String(interpolate(literal, scope));
@@ -81,6 +91,8 @@ export async function runAcquireChain(spec, context) {
81
91
  ...(request.contentType === undefined ? {} : { contentType: request.contentType }),
82
92
  ...(request.headers === undefined ? {} : { headers: request.headers }),
83
93
  ...(request.query === undefined ? {} : { query: request.query }),
94
+ /* Auth hops must not trigger refresh / 401-retry — that is how a refresh deadlocks. */
95
+ skipAuthRefresh: true,
84
96
  });
85
97
  const acceptable = ("expect" in step ? step.expect : undefined) ?? [];
86
98
  const ok = acceptable.length > 0 ? acceptable.includes(last.status) : last.status < 300;
@@ -124,6 +136,39 @@ export async function runAcquireChain(spec, context) {
124
136
  }
125
137
  return { credential, expiresAt: computeExpiry(spec, last, credential), scope };
126
138
  }
139
+ /** Runs the acquire chain once, returning the credential and everything bound along the way. */
140
+ export async function runAcquireChain(spec, context) {
141
+ return runAuthSteps(spec.steps, spec, context);
142
+ }
143
+ const REGISTER_LIKE = /register|sign[-_]?up/i;
144
+ function stepLooksLikeRegister(step, model) {
145
+ if ("outOfBand" in step)
146
+ return false;
147
+ if (isOperationStep(step)) {
148
+ if (REGISTER_LIKE.test(step.operationId))
149
+ return true;
150
+ const op = model.byOperationId.get(step.operationId);
151
+ if (op === undefined)
152
+ return false;
153
+ return op.freshPrincipal || REGISTER_LIKE.test(op.path);
154
+ }
155
+ if (isRequestStep(step))
156
+ return REGISTER_LIKE.test(step.path);
157
+ return false;
158
+ }
159
+ /** First HTTP hop looks like signup — re-running `steps` would 409, not refresh. */
160
+ export function acquireLooksLikeRegister(spec, model) {
161
+ const firstHttp = spec.steps.find((step) => !("outOfBand" in step));
162
+ return firstHttp !== undefined && stepLooksLikeRegister(firstHttp, model);
163
+ }
164
+ function headerOf(headers, name) {
165
+ const want = name.toLowerCase();
166
+ for (const [key, value] of Object.entries(headers)) {
167
+ if (key.toLowerCase() === want)
168
+ return value;
169
+ }
170
+ return undefined;
171
+ }
127
172
  function computeExpiry(spec, last, credential) {
128
173
  /* Prefer what the API states, then what the credential itself carries, then the configured
129
174
  * fallback. Guessing an expiry that is too long means requests start failing mid-run for
@@ -223,37 +268,76 @@ async function resolveOutOfBand(context, address, kind) {
223
268
  /** Wraps a chain in a credential that refreshes itself before it expires. */
224
269
  export async function createPrincipal(id, spec, context) {
225
270
  let credential = "";
226
- let expiresAt = null;
227
271
  let scope = {};
228
- const acquire = async () => {
229
- const result = await runAcquireChain(spec, { ...context, principalId: id });
230
- credential = result.credential;
231
- expiresAt = result.expiresAt;
232
- scope = result.scope;
233
- };
234
- await acquire();
272
+ const issued = new Set();
235
273
  const header = spec.header ?? "authorization";
236
274
  const template = spec.template ?? "Bearer {credential}";
275
+ const bufferMs = spec.refreshBufferMs ?? DEFAULT_REFRESH_BUFFER_MS;
276
+ const ctx = { ...context, principalId: id };
277
+ const authValue = (token) => template.replace("{credential}", token);
237
278
  const runtime = {
238
- /* Whatever the flow bound as an address is what teardown will cascade on. */
239
- address: scope.address ?? scope.email ?? null,
240
- expiresAt,
241
- headers: () => ({ [header]: template.replace("{credential}", credential) }),
279
+ address: null,
280
+ expiresAt: null,
281
+ headers: () => ({ [header]: authValue(credential) }),
242
282
  id,
243
- reacquire: acquire,
244
- /* Refresh at three quarters of the lifetime, before dispatch rather than mid-flight, so a
245
- * run stays reproducible and no request is ever retried for timing reasons alone. */
246
- refreshIfStale: async () => {
247
- if (expiresAt === null)
248
- return;
249
- const issuedWindow = expiresAt - Date.now();
250
- if (issuedWindow > 0 && issuedWindow < 0.25 * (spec.assumeTtlMs ?? 300_000))
251
- await acquire();
252
- else if (issuedWindow <= 0)
253
- await acquire();
283
+ matches: (headers) => {
284
+ const sent = headerOf(headers, header);
285
+ return sent !== undefined && issued.has(sent);
254
286
  },
287
+ reacquire: async () => undefined,
288
+ refreshIfStale: async () => undefined,
255
289
  scope,
256
290
  };
291
+ const apply = (result) => {
292
+ credential = result.credential;
293
+ scope = result.scope;
294
+ runtime.expiresAt = result.expiresAt;
295
+ runtime.scope = result.scope;
296
+ runtime.address = result.scope.address ?? result.scope.email ?? runtime.address;
297
+ issued.add(authValue(credential));
298
+ };
299
+ apply(await runAuthSteps(spec.steps, spec, ctx));
300
+ let inflight = null;
301
+ let refreshing = false;
302
+ const doRefresh = async () => {
303
+ refreshing = true;
304
+ try {
305
+ if (spec.refresh !== undefined) {
306
+ apply(await runAuthSteps(spec.refresh.steps, spec, ctx, scope));
307
+ return;
308
+ }
309
+ if (acquireLooksLikeRegister(spec, ctx.model)) {
310
+ throw new AuthRefreshRequiredError(id);
311
+ }
312
+ apply(await runAuthSteps(spec.steps, spec, ctx));
313
+ }
314
+ finally {
315
+ refreshing = false;
316
+ }
317
+ };
318
+ runtime.refreshIfStale = async (force = false) => {
319
+ /* Re-entrant from an in-flight refresh hop: do not start a second refresh. */
320
+ if (refreshing)
321
+ return;
322
+ if (!force) {
323
+ /* Static-header / unknown expiry: never proactive. 401 still passes force=true. */
324
+ if (runtime.expiresAt === null)
325
+ return;
326
+ if (runtime.expiresAt - Date.now() > bufferMs)
327
+ return;
328
+ }
329
+ if (inflight !== null)
330
+ return inflight;
331
+ const pending = doRefresh().finally(() => {
332
+ if (inflight === pending)
333
+ inflight = null;
334
+ });
335
+ inflight = pending;
336
+ return pending;
337
+ };
338
+ runtime.reacquire = async () => {
339
+ apply(await runAuthSteps(spec.steps, spec, ctx));
340
+ };
257
341
  return runtime;
258
342
  }
259
343
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/runtime/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/runtime/auth.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,8 @@ export interface CheckContext {
44
44
  softDelete: string | null;
45
45
  invite: InviteSpec | null;
46
46
  auth: () => Record<string, string>;
47
+ /** Countdown / 401 refresh for the writer principal. Bound onto the client as well. */
48
+ refreshIfStale?: (force?: boolean) => Promise<void>;
47
49
  /**
48
50
  * Every configured principal, primary first. Isolation checks still use `altAuth` (the first
49
51
  * actor whose scope is a different tenant). Lattice checks walk this list by `rank`.
@@ -1 +1 @@
1
- {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../src/runtime/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../src/runtime/checks.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,9 @@
7
7
  */
8
8
  import { filterTerm, selectTerm, sortTerm } from "../spec/conventions.js";
9
9
  import { requestContent } from "../spec/collection.js";
10
+ import { pathTemplateMatches } from "../spec/load.js";
10
11
  import { encodeForOperation } from "./body.js";
12
+ import { STRING_PAYLOADS, payloadFits } from "./payloads.js";
11
13
  import { describeFeatureGate, isDocumentedFeatureGateDenial, reportFeatureGateSchemaDrift } from "./feature-gate.js";
12
14
  import { driveAsync } from "./async.js";
13
15
  import { buildCohort } from "./fixture.js";
@@ -3372,7 +3374,7 @@ const asyncReachesTerminalState = {
3372
3374
  ctx.findings.gap(this.id, ctx.entityName, `${op.operationId} could not be started`, `returned ${start.status}; the async lifecycle after it is untested`);
3373
3375
  continue;
3374
3376
  }
3375
- const outcome = await driveAsync(ctx.client, spec, start.responseBody, ctx.scope, ctx.auth());
3377
+ const outcome = await driveAsync(ctx.client, spec, start.responseBody, ctx.scope, ctx.auth, ctx.refreshIfStale);
3376
3378
  if (outcome.timedOut) {
3377
3379
  ctx.findings.backend(this.id, ctx.entityName, `${op.operationId} never reached a terminal state`, `polled ${spec.poll} ${outcome.polls} time(s) over ${Math.round(outcome.elapsedMs)}ms ` +
3378
3380
  `without satisfying "${spec.until ?? "any terminal state"}". A job that neither ` +
@@ -3432,6 +3434,284 @@ const asyncReceiptIsResolvable = {
3432
3434
  }
3433
3435
  },
3434
3436
  };
3437
+ const ASCII_PAYLOAD_PROBE = "oat-payload-probe";
3438
+ function pickPayloadField(ctx, op) {
3439
+ const schema = requestSchemaOf(ctx, op);
3440
+ const properties = (schema?.properties ?? {});
3441
+ const immutable = new Set([
3442
+ ...(ctx.updateOp?.immutable ?? []),
3443
+ ...(ctx.updateOp?.generated ?? []),
3444
+ ...(ctx.createOp?.generated ?? []),
3445
+ ctx.identity,
3446
+ ]);
3447
+ let best = null;
3448
+ for (const [name, declared] of Object.entries(properties)) {
3449
+ if (immutable.has(name) || /_at$|_id$/.test(name))
3450
+ continue;
3451
+ if (declared === null || typeof declared !== "object")
3452
+ continue;
3453
+ if (declared.readOnly === true)
3454
+ continue;
3455
+ const union = declared.oneOf ?? declared.anyOf;
3456
+ const branch = Array.isArray(union)
3457
+ ? union.find((candidate) => candidate !== null && typeof candidate === "object" && candidate.type === "string")
3458
+ : undefined;
3459
+ const stringSchema = branch ?? declared;
3460
+ const type = stringSchema.type;
3461
+ const isString = type === "string" || (Array.isArray(type) && type.includes("string"));
3462
+ if (!isString && type !== undefined)
3463
+ continue;
3464
+ if (Array.isArray(stringSchema.enum))
3465
+ continue;
3466
+ if (typeof stringSchema.pattern === "string")
3467
+ continue;
3468
+ if (typeof stringSchema.format === "string")
3469
+ continue;
3470
+ const maxLength = typeof stringSchema.maxLength === "number" ? stringSchema.maxLength : undefined;
3471
+ const minLength = typeof stringSchema.minLength === "number" ? stringSchema.minLength : undefined;
3472
+ if (maxLength !== undefined && maxLength < 8)
3473
+ continue;
3474
+ const nullable = declared.nullable === true ||
3475
+ (Array.isArray(declared.type) && declared.type.includes("null")) ||
3476
+ (Array.isArray(union) &&
3477
+ union.some((candidate) => candidate !== null && typeof candidate === "object" && candidate.type === "null"));
3478
+ const score = (nullable ? 1000 : 0) + (maxLength ?? 1024);
3479
+ if (best === null || score > best.score)
3480
+ best = { maxLength, minLength, name, score };
3481
+ }
3482
+ return best;
3483
+ }
3484
+ const stringPayloadSurvives = {
3485
+ applicable: (ctx) => ctx.readOp !== undefined &&
3486
+ ctx.records.length > 0 &&
3487
+ (ctx.updateOp !== undefined || (ctx.createOp !== undefined && ctx.deleteOp !== undefined)),
3488
+ dependsOn: ["list.read-after-write"],
3489
+ id: "payload.string-survives",
3490
+ mutates: true,
3491
+ needs: "an update or create+delete, an item route, and a writable unconstrained string",
3492
+ async run(ctx) {
3493
+ const writeOp = ctx.updateOp ?? ctx.createOp;
3494
+ const readOp = ctx.readOp;
3495
+ if (writeOp === undefined || readOp === undefined)
3496
+ return;
3497
+ const field = pickPayloadField(ctx, writeOp);
3498
+ if (field === null) {
3499
+ return ctx.findings.unresolved(this.id, ctx.entityName, "no writable unconstrained string field is available to probe payloads against");
3500
+ }
3501
+ const viaPatch = ctx.updateOp !== undefined;
3502
+ const target = ctx.records.at(-1) ?? ctx.records[0];
3503
+ if (target === undefined)
3504
+ return;
3505
+ const id = String(target[ctx.identity]);
3506
+ const params = { ...ctx.scope, ...itemParamFor(ctx, id) };
3507
+ const original = target[field.name];
3508
+ const writeField = async (value, recordId) => {
3509
+ if (viaPatch && ctx.updateOp !== undefined) {
3510
+ return ctx.client.request("PATCH", fillPath(ctx.updateOp.path, { ...ctx.scope, ...itemParamFor(ctx, recordId) }), {
3511
+ body: { [field.name]: value },
3512
+ headers: ctx.auth(),
3513
+ });
3514
+ }
3515
+ const createOp = ctx.createOp;
3516
+ if (createOp === undefined)
3517
+ throw new Error("payload probe has no write operation");
3518
+ const body = { ...validBody(ctx, requestSchemaOf(ctx, createOp) ?? {}), [field.name]: value };
3519
+ return ctx.client.request("POST", fillPath(createOp.path, ctx.scope), { body, headers: ctx.auth() });
3520
+ };
3521
+ const readField = async (recordId) => {
3522
+ const exchange = await ctx.client.get(fillPath(readOp.path, { ...ctx.scope, ...itemParamFor(ctx, recordId) }), {
3523
+ headers: ctx.auth(),
3524
+ });
3525
+ const body = (exchange.responseBody ?? {});
3526
+ return { exchange, value: body[field.name] };
3527
+ };
3528
+ const remove = async (recordId) => {
3529
+ if (viaPatch || ctx.deleteOp === undefined)
3530
+ return;
3531
+ await ctx.client.request("DELETE", fillPath(ctx.deleteOp.path, { ...ctx.scope, ...itemParamFor(ctx, recordId) }), {
3532
+ headers: ctx.auth(),
3533
+ });
3534
+ };
3535
+ const identityOf = (exchange) => {
3536
+ const body = exchange.responseBody;
3537
+ if (body === null || typeof body !== "object")
3538
+ return undefined;
3539
+ const value = body[ctx.identity];
3540
+ return value === undefined || value === null ? undefined : String(value);
3541
+ };
3542
+ try {
3543
+ const control = await writeField(ASCII_PAYLOAD_PROBE, id);
3544
+ if (standDownForFeatureGate(ctx, writeOp, control, this.id))
3545
+ return;
3546
+ if (control.status === 401 || control.status === 403) {
3547
+ return ctx.findings.unresolved(this.id, ctx.entityName, `the ASCII control write returned ${control.status}, so later refusals cannot be attributed to the payload`);
3548
+ }
3549
+ if (control.status >= 400 && control.status < 500) {
3550
+ return ctx.findings.unresolved(this.id, ctx.entityName, `the ASCII control write was rejected with ${control.status}, so the field refuses ordinary strings`);
3551
+ }
3552
+ if (control.status >= 500) {
3553
+ ctx.findings.backend(this.id, ctx.entityName, "an ordinary ASCII write returned 5xx", `PATCH/POST of "${ASCII_PAYLOAD_PROBE}" on "${field.name}" returned ${control.status}.`, [control]);
3554
+ return;
3555
+ }
3556
+ const controlId = viaPatch ? id : identityOf(control);
3557
+ if (controlId === undefined) {
3558
+ return ctx.findings.unresolved(this.id, ctx.entityName, "the ASCII control write did not return an identity, so the value could not be read back");
3559
+ }
3560
+ const controlRead = await readField(controlId);
3561
+ if (!viaPatch)
3562
+ await remove(controlId);
3563
+ if (controlRead.value !== ASCII_PAYLOAD_PROBE) {
3564
+ ctx.findings.backend(this.id, ctx.entityName, "an ordinary ASCII write did not persist exactly", `"${field.name}" was sent ${JSON.stringify(ASCII_PAYLOAD_PROBE)} and read back ` +
3565
+ `${JSON.stringify(controlRead.value)}.`, [control, controlRead.exchange]);
3566
+ return;
3567
+ }
3568
+ const failed = [];
3569
+ const evidence = [];
3570
+ let lostAuth = false;
3571
+ for (const payload of STRING_PAYLOADS) {
3572
+ if (!payloadFits(payload.value, field.maxLength, field.minLength))
3573
+ continue;
3574
+ const written = await writeField(payload.value, id);
3575
+ if (standDownForFeatureGate(ctx, writeOp, written, this.id))
3576
+ return;
3577
+ if (written.status === 401) {
3578
+ const retry = await writeField(ASCII_PAYLOAD_PROBE, id);
3579
+ if (retry.status >= 400) {
3580
+ lostAuth = true;
3581
+ break;
3582
+ }
3583
+ failed.push(`${payload.id} (${payload.why}): sent ${JSON.stringify(payload.value)}, got HTTP 401`);
3584
+ if (evidence.length < 4)
3585
+ evidence.push(written);
3586
+ continue;
3587
+ }
3588
+ if (written.status === 404 || written.status === 409 || written.status === 415 || written.status === 429) {
3589
+ continue;
3590
+ }
3591
+ if (written.status >= 400 && written.status < 500) {
3592
+ failed.push(`${payload.id} (${payload.why}): sent ${JSON.stringify(payload.value)}, got HTTP ${written.status}`);
3593
+ if (evidence.length < 4)
3594
+ evidence.push(written);
3595
+ if (!viaPatch) {
3596
+ const extra = identityOf(written);
3597
+ if (extra !== undefined)
3598
+ await remove(extra);
3599
+ }
3600
+ continue;
3601
+ }
3602
+ if (written.status >= 500) {
3603
+ failed.push(`${payload.id} (${payload.why}): sent ${JSON.stringify(payload.value)}, got HTTP ${written.status}`);
3604
+ if (evidence.length < 4)
3605
+ evidence.push(written);
3606
+ continue;
3607
+ }
3608
+ const writtenId = viaPatch ? id : identityOf(written);
3609
+ if (writtenId === undefined) {
3610
+ failed.push(`${payload.id} (${payload.why}): write succeeded but returned no identity`);
3611
+ continue;
3612
+ }
3613
+ const got = await readField(writtenId);
3614
+ if (!viaPatch)
3615
+ await remove(writtenId);
3616
+ if (got.value !== payload.value) {
3617
+ failed.push(`${payload.id} (${payload.why}): sent ${JSON.stringify(payload.value)}, got ${JSON.stringify(got.value)}`);
3618
+ if (evidence.length < 4)
3619
+ evidence.push(written, got.exchange);
3620
+ }
3621
+ }
3622
+ if (lostAuth && failed.length === 0) {
3623
+ return ctx.findings.unresolved(this.id, ctx.entityName, "authentication failed in the middle of the payload catalog, so remaining cases were not run");
3624
+ }
3625
+ if (failed.length === 0)
3626
+ return;
3627
+ ctx.findings.backend(this.id, ctx.entityName, "a documented-valid string did not survive a write", `"${field.name}" failed ${failed.length} payload case(s): ${failed.slice(0, 6).join("; ")}` +
3628
+ (failed.length > 6 ? `; and ${failed.length - 6} more` : "") +
3629
+ ". The document accepts these as strings; refusing or mutating them is silent corruption " +
3630
+ "or an undocumented constraint.", evidence);
3631
+ }
3632
+ finally {
3633
+ if (viaPatch && ctx.updateOp !== undefined) {
3634
+ await ctx.client.request("PATCH", fillPath(ctx.updateOp.path, params), {
3635
+ body: { [field.name]: original ?? null },
3636
+ headers: ctx.auth(),
3637
+ });
3638
+ }
3639
+ }
3640
+ },
3641
+ };
3642
+ function resolveEntityOperation(ctx, method, pathname) {
3643
+ let best = null;
3644
+ for (const op of ctx.model.operations) {
3645
+ if (op.method !== method)
3646
+ continue;
3647
+ if (op.entity !== ctx.entityName)
3648
+ continue;
3649
+ if (!pathTemplateMatches(op.path, pathname))
3650
+ continue;
3651
+ if (best === null || op.path.length > best.path.length)
3652
+ best = op;
3653
+ }
3654
+ return best;
3655
+ }
3656
+ function statusIsDeclared(raw, status) {
3657
+ const keys = Object.keys(raw?.responses ?? {});
3658
+ if (keys.includes(String(status)))
3659
+ return true;
3660
+ return keys.includes(`${Math.floor(status / 100)}XX`);
3661
+ }
3662
+ function declaresConcreteStatuses(raw) {
3663
+ return Object.keys(raw?.responses ?? {}).some((key) => /^\d{3}$/.test(key) || /^[1-5]XX$/i.test(key));
3664
+ }
3665
+ const documentedStatusHonoured = {
3666
+ applicable: (ctx) => ctx.model.operations.some((op) => op.entity === ctx.entityName && op.action !== "create"),
3667
+ id: "response.status-is-documented",
3668
+ needs: "a modeled non-create operation on this entity",
3669
+ async run(ctx) {
3670
+ const createId = ctx.createOp?.operationId;
3671
+ const byOp = new Map();
3672
+ for (const exchange of ctx.client.transcript) {
3673
+ let pathname;
3674
+ try {
3675
+ pathname = new URL(exchange.url).pathname;
3676
+ }
3677
+ catch {
3678
+ continue;
3679
+ }
3680
+ const op = resolveEntityOperation(ctx, exchange.method, pathname);
3681
+ if (op === null)
3682
+ continue;
3683
+ if (op.operationId === createId || op.action === "create")
3684
+ continue;
3685
+ if (isDocumentedFeatureGateDenial(op, exchange.status, exchange.responseBody))
3686
+ continue;
3687
+ const raw = ctx.model.rawOperations.get(op.operationId);
3688
+ if (!declaresConcreteStatuses(raw))
3689
+ continue;
3690
+ if (statusIsDeclared(raw, exchange.status))
3691
+ continue;
3692
+ const seen = byOp.get(op.operationId) ?? [];
3693
+ seen.push(exchange);
3694
+ byOp.set(op.operationId, seen);
3695
+ }
3696
+ if (byOp.size === 0)
3697
+ return;
3698
+ const lines = [];
3699
+ const evidence = [];
3700
+ for (const [operationId, exchanges] of byOp) {
3701
+ const raw = ctx.model.rawOperations.get(operationId);
3702
+ const declared = Object.keys(raw?.responses ?? {})
3703
+ .filter((key) => key !== "default")
3704
+ .sort()
3705
+ .join(", ");
3706
+ const seen = [...new Set(exchanges.map((item) => item.status))].sort((a, b) => a - b);
3707
+ lines.push(`${operationId} returned ${seen.join(", ")}; the document declares ${declared || "no concrete status"}`);
3708
+ const first = exchanges[0];
3709
+ if (first !== undefined && evidence.length < 6)
3710
+ evidence.push(first);
3711
+ }
3712
+ ctx.findings.spec(this.id, ctx.entityName, "an operation returned a status the document does not declare", `${lines.join(". ")}. Clients generated from this document will not recognise the response.`, evidence);
3713
+ },
3714
+ };
3435
3715
  export const CHECKS = [
3436
3716
  /* foundations — did the write land, is it visible, and do the paging primitives work at all.
3437
3717
  * Everything below assumes these hold, so they must be evaluated first for cascade
@@ -3469,6 +3749,7 @@ export const CHECKS = [
3469
3749
  /* write semantics */
3470
3750
  patchMinimality,
3471
3751
  immutableRejected,
3752
+ stringPayloadSurvives,
3472
3753
  idempotentReplay,
3473
3754
  declaredInvalidationHappens,
3474
3755
  projectionsAgree,
@@ -3501,5 +3782,8 @@ export const CHECKS = [
3501
3782
  declaredEffectsOccur,
3502
3783
  asyncReachesTerminalState,
3503
3784
  asyncReceiptIsResolvable,
3785
+ /* After every other check has written to the transcript — create is owned by
3786
+ * create.status-matches-document. */
3787
+ documentedStatusHonoured,
3504
3788
  ];
3505
3789
  //# sourceMappingURL=checks.js.map