@lovrozagar/oat 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +65 -37
  2. package/bin/oat.js +3 -1
  3. package/dist/cli.js +50 -11
  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/runtime/async.d.ts +20 -5
  10. package/dist/runtime/async.d.ts.map +1 -1
  11. package/dist/runtime/async.js +65 -9
  12. package/dist/runtime/async.js.map +1 -1
  13. package/dist/runtime/auth.d.ts +23 -3
  14. package/dist/runtime/auth.d.ts.map +1 -1
  15. package/dist/runtime/auth.js +111 -27
  16. package/dist/runtime/auth.js.map +1 -1
  17. package/dist/runtime/checks.d.ts +2 -0
  18. package/dist/runtime/checks.d.ts.map +1 -1
  19. package/dist/runtime/checks.js +67 -20
  20. package/dist/runtime/checks.js.map +1 -1
  21. package/dist/runtime/client.d.ts +17 -1
  22. package/dist/runtime/client.d.ts.map +1 -1
  23. package/dist/runtime/client.js +86 -58
  24. package/dist/runtime/client.js.map +1 -1
  25. package/dist/runtime/fixture.d.ts.map +1 -1
  26. package/dist/runtime/fixture.js +86 -21
  27. package/dist/runtime/fixture.js.map +1 -1
  28. package/dist/runtime/run.d.ts +0 -6
  29. package/dist/runtime/run.d.ts.map +1 -1
  30. package/dist/runtime/run.js +17 -19
  31. package/dist/runtime/run.js.map +1 -1
  32. package/dist/runtime/sse.d.ts +17 -0
  33. package/dist/runtime/sse.d.ts.map +1 -0
  34. package/dist/runtime/sse.js +62 -0
  35. package/dist/runtime/sse.js.map +1 -0
  36. package/dist/runtime/teardown.js +1 -1
  37. package/dist/runtime/teardown.js.map +1 -1
  38. package/dist/runtime/world.js +2 -2
  39. package/dist/runtime/world.js.map +1 -1
  40. package/dist/spec/collection.d.ts +2 -0
  41. package/dist/spec/collection.d.ts.map +1 -1
  42. package/dist/spec/collection.js +16 -0
  43. package/dist/spec/collection.js.map +1 -1
  44. package/dist/spec/graph.d.ts +2 -0
  45. package/dist/spec/graph.d.ts.map +1 -1
  46. package/dist/spec/graph.js +2 -1
  47. package/dist/spec/graph.js.map +1 -1
  48. package/labs/oob-auth.config.ts +11 -1
  49. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Async operation support.
3
3
  *
4
- * For an operation declared with `x-async`, the HTTP response is a receipt, not an outcome. oat
5
- * drives the poll route to a terminal state and treats that payload as the real result — without
6
- * this, an extraction or batch API is testable only as "returned 202", which for such an API is
7
- * most of the surface.
4
+ * `x-async` means the HTTP response is a receipt, then oat polls. A `text/event-stream` body is
5
+ * the result itself — parse events, do not `JSON.parse` the raw string. Poll only when the
6
+ * stream ends without a terminal frame and `idFrom` resolved.
8
7
  */
8
+ import { sseEvents } from "./sse.js";
9
9
  import { fillPath } from "./world.js";
