@ixo/decision-oracle 0.2.28 → 0.2.29

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 (50) hide show
  1. package/README.md +1 -1
  2. package/dist/db/schema.d.ts +17 -0
  3. package/dist/db/schema.d.ts.map +1 -1
  4. package/dist/db/schema.js +10 -0
  5. package/dist/db/schema.js.map +1 -1
  6. package/dist/lib/api-lane/accept.d.ts.map +1 -1
  7. package/dist/lib/api-lane/accept.js +27 -10
  8. package/dist/lib/api-lane/accept.js.map +1 -1
  9. package/dist/lib/api-lane/notify.d.ts +9 -0
  10. package/dist/lib/api-lane/notify.d.ts.map +1 -1
  11. package/dist/lib/api-lane/notify.js +10 -3
  12. package/dist/lib/api-lane/notify.js.map +1 -1
  13. package/dist/lib/api-lane/record.d.ts.map +1 -1
  14. package/dist/lib/api-lane/record.js +6 -3
  15. package/dist/lib/api-lane/record.js.map +1 -1
  16. package/dist/lib/engine/client.d.ts +14 -2
  17. package/dist/lib/engine/client.d.ts.map +1 -1
  18. package/dist/lib/engine/client.js +90 -11
  19. package/dist/lib/engine/client.js.map +1 -1
  20. package/dist/lib/work-order/index.d.ts +4 -2
  21. package/dist/lib/work-order/index.d.ts.map +1 -1
  22. package/dist/lib/work-order/index.js +19 -4
  23. package/dist/lib/work-order/index.js.map +1 -1
  24. package/dist/middleware/api/keys.d.ts.map +1 -1
  25. package/dist/middleware/api/keys.js +10 -2
  26. package/dist/middleware/api/keys.js.map +1 -1
  27. package/dist/middleware/api/rate-limit.js +3 -4
  28. package/dist/middleware/api/rate-limit.js.map +1 -1
  29. package/dist/middleware/api/wait.d.ts +17 -2
  30. package/dist/middleware/api/wait.d.ts.map +1 -1
  31. package/dist/middleware/api/wait.js +80 -19
  32. package/dist/middleware/api/wait.js.map +1 -1
  33. package/dist/routes/v1/api/claims.d.ts +15 -3
  34. package/dist/routes/v1/api/claims.d.ts.map +1 -1
  35. package/dist/routes/v1/api/claims.js +85 -14
  36. package/dist/routes/v1/api/claims.js.map +1 -1
  37. package/dist/workflows/claim-ingest.d.ts +19 -125
  38. package/dist/workflows/claim-ingest.d.ts.map +1 -1
  39. package/dist/workflows/claim-ingest.js +49 -765
  40. package/dist/workflows/claim-ingest.js.map +1 -1
  41. package/dist/workflows/evaluate.d.ts +193 -0
  42. package/dist/workflows/evaluate.d.ts.map +1 -0
  43. package/dist/workflows/evaluate.js +980 -0
  44. package/dist/workflows/evaluate.js.map +1 -0
  45. package/docs/api.md +24 -4
  46. package/docs/guide.md +19 -1
  47. package/migrations/0029_inline_lease.sql +1 -0
  48. package/migrations/meta/0029_snapshot.json +3021 -0
  49. package/migrations/meta/_journal.json +7 -0
  50. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/engine/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/engine/client.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ import { fetchClient, parseRetryAfter } from "../http/client.js";
34
34
  import { assertOracleAddress } from "../ixo/chain.js";
35
35
  import { resolveServiceDid } from "../ixo/did.js";
36
36
  import { mintInvocation, oracleWebDid } from "../ixo/ucan.js";
37
- import { currentMetrics, peerCode, readCache } from "../metrics.js";
37
+ import { countCache, currentMetrics, peerCode, readCache } from "../metrics.js";
38
38
  import { TtlCache } from "../ttl-cache.js";
39
39
  import { deriveOracleKey, signAdr36 } from "./adr36.js";
