capacity-attest 0.7.0 → 0.8.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 CHANGED
@@ -20,8 +20,9 @@ Every claim about this project below is clickable and independently verifiable,
20
20
  | A real `giveFeedback()` call on the ERC-8004 Reputation Registry, Base mainnet | [tx 0x2217...efc0](https://basescan.org/tx/0x221797800d5941dff62e87022083e7c6dfba3e07b35c84e56b10fdca8967efc0) | Live |
21
21
  | Proposed as a buyer-side addition to someone else's agent spec | [omworldprotocol/om-world#18](https://github.com/omworldprotocol/om-world/pull/18) | In review, not yet merged |
22
22
  | An independently rebuilt, stdlib-only Python verifier (its own secp256k1/EIP-191/canonical-JSON implementation, no shared code), 7/7 match against our own test vectors including both negative controls (forged signature, tampered claim), now a permanent regression test in a separate, independently published project | [x402-foundation/x402#2887 (comment)](https://github.com/x402-foundation/x402/issues/2887#issuecomment-5687398497), author goun7, integrated into Tamga (`pip install tamga-protocol`) | Permanently integrated into someone else's project |
23
+ | The `measured` block cited as the source of truth for metered delivery in a draft ERC-8004 grounded-feedback convention, pinned to a specific commit of this repo, with two independent verifiers (Node and Python) green on five signed test vectors | [erc-8004/erc-8004-contracts#99](https://github.com/erc-8004/erc-8004-contracts/issues/99), schema doc at [predgeAI/erc8004-outcome-validator](https://github.com/predgeAI/erc8004-outcome-validator/blob/2c4d745f1205ba91f3aabded221b5b5acdbcb5ed/grounded-feedback/README.md) | Draft v0, public, referenced by commit hash |
23
24
 
24
- **Kept honestly separate from the table above, because this is not third-party review:** before 0.6.0 (the first version that actually writes to the blockchain), we ran our own adversarial security review. Ten findings, all fixed with a dedicated regression test, not an independent audit by an outside party. Full, checkable report: [docs/SECURITY-REVIEW-2026-09-11.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/docs/SECURITY-REVIEW-2026-09-11.md).
25
+ **Kept honestly separate from the table above, because this is not third-party review:** before 0.6.0 (the first version that actually writes to the blockchain), we ran our own adversarial security review. Nine findings, all fixed: seven closed by a dedicated regression test, one verified by a packaging check (`npm pack --dry-run`) rather than a unit test, and one a documentation-only fix. Not an independent audit by an outside party. Full, checkable report: [docs/SECURITY-REVIEW-2026-09-11.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/docs/SECURITY-REVIEW-2026-09-11.md).
25
26
 
26
27
  ## Why this exists
27
28
 
@@ -67,6 +68,7 @@ The paying agent (the buyer) calls this **after** an x402 settlement, once it's
67
68
  | `signature` | EIP-191 personal-sign signature by the buyer over `claimId` |
68
69
  | `externalRefs` | *(optional, since 0.3.0)* unverified references to other agent-economy infrastructure: `sellerAgentRef`/`buyerAgentRef` (e.g. an ERC-8004 agent id or DID), `mandateRef`+`mandateIssuerDid` (an externally issued AP2/AAE mandate), `intentRef` (an external AP2 IntentMandate), `disputeContext` (`protocol`+`termsHash`+optional `resolutionRef`, e.g. a Legal Context Protocol reference). See [DECISIONS.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/DECISIONS.md) D-007 through D-013 |
69
70
  | `priorClaimId` | *(optional, since 0.4.0)* the `claimId` of your previous claim about the same `sellerAddress`, so your claims about that seller form a chain. Omitted on your first claim about a seller. Part of the signed content, so a host can't strip it. Lets a reader catch a host hiding a middle claim. See [DECISIONS.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/DECISIONS.md) D-006 |
71
+ | `offerReceiptHash` | *(optional, since 0.8.0)* sha256 hex of the seller-signed [x402 offer-receipt](https://github.com/x402-foundation/x402/blob/main/specs/extensions/extension-offer-and-receipt.md) that this claim answers, taken over the receipt artifact exactly as it was transmitted. Their receipt is the seller's statement that service was delivered; this claim is the buyer's statement of what actually arrived. Linking the two gives a dispute both sides of the story instead of only the interested party's. Part of the signed content, so the reference cannot be swapped in or stripped out after signing. Worked example with both halves and real signatures: [`examples/offer-receipt-link-testvector.json`](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/examples/offer-receipt-link-testvector.json) |
70
72
 
71
73
  The server first validates the schema, then whether `claimId` really is the hash of the content, then whether `signature` really recovers to `buyerAddress`. Only then is the claim appended to the append-only ledger (`data/claims.jsonl`). An invalid signature or a claim that's already stored (same `claimId`) is rejected.
72
74
 
@@ -150,6 +152,23 @@ Note: import `capacity-attest/dist/signing.js` directly, not the package root. T
150
152
 
151
153
  A working, externally reproduced example of these exact steps is in [github.com/YE-YI7/asm-spec, PR #18](https://github.com/YE-YI7/asm-spec/pull/18): an independent project that ran this against a real, live registered claim.
152
154
 
155
+ ## What is safe to depend on
156
+
157
+ If you are writing your own verifier, or pinning this repo in a specification, this is the part you need: what will not move under you.
158
+
159
+ Four things are fixed, and a claim signed today is meant to still verify years from now:
160
+
161
+ - The canonical form a claim is hashed over, byte for byte, as specified in [`docs/metered-delivery-spec.md`](docs/metered-delivery-spec.md).
162
+ - How `claimId` is derived from that canonical form.
163
+ - The EIP-191 message that gets signed, and that the signature recovers to `buyerAddress`.
164
+ - The strict `issuedAt` shape, `YYYY-MM-DDTHH:MM:SS.sssZ` with exactly three fractional digits.
165
+
166
+ Adding a new optional field is not a break and can happen in a minor version, because an old verifier reading a new claim still gets the same `claimId` for the fields it knows. Removing a field, renaming one, reordering the canonical form, or changing how the hash is computed would invalidate every claim ever signed, so it is treated as something we do not do rather than something we version.
167
+
168
+ That promise is checked rather than stated. The published test vectors in [`examples/`](examples) carry each intermediate step separately: the canonical preimage, its byte length, the `claimId`, the EIP-191 digest, the signature and the expected recovered address. Two standalone scripts verify them on every CI run, and both are deliberate reimplementations that read one JSON file and never import this package's own source, so they cannot pass by agreeing with the code they are supposed to be checking. Break the format and CI goes red before anything can be published.
169
+
170
+ If a break ever becomes genuinely unavoidable, it ships as a new major version under a different package name, the old one keeps working and keeps being published, and the reason goes in [DECISIONS.md](DECISIONS.md) before the code changes. Parties that pinned a commit are not moved by us.
171
+
153
172
  ## Sharing your own submitted claims, independent of a host (D-006)
154
173
 
155
174
  `get_delivery_history` relies on the honesty of whoever operates the MCP server: see the `note` in that tool's response and [DECISIONS.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/DECISIONS.md) (D-006). Every claim shown is genuinely real (the signature has also been re-checked on read since 2026-09-06, not only on write), but nothing proves the host is showing the FULL set it actually has.
package/README.nl.md CHANGED
@@ -19,7 +19,7 @@ Beweringen over dit project zijn hieronder allemaal aanklikbaar en zelf na te tr
19
19
  | Voorgesteld als koperszijde-aanvulling op een andermans agent-spec | [omworldprotocol/om-world#18](https://github.com/omworldprotocol/om-world/pull/18) | In review, nog niet gemerged |
20
20
  | Zelfstandig herbouwde, stdlib-only Python-verifier (eigen secp256k1/EIP-191/canonical-JSON-implementatie, geen gedeelde code), 7/7 match op onze eigen testvectoren inclusief beide negatieve controles (vervalste handtekening, geknoeide claim), nu permanent als regressietest in een ander, apart gepubliceerd project | [x402-foundation/x402#2887 (comment)](https://github.com/x402-foundation/x402/issues/2887#issuecomment-5687398497), auteur goun7, geintegreerd in Tamga (`pip install tamga-protocol`) | Permanent geintegreerd in andermans project |
21
21
 
22
- **Eerlijk apart gehouden van bovenstaande tabel, want dit is geen derde-partij-controle:** voor 0.6.0 (de eerste keer dat dit pakket echt naar de blockchain schrijft) hebben we zelf een adversariële security review uitgevoerd. Tien bevindingen, allemaal gefixt met een eigen regressietest, geen onafhankelijke audit door een externe partij. Volledig, controleerbaar verslag: [docs/SECURITY-REVIEW-2026-09-11.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/docs/SECURITY-REVIEW-2026-09-11.md).
22
+ **Eerlijk apart gehouden van bovenstaande tabel, want dit is geen derde-partij-controle:** voor 0.6.0 (de eerste keer dat dit pakket echt naar de blockchain schrijft) hebben we zelf een adversariële security review uitgevoerd. Negen bevindingen, allemaal gefixt: zeven met een eigen regressietest, een gecontroleerd via een packaging-check (`npm pack --dry-run`, geen unit test), en een pure documentatiefix. Geen onafhankelijke audit door een externe partij. Volledig, controleerbaar verslag: [docs/SECURITY-REVIEW-2026-09-11.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/docs/SECURITY-REVIEW-2026-09-11.md).
23
23
 
24
24
  ## Waarom dit bestaat
25
25
 
@@ -65,6 +65,7 @@ De betalende agent (de koper) roept dit aan **na** een x402-afwikkeling, zodra b
65
65
  | `signature` | EIP-191 personal-sign handtekening van de koper over `claimId` |
66
66
  | `externalRefs` | *(optioneel, sinds 0.3.0)* ongeverifieerde verwijzingen naar andere agent-economie-infrastructuur: `sellerAgentRef`/`buyerAgentRef` (bv. een ERC-8004-agent-id of DID), `mandateRef`+`mandateIssuerDid` (een extern uitgegeven AP2/AAE-mandaat), `intentRef` (een extern AP2 IntentMandate), `disputeContext` (`protocol`+`termsHash`+optioneel `resolutionRef`, bv. een Legal Context Protocol-verwijzing). Zie [DECISIONS.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/DECISIONS.md) D-007 t/m D-013 |
67
67
  | `priorClaimId` | *(optioneel, sinds 0.4.0)* de `claimId` van jouw vorige claim over dezelfde `sellerAddress`, zodat jouw claims over die verkoper een ketting vormen. Weggelaten bij je eerste claim over een verkoper. Zit in de ondertekende inhoud, dus een host kan het niet weghalen. Laat een lezer een host betrappen die een middelste claim verbergt. Zie [DECISIONS.md](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/DECISIONS.md) D-006 |
68
+ | `offerReceiptHash` | *(optioneel, sinds 0.8.0)* sha256-hex van de door de verkoper ondertekende [x402 offer-receipt](https://github.com/x402-foundation/x402/blob/main/specs/extensions/extension-offer-and-receipt.md) waar deze claim het antwoord op is, genomen over het bonnetje precies zoals het verstuurd werd. Hun bonnetje is de verklaring van de verkoper dat er geleverd is; deze claim is de verklaring van de koper over wat er werkelijk aankwam. Door die twee aan elkaar te knopen heeft een geschil beide kanten van het verhaal, in plaats van alleen die van de belanghebbende partij. Zit in de ondertekende inhoud, dus de verwijzing kan er na het ondertekenen niet in geruild of uit gehaald worden. Uitgewerkt voorbeeld met beide helften en echte handtekeningen: [`examples/offer-receipt-link-testvector.json`](https://github.com/holistis/tokenizen/blob/main/packages/capacity-attest/examples/offer-receipt-link-testvector.json) |
68
69
 
69
70
  De server valideert eerst het schema, dan of `claimId` echt de hash van de inhoud is, en dan of `signature` echt terugrekent naar `buyerAddress`. Alleen dan wordt de claim toegevoegd aan de append-only ledger (`data/claims.jsonl`). Een ongeldige handtekening of een claim die al eerder is opgeslagen (zelfde `claimId`) wordt geweigerd.
70
71
 
@@ -22,6 +22,7 @@ export declare const PublishReputationFeedbackInputSchema: z.ZodObject<{
22
22
  partial: "partial";
23
23
  }>;
24
24
  evidenceHash: z.ZodString;
25
+ offerReceiptHash: z.ZodOptional<z.ZodString>;
25
26
  settlementRef: z.ZodString;
26
27
  timestamp: z.ZodString;
27
28
  measured: z.ZodOptional<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"erc8004-reputation.d.ts","sourceRoot":"","sources":["../src/erc8004-reputation.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAyB,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA2B3E,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB/C,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG,MAAM,MAAM,+BAA+B,GACvC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAM7H;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAwBnD,oIAAoI;AACpI,MAAM,WAAW,uBAAuB;IACtC,YAAY,CACV,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;CAChD;AAED,6IAA6I;AAC7I,MAAM,MAAM,yBAAyB,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,uBAAuB,CAAC;AAMpH;;;;;;;;;;GAUG;AACH,gIAAgI;AAChI,MAAM,MAAM,gBAAgB,GAAG,OAAO,oBAAoB,CAAC;AAE3D,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,KAAK,EAAE,8BAA8B,EACrC,eAAe,GAAE,yBAA4D,EAC7E,gBAAgB,GAAE,gBAAuC,GACxD,OAAO,CAAC,+BAA+B,CAAC,CAiG1C"}
1
+ {"version":3,"file":"erc8004-reputation.d.ts","sourceRoot":"","sources":["../src/erc8004-reputation.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAyB,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA2B3E,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB/C,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG,MAAM,MAAM,+BAA+B,GACvC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAM7H;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAwBnD,oIAAoI;AACpI,MAAM,WAAW,uBAAuB;IACtC,YAAY,CACV,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;CAChD;AAED,6IAA6I;AAC7I,MAAM,MAAM,yBAAyB,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,uBAAuB,CAAC;AAMpH;;;;;;;;;;GAUG;AACH,gIAAgI;AAChI,MAAM,MAAM,gBAAgB,GAAG,OAAO,oBAAoB,CAAC;AAE3D,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,KAAK,EAAE,8BAA8B,EACrC,eAAe,GAAE,yBAA4D,EAC7E,gBAAgB,GAAE,gBAAuC,GACxD,OAAO,CAAC,+BAA+B,CAAC,CAiG1C"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * §5.6.2's table. Each method fixes the byte length of `asset` and `authorizer`;
3
+ * `identifier` and `salt` are 32 bytes for every method. Fixed lengths are what
4
+ * make the preimage unambiguous without any separators, so they are enforced
5
+ * rather than assumed: a field of the wrong length would hash to a commitment
6
+ * that opens to nothing, and would do so silently.
7
+ */
8
+ export declare const AUTHORIZATION_METHODS: {
9
+ readonly eip3009: {
10
+ readonly asset: 20;
11
+ readonly authorizer: 20;
12
+ };
13
+ };
14
+ export type AuthorizationMethod = keyof typeof AUTHORIZATION_METHODS;
15
+ export interface CommitmentInput {
16
+ /** Currently only "eip3009". Equals the receipt's `authorizationMethod`. */
17
+ method: AuthorizationMethod;
18
+ /** Token contract of the accepts entry that was paid. Not carried by the receipt. */
19
+ asset: string;
20
+ /** `from` of the authorization. §5.6.4 step 1 takes this from the receipt's signed payer. */
21
+ authorizer: string;
22
+ /** The ERC-3009 nonce, 32 bytes. */
23
+ identifier: string;
24
+ /** 32 bytes of CSPRNG output, per payment. Never signed, never in the receipt. */
25
+ salt: string;
26
+ }
27
+ /** §5.6.3: 32 bytes from a CSPRNG, independent per payment, never derived from anything. */
28
+ export declare function generateAuthorizationSalt(): string;
29
+ /** §5.6.2, the whole construction. Hex inputs are case-insensitive; bytes are hashed. */
30
+ export declare function computeAuthorizationCommitment(input: CommitmentInput): string;
31
+ export type OpenResult = {
32
+ linked: true;
33
+ identifier: string;
34
+ } | {
35
+ linked: false;
36
+ reason: string;
37
+ };
38
+ export interface OpenInput {
39
+ /** The signed receipt payload. `payer` is the authorizer; nothing else is trusted. */
40
+ payload: {
41
+ payer: string;
42
+ authorizationMethod?: string;
43
+ authorizationCommitment?: string;
44
+ };
45
+ salt: string;
46
+ /** The asset of the accepts entry that was paid. §5.6.4: salt alone cannot link. */
47
+ asset: string;
48
+ /** Nonces from AuthorizationUsed(authorizer, nonce) logs on that asset. */
49
+ candidateIdentifiers: readonly string[];
50
+ }
51
+ /**
52
+ * §5.6.4 steps 1 and 3. Fails closed on both nothing and ambiguity.
53
+ *
54
+ * Two matches is not "probably the first one": if an identifier can repeat across
55
+ * settlements the commitment genuinely opens to several, and the spec says that
56
+ * case does not link. Reporting a guess there would turn a fail-closed design into
57
+ * a false link, which is the one outcome the whole construction exists to avoid.
58
+ */
59
+ export declare function openAuthorizationCommitment(input: OpenInput): OpenResult;
60
+ /**
61
+ * The vector published with the spec, kept here so our own test has an external
62
+ * anchor. The independent verifier in agent-receipt-verify asserts the same
63
+ * constant from its own implementation: two implementations anchored to the same
64
+ * published number cannot drift silently, two anchored to each other can.
65
+ */
66
+ export declare const SPEC_VECTOR: {
67
+ readonly source: "x402-foundation/x402 PR #3827, specs/extensions/extension-offer-and-receipt.md §5.6.2, commit 0e492d6730bef14b9c722428386c114f3475a914";
68
+ readonly input: {
69
+ readonly method: "eip3009";
70
+ readonly asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
71
+ readonly authorizer: "0x857b06519E91e3A54538791bDbb0E22373e36b66";
72
+ readonly identifier: "0x5135a00b531830a13a751f3c48944d7a5fdfde7a3b87f73493591cd77efdef4f";
73
+ readonly salt: "0x10d2ae5f0c8536e82d882bf3d2c31a663597e890ca6c3fede0d278fd2a78f655";
74
+ };
75
+ readonly expected: "0x5d905bbf08a97e04ab551d276d8e94b1abaff7d0737324d360e983c2796af23b";
76
+ };
77
+ //# sourceMappingURL=receipt-authorization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-authorization.d.ts","sourceRoot":"","sources":["../src/receipt-authorization.ts"],"names":[],"mappings":"AA0BA;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;;;;;CAExB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,MAAM,EAAE,mBAAmB,CAAC;IAC5B,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;CACd;AAaD,4FAA4F;AAC5F,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,yFAAyF;AACzF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAc7E;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,WAAW,SAAS;IACxB,sFAAsF;IACtF,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAgCxE;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;CAWd,CAAC"}
@@ -0,0 +1,128 @@
1
+ // receipt-authorization.ts — the salted commitment that ties a receipt to one settlement.
2
+ //
3
+ // Written against specs/extensions/extension-offer-and-receipt.md §5.6 at commit
4
+ // 0e492d6730bef14b9c722428386c114f3475a914 of the receipt-authorization-commitment
5
+ // branch. That PR is open, so the preimage can still change: the commit is pinned
6
+ // here on purpose, and the test asserts the vector published with it. If the spec
7
+ // moves, the test fails rather than the signature quietly changing meaning.
8
+ //
9
+ // WHY A COMMITMENT AND NOT THE TRANSACTION HASH. A receipt with an empty
10
+ // `transaction` can be matched to a settlement only by payer, payee, amount and
11
+ // time. Two payments with the same terms in the same block cannot be ordered at
12
+ // all. The ERC-3009 authorization already carries a nonce that is unique per
13
+ // settlement and that the server holds before settlement runs, so a salted hash of
14
+ // it lets whoever holds the salt recompute the link to exactly one settlement, and
15
+ // tells everyone else nothing.
16
+ //
17
+ // AND WHY IT MATTERS TO US SPECIFICALLY: §5.6.5 says a consumer that counts
18
+ // settlements MUST count opened commitments only. A receipt whose commitment
19
+ // nobody can open does not count. That is the category our own receipts were in.
20
+ import { createHash, randomBytes } from "node:crypto";
21
+ /** §5.6.2. ASCII, and the trailing /0 is the preimage version, not the payload version. */
22
+ const DOMAIN_TAG = Buffer.from("x402-receipt-authorization/0", "ascii");
23
+ const NUL = Buffer.from([0]);
24
+ /**
25
+ * §5.6.2's table. Each method fixes the byte length of `asset` and `authorizer`;
26
+ * `identifier` and `salt` are 32 bytes for every method. Fixed lengths are what
27
+ * make the preimage unambiguous without any separators, so they are enforced
28
+ * rather than assumed: a field of the wrong length would hash to a commitment
29
+ * that opens to nothing, and would do so silently.
30
+ */
31
+ export const AUTHORIZATION_METHODS = {
32
+ eip3009: { asset: 20, authorizer: 20 },
33
+ };
34
+ function fixedBytes(value, name, expected) {
35
+ if (typeof value !== "string")
36
+ throw new Error(`${name} must be a hex string`);
37
+ const hex = value.startsWith("0x") || value.startsWith("0X") ? value.slice(2) : value;
38
+ if (!/^[0-9a-fA-F]*$/.test(hex))
39
+ throw new Error(`${name} is not hex: ${JSON.stringify(value)}`);
40
+ const buf = Buffer.from(hex, "hex");
41
+ if (buf.length !== expected) {
42
+ throw new Error(`${name} must be ${expected} bytes per section 5.6.2, got ${buf.length}`);
43
+ }
44
+ return buf;
45
+ }
46
+ /** §5.6.3: 32 bytes from a CSPRNG, independent per payment, never derived from anything. */
47
+ export function generateAuthorizationSalt() {
48
+ return "0x" + randomBytes(32).toString("hex");
49
+ }
50
+ /** §5.6.2, the whole construction. Hex inputs are case-insensitive; bytes are hashed. */
51
+ export function computeAuthorizationCommitment(input) {
52
+ const lengths = AUTHORIZATION_METHODS[input.method];
53
+ if (!lengths)
54
+ throw new Error(`unknown authorizationMethod: ${String(input.method)}`);
55
+ const preimage = Buffer.concat([
56
+ DOMAIN_TAG,
57
+ NUL,
58
+ Buffer.from(input.method, "ascii"),
59
+ NUL,
60
+ fixedBytes(input.asset, "asset", lengths.asset),
61
+ fixedBytes(input.authorizer, "authorizer", lengths.authorizer),
62
+ fixedBytes(input.identifier, "identifier", 32),
63
+ fixedBytes(input.salt, "salt", 32),
64
+ ]);
65
+ return "0x" + createHash("sha256").update(preimage).digest("hex");
66
+ }
67
+ /**
68
+ * §5.6.4 steps 1 and 3. Fails closed on both nothing and ambiguity.
69
+ *
70
+ * Two matches is not "probably the first one": if an identifier can repeat across
71
+ * settlements the commitment genuinely opens to several, and the spec says that
72
+ * case does not link. Reporting a guess there would turn a fail-closed design into
73
+ * a false link, which is the one outcome the whole construction exists to avoid.
74
+ */
75
+ export function openAuthorizationCommitment(input) {
76
+ const { payload, salt, asset, candidateIdentifiers } = input;
77
+ const method = payload?.authorizationMethod;
78
+ const commitment = payload?.authorizationCommitment;
79
+ if (!method || !commitment)
80
+ return { linked: false, reason: "receipt carries no commitment" };
81
+ if (!(method in AUTHORIZATION_METHODS)) {
82
+ return { linked: false, reason: `unknown authorizationMethod: ${method}` };
83
+ }
84
+ const hits = [];
85
+ for (const identifier of candidateIdentifiers ?? []) {
86
+ let computed;
87
+ try {
88
+ computed = computeAuthorizationCommitment({
89
+ method: method,
90
+ asset,
91
+ // §5.6.4 step 1: the authorizer comes from the SIGNED payer field, never
92
+ // from a value handed over next to the salt. Otherwise a commitment can be
93
+ // opened against someone else's settlement.
94
+ authorizer: payload.payer,
95
+ identifier,
96
+ salt,
97
+ });
98
+ }
99
+ catch {
100
+ continue;
101
+ }
102
+ if (computed.toLowerCase() === String(commitment).toLowerCase())
103
+ hits.push(identifier);
104
+ }
105
+ if (hits.length === 1)
106
+ return { linked: true, identifier: hits[0] };
107
+ if (hits.length === 0)
108
+ return { linked: false, reason: "no candidate opens this commitment" };
109
+ return { linked: false, reason: `${hits.length} candidates open the same commitment, ambiguous` };
110
+ }
111
+ /**
112
+ * The vector published with the spec, kept here so our own test has an external
113
+ * anchor. The independent verifier in agent-receipt-verify asserts the same
114
+ * constant from its own implementation: two implementations anchored to the same
115
+ * published number cannot drift silently, two anchored to each other can.
116
+ */
117
+ export const SPEC_VECTOR = {
118
+ source: "x402-foundation/x402 PR #3827, specs/extensions/extension-offer-and-receipt.md §5.6.2, commit 0e492d6730bef14b9c722428386c114f3475a914",
119
+ input: {
120
+ method: "eip3009",
121
+ asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
122
+ authorizer: "0x857b06519E91e3A54538791bDbb0E22373e36b66",
123
+ identifier: "0x5135a00b531830a13a751f3c48944d7a5fdfde7a3b87f73493591cd77efdef4f",
124
+ salt: "0x10d2ae5f0c8536e82d882bf3d2c31a663597e890ca6c3fede0d278fd2a78f655",
125
+ },
126
+ expected: "0x5d905bbf08a97e04ab551d276d8e94b1abaff7d0737324d360e983c2796af23b",
127
+ };
128
+ //# sourceMappingURL=receipt-authorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-authorization.js","sourceRoot":"","sources":["../src/receipt-authorization.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,EAAE;AACF,iFAAiF;AACjF,mFAAmF;AACnF,kFAAkF;AAClF,kFAAkF;AAClF,4EAA4E;AAC5E,EAAE;AACF,yEAAyE;AACzE,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,mFAAmF;AACnF,mFAAmF;AACnF,+BAA+B;AAC/B,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,iFAAiF;AAEjF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,2FAA2F;AAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;AACxE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC9B,CAAC;AAiBX,SAAS,UAAU,CAAC,KAAa,EAAE,IAAY,EAAE,QAAgB;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjG,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,YAAY,QAAQ,iCAAiC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB;IACvC,OAAO,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,8BAA8B,CAAC,KAAsB;IACnE,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,UAAU;QACV,GAAG;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;QAClC,GAAG;QACH,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;QAC/C,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC;QAC9D,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,CAAC;QAC9C,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;KACnC,CAAC,CAAC;IACH,OAAO,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAgBD;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAgB;IAC1D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC;IAC7D,MAAM,MAAM,GAAG,OAAO,EAAE,mBAAmB,CAAC;IAC5C,MAAM,UAAU,GAAG,OAAO,EAAE,uBAAuB,CAAC;IACpD,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAC9F,IAAI,CAAC,CAAC,MAAM,IAAI,qBAAqB,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,MAAM,EAAE,EAAE,CAAC;IAC7E,CAAC;IAED,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,UAAU,IAAI,oBAAoB,IAAI,EAAE,EAAE,CAAC;QACpD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,8BAA8B,CAAC;gBACxC,MAAM,EAAE,MAA6B;gBACrC,KAAK;gBACL,yEAAyE;gBACzE,2EAA2E;gBAC3E,4CAA4C;gBAC5C,UAAU,EAAE,OAAO,CAAC,KAAK;gBACzB,UAAU;gBACV,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAC;IACrE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IAC9F,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,iDAAiD,EAAE,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EACJ,wIAAwI;IAC1I,KAAK,EAAE;QACL,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,4CAA4C;QACnD,UAAU,EAAE,4CAA4C;QACxD,UAAU,EAAE,oEAAoE;QAChF,IAAI,EAAE,oEAAoE;KAC3E;IACD,QAAQ,EAAE,oEAAoE;CACtE,CAAC"}
@@ -0,0 +1,58 @@
1
+ /** Fields the caller extracted from a receipt payload. Every one is optional: a comparison is skipped rather than guessed. */
2
+ export interface ReceiptFields {
3
+ /** The paying party, per the receipt. Compared case-insensitively against the claim's buyerAddress. */
4
+ payer?: string;
5
+ /** The settlement this receipt is about. Compared case-insensitively against the claim's settlementRef. */
6
+ transaction?: string;
7
+ /**
8
+ * When the seller issued the receipt. The x402 offer-and-receipt extension defines this as a
9
+ * unix timestamp in SECONDS (§5.2), which is why a number is accepted and treated as such.
10
+ * A string is accepted too, parsed as a date, because a caller may already have normalised it.
11
+ * A receipt issued after the buyer's claim is a disagreement about ordering.
12
+ */
13
+ issuedAt?: string | number;
14
+ }
15
+ export interface ClaimSide {
16
+ buyerAddress: string;
17
+ settlementRef: string;
18
+ timestamp: string;
19
+ offerReceiptHash?: string | undefined;
20
+ }
21
+ export type BindingResult = {
22
+ bound: true;
23
+ digest: string;
24
+ } | {
25
+ bound: false;
26
+ reason: "claim_names_no_receipt";
27
+ digest: string;
28
+ } | {
29
+ bound: false;
30
+ reason: "digest_mismatch";
31
+ digest: string;
32
+ named: string;
33
+ };
34
+ /** sha256 of the artifact exactly as given, lower-case hex, no prefix. No normalisation of any kind. */
35
+ export declare function receiptDigest(artifact: string | Uint8Array): string;
36
+ /** Does this claim actually name this artifact? Recomputes the digest rather than trusting the field. */
37
+ export declare function checkReceiptBinding(claim: ClaimSide, artifact: string | Uint8Array): BindingResult;
38
+ export interface Disagreement {
39
+ field: "payer" | "transaction" | "issuedAt";
40
+ claim: string;
41
+ receipt: string;
42
+ note: string;
43
+ }
44
+ export interface ComparisonResult {
45
+ /** True only when at least one field was comparable and none disagreed. */
46
+ agrees: boolean;
47
+ /** Fields present on both sides that tell different stories. */
48
+ disagreements: Disagreement[];
49
+ /** Fields that could not be compared because the receipt side was absent. Never counted as agreement. */
50
+ notCompared: Array<"payer" | "transaction" | "issuedAt">;
51
+ }
52
+ /**
53
+ * Compare the two accounts field by field. Only fields both sides describe are
54
+ * compared; a missing receipt field is reported as not compared, never as
55
+ * agreement.
56
+ */
57
+ export declare function compareClaimToReceipt(claim: ClaimSide, receipt: ReceiptFields): ComparisonResult;
58
+ //# sourceMappingURL=receipt-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-check.d.ts","sourceRoot":"","sources":["../src/receipt-check.ts"],"names":[],"mappings":"AAwBA,8HAA8H;AAC9H,MAAM,WAAW,aAAa;IAC5B,uGAAuG;IACvG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,wGAAwG;AACxG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAEnE;AAED,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,CAOlG;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,yGAAyG;IACzG,WAAW,EAAE,KAAK,CAAC,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,gBAAgB,CA6ChG"}
@@ -0,0 +1,88 @@
1
+ // receipt-check.ts — compute whether a buyer's claim and the seller's receipt
2
+ // it names actually agree.
3
+ //
4
+ // The claim already carries `offerReceiptHash`, the sha256 of the seller's
5
+ // x402 offer-receipt artifact exactly as transmitted. That binds the two halves
6
+ // by name. It does not say whether they tell the same story: nothing here or
7
+ // anywhere else recomputed the digest against a real artifact, or compared the
8
+ // fields the two sides both describe. Until it does, a contradiction between a
9
+ // buyer's account and the seller's own receipt stays a matter of reading rather
10
+ // than of arithmetic.
11
+ //
12
+ // Deliberately NOT in here: any verdict about who is right. A disagreement is
13
+ // reported as a disagreement. Adjudication belongs to whatever protocol the
14
+ // claim's `externalRefs.disputeContext` names, exactly as that field already
15
+ // states.
16
+ //
17
+ // The receipt is never re-canonicalised, parsed, or re-serialised by us. The
18
+ // caller passes the raw artifact for the digest, and separately passes whatever
19
+ // fields it extracted with its own x402 tooling. That split is the point: this
20
+ // module cannot silently disagree with the spec about wire shape, because it
21
+ // never interprets the wire shape.
22
+ import { createHash } from "node:crypto";
23
+ /** sha256 of the artifact exactly as given, lower-case hex, no prefix. No normalisation of any kind. */
24
+ export function receiptDigest(artifact) {
25
+ return createHash("sha256").update(artifact).digest("hex");
26
+ }
27
+ /** Does this claim actually name this artifact? Recomputes the digest rather than trusting the field. */
28
+ export function checkReceiptBinding(claim, artifact) {
29
+ const digest = receiptDigest(artifact);
30
+ if (claim.offerReceiptHash === undefined)
31
+ return { bound: false, reason: "claim_names_no_receipt", digest };
32
+ if (claim.offerReceiptHash !== digest) {
33
+ return { bound: false, reason: "digest_mismatch", digest, named: claim.offerReceiptHash };
34
+ }
35
+ return { bound: true, digest };
36
+ }
37
+ /**
38
+ * Compare the two accounts field by field. Only fields both sides describe are
39
+ * compared; a missing receipt field is reported as not compared, never as
40
+ * agreement.
41
+ */
42
+ export function compareClaimToReceipt(claim, receipt) {
43
+ const disagreements = [];
44
+ const notCompared = [];
45
+ if (receipt.payer === undefined) {
46
+ notCompared.push("payer");
47
+ }
48
+ else if (receipt.payer.toLowerCase() !== claim.buyerAddress.toLowerCase()) {
49
+ disagreements.push({
50
+ field: "payer",
51
+ claim: claim.buyerAddress,
52
+ receipt: receipt.payer,
53
+ note: "the receipt names a different paying party than the claim was signed for",
54
+ });
55
+ }
56
+ if (receipt.transaction === undefined) {
57
+ notCompared.push("transaction");
58
+ }
59
+ else if (receipt.transaction.toLowerCase() !== claim.settlementRef.toLowerCase()) {
60
+ disagreements.push({
61
+ field: "transaction",
62
+ claim: claim.settlementRef,
63
+ receipt: receipt.transaction,
64
+ note: "the two halves are about different settlements",
65
+ });
66
+ }
67
+ if (receipt.issuedAt === undefined) {
68
+ notCompared.push("issuedAt");
69
+ }
70
+ else {
71
+ const r = typeof receipt.issuedAt === "number" ? receipt.issuedAt * 1000 : Date.parse(receipt.issuedAt);
72
+ const c = Date.parse(claim.timestamp);
73
+ if (!Number.isFinite(r) || Number.isNaN(c)) {
74
+ notCompared.push("issuedAt");
75
+ }
76
+ else if (r > c) {
77
+ disagreements.push({
78
+ field: "issuedAt",
79
+ claim: claim.timestamp,
80
+ receipt: String(receipt.issuedAt),
81
+ note: "the seller issued the receipt after the buyer signed the claim about it",
82
+ });
83
+ }
84
+ }
85
+ const compared = 3 - notCompared.length;
86
+ return { agrees: compared > 0 && disagreements.length === 0, disagreements, notCompared };
87
+ }
88
+ //# sourceMappingURL=receipt-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-check.js","sourceRoot":"","sources":["../src/receipt-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /** §5.3, normative. EIP712Domain is omitted on purpose: ethers derives it from the domain object. */
2
+ export declare const RECEIPT_EIP712_TYPES: {
3
+ readonly Receipt: readonly [{
4
+ readonly name: "version";
5
+ readonly type: "uint256";
6
+ }, {
7
+ readonly name: "network";
8
+ readonly type: "string";
9
+ }, {
10
+ readonly name: "resourceUrl";
11
+ readonly type: "string";
12
+ }, {
13
+ readonly name: "payer";
14
+ readonly type: "string";
15
+ }, {
16
+ readonly name: "issuedAt";
17
+ readonly type: "uint256";
18
+ }, {
19
+ readonly name: "transaction";
20
+ readonly type: "string";
21
+ }];
22
+ };
23
+ /** §5.5 step 3. chainId is 1 for every network: it identifies the signing domain, not the settlement chain. */
24
+ export declare const RECEIPT_EIP712_DOMAIN: {
25
+ readonly name: "x402 receipt";
26
+ readonly version: "1";
27
+ readonly chainId: 1;
28
+ };
29
+ /** Only version 1 is defined (§5.2). */
30
+ export declare const RECEIPT_PAYLOAD_VERSION = 1;
31
+ /**
32
+ * Section 5.3, receipt payload version 2: the same type with two fields appended.
33
+ *
34
+ * A SEPARATE constant, not an edit of the one above, and that is the whole point.
35
+ * EIP-712 hashes the field list into the signature, so appending to the v1 type
36
+ * would invalidate every v1 receipt ever signed. Section 5.5 step 2 says a verifier
37
+ * picks the types by payload.version, which only works if both lists still exist.
38
+ *
39
+ * Written against commit 0e492d6730bef14b9c722428386c114f3475a914 of the open
40
+ * receipt-authorization-commitment branch. Pinned because that PR can still move.
41
+ */
42
+ export declare const RECEIPT_EIP712_TYPES_V2: {
43
+ readonly Receipt: readonly [{
44
+ readonly name: "version";
45
+ readonly type: "uint256";
46
+ }, {
47
+ readonly name: "network";
48
+ readonly type: "string";
49
+ }, {
50
+ readonly name: "resourceUrl";
51
+ readonly type: "string";
52
+ }, {
53
+ readonly name: "payer";
54
+ readonly type: "string";
55
+ }, {
56
+ readonly name: "issuedAt";
57
+ readonly type: "uint256";
58
+ }, {
59
+ readonly name: "transaction";
60
+ readonly type: "string";
61
+ }, {
62
+ readonly name: "authorizationMethod";
63
+ readonly type: "string";
64
+ }, {
65
+ readonly name: "authorizationCommitment";
66
+ readonly type: "string";
67
+ }];
68
+ };
69
+ /** Section 5.2. Opt in by passing a commitment; v2 is never chosen for a caller. */
70
+ export declare const RECEIPT_PAYLOAD_VERSION_V2 = 2;
71
+ /** Pick the schema the way section 5.5 step 2 requires: by the version in the payload. */
72
+ export declare function receiptTypesForVersion(version: number): {
73
+ readonly Receipt: readonly [{
74
+ readonly name: "version";
75
+ readonly type: "uint256";
76
+ }, {
77
+ readonly name: "network";
78
+ readonly type: "string";
79
+ }, {
80
+ readonly name: "resourceUrl";
81
+ readonly type: "string";
82
+ }, {
83
+ readonly name: "payer";
84
+ readonly type: "string";
85
+ }, {
86
+ readonly name: "issuedAt";
87
+ readonly type: "uint256";
88
+ }, {
89
+ readonly name: "transaction";
90
+ readonly type: "string";
91
+ }];
92
+ } | {
93
+ readonly Receipt: readonly [{
94
+ readonly name: "version";
95
+ readonly type: "uint256";
96
+ }, {
97
+ readonly name: "network";
98
+ readonly type: "string";
99
+ }, {
100
+ readonly name: "resourceUrl";
101
+ readonly type: "string";
102
+ }, {
103
+ readonly name: "payer";
104
+ readonly type: "string";
105
+ }, {
106
+ readonly name: "issuedAt";
107
+ readonly type: "uint256";
108
+ }, {
109
+ readonly name: "transaction";
110
+ readonly type: "string";
111
+ }, {
112
+ readonly name: "authorizationMethod";
113
+ readonly type: "string";
114
+ }, {
115
+ readonly name: "authorizationCommitment";
116
+ readonly type: "string";
117
+ }];
118
+ } | null;
119
+ export interface ReceiptPayload {
120
+ version: number;
121
+ network: string;
122
+ resourceUrl: string;
123
+ payer: string;
124
+ issuedAt: number;
125
+ /** §5.3: absent means the empty string, because a fixed EIP-712 schema has no absent. */
126
+ transaction: string;
127
+ /** Version 2 only. Both present together, empty strings when unused (section 5.3). */
128
+ authorizationMethod?: string;
129
+ authorizationCommitment?: string;
130
+ }
131
+ export interface ReceiptInput {
132
+ /** CAIP-2, e.g. "eip155:8453". A v1 name such as "base" is rejected rather than guessed at. */
133
+ network: string;
134
+ /** The paid resource. A verifier checks signer authorization against this host (§4.5.1). */
135
+ resourceUrl: string;
136
+ /** Who paid. Commonly an address. */
137
+ payer: string;
138
+ /** Unix seconds. Not milliseconds: a millisecond value would date the receipt to the year 56000. */
139
+ issuedAt: number;
140
+ /** Omit for the privacy-minimal default that §5.4 describes. */
141
+ transaction?: string | undefined;
142
+ /**
143
+ * Section 5.6. Supplying either of these makes the payload version 2. The salt
144
+ * that opens the commitment is deliberately NOT an input here: it must never
145
+ * reach the signed payload (5.6.3), so it travels beside the receipt instead.
146
+ */
147
+ authorizationMethod?: string | undefined;
148
+ authorizationCommitment?: string | undefined;
149
+ }
150
+ export declare function buildReceiptPayload(input: ReceiptInput): ReceiptPayload;
151
+ /** What a signer has to be able to do. An ethers Wallet satisfies it, and so does a remote signer. */
152
+ export interface TypedDataSigner {
153
+ signTypedData(domain: typeof RECEIPT_EIP712_DOMAIN, types: typeof RECEIPT_EIP712_TYPES, value: ReceiptPayload): Promise<string>;
154
+ }
155
+ /**
156
+ * Sign a payload and return the wire artifact as a JSON string.
157
+ *
158
+ * The string is what gets transmitted and what a buyer's `offerReceiptHash`
159
+ * digests, so it is returned already serialised. Handing back an object would
160
+ * invite the caller to re-serialise it, and a different key order is a different
161
+ * digest.
162
+ */
163
+ export declare function issueReceipt(payload: ReceiptPayload, signer: TypedDataSigner): Promise<string>;
164
+ export type RecoveredSigner = {
165
+ ok: true;
166
+ signer: string;
167
+ payload: ReceiptPayload;
168
+ } | {
169
+ ok: false;
170
+ reason: "unparseable" | "unsupported_format" | "malformed" | "bad_signature";
171
+ };
172
+ /**
173
+ * Recover who signed an artifact. This answers signature validity only.
174
+ *
175
+ * §4.5.1 is explicit that validity is not authorization: anyone can sign a
176
+ * receipt for any resourceUrl. Confirming the recovered signer is allowed to
177
+ * speak for that host is a separate step, against a DNS TXT record, a did:web
178
+ * document, or the payTo address, and is not done here.
179
+ */
180
+ export declare function recoverReceiptSigner(artifact: string): RecoveredSigner;
181
+ //# sourceMappingURL=receipt-issue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-issue.d.ts","sourceRoot":"","sources":["../src/receipt-issue.ts"],"names":[],"mappings":"AAoBA,qGAAqG;AACrG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;CASvB,CAAC;AAEX,+GAA+G;AAC/G,eAAO,MAAM,qBAAqB;;;;CAA8D,CAAC;AAEjG,wCAAwC;AACxC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;CAM1B,CAAC;AAEX,oFAAoF;AACpF,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAIrD;AAKD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,+FAA+F;IAC/F,OAAO,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAgDvE;AAED,sGAAsG;AACtG,MAAM,WAAW,eAAe;IAC9B,aAAa,CACX,MAAM,EAAE,OAAO,qBAAqB,EACpC,KAAK,EAAE,OAAO,oBAAoB,EAClC,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CASpG;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACrD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,GAAG,oBAAoB,GAAG,WAAW,GAAG,eAAe,CAAA;CAAE,CAAC;AAEhG;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CA4CtE"}
@@ -0,0 +1,177 @@
1
+ // receipt-issue.ts — build and sign an x402 offer-receipt as a seller.
2
+ //
3
+ // Everything else in this package is the buyer's side. This is the other half,
4
+ // and it exists because that half is missing in the wild: sampled on 2026-10-15
5
+ // across one facilitator's discovery index of 20,462 live x402 resources, at six
6
+ // spread offsets of 100 each, not one declared the offer-receipt extension. A
7
+ // buyer's claim can name a seller's receipt, and today there is almost nothing
8
+ // to name.
9
+ //
10
+ // The EIP-712 types and domain below are copied verbatim from the extension's
11
+ // normative sections and exported, because a verifier needs exactly these and
12
+ // the spec says they MUST NOT travel on the wire (§3.2.1). A party holding only
13
+ // the artifact has to get them from here or from the spec.
14
+ //
15
+ // JWS is the other permitted format and is deliberately not implemented. An
16
+ // Ethereum key signs EIP-712 directly, so JWS would add a key type and a DID
17
+ // resolution path for no gain today.
18
+ import { ethers } from "ethers";
19
+ /** §5.3, normative. EIP712Domain is omitted on purpose: ethers derives it from the domain object. */
20
+ export const RECEIPT_EIP712_TYPES = {
21
+ Receipt: [
22
+ { name: "version", type: "uint256" },
23
+ { name: "network", type: "string" },
24
+ { name: "resourceUrl", type: "string" },
25
+ { name: "payer", type: "string" },
26
+ { name: "issuedAt", type: "uint256" },
27
+ { name: "transaction", type: "string" },
28
+ ],
29
+ };
30
+ /** §5.5 step 3. chainId is 1 for every network: it identifies the signing domain, not the settlement chain. */
31
+ export const RECEIPT_EIP712_DOMAIN = { name: "x402 receipt", version: "1", chainId: 1 };
32
+ /** Only version 1 is defined (§5.2). */
33
+ export const RECEIPT_PAYLOAD_VERSION = 1;
34
+ /**
35
+ * Section 5.3, receipt payload version 2: the same type with two fields appended.
36
+ *
37
+ * A SEPARATE constant, not an edit of the one above, and that is the whole point.
38
+ * EIP-712 hashes the field list into the signature, so appending to the v1 type
39
+ * would invalidate every v1 receipt ever signed. Section 5.5 step 2 says a verifier
40
+ * picks the types by payload.version, which only works if both lists still exist.
41
+ *
42
+ * Written against commit 0e492d6730bef14b9c722428386c114f3475a914 of the open
43
+ * receipt-authorization-commitment branch. Pinned because that PR can still move.
44
+ */
45
+ export const RECEIPT_EIP712_TYPES_V2 = {
46
+ Receipt: [
47
+ ...RECEIPT_EIP712_TYPES.Receipt,
48
+ { name: "authorizationMethod", type: "string" },
49
+ { name: "authorizationCommitment", type: "string" },
50
+ ],
51
+ };
52
+ /** Section 5.2. Opt in by passing a commitment; v2 is never chosen for a caller. */
53
+ export const RECEIPT_PAYLOAD_VERSION_V2 = 2;
54
+ /** Pick the schema the way section 5.5 step 2 requires: by the version in the payload. */
55
+ export function receiptTypesForVersion(version) {
56
+ if (version === RECEIPT_PAYLOAD_VERSION)
57
+ return RECEIPT_EIP712_TYPES;
58
+ if (version === RECEIPT_PAYLOAD_VERSION_V2)
59
+ return RECEIPT_EIP712_TYPES_V2;
60
+ return null;
61
+ }
62
+ /** CAIP-2, which §5.2 requires even though x402 v1 messages use names like "base-sepolia". */
63
+ const CAIP2_RE = /^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}$/;
64
+ export function buildReceiptPayload(input) {
65
+ if (!CAIP2_RE.test(input.network)) {
66
+ throw new Error(`network must be CAIP-2 per section 5.2, e.g. "eip155:8453", not ${JSON.stringify(input.network)}`);
67
+ }
68
+ if (!/^https?:\/\/.+/.test(input.resourceUrl)) {
69
+ throw new Error("resourceUrl must be an absolute http(s) URL: a verifier checks signer authorization against its host");
70
+ }
71
+ if (input.payer.length === 0)
72
+ throw new Error("payer is required (section 5.2)");
73
+ if (!Number.isInteger(input.issuedAt) || input.issuedAt <= 0) {
74
+ throw new Error("issuedAt must be a positive integer of unix SECONDS (section 5.2)");
75
+ }
76
+ // 1e12 seconds is the year 33658. Anything above it is a millisecond value,
77
+ // which would sign a true-looking receipt dated tens of thousands of years out.
78
+ if (input.issuedAt > 1e12) {
79
+ throw new Error("issuedAt looks like milliseconds: section 5.2 defines it as unix seconds");
80
+ }
81
+ const base = {
82
+ version: RECEIPT_PAYLOAD_VERSION,
83
+ network: input.network,
84
+ resourceUrl: input.resourceUrl,
85
+ payer: input.payer,
86
+ issuedAt: input.issuedAt,
87
+ transaction: input.transaction ?? "",
88
+ };
89
+ // Either commitment field lifts the payload to version 2, and then BOTH are
90
+ // present. A v2 receipt carrying only one of the pair would hash under the v2
91
+ // type with a field the caller never decided on, so the pair is completed here
92
+ // instead of left to the caller to remember.
93
+ const method = input.authorizationMethod;
94
+ const commitment = input.authorizationCommitment;
95
+ if (method === undefined && commitment === undefined)
96
+ return base;
97
+ if (!!method !== !!commitment) {
98
+ throw new Error("authorizationMethod and authorizationCommitment go together per section 5.6: one without the other commits to nothing");
99
+ }
100
+ if (commitment !== undefined && commitment !== "" && !/^0x[0-9a-fA-F]{64}$/.test(commitment)) {
101
+ throw new Error("authorizationCommitment must be a 0x-prefixed SHA-256 digest (section 5.6.2)");
102
+ }
103
+ return {
104
+ ...base,
105
+ version: RECEIPT_PAYLOAD_VERSION_V2,
106
+ authorizationMethod: method ?? "",
107
+ authorizationCommitment: commitment ?? "",
108
+ };
109
+ }
110
+ /**
111
+ * Sign a payload and return the wire artifact as a JSON string.
112
+ *
113
+ * The string is what gets transmitted and what a buyer's `offerReceiptHash`
114
+ * digests, so it is returned already serialised. Handing back an object would
115
+ * invite the caller to re-serialise it, and a different key order is a different
116
+ * digest.
117
+ */
118
+ export async function issueReceipt(payload, signer) {
119
+ const types = receiptTypesForVersion(payload.version);
120
+ if (!types)
121
+ throw new Error(`no EIP-712 types defined for receipt payload version ${payload.version}`);
122
+ const signature = await signer.signTypedData(RECEIPT_EIP712_DOMAIN, types, payload);
123
+ return JSON.stringify({ format: "eip712", payload, signature });
124
+ }
125
+ /**
126
+ * Recover who signed an artifact. This answers signature validity only.
127
+ *
128
+ * §4.5.1 is explicit that validity is not authorization: anyone can sign a
129
+ * receipt for any resourceUrl. Confirming the recovered signer is allowed to
130
+ * speak for that host is a separate step, against a DNS TXT record, a did:web
131
+ * document, or the payTo address, and is not done here.
132
+ */
133
+ export function recoverReceiptSigner(artifact) {
134
+ let parsed;
135
+ try {
136
+ parsed = JSON.parse(artifact);
137
+ }
138
+ catch {
139
+ return { ok: false, reason: "unparseable" };
140
+ }
141
+ if (typeof parsed !== "object" || parsed === null)
142
+ return { ok: false, reason: "malformed" };
143
+ const { format, payload, signature } = parsed;
144
+ if (format !== "eip712")
145
+ return { ok: false, reason: "unsupported_format" };
146
+ if (typeof signature !== "string" || typeof payload !== "object" || payload === null) {
147
+ return { ok: false, reason: "malformed" };
148
+ }
149
+ const p = payload;
150
+ const shapeOk = typeof p.version === "number" &&
151
+ typeof p.network === "string" &&
152
+ typeof p.resourceUrl === "string" &&
153
+ typeof p.payer === "string" &&
154
+ typeof p.issuedAt === "number" &&
155
+ typeof p.transaction === "string";
156
+ if (!shapeOk)
157
+ return { ok: false, reason: "malformed" };
158
+ // Section 5.5 step 2. An unknown version is rejected rather than verified
159
+ // against the nearest schema we happen to have: a signature only means
160
+ // something together with the exact field list it was made over.
161
+ const types = receiptTypesForVersion(p.version);
162
+ if (!types)
163
+ return { ok: false, reason: "malformed" };
164
+ if (p.version === RECEIPT_PAYLOAD_VERSION_V2) {
165
+ if (typeof p.authorizationMethod !== "string" || typeof p.authorizationCommitment !== "string") {
166
+ return { ok: false, reason: "malformed" };
167
+ }
168
+ }
169
+ try {
170
+ const signer = ethers.verifyTypedData(RECEIPT_EIP712_DOMAIN, types, p, signature);
171
+ return { ok: true, signer, payload: p };
172
+ }
173
+ catch {
174
+ return { ok: false, reason: "bad_signature" };
175
+ }
176
+ }
177
+ //# sourceMappingURL=receipt-issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-issue.js","sourceRoot":"","sources":["../src/receipt-issue.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -90,6 +90,7 @@ export declare const ClaimContentObject: z.ZodObject<{
90
90
  partial: "partial";
91
91
  }>;
92
92
  evidenceHash: z.ZodString;
93
+ offerReceiptHash: z.ZodOptional<z.ZodString>;
93
94
  settlementRef: z.ZodString;
94
95
  timestamp: z.ZodString;
95
96
  measured: z.ZodOptional<z.ZodObject<{
@@ -152,6 +153,7 @@ export declare const DeliveryClaimObject: z.ZodObject<{
152
153
  partial: "partial";
153
154
  }>;
154
155
  evidenceHash: z.ZodString;
156
+ offerReceiptHash: z.ZodOptional<z.ZodString>;
155
157
  settlementRef: z.ZodString;
156
158
  timestamp: z.ZodString;
157
159
  measured: z.ZodOptional<z.ZodObject<{
@@ -216,6 +218,7 @@ export declare const ClaimContentSchema: z.ZodObject<{
216
218
  partial: "partial";
217
219
  }>;
218
220
  evidenceHash: z.ZodString;
221
+ offerReceiptHash: z.ZodOptional<z.ZodString>;
219
222
  settlementRef: z.ZodString;
220
223
  timestamp: z.ZodString;
221
224
  measured: z.ZodOptional<z.ZodObject<{
@@ -280,6 +283,7 @@ export declare const DeliveryClaimSchema: z.ZodObject<{
280
283
  partial: "partial";
281
284
  }>;
282
285
  evidenceHash: z.ZodString;
286
+ offerReceiptHash: z.ZodOptional<z.ZodString>;
283
287
  settlementRef: z.ZodString;
284
288
  timestamp: z.ZodString;
285
289
  measured: z.ZodOptional<z.ZodObject<{
@@ -372,6 +376,7 @@ export declare const StrictClaimContentSchema: z.ZodObject<{
372
376
  partial: "partial";
373
377
  }>;
374
378
  evidenceHash: z.ZodString;
379
+ offerReceiptHash: z.ZodOptional<z.ZodString>;
375
380
  settlementRef: z.ZodString;
376
381
  timestamp: z.ZodString;
377
382
  measured: z.ZodOptional<z.ZodObject<{
@@ -435,6 +440,7 @@ export declare const StrictDeliveryClaimSchema: z.ZodObject<{
435
440
  partial: "partial";
436
441
  }>;
437
442
  evidenceHash: z.ZodString;
443
+ offerReceiptHash: z.ZodOptional<z.ZodString>;
438
444
  settlementRef: z.ZodString;
439
445
  timestamp: z.ZodString;
440
446
  measured: z.ZodOptional<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,WAAW,+DAAgE,CAAC;AACzF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,gBAAgB,mCAAoC,CAAC;AAClE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM1D,eAAO,MAAM,cAAc,QAAwB,CAAC;AAoGpD,eAAO,MAAM,cAAc,2EAA4E,CAAC;AACxG,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,qBAAqB,mCAAoC,CAAC;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AASnE,eAAO,MAAM,2BAA2B,4DAA6D,CAAC;AACtG,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAK1E,CAAC;AA4HF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkCzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAuItD,QAAA,MAAM,oBAAoB;;;;kBAgBxB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,kBAAkB;;;;;;;;;;;kBAuB3B,CAAC;AACL,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsG7B,CAAC;AAWH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9B,CAAC;AASH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA2D,CAAC;AAC3F,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4D,CAAC;AAC7F,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAuCD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAG5D;AAoLD,qHAAqH;AACrH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA6F,CAAC;AAEnI,iHAAiH;AACjH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8F,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,WAAW,+DAAgE,CAAC;AACzF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,gBAAgB,mCAAoC,CAAC;AAClE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM1D,eAAO,MAAM,cAAc,QAAwB,CAAC;AAoGpD,eAAO,MAAM,cAAc,2EAA4E,CAAC;AACxG,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,qBAAqB,mCAAoC,CAAC;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AASnE,eAAO,MAAM,2BAA2B,4DAA6D,CAAC;AACtG,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAK1E,CAAC;AA4HF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkCzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAuItD,QAAA,MAAM,oBAAoB;;;;kBAgBxB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,kBAAkB;;;;;;;;;;;kBAuB3B,CAAC;AACL,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0J7B,CAAC;AAWH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9B,CAAC;AASH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA2D,CAAC;AAC3F,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4D,CAAC;AAC7F,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAuCD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAG5D;AAoLD,qHAAqH;AACrH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA6F,CAAC;AAEnI,iHAAiH;AACjH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8F,CAAC"}
package/dist/schema.js CHANGED
@@ -461,6 +461,56 @@ export const ClaimContentObject = z.object({
461
461
  .string()
462
462
  .regex(SHA256_HEX_RE, "evidenceHash must be a sha256 hex digest (64 hex chars, no 0x prefix)")
463
463
  .describe("sha256 hex digest of evidence for this claim (logs, response payload, etc.) — the evidence itself is not stored here"),
464
+ // OPTIONAL, and that is load bearing. The field was added after claims were
465
+ // already being signed in the wild, so it must be absent-by-default: an older
466
+ // claim serialises byte-identically with or without this line existing in the
467
+ // schema, which keeps every previously signed claimId and signature valid.
468
+ //
469
+ // WHY IT EXISTS: x402 ships an official offer-receipt extension whose receipt
470
+ // is signed by the RESOURCE SERVER and, in its own words, "proves service was
471
+ // delivered". That is the seller's account of the seller's own performance.
472
+ // This claim is the other half: signed by the BUYER, who is the only party who
473
+ // knows whether what arrived matched what was promised. Their own README lists
474
+ // dispute resolution as a use case, and a dispute cannot be settled on the
475
+ // word of the interested party alone.
476
+ //
477
+ // WHAT THE DIGEST IS OVER, precisely, because "the signed bytes" is ambiguous
478
+ // for this artifact. Per x402's offer-and-receipt extension spec, a receipt is
479
+ // transmitted as { format, payload, signature } where format is "eip712" or
480
+ // "jws" (§3.1), and its payload carries no identifier field of its own (§5.2:
481
+ // version, network, resourceUrl, payer, issuedAt, transaction). Neither format
482
+ // exposes a single canonical byte string to hash: for "eip712" the signing
483
+ // digest is derived from normative types the spec says MUST NOT be transmitted
484
+ // (§3.2.1), and for "jws" the payload is base64url-encoded inside the compact
485
+ // serialization. So this digest is deliberately taken over the receipt artifact
486
+ // EXACTLY AS THE SELLER TRANSMITTED IT, with no re-canonicalisation by us.
487
+ //
488
+ // That choice is the conservative one. The spec states plainly that wire shape
489
+ // is not stable (§2) while the payload and signature rules are, so inventing a
490
+ // canonical form here would mean maintaining a second, competing
491
+ // canonicalisation of somebody else's artifact — the exact ambiguity this field
492
+ // exists to avoid. The honest limitation that follows: two parties handed the
493
+ // same receipt serialised differently (key order, whitespace) compute different
494
+ // digests. That is acceptable because this is the BUYER's claim about the
495
+ // receipt the buyer was actually handed, so byte-exactness is the property
496
+ // wanted. Anyone holding those same bytes can recompute the digest and check
497
+ // the signature with x402's own verifier; nobody has to take our word for it.
498
+ // Their spec already anticipates this use, noting an artifact may be stored
499
+ // "outside the x402 negotiation context (e.g., in attestations or reputation
500
+ // systems)" (§4.1.1).
501
+ //
502
+ // LOWER-CASE ONLY, enforced here rather than at ingest: this field is new, so
503
+ // no claim has ever been signed with an upper-case value and there is nothing
504
+ // to stay compatible with. evidenceHash carries the permissive regex only
505
+ // because it predates that rule, which is why its lower-case check had to be
506
+ // bolted on at ingest instead (S-3). Same reasoning as readingsHash and
507
+ // termsHash: strict from day one, so the same receipt can never mint two
508
+ // different claimIds depending on how its digest was typed.
509
+ offerReceiptHash: z
510
+ .string()
511
+ .regex(LOWER_SHA256_HEX_RE, "offerReceiptHash must be a lower-case sha256 hex digest (64 chars, no 0x prefix)")
512
+ .optional()
513
+ .describe("optional sha256 hex digest (lower-case, no 0x prefix) of the seller-signed x402 offer-receipt this claim answers, taken over the receipt artifact exactly as it was transmitted. The receipt itself is not stored here. Omit it if there is no receipt."),
464
514
  settlementRef: z
465
515
  .string()
466
516
  .min(1, "settlementRef is required (x402 payment reference or on-chain tx hash)")
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacity-attest",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "MCP server for capacity-delivery attestations: after an x402 payment for compute capacity (GPU-hours, storage, API credits, bandwidth), the paying agent leaves a signed, factual claim of what was actually delivered, so other agents can check a seller's delivery history before paying. No reputation score, no judgment, no financial instrument.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -46,6 +46,7 @@
46
46
  "fixture": "tsx examples/completeness-fixture.ts",
47
47
  "completeness-fixture": "tsx examples/completeness-fixture.ts",
48
48
  "discovery-fixture": "tsx examples/discovery-fixture.ts",
49
+ "offer-receipt-link": "node examples/verify-offer-receipt-link.mjs",
49
50
  "eas-demo": "tsx examples/eas-live-demo.ts",
50
51
  "erc8004-reputation-demo": "tsx examples/erc8004-reputation-live-demo.ts"
51
52
  },