10
10
  /**
11
11
  * A single PostgREST-style predicate, reused here so `until`/`successWhen` speak the same
@@ -41,7 +41,7 @@ export function matchesPredicate(record, expression) {
41
41
  return false;
42
42
  }
43
43
  }
44
- function readPath(body, path) {
44
+ export function readPath(body, path) {
45
45
  let node = body;
46
46
  for (const segment of path
47
47
  .replace(/^\$\.?/, "")
@@ -53,6 +53,55 @@ function readPath(body, path) {
53
53
  }
54
54
  return node;
55
55
  }
56
+ function recordOf(data) {
57
+ if (data === null || typeof data !== "object" || Array.isArray(data))
58
+ return null;
59
+ return data;
60
+ }
61
+ /**
62
+ * Resolve `idFrom` against a JSON receipt, or against each SSE event's JSON `data` (first hit).
63
+ */
64
+ export function resolveAsyncId(receipt, idFrom) {
65
+ const events = sseEvents(receipt);
66
+ if (events !== null) {
67
+ for (const ev of events) {
68
+ const record = recordOf(ev.data);
69
+ if (record === null)
70
+ continue;
71
+ const found = readPath(record, idFrom);
72
+ if (found !== undefined && found !== null)
73
+ return found;
74
+ }
75
+ return undefined;
76
+ }
77
+ return readPath(receipt, idFrom);
78
+ }
79
+ /** Read job id and terminal state from SSE frames. `null` when the body is not a stream. */
80
+ export function inspectStreamAsync(receipt, spec) {
81
+ const events = sseEvents(receipt);
82
+ if (events === null)
83
+ return null;
84
+ let id;
85
+ let idRecord = null;
86
+ let terminal = null;
87
+ for (const ev of events) {
88
+ const record = recordOf(ev.data);
89
+ if (record === null)
90
+ continue;
91
+ if (id === undefined && spec.idFrom !== undefined) {
92
+ const found = readPath(record, spec.idFrom);
93
+ if (found !== undefined && found !== null) {
94
+ id = found;
95
+ idRecord = record;
96
+ }
97
+ }
98
+ const named = ev.event === "complete" || ev.event === "error";
99
+ const untilHit = spec.until !== undefined && matchesPredicate(record, spec.until);
100
+ if (named || untilHit)
101
+ terminal = record;
102
+ }
103
+ return { events, id, idRecord, terminal };
104
+ }
56
105
  /**
57
106
  * Polls until `until` matches, the timeout expires, or the poll route stops responding.
58
107
  *
@@ -60,12 +109,12 @@ function readPath(body, path) {
60
109
  * behave the same way, and the interval is fixed rather than exponential — the point is to
61
110
  * observe when the state changes, not to be gentle with an API oat is already hammering.
62
111
  */
