@atrib/agent 0.2.6 → 0.2.8

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
@@ -1,10 +1,10 @@
1
1
  # `@atrib/agent`
2
2
 
3
- **Verifiable agent actions, client side. Every outbound MCP tool call gets signed at the moment of dispatch, carries provable context to the receiver, and chains into the next action. Works with every major MCP framework. Sits above every major agent payment protocol so commerce-closing settlement is bundled in.**
3
+ **Verifiable agent actions, client side. Outbound MCP tool calls carry atrib/W3C context, consume upstream signed records, record local gap nodes, and emit signed fallback transaction records when commerce closes. Works with every major MCP framework. Sits above every major agent payment protocol so commerce-closing evidence can join the same trace.**
4
4
 
5
- `@atrib/agent` is the client-side half of the [atrib protocol](https://github.com/creatornader/atrib/blob/main/atrib-spec.md). Each outbound MCP tool call becomes a signed, chainable record so anyone (the agent itself, downstream auditors, merchants closing a transaction, future agents picking up the work) can verify what happened without trusting any intermediary.
5
+ `@atrib/agent` is the client-side half of the [atrib protocol](https://github.com/creatornader/atrib/blob/main/atrib-spec.md). It keeps outbound MCP calls in the atrib session lifecycle: context goes out, upstream atrib tokens come back in, unsigned hops become local gap nodes, and transaction-shaped responses can produce signed agent-side fallback records. Ordinary `tool_call` records are signed at the tool boundary by `@atrib/mcp`, `@atrib/mcp-wrap`, or an instrumented upstream server.
6
6
 
7
- You set up one `atrib()` interceptor, plug it into your framework's adapter, and every outbound `tools/call` from that point on carries W3C trace context, an atrib chain token, and the full atrib session lifecycle. When a payment completes (through any of the supported commerce protocols), a transaction record closes the chain and the substrate produces a signed settlement document anyone can recompute. When commerce never closes the chain, the substrate still serves recall, audit, and cross-agent provenance.
7
+ You set up one `atrib()` interceptor, plug it into your framework's adapter, and every outbound `tools/call` from that point on carries W3C trace context, an atrib chain token, and the full atrib session lifecycle. When a payment completes through a supported commerce protocol, the interceptor can consume an upstream atrib record or emit an agent-side fallback `transaction` record. When commerce never closes the chain, the substrate still serves recall, audit, and cross-agent provenance.
8
8
 
9
9
  Two coverage surfaces define what you get:
10
10
 
@@ -26,7 +26,7 @@ Two coverage surfaces define what you get:
26
26
 
27
27
  ## Coverage Matrix 2: Agent Payment Protocols
28
28
 
29
- `@atrib/agent` sits **above** every major agent payment protocol. It does not implement payments, move money, or enforce transactions; it detects transaction events in the response flow of whichever payment protocol your agent is using, and writes a signed transaction record that closes the attribution chain. **You do not choose a payment protocol at install time**; the detection logic for all six (ACP, UCP, x402, MPP, AP2, a2a-x402) runs simultaneously and fires on whichever one your tool responses happen to carry. Transaction records emitted by `@atrib/agent` carry the `signers` array per spec [§1.7.6](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#176-cross-attestation-requirement-for-transaction-records); the counterparty signature is collected via the payment protocol's settlement response.
29
+ `@atrib/agent` sits **above** every major agent payment protocol. It does not implement payments, move money, or enforce transactions; it detects transaction events in the response flow of whichever payment protocol your agent is using, and writes a fallback transaction record when no upstream atrib token already closed the chain. **You do not choose a payment protocol at install time**; the detection logic for all six (ACP, UCP, x402, MPP, AP2, a2a-x402) runs simultaneously and fires on whichever one your tool responses happen to carry. The fallback record carries an agent `signers[]` entry over the atrib transaction bytes. Counterparty signatures and payment-receipt evidence are verifier inputs when the protocol supplies them; [D052](https://github.com/creatornader/atrib/blob/main/DECISIONS.md#d052-cross-attestation-requirement-for-transaction-records)-aware verifiers still flag records that do not meet the required cross-attestation bar.
30
30
 
31
31
  All detection logic lives in `packages/agent/src/transaction.ts` and runs against unit tests for each protocol's published spec.
32
32
 
@@ -36,7 +36,7 @@ All detection logic lives in `packages/agent/src/transaction.ts` and runs agains
36
36
  | **UCP**. Universal Commerce Protocol | `github.com/universal-commerce-protocol/ucp` | Same shape as ACP + top-level `ucp.version` envelope | [§1.7.2](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#172-ucp-universal-commerce-protocol) |
37
37
  | **x402** | Coinbase. `github.com/coinbase/x402` | HTTP `PAYMENT-RESPONSE` header (v2) or legacy `X-PAYMENT-RESPONSE` (v1) on the 200 response | [§1.7.3](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#173-x402) |
38
38
  | **MPP**. Machine Payments Protocol | Tempo Labs / Stripe; IETF `draft-ryan-httpauth-payment-01` | HTTP `Payment-Receipt` header on 200 success response | [§1.7.4](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#174-mpp-machine-payments-protocol) |
39
- | **AP2**. Agent Payments Protocol | Google; `github.com/google-agentic-commerce/ap2` | A2A Message with DataPart containing `ap2.mandates.PaymentMandate` | [§1.7.5](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#175-ap2-and-a2a-x402) |
39
+ | **AP2**. Agentic Payment Protocol | Google; `github.com/google-agentic-commerce/AP2` | Successful AP2 `PaymentReceipt` or `CheckoutReceipt`; v0.1 `ap2.mandates.PaymentMandate` remains a fallback | [§1.7.5](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#175-ap2-and-a2a-x402) |
40
40
  | **a2a-x402** | Google. `github.com/google-agentic-commerce/a2a-x402` | A2A task `status.message.metadata["x402.payment.status"] === "payment-completed"` + `receipts[].success === true` | [§1.7.5](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#175-ap2-and-a2a-x402) (reported as AP2 crypto path) |
41
41
 
42
42
  **The linking mechanism is the same across all six:** the session `context_id` (16-byte anchor, equal to the W3C OTel trace-id by default) travels with the outbound payment request; via `X-atrib-Context` HTTP header for protocols that don't expose a free-form metadata field, or via `params._meta.atrib` for any payment protocol running over MCP transport. When the merchant's side sees the payment-completed signal, atrib writes a transaction record with that `context_id`, and the attribution graph can reconstruct the full chain from contributing tool calls → transaction → settlement.
@@ -97,9 +97,29 @@ HTTP/1.1 200 OK
97
97
  Payment-Receipt: eyJzdGF0dXMiOiJzdWNjZXNzIn0
98
98
  ```
99
99
 
100
- #### AP2: Google Agent Payments Protocol (v0.1)
100
+ #### AP2: Google Agentic Payment Protocol (v0.2)
101
101
 
102
- Detected from an A2A `Message` containing a `DataPart` whose `data` object has the literal key `"ap2.mandates.PaymentMandate"`. AP2 v0.1 does **not** use W3C Verifiable Credentials despite earlier drafts assuming it would (a legacy VC fallback is kept for research forks).
102
+ Detected from successful AP2 receipts. Current AP2 uses Checkout and Payment Mandates for authorization, then returns signed Checkout Receipts and Payment Receipts when a verifier accepts or rejects the mandate. atrib treats the successful receipt as the transaction close signal.
103
+
104
+ AP2 receipt JWT signatures remain verifier evidence. They are not counted as transaction `signers[]` unless an AP2 participant also signs the atrib transaction record bytes. See [D098](https://github.com/creatornader/atrib/blob/main/DECISIONS.md#d098-ap2-receipts-stay-external-evidence-for-cross-attestation).
105
+
106
+ Decoded receipt objects are detected when they carry `status: "Success"` and the required AP2 fields. Signed receipt JWTs are detected in AP2 sample result envelopes when the envelope has `status: "success"` plus `payment_receipt` or `checkout_receipt`.
107
+
108
+ For Path 2 fallback transaction records, AP2 detection also returns a protocol-specific `contentId` when stable identity fields are visible. Decoded Payment Receipts take priority, then compact payment receipt JWT hashes, decoded Checkout Receipts, compact checkout receipt JWT hashes, legacy AP2 PaymentMandates, and a2a-x402 transaction receipts. If none are present, middleware falls back to the MCP server URL plus `"checkout"` like before.
109
+
110
+ ```json
111
+ {
112
+ "status": "success",
113
+ "order_id": "order_123",
114
+ "checkout_receipt": "eyJhbGciOiJFUzI1NiJ9.eyJzdGF0dXMiOiJTdWNjZXNzIn0.signature"
115
+ }
116
+ ```
117
+
118
+ Mandate-only payloads are not detected, including `vct: "mandate.payment.1"` and `vct: "mandate.checkout.1"`. Mandates authorize a future action; they do not prove the verifier accepted it.
119
+
120
+ Verifier-side AP2 / Verifiable Intent checks live in `@atrib/verify`, not this detector. Use `verifyAp2ViEvidence()` for decoded receipts or `verifyAp2ViEvidenceAsync()` for compact signed receipt JWTs when a merchant or auditor needs to validate AP2 receipt references, VI SD-JWT signatures, `sd_hash` links, disclosure digests, delegated agent keys, and checkout/payment binding after detection.
121
+
122
+ The older AP2 v0.1 DataPart shape remains supported as a compatibility fallback:
103
123
 
104
124
  ```json
105
125
  {
@@ -119,11 +139,11 @@ Detected from an A2A `Message` containing a `DataPart` whose `data` object has t
119
139
  }
120
140
  ```
121
141
 
122
- `IntentMandate` and `CartMandate` are **not** detected; they are upstream funnel events, not transaction events. Only `PaymentMandate` closes the chain.
142
+ `IntentMandate` and `CartMandate` are still not detected; they are upstream funnel events, not transaction events.
123
143
 
124
144
  #### a2a-x402: Google AP2 crypto path
125
145
 
126
- Detected from an A2A `task` whose `status.message.metadata` contains `"x402.payment.status": "payment-completed"` **and** at least one entry in `"x402.payment.receipts"` with `success: true`. A `payment-completed` status with no successful receipt does NOT detect (a failed receipt is not a transaction). Reported as `protocol: 'AP2'` because a2a-x402 is the AP2 crypto path, not a separate protocol.
146
+ Detected from an A2A `task` whose `status.message.metadata` contains `"x402.payment.status": "payment-completed"` **and** at least one entry in `"x402.payment.receipts"` with `success: true`. A `payment-completed` status with no successful receipt does NOT detect (a failed receipt is not a transaction). Reported as `protocol: 'AP2'` because a2a-x402 is the AP2 crypto path, not a separate protocol. When a successful receipt exposes a transaction id, Path 2 uses that receipt identity for the AP2 `contentId`; otherwise it uses the generic AP2 fallback.
127
147
 
128
148
  ```json
129
149
  {
@@ -16,17 +16,23 @@ export interface CloudflareAgentLike {
16
16
  client: unknown;
17
17
  url?: URL | string;
18
18
  }>;
19
+ listServers?: () => Array<{
20
+ id: string;
21
+ name: string;
22
+ server_url?: string | null;
23
+ }>;
19
24
  };
20
25
  }
21
26
  /** Options for `attributeCloudflareAgentMcp`. */
22
27
  export interface AttributeCloudflareAgentMcpOptions {
23
- /** The atrib interceptor that should observe tool calls on this agent. */
28
+ /** The atrib interceptor that should observe MCP client calls on this agent. */
24
29
  interceptor: ToolCallInterceptor;
25
30
  /**
26
- * Optional override map of server name → canonical serverUrl. If a server
27
- * name appears here, the helper passes that URL as the `serverUrl` option
28
- * to `wrapMcpClient`. If a server name is missing from this map, the helper
29
- * derives serverUrl from the connection's own `url.origin`.
31
+ * Optional override map of server id or server name → canonical serverUrl.
32
+ * If a key appears here, the helper passes that URL as the `serverUrl`
33
+ * option to `wrapMcpClient`. If a key is missing from this map, the helper
34
+ * derives serverUrl from Cloudflare's stored server row, then from the
35
+ * connection's own `url`.
30
36
  *
31
37
  * Override when the upstream URL the agent connects to is not the canonical
32
38
  * URL you want to record in attribution records (e.g. you're hitting a
@@ -35,9 +41,9 @@ export interface AttributeCloudflareAgentMcpOptions {
35
41
  serverUrls?: Record<string, string>;
36
42
  }
37
43
  /**
38
- * Wrap every currently-connected MCP client on a Cloudflare Agent with atrib
39
- * attribution. Returns the number of connections wrapped (excluding ones that
40
- * were already wrapped). Idempotent. safe to call multiple times.
44
+ * Wrap every currently-connected MCP client on a Cloudflare Agent with atrib's
45
+ * agent interceptor. Returns the number of connections wrapped (excluding ones
46
+ * that were already wrapped). Idempotent. safe to call multiple times.
41
47
  *
42
48
  * Call this in `onStart()` after your `addMcpServer()` calls. If you add more
43
49
  * MCP servers later (in a message handler, after OAuth, etc.), call again.
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare-agent.d.ts","sourceRoot":"","sources":["../../src/adapters/cloudflare-agent.ts"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAkB3D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE;QACH,cAAc,EAAE,MAAM,CACpB,MAAM,EACN;YACE,MAAM,EAAE,OAAO,CAAA;YACf,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;SACnB,CACF,CAAA;KACF,CAAA;CACF;AAED,iDAAiD;AACjD,MAAM,WAAW,kCAAkC;IACjD,0EAA0E;IAC1E,WAAW,EAAE,mBAAmB,CAAA;IAEhC;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,kCAAkC,GAC1C,MAAM,CA4DR"}
1
+ {"version":3,"file":"cloudflare-agent.d.ts","sourceRoot":"","sources":["../../src/adapters/cloudflare-agent.ts"],"names":[],"mappings":"AAkEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAkB3D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE;QACH,cAAc,EAAE,MAAM,CACpB,MAAM,EACN;YACE,MAAM,EAAE,OAAO,CAAA;YACf,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;SACnB,CACF,CAAA;QACD,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC;YACxB,EAAE,EAAE,MAAM,CAAA;YACV,IAAI,EAAE,MAAM,CAAA;YACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAC3B,CAAC,CAAA;KACH,CAAA;CACF;AAED,iDAAiD;AACjD,MAAM,WAAW,kCAAkC;IACjD,gFAAgF;IAChF,WAAW,EAAE,mBAAmB,CAAA;IAEhC;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,kCAAkC,GAC1C,MAAM,CAsFR"}
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Adapter: attribute MCP tool calls flowing through a Cloudflare Agent.
3
+ * Adapter: route Cloudflare Agent MCP client calls through atrib's agent
4
+ * interceptor.
4
5
  *
5
6
  * Cloudflare's `agents` package exposes two MCP integration surfaces:
6
7
  *
@@ -14,15 +15,19 @@
14
15
  * 2. **Client-side `Agent.addMcpServer`**. your `Agent` (or `AIChatAgent`)
15
16
  * connects to one or more upstream MCP servers via `this.addMcpServer(name, url)`.
16
17
  * Cloudflare's `MCPClientManager` constructs an `@modelcontextprotocol/sdk`
17
- * Client per upstream and stores it on `agent.mcp.mcpConnections[name].client`.
18
+ * Client per upstream and stores it on `agent.mcp.mcpConnections[id].client`.
18
19
  * Tool invocations flow through `MCPClientManager.callTool()` which
19
- * delegates straight to `mcpConnections[serverId].client.callTool(...)`
20
- * (verified against `agents@0.9.0` `dist/client-BwgM3cRz.js` line 1444).
20
+ * delegates straight to `mcpConnections[serverId].client.callTool(...)`.
21
+ * Verified against `agents@0.13.3`.
21
22
  *
22
23
  * This file is the helper for surface (2). It walks `agent.mcp.mcpConnections`
23
24
  * after the agent has finished registering its upstream MCP servers and
24
25
  * replaces each connection's `client` field with one wrapped by `wrapMcpClient`.
25
- * Subsequent tool calls go through atrib's interceptor lifecycle.
26
+ * Subsequent tool calls carry atrib/W3C context, consume upstream attribution
27
+ * tokens, record unsigned gap nodes, and emit agent-side fallback transaction
28
+ * records when a response matches a known commerce close signal. Ordinary
29
+ * tool_call records still come from the upstream MCP server when it is wrapped
30
+ * with `@atrib/mcp`.
26
31
  *
27
32
  * Usage:
28
33
  *
@@ -53,7 +58,8 @@
53
58
  * Per spec §5.8 (degradation contract), if any single connection fails to wrap
54
59
  * (missing `client` field, unexpected shape), the helper logs a warning with
55
60
  * the `atrib:` prefix and skips it without throwing. The agent's tool calls
56
- * continue to work. they just won't be attributed for that connection.
61
+ * continue to work. they just won't carry agent-side atrib context or fallback
62
+ * transaction detection for that connection.
57
63
  */
58
64
  import { wrapMcpClient } from './mcp-client.js';
59
65
  /** Runtime check that an unknown value structurally matches MinimalMcpClient. */
@@ -69,9 +75,9 @@ function isMinimalMcpClient(v) {
69
75
  */
70
76
  const ATRIB_WRAPPED = Symbol.for('atrib.cloudflare.wrapped');
71
77
  /**
72
- * Wrap every currently-connected MCP client on a Cloudflare Agent with atrib
73
- * attribution. Returns the number of connections wrapped (excluding ones that
74
- * were already wrapped). Idempotent. safe to call multiple times.
78
+ * Wrap every currently-connected MCP client on a Cloudflare Agent with atrib's
79
+ * agent interceptor. Returns the number of connections wrapped (excluding ones
80
+ * that were already wrapped). Idempotent. safe to call multiple times.
75
81
  *
76
82
  * Call this in `onStart()` after your `addMcpServer()` calls. If you add more
77
83
  * MCP servers later (in a message handler, after OAuth, etc.), call again.
@@ -84,22 +90,44 @@ export function attributeCloudflareAgentMcp(agent, options) {
84
90
  return 0;
85
91
  }
86
92
  let wrapped = 0;
87
- for (const [name, conn] of Object.entries(connections)) {
93
+ const serversById = new Map();
94
+ try {
95
+ const servers = agent.mcp.listServers?.();
96
+ if (Array.isArray(servers)) {
97
+ for (const server of servers) {
98
+ if (typeof server.id === 'string') {
99
+ serversById.set(server.id, {
100
+ name: server.name,
101
+ server_url: server.server_url,
102
+ });
103
+ }
104
+ }
105
+ }
106
+ }
107
+ catch (err) {
108
+ console.warn('atrib: failed to read Cloudflare MCP server list, falling back to connection URLs', err);
109
+ }
110
+ for (const [connectionId, conn] of Object.entries(connections)) {
88
111
  try {
89
112
  if (!conn || !isMinimalMcpClient(conn.client)) {
90
- console.warn(`atrib: connection '${name}' has no client field, skipping`);
113
+ console.warn(`atrib: connection '${connectionId}' has no client field, skipping`);
91
114
  continue;
92
115
  }
93
116
  // Skip already-wrapped clients (idempotency)
94
117
  if (conn.client[ATRIB_WRAPPED] === true) {
95
118
  continue;
96
119
  }
97
- // Derive serverUrl: explicit override > connection.url.origin > undefined
98
- let serverUrl = options.serverUrls?.[name];
120
+ // Derive serverUrl:
121
+ // explicit override by id > explicit override by server name >
122
+ // Cloudflare stored server row > connection URL > undefined.
123
+ const server = serversById.get(connectionId);
124
+ let serverUrl = options.serverUrls?.[connectionId] ??
125
+ (server?.name ? options.serverUrls?.[server.name] : undefined) ??
126
+ (typeof server?.server_url === 'string' ? server.server_url : undefined);
99
127
  if (!serverUrl && conn.url) {
100
128
  try {
101
129
  const u = conn.url instanceof URL ? conn.url : new URL(conn.url);
102
- serverUrl = u.origin;
130
+ serverUrl = u.href;
103
131
  }
104
132
  catch {
105
133
  // URL parse failed; let wrapMcpClient fall back to no serverUrl
@@ -116,7 +144,7 @@ export function attributeCloudflareAgentMcp(agent, options) {
116
144
  catch (err) {
117
145
  // §5.8 degradation contract: never let a single bad connection break
118
146
  // the whole agent. Log and continue.
119
- console.warn(`atrib: failed to wrap MCP connection '${name}', skipping:`, err);
147
+ console.warn(`atrib: failed to wrap MCP connection '${connectionId}', skipping:`, err);
120
148
  }
121
149
  }
122
150
  return wrapped;
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare-agent.js","sourceRoot":"","sources":["../../src/adapters/cloudflare-agent.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,EAAE,aAAa,EAAyB,MAAM,iBAAiB,CAAA;AAGtE,iFAAiF;AACjF,SAAS,kBAAkB,CAAC,CAAU;IACpC,OAAO,CACL,CAAC,IAAI,IAAI;QACT,OAAO,CAAC,KAAK,QAAQ;QACrB,OAAQ,CAA4B,CAAC,QAAQ,KAAK,UAAU,CAC7D,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AA2C5D;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA0B,EAC1B,OAA2C;IAE3C,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,cAAc,CAAA;IAC7C,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CACV,oFAAoF;YAClF,mEAAmE,CACtE,CAAA;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,iCAAiC,CAAC,CAAA;gBACzE,SAAQ;YACV,CAAC;YAED,6CAA6C;YAC7C,IAAK,IAAI,CAAC,MAA6C,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChF,SAAQ;YACV,CAAC;YAED,0EAA0E;YAC1E,IAAI,SAAS,GAAuB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAA;YAC9D,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBAChE,SAAS,GAAG,CAAC,CAAC,MAAM,CAAA;gBACtB,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;YACH,CAAC;YAED,MAAM,aAAa,GAAG,aAAa,CACjC,IAAI,CAAC,MAAM,EACX,OAAO,CAAC,WAAW,EACnB,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAC/B,CAMA;YAAC,aAAoD,CAAC,aAAa,CAAC,GAAG,IAAI,CAAA;YAE5E,qEAAqE;YACrE,oEAAoE;YACpE,iDAAiD;YACjD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAA;YAC3B,OAAO,EAAE,CAAA;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,qCAAqC;YACrC,OAAO,CAAC,IAAI,CAAC,yCAAyC,IAAI,cAAc,EAAE,GAAG,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"cloudflare-agent.js","sourceRoot":"","sources":["../../src/adapters/cloudflare-agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAI5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACnC;;;OAGG;IACH,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjD,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;QAC5C,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,iFAAiF;QACjF,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,GACA,IAAI,CAAA;IACP,sDAAsD;IACtD,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAA;IACtE,yDAAyD;IACzD,WAAW,IAAI,OAAO,EAAE,CAAA;IACxB,qCAAqC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE,iBAAsB,GAAG,mBAAmB,CAmN1E"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAI5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACnC;;;OAGG;IACH,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjD,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;QAC5C,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,iFAAiF;QACjF,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,GACA,IAAI,CAAA;IACP,sDAAsD;IACtD,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAA;IACtE,yDAAyD;IACzD,WAAW,IAAI,OAAO,EAAE,CAAA;IACxB,qCAAqC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE,iBAAsB,GAAG,mBAAmB,CAqN1E"}
@@ -5,7 +5,7 @@
5
5
  * Wraps an agent or MCP client to automatically manage attribution
6
6
  * context across tool calls. Zero ongoing surface area.
7
7
  */
8
- import { base64urlDecode, base64urlEncode, signRecord, getPublicKey, computeContentId, hexEncode, genesisChainRoot, createSubmissionQueue, } from '@atrib/mcp';
8
+ import { base64urlDecode, base64urlEncode, signTransactionRecord, getPublicKey, computeContentId, hexEncode, genesisChainRoot, createSubmissionQueue, } from '@atrib/mcp';
9
9
  import { createSession, buildOutboundMeta, accumulateInboundContext } from './session.js';
10
10
  import { detectTransaction } from './transaction.js';
11
11
  import { initializeSessionPolicy } from './policy.js';
@@ -153,9 +153,11 @@ export function atrib(options = {}) {
153
153
  addRuntimeWarning('transaction_detected_by_heuristic');
154
154
  }
155
155
  // Emit transaction record asynchronously
156
- const emission = emitTransactionRecord(toolName, detection, callOptions?.serverUrl, session, privateKey, publicKeyReady, () => publicKeyB64, queue).catch((err) => {
156
+ const emission = emitTransactionRecord(toolName, detection, callOptions?.serverUrl, session, privateKey, publicKeyReady, () => publicKeyB64, queue)
157
+ .catch((err) => {
157
158
  console.warn('atrib: transaction emission failed', err);
158
- }).finally(() => {
159
+ })
160
+ .finally(() => {
159
161
  const idx = pendingEmissions.indexOf(emission);
160
162
  if (idx !== -1)
161
163
  pendingEmissions.splice(idx, 1);
@@ -195,6 +197,7 @@ export function atrib(options = {}) {
195
197
  * Derives content_id per protocol:
196
198
  * - ACP/UCP: checkout URL from response, tool_name = "checkout"
197
199
  * - x402/MPP: HTTP endpoint URL, tool_name = "checkout"
200
+ * - AP2: protocol-specific receipt or mandate identity when present
198
201
  * - Heuristic: MCP server URL of tool, actual tool_name
199
202
  */
200
203
  async function emitTransactionRecord(toolName, detection, callServerUrl, session, privateKey, publicKeyReady, publicKeyB64Getter, queue) {
@@ -204,32 +207,34 @@ async function emitTransactionRecord(toolName, detection, callServerUrl, session
204
207
  throw new Error('public key not ready');
205
208
  }
206
209
  // Derive content_id per protocol (§5.4.5)
207
- let contentIdServerUrl;
208
- let contentIdToolName;
209
- switch (detection.protocol) {
210
- case 'ACP':
211
- case 'UCP':
212
- contentIdServerUrl = detection.checkoutUrl ?? callServerUrl ?? '';
213
- contentIdToolName = 'checkout';
214
- break;
215
- case 'x402':
216
- case 'MPP':
217
- // Use the HTTP endpoint URL that returned Payment-Receipt
218
- contentIdServerUrl = callServerUrl ?? '';
219
- contentIdToolName = 'checkout';
220
- break;
221
- case 'AP2':
222
- contentIdServerUrl = callServerUrl ?? '';
223
- contentIdToolName = 'checkout';
224
- break;
225
- case 'heuristic':
226
- default:
227
- // Heuristic: weakest case, use the MCP server URL of the tool that was called
228
- contentIdServerUrl = callServerUrl ?? '';
229
- contentIdToolName = toolName;
230
- break;
210
+ let contentIdServerUrl = '';
211
+ let contentIdToolName = '';
212
+ if (!detection.contentId) {
213
+ switch (detection.protocol) {
214
+ case 'ACP':
215
+ case 'UCP':
216
+ contentIdServerUrl = detection.checkoutUrl ?? callServerUrl ?? '';
217
+ contentIdToolName = 'checkout';
218
+ break;
219
+ case 'x402':
220
+ case 'MPP':
221
+ // Use the HTTP endpoint URL that returned Payment-Receipt
222
+ contentIdServerUrl = callServerUrl ?? '';
223
+ contentIdToolName = 'checkout';
224
+ break;
225
+ case 'AP2':
226
+ contentIdServerUrl = callServerUrl ?? '';
227
+ contentIdToolName = 'checkout';
228
+ break;
229
+ case 'heuristic':
230
+ default:
231
+ // Heuristic: weakest case, use the MCP server URL of the tool that was called
232
+ contentIdServerUrl = callServerUrl ?? '';
233
+ contentIdToolName = toolName;
234
+ break;
235
+ }
231
236
  }
232
- const contentId = computeContentId(contentIdServerUrl, contentIdToolName);
237
+ const contentId = detection.contentId ?? computeContentId(contentIdServerUrl, contentIdToolName);
233
238
  // §1.2.3: chain_root for genesis records
234
239
  const chainRoot = session.latestContext
235
240
  ? `sha256:${hexEncode(session.latestContext.recordHash)}`
@@ -245,7 +250,7 @@ async function emitTransactionRecord(toolName, detection, callServerUrl, session
245
250
  signature: '',
246
251
  session_token: session.sessionToken,
247
252
  };
248
- const signed = await signRecord(record, privateKey);
253
+ const signed = await signTransactionRecord(record, privateKey);
249
254
  // Submit immediately. transaction records are the closing anchor
250
255
  queue.submit(signed, 'high');
251
256
  }
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,3 @@
1
- /**
2
- * Transaction detection (§5.4.5).
3
- *
4
- * Detects transaction events from response shapes for ACP, UCP, x402, MPP,
5
- * AP2, and heuristic tool name matching.
6
- *
7
- * Protocol shape sources (verified 2026-04-06):
8
- * - ACP: github.com/agentic-commerce-protocol/agentic-commerce-protocol
9
- * rfcs/rfc.agentic_checkout.md
10
- * - UCP: github.com/universal-commerce-protocol/ucp
11
- * docs/specification/checkout-rest.md (version 2026-01-11)
12
- * - AP2: github.com/google-agentic-commerce/ap2 (v0.1). A2A Message with a
13
- * DataPart containing the key `ap2.mandates.PaymentMandate`. AP2 does
14
- * NOT currently use W3C Verifiable Credentials despite earlier drafts
15
- * of this code and the atrib spec assuming it would.
16
- * - a2a-x402: github.com/google-agentic-commerce/a2a-x402. extension that
17
- * layers x402 crypto payments over A2A. Detection signal is
18
- * `status.message.metadata["x402.payment.status"] === "payment-completed"`
19
- * with at least one `success: true` entry in
20
- * `status.message.metadata["x402.payment.receipts"]`. Both shapes are
21
- * reported as `protocol: 'AP2'` since a2a-x402 IS the AP2 crypto path.
22
- * - x402: github.com/coinbase/x402. response header `PAYMENT-RESPONSE` (v2)
23
- * or `X-PAYMENT-RESPONSE` (v1 legacy). Value is base64-encoded JSON
24
- * with shape { success: bool, transaction, network, payer, requirements }.
25
- * - MPP: IETF draft-ryan-httpauth-payment-01 ("The 'Payment' HTTP Authentication
26
- * Scheme"), per Section 5.3. Response header is `Payment-Receipt` on a
27
- * 200 success after the client retries with Authorization: Payment.
28
- * Value is base64url-nopad JSON with required field { status: "success",
29
- * method, timestamp, reference }.
30
- *
31
- * x402 and MPP are DIFFERENT protocols that use DIFFERENT headers. Earlier
32
- * versions of this code conflated them on a fictitious shared `Payment-Receipt`
33
- * header. see DECISIONS.md D016 for the verification trail.
34
- */
35
1
  export type TransactionProtocol = 'ACP' | 'UCP' | 'x402' | 'MPP' | 'AP2' | 'heuristic';
36
2
  export interface TransactionDetection {
37
3
  detected: boolean;
@@ -40,10 +6,17 @@ export interface TransactionDetection {
40
6
  * For Path 2 content_id derivation (§5.4.5):
41
7
  * - ACP/UCP: the order permalink URL from the response (if present)
42
8
  * - x402/MPP: not available here (caller must use HTTP endpoint URL)
43
- * - AP2: not available here (caller uses MCP server URL)
9
+ * - AP2: usually null because AP2 identity is carried in `contentId`
44
10
  * - Heuristic: not available here (caller uses MCP server URL)
45
11
  */
46
12
  checkoutUrl: string | null;
13
+ /**
14
+ * Optional protocol-specific content_id. AP2 can expose stable receipt or
15
+ * mandate identifiers directly in the response; the detector hashes the
16
+ * canonical identity ladder and returns the final content_id here. Null
17
+ * means the caller should keep the generic §5.4.5 fallback.
18
+ */
19
+ contentId: string | null;
47
20
  }
48
21
  /**
49
22
  * Detect whether a tool call response contains a transaction signal (§5.4.5).
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAA;AAEtF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACpC;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAWD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC3C,oBAAoB,CAkItB"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AA0CA,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAA;AAEtF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACpC;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAgOD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC3C,oBAAoB,CAiJtB"}
@@ -1,4 +1,42 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Transaction detection (§5.4.5).
4
+ *
5
+ * Detects transaction events from response shapes for ACP, UCP, x402, MPP,
6
+ * AP2, and heuristic tool name matching.
7
+ *
8
+ * Protocol shape sources (verified 2026-05-27):
9
+ * - ACP: github.com/agentic-commerce-protocol/agentic-commerce-protocol
10
+ * rfcs/rfc.agentic_checkout.md
11
+ * - UCP: github.com/universal-commerce-protocol/ucp
12
+ * docs/specification/checkout-rest.md (version 2026-01-11)
13
+ * - AP2: github.com/google-agentic-commerce/AP2 (v0.2). Current AP2 uses
14
+ * SD-JWT Mandates for authorization and signed CheckoutReceipt /
15
+ * PaymentReceipt JWTs for acceptance. Detection fires on successful
16
+ * receipt shapes, not mandate-only payloads. The legacy v0.1 A2A
17
+ * DataPart key `ap2.mandates.PaymentMandate` remains supported as a
18
+ * compatibility fallback.
19
+ * - a2a-x402: github.com/google-agentic-commerce/a2a-x402. extension that
20
+ * layers x402 crypto payments over A2A. Detection signal is
21
+ * `status.message.metadata["x402.payment.status"] === "payment-completed"`
22
+ * with at least one `success: true` entry in
23
+ * `status.message.metadata["x402.payment.receipts"]`. Both shapes are
24
+ * reported as `protocol: 'AP2'` since a2a-x402 is the AP2 crypto path.
25
+ * - x402: github.com/coinbase/x402. response header `PAYMENT-RESPONSE` (v2)
26
+ * or `X-PAYMENT-RESPONSE` (v1 legacy). Value is base64-encoded JSON
27
+ * with shape { success: bool, transaction, network, payer, requirements }.
28
+ * - MPP: IETF draft-ryan-httpauth-payment-01 ("The 'Payment' HTTP Authentication
29
+ * Scheme"), per Section 5.3. Response header is `Payment-Receipt` on a
30
+ * 200 success after the client retries with Authorization: Payment.
31
+ * Value is base64url-nopad JSON with required field { status: "success",
32
+ * method, timestamp, reference }.
33
+ *
34
+ * x402 and MPP are different protocols that use different headers. Earlier
35
+ * versions of this code conflated them on a fictitious shared `Payment-Receipt`
36
+ * header. see DECISIONS.md D016 for the verification trail.
37
+ */
38
+ import canonicalize from 'canonicalize';
39
+ import { hexEncode, sha256 } from '@atrib/mcp';
2
40
  const HEURISTIC_KEYWORDS = [
3
41
  'create_order',
4
42
  'complete_checkout',
@@ -7,6 +45,175 @@ const HEURISTIC_KEYWORDS = [
7
45
  'purchase',
8
46
  'checkout',
9
47
  ];
48
+ const AP2_PAYMENT_RECEIPT_KEYS = ['ap2.PaymentReceipt', 'payment_receipt'];
49
+ const AP2_CHECKOUT_RECEIPT_KEYS = ['ap2.CheckoutReceipt', 'checkout_receipt'];
50
+ const AP2_RECEIPT_SCAN_LIMIT = 80;
51
+ const textEncoder = new TextEncoder();
52
+ function isRecord(value) {
53
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
54
+ }
55
+ function isString(value) {
56
+ return typeof value === 'string';
57
+ }
58
+ function isNonEmptyString(value) {
59
+ return typeof value === 'string' && value.length > 0;
60
+ }
61
+ function detection(protocol, checkoutUrl = null, contentId = null) {
62
+ return { detected: true, protocol, checkoutUrl, contentId };
63
+ }
64
+ function noDetection() {
65
+ return { detected: false, protocol: null, checkoutUrl: null, contentId: null };
66
+ }
67
+ function sha256Utf8(value) {
68
+ return `sha256:${hexEncode(sha256(textEncoder.encode(value)))}`;
69
+ }
70
+ function ap2ContentId(source, fields) {
71
+ const canonical = canonicalize({
72
+ protocol: 'AP2',
73
+ version: 1,
74
+ source,
75
+ fields,
76
+ });
77
+ if (!canonical)
78
+ return null;
79
+ return sha256Utf8(canonical);
80
+ }
81
+ function ap2ObjectHash(value) {
82
+ const canonical = canonicalize(value);
83
+ if (!canonical)
84
+ return null;
85
+ return sha256Utf8(canonical);
86
+ }
87
+ function hasAp2SuccessStatus(record) {
88
+ return record['status'] === 'Success' || record['status'] === 'success';
89
+ }
90
+ function looksLikeCompactJwt(value) {
91
+ return isNonEmptyString(value) && value.split('.').length === 3;
92
+ }
93
+ function isAp2PaymentReceiptObject(value) {
94
+ if (!isRecord(value))
95
+ return false;
96
+ return (value['status'] === 'Success' &&
97
+ isString(value['iss']) &&
98
+ typeof value['iat'] === 'number' &&
99
+ isNonEmptyString(value['reference']) &&
100
+ isNonEmptyString(value['payment_id']) &&
101
+ isNonEmptyString(value['psp_confirmation_id']) &&
102
+ isNonEmptyString(value['network_confirmation_id']));
103
+ }
104
+ function isAp2CheckoutReceiptObject(value) {
105
+ if (!isRecord(value))
106
+ return false;
107
+ return (value['status'] === 'Success' &&
108
+ isString(value['iss']) &&
109
+ typeof value['iat'] === 'number' &&
110
+ isNonEmptyString(value['reference']) &&
111
+ isNonEmptyString(value['order_id']));
112
+ }
113
+ function ap2PaymentReceiptCandidate(value) {
114
+ if (!isAp2PaymentReceiptObject(value) || !isRecord(value))
115
+ return null;
116
+ const contentId = ap2ContentId('payment_receipt', {
117
+ iss: value['iss'],
118
+ reference: value['reference'],
119
+ payment_id: value['payment_id'],
120
+ psp_confirmation_id: value['psp_confirmation_id'],
121
+ network_confirmation_id: value['network_confirmation_id'],
122
+ });
123
+ return contentId ? { contentId, priority: 10 } : null;
124
+ }
125
+ function ap2CheckoutReceiptCandidate(value) {
126
+ if (!isAp2CheckoutReceiptObject(value) || !isRecord(value))
127
+ return null;
128
+ const contentId = ap2ContentId('checkout_receipt', {
129
+ iss: value['iss'],
130
+ reference: value['reference'],
131
+ order_id: value['order_id'],
132
+ });
133
+ return contentId ? { contentId, priority: 30 } : null;
134
+ }
135
+ function ap2ReceiptJwtCandidate(value, source) {
136
+ if (!looksLikeCompactJwt(value))
137
+ return null;
138
+ const contentId = ap2ContentId(source, { jwt_hash: sha256Utf8(value) });
139
+ if (!contentId)
140
+ return null;
141
+ return { contentId, priority: source === 'payment_receipt_jwt' ? 20 : 40 };
142
+ }
143
+ function ap2ReceiptFieldCandidate(record, keys, objectCandidate, jwtSource) {
144
+ for (const key of keys) {
145
+ const value = record[key];
146
+ const object = objectCandidate(value);
147
+ if (object)
148
+ return object;
149
+ if (hasAp2SuccessStatus(record)) {
150
+ const jwt = ap2ReceiptJwtCandidate(value, jwtSource);
151
+ if (jwt)
152
+ return jwt;
153
+ }
154
+ }
155
+ return null;
156
+ }
157
+ function chooseBetterAp2Candidate(current, candidate) {
158
+ if (!candidate)
159
+ return current;
160
+ if (!current || candidate.priority < current.priority)
161
+ return candidate;
162
+ return current;
163
+ }
164
+ function findAp2V02ReceiptContentId(value) {
165
+ const queue = [value];
166
+ const seen = new Set();
167
+ let scanned = 0;
168
+ let best = null;
169
+ while (queue.length > 0 && scanned < AP2_RECEIPT_SCAN_LIMIT) {
170
+ const current = queue.shift();
171
+ scanned += 1;
172
+ if (Array.isArray(current)) {
173
+ for (const item of current)
174
+ queue.push(item);
175
+ continue;
176
+ }
177
+ if (!isRecord(current))
178
+ continue;
179
+ if (seen.has(current))
180
+ continue;
181
+ seen.add(current);
182
+ best = chooseBetterAp2Candidate(best, ap2PaymentReceiptCandidate(current));
183
+ best = chooseBetterAp2Candidate(best, ap2CheckoutReceiptCandidate(current));
184
+ best = chooseBetterAp2Candidate(best, ap2ReceiptFieldCandidate(current, AP2_PAYMENT_RECEIPT_KEYS, ap2PaymentReceiptCandidate, 'payment_receipt_jwt'));
185
+ best = chooseBetterAp2Candidate(best, ap2ReceiptFieldCandidate(current, AP2_CHECKOUT_RECEIPT_KEYS, ap2CheckoutReceiptCandidate, 'checkout_receipt_jwt'));
186
+ for (const nested of Object.values(current)) {
187
+ if (isRecord(nested) || Array.isArray(nested))
188
+ queue.push(nested);
189
+ }
190
+ }
191
+ return best?.contentId ?? null;
192
+ }
193
+ function legacyAp2MandateContentId(value) {
194
+ const mandateHash = ap2ObjectHash(value);
195
+ if (!mandateHash)
196
+ return null;
197
+ return ap2ContentId('legacy_payment_mandate', { mandate_hash: mandateHash });
198
+ }
199
+ function a2aX402ContentId(receipts) {
200
+ if (!Array.isArray(receipts))
201
+ return null;
202
+ for (const receipt of receipts) {
203
+ if (!isRecord(receipt) || receipt['success'] !== true)
204
+ continue;
205
+ const transaction = receipt['transaction'];
206
+ if (!isNonEmptyString(transaction))
207
+ continue;
208
+ const fields = { transaction };
209
+ if (isNonEmptyString(receipt['network']))
210
+ fields['network'] = receipt['network'];
211
+ if (isNonEmptyString(receipt['payer']))
212
+ fields['payer'] = receipt['payer'];
213
+ return ap2ContentId('a2a_x402_receipt', fields);
214
+ }
215
+ return null;
216
+ }
10
217
  /**
11
218
  * Detect whether a tool call response contains a transaction signal (§5.4.5).
12
219
  */
@@ -24,14 +231,14 @@ export function detectTransaction(toolName, response, headers) {
24
231
  const ucpEnvelope = resp['ucp'];
25
232
  const isUcp = !!ucpEnvelope && typeof ucpEnvelope['version'] === 'string';
26
233
  const checkoutUrl = typeof order['permalink_url'] === 'string' ? order['permalink_url'] : null;
27
- return { detected: true, protocol: isUcp ? 'UCP' : 'ACP', checkoutUrl };
234
+ return detection(isUcp ? 'UCP' : 'ACP', checkoutUrl);
28
235
  }
29
236
  // ACP webhook event shapes (server → merchant): order_create / order_update.
30
237
  // { type: "order_create", data: { type: "order", checkout_session_id, permalink_url, status, refunds } }
31
238
  if (resp['type'] === 'order_create' || resp['type'] === 'order_update') {
32
239
  const data = resp['data'];
33
240
  const checkoutUrl = typeof data?.['permalink_url'] === 'string' ? data['permalink_url'] : null;
34
- return { detected: true, protocol: 'ACP', checkoutUrl };
241
+ return detection('ACP', checkoutUrl);
35
242
  }
36
243
  }
37
244
  // x402 and MPP: distinct protocols, distinct response headers.
@@ -50,14 +257,30 @@ export function detectTransaction(toolName, response, headers) {
50
257
  }
51
258
  // x402. accept v2 and v1 names
52
259
  if (lower['payment-response'] || lower['x-payment-response']) {
53
- return { detected: true, protocol: 'x402', checkoutUrl: null };
260
+ return detection('x402');
54
261
  }
55
262
  // MPP. IETF draft Payment-Receipt header
56
263
  if (lower['payment-receipt']) {
57
- return { detected: true, protocol: 'MPP', checkoutUrl: null };
264
+ return detection('MPP');
58
265
  }
59
266
  }
60
- // AP2 v0.1. PaymentMandate Message inside an A2A DataPart.
267
+ // AP2 v0.2. Successful CheckoutReceipt / PaymentReceipt is the close signal.
268
+ // Mandates authorize the action and are kept out of transaction detection.
269
+ // Sources:
270
+ // - docs/ap2/specification.md: Checkout/Payment Receipt returned on completion
271
+ // - code/sdk/schemas/ap2/payment_receipt.json
272
+ // - code/sdk/schemas/ap2/checkout_receipt.json
273
+ // Shapes:
274
+ // - { status: "success", payment_receipt: "<signed JWT>" }
275
+ // - { status: "success", checkout_receipt: "<signed JWT>" }
276
+ // - { parts: [{ kind: "data", data: { "ap2.PaymentReceipt": { status: "Success", ... } } }] }
277
+ if (resp) {
278
+ const ap2Content = findAp2V02ReceiptContentId(resp);
279
+ if (ap2Content) {
280
+ return detection('AP2', null, ap2Content);
281
+ }
282
+ }
283
+ // AP2 v0.1 compatibility. PaymentMandate Message inside an A2A DataPart.
61
284
  // Source: github.com/google-agentic-commerce/ap2 docs/specification.md
62
285
  // Shape: { ..., parts: [{ kind: "data", data: { "ap2.mandates.PaymentMandate": {...} } }, ...] }
63
286
  if (resp) {
@@ -69,7 +292,8 @@ export function detectTransaction(toolName, response, headers) {
69
292
  if (data &&
70
293
  typeof data === 'object' &&
71
294
  'ap2.mandates.PaymentMandate' in data) {
72
- return { detected: true, protocol: 'AP2', checkoutUrl: null };
295
+ const mandate = data['ap2.mandates.PaymentMandate'];
296
+ return detection('AP2', null, legacyAp2MandateContentId(mandate));
73
297
  }
74
298
  }
75
299
  }
@@ -85,11 +309,11 @@ export function detectTransaction(toolName, response, headers) {
85
309
  const metadata = statusMessage?.['metadata'];
86
310
  if (metadata && metadata['x402.payment.status'] === 'payment-completed') {
87
311
  const receipts = metadata['x402.payment.receipts'];
88
- if (Array.isArray(receipts) &&
89
- receipts.some((r) => r !== null &&
90
- typeof r === 'object' &&
91
- r['success'] === true)) {
92
- return { detected: true, protocol: 'AP2', checkoutUrl: null };
312
+ if (Array.isArray(receipts)) {
313
+ const accepted = receipts.some((r) => isRecord(r) && r['success'] === true);
314
+ if (accepted) {
315
+ return detection('AP2', null, a2aX402ContentId(receipts));
316
+ }
93
317
  }
94
318
  }
95
319
  }
@@ -110,14 +334,14 @@ export function detectTransaction(toolName, response, headers) {
110
334
  // so no credentialSubject check needed. For v1 string form: type is just
111
335
  // "VerifiableCredential" so we need credentialSubject to confirm it's a PaymentMandate.
112
336
  if (isVcArray || (isVcStringLegacy && subjectIsPaymentMandate)) {
113
- return { detected: true, protocol: 'AP2', checkoutUrl: null };
337
+ return detection('AP2', null, legacyAp2MandateContentId(resp));
114
338
  }
115
339
  }
116
340
  // Heuristic: tool name keywords (last resort)
117
341
  const lowerName = toolName.toLowerCase();
118
342
  if (HEURISTIC_KEYWORDS.some((k) => lowerName.includes(k))) {
119
- return { detected: true, protocol: 'heuristic', checkoutUrl: null };
343
+ return detection('heuristic');
120
344
  }
121
- return { detected: false, protocol: null, checkoutUrl: null };
345
+ return noDetection();
122
346
  }
123
347
  //# sourceMappingURL=transaction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atrib/agent",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -33,13 +33,13 @@
33
33
  "@noble/ed25519": "^3.1.0",
34
34
  "@noble/hashes": "^2.2.0",
35
35
  "canonicalize": "^3.0.0",
36
- "@atrib/mcp": "0.11.1",
37
- "@atrib/verify": "0.3.6"
36
+ "@atrib/mcp": "0.13.0",
37
+ "@atrib/verify": "0.4.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@types/node": "^25.8.0",
40
+ "@types/node": "^25.9.1",
41
41
  "typescript": "^6.0.3",
42
- "vitest": "^4.1.6"
42
+ "vitest": "^4.1.7"
43
43
  },
44
44
  "repository": {
45
45
  "type": "git",