@wtflabs/x402 0.0.1-beta.3 → 0.0.1-beta.5

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.
Files changed (80) hide show
  1. package/dist/cjs/client/index.d.ts +1 -1
  2. package/dist/cjs/client/index.js +6 -1
  3. package/dist/cjs/client/index.js.map +1 -1
  4. package/dist/cjs/facilitator/index.d.ts +1 -1
  5. package/dist/cjs/facilitator/index.js +119 -6
  6. package/dist/cjs/facilitator/index.js.map +1 -1
  7. package/dist/cjs/index.d.ts +1 -1
  8. package/dist/cjs/index.js +119 -6
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/{middleware-Brgsx32F.d.ts → middleware-nzDe-TDJ.d.ts} +1 -1
  11. package/dist/cjs/paywall/index.d.ts +1 -1
  12. package/dist/cjs/schemes/index.d.ts +25 -7
  13. package/dist/cjs/schemes/index.js +151 -13
  14. package/dist/cjs/schemes/index.js.map +1 -1
  15. package/dist/cjs/shared/index.d.ts +2 -2
  16. package/dist/cjs/shared/index.js +6 -1
  17. package/dist/cjs/shared/index.js.map +1 -1
  18. package/dist/cjs/types/index.d.ts +93 -4
  19. package/dist/cjs/types/index.js +64 -1
  20. package/dist/cjs/types/index.js.map +1 -1
  21. package/dist/cjs/verify/index.d.ts +2 -2
  22. package/dist/cjs/verify/index.js +6 -1
  23. package/dist/cjs/verify/index.js.map +1 -1
  24. package/dist/{esm/x402Specs-CYq5tSY1.d.mts → cjs/x402Specs-BtRXj67U.d.ts} +43 -10
  25. package/dist/esm/{chunk-RX2JKK4O.mjs → chunk-J3FMDNC3.mjs} +2 -2
  26. package/dist/esm/{chunk-34YNR4LY.mjs → chunk-K5SAFQCZ.mjs} +3 -3
  27. package/dist/esm/{chunk-UCBE7FDY.mjs → chunk-NPWDNT2P.mjs} +67 -2
  28. package/dist/esm/chunk-NPWDNT2P.mjs.map +1 -0
  29. package/dist/esm/{chunk-ZEZOGZ3K.mjs → chunk-TAYXZJPR.mjs} +101 -16
  30. package/dist/esm/chunk-TAYXZJPR.mjs.map +1 -0
  31. package/dist/esm/{chunk-CJV3GAPG.mjs → chunk-URGZOTVQ.mjs} +3 -3
  32. package/dist/esm/client/index.d.mts +1 -1
  33. package/dist/esm/client/index.mjs +3 -3
  34. package/dist/esm/facilitator/index.d.mts +1 -1
  35. package/dist/esm/facilitator/index.mjs +4 -4
  36. package/dist/esm/index.d.mts +1 -1
  37. package/dist/esm/index.mjs +5 -5
  38. package/dist/esm/{middleware-BSjsPDKM.d.mts → middleware-DSDucaQ5.d.mts} +1 -1
  39. package/dist/esm/paywall/index.d.mts +1 -1
  40. package/dist/esm/schemes/index.d.mts +25 -7
  41. package/dist/esm/schemes/index.mjs +3 -3
  42. package/dist/esm/shared/index.d.mts +2 -2
  43. package/dist/esm/shared/index.mjs +1 -1
  44. package/dist/esm/types/index.d.mts +93 -4
  45. package/dist/esm/types/index.mjs +1 -1
  46. package/dist/esm/verify/index.d.mts +2 -2
  47. package/dist/esm/verify/index.mjs +1 -1
  48. package/dist/{cjs/x402Specs-CYq5tSY1.d.ts → esm/x402Specs-BtRXj67U.d.mts} +43 -10
  49. package/package.json +15 -15
  50. package/dist/cjs/middleware-6_1ApcJn.d.ts +0 -93
  51. package/dist/cjs/middleware-B_ewwsQp.d.ts +0 -93
  52. package/dist/cjs/middleware-BwfW7mAs.d.ts +0 -93
  53. package/dist/cjs/middleware-CQb61c1k.d.ts +0 -93
  54. package/dist/cjs/middleware-DB9lqy9f.d.ts +0 -93
  55. package/dist/cjs/middleware-DcHctwQV.d.ts +0 -93
  56. package/dist/cjs/middleware-De0jD3Bp.d.ts +0 -93
  57. package/dist/cjs/middleware-HoFOmpgv.d.ts +0 -93
  58. package/dist/cjs/middleware-Y8AiAfYw.d.ts +0 -93
  59. package/dist/cjs/middleware-pnres9YM.d.ts +0 -93
  60. package/dist/cjs/network-RtNddYQk.d.ts +0 -11
  61. package/dist/cjs/rpc-Ca8eHCWz.d.ts +0 -35
  62. package/dist/cjs/wallet-BRWfOM5D.d.ts +0 -153
  63. package/dist/cjs/wallet-BYRAGtOB.d.ts +0 -153
  64. package/dist/cjs/wallet-BmEtlgEf.d.ts +0 -48
  65. package/dist/cjs/wallet-CNOAmyZ6.d.ts +0 -48
  66. package/dist/cjs/wallet-D1SoxFTw.d.ts +0 -48
  67. package/dist/cjs/wallet-SJ-hbjm9.d.ts +0 -153
  68. package/dist/cjs/wallet-ecnda4Aj.d.ts +0 -48
  69. package/dist/cjs/wallet-gP8Qoi-c.d.ts +0 -74
  70. package/dist/cjs/x402Specs-B7InXo2L.d.ts +0 -1065
  71. package/dist/cjs/x402Specs-BLH3j34O.d.ts +0 -1696
  72. package/dist/cjs/x402Specs-C7LipAZg.d.ts +0 -1715
  73. package/dist/cjs/x402Specs-CeajqonG.d.ts +0 -1696
  74. package/dist/cjs/x402Specs-qMujgEV5.d.ts +0 -1715
  75. package/dist/cjs/x402Specs-qUBCpcuz.d.ts +0 -1715
  76. package/dist/esm/chunk-UCBE7FDY.mjs.map +0 -1
  77. package/dist/esm/chunk-ZEZOGZ3K.mjs.map +0 -1
  78. /package/dist/esm/{chunk-RX2JKK4O.mjs.map → chunk-J3FMDNC3.mjs.map} +0 -0
  79. /package/dist/esm/{chunk-34YNR4LY.mjs.map → chunk-K5SAFQCZ.mjs.map} +0 -0
  80. /package/dist/esm/{chunk-CJV3GAPG.mjs.map → chunk-URGZOTVQ.mjs.map} +0 -0