63
- export async function driveAsync(client, spec, receipt, scope, headers) {
112
+ export async function driveAsync(client, spec, receipt, scope, headers, refreshIfStale) {
64
113
  const exchanges = [];
65
114
  const began = performance.now();
66
115
  const pollScope = { ...scope };
67
116
  if (spec.idFrom !== undefined) {
68
- const id = readPath(receipt, spec.idFrom);
117
+ const id = resolveAsyncId(receipt, spec.idFrom);
69
118
  if (id !== undefined && id !== null) {
70
119
  /* The receipt names the job; bind it to whichever poll-path parameter is unresolved. */
71
120
  const parameters = [...spec.poll.matchAll(/\{([^}]+)\}/g)].map((m) => m[1] ?? "");
@@ -79,7 +128,7 @@ export async function driveAsync(client, spec, receipt, scope, headers) {
79
128
  try {
80
129
  path = fillPath(template, pollScope);
81
130
  }
82
- catch (error) {
131
+ catch {
83
132
  return {
84
133
  elapsedMs: performance.now() - began,
85
134
  exchanges,
@@ -91,7 +140,14 @@ export async function driveAsync(client, spec, receipt, scope, headers) {
91
140
  }
92
141
  let polls = 0;
93
142
  while (performance.now() - began < spec.timeoutMs) {
94
- const exchange = await client.request(method, path, { headers });
143
+ /* Live headers + countdown refresh per poll: a long POST can outlive remaining TTL,
144
+ * and a snapshot taken before the loop would keep sending the dead Bearer. */
145
+ if (refreshIfStale !== undefined)
146
+ await refreshIfStale();
147
+ const exchange = await client.request(method, path, {
148
+ headers,
149
+ ...(refreshIfStale === undefined ? {} : { refreshIfStale }),
150
+ });
95
151
  exchanges.push(exchange);
96
152
  polls += 1;
97
153
  if (exchange.status < 300) {
@@ -1 +1 @@
1
- {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/runtime/async.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/runtime/async.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,16 @@
6
6
  * delivered outside HTTP — verification tokens, OTPs, magic links — comes from a hook the caller
7
7
  * writes. That hook is the entire backend-coupling surface.
8
8
  */
9
- import type { AuthFlow, Hooks } from "../config/define-config.ts";
9
+ import type { AuthFlow, AuthStep, Hooks } from "../config/define-config.ts";
10
10
  import type { SpecModel } from "../spec/graph.ts";
11
11
  import type { Client } from "./client.ts";
12
12
  export type AcquireSpec = AuthFlow;
13
+ export declare const DEFAULT_REFRESH_BUFFER_MS = 30000;
14
+ /** Signup acquire without `auth.refresh` — re-running `steps` would register again. */
15
+ export declare class AuthRefreshRequiredError extends Error {
16
+ readonly code: "AUTH_REFRESH_REQUIRED";
17
+ constructor(principalId: string);
18
+ }
13
19
  export interface PrincipalRuntime {
14
20
  id: string;
15
21
  headers: () => Record<string, string>;
@@ -17,10 +23,16 @@ export interface PrincipalRuntime {
17
23
  address: string | null;
18
24
  /** Values bound during acquisition — roots discovered from the credential live here too. */
19
25
  scope: Record<string, string>;
20
- refreshIfStale: () => Promise<void>;
26
+ /**
27
+ * Renew when `expiresAt - now <= refreshBufferMs`, or immediately when `force` is set (401).
28
+ * `expiresAt === null` never proactive-refreshes. Single-flight per principal.
29
+ */
30
+ refreshIfStale: (force?: boolean) => Promise<void>;
21
31
  /** Forces reacquisition, used when a control probe proves the credential died early. */
22
32
  reacquire: () => Promise<void>;
23
33
  expiresAt: number | null;
34
+ /** True when `headers` carry a credential this principal issued (current or previous). */
35
+ matches: (headers: Record<string, string>) => boolean;
24
36
  }
25
37
  export declare function readPath(body: unknown, path: string): unknown;
26
38
  /**
@@ -35,12 +47,20 @@ export interface AcquireContext {
35
47
  hooks: Hooks;
36
48
  principalId: string;
37
49
  }
38
- /** Runs the chain once, returning the credential and everything bound along the way. */
50
+ /** Runs an auth step list against an existing scope, returning the credential and bindings. */
51
+ export declare function runAuthSteps(steps: readonly AuthStep[], spec: AcquireSpec, context: AcquireContext, initialScope?: Record<string, string>): Promise<{
52
+ credential: string;
53
+ scope: Record<string, string>;
54
+ expiresAt: number | null;
55
+ }>;
56
+ /** Runs the acquire chain once, returning the credential and everything bound along the way. */
39
57
  export declare function runAcquireChain(spec: AcquireSpec, context: AcquireContext): Promise<{
40
58
  credential: string;
41
59
  scope: Record<string, string>;
42
60
  expiresAt: number | null;
43
61
  }>;
62
+ /** First HTTP hop looks like signup — re-running `steps` would 409, not refresh. */
63
+ export declare function acquireLooksLikeRegister(spec: AcquireSpec, model: SpecModel): boolean;
44
64
  /** Wraps a chain in a credential that refreshes itself before it expires. */
45
65
  export declare function createPrincipal(id: string, spec: AcquireSpec, context: AcquireContext): Promise<PrincipalRuntime>;
46
66
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/runtime/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAY,KAAK,EAA8B,MAAM,4BAA4B,CAAA;AAEvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,aAAa,CAAA;AAInD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAA;AAElC,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,wFAAwF;IACxF,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAe7D;AAkBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQ5E;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACnB;AAED,wFAAwF;AACxF,wBAAsB,eAAe,CACpC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAgF1F;AA0HD,6EAA6E;AAC7E,wBAAsB,eAAe,CACpC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAmC3B"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/runtime/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAA8B,MAAM,4BAA4B,CAAA;AAEvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,aAAa,CAAA;AAInD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAA;AAElC,eAAO,MAAM,yBAAyB,QAAS,CAAA;AAE/C,uFAAuF;AACvF,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAS;gBAEpC,WAAW,EAAE,MAAM;CAO/B;AAED,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B;;;OAGG;IACH,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,wFAAwF;IACxF,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,0FAA0F;IAC1F,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAA;CACrD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAe7D;AAkBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQ5E;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACnB;AAED,+FAA+F;AAC/F,wBAAsB,YAAY,CACjC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,EACvB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACvC,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAkF1F;AAED,gGAAgG;AAChG,wBAAsB,eAAe,CACpC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAE1F;AAgBD,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAGrF;AAkID,6EAA6E;AAC7E,wBAAsB,eAAe,CACpC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA4E3B"}
@@ -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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"}
@@ -11,7 +11,7 @@ import { pathTemplateMatches } from "../spec/load.js";
11
11
  import { encodeForOperation } from "./body.js";
12
12
  import { STRING_PAYLOADS, payloadFits } from "./payloads.js";
13
13
  import { describeFeatureGate, isDocumentedFeatureGateDenial, reportFeatureGateSchemaDrift } from "./feature-gate.js";
14
- import { driveAsync } from "./async.js";
14
+ import { driveAsync, inspectStreamAsync, matchesPredicate, resolveAsyncId } from "./async.js";
15
15
  import { buildCohort } from "./fixture.js";
16
16
  import { fillPath } from "./world.js";
17
17
  /* ------------------------------------------------------------------- helpers */
@@ -2607,8 +2607,14 @@ const inviteGrantsThenRevokes = {
2607
2607
  if (token === undefined) {
2608
2608
  return ctx.findings.unresolved(this.id, ctx.entityName, `invite response has no token at ${spec.tokenPointer}`);
2609
2609
  }
2610
- const accepted = await ctx.client.request(acceptOp.method, fillPath(acceptOp.path, { token }), {
2611
- headers: delegate.headers(),
2610
+ const acceptScope = { ...resource, token };
2611
+ const acceptBody = documentedJsonBody(ctx, acceptOp, acceptScope);
2612
+ const accepted = await ctx.client.request(acceptOp.method, fillPath(acceptOp.path, acceptScope), {
2613
+ ...(acceptBody === undefined ? {} : { body: acceptBody }),
2614
+ headers: {
2615
+ ...delegate.headers(),
2616
+ ...(acceptBody === undefined ? {} : { "content-type": "application/json" }),
2617
+ },
2612
2618
  });
2613
2619
  if (standDownForFeatureGate(ctx, acceptOp, accepted, this.id))
2614
2620
  return;
@@ -2623,7 +2629,15 @@ const inviteGrantsThenRevokes = {
2623
2629
  if (grantId === undefined) {
2624
2630
  return ctx.findings.unresolved(this.id, ctx.entityName, `invite response has no grant id at ${spec.grantPointer}, so revoke cannot be expressed`);
2625
2631
  }
2626
- const revoked = await ctx.client.request(revokeOp.method, fillPath(revokeOp.path, { ...resource, grant_id: grantId }), { headers: owner.headers() });
2632
+ const revokeScope = { ...resource, grant_id: grantId, token };
2633
+ const revokeBody = documentedJsonBody(ctx, revokeOp, revokeScope);
2634
+ const revoked = await ctx.client.request(revokeOp.method, fillPath(revokeOp.path, revokeScope), {
2635
+ ...(revokeBody === undefined ? {} : { body: revokeBody }),
2636
+ headers: {
2637
+ ...owner.headers(),
2638
+ ...(revokeBody === undefined ? {} : { "content-type": "application/json" }),
2639
+ },
2640
+ });
2627
2641
  if (standDownForFeatureGate(ctx, revokeOp, revoked, this.id))
2628
2642
  return;
2629
2643
  if (revoked.status >= 300) {
@@ -2978,7 +2992,7 @@ const successSchemaHonoured = {
2978
2992
  const exchange = createExchange(ctx);
2979
2993
  if (exchange === undefined)
2980
2994
  return;
2981
- if (isEventStream(exchange))
2995
+ if (isEventStream(exchange, createOp))
2982
2996
  return;
2983
2997
  if (!validator.documents(raw, exchange.status)) {
2984
2998
  return ctx.findings.unresolved(this.id, ctx.entityName, `create returned ${exchange.status}, which the document declares no schema for — ` +
@@ -3039,10 +3053,41 @@ function submittedFields(body) {
3039
3053
  return body;
3040
3054
  return {};
3041
3055
  }
3042
- function isEventStream(exchange) {
3056
+ /** Document first, then the live `Content-Type`. Media type is the stream tag — not `x-async`. */
3057
+ function isEventStream(exchange, op) {
3058
+ if (op?.eventStream === true)
3059
+ return true;
3043
3060
  const type = exchange.responseHeaders["content-type"] ?? "";
3044
3061
  return type.includes("text/event-stream");
3045
3062
  }
3063
+ /**
3064
+ * JSON request body declared on the operation, filled from known flow values.
3065
+ *
3066
+ * Path-only accept/revoke (`POST /invites/{token}` with no body) stay path-only.
3067
+ */
3068
+ function documentedJsonBody(ctx, op, fields) {
3069
+ const raw = ctx.model.rawOperations.get(op.operationId);
3070
+ const picked = raw === undefined ? null : requestContent(raw);
3071
+ if (picked === null || !picked.mediaType.includes("json"))
3072
+ return undefined;
3073
+ const properties = picked.schema.properties;
3074
+ if (properties !== null && typeof properties === "object") {
3075
+ const names = Object.keys(properties);
3076
+ if (names.length > 0) {
3077
+ const body = {};
3078
+ for (const name of names) {
3079
+ if (fields[name] !== undefined)
3080
+ body[name] = fields[name];
3081
+ }
3082
+ return body;
3083
+ }
3084
+ }
3085
+ if (fields.token !== undefined)
3086
+ return { token: fields.token };
3087
+ if (fields.grant_id !== undefined)
3088
+ return { grant_id: fields.grant_id };
3089
+ return { ...fields };
3090
+ }
3046
3091
  function findConstrained(schema, predicate) {
3047
3092
  const props = schema.properties;
3048
3093
  if (props === null || typeof props !== "object")
@@ -3374,7 +3419,21 @@ const asyncReachesTerminalState = {
3374
3419
  ctx.findings.gap(this.id, ctx.entityName, `${op.operationId} could not be started`, `returned ${start.status}; the async lifecycle after it is untested`);
3375
3420
  continue;
3376
3421
  }
3377
- const outcome = await driveAsync(ctx.client, spec, start.responseBody, ctx.scope, ctx.auth());
3422
+ const streamed = isEventStream(start, op);
3423
+ const fromStream = streamed ? inspectStreamAsync(start.responseBody, spec) : null;
3424
+ if (fromStream?.terminal !== null && fromStream?.terminal !== undefined) {
3425
+ if (spec.successWhen !== undefined && !matchesPredicate(fromStream.terminal, spec.successWhen)) {
3426
+ ctx.findings.gap(this.id, ctx.entityName, `${op.operationId} reached a non-success terminal state`, `terminal state did not satisfy "${spec.successWhen}"; downstream effects of ` +
3427
+ "this operation are untested");
3428
+ }
3429
+ continue;
3430
+ }
3431
+ const receipt = fromStream?.idRecord !== null && fromStream?.idRecord !== undefined ? fromStream.idRecord : start.responseBody;
3432
+ if (streamed && fromStream !== null && (fromStream.id === undefined || fromStream.id === null)) {
3433
+ ctx.findings.backend(this.id, ctx.entityName, `${op.operationId} job disappeared before completing`, "the stream ended without a terminal frame and without a job id, so the poll route cannot be named.", [start]);
3434
+ continue;
3435
+ }
3436
+ const outcome = await driveAsync(ctx.client, spec, receipt, ctx.scope, ctx.auth, ctx.refreshIfStale);
3378
3437
  if (outcome.timedOut) {
3379
3438
  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 ` +
3380
3439
  `without satisfying "${spec.until ?? "any terminal state"}". A job that neither ` +
@@ -3414,19 +3473,7 @@ const asyncReceiptIsResolvable = {
3414
3473
  const started = ctx.client.transcript.find((e) => e.method === op.method && e.status < 300 && new URL(e.url).pathname === resolved);
3415
3474
  if (started === undefined)
3416
3475
  continue;
3417
- const body = started.responseBody;
3418
- const path = spec.idFrom
3419
- .replace(/^\$\.?/, "")
3420
- .split(".")
3421
- .filter(Boolean);
3422
- let node = body;
3423
- for (const segment of path) {
3424
- if (node === null || typeof node !== "object") {
3425
- node = undefined;
3426
- break;
3427
- }
3428
- node = node[segment];
3429
- }
3476
+ const node = resolveAsyncId(started.responseBody, spec.idFrom);
3430
3477
  if (node !== undefined && node !== null)
3431
3478
  continue;
3432
3479
  ctx.findings.spec(this.id, ctx.entityName, `${op.operationId} response does not carry the job identifier it declares`, `x-async names "${spec.idFrom}" as the job id, but the response has no such value. ` +