twzrd-x402-gate 0.9.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -9
- package/bin/twzrd-evidence-bundle.js +26 -0
- package/dist/adoption-proof.d.ts +1 -0
- package/dist/adoption-proof.d.ts.map +1 -1
- package/dist/adoption-proof.js +2 -1
- package/dist/adoption-proof.js.map +1 -1
- package/dist/decision-token.d.ts +23 -1
- package/dist/decision-token.d.ts.map +1 -1
- package/dist/decision-token.js +44 -14
- package/dist/decision-token.js.map +1 -1
- package/dist/directory.d.ts +35 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +95 -0
- package/dist/directory.js.map +1 -0
- package/dist/evidence-bundle.d.ts +89 -0
- package/dist/evidence-bundle.d.ts.map +1 -0
- package/dist/evidence-bundle.js +132 -0
- package/dist/evidence-bundle.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/spend-control.d.ts +26 -15
- package/dist/spend-control.d.ts.map +1 -1
- package/dist/spend-control.js +81 -25
- package/dist/spend-control.js.map +1 -1
- package/dist/unsafe.d.ts +11 -0
- package/dist/unsafe.d.ts.map +1 -0
- package/dist/unsafe.js +11 -0
- package/dist/unsafe.js.map +1 -0
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
# twzrd-x402-gate
|
|
2
2
|
|
|
3
|
-
**TWZRD is the spend-control SDK for agents paying over x402
|
|
3
|
+
**Don't let your agent sign blind.** TWZRD is the spend-control SDK for agents paying over x402 — and the default
|
|
4
4
|
`onBeforePaymentCreation` policy engine for official x402 clients.
|
|
5
5
|
|
|
6
|
+
Commerce loop (directory → preflight → AutoGate → verify → evidence bundle):
|
|
7
|
+
repo [docs/COMMERCE-KIT.md](../docs/COMMERCE-KIT.md). `exportEvidenceBundle` /
|
|
8
|
+
`npx twzrd-evidence-bundle` writes `twzrd.evidence_bundle.v1`. This package is
|
|
9
|
+
not Catena's Agent Commerce Kit.
|
|
10
|
+
|
|
6
11
|
### One call (named export `twzrd`)
|
|
7
12
|
|
|
8
13
|
```js
|
|
@@ -11,17 +16,19 @@ import { twzrd } from "twzrd-x402-gate";
|
|
|
11
16
|
const result = await twzrd.safeFetch(url, {
|
|
12
17
|
maxSpend: "0.10", // per-call cap AND cumulative budget
|
|
13
18
|
allowNetworks: ["solana", "base"],
|
|
14
|
-
requireOfferBinding: true, //
|
|
19
|
+
requireOfferBinding: true, // compose → verify hard bind → only then pay()
|
|
20
|
+
composeBoundTransaction, // build unsigned bound bytes (no keys)
|
|
21
|
+
pay, // sign/submit only after bind-v1 hard verify
|
|
15
22
|
});
|
|
16
23
|
// result.verdict: "allow" | "warn" | "block" — blocks have signerInvocations === 0
|
|
17
24
|
// result.receipt: { strength: "hard"|"soft"|"refuse", leaf_hash, fact_type: "resource_bound" }
|
|
18
25
|
```
|
|
19
26
|
|
|
20
|
-
`requireOfferBinding` is
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
`requireOfferBinding` is fail-closed: missing `composeBoundTransaction` returns
|
|
28
|
+
`bind_required_no_compose` with `signerInvocations === 0` (pay is never called).
|
|
29
|
+
The gate verifies the composed bytes, then calls `pay()` with that
|
|
30
|
+
`transactionBase64`. The old post-pay check remains as
|
|
31
|
+
`verifyOfferBindingAfterPay` only. This SDK never holds keys.
|
|
25
32
|
|
|
26
33
|
Full walkthrough: [QUICKSTART.md](https://github.com/twzrd-sol/twzrd-trust/blob/main/QUICKSTART.md) ·
|
|
27
34
|
verify receipts yourself: [REVIEW.md](https://github.com/twzrd-sol/twzrd-trust/blob/main/REVIEW.md)
|
|
@@ -308,8 +315,12 @@ assertIntentApproved(intentBeingSigned, token, {
|
|
|
308
315
|
registry, // replay / consume-once
|
|
309
316
|
publicKeyPem: signer.publicKeyPem, // signature verification
|
|
310
317
|
});
|
|
311
|
-
// throws
|
|
312
|
-
//
|
|
318
|
+
// throws MISSING_VERIFIER_KEY | BAD_SIGNATURE | INTENT_HASH_MISMATCH |
|
|
319
|
+
// DECISION_EXPIRED | DECISION_NOT_ALLOW | DECISION_REPLAYED
|
|
320
|
+
// -> the signer is never invoked
|
|
321
|
+
// In-process matching without a key is unsafeAssertIntentApprovedWithoutSignature,
|
|
322
|
+
// exported only from the "twzrd-x402-gate/unsafe" subpath — never the root:
|
|
323
|
+
// import { unsafeAssertIntentApprovedWithoutSignature } from "twzrd-x402-gate/unsafe";
|
|
313
324
|
```
|
|
314
325
|
|
|
315
326
|
- `PaymentIntent` v1 (frozen): protocol `x402 | ap2 | ucp | mpp | direct` +
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Export a twzrd.evidence_bundle.v1 from the no-spend adoption harness.
|
|
4
|
+
*
|
|
5
|
+
* npx twzrd-evidence-bundle --integration acme-ops-agent-v1 --run-id "$(uuidgen)"
|
|
6
|
+
* npx twzrd-evidence-bundle --integration acme-ops-agent-v1 --run-id <uuid> --out bundle.json
|
|
7
|
+
*
|
|
8
|
+
* Correlation evidence only — not EXTERNAL_RUN by itself.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync } from "node:fs";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
13
|
+
|
|
14
|
+
const pkgRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
15
|
+
const dist = join(pkgRoot, "dist", "evidence-bundle.js");
|
|
16
|
+
|
|
17
|
+
if (!existsSync(dist)) {
|
|
18
|
+
console.error("twzrd-evidence-bundle: run `npm run build` in twzrd-x402-gate or install the published package");
|
|
19
|
+
process.exit(2);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const { main } = await import(pathToFileURL(dist).href);
|
|
23
|
+
await main(process.argv.slice(2)).catch((err) => {
|
|
24
|
+
console.error(err instanceof Error ? err.message : err);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
package/dist/adoption-proof.d.ts
CHANGED
|
@@ -91,6 +91,7 @@ export type RunGateAdoptionProofOptions = {
|
|
|
91
91
|
*/
|
|
92
92
|
lineage?: GateAdoptionLineage;
|
|
93
93
|
};
|
|
94
|
+
export declare function isInternalIntegration(integration: string): boolean;
|
|
94
95
|
/**
|
|
95
96
|
* Run the deterministic no-spend adoption proof.
|
|
96
97
|
* Never contacts a wallet; never spends USDC. Preflight is mocked.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adoption-proof.d.ts","sourceRoot":"","sources":["../src/adoption-proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,EAAG,mCAA4C,CAAC;AAEvF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,gDAAgD,CAAC;AACnF,eAAO,MAAM,sBAAsB,4CAA4C,CAAC;AAChF,eAAO,MAAM,uBAAuB,kDAAkD,CAAC;AAEvF,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,YAAY,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,oBAAoB,EAAE;QACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,8BAA8B,EAAE,OAAO,CAAC;IACxC,eAAe,EAAE,OAAO,CAAC;IACzB,6BAA6B,EAAE,OAAO,CAAC;IACvC,2BAA2B,EAAE,OAAO,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,oBAAoB,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,6BAA6B,CAAC;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,mBAAmB,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,sBAAsB,CAAC;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ;;;OAGG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gDAAgD;IAChD,aAAa,EAAE,+CAA+C,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"adoption-proof.d.ts","sourceRoot":"","sources":["../src/adoption-proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,EAAG,mCAA4C,CAAC;AAEvF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,gDAAgD,CAAC;AACnF,eAAO,MAAM,sBAAsB,4CAA4C,CAAC;AAChF,eAAO,MAAM,uBAAuB,kDAAkD,CAAC;AAEvF,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,YAAY,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,oBAAoB,EAAE;QACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,8BAA8B,EAAE,OAAO,CAAC;IACxC,eAAe,EAAE,OAAO,CAAC;IACzB,6BAA6B,EAAE,OAAO,CAAC;IACvC,2BAA2B,EAAE,OAAO,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,oBAAoB,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,6BAA6B,CAAC;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,mBAAmB,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,sBAAsB,CAAC;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ;;;OAGG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gDAAgD;IAChD,aAAa,EAAE,+CAA+C,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AA+EF,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAclE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,sBAAsB,CAAC,CAsLjC;AAED,2EAA2E;AAC3E,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlF"}
|
package/dist/adoption-proof.js
CHANGED
|
@@ -83,12 +83,13 @@ function baseRequirements(amount) {
|
|
|
83
83
|
scheme: "exact",
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
|
-
function isInternalIntegration(integration) {
|
|
86
|
+
export function isInternalIntegration(integration) {
|
|
87
87
|
const i = integration.toLowerCase();
|
|
88
88
|
return (i.startsWith("twzrd-") ||
|
|
89
89
|
i.startsWith("twzrd/") ||
|
|
90
90
|
i.startsWith("ops-") ||
|
|
91
91
|
i.startsWith("test-") ||
|
|
92
|
+
i.startsWith("demo-") ||
|
|
92
93
|
i === "dogfood" ||
|
|
93
94
|
i.includes("dogfood") ||
|
|
94
95
|
i.includes("internal") ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adoption-proof.js","sourceRoot":"","sources":["../src/adoption-proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,0BAA0B,GAK3B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,0BAA0B,GAAG,mCAA4C,CAAC;AAEvF,wEAAwE;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAAG,6CAA6C,CAAC;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,yCAAyC,CAAC;AAChF,MAAM,CAAC,MAAM,uBAAuB,GAAG,+CAA+C,CAAC;AAkFvF,SAAS,UAAU;IAIjB,IAAI,IAIS,CAAC;IACd,MAAM,MAAM,GAAmB;QAC7B,uBAAuB,CAAC,CAAC;YACvB,IAAI,GAAG,CAAC,CAAC;YACT,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;IACF,OAAO;QACL,MAAM;QACN,KAAK,CAAC,IAAI,CAAC,GAAG;YACZ,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAoC,EAAE,QAAiB;IAC5E,OAAO;QACL,cAAc,EAAE;YACd,QAAQ;YACR,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACxD,aAAa,EAAE,qBAAqB;SACrC;QACD,YAAY,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAa;IAK5C,IAAI,IAAI,GAAmB,IAAI,CAAC;IAChC,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAa,EAAE,IAA4C,EAAE,EAAE;QACvF,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAmD,CAAC,CAAC;QAC9E,UAAU,GAAG,IAAI,CAAC;QAClB,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAgC,CAAC;gBACpE,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;oBAAE,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC;YAClF,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;IACL,CAAC,CAA4B,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;QACvB,gBAAgB,EAAE,GAAG,EAAE,CAAC,UAAU;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO;QACL,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,sBAAsB;QAC/B,MAAM;QACN,KAAK,EAAE,8CAA8C;QACrD,QAAQ,EAAE,uBAAuB;QACjC,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"adoption-proof.js","sourceRoot":"","sources":["../src/adoption-proof.ts"],"names":[],"mappings":"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"}
|
package/dist/decision-token.d.ts
CHANGED
|
@@ -93,7 +93,14 @@ export declare function createSeededDecisionSigner(secret: string, keyId?: strin
|
|
|
93
93
|
};
|
|
94
94
|
export declare function signDecision(unsigned: Omit<PaymentDecision, "signature" | "keyId">, signer: DecisionSigner): Promise<PaymentDecision>;
|
|
95
95
|
export declare function verifyDecisionSignature(token: PaymentDecision, publicKeyPem: string): boolean;
|
|
96
|
-
export type BindingErrorCode = "INTENT_HASH_MISMATCH" | "DECISION_EXPIRED" | "DECISION_NOT_ALLOW" | "DECISION_REPLAYED" | "
|
|
96
|
+
export type BindingErrorCode = "INTENT_HASH_MISMATCH" | "DECISION_EXPIRED" | "DECISION_NOT_ALLOW" | "DECISION_REPLAYED" | "MISSING_VERIFIER_KEY" | "BAD_SIGNATURE";
|
|
97
|
+
/** Canonical code thrown when `assertIntentApproved` has no pinned key. */
|
|
98
|
+
export declare const MISSING_VERIFIER_KEY = "MISSING_VERIFIER_KEY";
|
|
99
|
+
/**
|
|
100
|
+
* @deprecated Use {@link MISSING_VERIFIER_KEY}. Kept so 0.9.x consumers that
|
|
101
|
+
* matched the pre-rename code keep compiling and matching — same thrown value.
|
|
102
|
+
*/
|
|
103
|
+
export declare const MISSING_VERIFICATION_KEY = "MISSING_VERIFIER_KEY";
|
|
97
104
|
export declare class TwzrdIntentBindingError extends Error {
|
|
98
105
|
readonly code: BindingErrorCode;
|
|
99
106
|
readonly decisionId: string;
|
|
@@ -112,11 +119,26 @@ export type AssertIntentApprovedOptions = {
|
|
|
112
119
|
/** Required trust anchor: verify the token signature against this key. */
|
|
113
120
|
publicKeyPem: string;
|
|
114
121
|
};
|
|
122
|
+
export type UnsafeAssertIntentApprovedOptions = {
|
|
123
|
+
now?: number;
|
|
124
|
+
registry?: DecisionRegistry;
|
|
125
|
+
};
|
|
115
126
|
/**
|
|
116
127
|
* The wallet-side check. Call with the EXACT intent about to be signed.
|
|
117
128
|
* Throws TwzrdIntentBindingError on any violation; returns void when the
|
|
118
129
|
* signature may proceed. A caught error means: do not invoke the signer.
|
|
130
|
+
* `publicKeyPem` is required — forged tokens must not be accepted.
|
|
119
131
|
*/
|
|
120
132
|
export declare function assertIntentApproved(intent: PaymentIntent, token: PaymentDecision, options?: AssertIntentApprovedOptions): void;
|
|
133
|
+
/**
|
|
134
|
+
* In-process intent matching without signature verification. Forged tokens
|
|
135
|
+
* pass if the remaining fields match. Prefer `assertIntentApproved`.
|
|
136
|
+
*
|
|
137
|
+
* UNSAFE: never share a `registry` instance between this and
|
|
138
|
+
* `assertIntentApproved` expecting them to interact — consumption here is
|
|
139
|
+
* namespaced separately so an unverified call can neither consume nor be
|
|
140
|
+
* blocked by the signed path's consume-once state.
|
|
141
|
+
*/
|
|
142
|
+
export declare function unsafeAssertIntentApprovedWithoutSignature(intent: PaymentIntent, token: PaymentDecision, options?: UnsafeAssertIntentApprovedOptions): void;
|
|
121
143
|
export declare function newDecisionId(): string;
|
|
122
144
|
//# sourceMappingURL=decision-token.d.ts.map
|
|
@@ -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;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAElC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,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;AAKF,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoBjE;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,MAAM,CAKlF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,cAAc,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAe5C;AAsDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,cAAc,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAuC3C;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,OAAO,CAAC,EACtD,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,eAAe,CAAC,CAM1B;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAYT;AAMD,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,GACnB,
|
|
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
|
@@ -180,6 +180,13 @@ export function verifyDecisionSignature(token, publicKeyPem) {
|
|
|
180
180
|
return false;
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
+
/** Canonical code thrown when `assertIntentApproved` has no pinned key. */
|
|
184
|
+
export const MISSING_VERIFIER_KEY = "MISSING_VERIFIER_KEY";
|
|
185
|
+
/**
|
|
186
|
+
* @deprecated Use {@link MISSING_VERIFIER_KEY}. Kept so 0.9.x consumers that
|
|
187
|
+
* matched the pre-rename code keep compiling and matching — same thrown value.
|
|
188
|
+
*/
|
|
189
|
+
export const MISSING_VERIFICATION_KEY = MISSING_VERIFIER_KEY;
|
|
183
190
|
export class TwzrdIntentBindingError extends Error {
|
|
184
191
|
code;
|
|
185
192
|
decisionId;
|
|
@@ -202,33 +209,56 @@ export function createDecisionRegistry() {
|
|
|
202
209
|
},
|
|
203
210
|
};
|
|
204
211
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
export function assertIntentApproved(intent, token, options) {
|
|
212
|
+
function assertIntentConstraints(intent, token, options,
|
|
213
|
+
// Namespaces registry consumption so an unverified (unsafe) call can never
|
|
214
|
+
// consume — or collide with — the consume-once slot a signature-verified
|
|
215
|
+
// call relies on, even if the same DecisionRegistry instance is shared.
|
|
216
|
+
registryKeyPrefix) {
|
|
211
217
|
const now = options?.now ?? Date.now();
|
|
212
|
-
if (!options?.publicKeyPem) {
|
|
213
|
-
throw new TwzrdIntentBindingError("MISSING_VERIFICATION_KEY", token.decisionId, "a pinned decision verification key is required before signing");
|
|
214
|
-
}
|
|
215
|
-
if (!verifyDecisionSignature(token, options.publicKeyPem)) {
|
|
216
|
-
throw new TwzrdIntentBindingError("BAD_SIGNATURE", token.decisionId, "decision token signature did not verify");
|
|
217
|
-
}
|
|
218
218
|
if (token.decision !== "allow" && token.decision !== "warn") {
|
|
219
219
|
throw new TwzrdIntentBindingError("DECISION_NOT_ALLOW", token.decisionId, `decision is ${token.decision}`);
|
|
220
220
|
}
|
|
221
|
-
|
|
221
|
+
const expiresAtMs = Date.parse(token.expiresAt);
|
|
222
|
+
// An unparseable expiresAt must fail closed (Date.parse -> NaN, and every
|
|
223
|
+
// comparison against NaN is false) rather than silently never expiring.
|
|
224
|
+
if (!(now < expiresAtMs)) {
|
|
222
225
|
throw new TwzrdIntentBindingError("DECISION_EXPIRED", token.decisionId, `expired at ${token.expiresAt}`);
|
|
223
226
|
}
|
|
224
227
|
const actual = intentHash(intent);
|
|
225
228
|
if (actual !== token.intentHash) {
|
|
226
229
|
throw new TwzrdIntentBindingError("INTENT_HASH_MISMATCH", token.decisionId, `approved ${token.intentHash} but signing ${actual}`);
|
|
227
230
|
}
|
|
228
|
-
if (options?.registry && !options.registry.consume(token.decisionId)) {
|
|
231
|
+
if (options?.registry && !options.registry.consume(registryKeyPrefix + token.decisionId)) {
|
|
229
232
|
throw new TwzrdIntentBindingError("DECISION_REPLAYED", token.decisionId, "decision token already consumed");
|
|
230
233
|
}
|
|
231
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* The wallet-side check. Call with the EXACT intent about to be signed.
|
|
237
|
+
* Throws TwzrdIntentBindingError on any violation; returns void when the
|
|
238
|
+
* signature may proceed. A caught error means: do not invoke the signer.
|
|
239
|
+
* `publicKeyPem` is required — forged tokens must not be accepted.
|
|
240
|
+
*/
|
|
241
|
+
export function assertIntentApproved(intent, token, options) {
|
|
242
|
+
if (!options?.publicKeyPem) {
|
|
243
|
+
throw new TwzrdIntentBindingError(MISSING_VERIFIER_KEY, token.decisionId, "a pinned decision verification key is required before signing");
|
|
244
|
+
}
|
|
245
|
+
if (!verifyDecisionSignature(token, options.publicKeyPem)) {
|
|
246
|
+
throw new TwzrdIntentBindingError("BAD_SIGNATURE", token.decisionId, "decision token signature did not verify");
|
|
247
|
+
}
|
|
248
|
+
assertIntentConstraints(intent, token, options, "");
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* In-process intent matching without signature verification. Forged tokens
|
|
252
|
+
* pass if the remaining fields match. Prefer `assertIntentApproved`.
|
|
253
|
+
*
|
|
254
|
+
* UNSAFE: never share a `registry` instance between this and
|
|
255
|
+
* `assertIntentApproved` expecting them to interact — consumption here is
|
|
256
|
+
* namespaced separately so an unverified call can neither consume nor be
|
|
257
|
+
* blocked by the signed path's consume-once state.
|
|
258
|
+
*/
|
|
259
|
+
export function unsafeAssertIntentApprovedWithoutSignature(intent, token, options) {
|
|
260
|
+
assertIntentConstraints(intent, token, options, "unsafe:");
|
|
261
|
+
}
|
|
232
262
|
export function newDecisionId() {
|
|
233
263
|
return randomUUID();
|
|
234
264
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-token.js","sourceRoot":"","sources":["../src/decision-token.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"decision-token.js","sourceRoot":"","sources":["../src/decision-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin directory client — trust sits beside discovery, not inside it.
|
|
3
|
+
*
|
|
4
|
+
* GET /v1/intel/resources (source of truth) and GET /v1/intel/x402-directory
|
|
5
|
+
* (multi-bazaar overlay). No ranking, no local cache, no TWZRD-owned catalog.
|
|
6
|
+
* Callers pick a callable, then preflight the payTo.
|
|
7
|
+
*/
|
|
8
|
+
export type DirectorySource = "resources" | "x402-directory";
|
|
9
|
+
export type DirectoryListing = {
|
|
10
|
+
resourceUrl: string | null;
|
|
11
|
+
payTo: string | null;
|
|
12
|
+
live402: boolean | null;
|
|
13
|
+
listed: boolean | null;
|
|
14
|
+
name: string | null;
|
|
15
|
+
source: DirectorySource;
|
|
16
|
+
};
|
|
17
|
+
export type ListDirectoryOptions = {
|
|
18
|
+
intelBase?: string;
|
|
19
|
+
fetch?: typeof fetch;
|
|
20
|
+
limit?: number;
|
|
21
|
+
live402Only?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare function normalizeDirectoryRow(row: Record<string, unknown>, source: DirectorySource): DirectoryListing;
|
|
24
|
+
/** Resource join — source of truth for listed | live_402 callables. */
|
|
25
|
+
export declare function listResources(opts?: ListDirectoryOptions): Promise<DirectoryListing[]>;
|
|
26
|
+
/** Multi-bazaar overlay. Does not rank; TWZRD only enriches pay_to. */
|
|
27
|
+
export declare function listX402Directory(opts?: ListDirectoryOptions): Promise<DirectoryListing[]>;
|
|
28
|
+
/**
|
|
29
|
+
* First usable callable: prefer a live_402 row with payTo, else any row with payTo.
|
|
30
|
+
* No ranking by volume, wash, or score.
|
|
31
|
+
*/
|
|
32
|
+
export declare function pickCallable(listings: DirectoryListing[]): DirectoryListing | null;
|
|
33
|
+
/** List resource-join first, fall back to the bazaar overlay if empty. */
|
|
34
|
+
export declare function listDirectoryCallables(opts?: ListDirectoryOptions): Promise<DirectoryListing[]>;
|
|
35
|
+
//# sourceMappingURL=directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAuCF,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,EAAE,eAAe,GACtB,gBAAgB,CAiBlB;AAaD,uEAAuE;AACvE,wBAAsB,aAAa,CACjC,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7B;AAED,uEAAuE;AACvE,wBAAsB,iBAAiB,CACrC,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAQ7B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAGlF;AAED,0EAA0E;AAC1E,wBAAsB,sBAAsB,CAC1C,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAI7B"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin directory client — trust sits beside discovery, not inside it.
|
|
3
|
+
*
|
|
4
|
+
* GET /v1/intel/resources (source of truth) and GET /v1/intel/x402-directory
|
|
5
|
+
* (multi-bazaar overlay). No ranking, no local cache, no TWZRD-owned catalog.
|
|
6
|
+
* Callers pick a callable, then preflight the payTo.
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_INTEL = "https://intel.twzrd.xyz";
|
|
9
|
+
function intelBase(opts) {
|
|
10
|
+
return (opts?.intelBase ?? process.env.TWZRD_INTEL_BASE ?? DEFAULT_INTEL).replace(/\/+$/, "");
|
|
11
|
+
}
|
|
12
|
+
function asRecords(body) {
|
|
13
|
+
if (Array.isArray(body)) {
|
|
14
|
+
return body.filter((row) => !!row && typeof row === "object");
|
|
15
|
+
}
|
|
16
|
+
if (!body || typeof body !== "object")
|
|
17
|
+
return [];
|
|
18
|
+
const obj = body;
|
|
19
|
+
for (const key of ["resources", "items", "results", "data", "listings"]) {
|
|
20
|
+
const v = obj[key];
|
|
21
|
+
if (Array.isArray(v)) {
|
|
22
|
+
return v.filter((row) => !!row && typeof row === "object");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
function str(row, ...keys) {
|
|
28
|
+
for (const key of keys) {
|
|
29
|
+
const v = row[key];
|
|
30
|
+
if (typeof v === "string" && v.trim())
|
|
31
|
+
return v.trim();
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function flag(row, ...keys) {
|
|
36
|
+
for (const key of keys) {
|
|
37
|
+
const v = row[key];
|
|
38
|
+
if (typeof v === "boolean")
|
|
39
|
+
return v;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
export function normalizeDirectoryRow(row, source) {
|
|
44
|
+
const nested = row.resource && typeof row.resource === "object"
|
|
45
|
+
? row.resource
|
|
46
|
+
: {};
|
|
47
|
+
return {
|
|
48
|
+
resourceUrl: str(row, "resource_url", "resourceUrl", "url", "endpoint") ??
|
|
49
|
+
str(nested, "url", "resource_url"),
|
|
50
|
+
payTo: str(row, "pay_to", "payTo", "seller_wallet", "sellerWallet") ??
|
|
51
|
+
str(nested, "pay_to", "payTo"),
|
|
52
|
+
live402: flag(row, "live_402", "live402"),
|
|
53
|
+
listed: flag(row, "listed"),
|
|
54
|
+
name: str(row, "name", "resource_name", "title") ?? str(nested, "name"),
|
|
55
|
+
source,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function getJson(url, fetchImpl) {
|
|
59
|
+
const resp = await fetchImpl(url, { headers: { accept: "application/json" } });
|
|
60
|
+
if (!resp.ok) {
|
|
61
|
+
throw new Error(`[twzrd-x402-gate] directory HTTP ${resp.status} for ${url}`);
|
|
62
|
+
}
|
|
63
|
+
return resp.json();
|
|
64
|
+
}
|
|
65
|
+
/** Resource join — source of truth for listed | live_402 callables. */
|
|
66
|
+
export async function listResources(opts = {}) {
|
|
67
|
+
const fetchImpl = opts.fetch ?? globalThis.fetch;
|
|
68
|
+
const limit = opts.limit ?? 20;
|
|
69
|
+
const live = opts.live402Only === true ? "&live_402_only=true" : "";
|
|
70
|
+
const body = await getJson(`${intelBase(opts)}/v1/intel/resources?limit=${limit}${live}`, fetchImpl);
|
|
71
|
+
return asRecords(body).map((row) => normalizeDirectoryRow(row, "resources"));
|
|
72
|
+
}
|
|
73
|
+
/** Multi-bazaar overlay. Does not rank; TWZRD only enriches pay_to. */
|
|
74
|
+
export async function listX402Directory(opts = {}) {
|
|
75
|
+
const fetchImpl = opts.fetch ?? globalThis.fetch;
|
|
76
|
+
const limit = opts.limit ?? 20;
|
|
77
|
+
const body = await getJson(`${intelBase(opts)}/v1/intel/x402-directory?limit=${limit}`, fetchImpl);
|
|
78
|
+
return asRecords(body).map((row) => normalizeDirectoryRow(row, "x402-directory"));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* First usable callable: prefer a live_402 row with payTo, else any row with payTo.
|
|
82
|
+
* No ranking by volume, wash, or score.
|
|
83
|
+
*/
|
|
84
|
+
export function pickCallable(listings) {
|
|
85
|
+
const withPayTo = listings.filter((row) => row.payTo);
|
|
86
|
+
return withPayTo.find((row) => row.live402 === true) ?? withPayTo[0] ?? null;
|
|
87
|
+
}
|
|
88
|
+
/** List resource-join first, fall back to the bazaar overlay if empty. */
|
|
89
|
+
export async function listDirectoryCallables(opts = {}) {
|
|
90
|
+
const resources = await listResources(opts);
|
|
91
|
+
if (resources.length > 0)
|
|
92
|
+
return resources;
|
|
93
|
+
return listX402Directory(opts);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribution-safe evidence bundle — the learn step of the commerce loop.
|
|
3
|
+
*
|
|
4
|
+
* Joins artifacts already produced by the gate (transcript, decision, bind-v1,
|
|
5
|
+
* V6/ACK-Pay receipt, ledger slice, refuse attestation) into one export an
|
|
6
|
+
* operator can publish without forensic work. Redacts secrets by construction.
|
|
7
|
+
*
|
|
8
|
+
* This is correlation / journey evidence. It is NOT EXTERNAL_RUN by itself.
|
|
9
|
+
*/
|
|
10
|
+
import { type GateAdoptionLineage, type GateAdoptionTranscript } from "./adoption-proof.js";
|
|
11
|
+
export declare const EVIDENCE_BUNDLE_SCHEMA: "twzrd.evidence_bundle.v1";
|
|
12
|
+
export type EvidenceDecision = {
|
|
13
|
+
verdict: string;
|
|
14
|
+
approved: boolean;
|
|
15
|
+
reason?: string;
|
|
16
|
+
signerInvocations: number;
|
|
17
|
+
preflightId?: number | null;
|
|
18
|
+
decisionId?: string | null;
|
|
19
|
+
};
|
|
20
|
+
export type EvidenceBind = {
|
|
21
|
+
strength?: string;
|
|
22
|
+
evidence_level?: string;
|
|
23
|
+
leaf_hash?: string | null;
|
|
24
|
+
fact_type?: string;
|
|
25
|
+
};
|
|
26
|
+
export type EvidenceReceipt = {
|
|
27
|
+
id?: string;
|
|
28
|
+
leaf?: string;
|
|
29
|
+
fact_type?: string;
|
|
30
|
+
ack_pay?: boolean;
|
|
31
|
+
};
|
|
32
|
+
export type EvidenceLedgerSlice = {
|
|
33
|
+
spendRows: number;
|
|
34
|
+
lastHash?: string;
|
|
35
|
+
verdicts: Array<{
|
|
36
|
+
outcome: string;
|
|
37
|
+
reason_codes?: string[];
|
|
38
|
+
signer_invocations?: number;
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
export type EvidenceOutcomeAttestation = {
|
|
42
|
+
outcome: string;
|
|
43
|
+
leaf?: string;
|
|
44
|
+
signing_pubkey?: string | null;
|
|
45
|
+
};
|
|
46
|
+
export type EvidenceBundle = {
|
|
47
|
+
schema: typeof EVIDENCE_BUNDLE_SCHEMA;
|
|
48
|
+
package: "twzrd-x402-gate";
|
|
49
|
+
packageVersion: string;
|
|
50
|
+
exportedAt: string;
|
|
51
|
+
attribution: {
|
|
52
|
+
integration: string;
|
|
53
|
+
runId: string;
|
|
54
|
+
};
|
|
55
|
+
lineage: GateAdoptionLineage;
|
|
56
|
+
notExternalRunProof: string[];
|
|
57
|
+
decision: EvidenceDecision;
|
|
58
|
+
transcript?: Pick<GateAdoptionTranscript, "schema" | "mode" | "ok" | "assertions" | "proofKind"> & {
|
|
59
|
+
stepCount: number;
|
|
60
|
+
};
|
|
61
|
+
bind?: EvidenceBind;
|
|
62
|
+
receipt?: EvidenceReceipt;
|
|
63
|
+
ledger: EvidenceLedgerSlice;
|
|
64
|
+
outcomeAttestation?: EvidenceOutcomeAttestation;
|
|
65
|
+
redactions: string[];
|
|
66
|
+
};
|
|
67
|
+
export type ExportEvidenceBundleOptions = {
|
|
68
|
+
attribution: {
|
|
69
|
+
integration: string;
|
|
70
|
+
runId: string;
|
|
71
|
+
};
|
|
72
|
+
lineage?: GateAdoptionLineage;
|
|
73
|
+
decision?: EvidenceDecision;
|
|
74
|
+
transcript?: GateAdoptionTranscript;
|
|
75
|
+
bind?: EvidenceBind;
|
|
76
|
+
receipt?: EvidenceReceipt;
|
|
77
|
+
ledger?: EvidenceLedgerSlice;
|
|
78
|
+
outcomeAttestation?: EvidenceOutcomeAttestation;
|
|
79
|
+
};
|
|
80
|
+
export declare function fingerprint(value: string): string;
|
|
81
|
+
export declare function exportEvidenceBundle(opts: ExportEvidenceBundleOptions): EvidenceBundle;
|
|
82
|
+
export declare function writeEvidenceBundle(bundle: EvidenceBundle, filePath: string): void;
|
|
83
|
+
export declare function exportEvidenceBundleFromAdoptionProof(opts: {
|
|
84
|
+
integration?: string;
|
|
85
|
+
runId?: string;
|
|
86
|
+
lineage?: GateAdoptionLineage;
|
|
87
|
+
}): Promise<EvidenceBundle>;
|
|
88
|
+
export declare function main(argv?: string[]): Promise<EvidenceBundle>;
|
|
89
|
+
//# sourceMappingURL=evidence-bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-bundle.d.ts","sourceRoot":"","sources":["../src/evidence-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribution-safe evidence bundle — the learn step of the commerce loop.
|
|
3
|
+
*
|
|
4
|
+
* Joins artifacts already produced by the gate (transcript, decision, bind-v1,
|
|
5
|
+
* V6/ACK-Pay receipt, ledger slice, refuse attestation) into one export an
|
|
6
|
+
* operator can publish without forensic work. Redacts secrets by construction.
|
|
7
|
+
*
|
|
8
|
+
* This is correlation / journey evidence. It is NOT EXTERNAL_RUN by itself.
|
|
9
|
+
*/
|
|
10
|
+
import { writeFileSync } from "node:fs";
|
|
11
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
12
|
+
import { ADOPTION_TRANSCRIPT_SCHEMA, isInternalIntegration, runGateAdoptionProof, } from "./adoption-proof.js";
|
|
13
|
+
import { CLIENT_VERSION } from "./version.js";
|
|
14
|
+
export const EVIDENCE_BUNDLE_SCHEMA = "twzrd.evidence_bundle.v1";
|
|
15
|
+
const SECRET_KEY = /^(private[_-]?key|secret|seed|mnemonic|password|authorization|keypair|api[_-]?key)$/i;
|
|
16
|
+
const NOT_EXTERNAL = [
|
|
17
|
+
"package_download_counts",
|
|
18
|
+
"preflight_hits_alone",
|
|
19
|
+
"self_authored_run_id_alone",
|
|
20
|
+
"twzrd_dogfood_or_ci",
|
|
21
|
+
"house_or_sponsored_wallets",
|
|
22
|
+
];
|
|
23
|
+
function redactSecrets(value) {
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
return value.map((item) => redactSecrets(item));
|
|
26
|
+
}
|
|
27
|
+
if (!value || typeof value !== "object")
|
|
28
|
+
return value;
|
|
29
|
+
const out = {};
|
|
30
|
+
for (const [key, child] of Object.entries(value)) {
|
|
31
|
+
if (SECRET_KEY.test(key))
|
|
32
|
+
continue;
|
|
33
|
+
out[key] = redactSecrets(child);
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
export function fingerprint(value) {
|
|
38
|
+
return createHash("sha256").update(value).digest("hex").slice(0, 16);
|
|
39
|
+
}
|
|
40
|
+
export function exportEvidenceBundle(opts) {
|
|
41
|
+
const integration = opts.attribution.integration.trim();
|
|
42
|
+
const runId = opts.attribution.runId.trim();
|
|
43
|
+
if (!integration || !runId) {
|
|
44
|
+
throw new Error("[twzrd-x402-gate] evidence bundle requires attribution.integration and attribution.runId");
|
|
45
|
+
}
|
|
46
|
+
const transcript = opts.transcript;
|
|
47
|
+
const block = transcript?.steps.find((s) => s.name === "block_path");
|
|
48
|
+
const decision = opts.decision ?? {
|
|
49
|
+
verdict: block?.verdict ?? "unknown",
|
|
50
|
+
approved: block?.approved ?? false,
|
|
51
|
+
reason: block?.reason,
|
|
52
|
+
signerInvocations: block?.signerInvocations ?? 0,
|
|
53
|
+
};
|
|
54
|
+
const lineage = opts.lineage ??
|
|
55
|
+
transcript?.lineage ??
|
|
56
|
+
(isInternalIntegration(integration) ? "dogfood" : "external_candidate");
|
|
57
|
+
const redactions = [
|
|
58
|
+
"secrets_and_private_keys",
|
|
59
|
+
"ledger_pay_to_and_amounts",
|
|
60
|
+
"buyer_wallet",
|
|
61
|
+
];
|
|
62
|
+
return redactSecrets({
|
|
63
|
+
schema: EVIDENCE_BUNDLE_SCHEMA,
|
|
64
|
+
package: "twzrd-x402-gate",
|
|
65
|
+
packageVersion: CLIENT_VERSION,
|
|
66
|
+
exportedAt: new Date().toISOString(),
|
|
67
|
+
attribution: { integration, runId },
|
|
68
|
+
lineage,
|
|
69
|
+
notExternalRunProof: [...NOT_EXTERNAL],
|
|
70
|
+
decision,
|
|
71
|
+
transcript: transcript
|
|
72
|
+
? {
|
|
73
|
+
schema: transcript.schema,
|
|
74
|
+
mode: transcript.mode,
|
|
75
|
+
ok: transcript.ok,
|
|
76
|
+
assertions: transcript.assertions,
|
|
77
|
+
proofKind: transcript.proofKind,
|
|
78
|
+
stepCount: transcript.steps.length,
|
|
79
|
+
}
|
|
80
|
+
: undefined,
|
|
81
|
+
bind: opts.bind,
|
|
82
|
+
receipt: opts.receipt,
|
|
83
|
+
ledger: opts.ledger ?? { spendRows: 0, verdicts: [] },
|
|
84
|
+
outcomeAttestation: opts.outcomeAttestation,
|
|
85
|
+
redactions,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
export function writeEvidenceBundle(bundle, filePath) {
|
|
89
|
+
writeFileSync(filePath, `${JSON.stringify(bundle, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
90
|
+
}
|
|
91
|
+
export async function exportEvidenceBundleFromAdoptionProof(opts) {
|
|
92
|
+
const integration = opts.integration ?? "demo-commerce-kit";
|
|
93
|
+
const runId = opts.runId ?? randomUUID();
|
|
94
|
+
const transcript = await runGateAdoptionProof({
|
|
95
|
+
integration,
|
|
96
|
+
runId,
|
|
97
|
+
lineage: opts.lineage,
|
|
98
|
+
});
|
|
99
|
+
if (transcript.schema !== ADOPTION_TRANSCRIPT_SCHEMA) {
|
|
100
|
+
throw new Error("[twzrd-x402-gate] unexpected adoption transcript schema");
|
|
101
|
+
}
|
|
102
|
+
return exportEvidenceBundle({
|
|
103
|
+
attribution: { integration, runId },
|
|
104
|
+
lineage: transcript.lineage,
|
|
105
|
+
transcript,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export async function main(argv = process.argv.slice(2)) {
|
|
109
|
+
const arg = (name, fallback) => {
|
|
110
|
+
const i = argv.indexOf(name);
|
|
111
|
+
return i >= 0 && argv[i + 1] ? argv[i + 1] : fallback;
|
|
112
|
+
};
|
|
113
|
+
const bundle = await exportEvidenceBundleFromAdoptionProof({
|
|
114
|
+
integration: arg("--integration", process.env.TWZRD_ATTRIBUTION_INTEGRATION),
|
|
115
|
+
runId: arg("--run-id", process.env.TWZRD_ATTRIBUTION_RUN_ID),
|
|
116
|
+
});
|
|
117
|
+
const out = arg("--out");
|
|
118
|
+
if (out)
|
|
119
|
+
writeEvidenceBundle(bundle, out);
|
|
120
|
+
else
|
|
121
|
+
console.log(JSON.stringify(bundle, null, 2));
|
|
122
|
+
return bundle;
|
|
123
|
+
}
|
|
124
|
+
const isCli = typeof process.argv[1] === "string" &&
|
|
125
|
+
/evidence-bundle\.(js|ts)$/.test(process.argv[1]);
|
|
126
|
+
if (isCli) {
|
|
127
|
+
main().catch((err) => {
|
|
128
|
+
console.error(err instanceof Error ? err.message : err);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=evidence-bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-bundle.js","sourceRoot":"","sources":["../src/evidence-bundle.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,15 +19,17 @@ export { safeFetch, runAgentcashFetch, main as safeFetchMain, type SafeFetchOpti
|
|
|
19
19
|
export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, mapX402SolanaRequirements, flattenDeclaredResource, resourceUrlFromPaymentRequired, type X402ClientLike, type X402SelectedRequirements, type X402DeclaredResource, type BeforePaymentCreationContext, type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402PaymentControlOptions, type X402SolanaBeforePaymentContext, } from "./x402-client-hook.js";
|
|
20
20
|
export { RESOURCE_BIND_DOMAIN, RESOURCE_BIND_EXTRA_KEY, RESOURCE_BIND_MEMO_PREFIX, RESOURCE_BIND_MEMO_MAX, ZERO_BODY_HASH, canonicalResourceUrl, resourceBindLeafHash, networksEquivalent, rawReqFromPaymentRequired, rememberRawInvoice, wrapFetchRememberInvoice, resourceBindMemo, memoContainsResourceBind, stampResourceBind, evaluateResourceBind, type BindStrength, type ResourceBindReq, type ResourceBindDecision, } from "./resource-bind.js";
|
|
21
21
|
export { extractSvmMemoFromTransaction, extractSvmTransferLegs, evaluateResourceBindFromSvmTx, evaluateResourceBindLegsFromSvmTx, MEMO_PROGRAM_ADDRESS as RESOURCE_BIND_MEMO_PROGRAM, type ResourceBindLeafFields, type SvmTransferLegs, } from "./resource-bind-tx.js";
|
|
22
|
-
export { twzrd, spendControlSafeFetch, type SpendControlOptions, type SpendControlResult, } from "./spend-control.js";
|
|
22
|
+
export { twzrd, spendControlSafeFetch, verifyOfferBindingAfterPay, type OfferBindingCheck, type SpendControlOptions, type SpendControlResult, } from "./spend-control.js";
|
|
23
23
|
export { createFileSpendLedger } from "./spend-ledger-file.js";
|
|
24
24
|
export { createFileDecisionLedger, DECISION_LEDGER_SCHEMA_VERSION, type DecisionLedgerRow, type RecordDecisionInput, type FileDecisionLedgerOptions, } from "./decision-ledger-file.js";
|
|
25
|
-
export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, type GateAdoptionTranscript, type GateAdoptionStep, type GateAdoptionAssertions, type GateAdoptionLineage, type RunGateAdoptionProofOptions, } from "./adoption-proof.js";
|
|
25
|
+
export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, type GateAdoptionTranscript, type GateAdoptionStep, type GateAdoptionAssertions, type GateAdoptionLineage, type RunGateAdoptionProofOptions, isInternalIntegration, } from "./adoption-proof.js";
|
|
26
|
+
export { listResources, listX402Directory, listDirectoryCallables, pickCallable, normalizeDirectoryRow, type DirectoryListing, type DirectorySource, type ListDirectoryOptions, } from "./directory.js";
|
|
27
|
+
export { exportEvidenceBundle, exportEvidenceBundleFromAdoptionProof, writeEvidenceBundle, fingerprint, EVIDENCE_BUNDLE_SCHEMA, main as evidenceBundleMain, type EvidenceBundle, type EvidenceDecision, type EvidenceBind, type EvidenceReceipt, type EvidenceLedgerSlice, type EvidenceOutcomeAttestation, type ExportEvidenceBundleOptions, } from "./evidence-bundle.js";
|
|
26
28
|
export { quickCheck, QUICK_PRICE_USDC, type QuickCheckResult, type QuickCheckOptions, type TwzrdTier, } from "./quick.js";
|
|
27
29
|
export { createSponsoredX402Fetch, type SponsorSettle, type SponsoredX402Options, } from "./sponsored.js";
|
|
28
30
|
export type { TwzrdDecision, TwzrdReadinessCard, TwzrdPreflightInput, TwzrdGateConfig, TwzrdApproveContext, TwzrdApprovalResult, TwzrdUpsellContext, X402PaymentRequirements, X402PaymentRequiredBody, X402McpPaymentRequest, X402McpPaymentRequestedContext, } from "./types.js";
|
|
29
31
|
export { canonicalJson, intentHash, toMicroUsd, fromMicroUsd, INTENT_HASH_PREFIX, type PaymentIntent, type PaymentProtocol, } from "./intent.js";
|
|
30
|
-
export { assertIntentApproved, createDecisionRegistry, createLocalDecisionSigner, createSeededDecisionSigner, decisionPreimage, MAX_CITED_OUTCOMES, newDecisionId, normalizeCitedOutcomes, signDecision, verifyDecisionSignature, TwzrdIntentBindingError, type AssertIntentApprovedOptions, type BindingErrorCode, type DecisionConstraints, type DecisionRegistry, type DecisionSigner, type PaymentDecision, type PaymentDecisionVerdict, } from "./decision-token.js";
|
|
32
|
+
export { assertIntentApproved, createDecisionRegistry, createLocalDecisionSigner, createSeededDecisionSigner, decisionPreimage, MAX_CITED_OUTCOMES, newDecisionId, normalizeCitedOutcomes, signDecision, verifyDecisionSignature, TwzrdIntentBindingError, MISSING_VERIFIER_KEY, MISSING_VERIFICATION_KEY, type AssertIntentApprovedOptions, type BindingErrorCode, type DecisionConstraints, type DecisionRegistry, type DecisionSigner, type PaymentDecision, type PaymentDecisionVerdict, } from "./decision-token.js";
|
|
31
33
|
export { buildBlockedNeverSignedAttestation, buildOutcomeAttestation, computeDecisionOutcomeLeafV1, DECISION_OUTCOME_V1_DOMAIN, verifyOutcomeAttestationSignature, type DecisionOutcomeAttestation, type DecisionOutcomeFields, type OutcomeKind, type OutcomeVerdict, } from "./outcome-attestation.js";
|
|
32
34
|
export { createMemorySpendLedger, evaluateIntent, POLICY_VERSION, TWZRD_BUDGET_EXCEEDED, type CounterpartyIntelligence, type EvaluateIntentOptions, type IntelligenceProvider, type Mandate, type SpendLedger, type SpendPolicy, } from "./policy-runtime.js";
|
|
33
35
|
export { ap2CheckoutToIntent, x402RequirementsToIntent, type Ap2Cart, type Ap2UserMandate, type X402IntentContext, } from "./intent-adapters.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -22,15 +22,19 @@ export { safeFetch, runAgentcashFetch, main as safeFetchMain, } from "./safe-fet
|
|
|
22
22
|
export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, mapX402SolanaRequirements, flattenDeclaredResource, resourceUrlFromPaymentRequired, } from "./x402-client-hook.js";
|
|
23
23
|
export { RESOURCE_BIND_DOMAIN, RESOURCE_BIND_EXTRA_KEY, RESOURCE_BIND_MEMO_PREFIX, RESOURCE_BIND_MEMO_MAX, ZERO_BODY_HASH, canonicalResourceUrl, resourceBindLeafHash, networksEquivalent, rawReqFromPaymentRequired, rememberRawInvoice, wrapFetchRememberInvoice, resourceBindMemo, memoContainsResourceBind, stampResourceBind, evaluateResourceBind, } from "./resource-bind.js";
|
|
24
24
|
export { extractSvmMemoFromTransaction, extractSvmTransferLegs, evaluateResourceBindFromSvmTx, evaluateResourceBindLegsFromSvmTx, MEMO_PROGRAM_ADDRESS as RESOURCE_BIND_MEMO_PROGRAM, } from "./resource-bind-tx.js";
|
|
25
|
-
export { twzrd, spendControlSafeFetch, } from "./spend-control.js";
|
|
25
|
+
export { twzrd, spendControlSafeFetch, verifyOfferBindingAfterPay, } from "./spend-control.js";
|
|
26
26
|
export { createFileSpendLedger } from "./spend-ledger-file.js";
|
|
27
27
|
export { createFileDecisionLedger, DECISION_LEDGER_SCHEMA_VERSION, } from "./decision-ledger-file.js";
|
|
28
|
-
export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, } from "./adoption-proof.js";
|
|
28
|
+
export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, isInternalIntegration, } from "./adoption-proof.js";
|
|
29
|
+
export { listResources, listX402Directory, listDirectoryCallables, pickCallable, normalizeDirectoryRow, } from "./directory.js";
|
|
30
|
+
export { exportEvidenceBundle, exportEvidenceBundleFromAdoptionProof, writeEvidenceBundle, fingerprint, EVIDENCE_BUNDLE_SCHEMA, main as evidenceBundleMain, } from "./evidence-bundle.js";
|
|
29
31
|
export { quickCheck, QUICK_PRICE_USDC, } from "./quick.js";
|
|
30
32
|
export { createSponsoredX402Fetch, } from "./sponsored.js";
|
|
31
33
|
/* ── TWZRD Payment Control (protocol-neutral authorization core) ── */
|
|
32
34
|
export { canonicalJson, intentHash, toMicroUsd, fromMicroUsd, INTENT_HASH_PREFIX, } from "./intent.js";
|
|
33
|
-
|
|
35
|
+
// unsafeAssertIntentApprovedWithoutSignature is intentionally absent here:
|
|
36
|
+
// it is exported only from the `twzrd-x402-gate/unsafe` subpath (./unsafe.js).
|
|
37
|
+
export { assertIntentApproved, createDecisionRegistry, createLocalDecisionSigner, createSeededDecisionSigner, decisionPreimage, MAX_CITED_OUTCOMES, newDecisionId, normalizeCitedOutcomes, signDecision, verifyDecisionSignature, TwzrdIntentBindingError, MISSING_VERIFIER_KEY, MISSING_VERIFICATION_KEY, } from "./decision-token.js";
|
|
34
38
|
export { buildBlockedNeverSignedAttestation, buildOutcomeAttestation, computeDecisionOutcomeLeafV1, DECISION_OUTCOME_V1_DOMAIN, verifyOutcomeAttestationSignature, } from "./outcome-attestation.js";
|
|
35
39
|
export { createMemorySpendLedger, evaluateIntent, POLICY_VERSION, TWZRD_BUDGET_EXCEEDED, } from "./policy-runtime.js";
|
|
36
40
|
export { ap2CheckoutToIntent, x402RequirementsToIntent, } from "./intent-adapters.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,qFAAqF;AACrF,uFAAuF;AACvF,qFAAqF;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChH,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,YAAY,GAKb,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,GAGvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sCAAsC,EACtC,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,GAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GAOxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,gCAAgC,EAChC,uBAAuB,EACvB,8BAA8B,GAI/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,IAAI,IAAI,aAAa,GAGtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,8BAA8B,GAS/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,iCAAiC,EACjC,oBAAoB,IAAI,0BAA0B,GAGnD,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,EACL,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/spend-control.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export type SpendControlOptions = {
|
|
|
8
8
|
url: string;
|
|
9
9
|
paymentRequired: unknown;
|
|
10
10
|
selected: Record<string, unknown>;
|
|
11
|
+
/** Present after a hard bind-v1 verify on the compose path. */
|
|
12
|
+
transactionBase64?: string;
|
|
11
13
|
}) => Promise<{
|
|
12
14
|
transactionBase64?: string;
|
|
13
15
|
response?: Response;
|
|
@@ -15,28 +17,16 @@ export type SpendControlOptions = {
|
|
|
15
17
|
/**
|
|
16
18
|
* Build, but do not sign or submit, the bound SVM transaction. Required
|
|
17
19
|
* with `requireOfferBinding`; the gate verifies these exact bytes before it
|
|
18
|
-
* calls `
|
|
20
|
+
* calls `pay()`.
|
|
19
21
|
*/
|
|
20
|
-
|
|
22
|
+
composeBoundTransaction?: (args: {
|
|
21
23
|
url: string;
|
|
22
24
|
paymentRequired: unknown;
|
|
23
25
|
selected: Record<string, unknown>;
|
|
24
26
|
leafHash: string;
|
|
25
27
|
memo: string;
|
|
26
28
|
}) => Promise<{
|
|
27
|
-
transactionBase64
|
|
28
|
-
}>;
|
|
29
|
-
/**
|
|
30
|
-
* The signing/submission boundary for a prepared bound payment. It receives
|
|
31
|
-
* only the transaction that passed local bind-v1 validation.
|
|
32
|
-
*/
|
|
33
|
-
submitBoundPayment?: (args: {
|
|
34
|
-
transactionBase64: string;
|
|
35
|
-
url: string;
|
|
36
|
-
paymentRequired: unknown;
|
|
37
|
-
selected: Record<string, unknown>;
|
|
38
|
-
}) => Promise<{
|
|
39
|
-
response?: Response;
|
|
29
|
+
transactionBase64?: string;
|
|
40
30
|
}>;
|
|
41
31
|
preflight?: (payTo: string, priceUsdc: number) => Promise<{
|
|
42
32
|
decision?: string;
|
|
@@ -58,6 +48,27 @@ export type SpendControlResult = {
|
|
|
58
48
|
};
|
|
59
49
|
signerInvocations: number;
|
|
60
50
|
};
|
|
51
|
+
export type OfferBindingCheck = {
|
|
52
|
+
verdict: "allow" | "block";
|
|
53
|
+
reason?: string;
|
|
54
|
+
receipt: {
|
|
55
|
+
strength: string;
|
|
56
|
+
leaf_hash: string | null;
|
|
57
|
+
fact_type: "resource_bound";
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Bind-v1 check on the composed, not-yet-submitted transaction. Despite the
|
|
62
|
+
* name (kept for compat with the 0.9.2 call site), `spendControlSafeFetch`
|
|
63
|
+
* calls this BEFORE `pay()`: compose, then verify these exact bytes, then pay.
|
|
64
|
+
*/
|
|
65
|
+
export declare function verifyOfferBindingAfterPay(args: {
|
|
66
|
+
transactionBase64?: string;
|
|
67
|
+
leafHash: string | null;
|
|
68
|
+
payTo: string;
|
|
69
|
+
asset: string;
|
|
70
|
+
amountRaw: string;
|
|
71
|
+
}): Promise<OfferBindingCheck>;
|
|
61
72
|
export declare function spendControlSafeFetch(url: string, opts?: SpendControlOptions): Promise<SpendControlResult>;
|
|
62
73
|
export declare const twzrd: {
|
|
63
74
|
safeFetch: typeof spendControlSafeFetch;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spend-control.d.ts","sourceRoot":"","sources":["../src/spend-control.ts"],"names":[],"mappings":"AAiBA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"spend-control.d.ts","sourceRoot":"","sources":["../src/spend-control.ts"],"names":[],"mappings":"AAiBA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,+DAA+D;QAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,KAAK,OAAO,CAAC;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IACnE;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC/B,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,OAAO,CAAC;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC;IACtF,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC;CACtF,CAAC;AAOF;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkC7B;AAqBD,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAgH7B;AAED,eAAO,MAAM,KAAK;;CAAuC,CAAC"}
|
package/dist/spend-control.js
CHANGED
|
@@ -16,6 +16,50 @@ import { createFileSpendLedger } from "./spend-ledger-file.js";
|
|
|
16
16
|
import { rememberRawInvoice, resourceBindMemo, stampResourceBind, } from "./resource-bind.js";
|
|
17
17
|
import { evaluateResourceBindLegsFromSvmTx } from "./resource-bind-tx.js";
|
|
18
18
|
import { resourceUrlFromPaymentRequired } from "./x402-client-hook.js";
|
|
19
|
+
/** Shared shape for a bind-v1 check that never reached verification. */
|
|
20
|
+
function refuseBindReceipt(leaf_hash) {
|
|
21
|
+
return { strength: "refuse", leaf_hash, fact_type: "resource_bound" };
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Bind-v1 check on the composed, not-yet-submitted transaction. Despite the
|
|
25
|
+
* name (kept for compat with the 0.9.2 call site), `spendControlSafeFetch`
|
|
26
|
+
* calls this BEFORE `pay()`: compose, then verify these exact bytes, then pay.
|
|
27
|
+
*/
|
|
28
|
+
export async function verifyOfferBindingAfterPay(args) {
|
|
29
|
+
const leaf_hash = args.leafHash ?? null;
|
|
30
|
+
if (!args.transactionBase64) {
|
|
31
|
+
return {
|
|
32
|
+
verdict: "block",
|
|
33
|
+
reason: "bind_required_no_settlement",
|
|
34
|
+
receipt: refuseBindReceipt(leaf_hash),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (!leaf_hash) {
|
|
38
|
+
// Distinct from "no settlement": a caller invoking this exported check
|
|
39
|
+
// directly with no expected leaf hash cannot get a "hard" result — make
|
|
40
|
+
// that an explicit refusal instead of silently verifying against "".
|
|
41
|
+
return {
|
|
42
|
+
verdict: "block",
|
|
43
|
+
reason: "bind_required_no_leaf_hash",
|
|
44
|
+
receipt: refuseBindReceipt(leaf_hash),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const d = await evaluateResourceBindLegsFromSvmTx(args.transactionBase64, {
|
|
48
|
+
leaf_hash,
|
|
49
|
+
pay_to: args.payTo,
|
|
50
|
+
asset: args.asset,
|
|
51
|
+
amount_raw: args.amountRaw,
|
|
52
|
+
});
|
|
53
|
+
const receipt = {
|
|
54
|
+
strength: d.strength,
|
|
55
|
+
leaf_hash: d.leaf_hash,
|
|
56
|
+
fact_type: "resource_bound",
|
|
57
|
+
};
|
|
58
|
+
if (d.strength !== "hard") {
|
|
59
|
+
return { verdict: "block", reason: "bind_mismatch", receipt };
|
|
60
|
+
}
|
|
61
|
+
return { verdict: "allow", receipt };
|
|
62
|
+
}
|
|
19
63
|
/**
|
|
20
64
|
* Default cumulative enforcement must outlive an individual safeFetch call.
|
|
21
65
|
* It is process-scoped only; callers that need restart or multi-process safety
|
|
@@ -79,6 +123,11 @@ export async function spendControlSafeFetch(url, opts = {}) {
|
|
|
79
123
|
const agentKey = `agent:${opts.agentId ?? "default"}`;
|
|
80
124
|
const merchantKey = `merchant:${payTo}`;
|
|
81
125
|
const mandateKey = `mandate:${opts.mandateId ?? "default"}`;
|
|
126
|
+
const recordSpend = () => {
|
|
127
|
+
ledger.record(agentKey, spendMicro, now);
|
|
128
|
+
ledger.record(merchantKey, spendMicro, now);
|
|
129
|
+
ledger.record(mandateKey, spendMicro, now);
|
|
130
|
+
};
|
|
82
131
|
if (maxMicro != null) {
|
|
83
132
|
for (const key of [agentKey, merchantKey, mandateKey]) {
|
|
84
133
|
if (ledger.spentMicro(key, WIN, now) + spendMicro > maxMicro) {
|
|
@@ -104,31 +153,42 @@ export async function spendControlSafeFetch(url, opts = {}) {
|
|
|
104
153
|
let signerInvocations = 0;
|
|
105
154
|
if (opts.requireOfferBinding) {
|
|
106
155
|
const leaf_hash = stamped?.leaf_hash ?? null;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
156
|
+
const refuseNoCompose = () => ({
|
|
157
|
+
verdict: "block",
|
|
158
|
+
reason: "bind_required_no_compose",
|
|
159
|
+
signerInvocations: 0,
|
|
160
|
+
receipt: refuseBindReceipt(leaf_hash),
|
|
161
|
+
});
|
|
162
|
+
if (!leaf_hash || !opts.composeBoundTransaction) {
|
|
163
|
+
return refuseNoCompose();
|
|
112
164
|
}
|
|
113
|
-
const
|
|
165
|
+
const composed = await opts.composeBoundTransaction({
|
|
114
166
|
url, paymentRequired: body, selected, leafHash: leaf_hash,
|
|
115
167
|
memo: resourceBindMemo(leaf_hash),
|
|
116
168
|
});
|
|
117
|
-
txb64 =
|
|
118
|
-
|
|
119
|
-
|
|
169
|
+
txb64 = composed.transactionBase64;
|
|
170
|
+
if (!txb64) {
|
|
171
|
+
return refuseNoCompose();
|
|
172
|
+
}
|
|
173
|
+
const checked = await verifyOfferBindingAfterPay({
|
|
174
|
+
transactionBase64: txb64,
|
|
175
|
+
leafHash: leaf_hash,
|
|
176
|
+
payTo,
|
|
177
|
+
asset: String(selected.asset ?? ""),
|
|
178
|
+
amountRaw: String(amountMicro),
|
|
120
179
|
});
|
|
121
|
-
const receipt =
|
|
122
|
-
if (
|
|
123
|
-
return { verdict: "block", reason: "bind_mismatch", receipt, signerInvocations: 0 };
|
|
180
|
+
const receipt = checked.receipt;
|
|
181
|
+
if (checked.verdict === "block") {
|
|
182
|
+
return { verdict: "block", reason: checked.reason ?? "bind_mismatch", receipt, signerInvocations: 0 };
|
|
124
183
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
184
|
+
if (opts.pay) {
|
|
185
|
+
signerInvocations = 1;
|
|
186
|
+
const paid = await opts.pay({ url, paymentRequired: body, selected, transactionBase64: txb64 });
|
|
187
|
+
if (paid.response)
|
|
188
|
+
response = paid.response;
|
|
189
|
+
}
|
|
190
|
+
if (signerInvocations > 0)
|
|
191
|
+
recordSpend();
|
|
132
192
|
return { verdict, response, receipt, signerInvocations };
|
|
133
193
|
}
|
|
134
194
|
if (opts.pay) {
|
|
@@ -136,14 +196,10 @@ export async function spendControlSafeFetch(url, opts = {}) {
|
|
|
136
196
|
const paid = await opts.pay({ url, paymentRequired: body, selected });
|
|
137
197
|
if (paid.response)
|
|
138
198
|
response = paid.response;
|
|
139
|
-
txb64 = paid.transactionBase64;
|
|
140
199
|
}
|
|
141
200
|
let receipt;
|
|
142
|
-
if (signerInvocations > 0
|
|
143
|
-
|
|
144
|
-
ledger.record(merchantKey, spendMicro, now);
|
|
145
|
-
ledger.record(mandateKey, spendMicro, now);
|
|
146
|
-
}
|
|
201
|
+
if (signerInvocations > 0)
|
|
202
|
+
recordSpend();
|
|
147
203
|
return { verdict, response, receipt, signerInvocations };
|
|
148
204
|
}
|
|
149
205
|
export const twzrd = { safeFetch: spendControlSafeFetch };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spend-control.js","sourceRoot":"","sources":["../src/spend-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"spend-control.js","sourceRoot":"","sources":["../src/spend-control.ts"],"names":[],"mappings":"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"}
|
package/dist/unsafe.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unsafe-grade surface, deliberately kept OFF the package root.
|
|
3
|
+
*
|
|
4
|
+
* Everything here skips a control the safe API enforces (e.g. intent matching
|
|
5
|
+
* without decision-signature verification, so forged tokens pass when the
|
|
6
|
+
* remaining fields match). Import from `twzrd-x402-gate/unsafe` only when
|
|
7
|
+
* token provenance is guaranteed by other means. Prefer the root-exported
|
|
8
|
+
* `assertIntentApproved` everywhere else.
|
|
9
|
+
*/
|
|
10
|
+
export { unsafeAssertIntentApprovedWithoutSignature, type UnsafeAssertIntentApprovedOptions, } from "./decision-token.js";
|
|
11
|
+
//# sourceMappingURL=unsafe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsafe.d.ts","sourceRoot":"","sources":["../src/unsafe.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,0CAA0C,EAC1C,KAAK,iCAAiC,GACvC,MAAM,qBAAqB,CAAC"}
|
package/dist/unsafe.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unsafe-grade surface, deliberately kept OFF the package root.
|
|
3
|
+
*
|
|
4
|
+
* Everything here skips a control the safe API enforces (e.g. intent matching
|
|
5
|
+
* without decision-signature verification, so forged tokens pass when the
|
|
6
|
+
* remaining fields match). Import from `twzrd-x402-gate/unsafe` only when
|
|
7
|
+
* token provenance is guaranteed by other means. Prefer the root-exported
|
|
8
|
+
* `assertIntentApproved` everywhere else.
|
|
9
|
+
*/
|
|
10
|
+
export { unsafeAssertIntentApprovedWithoutSignature, } from "./decision-token.js";
|
|
11
|
+
//# sourceMappingURL=unsafe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsafe.js","sourceRoot":"","sources":["../src/unsafe.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,0CAA0C,GAE3C,MAAM,qBAAqB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "twzrd-x402-gate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Core: buyer-side x402 trust gate. Free TWZRD preflight (ReadinessCard) before signing USDC to any merchant, with optional $0.001 paid trust escalate on warn — blocking spend on bad intel, no human in the loop. Optional: createTwzrdSettleGuard for resource servers to apply merchant policy on the payer before settle+serve. installTwzrdAutoGate is the canonical default-on entry across fetch payWrap, x402 client (onBeforePaymentCreation), PayAI x402-solana beforePayment (2.1.0+), and MPP onChallenge. Fail-closed by default — set TWZRD_FAIL_OPEN=true for outage allow; kill switch TWZRD_GATE_ENABLED=false or TWZRD_AUTO_GATE=0. Always stamps X-Twzrd-Caller for seat metrics.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
"bin": {
|
|
9
9
|
"twzrd-safe-fetch": "./bin/twzrd-safe-fetch.js",
|
|
10
10
|
"twzrd-gate-eval-refuse": "./bin/twzrd-gate-eval-refuse.js",
|
|
11
|
-
"twzrd-gate-doctor": "./bin/twzrd-gate-doctor.js"
|
|
11
|
+
"twzrd-gate-doctor": "./bin/twzrd-gate-doctor.js",
|
|
12
|
+
"twzrd-evidence-bundle": "./bin/twzrd-evidence-bundle.js"
|
|
12
13
|
},
|
|
13
14
|
"exports": {
|
|
14
15
|
".": {
|
|
@@ -19,6 +20,10 @@
|
|
|
19
20
|
"types": "./dist/safe-fetch.d.ts",
|
|
20
21
|
"import": "./dist/safe-fetch.js"
|
|
21
22
|
},
|
|
23
|
+
"./unsafe": {
|
|
24
|
+
"types": "./dist/unsafe.d.ts",
|
|
25
|
+
"import": "./dist/unsafe.js"
|
|
26
|
+
},
|
|
22
27
|
"./package.json": "./package.json"
|
|
23
28
|
},
|
|
24
29
|
"files": [
|
|
@@ -44,6 +49,8 @@
|
|
|
44
49
|
"x402-solana-before-payment-falsify": "tsx examples/x402-solana-before-payment-falsify.ts",
|
|
45
50
|
"official-dogfood": "tsx examples/official-x402-dogfood.ts",
|
|
46
51
|
"adoption-proof": "tsx src/adoption-proof.ts",
|
|
52
|
+
"evidence-bundle": "tsx src/evidence-bundle.ts",
|
|
53
|
+
"commerce-kit": "tsx examples/commerce-kit.ts",
|
|
47
54
|
"demo:buyer-no-spend": "tsx src/adoption-proof.ts -- --integration ops-demo-buyer-no-spend",
|
|
48
55
|
"live-autogate-matrix": "tsx examples/live-autogate-matrix.ts",
|
|
49
56
|
"gate-eval-refuse": "node bin/twzrd-gate-eval-refuse.js",
|