@seedhape/x402-merchant-sdk 0.2.1 → 0.3.1
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 +106 -13
- package/dist/ap2.d.ts +23 -0
- package/dist/ap2.d.ts.map +1 -0
- package/dist/ap2.js +36 -0
- package/dist/ap2.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +25 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +69 -0
- package/dist/mcp.js.map +1 -0
- package/dist/middleware.d.ts +45 -20
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +149 -8
- package/dist/middleware.js.map +1 -1
- package/package.json +44 -8
package/README.md
CHANGED
|
@@ -12,22 +12,27 @@ npm install @seedhape/x402-merchant-sdk
|
|
|
12
12
|
|
|
13
13
|
```ts
|
|
14
14
|
import express from "express";
|
|
15
|
-
import {
|
|
15
|
+
import { base, expressPaywall, merchantConfig } from "@seedhape/x402-merchant-sdk";
|
|
16
16
|
|
|
17
17
|
const app = express();
|
|
18
18
|
|
|
19
|
-
app.use(expressPaywall({
|
|
20
|
-
...BASE_MAINNET,
|
|
19
|
+
app.use(expressPaywall(merchantConfig(base, {
|
|
21
20
|
payTo: "0xYourBaseMerchantWallet",
|
|
22
21
|
paymentMethods: ["eip3009", "erc7710"],
|
|
23
22
|
price: ({ path }) => path === "/weather"
|
|
24
|
-
? { amount: 50_000n, ...
|
|
23
|
+
? { amount: 50_000n, ...base }
|
|
25
24
|
: null,
|
|
26
25
|
free: ["/health", "/docs/*"],
|
|
27
26
|
facilitator: { url: process.env.FACILITATOR_URL! },
|
|
28
|
-
|
|
27
|
+
route: {
|
|
28
|
+
name: "Weather API",
|
|
29
|
+
description: "Current weather data",
|
|
30
|
+
category: "weather",
|
|
31
|
+
inputSchema: { type: "object", properties: { city: { type: "string" } } },
|
|
32
|
+
outputSchema: { type: "object" },
|
|
33
|
+
},
|
|
29
34
|
receipts: { record: async (receipt) => db.receipts.insert(receipt) },
|
|
30
|
-
}));
|
|
35
|
+
})));
|
|
31
36
|
|
|
32
37
|
app.get("/weather", (req, res) => {
|
|
33
38
|
res.json({ temperature: 24, conditions: "clear", receipt: req.x402Receipt?.id });
|
|
@@ -38,27 +43,109 @@ app.get("/weather", (req, res) => {
|
|
|
38
43
|
|
|
39
44
|
## Network presets and payment methods
|
|
40
45
|
|
|
41
|
-
Use `
|
|
46
|
+
Use `base` or `baseSepolia` to preconfigure the CAIP-2 network, USDC contract, decimals, and default facilitator:
|
|
42
47
|
|
|
43
48
|
```ts
|
|
44
|
-
import {
|
|
49
|
+
import { baseSepolia, expressPaywall, merchantConfig } from "@seedhape/x402-merchant-sdk";
|
|
45
50
|
|
|
46
|
-
app.use(expressPaywall({
|
|
47
|
-
...BASE_SEPOLIA,
|
|
51
|
+
app.use(expressPaywall(merchantConfig(baseSepolia, {
|
|
48
52
|
payTo: "0xYourStagingWallet",
|
|
49
53
|
paymentMethods: ["eip3009"],
|
|
50
54
|
price: ({ path }) => path === "/weather"
|
|
51
|
-
? { amount: 10_000n, ...
|
|
55
|
+
? { amount: 10_000n, ...baseSepolia }
|
|
52
56
|
: null,
|
|
53
|
-
}));
|
|
57
|
+
})));
|
|
54
58
|
```
|
|
55
59
|
|
|
56
|
-
`paymentMethods`
|
|
60
|
+
`paymentMethods` defaults to `['eip3009']`, the broadly supported payment method. Set `['eip3009', 'erc7710']` to let the buyer/client choose both methods. Only advertise ERC-7710 when the configured facilitator supports it. If the methods use different facilitators, configure `facilitators: { eip3009: {...}, erc7710: {...} }`; the SDK selects the facilitator matching the buyer's selected method.
|
|
61
|
+
|
|
62
|
+
The `route` metadata automatically becomes the Bazaar `extensions.bazaar.info` object in the x402 v2 challenge. Sonar can read the same resource URL, description, schemas, payment requirements, network, asset, and payment methods from that challenge.
|
|
57
63
|
|
|
58
64
|
## Hono and node:http
|
|
59
65
|
|
|
60
66
|
Use `honoPaywall(config)` with Hono or `nodePaywall(config)` for a raw Node server. All adapters use the same `PaywallConfig` and facilitator contract.
|
|
61
67
|
|
|
68
|
+
## HTTP and MCP together
|
|
69
|
+
|
|
70
|
+
One merchant can expose the same service through both an HTTP API and an MCP tool. Reuse the network, USDC asset, recipient, facilitator, and receipt sink, then register a paid MCP tool with the official `@x402/mcp` wrapper:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
74
|
+
import { z } from "zod";
|
|
75
|
+
import { base, createPaidMcpTool, merchantConfig } from "@seedhape/x402-merchant-sdk";
|
|
76
|
+
|
|
77
|
+
const config = merchantConfig(base, {
|
|
78
|
+
payTo: process.env.MERCHANT_WALLET!,
|
|
79
|
+
price: { amount: 50_000n, ...base },
|
|
80
|
+
route: { name: "Market Data", description: "Paid market data" },
|
|
81
|
+
receipts: { record: async (receipt) => db.receipts.insert(receipt) },
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const mcp = new McpServer({ name: "market-data", version: "1.0.0" });
|
|
85
|
+
await createPaidMcpTool(mcp, config, {
|
|
86
|
+
name: "get_market_data",
|
|
87
|
+
description: "Get paid market data",
|
|
88
|
+
inputSchema: { symbol: z.string() },
|
|
89
|
+
inputJsonSchema: {
|
|
90
|
+
type: "object",
|
|
91
|
+
properties: { symbol: { type: "string" } },
|
|
92
|
+
required: ["symbol"],
|
|
93
|
+
},
|
|
94
|
+
}, async ({ symbol }) => ({ symbol, price: 24812.05 }));
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The HTTP route and MCP tool produce separate x402 resources, so each can have its own price and discovery URL while sharing the same merchant wallet and facilitator.
|
|
98
|
+
|
|
99
|
+
## Optional AP2 Checkout JWT
|
|
100
|
+
|
|
101
|
+
Enable AP2 on an HTTP paywall to issue a signed merchant Checkout JWT with every unpaid or rejected `402` response. The SDK returns it in the `AP2-CHECKOUT-JWT` header; this does not change x402 verification or settlement.
|
|
102
|
+
|
|
103
|
+
AP2 is optional. A route without the `ap2` option behaves exactly like a normal x402 route. AP2 adds signed checkout context for AP2-aware buyers and agents; the facilitator still verifies and settles the EIP-3009 or ERC-7710 payment.
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
app.use(expressPaywall(merchantConfig(base, {
|
|
107
|
+
payTo: process.env.MERCHANT_WALLET!,
|
|
108
|
+
price: { amount: 50_000n, ...base },
|
|
109
|
+
ap2: {
|
|
110
|
+
issuer: "https://api.example.com",
|
|
111
|
+
privateKeyPem: process.env.MERCHANT_AP2_PRIVATE_KEY_PEM!,
|
|
112
|
+
keyId: "merchant-ap2-1",
|
|
113
|
+
merchantId: "weather-api",
|
|
114
|
+
merchantName: "Example Weather",
|
|
115
|
+
merchantWebsite: "https://example.com",
|
|
116
|
+
expiresInSeconds: 300,
|
|
117
|
+
},
|
|
118
|
+
route: { name: "Weather API", description: "Current weather data" },
|
|
119
|
+
})));
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Store the configuration in the server environment:
|
|
123
|
+
|
|
124
|
+
```env
|
|
125
|
+
MERCHANT_AP2_ISSUER=https://api.example.com
|
|
126
|
+
MERCHANT_AP2_KEY_ID=merchant-ap2-1
|
|
127
|
+
MERCHANT_AP2_PRIVATE_KEY_PEM="-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Generate an ES256 PKCS#8 key with OpenSSL:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
openssl ecparam -name prime256v1 -genkey -noout -out ap2-private.pem
|
|
134
|
+
openssl pkcs8 -topk8 -nocrypt -in ap2-private.pem -out ap2-private-pkcs8.pem
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Load the PEM as one environment variable, replacing line breaks with `\\n`, or load it from your deployment secret manager. Never expose the private key in browser code, a client bundle, or a public repository.
|
|
138
|
+
|
|
139
|
+
The JWT includes the merchant, resource, product, price, currency, payout address, network, issuer, issue time, and expiry. It is returned only on unpaid or rejected `402` responses:
|
|
140
|
+
|
|
141
|
+
```http
|
|
142
|
+
HTTP/1.1 402 Payment Required
|
|
143
|
+
AP2-CHECKOUT-JWT: eyJ...
|
|
144
|
+
PAYMENT-REQUIRED: eyJ...
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`createAp2CheckoutJwt()` is also exported for custom transports. MCP integrations can use this helper when their transport exposes an equivalent challenge metadata field. The SDK does not require merchants to implement AP2 payment settlement separately.
|
|
148
|
+
|
|
62
149
|
## Payment flow
|
|
63
150
|
|
|
64
151
|
1. An unpaid request receives a v2 `402` challenge with a `PAYMENT-REQUIRED` header containing the merchant wallet, USDC asset, Base network, amount, and resource URL.
|
|
@@ -69,6 +156,12 @@ Use `honoPaywall(config)` with Hono or `nodePaywall(config)` for a raw Node serv
|
|
|
69
156
|
|
|
70
157
|
The SDK emits the current x402 v2 challenge shape. For migration, it also accepts legacy `X-PAYMENT` requests and exposes `X-PAYMENT-RESPONSE` alongside the v2 response header.
|
|
71
158
|
|
|
159
|
+
## Official x402 integrations
|
|
160
|
+
|
|
161
|
+
The SDK is built on the official `@x402/core` and `@x402/evm` packages. EIP-3009 verification and settlement use `x402ResourceServer`, `HTTPFacilitatorClient`, and the official EVM exact scheme. Bazaar declarations use `@x402/extensions/bazaar` and are registered with the resource server.
|
|
162
|
+
|
|
163
|
+
ERC-7710 remains an opt-in Seedhape facilitator method because the official EVM exact server currently covers EIP-3009 and Permit2, not ERC-7710. When `erc7710` is selected, the SDK routes it to the configured facilitator override; it never silently sends an ERC-7710 payload through the EIP-3009 verifier.
|
|
164
|
+
|
|
72
165
|
Unpaid responses also include this developer notice:
|
|
73
166
|
|
|
74
167
|
> This resource is protected by the x402 payment protocol.
|
package/dist/ap2.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Money, RouteMetadata } from "./middleware.js";
|
|
2
|
+
export interface Ap2MerchantConfig {
|
|
3
|
+
issuer: string;
|
|
4
|
+
/** ES256 PKCS#8 private key. Store this in a secret manager or environment variable. */
|
|
5
|
+
privateKeyPem: string;
|
|
6
|
+
keyId?: string;
|
|
7
|
+
merchantId?: string;
|
|
8
|
+
merchantName?: string;
|
|
9
|
+
merchantWebsite?: string;
|
|
10
|
+
currency?: string;
|
|
11
|
+
productId?: string;
|
|
12
|
+
expiresInSeconds?: number;
|
|
13
|
+
}
|
|
14
|
+
/** Create the merchant Checkout JWT returned with an x402 challenge. */
|
|
15
|
+
export declare function createAp2CheckoutJwt(input: {
|
|
16
|
+
ap2: Ap2MerchantConfig;
|
|
17
|
+
resource: string;
|
|
18
|
+
payTo: string;
|
|
19
|
+
price: Money;
|
|
20
|
+
route?: RouteMetadata;
|
|
21
|
+
expiresAt?: number;
|
|
22
|
+
}): Promise<string>;
|
|
23
|
+
//# sourceMappingURL=ap2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ap2.d.ts","sourceRoot":"","sources":["../src/ap2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAcD,wEAAwE;AACxE,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,GAAG,EAAE,iBAAiB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBlB"}
|
package/dist/ap2.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { importPKCS8, SignJWT } from "jose";
|
|
2
|
+
const keyCache = new Map();
|
|
3
|
+
async function signingKey(pem) {
|
|
4
|
+
let key = keyCache.get(pem);
|
|
5
|
+
if (!key) {
|
|
6
|
+
key = importPKCS8(pem.replace(/\\n/g, "\n"), "ES256", { extractable: false });
|
|
7
|
+
keyCache.set(pem, key);
|
|
8
|
+
}
|
|
9
|
+
return key;
|
|
10
|
+
}
|
|
11
|
+
/** Create the merchant Checkout JWT returned with an x402 challenge. */
|
|
12
|
+
export async function createAp2CheckoutJwt(input) {
|
|
13
|
+
const now = Math.floor(Date.now() / 1000);
|
|
14
|
+
const expiresAt = input.expiresAt ?? now + (input.ap2.expiresInSeconds ?? 300);
|
|
15
|
+
const productName = input.route?.name ?? input.route?.description ?? input.resource;
|
|
16
|
+
const website = input.ap2.merchantWebsite ?? new URL(input.resource).origin;
|
|
17
|
+
const amount = Number(input.price.amount) / 10 ** input.price.decimals;
|
|
18
|
+
return new SignJWT({
|
|
19
|
+
merchant_id: input.ap2.merchantId ?? input.ap2.issuer,
|
|
20
|
+
merchant_name: input.ap2.merchantName ?? input.route?.name ?? "Merchant",
|
|
21
|
+
merchant_website: website,
|
|
22
|
+
product_id: input.ap2.productId ?? input.route?.name ?? input.resource,
|
|
23
|
+
product_name: productName,
|
|
24
|
+
resource: input.resource,
|
|
25
|
+
price: amount.toString(),
|
|
26
|
+
currency: input.ap2.currency ?? "USD",
|
|
27
|
+
pay_to: input.payTo,
|
|
28
|
+
network: input.price.network,
|
|
29
|
+
})
|
|
30
|
+
.setProtectedHeader({ alg: "ES256", typ: "JWT", ...(input.ap2.keyId ? { kid: input.ap2.keyId } : {}) })
|
|
31
|
+
.setIssuer(input.ap2.issuer)
|
|
32
|
+
.setIssuedAt(now)
|
|
33
|
+
.setExpirationTime(expiresAt)
|
|
34
|
+
.sign(await signingKey(input.ap2.privateKeyPem));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ap2.js.map
|
package/dist/ap2.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ap2.js","sourceRoot":"","sources":["../src/ap2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAiB5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAC;AAE3D,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAO1C;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC;IACpF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEvE,OAAO,IAAI,OAAO,CAAC;QACjB,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM;QACrD,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,UAAU;QACxE,gBAAgB,EAAE,OAAO;QACzB,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,QAAQ;QACtE,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;QACxB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK;QACrC,MAAM,EAAE,KAAK,CAAC,KAAK;QACnB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;KAC7B,CAAC;SACC,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;SACtG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;SAC3B,WAAW,CAAC,GAAG,CAAC;SAChB,iBAAiB,CAAC,SAAS,CAAC;SAC5B,IAAI,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ZodRawShape } from "zod";
|
|
3
|
+
import { type FacilitatorConfig, type JsonSchema, type PaywallConfig } from "./middleware.js";
|
|
4
|
+
export interface McpToolConfig {
|
|
5
|
+
name: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
/** Zod raw shape passed directly to McpServer.tool(). */
|
|
8
|
+
inputSchema?: ZodRawShape;
|
|
9
|
+
/** JSON Schema used by Bazaar discovery. */
|
|
10
|
+
inputJsonSchema?: JsonSchema;
|
|
11
|
+
outputJsonSchema?: JsonSchema;
|
|
12
|
+
/** Optional MCP resource URL; defaults to mcp://tool/{name}. */
|
|
13
|
+
resourceUrl?: string;
|
|
14
|
+
tags?: string[];
|
|
15
|
+
/** Override the shared facilitator for this MCP tool. */
|
|
16
|
+
facilitator?: FacilitatorConfig;
|
|
17
|
+
}
|
|
18
|
+
export type McpToolHandler<TArgs extends Record<string, unknown> = Record<string, unknown>> = (args: TArgs) => Promise<unknown> | unknown;
|
|
19
|
+
/**
|
|
20
|
+
* Register a paid MCP tool using the same merchant configuration as HTTP routes.
|
|
21
|
+
* The official @x402/mcp wrapper handles the MCP payment challenge, verification,
|
|
22
|
+
* retry metadata, and settlement response.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createPaidMcpTool<TArgs extends Record<string, unknown> = Record<string, unknown>>(server: McpServer, paywall: PaywallConfig, tool: McpToolConfig, handler: McpToolHandler<TArgs>): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4CAA4C;IAC5C,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,yDAAyD;IACzD,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACxF,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAE9C;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrG,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { createPaymentWrapper } from "@x402/mcp";
|
|
3
|
+
import { declareDiscoveryExtension } from "@x402/extensions/bazaar";
|
|
4
|
+
import { createOfficialResourceServer, } from "./middleware.js";
|
|
5
|
+
/**
|
|
6
|
+
* Register a paid MCP tool using the same merchant configuration as HTTP routes.
|
|
7
|
+
* The official @x402/mcp wrapper handles the MCP payment challenge, verification,
|
|
8
|
+
* retry metadata, and settlement response.
|
|
9
|
+
*/
|
|
10
|
+
export async function createPaidMcpTool(server, paywall, tool, handler) {
|
|
11
|
+
const resourceServer = createOfficialResourceServer(tool.facilitator ?? paywall.facilitator);
|
|
12
|
+
await resourceServer.initialize();
|
|
13
|
+
const price = typeof paywall.price === "function"
|
|
14
|
+
? (() => { throw new Error("MCP tools require a fixed price; configure per-call pricing in the MCP handler layer."); })()
|
|
15
|
+
: paywall.price;
|
|
16
|
+
const accepts = await resourceServer.buildPaymentRequirements({
|
|
17
|
+
scheme: "exact",
|
|
18
|
+
network: paywall.network,
|
|
19
|
+
payTo: paywall.payTo,
|
|
20
|
+
price: {
|
|
21
|
+
asset: paywall.asset,
|
|
22
|
+
amount: price.amount.toString(),
|
|
23
|
+
extra: {
|
|
24
|
+
name: "USD Coin",
|
|
25
|
+
version: "2",
|
|
26
|
+
decimals: paywall.decimals ?? 6,
|
|
27
|
+
assetTransferMethod: "eip3009",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
maxTimeoutSeconds: paywall.maxTimeoutSeconds,
|
|
31
|
+
});
|
|
32
|
+
const wrapped = createPaymentWrapper(resourceServer, {
|
|
33
|
+
accepts,
|
|
34
|
+
resource: {
|
|
35
|
+
url: tool.resourceUrl ?? `mcp://tool/${tool.name}`,
|
|
36
|
+
description: tool.description ?? paywall.route?.description ?? paywall.description,
|
|
37
|
+
serviceName: paywall.route?.name,
|
|
38
|
+
tags: tool.tags ?? (paywall.route?.category ? [paywall.route.category] : undefined),
|
|
39
|
+
},
|
|
40
|
+
extensions: declareDiscoveryExtension({
|
|
41
|
+
toolName: tool.name,
|
|
42
|
+
description: tool.description ?? paywall.route?.description,
|
|
43
|
+
inputSchema: tool.inputJsonSchema ?? { type: "object", properties: {} },
|
|
44
|
+
output: tool.outputJsonSchema ? { example: {}, schema: tool.outputJsonSchema } : undefined,
|
|
45
|
+
}),
|
|
46
|
+
hooks: paywall.receipts ? {
|
|
47
|
+
onAfterSettlement: async ({ settlement, paymentPayload }) => {
|
|
48
|
+
if (!settlement.success)
|
|
49
|
+
return;
|
|
50
|
+
await paywall.receipts?.record({
|
|
51
|
+
id: randomUUID(),
|
|
52
|
+
resource: tool.resourceUrl ?? `mcp://tool/${tool.name}`,
|
|
53
|
+
payer: settlement.payer,
|
|
54
|
+
payTo: paywall.payTo,
|
|
55
|
+
amount: price.amount,
|
|
56
|
+
asset: paywall.asset,
|
|
57
|
+
network: paywall.network,
|
|
58
|
+
txHash: settlement.transaction,
|
|
59
|
+
settledAt: Math.floor(Date.now() / 1000),
|
|
60
|
+
});
|
|
61
|
+
void paymentPayload;
|
|
62
|
+
},
|
|
63
|
+
} : undefined,
|
|
64
|
+
})(async (args) => ({
|
|
65
|
+
content: [{ type: "text", text: JSON.stringify(await handler(args)) }],
|
|
66
|
+
}));
|
|
67
|
+
server.tool(tool.name, tool.description ?? paywall.route?.description ?? "Paid MCP tool", (tool.inputSchema ?? {}), wrapped);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware.d.ts
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* for Express, Hono, and node:http services.
|
|
11
11
|
*/
|
|
12
12
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
13
|
+
import { x402ResourceServer } from "@x402/core/server";
|
|
14
|
+
import type { Ap2MerchantConfig } from "./ap2.js";
|
|
13
15
|
export interface Money {
|
|
14
16
|
/** Base units of the asset. USDC has 6 decimals. */
|
|
15
17
|
amount: bigint;
|
|
@@ -49,6 +51,24 @@ export interface FacilitatorConfig {
|
|
|
49
51
|
apiKey?: string;
|
|
50
52
|
}
|
|
51
53
|
export type PaymentMethod = "eip3009" | "erc7710";
|
|
54
|
+
export interface JsonSchema {
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
/** Metadata shared by Bazaar-compatible catalogs and Sonar discovery. */
|
|
58
|
+
export interface RouteMetadata {
|
|
59
|
+
/** Human-readable service description shown in x402 resource metadata. */
|
|
60
|
+
description?: string;
|
|
61
|
+
/** JSON Schema for the request/query input accepted by the route. */
|
|
62
|
+
inputSchema?: JsonSchema;
|
|
63
|
+
/** JSON Schema for the successful response body. */
|
|
64
|
+
outputSchema?: JsonSchema;
|
|
65
|
+
/** Optional stable name used by discovery surfaces such as Sonar. */
|
|
66
|
+
name?: string;
|
|
67
|
+
/** Optional merchant-chosen category for Sonar listings. */
|
|
68
|
+
category?: string;
|
|
69
|
+
/** Optional public documentation URL. */
|
|
70
|
+
docsUrl?: string;
|
|
71
|
+
}
|
|
52
72
|
export interface MerchantNetworkConfig {
|
|
53
73
|
network: string;
|
|
54
74
|
asset: string;
|
|
@@ -59,6 +79,14 @@ export interface MerchantNetworkConfig {
|
|
|
59
79
|
export declare const BASE_MAINNET: MerchantNetworkConfig;
|
|
60
80
|
/** Base Sepolia + USDC defaults for development and staging. */
|
|
61
81
|
export declare const BASE_SEPOLIA: MerchantNetworkConfig;
|
|
82
|
+
/** Lowercase aliases make preset usage read naturally in route definitions. */
|
|
83
|
+
export declare const base: MerchantNetworkConfig;
|
|
84
|
+
export declare const baseSepolia: MerchantNetworkConfig;
|
|
85
|
+
export interface MerchantPresetConfig extends MerchantNetworkConfig {
|
|
86
|
+
paymentMethods?: PaymentMethod[];
|
|
87
|
+
}
|
|
88
|
+
/** Compose a route configuration from a network preset without mutation. */
|
|
89
|
+
export declare function merchantConfig(preset: MerchantPresetConfig, config: Omit<PaywallConfig, "network" | "asset" | "decimals" | "facilitator"> & Partial<Pick<PaywallConfig, "network" | "asset" | "decimals" | "facilitator">>): PaywallConfig;
|
|
62
90
|
export interface PaywallConfig {
|
|
63
91
|
payTo: string;
|
|
64
92
|
network: string;
|
|
@@ -66,6 +94,8 @@ export interface PaywallConfig {
|
|
|
66
94
|
decimals?: number;
|
|
67
95
|
/** Payment authorization methods advertised in the 402 response. */
|
|
68
96
|
paymentMethods?: PaymentMethod[];
|
|
97
|
+
/** Optional facilitator overrides for individual transfer methods. */
|
|
98
|
+
facilitators?: Partial<Record<PaymentMethod, FacilitatorConfig>>;
|
|
69
99
|
/** Fixed price, or a function of the request. Return null to leave a route free. */
|
|
70
100
|
price: Money | PriceResolver;
|
|
71
101
|
facilitator: FacilitatorConfig;
|
|
@@ -73,6 +103,12 @@ export interface PaywallConfig {
|
|
|
73
103
|
/** INR per USDC scaled 1e8, for receipt valuation. */
|
|
74
104
|
fxRateScaled?: () => Promise<bigint>;
|
|
75
105
|
description?: string;
|
|
106
|
+
/** Bazaar/Sonar metadata. `description` remains supported as a shorthand. */
|
|
107
|
+
route?: RouteMetadata;
|
|
108
|
+
/** Set false to omit the Bazaar extension from the x402 challenge. */
|
|
109
|
+
bazaar?: boolean;
|
|
110
|
+
/** Optional merchant AP2 issuer. Adds AP2-CHECKOUT-JWT to 402 responses. */
|
|
111
|
+
ap2?: Ap2MerchantConfig;
|
|
76
112
|
maxTimeoutSeconds?: number;
|
|
77
113
|
/** Routes that never require payment, e.g. ["/health", "/.well-known/*"]. */
|
|
78
114
|
free?: string[];
|
|
@@ -98,11 +134,13 @@ export interface SettleResult {
|
|
|
98
134
|
export declare class Facilitator {
|
|
99
135
|
private readonly cfg;
|
|
100
136
|
private readonly fetchImpl;
|
|
137
|
+
private readonly official;
|
|
101
138
|
constructor(cfg: FacilitatorConfig, fetchImpl?: typeof fetch);
|
|
102
139
|
verify(payload: unknown, requirements: unknown): Promise<VerifyResult>;
|
|
103
140
|
settle(payload: unknown, requirements: unknown): Promise<SettleResult>;
|
|
104
141
|
private call;
|
|
105
142
|
}
|
|
143
|
+
export declare function createOfficialResourceServer(facilitator: FacilitatorConfig): x402ResourceServer;
|
|
106
144
|
export interface PaywallOutcome {
|
|
107
145
|
/** "free" | "challenge" | "paid" | "rejected" */
|
|
108
146
|
kind: "free" | "challenge" | "paid" | "rejected";
|
|
@@ -110,6 +148,7 @@ export interface PaywallOutcome {
|
|
|
110
148
|
challenge?: unknown;
|
|
111
149
|
settlementHeader?: string;
|
|
112
150
|
paymentRequiredHeader?: string;
|
|
151
|
+
ap2CheckoutJwt?: string;
|
|
113
152
|
receipt?: Receipt;
|
|
114
153
|
reason?: string;
|
|
115
154
|
}
|
|
@@ -119,30 +158,14 @@ export declare class Paywall {
|
|
|
119
158
|
private readonly decimals;
|
|
120
159
|
constructor(cfg: PaywallConfig);
|
|
121
160
|
priceFor(path: string, method: string, query: URLSearchParams): Money | null;
|
|
122
|
-
buildChallenge(price: Money, resource: string): {
|
|
161
|
+
buildChallenge(price: Money, resource: string, method?: string): {
|
|
123
162
|
x402Version: number;
|
|
124
163
|
error: string;
|
|
125
164
|
message: string;
|
|
126
165
|
developerNote: string;
|
|
127
|
-
resource:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
mimeType: string;
|
|
131
|
-
};
|
|
132
|
-
accepts: {
|
|
133
|
-
scheme: string;
|
|
134
|
-
network: string;
|
|
135
|
-
amount: string;
|
|
136
|
-
payTo: string;
|
|
137
|
-
maxTimeoutSeconds: number;
|
|
138
|
-
asset: string;
|
|
139
|
-
extra: {
|
|
140
|
-
name: string;
|
|
141
|
-
version: string;
|
|
142
|
-
decimals: number;
|
|
143
|
-
assetTransferMethod: PaymentMethod;
|
|
144
|
-
};
|
|
145
|
-
}[];
|
|
166
|
+
resource: Record<string, string>;
|
|
167
|
+
accepts: Array<Record<string, unknown>>;
|
|
168
|
+
extensions?: Record<string, unknown>;
|
|
146
169
|
};
|
|
147
170
|
private paymentRequiredHeader;
|
|
148
171
|
handle(args: {
|
|
@@ -153,6 +176,8 @@ export declare class Paywall {
|
|
|
153
176
|
paymentHeader: string | null;
|
|
154
177
|
merchantRef?: string;
|
|
155
178
|
}): Promise<PaywallOutcome>;
|
|
179
|
+
private ap2CheckoutJwt;
|
|
180
|
+
private facilitatorFor;
|
|
156
181
|
private writeReceipt;
|
|
157
182
|
}
|
|
158
183
|
export declare function expressPaywall(cfg: PaywallConfig): (req: any, res: any, next: any) => Promise<any>;
|
package/dist/middleware.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware.js
CHANGED
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
* for Express, Hono, and node:http services.
|
|
11
11
|
*/
|
|
12
12
|
import { randomUUID } from "node:crypto";
|
|
13
|
+
import { HTTPFacilitatorClient, x402ResourceServer } from "@x402/core/server";
|
|
14
|
+
import { registerExactEvmScheme } from "@x402/evm/exact/server";
|
|
15
|
+
import { bazaarResourceServerExtension, declareDiscoveryExtension } from "@x402/extensions/bazaar";
|
|
13
16
|
/** Base mainnet + USDC defaults. Override any field for a custom facilitator. */
|
|
14
17
|
export const BASE_MAINNET = {
|
|
15
18
|
network: "eip155:8453",
|
|
@@ -24,20 +27,66 @@ export const BASE_SEPOLIA = {
|
|
|
24
27
|
decimals: 6,
|
|
25
28
|
facilitator: { url: "https://api.cdp.coinbase.com/platform/v2/x402" },
|
|
26
29
|
};
|
|
30
|
+
/** Lowercase aliases make preset usage read naturally in route definitions. */
|
|
31
|
+
export const base = BASE_MAINNET;
|
|
32
|
+
export const baseSepolia = BASE_SEPOLIA;
|
|
33
|
+
/** Compose a route configuration from a network preset without mutation. */
|
|
34
|
+
export function merchantConfig(preset, config) {
|
|
35
|
+
return {
|
|
36
|
+
...preset,
|
|
37
|
+
...config,
|
|
38
|
+
paymentMethods: config.paymentMethods ?? preset.paymentMethods ?? ["eip3009"],
|
|
39
|
+
network: config.network ?? preset.network,
|
|
40
|
+
asset: config.asset ?? preset.asset,
|
|
41
|
+
decimals: config.decimals ?? preset.decimals,
|
|
42
|
+
facilitator: config.facilitator ?? preset.facilitator,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
27
45
|
// ---------------------------------------------------------------------------
|
|
28
46
|
// Facilitator
|
|
29
47
|
// ---------------------------------------------------------------------------
|
|
30
48
|
export class Facilitator {
|
|
31
49
|
cfg;
|
|
32
50
|
fetchImpl;
|
|
51
|
+
official;
|
|
33
52
|
constructor(cfg, fetchImpl = fetch) {
|
|
34
53
|
this.cfg = cfg;
|
|
35
54
|
this.fetchImpl = fetchImpl;
|
|
55
|
+
const client = new HTTPFacilitatorClient({
|
|
56
|
+
url: cfg.url,
|
|
57
|
+
...(cfg.apiKey
|
|
58
|
+
? {
|
|
59
|
+
createAuthHeaders: async () => {
|
|
60
|
+
const headers = { authorization: `Bearer ${cfg.apiKey}` };
|
|
61
|
+
return { verify: headers, settle: headers, supported: headers };
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
: {}),
|
|
65
|
+
});
|
|
66
|
+
this.official = createOfficialResourceServerFromClient(client);
|
|
36
67
|
}
|
|
37
68
|
async verify(payload, requirements) {
|
|
69
|
+
if (usesOfficialEvmScheme(payload)) {
|
|
70
|
+
const result = await this.official.verifyPayment(payload, requirements);
|
|
71
|
+
return {
|
|
72
|
+
isValid: result.isValid,
|
|
73
|
+
invalidReason: result.invalidReason,
|
|
74
|
+
payer: result.payer,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
38
77
|
return this.call("/verify", { paymentPayload: payload, paymentRequirements: requirements });
|
|
39
78
|
}
|
|
40
79
|
async settle(payload, requirements) {
|
|
80
|
+
if (usesOfficialEvmScheme(payload)) {
|
|
81
|
+
const result = await this.official.settlePayment(payload, requirements);
|
|
82
|
+
return {
|
|
83
|
+
success: result.success,
|
|
84
|
+
transaction: result.transaction,
|
|
85
|
+
network: result.network,
|
|
86
|
+
payer: result.payer,
|
|
87
|
+
errorReason: result.errorReason,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
41
90
|
return this.call("/settle", { paymentPayload: payload, paymentRequirements: requirements });
|
|
42
91
|
}
|
|
43
92
|
async call(path, body) {
|
|
@@ -56,6 +105,28 @@ export class Facilitator {
|
|
|
56
105
|
return (await res.json());
|
|
57
106
|
}
|
|
58
107
|
}
|
|
108
|
+
export function createOfficialResourceServer(facilitator) {
|
|
109
|
+
const client = new HTTPFacilitatorClient({
|
|
110
|
+
url: facilitator.url,
|
|
111
|
+
...(facilitator.apiKey
|
|
112
|
+
? {
|
|
113
|
+
createAuthHeaders: async () => {
|
|
114
|
+
const headers = { authorization: `Bearer ${facilitator.apiKey}` };
|
|
115
|
+
return { verify: headers, settle: headers, supported: headers };
|
|
116
|
+
},
|
|
117
|
+
}
|
|
118
|
+
: {}),
|
|
119
|
+
});
|
|
120
|
+
return createOfficialResourceServerFromClient(client);
|
|
121
|
+
}
|
|
122
|
+
function createOfficialResourceServerFromClient(client) {
|
|
123
|
+
return registerExactEvmScheme(new x402ResourceServer(client).registerExtension(bazaarResourceServerExtension));
|
|
124
|
+
}
|
|
125
|
+
function usesOfficialEvmScheme(payload) {
|
|
126
|
+
if (!isRecord(payload) || !isRecord(payload.accepted) || !isRecord(payload.accepted.extra))
|
|
127
|
+
return true;
|
|
128
|
+
return payload.accepted.extra.assetTransferMethod !== "erc7710";
|
|
129
|
+
}
|
|
59
130
|
export class Paywall {
|
|
60
131
|
cfg;
|
|
61
132
|
facilitator;
|
|
@@ -71,18 +142,20 @@ export class Paywall {
|
|
|
71
142
|
const p = this.cfg.price;
|
|
72
143
|
return typeof p === "function" ? p({ path, method, query }) : p;
|
|
73
144
|
}
|
|
74
|
-
buildChallenge(price, resource) {
|
|
145
|
+
buildChallenge(price, resource, method = "GET") {
|
|
75
146
|
const paymentMethods = this.cfg.paymentMethods?.length
|
|
76
147
|
? this.cfg.paymentMethods
|
|
77
148
|
: ["eip3009"];
|
|
78
|
-
|
|
149
|
+
const route = this.cfg.route;
|
|
150
|
+
const description = route?.description ?? this.cfg.description ?? "";
|
|
151
|
+
const challenge = {
|
|
79
152
|
x402Version: 2,
|
|
80
153
|
error: "Payment Required",
|
|
81
154
|
message: "This resource is protected by the x402 payment protocol.",
|
|
82
155
|
developerNote: "Note to developers: install @x402/paywall to enable the in-browser wallet connection and payment UI. Programmatic clients should read the payment requirements from the 402 response headers and JSON body.",
|
|
83
156
|
resource: {
|
|
84
157
|
url: resource,
|
|
85
|
-
description
|
|
158
|
+
description,
|
|
86
159
|
mimeType: "application/json",
|
|
87
160
|
},
|
|
88
161
|
accepts: paymentMethods.map((paymentMethod) => ({
|
|
@@ -95,6 +168,30 @@ export class Paywall {
|
|
|
95
168
|
extra: { name: "USD Coin", version: "2", decimals: this.decimals, assetTransferMethod: paymentMethod },
|
|
96
169
|
})),
|
|
97
170
|
};
|
|
171
|
+
if (this.cfg.bazaar !== false && route && Object.keys(route).length > 0) {
|
|
172
|
+
const normalizedMethod = method.toUpperCase();
|
|
173
|
+
const discoveryConfig = {
|
|
174
|
+
method: normalizedMethod,
|
|
175
|
+
...(route?.inputSchema ? { inputSchema: discoverySchema(route.inputSchema) } : {}),
|
|
176
|
+
...(route?.outputSchema ? { output: { example: {}, schema: route.outputSchema } } : {}),
|
|
177
|
+
...(["GET", "HEAD", "DELETE"].includes(normalizedMethod) ? {} : { bodyType: "json" }),
|
|
178
|
+
};
|
|
179
|
+
const discovery = declareDiscoveryExtension(discoveryConfig);
|
|
180
|
+
challenge.extensions = {
|
|
181
|
+
...discovery,
|
|
182
|
+
bazaar: {
|
|
183
|
+
...(isRecord(discovery.bazaar) ? discovery.bazaar : {}),
|
|
184
|
+
info: {
|
|
185
|
+
...(isRecord(discovery.bazaar) && isRecord(discovery.bazaar.info) ? discovery.bazaar.info : {}),
|
|
186
|
+
...(route?.name ? { name: route.name } : {}),
|
|
187
|
+
...(route?.name ? { serviceName: route.name } : {}),
|
|
188
|
+
...(route?.description || this.cfg.description ? { description } : {}),
|
|
189
|
+
...(route?.docsUrl ? { docsUrl: route.docsUrl } : {}),
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return challenge;
|
|
98
195
|
}
|
|
99
196
|
paymentRequiredHeader(challenge) {
|
|
100
197
|
return Buffer.from(JSON.stringify(challenge), "utf8").toString("base64");
|
|
@@ -104,12 +201,14 @@ export class Paywall {
|
|
|
104
201
|
if (!price || price.amount === 0n)
|
|
105
202
|
return { kind: "free" };
|
|
106
203
|
if (!args.paymentHeader) {
|
|
107
|
-
const challenge = this.buildChallenge(price, args.resource);
|
|
204
|
+
const challenge = this.buildChallenge(price, args.resource, args.method);
|
|
205
|
+
const ap2CheckoutJwt = await this.ap2CheckoutJwt(price, args.resource);
|
|
108
206
|
return {
|
|
109
207
|
kind: "challenge",
|
|
110
208
|
status: 402,
|
|
111
209
|
challenge,
|
|
112
210
|
paymentRequiredHeader: this.paymentRequiredHeader(challenge),
|
|
211
|
+
ap2CheckoutJwt,
|
|
113
212
|
};
|
|
114
213
|
}
|
|
115
214
|
let payload;
|
|
@@ -119,17 +218,20 @@ export class Paywall {
|
|
|
119
218
|
catch {
|
|
120
219
|
return { kind: "rejected", status: 400, reason: "X-PAYMENT header is not valid base64 JSON." };
|
|
121
220
|
}
|
|
122
|
-
const challenge = this.buildChallenge(price, args.resource);
|
|
221
|
+
const challenge = this.buildChallenge(price, args.resource, args.method);
|
|
123
222
|
const requirements = selectAcceptedRequirements(payload, challenge.accepts);
|
|
124
|
-
const
|
|
223
|
+
const facilitator = this.facilitatorFor(payload);
|
|
224
|
+
const verified = await facilitator.verify(payload, requirements);
|
|
125
225
|
if (!verified.isValid) {
|
|
126
|
-
const challenge = this.buildChallenge(price, args.resource);
|
|
226
|
+
const challenge = this.buildChallenge(price, args.resource, args.method);
|
|
227
|
+
const ap2CheckoutJwt = await this.ap2CheckoutJwt(price, args.resource);
|
|
127
228
|
return {
|
|
128
229
|
kind: "rejected",
|
|
129
230
|
status: 402,
|
|
130
231
|
reason: verified.invalidReason ?? "Payment verification failed.",
|
|
131
232
|
challenge,
|
|
132
233
|
paymentRequiredHeader: this.paymentRequiredHeader(challenge),
|
|
234
|
+
ap2CheckoutJwt,
|
|
133
235
|
};
|
|
134
236
|
}
|
|
135
237
|
if (this.cfg.settlement === "after") {
|
|
@@ -137,7 +239,7 @@ export class Paywall {
|
|
|
137
239
|
// than fire-and-forget so a failed settlement is not silently swallowed.
|
|
138
240
|
return { kind: "paid", receipt: undefined };
|
|
139
241
|
}
|
|
140
|
-
const settled = await
|
|
242
|
+
const settled = await facilitator.settle(payload, requirements);
|
|
141
243
|
if (!settled.success) {
|
|
142
244
|
return {
|
|
143
245
|
kind: "rejected",
|
|
@@ -158,6 +260,20 @@ export class Paywall {
|
|
|
158
260
|
settlementHeader: Buffer.from(JSON.stringify(settled), "utf8").toString("base64"),
|
|
159
261
|
};
|
|
160
262
|
}
|
|
263
|
+
async ap2CheckoutJwt(price, resource) {
|
|
264
|
+
if (!this.cfg.ap2)
|
|
265
|
+
return undefined;
|
|
266
|
+
const { createAp2CheckoutJwt } = await import("./ap2.js");
|
|
267
|
+
return createAp2CheckoutJwt({ ap2: this.cfg.ap2, resource, payTo: this.cfg.payTo, price, route: this.cfg.route });
|
|
268
|
+
}
|
|
269
|
+
facilitatorFor(payload) {
|
|
270
|
+
const methodValue = isRecord(payload) && isRecord(payload.accepted) && isRecord(payload.accepted.extra)
|
|
271
|
+
? payload.accepted.extra.assetTransferMethod
|
|
272
|
+
: undefined;
|
|
273
|
+
const method = methodValue === "eip3009" || methodValue === "erc7710" ? methodValue : undefined;
|
|
274
|
+
const override = method ? this.cfg.facilitators?.[method] : undefined;
|
|
275
|
+
return override ? new Facilitator(override) : this.facilitator;
|
|
276
|
+
}
|
|
161
277
|
async writeReceipt(args) {
|
|
162
278
|
let inrPaise;
|
|
163
279
|
let fxRateScaled;
|
|
@@ -190,6 +306,13 @@ export class Paywall {
|
|
|
190
306
|
return receipt;
|
|
191
307
|
}
|
|
192
308
|
}
|
|
309
|
+
function discoverySchema(schema) {
|
|
310
|
+
if (schema.type === "object" && isRecord(schema.properties)) {
|
|
311
|
+
const { type: _type, ...rest } = schema;
|
|
312
|
+
return rest;
|
|
313
|
+
}
|
|
314
|
+
return schema;
|
|
315
|
+
}
|
|
193
316
|
/**
|
|
194
317
|
* x402 v2 clients echo the exact option they selected in `payload.accepted`.
|
|
195
318
|
* A merchant may advertise more than one transfer method, so using accepts[0]
|
|
@@ -243,11 +366,19 @@ export function expressPaywall(cfg) {
|
|
|
243
366
|
case "challenge":
|
|
244
367
|
if (outcome.paymentRequiredHeader)
|
|
245
368
|
res.setHeader("PAYMENT-REQUIRED", outcome.paymentRequiredHeader);
|
|
369
|
+
if (outcome.ap2CheckoutJwt)
|
|
370
|
+
res.setHeader("AP2-CHECKOUT-JWT", outcome.ap2CheckoutJwt);
|
|
371
|
+
if (outcome.ap2CheckoutJwt)
|
|
372
|
+
res.setHeader("Access-Control-Expose-Headers", "PAYMENT-REQUIRED, AP2-CHECKOUT-JWT");
|
|
246
373
|
res.status(402).json(outcome.challenge);
|
|
247
374
|
return;
|
|
248
375
|
case "rejected":
|
|
249
376
|
if (outcome.paymentRequiredHeader)
|
|
250
377
|
res.setHeader("PAYMENT-REQUIRED", outcome.paymentRequiredHeader);
|
|
378
|
+
if (outcome.ap2CheckoutJwt)
|
|
379
|
+
res.setHeader("AP2-CHECKOUT-JWT", outcome.ap2CheckoutJwt);
|
|
380
|
+
if (outcome.ap2CheckoutJwt)
|
|
381
|
+
res.setHeader("Access-Control-Expose-Headers", "PAYMENT-REQUIRED, AP2-CHECKOUT-JWT");
|
|
251
382
|
res.status(outcome.status ?? 402).json({
|
|
252
383
|
error: outcome.reason,
|
|
253
384
|
...(outcome.challenge ?? {}),
|
|
@@ -288,11 +419,19 @@ export function honoPaywall(cfg) {
|
|
|
288
419
|
if (outcome.kind === "challenge") {
|
|
289
420
|
if (outcome.paymentRequiredHeader)
|
|
290
421
|
c.header("PAYMENT-REQUIRED", outcome.paymentRequiredHeader);
|
|
422
|
+
if (outcome.ap2CheckoutJwt)
|
|
423
|
+
c.header("AP2-CHECKOUT-JWT", outcome.ap2CheckoutJwt);
|
|
424
|
+
if (outcome.ap2CheckoutJwt)
|
|
425
|
+
c.header("Access-Control-Expose-Headers", "PAYMENT-REQUIRED, AP2-CHECKOUT-JWT");
|
|
291
426
|
return c.json(outcome.challenge, 402);
|
|
292
427
|
}
|
|
293
428
|
if (outcome.kind === "rejected") {
|
|
294
429
|
if (outcome.paymentRequiredHeader)
|
|
295
430
|
c.header("PAYMENT-REQUIRED", outcome.paymentRequiredHeader);
|
|
431
|
+
if (outcome.ap2CheckoutJwt)
|
|
432
|
+
c.header("AP2-CHECKOUT-JWT", outcome.ap2CheckoutJwt);
|
|
433
|
+
if (outcome.ap2CheckoutJwt)
|
|
434
|
+
c.header("Access-Control-Expose-Headers", "PAYMENT-REQUIRED, AP2-CHECKOUT-JWT");
|
|
296
435
|
return c.json({ error: outcome.reason, ...(outcome.challenge ?? {}) }, (outcome.status ?? 402));
|
|
297
436
|
}
|
|
298
437
|
c.set("x402Receipt", outcome.receipt);
|
|
@@ -330,6 +469,8 @@ export function nodePaywall(cfg) {
|
|
|
330
469
|
res.statusCode = outcome.status ?? 402;
|
|
331
470
|
if (outcome.paymentRequiredHeader)
|
|
332
471
|
res.setHeader("PAYMENT-REQUIRED", outcome.paymentRequiredHeader);
|
|
472
|
+
if (outcome.ap2CheckoutJwt)
|
|
473
|
+
res.setHeader("AP2-CHECKOUT-JWT", outcome.ap2CheckoutJwt);
|
|
333
474
|
res.setHeader("content-type", "application/json");
|
|
334
475
|
res.end(JSON.stringify(outcome.challenge ?? { error: outcome.reason }));
|
|
335
476
|
return null;
|
package/dist/middleware.js.map
CHANGED
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seedhape/x402-merchant-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Add x402 payment-gated routes, settlement receipts, and merchant accounting to Node.js services.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"keywords": [
|
|
19
|
+
"x402",
|
|
20
|
+
"payments",
|
|
21
|
+
"usdc",
|
|
22
|
+
"base",
|
|
23
|
+
"merchant",
|
|
24
|
+
"paywall",
|
|
25
|
+
"api",
|
|
26
|
+
"agents"
|
|
27
|
+
],
|
|
11
28
|
"license": "MIT",
|
|
12
|
-
"repository": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/seedhape/seedhape.git",
|
|
32
|
+
"directory": "packages/merchant-sdk"
|
|
33
|
+
},
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/seedhape/seedhape/issues"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
42
|
+
"@x402/core": "2.23.0",
|
|
43
|
+
"@x402/evm": "2.23.0",
|
|
44
|
+
"@x402/extensions": "2.23.0",
|
|
45
|
+
"@x402/mcp": "2.23.0",
|
|
46
|
+
"jose": "^6.1.0",
|
|
47
|
+
"zod": "^3.25.76"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"test": "node --test test/*.test.mjs"
|
|
51
|
+
}
|
|
16
52
|
}
|