@@ -315,6 +315,21 @@ var permit2Types = {
315
315
  { name: "amount", type: "uint256" }
316
316
  ]
317
317
  };
318
+ var permit2WitnessTypes = {
319
+ PermitWitnessTransferFrom: [
320
+ { name: "permitted", type: "TokenPermissions" },
321
+ { name: "spender", type: "address" },
322
+ { name: "nonce", type: "uint256" },
323
+ { name: "deadline", type: "uint256" },
324
+ { name: "witness", type: "Witness" }
325
+ ],
326
+ TokenPermissions: [
327
+ { name: "token", type: "address" },
328
+ { name: "amount", type: "uint256" }
329
+ ],
330
+ Witness: [{ name: "to", type: "address" }]
331
+ };
332
+ var WITNESS_TYPE_STRING = "Witness(address to)";
318
333
  var permit2ABI = [
319
334
  {
320
335
  inputs: [
@@ -384,6 +399,45 @@ var permit2ABI = [
384
399
  outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
385
400
  stateMutability: "view",
386
401
  type: "function"
402
+ },
403
+ {
404
+ inputs: [
405
+ {
406
+ components: [
407
+ {
408
+ components: [
409
+ { internalType: "address", name: "token", type: "address" },
410
+ { internalType: "uint256", name: "amount", type: "uint256" }
411
+ ],
412
+ internalType: "struct ISignatureTransfer.TokenPermissions",
413
+ name: "permitted",
414
+ type: "tuple"
415
+ },
416
+ { internalType: "uint256", name: "nonce", type: "uint256" },
417
+ { internalType: "uint256", name: "deadline", type: "uint256" }
418
+ ],
419
+ internalType: "struct ISignatureTransfer.PermitTransferFrom",
420
+ name: "permit",
421
+ type: "tuple"
422
+ },
423
+ {
424
+ components: [
425
+ { internalType: "address", name: "to", type: "address" },
426
+ { internalType: "uint256", name: "requestedAmount", type: "uint256" }
427
+ ],
428
+ internalType: "struct ISignatureTransfer.SignatureTransferDetails",
429
+ name: "transferDetails",
430
+ type: "tuple"
431
+ },
432
+ { internalType: "address", name: "owner", type: "address" },
433
+ { internalType: "bytes32", name: "witness", type: "bytes32" },
434
+ { internalType: "string", name: "witnessTypeString", type: "string" },
435
+ { internalType: "bytes", name: "signature", type: "bytes" }
436
+ ],
437
+ name: "permitWitnessTransferFrom",
438
+ outputs: [],
439
+ stateMutability: "nonpayable",
440
+ type: "function"
387
441
  }
388
442
  ];
389
443
 
@@ -1201,6 +1255,8 @@ var ErrorReasons = [
1201
1255
  "invalid_authorization_type",
1202
1256
  "invalid_permit_signature",
1203
1257
  "invalid_permit2_signature",
1258
+ "invalid_permit2_witness_signature",
1259
+ "witness_recipient_mismatch",
1204
1260
  "permit_expired",
1205
1261
  "permit2_expired",
1206
1262
  "permit2_not_approved",
@@ -1208,6 +1264,7 @@ var ErrorReasons = [
1208
1264
  "invalid_spender_address",
1209
1265
  "token_mismatch",
1210
1266
  "insufficient_payment_amount",
1267
+ "insufficient_token_balance",
1211
1268
  "transaction_failed",
1212
1269
  "settlement_failed"
1213
1270
  ];
@@ -1250,7 +1307,9 @@ var Permit2EvmPayloadAuthorizationSchema = import_zod3.z.object({
1250
1307
  token: import_zod3.z.string().regex(EvmAddressRegex),
1251
1308
  amount: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
1252
1309
  deadline: import_zod3.z.string().refine(isInteger),
1253
- nonce: import_zod3.z.string().refine(isInteger)
1310
+ nonce: import_zod3.z.string().refine(isInteger),
1311
+ to: import_zod3.z.string().regex(EvmAddressRegex).optional()
1312
+ // Witness: binds recipient address to signature
1254
1313
  });
1255
1314
  var ExactEvmPayloadSchema = import_zod3.z.discriminatedUnion("authorizationType", [
1256
1315
  import_zod3.z.object({
@@ -2295,11 +2354,41 @@ async function verify4(client, payload, paymentRequirements) {
2295
2354
  };
2296
2355
  }
2297
2356
  const permit2Payload = payload.payload;
2298
- const { owner, spender, token, amount, deadline, nonce } = permit2Payload.authorization;
2357
+ const { owner, spender, token, amount, deadline, nonce, to } = permit2Payload.authorization;
2299
2358
  const chainId = getNetworkId(payload.network);
2300
2359
  const tokenAddress = (0, import_viem5.getAddress)(token);
2301
2360
  const ownerAddress = (0, import_viem5.getAddress)(owner);
2302
- const permit2TypedData = {
2361
+ const hasWitness = !!to;
2362
+ if (hasWitness) {
2363
+ if ((0, import_viem5.getAddress)(to) !== (0, import_viem5.getAddress)(paymentRequirements.payTo)) {
2364
+ return {
2365
+ isValid: false,
2366
+ invalidReason: "witness_recipient_mismatch",
2367
+ payer: owner
2368
+ };
2369
+ }
2370
+ }
2371
+ const permit2TypedData = hasWitness ? {
2372
+ types: permit2WitnessTypes,
2373
+ domain: {
2374
+ name: "Permit2",
2375
+ chainId,
2376
+ verifyingContract: PERMIT2_ADDRESS
2377
+ },
2378
+ primaryType: "PermitWitnessTransferFrom",
2379
+ message: {
2380
+ permitted: {
2381
+ token: tokenAddress,
2382
+ amount
2383
+ },
2384
+ spender: (0, import_viem5.getAddress)(spender),
2385
+ nonce,
2386
+ deadline,
2387
+ witness: {
2388
+ to: (0, import_viem5.getAddress)(to)
2389
+ }
2390
+ }
2391
+ } : {
2303
2392
  types: permit2Types,
2304
2393
  domain: {
2305
2394
  name: "Permit2",
@@ -2325,7 +2414,7 @@ async function verify4(client, payload, paymentRequirements) {
2325
2414
  if (!recoveredAddress) {
2326
2415
  return {
2327
2416
  isValid: false,
2328
- invalidReason: "invalid_permit2_signature",
2417
+ invalidReason: hasWitness ? "invalid_permit2_witness_signature" : "invalid_permit2_signature",
2329
2418
  payer: owner
2330
2419
  };
2331
2420
  }
@@ -2400,10 +2489,34 @@ async function settle4(wallet, paymentPayload, paymentRequirements) {
2400
2489
  payer: permit2Payload.authorization.owner
2401
2490
  };
2402
2491
  }
2403
- const { owner, token, amount, deadline, nonce } = permit2Payload.authorization;
2492
+ const { owner, token, amount, deadline, nonce, to } = permit2Payload.authorization;
2404
2493
  const tokenAddress = (0, import_viem5.getAddress)(token);
2405
2494
  const ownerAddress = (0, import_viem5.getAddress)(owner);
2406
- const tx = await wallet.writeContract({
2495
+ const hasWitness = !!to;
2496
+ const tx = hasWitness ? await wallet.writeContract({
2497
+ address: PERMIT2_ADDRESS,
2498
+ abi: permit2ABI,
2499
+ functionName: "permitWitnessTransferFrom",
2500
+ args: [
2501
+ {
2502
+ permitted: {
2503
+ token: tokenAddress,
2504
+ amount: BigInt(amount)
2505
+ },
2506
+ nonce: BigInt(nonce),
2507
+ deadline: BigInt(deadline)
2508
+ },
2509
+ {
2510
+ to: paymentRequirements.payTo,
2511
+ requestedAmount: BigInt(amount)
2512
+ },
2513
+ ownerAddress,
2514
+ (0, import_viem5.keccak256)((0, import_viem5.encodeAbiParameters)([{ type: "address", name: "to" }], [(0, import_viem5.getAddress)(to)])),
2515
+ WITNESS_TYPE_STRING,
2516
+ permit2Payload.signature
2517
+ ],
2518
+ chain: wallet.chain
2519
+ }) : await wallet.writeContract({
2407
2520
  address: PERMIT2_ADDRESS,
2408
2521
  abi: permit2ABI,
2409
2522
  functionName: "permitTransferFrom",