@pincerpay/merchant 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,28 +5,29 @@
5
5
  [![license](https://img.shields.io/npm/l/@pincerpay/merchant?style=flat-square)](https://github.com/ds1/pincerpay/blob/master/LICENSE)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
7
7
 
8
- Merchant SDK for accepting on-chain USDC payments from AI agents via the [x402 protocol](https://x402.org). Supports Express, Hono, and Next.js.
8
+ Merchant SDK for accepting on-chain USDC payments from AI agents via the [x402 protocol](https://x402.org). Ships a Hono middleware that runs natively in Hono apps and inside Next.js App Router via `hono/vercel`.
9
9
 
10
10
  > **ESM Required:** Your project must have `"type": "module"` in package.json. This package is ESM-only.
11
11
 
12
12
  ## Install
13
13
 
14
14
  ```bash
15
- npm install @pincerpay/merchant
15
+ npm install @pincerpay/merchant hono
16
16
  ```
17
17
 
18
18
  ## Quick Start
19
19
 
20
- ### Express
20
+ ### Hono
21
21
 
22
22
  ```typescript
23
- import express from "express";
24
- import { pincerpay } from "@pincerpay/merchant/express";
23
+ import { Hono } from "hono";
24
+ import { createPincerPayMiddleware } from "@pincerpay/merchant/nextjs";
25
25
 
26
- const app = express();
26
+ const app = new Hono();
27
27
 
28
28
  app.use(
29
- pincerpay({
29
+ "*",
30
+ createPincerPayMiddleware({
30
31
  apiKey: process.env.PINCERPAY_API_KEY!,
31
32
  merchantAddress: "YOUR_SOLANA_ADDRESS",
32
33
  routes: {
@@ -44,26 +45,29 @@ app.use(
44
45
  })
45
46
  );
46
47
 
47
- app.get("/api/weather", (req, res) => {
48
- res.json({ temp: 72, unit: "F" });
49
- });
48
+ app.get("/api/weather", (c) => c.json({ temp: 72, unit: "F" }));
50
49
 
51
- app.listen(3000);
50
+ export default app;
52
51
  ```
53
52
 
54
- ### Hono
53
+ ### Next.js (App Router)
54
+
55
+ Next.js doesn't have native x402 middleware support. Use Hono as a lightweight handler inside a catch-all App Router route:
55
56
 
56
57
  ```typescript
58
+ // app/api/[...route]/route.ts
57
59
  import { Hono } from "hono";
58
- import { pincerpayHono } from "@pincerpay/merchant/hono";
60
+ import { handle } from "hono/vercel";
61
+ import { createPincerPayMiddleware } from "@pincerpay/merchant/nextjs";
59
62
 
60
- const app = new Hono();
63
+ const app = new Hono().basePath("/api");
61
64
 
62
65
  app.use(
63
66
  "*",
64
- pincerpayHono({
67
+ createPincerPayMiddleware({
65
68
  apiKey: process.env.PINCERPAY_API_KEY!,
66
69
  merchantAddress: "YOUR_SOLANA_ADDRESS",
70
+ syncFacilitatorOnStart: false, // Avoids build-time network call during prerendering
67
71
  routes: {
68
72
  "GET /api/weather": {
69
73
  price: "0.01",
@@ -74,58 +78,117 @@ app.use(
74
78
  })
75
79
  );
76
80
 
77
- app.get("/api/weather", (c) => c.json({ temp: 72 }));
81
+ app.get("/weather", (c) => c.json({ temp: 72 }));
78
82
 
79
- export default app;
83
+ export const GET = handle(app);
84
+ export const POST = handle(app);
80
85
  ```
81
86
 
82
- ### Next.js (Hono Adapter)
87
+ > **Note:** `basePath("/api")` must match the catch-all route location. Route handlers use paths relative to basePath (`/weather` serves `/api/weather`).
83
88
 
84
- Next.js doesn't have native x402 middleware support. Use Hono as a lightweight handler inside a catch-all App Router route:
89
+ ### Express
90
+
91
+ Express adapter is on the roadmap. Use Hono today — it runs anywhere Express does and is a drop-in for most paywall workloads. Track [the Express adapter issue](https://github.com/ds1/pincerpay/issues) for the upcoming release.
92
+
93
+ ## Multi-chain Receiving Wallets
94
+
95
+ > **How routing works:** Agents pay on whichever chain they hold USDC; PincerPay routes settlement to your registered wallet on that chain. **No cross-chain conversion happens.** If you accept Solana and Polygon and an agent pays on Polygon, USDC arrives in your Polygon wallet.
96
+
97
+ Solana and EVM addresses are categorically different formats — a single string can't hold both. Use `merchantAddresses` to bind one wallet per chain:
98
+
99
+ ```typescript
100
+ // Single-chain merchant (legacy — still supported)
101
+ createPincerPayMiddleware({
102
+ apiKey: process.env.PINCERPAY_API_KEY!,
103
+ merchantAddress: "GjsWy1viAxWZkb4VyLVz3oU7sNpvyuKXnRu11uUybNgm",
104
+ routes: {
105
+ "GET /api/weather": { price: "0.01", chain: "solana" },
106
+ },
107
+ });
108
+
109
+ // Multi-chain merchant (recommended)
110
+ createPincerPayMiddleware({
111
+ apiKey: process.env.PINCERPAY_API_KEY!,
112
+ merchantAddresses: {
113
+ solana: process.env.MERCHANT_ADDRESS_SOLANA!, // Solana base58
114
+ polygon: process.env.MERCHANT_ADDRESS_POLYGON!, // EVM 0x-hex
115
+ base: process.env.MERCHANT_ADDRESS_BASE!, // EVM 0x-hex
116
+ },
117
+ routes: {
118
+ "POST /api/trade": {
119
+ price: "0.05",
120
+ chains: ["solana", "polygon", "base"],
121
+ },
122
+ },
123
+ });
124
+ ```
125
+
126
+ **Resolution rule.** For each route × chain combination, the middleware resolves `payTo` in this order:
127
+ 1. `merchantAddresses[chainShorthand]` (case-insensitive key match)
128
+ 2. `merchantAddress` (legacy single-string fallback)
129
+ 3. Throws at middleware construction with a chain-named error.
130
+
131
+ You can have both fields set: `merchantAddresses` wins for chains in the map, `merchantAddress` covers the rest.
132
+
133
+ **Format validation is fail-fast.** A Solana base58 address under a `polygon` key (or vice versa) throws at init with a chain-named error message — not at request time, not at settle time.
134
+
135
+ ### Troubleshooting
136
+
137
+ To check which address PincerPay would actually use for a given chain in your config:
138
+
139
+ ```typescript
140
+ import { resolveMerchantAddress } from "@pincerpay/core";
141
+
142
+ resolveMerchantAddress(config, "polygon"); // "0x..."
143
+ resolveMerchantAddress(config, "solana"); // "GjsW..."
144
+ ```
145
+
146
+ ## Reading the Verified Payer
147
+
148
+ After successful settlement, the middleware surfaces the verified payer (and the rest of the settlement metadata) on the Hono request context under the `pincerpay` key. Your route handlers can attribute the action to the paying agent without re-decoding the `X-PAYMENT` request header.
85
149
 
86
150
  ```typescript
87
- // app/api/[...route]/route.ts
88
151
  import { Hono } from "hono";
89
- import { handle } from "hono/vercel";
90
- import { pincerpayHono } from "@pincerpay/merchant/hono";
152
+ import {
153
+ createPincerPayMiddleware,
154
+ type PincerPayContextVariables,
155
+ } from "@pincerpay/merchant/nextjs";
91
156
 
92
- const app = new Hono().basePath("/api");
157
+ const app = new Hono<{ Variables: PincerPayContextVariables }>();
93
158
 
94
159
  app.use(
95
160
  "*",
96
- pincerpayHono({
161
+ createPincerPayMiddleware({
97
162
  apiKey: process.env.PINCERPAY_API_KEY!,
98
163
  merchantAddress: "YOUR_SOLANA_ADDRESS",
99
- syncFacilitatorOnStart: false, // Avoids build-time network call during prerendering
100
164
  routes: {
101
- "GET /api/weather": {
102
- price: "0.01",
103
- chain: "solana",
104
- description: "Current weather data",
105
- },
165
+ "POST /api/trade": { price: "0.05", chain: "solana", description: "Place trade" },
106
166
  },
107
167
  })
108
168
  );
109
169
 
110
- app.get("/weather", (c) => c.json({ temp: 72 }));
170
+ app.post("/api/trade", async (c) => {
171
+ const { payer, transaction, network } = c.get("pincerpay");
172
+ // payer -> verified agent wallet (Solana base58 or EVM 0x-hex)
173
+ // transaction -> settlement tx hash
174
+ // network -> CAIP-2 network id (e.g., "solana:5eykt4...", "eip155:8453")
111
175
 
112
- export const GET = handle(app);
113
- export const POST = handle(app);
176
+ await recordTrade({ agentWallet: payer, txHash: transaction });
177
+ return c.json({ ok: true });
178
+ });
114
179
  ```
115
180
 
116
- Install: `npm install @pincerpay/merchant hono`
181
+ `payer` comes from the facilitator's verified settle response — not the unverified `X-PAYMENT` request header. It is canonical across schemes (EVM `authorization.from`, Solana signer, etc. are all normalized to a single string).
117
182
 
118
- > **Note:** `basePath("/api")` must match the catch-all route location. Route handlers use paths relative to basePath (`/weather` serves `/api/weather`).
119
-
120
- ## API Reference
183
+ > **Don't re-decode `X-PAYMENT` to extract the payer.** The request header carries an unverified, scheme-specific payload. The middleware already verifies, settles, and surfaces the canonical payer on `c.get("pincerpay")`. If you find yourself probing `payload.authorization.from` / `payload.from` / `payload.signer`, stop — read `c.get("pincerpay").payer` instead.
121
184
 
122
- ### `pincerpay(config): Express.RequestHandler`
185
+ The same `payer` field is also included in the base64-encoded `payment-response` response header for clients that bypass the middleware and post directly to `/v1/settle`.
123
186
 
124
- Express middleware that intercepts requests matching configured routes and returns HTTP 402 with x402 payment requirements.
187
+ ## API Reference
125
188
 
126
- ### `pincerpayHono(config): HonoMiddleware`
189
+ ### `createPincerPayMiddleware(config): Hono.MiddlewareHandler`
127
190
 
128
- Hono middleware with identical behavior. Also used for Next.js via the Hono adapter pattern (see Next.js example above).
191
+ Hono middleware that intercepts requests matching configured routes and returns HTTP 402 with x402 payment requirements. On a successful payment, settles via the PincerPay facilitator and sets `c.set("pincerpay", { payer, transaction, network })` before passing to the next handler. Used directly in Hono apps and inside Next.js App Router via `hono/vercel`.
129
192
 
130
193
  ### `PincerPayClient`
131
194
 
@@ -151,7 +214,10 @@ const supported = await client.getSupported();
151
214
  ```typescript
152
215
  interface PincerPayConfig {
153
216
  apiKey: string;
154
- merchantAddress: string;
217
+ /** Single-chain receiving wallet (legacy / fallback). At least one of `merchantAddress` or `merchantAddresses` must be set. */
218
+ merchantAddress?: string;
219
+ /** Per-chain receiving wallets. Keys are chain shorthands ("solana", "polygon", "base", "solana-devnet", ...). */
220
+ merchantAddresses?: Record<string, string>;
155
221
  facilitatorUrl?: string; // defaults to https://facilitator.pincerpay.com
156
222
  routes: Record<string, RoutePaywallConfig>;
157
223
  syncFacilitatorOnStart?: boolean; // defer facilitator sync to first request (default: false)
@@ -163,6 +229,16 @@ interface RoutePaywallConfig {
163
229
  chains?: string[]; // Multiple chains
164
230
  description?: string; // Human-readable description
165
231
  }
232
+
233
+ interface PincerPayPaymentInfo {
234
+ payer: string; // Verified agent wallet (Solana base58 or EVM 0x-hex)
235
+ transaction: string; // Settlement transaction hash
236
+ network: string; // CAIP-2 network id
237
+ }
238
+
239
+ type PincerPayContextVariables = {
240
+ pincerpay: PincerPayPaymentInfo;
241
+ };
166
242
  ```
167
243
 
168
244
  ### Utility Functions
@@ -184,7 +260,7 @@ getUsdcAsset("base"); // USDC contract address for Base
184
260
  ### Multi-chain pricing
185
261
 
186
262
  ```typescript
187
- pincerpay({
263
+ createPincerPayMiddleware({
188
264
  apiKey: process.env.PINCERPAY_API_KEY!,
189
265
  merchantAddress: "YOUR_ADDRESS",
190
266
  routes: {
@@ -202,7 +278,7 @@ pincerpay({
202
278
  Routes not listed in `routes` pass through without payment. Only matching `METHOD /path` patterns trigger the 402 paywall.
203
279
 
204
280
  ```typescript
205
- pincerpay({
281
+ createPincerPayMiddleware({
206
282
  apiKey: process.env.PINCERPAY_API_KEY!,
207
283
  merchantAddress: "YOUR_ADDRESS",
208
284
  routes: {
@@ -244,10 +320,10 @@ Your webhook secret is in the [dashboard settings](https://www.pincerpay.com/das
244
320
 
245
321
  ```typescript
246
322
  // Bad
247
- pincerpay({ apiKey: "pp_live_abc123...", ... });
323
+ createPincerPayMiddleware({ apiKey: "pp_live_abc123...", ... });
248
324
 
249
325
  // Good
250
- pincerpay({ apiKey: process.env.PINCERPAY_API_KEY!, ... });
326
+ createPincerPayMiddleware({ apiKey: process.env.PINCERPAY_API_KEY!, ... });
251
327
  ```
252
328
 
253
329
  ### Don't use the merchant SDK on the agent side
@@ -257,3 +333,7 @@ The merchant SDK is for servers accepting payments. Agents should use `@pincerpa
257
333
  ### Don't set price to "0"
258
334
 
259
335
  A price of "0" will still trigger the 402 flow. If a route should be free, omit it from the `routes` config.
336
+
337
+ ### Don't re-decode `X-PAYMENT` to find the payer
338
+
339
+ The verified payer is on `c.get("pincerpay").payer` after the middleware settles. Reading it from the request header bypasses verification and forces scheme-specific shape probing — see "Reading the Verified Payer" above.
package/dist/client.d.ts CHANGED
@@ -6,7 +6,8 @@ import type { PincerPayConfig, RoutePaywallConfig } from "@pincerpay/core";
6
6
  export declare class PincerPayClient {
7
7
  readonly facilitatorUrl: string;
8
8
  readonly apiKey: string;
9
- readonly merchantAddress: string;
9
+ readonly merchantAddress?: string;
10
+ readonly merchantAddresses?: Record<string, string>;
10
11
  constructor(config: PincerPayConfig);
11
12
  private request;
12
13
  verify(paymentPayload: unknown, paymentRequirements: unknown): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAGzB;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;gBAErB,MAAM,EAAE,eAAe;YAMrB,OAAO;IAmBf,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO;IAO5D,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO;IAO5D,YAAY;IAIZ,SAAS,CAAC,MAAM,EAAE,MAAM;CAG/B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAGtE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAM3D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAGzB;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAExC,MAAM,EAAE,eAAe;YAOrB,OAAO;IAmBf,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO;IAO5D,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO;IAO5D,YAAY;IAIZ,SAAS,CAAC,MAAM,EAAE,MAAM;CAG/B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAGtE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAM3D"}
package/dist/client.js CHANGED
@@ -8,10 +8,12 @@ export class PincerPayClient {
8
8
  facilitatorUrl;
9
9
  apiKey;
10
10
  merchantAddress;
11
+ merchantAddresses;
11
12
  constructor(config) {
12
13
  this.facilitatorUrl = config.facilitatorUrl ?? DEFAULT_FACILITATOR_URL;
13
14
  this.apiKey = config.apiKey;
14
15
  this.merchantAddress = config.merchantAddress;
16
+ this.merchantAddresses = config.merchantAddresses;
15
17
  }
16
18
  async request(path, body) {
17
19
  const url = `${this.facilitatorUrl}${path}`;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { PincerPayConfig } from "@pincerpay/core";
1
+ import type { PincerPayConfig, PincerPayPaymentInfo, PincerPayContextVariables } from "@pincerpay/core";
2
+ export type { PincerPayPaymentInfo, PincerPayContextVariables };
2
3
  /**
3
4
  * Lightweight Next.js / Hono middleware for PincerPay x402 paywalls.
4
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/middleware/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAoBvD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAmMzD,GAAG,CACV"}
1
+ {"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/middleware/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,iBAAiB,CAAC;AAWzB,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,CAAC;AAahE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GA+NzD,GAAG,CACV"}
@@ -1,4 +1,4 @@
1
- import { resolveChain, DEFAULT_FACILITATOR_URL, API_KEY_HEADER, FACILITATOR_ROUTES, } from "@pincerpay/core";
1
+ import { resolveChain, resolveMerchantAddress, validateMerchantAddressForChain, DEFAULT_FACILITATOR_URL, API_KEY_HEADER, FACILITATOR_ROUTES, } from "@pincerpay/core";
2
2
  /**
3
3
  * Convert human-readable USDC price (e.g., "0.01") to base units (e.g., "10000").
4
4
  */
@@ -59,10 +59,12 @@ export function createPincerPayMiddleware(config) {
59
59
  })
60
60
  .catch(() => new Map());
61
61
  const resolvedRoutes = new Map();
62
- // Default extra fields per namespace (used as fallback if facilitator fetch fails)
63
- function defaultExtra(namespace) {
62
+ // Default extra fields per namespace. `feePayer` defaults to the resolved
63
+ // Solana payTo and is overridden by the facilitator's `/supported` response
64
+ // once it lands.
65
+ function defaultExtra(namespace, payTo) {
64
66
  return namespace === "solana"
65
- ? { feePayer: config.merchantAddress }
67
+ ? { feePayer: payTo }
66
68
  : { name: "USD Coin", version: "2" };
67
69
  }
68
70
  for (const [pattern, routeConfig] of Object.entries(config.routes)) {
@@ -72,14 +74,22 @@ export function createPincerPayMiddleware(config) {
72
74
  const chain = resolveChain(chainShorthand);
73
75
  if (!chain)
74
76
  throw new Error(`Unknown chain: ${chainShorthand}`);
77
+ const payTo = resolveMerchantAddress(config, chainShorthand);
78
+ if (!payTo) {
79
+ throw new Error(`[pincerpay] Route ${JSON.stringify(pattern)} targets chain ${JSON.stringify(chainShorthand)} but no receiving wallet was found. Set merchantAddresses.${chainShorthand} or a legacy merchantAddress.`);
80
+ }
81
+ const formatError = validateMerchantAddressForChain(payTo, chainShorthand);
82
+ if (formatError) {
83
+ throw new Error(`[pincerpay] Route ${JSON.stringify(pattern)} targets chain ${JSON.stringify(chainShorthand)}: ${formatError}`);
84
+ }
75
85
  return {
76
86
  scheme: "exact",
77
87
  network: chain.caip2Id,
78
88
  amount: toBaseUnits(routeConfig.price),
79
89
  asset: chain.usdcAddress,
80
- payTo: config.merchantAddress,
90
+ payTo,
81
91
  maxTimeoutSeconds: 300,
82
- extra: defaultExtra(chain.namespace),
92
+ extra: defaultExtra(chain.namespace, payTo),
83
93
  };
84
94
  });
85
95
  resolvedRoutes.set(pattern, {
@@ -162,12 +172,22 @@ export function createPincerPayMiddleware(config) {
162
172
  message: settle.errorMessage,
163
173
  }, 402);
164
174
  }
165
- // Payment succeeded — attach settlement response header and serve resource
175
+ // Payment succeeded — surface verified payer on the request context
176
+ // so route handlers can attribute the action without re-decoding X-PAYMENT.
177
+ const paymentInfo = {
178
+ payer: settle.payer ?? "",
179
+ transaction: settle.transaction ?? "",
180
+ network: settle.network ?? "",
181
+ };
182
+ c.set("pincerpay", paymentInfo);
183
+ // Attach settlement response header (clients that bypass middleware
184
+ // can read the canonical verified payer here too).
166
185
  const settleResponse = {
167
186
  x402Version: 2,
168
187
  success: true,
169
- transaction: settle.transaction,
170
- network: settle.network,
188
+ transaction: paymentInfo.transaction,
189
+ network: paymentInfo.network,
190
+ payer: paymentInfo.payer,
171
191
  };
172
192
  c.header("payment-response", Buffer.from(JSON.stringify(settleResponse)).toString("base64"));
173
193
  return next();
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/middleware/nextjs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/middleware/nextjs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pincerpay/merchant",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "description": "Merchant SDK for PincerPay. Lightweight Next.js middleware for accepting USDC payments from AI agents via x402.",
6
6
  "license": "MIT",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "zod": "^3.24",
58
- "@pincerpay/core": "0.5.0"
58
+ "@pincerpay/core": "0.6.0"
59
59
  },
60
60
  "peerDependencies": {
61
61
  "hono": "^4"