@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 CHANGED
@@ -12,22 +12,27 @@ npm install @seedhape/x402-merchant-sdk
12
12
 
13
13
  ```ts
14
14
  import express from "express";
15
- import { BASE_MAINNET, expressPaywall } from "@seedhape/x402-merchant-sdk";
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, ...BASE_MAINNET }
23
+ ? { amount: 50_000n, ...base }
25
24
  : null,
26
25
  free: ["/health", "/docs/*"],
27
26
  facilitator: { url: process.env.FACILITATOR_URL! },
28
- description: "Current weather data",
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 `BASE_MAINNET` or `BASE_SEPOLIA` to preconfigure the CAIP-2 network, USDC contract, decimals, and default facilitator:
46
+ Use `base` or `baseSepolia` to preconfigure the CAIP-2 network, USDC contract, decimals, and default facilitator:
42
47
 
43
48
  ```ts
44
- import { BASE_SEPOLIA, expressPaywall } from "@seedhape/x402-merchant-sdk";
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, ...BASE_SEPOLIA }
55
+ ? { amount: 10_000n, ...baseSepolia }
52
56
  : null,
53
- }));
57
+ })));
54
58
  ```
55
59
 
56
- `paymentMethods` is optional and defaults to `['eip3009']` for backward compatibility. Set `['erc7710']` to advertise only delegated payments, or `['eip3009', 'erc7710']` to let the buyer/client choose. Override `facilitator` when using a compatible provider of your choice.
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
@@ -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
@@ -1,2 +1,4 @@
1
1
  export * from "./middleware.js";
2
+ export * from "./mcp.js";
3
+ export * from "./ap2.js";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -1,2 +1,4 @@
1
1
  export * from "./middleware.js";
2
+ export * from "./mcp.js";
3
+ export * from "./ap2.js";
2
4
  //# sourceMappingURL=index.js.map
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -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
- url: string;
129
- description: string;
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>;
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
@@ -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
- return {
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: this.cfg.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 verified = await this.facilitator.verify(payload, requirements);
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 this.facilitator.settle(payload, requirements);
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;
@@ -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":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAK9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAuEnG,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,EAAE,GAAG,EAAE,sEAAsE,EAAE;CAC7F,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,EAAE,GAAG,EAAE,+CAA+C,EAAE;CACtE,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AAMxC,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAC5B,MAA4B,EAC5B,MACgF;IAEhF,OAAO;QACL,GAAG,MAAM;QACT,GAAG,MAAM;QACT,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC;QAC7E,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;QACzC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QAC5C,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;KACtD,CAAC;AACJ,CAAC;AAiDD,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,OAAO,WAAW;IAIH;IACA;IAJF,QAAQ,CAAqB;IAE9C,YACmB,GAAsB,EACtB,YAA0B,KAAK;QAD/B,QAAG,GAAH,GAAG,CAAmB;QACtB,cAAS,GAAT,SAAS,CAAsB;QAEhD,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC;YACvC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,CAAC,GAAG,CAAC,MAAM;gBACZ,CAAC,CAAC;oBACE,iBAAiB,EAAE,KAAK,IAAI,EAAE;wBAC5B,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;wBAC1D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;oBAClE,CAAC;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,sCAAsC,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAgB,EAAE,YAAqB;QAClD,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAC9C,OAAiC,EACjC,YAA2C,CAC5C,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAe,SAAS,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAgB,EAAE,YAAqB;QAClD,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAC9C,OAAiC,EACjC,YAA2C,CAC5C,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAe,SAAS,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5G,CAAC;IAEO,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAa;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;YAC5E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3E;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,aAAa,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,4BAA4B,CAAC,WAA8B;IACzE,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC;QACvC,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,GAAG,CAAC,WAAW,CAAC,MAAM;YACpB,CAAC,CAAC;gBACE,iBAAiB,EAAE,KAAK,IAAI,EAAE;oBAC5B,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,UAAU,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;oBAClE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;gBAClE,CAAC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,OAAO,sCAAsC,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,sCAAsC,CAAC,MAA6B;IAC3E,OAAO,sBAAsB,CAC3B,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAChF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxG,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,KAAK,SAAS,CAAC;AAClE,CAAC;AAkBD,MAAM,OAAO,OAAO;IAIW;IAHZ,WAAW,CAAc;IACzB,QAAQ,CAAS;IAElC,YAA6B,GAAkB;QAAlB,QAAG,GAAH,GAAG,CAAe;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,KAAsB;QAC3D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,OAAO,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,cAAc,CAAC,KAAY,EAAE,QAAgB,EAAE,MAAM,GAAG,KAAK;QAC3D,MAAM,cAAc,GAAoB,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM;YACrE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc;YACzB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QACrE,MAAM,SAAS,GAA4B;YACzC,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE,0DAA0D;YACnE,aAAa,EAAE,6MAA6M;YAC5N,QAAQ,EAAE;gBACR,GAAG,EAAE,QAAQ;gBACb,WAAW;gBACX,QAAQ,EAAE,kBAAkB;aAC7B;YACD,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC5C,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO;gBACzB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC/B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;gBACrB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,GAAG;gBACpD,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;gBACrB,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,mBAAmB,EAAE,aAAa,EAAE;aACvG,CAAC,CAAC;SACN,CAAC;QACF,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,eAAe,GAA4B;gBAC/C,MAAM,EAAE,gBAAgB;gBACxB,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvF,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;aACtF,CAAC;YACF,MAAM,SAAS,GAAG,yBAAyB,CACzC,eAAkE,CACnE,CAAC;YACF,SAAS,CAAC,UAAU,GAAG;gBACrB,GAAG,SAAS;gBACZ,MAAM,EAAE;oBACN,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvD,IAAI,EAAE;wBACJ,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/F,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC5C,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnD,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACtE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACtD;iBACF;aACF,CAAC;QACJ,CAAC;QACD,OAAO,SAQN,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,SAAkB;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAOZ;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAE3D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvE,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,GAAG;gBACX,SAAS;gBACT,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;gBAC5D,cAAc;aACf,CAAC;QACJ,CAAC;QAED,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;QACjG,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,YAAY,GAAG,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAE5E,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvE,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,QAAQ,CAAC,aAAa,IAAI,8BAA8B;gBAChE,SAAS;gBACT,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;gBAC5D,cAAc;aACf,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YACpC,wEAAwE;YACxE,yEAAyE;YACzE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,OAAO,CAAC,WAAW,IAAI,oBAAoB;aACpD,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK;YACL,OAAO;YACP,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;YACtC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;SAClF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAAY,EAAE,QAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QACpC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1D,OAAO,oBAAoB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACpH,CAAC;IAEO,cAAc,CAAC,OAAgB;QACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB;YAC5C,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,MAAM,GAA8B,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3H,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAM1B;QACC,IAAI,QAA4B,CAAC;QACjC,IAAI,YAAgC,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBAC7C,QAAQ;oBACN,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;wBACzC,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAY,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,UAAU,EAAE;YAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;YACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO;YACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YAChC,QAAQ;YACR,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACxC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;QACF,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,SAAS,eAAe,CAAC,MAAkB;IACzC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CACjC,OAAgB,EAChB,UAA0C;IAE1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,IAAI,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAEpC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YACtC,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;YACnC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;YAC/B,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;YAC/B,YAAY,KAAK,cAAc;YAC/B,YAAY,KAAK,cAAc,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IAC/G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,uDAAuD;AACvD,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,OAAO,KAAK,UAAU,UAAU,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS;QAC5D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAC7F,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;gBACnC,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,YAAY;gBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE;gBACxB,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI;gBACnF,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC;aAC3C,CAAC,CAAC;YAEH,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,MAAM;oBACT,OAAO,IAAI,EAAE,CAAC;gBAChB,KAAK,WAAW;oBACd,IAAI,OAAO,CAAC,qBAAqB;wBAAE,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;oBACpG,IAAI,OAAO,CAAC,cAAc;wBAAE,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;oBACtF,IAAI,OAAO,CAAC,cAAc;wBAAE,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,oCAAoC,CAAC,CAAC;oBACjH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACxC,OAAO;gBACT,KAAK,UAAU;oBACb,IAAI,OAAO,CAAC,qBAAqB;wBAAE,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;oBACpG,IAAI,OAAO,CAAC,cAAc;wBAAE,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;oBACtF,IAAI,OAAO,CAAC,cAAc;wBAAE,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,oCAAoC,CAAC,CAAC;oBACjH,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;wBACrC,KAAK,EAAE,OAAO,CAAC,MAAM;wBACrB,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;qBAC7B,CAAC,CAAC;oBACH,OAAO;gBACT,KAAK,MAAM;oBACT,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;wBAC7B,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;wBAC5D,GAAG,CAAC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;wBAC9D,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,sCAAsC,CAAC,CAAC;oBACzF,CAAC;oBACD,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;oBAClC,OAAO,IAAI,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CAAC,GAAkB;IAC5C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,OAAO,KAAK,UAAU,UAAU,CAAC,CAAM,EAAE,IAAS;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YACnC,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;YACpB,KAAK,EAAE,GAAG,CAAC,YAAY;YACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE;YACxB,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI;YACrF,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC;SAC5C,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,qBAAqB;gBAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC/F,IAAI,OAAO,CAAC,cAAc;gBAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,OAAO,CAAC,cAAc;gBAAE,CAAC,CAAC,MAAM,CAAC,+BAA+B,EAAE,oCAAoC,CAAC,CAAC;YAC5G,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,qBAAqB;gBAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC/F,IAAI,OAAO,CAAC,cAAc;gBAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,OAAO,CAAC,cAAc;gBAAE,CAAC,CAAC,MAAM,CAAC,+BAA+B,EAAE,oCAAoC,CAAC,CAAC;YAC5G,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,EAAY,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAQ,CAAC,CAAC;QACnH,CAAC;QACD,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,IAAI,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACvD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAClE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,sCAAsC,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,2CAA2C;AAC3C,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CAAC,GAAkB;IAC5C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,KAAK,UAAU,KAAK,CACzB,GAAoB,EACpB,GAAmB;QAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YACnC,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;YAC3B,KAAK,EAAE,GAAG,CAAC,YAAY;YACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE;YACxB,aAAa,EAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAY,IAAK,GAAG,CAAC,OAAO,CAAC,WAAW,CAAY,IAAI,IAAI;SAC5G,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAC5D,GAAG,CAAC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;QACjC,CAAC;QACD,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;QACvC,IAAI,OAAO,CAAC,qBAAqB;YAAE,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACpG,IAAI,OAAO,CAAC,cAAc;YAAE,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACtF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,OAAe;IAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,KAAK,OAAO,CAAC;AAC1B,CAAC"}
package/package.json CHANGED
@@ -1,16 +1,52 @@
1
1
  {
2
2
  "name": "@seedhape/x402-merchant-sdk",
3
- "version": "0.2.1",
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": { ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" } },
9
- "files": ["dist", "README.md"],
10
- "keywords": ["x402", "payments", "usdc", "base", "merchant", "paywall", "api", "agents"],
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": { "type": "git", "url": "https://github.com/seedhape/seedhape.git", "directory": "packages/merchant-sdk" },
13
- "bugs": { "url": "https://github.com/seedhape/seedhape/issues" },
14
- "publishConfig": { "access": "public" },
15
- "dependencies": {}
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
  }