@wtflabs/x402 0.0.1-beta.4 → 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-G6WN2WYX.mjs → chunk-TAYXZJPR.mjs} +101 -16
  30. package/dist/esm/chunk-TAYXZJPR.mjs.map +1 -0
  31. package/dist/esm/{chunk-2AM3S66N.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-G6WN2WYX.mjs.map +0 -1
  77. package/dist/esm/chunk-UCBE7FDY.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-2AM3S66N.mjs.map → chunk-URGZOTVQ.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  export { PaymentRequirementsSelector, createPaymentHeader, preparePaymentHeader, selectPaymentRequirements, signPaymentHeader } from './client/index.js';
2
2
  export { Supported, settle, verify } from './facilitator/index.js';
3
3
  import './config-Dfuvno71.js';
4
- import './x402Specs-CYq5tSY1.js';
4
+ import './x402Specs-BtRXj67U.js';
5
5
  import 'zod';
6
6
  import './wallet-CQ0Fe_M5.js';
7
7
  import './wallet-SJKJpUgQ.js';
package/dist/cjs/index.js CHANGED
@@ -202,6 +202,21 @@ var permit2Types = {
202
202
  { name: "amount", type: "uint256" }
203
203
  ]
204
204
  };
205
+ var permit2WitnessTypes = {
206
+ PermitWitnessTransferFrom: [
207
+ { name: "permitted", type: "TokenPermissions" },
208
+ { name: "spender", type: "address" },
209
+ { name: "nonce", type: "uint256" },
210
+ { name: "deadline", type: "uint256" },
211
+ { name: "witness", type: "Witness" }
212
+ ],
213
+ TokenPermissions: [
214
+ { name: "token", type: "address" },
215
+ { name: "amount", type: "uint256" }
216
+ ],
217
+ Witness: [{ name: "to", type: "address" }]
218
+ };
219
+ var WITNESS_TYPE_STRING = "Witness(address to)";
205
220
  var permit2ABI = [
206
221
  {
207
222
  inputs: [
@@ -271,6 +286,45 @@ var permit2ABI = [
271
286
  outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
272
287
  stateMutability: "view",
273
288
  type: "function"
289
+ },
290
+ {
291
+ inputs: [
292
+ {
293
+ components: [
294
+ {
295
+ components: [
296
+ { internalType: "address", name: "token", type: "address" },
297
+ { internalType: "uint256", name: "amount", type: "uint256" }
298
+ ],
299
+ internalType: "struct ISignatureTransfer.TokenPermissions",
300
+ name: "permitted",
301
+ type: "tuple"
302
+ },
303
+ { internalType: "uint256", name: "nonce", type: "uint256" },
304
+ { internalType: "uint256", name: "deadline", type: "uint256" }
305
+ ],
306
+ internalType: "struct ISignatureTransfer.PermitTransferFrom",
307
+ name: "permit",
308
+ type: "tuple"
309
+ },
310
+ {
311
+ components: [
312
+ { internalType: "address", name: "to", type: "address" },
313
+ { internalType: "uint256", name: "requestedAmount", type: "uint256" }
314
+ ],
315
+ internalType: "struct ISignatureTransfer.SignatureTransferDetails",
316
+ name: "transferDetails",
317
+ type: "tuple"
318
+ },
319
+ { internalType: "address", name: "owner", type: "address" },
320
+ { internalType: "bytes32", name: "witness", type: "bytes32" },
321
+ { internalType: "string", name: "witnessTypeString", type: "string" },
322
+ { internalType: "bytes", name: "signature", type: "bytes" }
323
+ ],
324
+ name: "permitWitnessTransferFrom",
325
+ outputs: [],
326
+ stateMutability: "nonpayable",
327
+ type: "function"
274
328
  }
275
329
  ];
276
330
 
@@ -1237,6 +1291,8 @@ var ErrorReasons = [
1237
1291
  "invalid_authorization_type",
1238
1292
  "invalid_permit_signature",
1239
1293
  "invalid_permit2_signature",
1294
+ "invalid_permit2_witness_signature",
1295
+ "witness_recipient_mismatch",
1240
1296
  "permit_expired",
1241
1297
  "permit2_expired",
1242
1298
  "permit2_not_approved",
@@ -1244,6 +1300,7 @@ var ErrorReasons = [
1244
1300
  "invalid_spender_address",
1245
1301
  "token_mismatch",
1246
1302
  "insufficient_payment_amount",
1303
+ "insufficient_token_balance",
1247
1304
  "transaction_failed",
1248
1305
  "settlement_failed"
1249
1306
  ];
@@ -1286,7 +1343,9 @@ var Permit2EvmPayloadAuthorizationSchema = import_zod3.z.object({
1286
1343
  token: import_zod3.z.string().regex(EvmAddressRegex),
1287
1344
  amount: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
1288
1345
  deadline: import_zod3.z.string().refine(isInteger),
1289
- nonce: import_zod3.z.string().refine(isInteger)
1346
+ nonce: import_zod3.z.string().refine(isInteger),
1347
+ to: import_zod3.z.string().regex(EvmAddressRegex).optional()
1348
+ // Witness: binds recipient address to signature
1290
1349
  });
1291
1350
  var ExactEvmPayloadSchema = import_zod3.z.discriminatedUnion("authorizationType", [
1292
1351
  import_zod3.z.object({
@@ -2690,11 +2749,41 @@ async function verify4(client, payload, paymentRequirements) {
2690
2749
  };
2691
2750
  }
2692
2751
  const permit2Payload = payload.payload;
2693
- const { owner, spender, token, amount, deadline, nonce } = permit2Payload.authorization;
2752
+ const { owner, spender, token, amount, deadline, nonce, to } = permit2Payload.authorization;
2694
2753
  const chainId = getNetworkId(payload.network);
2695
2754
  const tokenAddress = (0, import_viem6.getAddress)(token);
2696
2755
  const ownerAddress = (0, import_viem6.getAddress)(owner);
2697
- const permit2TypedData = {
2756
+ const hasWitness = !!to;
2757
+ if (hasWitness) {
2758
+ if ((0, import_viem6.getAddress)(to) !== (0, import_viem6.getAddress)(paymentRequirements.payTo)) {
2759
+ return {
2760
+ isValid: false,
2761
+ invalidReason: "witness_recipient_mismatch",
2762
+ payer: owner
2763
+ };
2764
+ }
2765
+ }
2766
+ const permit2TypedData = hasWitness ? {
2767
+ types: permit2WitnessTypes,
2768
+ domain: {
2769
+ name: "Permit2",
2770
+ chainId,
2771
+ verifyingContract: PERMIT2_ADDRESS
2772
+ },
2773
+ primaryType: "PermitWitnessTransferFrom",
2774
+ message: {
2775
+ permitted: {
2776
+ token: tokenAddress,
2777
+ amount
2778
+ },
2779
+ spender: (0, import_viem6.getAddress)(spender),
2780
+ nonce,
2781
+ deadline,
2782
+ witness: {
2783
+ to: (0, import_viem6.getAddress)(to)
2784
+ }
2785
+ }
2786
+ } : {
2698
2787
  types: permit2Types,
2699
2788
  domain: {
2700
2789
  name: "Permit2",
@@ -2720,7 +2809,7 @@ async function verify4(client, payload, paymentRequirements) {
2720
2809
  if (!recoveredAddress) {
2721
2810
  return {
2722
2811
  isValid: false,
2723
- invalidReason: "invalid_permit2_signature",
2812
+ invalidReason: hasWitness ? "invalid_permit2_witness_signature" : "invalid_permit2_signature",
2724
2813
  payer: owner
2725
2814
  };
2726
2815
  }
@@ -2795,10 +2884,34 @@ async function settle4(wallet, paymentPayload, paymentRequirements) {
2795
2884
  payer: permit2Payload.authorization.owner
2796
2885
  };
2797
2886
  }
2798
- const { owner, token, amount, deadline, nonce } = permit2Payload.authorization;
2887
+ const { owner, token, amount, deadline, nonce, to } = permit2Payload.authorization;
2799
2888
  const tokenAddress = (0, import_viem6.getAddress)(token);
2800
2889
  const ownerAddress = (0, import_viem6.getAddress)(owner);
2801
- const tx = await wallet.writeContract({
2890
+ const hasWitness = !!to;
2891
+ const tx = hasWitness ? await wallet.writeContract({
2892
+ address: PERMIT2_ADDRESS,
2893
+ abi: permit2ABI,
2894
+ functionName: "permitWitnessTransferFrom",
2895
+ args: [
2896
+ {
2897
+ permitted: {
2898
+ token: tokenAddress,
2899
+ amount: BigInt(amount)
2900
+ },
2901
+ nonce: BigInt(nonce),
2902
+ deadline: BigInt(deadline)
2903
+ },
2904
+ {
2905
+ to: paymentRequirements.payTo,
2906
+ requestedAmount: BigInt(amount)
2907
+ },
2908
+ ownerAddress,
2909
+ (0, import_viem6.keccak256)((0, import_viem6.encodeAbiParameters)([{ type: "address", name: "to" }], [(0, import_viem6.getAddress)(to)])),
2910
+ WITNESS_TYPE_STRING,
2911
+ permit2Payload.signature
2912
+ ],
2913
+ chain: wallet.chain
2914
+ }) : await wallet.writeContract({
2802
2915
  address: PERMIT2_ADDRESS,
2803
2916
  abi: permit2ABI,
2804
2917
  functionName: "permitTransferFrom",