40
40
  import { Agreement, CollectionCompany, CompanyLinkState, DecideRequest, DecideResponse, EngineError, ErrorEnvelope, isManifestUnusable, ManifestResponse, OracleMe, Report, ReviewRequest, } from "./types.js";
@@ -92,8 +92,44 @@ const TOKEN_REUSE_MARGIN_SEC = 30;
92
92
  const REGISTERED_TTL_SEC = 30 * 86_400;
93
93
  /** The engine's canonical counterparty form — lowercase bech32 with the `ixo` HRP. */
94
94
  const IXO_BECH32_RE = /^ixo1[02-9ac-hj-np-z]{38,}$/;
95
- /** How long a protocol's manifest is reused between claims; a re-anchored `#rub` invalidates it early. */
95
+ /** How long a protocol's manifest is reused after it was last known to be the chain's (engine
96
+ * fetch, or a caller's anchor check); a re-anchored `#rub` invalidates it early. */
96
97
  const MANIFEST_TTL_SEC = 5 * 60;
98
+ /**
99
+ * The longest a manifest is kept at all — reused past `MANIFEST_TTL_SEC` only by a caller that
100
+ * proved its anchors current (`getManifest`'s `anchors`), so the one thing a re-check cannot see,
101
+ * a change in the engine's own binder for the same two documents, is bounded by this.
102
+ */
103
+ const MANIFEST_MAX_AGE_SEC = 60 * 60;
104
+ /**
105
+ * How long an isolate trusts its own copy before reading KV again. Short on purpose: an
106
+ * `invalidateManifest` (a re-anchored `#rub`) reaches only its own isolate and KV, so every other
107
+ * isolate's copy goes stale within this window rather than costing it a wasted build per claim.
108
+ */
109
+ const MANIFEST_MEMO_MS = 30_000;
110
+ /**
111
+ * Manifests, shared by every client in the isolate (a client is built per request / step) that
112
+ * reads the same KV namespace — a memo in front of THAT cache, so a client over another namespace
113
+ * (the CLI's in-memory one per run) never sees it. Keyed like the KV entry plus the engine; held
114
+ * `MANIFEST_MEMO_MS` at most (never past the entry's max age); freshness is `checkedAt`'s.
115
+ */
116
+ let manifestMemos = new WeakMap();
117
+ function manifestMemoOf(cache) {
118
+ let memo = manifestMemos.get(cache);
119
+ if (!memo) {
120
+ memo = new TtlCache(64);
121
+ manifestMemos.set(cache, memo);
122
+ }
123
+ return memo;
124
+ }
125
+ const isCachedManifest = (v) => {
126
+ const c = v;
127
+ return (!!c &&
128
+ typeof c.fetchedAt === "number" &&
129
+ typeof c.checkedAt === "number" &&
130
+ ManifestResponse.safeParse(c.manifest).success &&
131
+ !isManifestUnusable(c.manifest));
132
+ };
97
133
  /**
98
134
  * How long this isolate trusts a "registered" it has seen (KV's marker or its own register) before
99
135
  * reading KV again. Stale is safe: an engine that forgot us answers `403 NOT_REGISTERED`, and the
@@ -109,10 +145,11 @@ const REGISTERED_MEMO_MS = 60 * 60 * 1000;
109
145
  const engineTokens = new TtlCache(256);
110
146
  /** The in-isolate "registered" memo, keyed like the KV marker. */
111
147
  const registeredMemo = new TtlCache(64);
112
- /** Tests only: forget the isolate's engine tokens and registered memos. */
148
+ /** Tests only: forget the isolate's engine tokens, registered memos and manifests. */
113
149
  export function resetEngineCachesForTests() {
114
150
  engineTokens.clear();
115
151
  registeredMemo.clear();
152
+ manifestMemos = new WeakMap();
116
153
  }
117
154
  export const registerMessage = (did, address) => `decision-engine:register:${did}:${address}`;
118
155
  /** A local engine (`wrangler dev`): `localhost` / `127.0.0.1`, with or without a port. */
