twzrd-x402-gate 0.8.16 → 0.8.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/QUICKSTART.md +24 -4
- package/README.md +41 -26
- package/dist/auto-gate.d.ts.map +1 -1
- package/dist/auto-gate.js +5 -1
- package/dist/auto-gate.js.map +1 -1
- package/dist/block-proof.d.ts +36 -1
- package/dist/block-proof.d.ts.map +1 -1
- package/dist/block-proof.js +43 -0
- package/dist/block-proof.js.map +1 -1
- package/dist/buyer-defaults.d.ts +38 -0
- package/dist/buyer-defaults.d.ts.map +1 -0
- package/dist/buyer-defaults.js +44 -0
- package/dist/buyer-defaults.js.map +1 -0
- package/dist/decision-token.d.ts +24 -0
- package/dist/decision-token.d.ts.map +1 -1
- package/dist/decision-token.js +27 -0
- package/dist/decision-token.js.map +1 -1
- package/dist/evaluate.d.ts +6 -9
- package/dist/evaluate.d.ts.map +1 -1
- package/dist/evaluate.js +44 -39
- package/dist/evaluate.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +5 -0
- package/dist/intent.d.ts.map +1 -1
- package/dist/intent.js +15 -0
- package/dist/intent.js.map +1 -1
- package/dist/outcome-attestation.d.ts +100 -0
- package/dist/outcome-attestation.d.ts.map +1 -0
- package/dist/outcome-attestation.js +274 -0
- package/dist/outcome-attestation.js.map +1 -0
- package/dist/policy-runtime.d.ts +9 -0
- package/dist/policy-runtime.d.ts.map +1 -1
- package/dist/policy-runtime.js +27 -6
- package/dist/policy-runtime.js.map +1 -1
- package/dist/quick.d.ts +2 -2
- package/dist/receipt-policy.d.ts +6 -0
- package/dist/receipt-policy.d.ts.map +1 -1
- package/dist/receipt-policy.js +7 -1
- package/dist/receipt-policy.js.map +1 -1
- package/dist/trust-gate-reason.d.ts +1 -0
- package/dist/trust-gate-reason.d.ts.map +1 -1
- package/dist/trust-gate-reason.js +9 -0
- package/dist/trust-gate-reason.js.map +1 -1
- package/dist/with-guard.d.ts +1 -1
- package/dist/with-guard.d.ts.map +1 -1
- package/dist/with-guard.js +9 -2
- package/dist/with-guard.js.map +1 -1
- package/dist/x402-client-hook.d.ts +30 -7
- package/dist/x402-client-hook.d.ts.map +1 -1
- package/dist/x402-client-hook.js +60 -5
- package/dist/x402-client-hook.js.map +1 -1
- package/package.json +11 -6
package/QUICKSTART.md
CHANGED
|
@@ -5,13 +5,13 @@ API key, no signup, no config — every `TWZRD_*` env var is an optional overrid
|
|
|
5
5
|
is unreachable the gate never *invents* a wash flag (the wash check fails open); a failed
|
|
6
6
|
preflight blocks the payment by default (`TWZRD_FAIL_OPEN=true` to allow).
|
|
7
7
|
|
|
8
|
-
**Pin:** `twzrd-x402-gate@0.8.
|
|
8
|
+
**Pin:** `twzrd-x402-gate@0.8.16` + stock PayAI client `x402-solana@2.1.0` (official
|
|
9
9
|
`beforePayment` seat). `@x402/core` Path E remains supported; refuse script is fallback.
|
|
10
10
|
|
|
11
11
|
## 1. Stock PayAI client (default seat — copy-paste)
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
npm install twzrd-x402-gate@0.8.
|
|
14
|
+
npm install twzrd-x402-gate@0.8.16 x402-solana@2.1.0
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
> **ESM-only.** The package ships `import` conditions only — a CommonJS
|
|
@@ -36,7 +36,7 @@ Then: `await client.fetch("https://merchant.example/paid");`
|
|
|
36
36
|
## 1b. Official `@x402/core` client (Path E)
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
npm install twzrd-x402-gate@0.8.
|
|
39
|
+
npm install twzrd-x402-gate@0.8.16 @x402/core @x402/fetch @x402/svm
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
```typescript
|
|
@@ -74,7 +74,7 @@ abort string is prefixed `[twzrd]` — treat any reason matching
|
|
|
74
74
|
|
|
75
75
|
**Fallback only:** `npx twzrd-gate-eval-refuse` / `npm run gate-eval-refuse` still works for
|
|
76
76
|
CLI smoke, but it is **not** the primary install story — agents that only summarize
|
|
77
|
-
`
|
|
77
|
+
`next_action.command` without seating a gate on a signer path never clears W1.
|
|
78
78
|
|
|
79
79
|
## 3. See your own seat
|
|
80
80
|
|
|
@@ -88,6 +88,26 @@ createTwzrdBeforePaymentHook({
|
|
|
88
88
|
});
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
+
## 3b. Turn on Path A (buyer cash, not the rail)
|
|
92
|
+
|
|
93
|
+
Refuse stays free until you wire a paying fetch. Then warn + material amount
|
|
94
|
+
buys the $0.05 V6 (or $0.001 quick below $2.50). Facilitator settle hooks stay
|
|
95
|
+
free.
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { wrapFetchWithPayment } from "@x402/svm";
|
|
99
|
+
|
|
100
|
+
const x402Fetch = wrapFetchWithPayment(fetch, wallet);
|
|
101
|
+
createTwzrdBeforePaymentHook({
|
|
102
|
+
refuseWashFlagged: true,
|
|
103
|
+
x402Fetch, // Path A defaults on
|
|
104
|
+
// requireReceipt: false, escalateOnWarn: false // opt out
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`installTwzrdAutoGate((g) => wrapFetchWithPayment(g, wallet))` auto-wires the
|
|
109
|
+
payWrap as `x402Fetch`.
|
|
110
|
+
|
|
91
111
|
## 4. The only three knobs you need
|
|
92
112
|
|
|
93
113
|
| Knob | Effect |
|
package/README.md
CHANGED
|
@@ -10,9 +10,9 @@ refuse. Protects the **payer** from a risky **merchant** (`payTo`). Chain-neutra
|
|
|
10
10
|
### Default-on AutoGate (5 lines)
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npm install twzrd-x402-gate@0.8.
|
|
13
|
+
npm install twzrd-x402-gate@0.8.16 x402-solana@2.1.0
|
|
14
14
|
# official @x402/* path (alternate seat):
|
|
15
|
-
# npm install twzrd-x402-gate@0.8.
|
|
15
|
+
# npm install twzrd-x402-gate@0.8.16 @x402/core @x402/fetch @x402/svm
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
```typescript
|
|
@@ -56,7 +56,7 @@ transfer on-chain. Wash/sybil edges are primarily discounted in TWZRD scoring, n
|
|
|
56
56
|
revenue refusal.
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
npm install twzrd-x402-gate@0.8.
|
|
59
|
+
npm install twzrd-x402-gate@0.8.16
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
```typescript
|
|
@@ -88,7 +88,9 @@ Offline demo: `npx tsx examples/seller-settle-guard.ts`
|
|
|
88
88
|
Fixture-backed SVM extract tests live in `test/seller-hook.test.ts` +
|
|
89
89
|
`test/fixtures/exact-svm-transfer-checked.ts`.
|
|
90
90
|
|
|
91
|
-
**PayAI x402-solana@2.1.0+** (stock client
|
|
91
|
+
**PayAI x402-solana@2.1.0+** (stock client - primary Solana seat via `beforePayment`).
|
|
92
|
+
`x402-solana@3.0.0` passes `declaredResource` as `{ url }`; the hook flattens `.url`
|
|
93
|
+
so the same buyer copy-paste runs without a PayAI merge:
|
|
92
94
|
|
|
93
95
|
```typescript
|
|
94
96
|
import { createX402Client } from "x402-solana";
|
|
@@ -116,7 +118,7 @@ Prove refuse-before-sign: `npm run x402-solana-before-payment-proof`.
|
|
|
116
118
|
Install the published gate and run against wash fixtures:
|
|
117
119
|
|
|
118
120
|
```bash
|
|
119
|
-
npm install twzrd-x402-gate@0.8.
|
|
121
|
+
npm install twzrd-x402-gate@0.8.16
|
|
120
122
|
# from package root after install, or from a checkout:
|
|
121
123
|
npm run wash-dogfood
|
|
122
124
|
```
|
|
@@ -261,12 +263,13 @@ Dogfood (one public live proof path):
|
|
|
261
263
|
## Install
|
|
262
264
|
|
|
263
265
|
```bash
|
|
264
|
-
npm install twzrd-x402-gate@0.8.
|
|
266
|
+
npm install twzrd-x402-gate@0.8.16 x402-solana@2.1.0
|
|
265
267
|
```
|
|
266
268
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
269
|
+
Install pin is the published version (`GATE_PACKAGE_PIN` in
|
|
270
|
+
`packages/twzrd-agent-intel/src/twzrd_agent_intel/pins.py`). Repo `package.json`
|
|
271
|
+
may be one patch ahead until that release is on npm. Confirm with
|
|
272
|
+
`npm view twzrd-x402-gate version`.
|
|
270
273
|
|
|
271
274
|
Optional settle guard (resource-server **payer** policy): see **Seller settle guard
|
|
272
275
|
(`onBeforeSettle`) — optional 0.8.1** above. Do not confuse with facilitator
|
|
@@ -553,31 +556,43 @@ const safeFetch = withTwzrdGuard(x402Fetch, {
|
|
|
553
556
|
});
|
|
554
557
|
```
|
|
555
558
|
|
|
556
|
-
### Path A
|
|
559
|
+
### Path A — default on the buyer seat when a paying fetch is wired
|
|
557
560
|
|
|
558
|
-
Free preflight still decides `allow|warn|block`.
|
|
559
|
-
|
|
561
|
+
Free preflight still decides `allow|warn|block`. **Facilitator `onBeforeSettle`
|
|
562
|
+
stays free** (abort on `block` only — we do not tax their rail).
|
|
563
|
+
|
|
564
|
+
On the **buyer** install, if you pass `x402Fetch` (or use
|
|
565
|
+
`installTwzrdAutoGate(payWrap)`, which auto-wires `payWrap(raw)`), Path A
|
|
566
|
+
defaults on:
|
|
567
|
+
|
|
568
|
+
| Free decision | Resource price | What fires |
|
|
569
|
+
|---------------|----------------|------------|
|
|
570
|
+
| `block` | any | free refuse |
|
|
571
|
+
| `warn` | ≥ $2.50 | $0.05 V6 (`requireReceipt`) |
|
|
572
|
+
| `warn` | < $2.50 | $0.001 quick re-decide (`escalateOnWarn`) |
|
|
573
|
+
| `allow` | > $2.50 | $0.05 V6 |
|
|
574
|
+
| `allow` | ≤ $2.50 | free proceed |
|
|
560
575
|
|
|
561
576
|
```typescript
|
|
562
|
-
import {
|
|
577
|
+
import { wrapFetchWithPayment } from "@x402/svm";
|
|
578
|
+
import { createTwzrdBeforePaymentHook } from "twzrd-x402-gate";
|
|
563
579
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
580
|
+
const x402Fetch = wrapFetchWithPayment(fetch, buyerWallet);
|
|
581
|
+
const client = createX402Client({
|
|
582
|
+
wallet: buyerWallet,
|
|
583
|
+
network: "solana",
|
|
584
|
+
beforePayment: createTwzrdBeforePaymentHook({
|
|
585
|
+
refuseWashFlagged: true,
|
|
586
|
+
x402Fetch, // turns Path A defaults on
|
|
587
|
+
}),
|
|
572
588
|
});
|
|
573
589
|
```
|
|
574
590
|
|
|
575
|
-
|
|
576
|
-
|
|
591
|
+
Opt out: `requireReceipt: false` and/or `escalateOnWarn: false`.
|
|
592
|
+
Refuse-only seats (no `x402Fetch`) stay free.
|
|
577
593
|
|
|
578
|
-
`
|
|
579
|
-
|
|
580
|
-
for the counterparty before you pay the resource.
|
|
594
|
+
`evaluate_x402_resource` itself stays opt-in. `autoReceipt: true` still buys
|
|
595
|
+
$0.05 on every non-block (broader than the default ladder).
|
|
581
596
|
|
|
582
597
|
**`x402Fetch` is yours to supply** (this package is dependency-free). Wire the proven
|
|
583
598
|
`@x402/svm` sponsored-feePayer client — the same one `twzrd-mcp-server` uses:
|
package/dist/auto-gate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-gate.d.ts","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;AAEnE,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GACzD,0BAA0B,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB,CAAC;AAEJ,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAEjE,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GACnE,0BAA0B,CAAC;AAE7B,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAC3D,0BAA0B,CAAC;AAM7B,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAOjF;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,KAAK,CAAC;AAEhB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,cAAc,CAAC;AAElB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,yBAAyB,GACjC,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE5F;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,CACD,YAAY,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,OAAO,CAAC,EAAE,8BAA8B,KACrC,OAAO,CAAC,2BAA2B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-gate.d.ts","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;AAEnE,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GACzD,0BAA0B,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB,CAAC;AAEJ,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAEjE,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GACnE,0BAA0B,CAAC;AAE7B,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAC3D,0BAA0B,CAAC;AAM7B,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAOjF;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,KAAK,CAAC;AAEhB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,cAAc,CAAC;AAElB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,yBAAyB,GACjC,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE5F;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,CACD,YAAY,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,OAAO,CAAC,EAAE,8BAA8B,KACrC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAkF1C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CASnE"}
|
package/dist/auto-gate.js
CHANGED
|
@@ -84,7 +84,11 @@ export function installTwzrdAutoGate(target, options) {
|
|
|
84
84
|
if (isTwzrdAutoGateDisabled(fetchOpts)) {
|
|
85
85
|
return target(raw);
|
|
86
86
|
}
|
|
87
|
-
|
|
87
|
+
// The payWrap they already supply is a paying fetch. Use it as Path A
|
|
88
|
+
// x402Fetch so the canonical install fires warn+material without a
|
|
89
|
+
// second argument. payWrap(raw) is unguarded — no recursion into the gate.
|
|
90
|
+
const x402Fetch = fetchOpts?.x402Fetch ?? target(raw);
|
|
91
|
+
return target(withTwzrdGuard(raw, { ...fetchOpts, x402Fetch }));
|
|
88
92
|
}
|
|
89
93
|
throw new TypeError('[twzrd-x402-gate] installTwzrdAutoGate: expected a PayWrap function, an x402 client with onBeforePaymentCreation, or the string "mpp" / "x402-solana"');
|
|
90
94
|
}
|
package/dist/auto-gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-gate.js","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auto-gate.js","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,GAM3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,GAI1B,MAAM,eAAe,CAAC;AAoCvB,MAAM,cAAc,GAAG,IAAI,OAAO,EAA8B,CAAC;AAEjE,8DAA8D;AAC9D,MAAM,UAAU,uBAAuB,CAAC,OAAgC;IACtE,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACzC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC5C,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,CAAU;IAC3B,OAAO,OAAO,CAAC,KAAK,UAAU,CAAC;AACjC,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAU;IAClC,OAAO,CACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,QAAQ;QACrB,OAAQ,CAAoB,CAAC,uBAAuB,KAAK,UAAU,CACpE,CAAC;AACJ,CAAC;AAuDD,MAAM,UAAU,oBAAoB,CAClC,MAAwD,EACxD,OAA8F;IAS9F,wEAAwE;IACxE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,OAAoC,CAAC;QACrD,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,KAAK,EACV,UAAwB,EACxB,OAA8B,EACD,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,sEAAsE;IACtE,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAiD,CAAC;QAClE,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;QAC/B,CAAC;QACD,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,wEAAwE;IACxE,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,OAAiD,CAAC;QACnE,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,cAAc,CAAC,GAAG,CAAC,MAAgB,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CACV,oIAAoI,CACrI,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACtD,cAAc,CAAC,GAAG,CAAC,MAAgB,EAAE,KAAK,CAAC,CAAC;QAE5C,yFAAyF;QACzF,MAAM,gBAAgB,GAAG,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,CAAC,uBAAuB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACjC,IAAI,KAAK,CAAC,QAAQ,IAAI,uBAAuB,EAAE,EAAE,CAAC;gBAChD,OAAO,SAAS,CAAC,CAAC,oBAAoB;YACxC,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC,CAA8C,CAAC;QAEnD,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wEAAwE;IACxE,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,OAAkD,CAAC;QACrE,MAAM,GAAG,GAAG,SAAS,EAAE,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC;QACpD,IAAI,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,sEAAsE;QACtE,mEAAmE;QACnE,2EAA2E;QAC3E,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,SAAS,CACjB,uJAAuJ,CACxJ,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,MAAgB,CAAC,CAAC;IACnD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,OAAO;IACT,CAAC;IACD,OAAO,CAAC,IAAI,CACV,oFAAoF,CACrF,CAAC;AACJ,CAAC"}
|
package/dist/block-proof.d.ts
CHANGED
|
@@ -6,13 +6,17 @@
|
|
|
6
6
|
* v1 = original block transcript (hook + invariants only).
|
|
7
7
|
* v1.1 = adds execution_mode + resolved peer versions so stock-seat proofs
|
|
8
8
|
* cannot be confused with harness fallback (S1 closure 2026-08-03).
|
|
9
|
+
* v1.2 = adds the operator-signed Decision Outcome Attestation V1
|
|
10
|
+
* (blocked_never_signed) so the refuse is portable signed evidence, not
|
|
11
|
+
* only a JSON transcript. Attached via attachBlockOutcomeAttestation.
|
|
9
12
|
*/
|
|
10
13
|
export declare const AUTOGATE_BLOCK_PROOF_SCHEMA = "twzrd.autogate_block_proof.v1";
|
|
11
14
|
export declare const AUTOGATE_BLOCK_PROOF_SCHEMA_V1_1 = "twzrd.autogate_block_proof.v1.1";
|
|
15
|
+
export declare const AUTOGATE_BLOCK_PROOF_SCHEMA_V1_2 = "twzrd.autogate_block_proof.v1.2";
|
|
12
16
|
/** How the refuse was exercised — never omit on new S1 artifacts. */
|
|
13
17
|
export type ExecutionMode = "x402-solana@2.1.0" | "harness" | "onBeforePaymentCreation";
|
|
14
18
|
export type AutogateBlockProof = {
|
|
15
|
-
schema_version: typeof AUTOGATE_BLOCK_PROOF_SCHEMA | typeof AUTOGATE_BLOCK_PROOF_SCHEMA_V1_1;
|
|
19
|
+
schema_version: typeof AUTOGATE_BLOCK_PROOF_SCHEMA | typeof AUTOGATE_BLOCK_PROOF_SCHEMA_V1_1 | typeof AUTOGATE_BLOCK_PROOF_SCHEMA_V1_2;
|
|
16
20
|
run_id: string;
|
|
17
21
|
timestamp: string;
|
|
18
22
|
/** twzrd-x402-gate package version */
|
|
@@ -52,6 +56,13 @@ export type AutogateBlockProof = {
|
|
|
52
56
|
actual_spend_usdc: number;
|
|
53
57
|
onchain_settlements: number;
|
|
54
58
|
};
|
|
59
|
+
/**
|
|
60
|
+
* v1.2+: operator-signed Decision Outcome Attestation V1 over this refuse
|
|
61
|
+
* (outcome=blocked_never_signed, decision_id defaults to run_id). Present
|
|
62
|
+
* only when the transcript's invariants prove signer=0 — see
|
|
63
|
+
* attachBlockOutcomeAttestation.
|
|
64
|
+
*/
|
|
65
|
+
outcome_attestation?: import("./outcome-attestation.js").DecisionOutcomeAttestation;
|
|
55
66
|
/** Optional clean-seller negative control (arm B) when recorded on the same run */
|
|
56
67
|
negative_control?: {
|
|
57
68
|
clean_seller: string;
|
|
@@ -93,6 +104,30 @@ export type BuildAutogateBlockProofInput = {
|
|
|
93
104
|
schema_v1_1?: boolean;
|
|
94
105
|
};
|
|
95
106
|
export declare function buildAutogateBlockProof(input: BuildAutogateBlockProofInput): AutogateBlockProof;
|
|
107
|
+
/**
|
|
108
|
+
* Upgrade a VERIFIED block proof to v1.2 by attaching the operator-signed
|
|
109
|
+
* `blocked_never_signed` attestation (Decision Outcome Attestation V1).
|
|
110
|
+
*
|
|
111
|
+
* Fail closed: the attestation claims the signer was never invoked, so it
|
|
112
|
+
* attaches ONLY when the transcript's own invariants prove that —
|
|
113
|
+
* `verified === true` (aborted, signer_invocations 0, spend 0, settlements
|
|
114
|
+
* 0). Anything else throws instead of minting a false refuse claim.
|
|
115
|
+
*
|
|
116
|
+
* Returns a NEW proof object (input is not mutated) with schema v1.2 and
|
|
117
|
+
* `outcome_attestation` set. `decision_id` defaults to the proof's run_id;
|
|
118
|
+
* pass `decisionId`/`intentHash` when a DecisionToken covered this refuse
|
|
119
|
+
* so the attestation binds to the exact refused intent.
|
|
120
|
+
*/
|
|
121
|
+
export declare function attachBlockOutcomeAttestation(proof: AutogateBlockProof, options: {
|
|
122
|
+
signer: import("./decision-token.js").DecisionSigner & {
|
|
123
|
+
publicKeyPem?: string;
|
|
124
|
+
};
|
|
125
|
+
decisionId?: string;
|
|
126
|
+
intentHash?: string | null;
|
|
127
|
+
payer?: string | null;
|
|
128
|
+
preflightId?: number | null;
|
|
129
|
+
timestampUnix?: number;
|
|
130
|
+
}): Promise<AutogateBlockProof>;
|
|
96
131
|
/**
|
|
97
132
|
* Resolve a package version from node_modules on disk.
|
|
98
133
|
* Prefer this over `require("pkg/package.json")` — some packages (x402-solana)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-proof.d.ts","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH
|
|
1
|
+
{"version":3,"file":"block-proof.d.ts","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"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"}
|
package/dist/block-proof.js
CHANGED
|
@@ -11,9 +11,13 @@ import { toTrustGateBlockReason } from "./trust-gate-reason.js";
|
|
|
11
11
|
* v1 = original block transcript (hook + invariants only).
|
|
12
12
|
* v1.1 = adds execution_mode + resolved peer versions so stock-seat proofs
|
|
13
13
|
* cannot be confused with harness fallback (S1 closure 2026-08-03).
|
|
14
|
+
* v1.2 = adds the operator-signed Decision Outcome Attestation V1
|
|
15
|
+
* (blocked_never_signed) so the refuse is portable signed evidence, not
|
|
16
|
+
* only a JSON transcript. Attached via attachBlockOutcomeAttestation.
|
|
14
17
|
*/
|
|
15
18
|
export const AUTOGATE_BLOCK_PROOF_SCHEMA = "twzrd.autogate_block_proof.v1";
|
|
16
19
|
export const AUTOGATE_BLOCK_PROOF_SCHEMA_V1_1 = "twzrd.autogate_block_proof.v1.1";
|
|
20
|
+
export const AUTOGATE_BLOCK_PROOF_SCHEMA_V1_2 = "twzrd.autogate_block_proof.v1.2";
|
|
17
21
|
export function buildAutogateBlockProof(input) {
|
|
18
22
|
const internal = input.internal_reason;
|
|
19
23
|
const publicReason = internal
|
|
@@ -69,6 +73,45 @@ export function buildAutogateBlockProof(input) {
|
|
|
69
73
|
}
|
|
70
74
|
return proof;
|
|
71
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Upgrade a VERIFIED block proof to v1.2 by attaching the operator-signed
|
|
78
|
+
* `blocked_never_signed` attestation (Decision Outcome Attestation V1).
|
|
79
|
+
*
|
|
80
|
+
* Fail closed: the attestation claims the signer was never invoked, so it
|
|
81
|
+
* attaches ONLY when the transcript's own invariants prove that —
|
|
82
|
+
* `verified === true` (aborted, signer_invocations 0, spend 0, settlements
|
|
83
|
+
* 0). Anything else throws instead of minting a false refuse claim.
|
|
84
|
+
*
|
|
85
|
+
* Returns a NEW proof object (input is not mutated) with schema v1.2 and
|
|
86
|
+
* `outcome_attestation` set. `decision_id` defaults to the proof's run_id;
|
|
87
|
+
* pass `decisionId`/`intentHash` when a DecisionToken covered this refuse
|
|
88
|
+
* so the attestation binds to the exact refused intent.
|
|
89
|
+
*/
|
|
90
|
+
export async function attachBlockOutcomeAttestation(proof, options) {
|
|
91
|
+
if (proof.verified !== true) {
|
|
92
|
+
throw new Error("[twzrd] attachBlockOutcomeAttestation requires a VERIFIED block proof " +
|
|
93
|
+
"(aborted, signer_invocations=0, spend=0, settlements=0) — refusing to " +
|
|
94
|
+
"sign a blocked_never_signed claim the transcript does not prove");
|
|
95
|
+
}
|
|
96
|
+
const { buildOutcomeAttestation } = await import("./outcome-attestation.js");
|
|
97
|
+
const attestation = await buildOutcomeAttestation({
|
|
98
|
+
decisionId: options.decisionId ?? proof.run_id,
|
|
99
|
+
counterparty: proof.target_seller,
|
|
100
|
+
verdict: "block",
|
|
101
|
+
outcome: "blocked_never_signed",
|
|
102
|
+
timestampUnix: options.timestampUnix ?? Math.floor(Date.parse(proof.timestamp) / 1000),
|
|
103
|
+
// No DecisionToken covered this refuse -> no fabricated intent bind.
|
|
104
|
+
intentHash: options.intentHash ?? null,
|
|
105
|
+
payer: options.payer ?? null,
|
|
106
|
+
settlementTx: null,
|
|
107
|
+
preflightId: options.preflightId ?? null,
|
|
108
|
+
}, options.signer);
|
|
109
|
+
return {
|
|
110
|
+
...proof,
|
|
111
|
+
schema_version: AUTOGATE_BLOCK_PROOF_SCHEMA_V1_2,
|
|
112
|
+
outcome_attestation: attestation,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
72
115
|
/**
|
|
73
116
|
* Resolve a package version from node_modules on disk.
|
|
74
117
|
* Prefer this over `require("pkg/package.json")` — some packages (x402-solana)
|
package/dist/block-proof.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-proof.js","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"block-proof.js","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buyer-seat Path A defaults.
|
|
3
|
+
*
|
|
4
|
+
* Facilitator onBeforeSettle stays free (abort on block only). These defaults
|
|
5
|
+
* apply only on the *buyer* install, and only when a paying `x402Fetch` is
|
|
6
|
+
* already wired — refuse-only seats stay free.
|
|
7
|
+
*
|
|
8
|
+
* Ladder (when x402Fetch is present and flags are unset):
|
|
9
|
+
* block → free refuse
|
|
10
|
+
* warn + price >= $2.50 → $0.05 V6 (requireReceipt)
|
|
11
|
+
* warn + price < $2.50 → $0.001 quick re-decide (escalateOnWarn)
|
|
12
|
+
* allow + price >= $2.50 → $0.05 V6
|
|
13
|
+
* allow + price < $2.50 → free proceed
|
|
14
|
+
*
|
|
15
|
+
* Opt out: `requireReceipt: false` and/or `escalateOnWarn: false`.
|
|
16
|
+
*/
|
|
17
|
+
import type { RequireReceiptPolicy } from "./receipt-policy.js";
|
|
18
|
+
/** ROI break-even from productization (0.05 lookup vs ~2% bad rate). */
|
|
19
|
+
export declare const DEFAULT_BUYER_MATERIAL_USDC = 2.5;
|
|
20
|
+
export declare const DEFAULT_BUYER_REQUIRE_RECEIPT: RequireReceiptPolicy;
|
|
21
|
+
export declare const DEFAULT_BUYER_ESCALATE_ON_WARN: {
|
|
22
|
+
minSpendUsdc: number;
|
|
23
|
+
};
|
|
24
|
+
export type BuyerEscalateOnWarn = false | {
|
|
25
|
+
minSpendUsdc?: number;
|
|
26
|
+
blockBelowScore?: number;
|
|
27
|
+
};
|
|
28
|
+
export type BuyerPathAFlags = {
|
|
29
|
+
x402Fetch?: typeof fetch;
|
|
30
|
+
requireReceipt?: boolean | RequireReceiptPolicy;
|
|
31
|
+
escalateOnWarn?: BuyerEscalateOnWarn;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Apply buyer Path A defaults when a paying fetch is present and the caller
|
|
35
|
+
* did not set the flags. No-op without x402Fetch (refuse-only stays free).
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveBuyerPathADefaults(opts: BuyerPathAFlags): BuyerPathAFlags;
|
|
38
|
+
//# sourceMappingURL=buyer-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buyer-defaults.d.ts","sourceRoot":"","sources":["../src/buyer-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,eAAO,MAAM,6BAA6B,EAAE,oBAK3C,CAAC;AAEF,eAAO,MAAM,8BAA8B;;CAE1C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,KAAK,GACL;IACE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAChD,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAUhF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buyer-seat Path A defaults.
|
|
3
|
+
*
|
|
4
|
+
* Facilitator onBeforeSettle stays free (abort on block only). These defaults
|
|
5
|
+
* apply only on the *buyer* install, and only when a paying `x402Fetch` is
|
|
6
|
+
* already wired — refuse-only seats stay free.
|
|
7
|
+
*
|
|
8
|
+
* Ladder (when x402Fetch is present and flags are unset):
|
|
9
|
+
* block → free refuse
|
|
10
|
+
* warn + price >= $2.50 → $0.05 V6 (requireReceipt)
|
|
11
|
+
* warn + price < $2.50 → $0.001 quick re-decide (escalateOnWarn)
|
|
12
|
+
* allow + price >= $2.50 → $0.05 V6
|
|
13
|
+
* allow + price < $2.50 → free proceed
|
|
14
|
+
*
|
|
15
|
+
* Opt out: `requireReceipt: false` and/or `escalateOnWarn: false`.
|
|
16
|
+
*/
|
|
17
|
+
/** ROI break-even from productization (0.05 lookup vs ~2% bad rate). */
|
|
18
|
+
export const DEFAULT_BUYER_MATERIAL_USDC = 2.5;
|
|
19
|
+
export const DEFAULT_BUYER_REQUIRE_RECEIPT = {
|
|
20
|
+
minSpendUsdc: DEFAULT_BUYER_MATERIAL_USDC,
|
|
21
|
+
onWarn: true,
|
|
22
|
+
hard: true,
|
|
23
|
+
materialWarnOnly: true,
|
|
24
|
+
};
|
|
25
|
+
export const DEFAULT_BUYER_ESCALATE_ON_WARN = {
|
|
26
|
+
minSpendUsdc: 0,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Apply buyer Path A defaults when a paying fetch is present and the caller
|
|
30
|
+
* did not set the flags. No-op without x402Fetch (refuse-only stays free).
|
|
31
|
+
*/
|
|
32
|
+
export function resolveBuyerPathADefaults(opts) {
|
|
33
|
+
if (typeof opts.x402Fetch !== "function")
|
|
34
|
+
return opts;
|
|
35
|
+
const next = { ...opts };
|
|
36
|
+
if (opts.requireReceipt === undefined) {
|
|
37
|
+
next.requireReceipt = { ...DEFAULT_BUYER_REQUIRE_RECEIPT };
|
|
38
|
+
}
|
|
39
|
+
if (opts.escalateOnWarn === undefined) {
|
|
40
|
+
next.escalateOnWarn = { ...DEFAULT_BUYER_ESCALATE_ON_WARN };
|
|
41
|
+
}
|
|
42
|
+
return next;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=buyer-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buyer-defaults.js","sourceRoot":"","sources":["../src/buyer-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,wEAAwE;AACxE,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C,MAAM,CAAC,MAAM,6BAA6B,GAAyB;IACjE,YAAY,EAAE,2BAA2B;IACzC,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,YAAY,EAAE,CAAC;CAChB,CAAC;AAeF;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAqB;IAC7D,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,IAAI,GAAoB,EAAE,GAAG,IAAI,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,6BAA6B,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,8BAA8B,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/decision-token.d.ts
CHANGED
|
@@ -25,7 +25,22 @@ export type PaymentDecision = {
|
|
|
25
25
|
decisionId: string;
|
|
26
26
|
/** ISO-8601. Tokens are short-lived by design. */
|
|
27
27
|
expiresAt: string;
|
|
28
|
+
/**
|
|
29
|
+
* Prior Decision Outcome Attestation V1 leaves this decision cites as
|
|
30
|
+
* evidence ("0x" + 64 hex, domain TWZRD:AO_DECISION_OUTCOME_V1 — see
|
|
31
|
+
* agent-intel DECISION_OUTCOME_ATTESTATION_V1_SPEC.md). Covered by the
|
|
32
|
+
* token signature via canonicalJson, so decision N+1 verifiably commits
|
|
33
|
+
* to the closed outcome of loop N. Absent on legacy tokens (canonicalJson
|
|
34
|
+
* drops undefined fields — existing signatures are unaffected).
|
|
35
|
+
*/
|
|
36
|
+
citedOutcomes?: string[];
|
|
28
37
|
constraints?: DecisionConstraints;
|
|
38
|
+
/**
|
|
39
|
+
* Decimal USDC still available under the budget that blocked this intent
|
|
40
|
+
* (POLICY_MAX_AMOUNT / MANDATE_MONTHLY_CEILING → reason `twzrd_budget_exceeded`).
|
|
41
|
+
* Absent when the block was not budget-related. Signed with the token.
|
|
42
|
+
*/
|
|
43
|
+
budgetRemainingUsdc?: string;
|
|
29
44
|
/** Signer key identifier (for rotation / audit). */
|
|
30
45
|
keyId: string;
|
|
31
46
|
/** base64 Ed25519 signature over the domain-separated canonical payload. */
|
|
@@ -37,6 +52,15 @@ export type DecisionSigner = {
|
|
|
37
52
|
/** PEM (SPKI) for local verification; remote signers publish theirs. */
|
|
38
53
|
publicKeyPem?: string;
|
|
39
54
|
};
|
|
55
|
+
/** Bound on cited leaves per token (keeps tokens small; cite the latest, not history). */
|
|
56
|
+
export declare const MAX_CITED_OUTCOMES = 16;
|
|
57
|
+
/**
|
|
58
|
+
* Validate + normalize cited outcome leaves at ISSUANCE time (fail closed:
|
|
59
|
+
* a malformed citation is a caller bug, not a policy outcome). Lowercases,
|
|
60
|
+
* requires the 0x prefix form, preserves order, rejects duplicates — the
|
|
61
|
+
* cited set must be exact because the signature commits to it byte-for-byte.
|
|
62
|
+
*/
|
|
63
|
+
export declare function normalizeCitedOutcomes(leaves: string[]): string[];
|
|
40
64
|
/** Everything signed — the token minus the signature itself. */
|
|
41
65
|
export declare function decisionPreimage(token: Omit<PaymentDecision, "signature">): Buffer;
|
|
42
66
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-token.d.ts","sourceRoot":"","sources":["../src/decision-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5E,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAElC,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7D,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-token.d.ts","sourceRoot":"","sources":["../src/decision-token.ts"],"names":[],"mappings":"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"}
|
package/dist/decision-token.js
CHANGED
|
@@ -13,6 +13,33 @@
|
|
|
13
13
|
import { createPrivateKey, createPublicKey, generateKeyPairSync, hkdfSync, randomUUID, sign as edSign, verify as edVerify, } from "node:crypto";
|
|
14
14
|
import { canonicalJson, intentHash } from "./intent.js";
|
|
15
15
|
const DECISION_DOMAIN = "twzrd-decision-v1\n";
|
|
16
|
+
/** Outcome-attestation leaves are keccak256 digests: "0x" + 64 lowercase hex. */
|
|
17
|
+
const CITED_OUTCOME_LEAF_RE = /^0x[0-9a-f]{64}$/;
|
|
18
|
+
/** Bound on cited leaves per token (keeps tokens small; cite the latest, not history). */
|
|
19
|
+
export const MAX_CITED_OUTCOMES = 16;
|
|
20
|
+
/**
|
|
21
|
+
* Validate + normalize cited outcome leaves at ISSUANCE time (fail closed:
|
|
22
|
+
* a malformed citation is a caller bug, not a policy outcome). Lowercases,
|
|
23
|
+
* requires the 0x prefix form, preserves order, rejects duplicates — the
|
|
24
|
+
* cited set must be exact because the signature commits to it byte-for-byte.
|
|
25
|
+
*/
|
|
26
|
+
export function normalizeCitedOutcomes(leaves) {
|
|
27
|
+
if (leaves.length > MAX_CITED_OUTCOMES) {
|
|
28
|
+
throw new Error(`[twzrd] citedOutcomes exceeds MAX_CITED_OUTCOMES=${MAX_CITED_OUTCOMES} (got ${leaves.length})`);
|
|
29
|
+
}
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
return leaves.map((leaf) => {
|
|
32
|
+
const norm = leaf.trim().toLowerCase();
|
|
33
|
+
if (!CITED_OUTCOME_LEAF_RE.test(norm)) {
|
|
34
|
+
throw new Error(`[twzrd] cited outcome leaf must be "0x" + 64 hex chars (got ${JSON.stringify(leaf)})`);
|
|
35
|
+
}
|
|
36
|
+
if (seen.has(norm)) {
|
|
37
|
+
throw new Error(`[twzrd] duplicate cited outcome leaf: ${norm}`);
|
|
38
|
+
}
|
|
39
|
+
seen.add(norm);
|
|
40
|
+
return norm;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
16
43
|
/** Everything signed — the token minus the signature itself. */
|
|
17
44
|
export function decisionPreimage(token) {
|
|
18
45
|
return Buffer.concat([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-token.js","sourceRoot":"","sources":["../src/decision-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,IAAI,IAAI,MAAM,EACd,MAAM,IAAI,QAAQ,GAEnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAE5E,MAAM,eAAe,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-token.js","sourceRoot":"","sources":["../src/decision-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,IAAI,IAAI,MAAM,EACd,MAAM,IAAI,QAAQ,GAEnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAE5E,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAoD9C,iFAAiF;AACjF,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEjD,0FAA0F;AAC1F,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAgB;IACrD,IAAI,MAAM,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,oDAAoD,kBAAkB,SAAS,MAAM,CAAC,MAAM,GAAG,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CACvF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,KAAyC;IACxE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAGzC;IACC,IAAI,UAAqB,CAAC;IAC1B,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,CAAC,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC;SAC7C,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;SACvC,QAAQ,EAAE,CAAC;IACd,OAAO;QACL,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,eAAe;QACxC,YAAY;QACZ,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAC1D,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAEpC,kFAAkF;AAClF,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,MAAM,GAAG,gBAAgB;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,0EAA0E;QAC1E,sEAAsE;QACtE,2EAA2E;QAC3E,0EAA0E;QAC1E,4EAA4E;QAC5E,0EAA0E;QAC1E,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5F,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,qFAAqF;AACrF,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,KAAc;IAEd,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAE1E,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,wCAAwC,gBAAgB,uCAAuC;YAC7F,+DAA+D;YAC/D,iFAAiF;YACjF,wFAAwF,CAC3F,CAAC;IACJ,CAAC;IACD,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,sFAAsF;YACpF,kDAAkD,CACrD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,oCAAoC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAC5E,CAAC;IAEF,yDAAyD;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC;QACtD,IAAI;KACL,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC;SAC7C,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;SACvC,QAAQ,EAAE,CAAC;IACd,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,gBAAgB;QAChC,YAAY;QACZ,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAsD,EACtD,MAAsB;IAEtB,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAClF,QAAQ,CACT,CAAC;IACF,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAsB,EACtB,YAAoB;IAEpB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,QAAQ,CACb,IAAI,EACJ,gBAAgB,CAAC,OAAO,CAAC,EACzB,eAAe,CAAC,YAAY,CAAC,EAC7B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CACjC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAaD,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,IAAI,CAAmB;IACvB,UAAU,CAAS;IAC5B,YAAY,IAAsB,EAAE,UAAkB,EAAE,MAAc;QACpE,KAAK,CAAC,WAAW,IAAI,KAAK,MAAM,gBAAgB,UAAU,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAOD,sEAAsE;AACtE,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,OAAO;QACL,OAAO,CAAC,UAAkB;YACxB,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC3C,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAqB,EACrB,KAAsB,EACtB,OAAqC;IAErC,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvC,IAAI,OAAO,EAAE,YAAY,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,uBAAuB,CAC/B,eAAe,EACf,KAAK,CAAC,UAAU,EAChB,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC5D,MAAM,IAAI,uBAAuB,CAC/B,oBAAoB,EACpB,KAAK,CAAC,UAAU,EAChB,eAAe,KAAK,CAAC,QAAQ,EAAE,CAChC,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,uBAAuB,CAC/B,kBAAkB,EAClB,KAAK,CAAC,UAAU,EAChB,cAAc,KAAK,CAAC,SAAS,EAAE,CAChC,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,uBAAuB,CAC/B,sBAAsB,EACtB,KAAK,CAAC,UAAU,EAChB,YAAY,KAAK,CAAC,UAAU,gBAAgB,MAAM,EAAE,CACrD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,uBAAuB,CAC/B,mBAAmB,EACnB,KAAK,CAAC,UAAU,EAChB,iCAAiC,CAClC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
|
package/dist/evaluate.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type TwzrdTier } from "./quick.js";
|
|
2
2
|
import { type RequireReceiptPolicy } from "./receipt-policy.js";
|
|
3
3
|
import type { TwzrdDecision, TwzrdGateConfig, TwzrdReadinessCard, X402PaymentRequirements } from "./types.js";
|
|
4
|
+
import type { BuyerEscalateOnWarn } from "./buyer-defaults.js";
|
|
4
5
|
export type EvaluateX402Options = TwzrdGateConfig & {
|
|
5
6
|
/**
|
|
6
7
|
* When true, automatically fetches the paid TWZRD trust receipt (via x402)
|
|
@@ -41,12 +42,7 @@ export type EvaluateX402Options = TwzrdGateConfig & {
|
|
|
41
42
|
* (warn -> maybe block); never loosens a block or allow. Short-circuits the
|
|
42
43
|
* autoReceipt path for the warn case (no double settle).
|
|
43
44
|
*/
|
|
44
|
-
escalateOnWarn?:
|
|
45
|
-
/** Skip escalation when the resource price is below this - don't pay $0.001 to vet a sub-cent buy. Default 0. */
|
|
46
|
-
minSpendUsdc?: number;
|
|
47
|
-
/** Deny when the paid quick score is below this. Default: preflightMinScore (40). */
|
|
48
|
-
blockBelowScore?: number;
|
|
49
|
-
};
|
|
45
|
+
escalateOnWarn?: BuyerEscalateOnWarn;
|
|
50
46
|
};
|
|
51
47
|
export type EvaluateX402Result = {
|
|
52
48
|
decision: TwzrdDecision | "unknown";
|
|
@@ -83,11 +79,12 @@ export type EvaluateX402Result = {
|
|
|
83
79
|
* Evaluate an x402 resource before the buyer pays:
|
|
84
80
|
* 1. Run free TWZRD preflight on the seller (no auth, no cost).
|
|
85
81
|
* 2. Return decision + trust score.
|
|
86
|
-
* 3. If
|
|
87
|
-
* $0.001 quick tier and re-decide on the paid score (the autonomous risk loop).
|
|
88
|
-
* 4. Else if autoReceipt / requireReceipt triggers and decision !== block:
|
|
82
|
+
* 3. If autoReceipt / requireReceipt triggers and decision !== block:
|
|
89
83
|
* auto-fetch the paid TWZRD trust receipt via x402Fetch (Path A, $0.05 V6).
|
|
90
84
|
* With requireReceipt.hard (default), deny spend if Path A fails.
|
|
85
|
+
* 4. Else if escalateOnWarn is set and decision=warn: settle the cheap
|
|
86
|
+
* $0.001 quick tier and re-decide on the paid score (only when Path A
|
|
87
|
+
* did not already fire).
|
|
91
88
|
*
|
|
92
89
|
* Defaults to gateOnCanSpend=false (decision-only) — the free-tier preflight
|
|
93
90
|
* returns can_spend=false for most unknown sellers, which would block too eagerly
|