@@ -309,7 +346,21 @@ export function createEngineClient(deps) {
309
346
  }
310
347
  const claimPath = (claimId) => encodeURIComponent(claimId);
311
348
  /** Per protocol; a pinned read (`&rubric=`) is its own entry, so it never shadows the live one. */
312
- const manifestKey = (protocolDid, rubric) => rubric ? `engine-manifest:${protocolDid}:${rubric}` : `engine-manifest:${protocolDid}`;
349
+ // `v2`: the entry carries its times beside the manifest; the old bare entries just expire.
350
+ const manifestKey = (protocolDid, rubric) => rubric ? `engine-manifest:v2:${protocolDid}:${rubric}` : `engine-manifest:v2:${protocolDid}`;
351
+ /** The isolate's memo is shared by every client over this KV: keyed by the engine too. */
352
+ const manifestMemo = manifestMemoOf(cache);
353
+ const memoKey = (key) => `${baseUrl}|${key}`;
354
+ /** Into the isolate and KV; KV keeps it until its max age, never past it. */
355
+ async function keepManifest(key, entry, now) {
356
+ const expiresAt = entry.fetchedAt + MANIFEST_MAX_AGE_SEC * 1000;
357
+ manifestMemo.set(memoKey(key), entry, Math.min(expiresAt, now + MANIFEST_MEMO_MS), now);
358
+ // KV's floor is 60 s; an entry with less to live than that is simply not written again.
359
+ const ttl = Math.floor((expiresAt - now) / 1000);
360
+ if (ttl >= 60) {
361
+ await cache.put(key, JSON.stringify(entry), { expirationTtl: ttl }).catch(() => { });
362
+ }
363
+ }
313
364
  return {
314
365
  register,
315
366
  async decide(req) {
@@ -435,10 +486,38 @@ export function createEngineClient(deps) {
435
486
  // The engine lowercases the pin on parse; the cache key must not split on case.
436
487
  const rubric = opts.rubric?.toLowerCase();
437
488
  const key = manifestKey(protocolDid, rubric);
489
+ // Looked at only for a stale entry; a failed chain read is just "no anchors" (below), and
490
+ // must not go unhandled when the entry is fresh.
491
+ opts.anchors?.catch(() => { });
492
+ const now = Date.now();
493
+ const memo = manifestMemo.get(memoKey(key), now);
494
+ countCache("engine-manifest-l1", memo !== undefined);
438
495
  // A cached value that no longer parses (a deploy moved the schema) is a miss, never a throw.
439
- const hit = ManifestResponse.safeParse(await readCache("engine-manifest", () => cache.get(key, "json")));
440
- if (hit.success && !isManifestUnusable(hit.data))
441
- return hit.data;
496
+ const stored = memo ?? (await readCache("engine-manifest", () => cache.get(key, "json")));
497
+ // Never past its max age, whatever said it was current since (KV expires it then too).
498
+ const entry = isCachedManifest(stored) && now - stored.fetchedAt < MANIFEST_MAX_AGE_SEC * 1000
499
+ ? stored
500
+ : null;
501
+ if (entry) {
502
+ if (now - entry.checkedAt < MANIFEST_TTL_SEC * 1000) {
503
+ if (!memo) {
504
+ const expiresAt = entry.fetchedAt + MANIFEST_MAX_AGE_SEC * 1000;
505
+ manifestMemo.set(memoKey(key), entry, Math.min(expiresAt, now + MANIFEST_MEMO_MS), now);
506
+ }
507
+ return entry.manifest;
508
+ }
509
+ // Stale: still the work order if the chain still anchors the same two documents. A pinned
510
+ // read is a historical pin's and never re-checked against the live anchors.
511
+ const anchors = !rubric && opts.anchors ? await opts.anchors.catch(() => null) : null;
512
+ const current = anchors !== null &&
513
+ anchors.rubric.toLowerCase() === entry.manifest.rubricId.toLowerCase() &&
514
+ anchors.form === entry.manifest.formProof.live;
515
+ countCache("engine-manifest-recheck", current);
516
+ if (current) {
517
+ await keepManifest(key, { ...entry, checkedAt: now }, now);
518
+ return entry.manifest;
519
+ }
520
+ }
442
521
  const query = `protocol=${encodeURIComponent(protocolDid)}${rubric ? `&rubric=${rubric}` : ""}`;
443
522
  const res = await call("manifest", "GET", `/v1/rubrics/manifest?${query}`, { attempts: 3 });
444
523
  if (!res.ok) {
@@ -452,9 +531,7 @@ export function createEngineClient(deps) {
452
531
  logger.warn("engine.manifest-unusable", { protocolDid, issues: out.issues });
453
532
  return out;
454
533
  }
455
- await cache
456
- .put(key, JSON.stringify(out), { expirationTtl: MANIFEST_TTL_SEC })
457
- .catch(() => { });
534
+ await keepManifest(key, { manifest: out, fetchedAt: now, checkedAt: now }, now);
458
535
  logger.info("engine.manifest", {
459
536
  protocolDid,
460
537
  pinned: rubric ?? null,
@@ -466,7 +543,9 @@ export function createEngineClient(deps) {
466
543
  return out;
467
544
  },
468
545
  async invalidateManifest(protocolDid) {
469
- await cache.delete(manifestKey(protocolDid)).catch(() => { });
546
+ const key = manifestKey(protocolDid);
547
+ manifestMemo.delete(memoKey(key));
548
+ await cache.delete(key).catch(() => { });
470
549
  },
471
550
  };
472
551
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/engine/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/engine/client.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,10 @@
3
3
  * the engine's manifest (the only reading of the rubric; an unusable one is answered before the form
4
4
  * is fetched), then the form's bytes and the pure core (`form.ts`).
5
5
  *
6
- * The manifest is KV-cached. When the chain's `#vct` proof is not the one it bound
7
- * (`formProof.live`, the chain proof verbatim), the form was replaced since: the cached manifest is
6
+ * The manifest is cached (client.ts), and read beside the Blocksync resources, whose `#rub` / `#vct`
7
+ * proofs let a stale cached manifest be re-checked instead of re-fetched. When the chain's `#vct`
8
+ * proof is not the one it bound (`formProof.live`, the chain proof verbatim), the form was replaced
9
+ * since: the cached manifest is
8
10
  * dropped and re-read once, so a work order never pairs a new form with an old binding.
9
11
  *
10
12
  * Every failure is transient (`AppError.unavailable`, the route's 503). A usable manifest means the
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/work-order/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,eAAO,MAAM,cAAc,EAAE,gBAwC5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/work-order/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,eAAO,MAAM,cAAc,EAAE,gBAqD5B,CAAC"}
@@ -3,8 +3,10 @@
3
3
  * the engine's manifest (the only reading of the rubric; an unusable one is answered before the form
4
4
  * is fetched), then the form's bytes and the pure core (`form.ts`).
5
5
  *
6
- * The manifest is KV-cached. When the chain's `#vct` proof is not the one it bound
7
- * (`formProof.live`, the chain proof verbatim), the form was replaced since: the cached manifest is
6
+ * The manifest is cached (client.ts), and read beside the Blocksync resources, whose `#rub` / `#vct`
7
+ * proofs let a stale cached manifest be re-checked instead of re-fetched. When the chain's `#vct`
8
+ * proof is not the one it bound (`formProof.live`, the chain proof verbatim), the form was replaced
9
+ * since: the cached manifest is
8
10
  * dropped and re-read once, so a work order never pairs a new form with an old binding.
9
11
  *
10
12
  * Every failure is transient (`AppError.unavailable`, the route's 503). A usable manifest means the
@@ -34,9 +36,22 @@ export const buildWorkOrder = async (env, protocolDid) => {
34
36
  base: { component: "work-order", protocolDid },
35
37
  });
36
38
  const engine = createEngineClient({ config, logger, trace, cache: env.CACHE_KV });
37
- const resources = await getEntityLinkedResources({ config, trace }, protocolDid);
39
+ // The chain's resources and the manifest are read together: the manifest's cache only needs
40
+ // the resources to re-check a stale entry against the protocol's CURRENT `#rub` / `#vct` proofs
41
+ // (client.ts `getManifest`), and a fresh one never waits for them.
42
+ const linked = getEntityLinkedResources({ config, trace }, protocolDid);
43
+ const anchors = linked.then((rs) => {
44
+ const proofOf = (suffix) => rs.find((r) => r.id?.endsWith(suffix))?.proof;
45
+ const rubric = proofOf("#rub");
46
+ const form = proofOf("#vct");
47
+ return rubric && form ? { rubric, form } : null;
48
+ });
49
+ const [resources, first] = await Promise.all([
50
+ linked,
51
+ engine.getManifest(protocolDid, { anchors }),
52
+ ]);
38
53
  const vct = resources.find((r) => r.id?.endsWith("#vct"));
39
- let manifest = await engine.getManifest(protocolDid);
54
+ let manifest = first;
40
55
  if (!isManifestUnusable(manifest) && vct && vct.proof !== manifest.formProof.live) {
41
56
  await engine.invalidateManifest(protocolDid);
42
57
  manifest = await engine.getManifest(protocolDid);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/work-order/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAqB,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;IACzE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC,SAAS;QACvB,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE;KAC/C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElF,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1D,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAClF,MAAM,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC7C,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3E,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,EAAE,eAAe,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,QAAQ,CAAC,WAAW,CAAC,eAAe,WAAW,kCAAkC,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;QACpC,WAAW,EAAE,MAAM,CAAC,gBAAgB;QACpC,OAAO,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE;QAC5D,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,2FAA2F;QAC3F,2DAA2D;QAC3D,MAAM,QAAQ,CAAC,WAAW,CAAC,iBAAiB,WAAW,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,CAAC,IAAI;QAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,iBAAiB,WAAW,uBAAuB,CAAC,CAAC;IAE3F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC3E,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/work-order/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAQzC,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,OAAkC,CAAC;AAE5E,gGAAgG;AAChG,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,MAAM,GAAG,MACL,CAAC;AAIrD,wBAAsB,SAAS,CAC7B,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EACxC,GAAG,SAAa,GACf,OAAO,CAAC,SAAS,CAAC,CAmCpB"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAQzC,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,OAAkC,CAAC;AAE5E,gGAAgG;AAChG,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,MAAM,GAAG,MACL,CAAC;AAIrD,wBAAsB,SAAS,CAC7B,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EACxC,GAAG,SAAa,GACf,OAAO,CAAC,SAAS,CAAC,CA0CpB"}
@@ -28,9 +28,17 @@ export async function keyCaller(db, config, token, waitUntil, now = Date.now())
28
28
  throw unauthorized();
29
29
  refused.delete(hash);
30
30
  }
31
- const row = await db.query.apiKeys.findFirst({ where: eq(apiKeys.prefix, m[2]) });
31
+ // The key and its source in ONE read (a join, one D1 round trip on every keyed request); the
32
+ // source is looked at only once the hash proved the key.
33
+ const [found] = await db
34
+ .select({ key: apiKeys, source: apiSources })
35
+ .from(apiKeys)
36
+ .leftJoin(apiSources, eq(apiSources.sourceId, apiKeys.sourceId))
37
+ .where(eq(apiKeys.prefix, m[2]))
38
+ .limit(1);
39
+ const row = found?.key;
32
40
  const live = row && timingSafeEqual(row.keyHash, hash) && isLive(row.revokedAt, now);
33
- const source = live && (await db.query.apiSources.findFirst({ where: eq(apiSources.sourceId, row.sourceId) }));
41
+ const source = live && found?.source;
34
42
  if (!row || !source) {
35
43
  refused.set(hash, now + NEGATIVE_TTL_MS);
36
44
  // Bounded: a spray of unique garbage keys must not grow the isolate's memory.
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/middleware/api/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/middleware/api/keys.ts"],"names":[],"mappings":"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"}
@@ -34,10 +34,9 @@ export async function limitCaller(c, caller) {
34
34
  const reset = Math.ceil((window + periodMs - now) / 1000);
35
35
  let allowed = true;
36
36
  try {
37
- for (const key of keys) {
38
- if (!(await limiter.limit({ key })).success)
39
- allowed = false;
40
- }
37
+ // Both counted on every request (a refusal by one still spends the other), so asked together.
38
+ const outcomes = await Promise.all(keys.map((key) => limiter.limit({ key })));
39
+ allowed = outcomes.every((o) => o.success);
41
40
  }
42
41
  catch (err) {
43
42
  // Fail OPEN, as the per-IP guard does: a limiter glitch must never take the API down.
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/middleware/api/rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/middleware/api/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,30 @@
1
1
  /**
2
2
  * Sync and async are one path (go-prod spec §4.6): every submission starts a `ClaimIngest`
3
3
  * instance, and a caller that asked to wait (`Prefer: wait=N` on submit, `?wait=N` on GET) polls
4
- * the ledger — 500 ms rising to 2 s — until the decision lands or the budget runs out. The workflow
4
+ * the ledger — 250 ms rising to 2 s — until the decision lands or the budget runs out. The workflow
5
5
  * never knows anyone is waiting, so a client that hangs up orphans nothing.
6
6
  *
7
+ * A submit that waits first runs the claim's `evaluate` itself (`evaluateInline`,
8
+ * workflows/evaluate.ts) — the workflow stays the durable fallback — and only polls if that run did
9
+ * not land the decision. The inline run holds a waiter slot like a poll does (`inlineSlot`).
10
+ *
7
11
  * At most 20 waiters per source in this isolate; past that the answer is an immediate `202`. The
8
12
  * cap protects what a waiter holds — this isolate's open requests and D1 reads — so it is counted
9
- * where that cost is paid, not globally.
13
+ * where that cost is paid, not globally. Inline runs are capped per isolate too
14
+ * (`MAX_INLINE_RUNS`): one holds a claim's body, attachment bytes and handler work in memory every
15
+ * request of the isolate shares; past the cap the caller polls the workflow instead, as before.
16
+ * Every slot lapses by itself (the wait's end, the run's lease), so a run the runtime cancels
17
+ * before its `finally` cannot pin one for the isolate's life.
10
18
  */
11
19
  import type { Database } from "../../db/client.js";
12
20
  export declare const MAX_WAITERS_PER_SOURCE = 20;
21
+ /** Inline runs at once in this isolate (header) — well under the per-source waiter cap. */
22
+ export declare const MAX_INLINE_RUNS = 8;
23
+ /**
24
+ * A slot for one inline run until its lease (`until`): a source waiter slot AND one of the
25
+ * isolate's `MAX_INLINE_RUNS`. Both lapse at the lease even if the run is cancelled.
26
+ */
27
+ export declare function inlineSlot(sourceId: string, until: number): (() => void) | null;
13
28
  /** `Prefer: wait=N` (RFC 7240, one of possibly several comma-separated preferences) → seconds,
14
29
  * capped at 90; absent or malformed ⇒ null (no wait). */
15
30
  export declare function preferredWait(prefer: string | undefined): number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAUzC;0DAC0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGvE;AAsBD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA8BlB"}
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,2FAA2F;AAC3F,eAAO,MAAM,eAAe,IAAI,CAAC;AAwCjC;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAY/E;AAED;0DAC0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGvE;AAwBD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
@@ -1,25 +1,88 @@
1
1
  /**
2
2
  * Sync and async are one path (go-prod spec §4.6): every submission starts a `ClaimIngest`
3
3
  * instance, and a caller that asked to wait (`Prefer: wait=N` on submit, `?wait=N` on GET) polls
4
- * the ledger — 500 ms rising to 2 s — until the decision lands or the budget runs out. The workflow
4
+ * the ledger — 250 ms rising to 2 s — until the decision lands or the budget runs out. The workflow
5
5
  * never knows anyone is waiting, so a client that hangs up orphans nothing.
6
6
  *
7
+ * A submit that waits first runs the claim's `evaluate` itself (`evaluateInline`,
8
+ * workflows/evaluate.ts) — the workflow stays the durable fallback — and only polls if that run did
9
+ * not land the decision. The inline run holds a waiter slot like a poll does (`inlineSlot`).
10
+ *
7
11
  * At most 20 waiters per source in this isolate; past that the answer is an immediate `202`. The
8
12
  * cap protects what a waiter holds — this isolate's open requests and D1 reads — so it is counted
9
- * where that cost is paid, not globally.
13
+ * where that cost is paid, not globally. Inline runs are capped per isolate too
14
+ * (`MAX_INLINE_RUNS`): one holds a claim's body, attachment bytes and handler work in memory every
15
+ * request of the isolate shares; past the cap the caller polls the workflow instead, as before.
16
+ * Every slot lapses by itself (the wait's end, the run's lease), so a run the runtime cancels
17
+ * before its `finally` cannot pin one for the isolate's life.
10
18
  */
11
19
  import * as Sentry from "@sentry/cloudflare";
12
20
  import { eq } from "drizzle-orm";
13
21
  import { MAX_WAIT_SECONDS } from "../../contracts/index.js";
14
22
  import { claimIngests, decisions } from "../../db/schema.js";
23
+ import { decisionFailure } from "../../lib/api-lane/record.js";
15
24
  export const MAX_WAITERS_PER_SOURCE = 20;
16
- const FIRST_POLL_MS = 500;
25
+ /** Inline runs at once in this isolate (header) — well under the per-source waiter cap. */
26
+ export const MAX_INLINE_RUNS = 8;
27
+ const FIRST_POLL_MS = 250;
17
28
  const MAX_POLL_MS = 2000;
18
- /** After the decision row lands, how long the ledger gets to catch up (the workflow's notify and
19
- * mark-processed steps) before the answer goes out anyway — so a sync 200 reads `processed`
20
- * beside its decision, not a stale `processing` (S7, 2026-09-30). `decision` stays the truth. */
29
+ /** After the decision row lands, how long the ledger gets to catch up (the workflow's
30
+ * mark-processed step, which follows the decision directly — after the review event, for a
31
+ * `pending_review` — or the inline run's own mark)
32
+ * before the answer goes out anyway — so a sync 200 reads `processed` beside its decision, not a
33
+ * stale `processing` (S7, 2026-09-30). `decision` stays the truth. The wait ends the moment the
34
+ * ledger reads `processed`, so this bounds only a run that stalls between the two. */
21
35
  const SETTLE_GRACE_MS = 3000;
22
- const waiters = new Map();
36
+ /**
37
+ * Held slots per key, each with the time it lapses by itself: a holder releases its slot when it
38
+ * ends, but a run the runtime cancels (past `waitUntil`'s window) never reaches its `finally`, and
39
+ * its slot must not stay held for the isolate's life. Only unexpired slots count.
40
+ */
41
+ class Slots {
42
+ max;
43
+ held = new Map();
44
+ seq = 0;
45
+ constructor(max) {
46
+ this.max = max;
47
+ }
48
+ /** A slot until `until` (epoch ms), or null when `max` live ones are held; release is idempotent. */
49
+ take(key, until, now = Date.now()) {
50
+ const live = this.held.get(key) ?? new Map();
51
+ for (const [id, exp] of live)
52
+ if (exp <= now)
53
+ live.delete(id);
54
+ if (live.size >= this.max)
55
+ return null;
56
+ const id = ++this.seq;
57
+ live.set(id, until);
58
+ this.held.set(key, live);
59
+ return () => {
60
+ live.delete(id);
61
+ if (live.size === 0 && this.held.get(key) === live)
62
+ this.held.delete(key);
63
+ };
64
+ }
65
+ }
66
+ const waiters = new Slots(MAX_WAITERS_PER_SOURCE);
67
+ const inlineRuns = new Slots(MAX_INLINE_RUNS);
68
+ /**
69
+ * A slot for one inline run until its lease (`until`): a source waiter slot AND one of the
70
+ * isolate's `MAX_INLINE_RUNS`. Both lapse at the lease even if the run is cancelled.
71
+ */
72
+ export function inlineSlot(sourceId, until) {
73
+ const run = inlineRuns.take("isolate", until);
74
+ if (!run)
75
+ return null;
76
+ const waiter = waiters.take(sourceId, until);
77
+ if (!waiter) {
78
+ run();
79
+ return null;
80
+ }
81
+ return () => {
82
+ run();
83
+ waiter();
84
+ };
85
+ }
23
86
  /** `Prefer: wait=N` (RFC 7240, one of possibly several comma-separated preferences) → seconds,
24
87
  * capped at 90; absent or malformed ⇒ null (no wait). */
25
88
  export function preferredWait(prefer) {
@@ -27,16 +90,18 @@ export function preferredWait(prefer) {
27
90
  return m ? Math.min(Number(m[1]), MAX_WAIT_SECONDS) : null;
28
91
  }
29
92
  /** Where the claim is: `stopped` once the ledger is `processed` / `failed`; `decided` once a
30
- * decision row exists (any status, a pending review included). Untraced: a waiter repeats this one
31
- * read every 0.5–2 s by design, which Sentry's N+1 detector would flag on every sync submit. */
93
+ * decision row exists (any status, a pending review included) — but not a row that records a
94
+ * FAILURE (`invalid_facts`, a content refusal): that claim is about to read `failed`, never
95
+ * `processed`, so the settle grace below is not its to take. Untraced: a waiter repeats this one
96
+ * read every 0.25–2 s by design, which Sentry's N+1 detector would flag on every sync submit. */
32
97
  async function progress(db, claimId) {
33
98
  const [row] = await Sentry.suppressTracing(() => db
34
- .select({ status: claimIngests.status, decided: decisions.claimId })
99
+ .select({ status: claimIngests.status, decision: decisions.status })
35
100
  .from(claimIngests)
36
101
  .leftJoin(decisions, eq(decisions.claimId, claimIngests.claimId))
37
102
  .where(eq(claimIngests.claimId, claimId)));
38
103
  return {
39
- decided: !!row && row.decided !== null,
104
+ decided: !!row && row.decision !== null && !decisionFailure(row.decision),
40
105
  stopped: !!row && (row.status === "processed" || row.status === "failed"),
41
106
  };
42
107
  }
@@ -50,10 +115,10 @@ export async function awaitLanding(db, sourceId, claimId, seconds) {
50
115
  return true;
51
116
  if (seconds <= 0)
52
117
  return first.decided;
53
- const inFlight = waiters.get(sourceId) ?? 0;
54
- if (inFlight >= MAX_WAITERS_PER_SOURCE)
118
+ // Held no longer than the wait itself plus a last poll's margin, however the wait ends.
119
+ const release = waiters.take(sourceId, Date.now() + seconds * 1000 + MAX_POLL_MS);
120
+ if (!release)
55
121
  return false;
56
- waiters.set(sourceId, inFlight + 1);
57
122
  try {
58
123
  let deadline = Date.now() + seconds * 1000;
59
124
  let decided = first.decided;
@@ -75,11 +140,7 @@ export async function awaitLanding(db, sourceId, claimId, seconds) {
75
140
  return decided;
76
141
  }
77
142
  finally {
78
- const n = (waiters.get(sourceId) ?? 1) - 1;
79
- if (n > 0)
80
- waiters.set(sourceId, n);
81
- else
82
- waiters.delete(sourceId);
143
+ release();
83
144
  }
84
145
  }
85
146
  //# sourceMappingURL=wait.js.map