mppx 0.6.28 → 0.6.29

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 (272) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/Challenge.d.ts.map +1 -1
  3. package/dist/Challenge.js +16 -10
  4. package/dist/Challenge.js.map +1 -1
  5. package/dist/Method.d.ts +1 -1
  6. package/dist/Method.d.ts.map +1 -1
  7. package/dist/client/Methods.d.ts +1 -0
  8. package/dist/client/Methods.d.ts.map +1 -1
  9. package/dist/client/Methods.js +1 -0
  10. package/dist/client/Methods.js.map +1 -1
  11. package/dist/client/Mppx.d.ts +3 -3
  12. package/dist/client/Mppx.d.ts.map +1 -1
  13. package/dist/client/Mppx.js +1 -0
  14. package/dist/client/Mppx.js.map +1 -1
  15. package/dist/client/Transport.d.ts +10 -3
  16. package/dist/client/Transport.d.ts.map +1 -1
  17. package/dist/client/Transport.js +60 -7
  18. package/dist/client/Transport.js.map +1 -1
  19. package/dist/client/index.d.ts +1 -1
  20. package/dist/client/index.d.ts.map +1 -1
  21. package/dist/client/index.js +1 -1
  22. package/dist/client/index.js.map +1 -1
  23. package/dist/client/internal/Fetch.d.ts +3 -0
  24. package/dist/client/internal/Fetch.d.ts.map +1 -1
  25. package/dist/client/internal/Fetch.js +12 -20
  26. package/dist/client/internal/Fetch.js.map +1 -1
  27. package/dist/evm/Assets.d.ts +2 -0
  28. package/dist/evm/Assets.d.ts.map +1 -0
  29. package/dist/evm/Assets.js +2 -0
  30. package/dist/evm/Assets.js.map +1 -0
  31. package/dist/evm/Chains.d.ts +5 -0
  32. package/dist/evm/Chains.d.ts.map +1 -0
  33. package/dist/evm/Chains.js +5 -0
  34. package/dist/evm/Chains.js.map +1 -0
  35. package/dist/evm/Methods.d.ts +68 -0
  36. package/dist/evm/Methods.d.ts.map +1 -0
  37. package/dist/evm/Methods.js +28 -0
  38. package/dist/evm/Methods.js.map +1 -0
  39. package/dist/evm/Types.d.ts +143 -0
  40. package/dist/evm/Types.d.ts.map +1 -0
  41. package/dist/evm/Types.js +102 -0
  42. package/dist/evm/Types.js.map +1 -0
  43. package/dist/evm/client/Charge.d.ts +102 -0
  44. package/dist/evm/client/Charge.d.ts.map +1 -0
  45. package/dist/evm/client/Charge.js +141 -0
  46. package/dist/evm/client/Charge.js.map +1 -0
  47. package/dist/evm/client/Methods.d.ts +81 -0
  48. package/dist/evm/client/Methods.d.ts.map +1 -0
  49. package/dist/evm/client/Methods.js +16 -0
  50. package/dist/evm/client/Methods.js.map +1 -0
  51. package/dist/evm/client/index.d.ts +6 -0
  52. package/dist/evm/client/index.d.ts.map +1 -0
  53. package/dist/evm/client/index.js +6 -0
  54. package/dist/evm/client/index.js.map +1 -0
  55. package/dist/evm/index.d.ts +9 -0
  56. package/dist/evm/index.d.ts.map +1 -0
  57. package/dist/evm/index.js +8 -0
  58. package/dist/evm/index.js.map +1 -0
  59. package/dist/evm/server/Charge.d.ts +62 -0
  60. package/dist/evm/server/Charge.d.ts.map +1 -0
  61. package/dist/evm/server/Charge.js +172 -0
  62. package/dist/evm/server/Charge.js.map +1 -0
  63. package/dist/evm/server/Methods.d.ts +80 -0
  64. package/dist/evm/server/Methods.d.ts.map +1 -0
  65. package/dist/evm/server/Methods.js +16 -0
  66. package/dist/evm/server/Methods.js.map +1 -0
  67. package/dist/evm/server/index.d.ts +6 -0
  68. package/dist/evm/server/index.d.ts.map +1 -0
  69. package/dist/evm/server/index.js +6 -0
  70. package/dist/evm/server/index.js.map +1 -0
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +2 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/internal/HeaderCodec.d.ts +18 -0
  76. package/dist/internal/HeaderCodec.d.ts.map +1 -0
  77. package/dist/internal/HeaderCodec.js +31 -0
  78. package/dist/internal/HeaderCodec.js.map +1 -0
  79. package/dist/middlewares/elysia.d.ts.map +1 -1
  80. package/dist/middlewares/elysia.js +2 -3
  81. package/dist/middlewares/elysia.js.map +1 -1
  82. package/dist/middlewares/express.js +2 -1
  83. package/dist/middlewares/express.js.map +1 -1
  84. package/dist/proxy/internal/Headers.d.ts.map +1 -1
  85. package/dist/proxy/internal/Headers.js +11 -1
  86. package/dist/proxy/internal/Headers.js.map +1 -1
  87. package/dist/proxy/services/openai.d.ts.map +1 -1
  88. package/dist/proxy/services/openai.js +2 -0
  89. package/dist/proxy/services/openai.js.map +1 -1
  90. package/dist/server/Methods.d.ts +1 -0
  91. package/dist/server/Methods.d.ts.map +1 -1
  92. package/dist/server/Methods.js +1 -0
  93. package/dist/server/Methods.js.map +1 -1
  94. package/dist/server/Mppx.d.ts.map +1 -1
  95. package/dist/server/Mppx.js +90 -12
  96. package/dist/server/Mppx.js.map +1 -1
  97. package/dist/server/Transport.d.ts +10 -0
  98. package/dist/server/Transport.d.ts.map +1 -1
  99. package/dist/server/Transport.js +9 -0
  100. package/dist/server/Transport.js.map +1 -1
  101. package/dist/server/index.d.ts +1 -1
  102. package/dist/server/index.d.ts.map +1 -1
  103. package/dist/server/index.js +1 -1
  104. package/dist/server/index.js.map +1 -1
  105. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  106. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  107. package/dist/stripe/server/internal/html.gen.js +1 -1
  108. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  109. package/dist/tempo/client/ChannelOps.d.ts +3 -3
  110. package/dist/tempo/client/ChannelOps.d.ts.map +1 -1
  111. package/dist/tempo/client/ChannelOps.js +13 -6
  112. package/dist/tempo/client/ChannelOps.js.map +1 -1
  113. package/dist/tempo/client/Charge.d.ts.map +1 -1
  114. package/dist/tempo/client/Charge.js +8 -5
  115. package/dist/tempo/client/Charge.js.map +1 -1
  116. package/dist/tempo/client/Methods.d.ts +0 -1
  117. package/dist/tempo/client/Methods.d.ts.map +1 -1
  118. package/dist/tempo/client/Session.d.ts +2 -4
  119. package/dist/tempo/client/Session.d.ts.map +1 -1
  120. package/dist/tempo/client/Session.js +10 -12
  121. package/dist/tempo/client/Session.js.map +1 -1
  122. package/dist/tempo/client/SessionManager.d.ts +3 -3
  123. package/dist/tempo/client/SessionManager.d.ts.map +1 -1
  124. package/dist/tempo/client/SessionManager.js +1 -1
  125. package/dist/tempo/client/SessionManager.js.map +1 -1
  126. package/dist/tempo/internal/account.d.ts +5 -0
  127. package/dist/tempo/internal/account.d.ts.map +1 -1
  128. package/dist/tempo/internal/account.js +8 -0
  129. package/dist/tempo/internal/account.js.map +1 -1
  130. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  131. package/dist/tempo/internal/fee-payer.js +5 -2
  132. package/dist/tempo/internal/fee-payer.js.map +1 -1
  133. package/dist/tempo/server/Charge.d.ts.map +1 -1
  134. package/dist/tempo/server/Charge.js +23 -1
  135. package/dist/tempo/server/Charge.js.map +1 -1
  136. package/dist/tempo/server/Session.d.ts.map +1 -1
  137. package/dist/tempo/server/Session.js +13 -12
  138. package/dist/tempo/server/Session.js.map +1 -1
  139. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  140. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  141. package/dist/tempo/server/internal/html.gen.js +1 -1
  142. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  143. package/dist/tempo/session/Chain.d.ts +2 -0
  144. package/dist/tempo/session/Chain.d.ts.map +1 -1
  145. package/dist/tempo/session/Chain.js +8 -8
  146. package/dist/tempo/session/Chain.js.map +1 -1
  147. package/dist/tempo/session/Voucher.d.ts +4 -3
  148. package/dist/tempo/session/Voucher.d.ts.map +1 -1
  149. package/dist/tempo/session/Voucher.js +71 -44
  150. package/dist/tempo/session/Voucher.js.map +1 -1
  151. package/dist/tempo/session/Ws.d.ts.map +1 -1
  152. package/dist/tempo/session/Ws.js +15 -0
  153. package/dist/tempo/session/Ws.js.map +1 -1
  154. package/dist/tempo/subscription/KeyAuthorization.d.ts +2 -2
  155. package/dist/x402/Assets.d.ts +29 -0
  156. package/dist/x402/Assets.d.ts.map +1 -0
  157. package/dist/x402/Assets.js +46 -0
  158. package/dist/x402/Assets.js.map +1 -0
  159. package/dist/x402/Header.d.ts +14 -0
  160. package/dist/x402/Header.d.ts.map +1 -0
  161. package/dist/x402/Header.js +18 -0
  162. package/dist/x402/Header.js.map +1 -0
  163. package/dist/x402/Types.d.ts +289 -0
  164. package/dist/x402/Types.d.ts.map +1 -0
  165. package/dist/x402/Types.js +139 -0
  166. package/dist/x402/Types.js.map +1 -0
  167. package/dist/x402/client/Exact.d.ts +38 -0
  168. package/dist/x402/client/Exact.d.ts.map +1 -0
  169. package/dist/x402/client/Exact.js +141 -0
  170. package/dist/x402/client/Exact.js.map +1 -0
  171. package/dist/x402/index.d.ts +6 -0
  172. package/dist/x402/index.d.ts.map +1 -0
  173. package/dist/x402/index.js +6 -0
  174. package/dist/x402/index.js.map +1 -0
  175. package/dist/x402/internal/ChallengeBrand.d.ts +5 -0
  176. package/dist/x402/internal/ChallengeBrand.d.ts.map +1 -0
  177. package/dist/x402/internal/ChallengeBrand.js +13 -0
  178. package/dist/x402/internal/ChallengeBrand.js.map +1 -0
  179. package/dist/x402/internal/RouteBinding.d.ts +8 -0
  180. package/dist/x402/internal/RouteBinding.d.ts.map +1 -0
  181. package/dist/x402/internal/RouteBinding.js +12 -0
  182. package/dist/x402/internal/RouteBinding.js.map +1 -0
  183. package/dist/x402/server/EvmCharge.d.ts +50 -0
  184. package/dist/x402/server/EvmCharge.d.ts.map +1 -0
  185. package/dist/x402/server/EvmCharge.js +301 -0
  186. package/dist/x402/server/EvmCharge.js.map +1 -0
  187. package/dist/x402/server/Facilitator.d.ts +12 -0
  188. package/dist/x402/server/Facilitator.d.ts.map +1 -0
  189. package/dist/x402/server/Facilitator.js +42 -0
  190. package/dist/x402/server/Facilitator.js.map +1 -0
  191. package/package.json +41 -21
  192. package/src/Challenge.test.ts +28 -0
  193. package/src/Challenge.ts +17 -10
  194. package/src/Method.ts +1 -1
  195. package/src/client/Methods.ts +1 -0
  196. package/src/client/Mppx.ts +4 -3
  197. package/src/client/Transport.test.ts +165 -30
  198. package/src/client/Transport.ts +76 -8
  199. package/src/client/index.ts +1 -1
  200. package/src/client/internal/Fetch.test.ts +31 -2
  201. package/src/client/internal/Fetch.ts +26 -19
  202. package/src/evm/Assets.ts +1 -0
  203. package/src/evm/Chains.ts +5 -0
  204. package/src/evm/Methods.ts +44 -0
  205. package/src/evm/PublicInterface.test-d.ts +109 -0
  206. package/src/evm/Types.ts +140 -0
  207. package/src/evm/client/Charge.test.ts +99 -0
  208. package/src/evm/client/Charge.ts +198 -0
  209. package/src/evm/client/Methods.ts +19 -0
  210. package/src/evm/client/index.ts +5 -0
  211. package/src/evm/index.ts +13 -0
  212. package/src/evm/server/Charge.test.ts +199 -0
  213. package/src/evm/server/Charge.ts +283 -0
  214. package/src/evm/server/Methods.ts +22 -0
  215. package/src/evm/server/index.ts +5 -0
  216. package/src/index.ts +2 -0
  217. package/src/internal/HeaderCodec.ts +36 -0
  218. package/src/middlewares/elysia.test.ts +25 -0
  219. package/src/middlewares/elysia.ts +1 -2
  220. package/src/middlewares/express.test.ts +28 -0
  221. package/src/middlewares/express.ts +1 -1
  222. package/src/middlewares/hono.test.ts +138 -2
  223. package/src/middlewares/nextjs.test.ts +22 -0
  224. package/src/proxy/internal/Headers.test.ts +20 -0
  225. package/src/proxy/internal/Headers.ts +12 -1
  226. package/src/proxy/services/openai.test.ts +57 -1
  227. package/src/proxy/services/openai.ts +2 -0
  228. package/src/server/Methods.ts +1 -0
  229. package/src/server/Mppx.test.ts +244 -1
  230. package/src/server/Mppx.ts +124 -11
  231. package/src/server/NodeListener.test.ts +28 -1
  232. package/src/server/Transport.test.ts +19 -0
  233. package/src/server/Transport.ts +20 -0
  234. package/src/server/index.ts +1 -1
  235. package/src/stripe/server/internal/html.gen.ts +1 -1
  236. package/src/tempo/AccessKeyAuthorization.test.ts +231 -0
  237. package/src/tempo/client/ChannelOps.test.ts +61 -7
  238. package/src/tempo/client/ChannelOps.ts +18 -7
  239. package/src/tempo/client/Charge.test.ts +126 -0
  240. package/src/tempo/client/Charge.ts +10 -6
  241. package/src/tempo/client/Session.test.ts +130 -1
  242. package/src/tempo/client/Session.ts +12 -19
  243. package/src/tempo/client/SessionManager.test.ts +69 -2
  244. package/src/tempo/client/SessionManager.ts +4 -4
  245. package/src/tempo/internal/account.ts +13 -0
  246. package/src/tempo/internal/fee-payer.test.ts +32 -2
  247. package/src/tempo/internal/fee-payer.ts +6 -2
  248. package/src/tempo/server/Charge.test.ts +69 -0
  249. package/src/tempo/server/Charge.ts +32 -0
  250. package/src/tempo/server/Session.test.ts +30 -0
  251. package/src/tempo/server/Session.ts +15 -16
  252. package/src/tempo/server/internal/html.gen.ts +1 -1
  253. package/src/tempo/session/Chain.test.ts +4 -4
  254. package/src/tempo/session/Chain.ts +10 -6
  255. package/src/tempo/session/Voucher.test.ts +230 -1
  256. package/src/tempo/session/Voucher.ts +96 -48
  257. package/src/tempo/session/Ws.test.ts +71 -0
  258. package/src/tempo/session/Ws.ts +13 -0
  259. package/src/x402/Assets.ts +65 -0
  260. package/src/x402/Exact.e2e.test.ts +448 -0
  261. package/src/x402/Header.test.ts +73 -0
  262. package/src/x402/Header.ts +34 -0
  263. package/src/x402/PublicInterface.test-d.ts +39 -0
  264. package/src/x402/Types.ts +248 -0
  265. package/src/x402/client/Exact.test.ts +180 -0
  266. package/src/x402/client/Exact.ts +198 -0
  267. package/src/x402/index.ts +5 -0
  268. package/src/x402/internal/ChallengeBrand.ts +14 -0
  269. package/src/x402/internal/RouteBinding.ts +18 -0
  270. package/src/x402/server/EvmCharge.ts +394 -0
  271. package/src/x402/server/Facilitator.test.ts +111 -0
  272. package/src/x402/server/Facilitator.ts +56 -0
@@ -0,0 +1,18 @@
1
+ import * as HeaderCodec from '../internal/HeaderCodec.js';
2
+ import { PaymentPayloadSchema, PaymentRequiredSchema, SettleResponseSchema, } from './Types.js';
3
+ const paymentRequired = HeaderCodec.createJson(PaymentRequiredSchema);
4
+ const paymentSignature = HeaderCodec.createJson(PaymentPayloadSchema);
5
+ const paymentResponse = HeaderCodec.createJson(SettleResponseSchema);
6
+ /** Encodes an x402 payment-required object for the `PAYMENT-REQUIRED` header. */
7
+ export const encodePaymentRequired = paymentRequired.encode;
8
+ /** Decodes an x402 `PAYMENT-REQUIRED` header value. */
9
+ export const decodePaymentRequired = paymentRequired.decode;
10
+ /** Encodes an x402 payment payload for the `PAYMENT-SIGNATURE` header. */
11
+ export const encodePaymentSignature = paymentSignature.encode;
12
+ /** Decodes an x402 `PAYMENT-SIGNATURE` header value. */
13
+ export const decodePaymentSignature = paymentSignature.decode;
14
+ /** Encodes an x402 settlement response for the `PAYMENT-RESPONSE` header. */
15
+ export const encodePaymentResponse = paymentResponse.encode;
16
+ /** Decodes an x402 `PAYMENT-RESPONSE` header value. */
17
+ export const decodePaymentResponse = paymentResponse.decode;
18
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/x402/Header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,GAIrB,MAAM,YAAY,CAAA;AAEnB,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAA;AACrE,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAA;AACrE,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAA;AAEpE,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAChC,eAAe,CAAC,MAAM,CAAA;AAExB,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAuC,eAAe,CAAC,MAAM,CAAA;AAE/F,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GACjC,gBAAgB,CAAC,MAAM,CAAA;AAEzB,wDAAwD;AACxD,MAAM,CAAC,MAAM,sBAAsB,GAAsC,gBAAgB,CAAC,MAAM,CAAA;AAEhG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAChC,eAAe,CAAC,MAAM,CAAA;AAExB,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAsC,eAAe,CAAC,MAAM,CAAA"}
@@ -0,0 +1,289 @@
1
+ import * as z from '../zod.js';
2
+ export declare const versions: readonly [2];
3
+ /** mppx method name used for EVM charge challenges backed by x402. */
4
+ export declare const paymentMethod: "evm";
5
+ /** mppx intent name used for EVM charge challenges backed by x402 exact. */
6
+ export declare const exactIntent: "charge";
7
+ export declare const schemes: readonly ["exact"];
8
+ export declare const assetTransferMethods: readonly ["eip3009", "permit2"];
9
+ /** CAIP-2 namespace prefix for EVM networks. */
10
+ export declare const evmNetworkPrefix: "eip155:";
11
+ /** Prefix for synthetic mppx challenge IDs derived from x402 `accepts` entries. */
12
+ export declare const syntheticChallengeIdPrefix: "x402:";
13
+ /** x402 protocol version supported by this package. */
14
+ export type Version = 2;
15
+ /** mppx payment method name used for EVM charge challenges backed by x402. */
16
+ export type PaymentMethod = typeof paymentMethod;
17
+ /** mppx intent name used for EVM charge challenges backed by x402 exact. */
18
+ export type ExactIntent = typeof exactIntent;
19
+ /** x402 scheme supported by this package. */
20
+ export type Scheme = (typeof schemes)[number];
21
+ /** x402 exact EVM asset transfer method. */
22
+ export type AssetTransferMethod = (typeof assetTransferMethods)[number];
23
+ /** CAIP-2 EVM network identifier. */
24
+ export type EvmNetwork = `${typeof evmNetworkPrefix}${number}`;
25
+ /** HTTP header carrying a base64-encoded x402 payment-required response. */
26
+ export declare const paymentRequiredHeader = "PAYMENT-REQUIRED";
27
+ /** HTTP header carrying a base64-encoded x402 payment payload. */
28
+ export declare const paymentSignatureHeader = "PAYMENT-SIGNATURE";
29
+ /** HTTP header carrying a base64-encoded x402 settlement response. */
30
+ export declare const paymentResponseHeader = "PAYMENT-RESPONSE";
31
+ /** Describes the protected resource in x402 v2 payment-required responses. */
32
+ export declare const ResourceInfoSchema: z.ZodMiniObject<{
33
+ description: z.ZodMiniOptional<z.ZodMiniString<string>>;
34
+ iconUrl: z.ZodMiniOptional<z.ZodMiniString<string>>;
35
+ mimeType: z.ZodMiniOptional<z.ZodMiniString<string>>;
36
+ serviceName: z.ZodMiniOptional<z.ZodMiniString<string>>;
37
+ tags: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniString<string>>>;
38
+ url: z.ZodMiniString<string>;
39
+ }, z.core.$strip>;
40
+ /** Describes the protected resource in x402 v2 payment-required responses. */
41
+ export type ResourceInfo = z.infer<typeof ResourceInfoSchema>;
42
+ /** Public transfer configuration for exact EVM payments. */
43
+ export declare const ExactTransferSchema: z.ZodMiniDiscriminatedUnion<[z.ZodMiniObject<{
44
+ name: z.ZodMiniString<string>;
45
+ type: z.ZodMiniLiteral<"eip3009">;
46
+ version: z.ZodMiniString<string>;
47
+ }, z.core.$strip>, z.ZodMiniObject<{
48
+ name: z.ZodMiniOptional<z.ZodMiniString<string>>;
49
+ type: z.ZodMiniLiteral<"permit2">;
50
+ version: z.ZodMiniOptional<z.ZodMiniString<string>>;
51
+ }, z.core.$strip>], "type">;
52
+ /** Public EIP-3009 transfer configuration for exact EVM payments. */
53
+ export type ExactEip3009Transfer = Extract<z.infer<typeof ExactTransferSchema>, {
54
+ type: 'eip3009';
55
+ }>;
56
+ /** Public Permit2 transfer configuration for exact EVM payments. */
57
+ export type ExactPermit2Transfer = Extract<z.infer<typeof ExactTransferSchema>, {
58
+ type: 'permit2';
59
+ }>;
60
+ /** Public transfer configuration for exact EVM payments. */
61
+ export type ExactTransfer = z.infer<typeof ExactTransferSchema>;
62
+ /** Known asset metadata used to derive x402 wire `extra` fields. */
63
+ export type Asset = {
64
+ address: `0x${string}`;
65
+ decimals: number;
66
+ transfer: ExactTransfer;
67
+ };
68
+ /** x402 v2 payment requirements for the `exact` scheme. */
69
+ export declare const PaymentRequirementsSchema: z.ZodMiniObject<{
70
+ amount: z.ZodMiniString<string>;
71
+ asset: z.ZodMiniString<string>;
72
+ extra: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>>;
73
+ maxTimeoutSeconds: z.ZodMiniNumber<number>;
74
+ network: z.ZodMiniType<`eip155:${number}`, unknown, z.core.$ZodTypeInternals<`eip155:${number}`, unknown>>;
75
+ payTo: z.ZodMiniString<string>;
76
+ scheme: z.ZodMiniEnum<{
77
+ exact: "exact";
78
+ }>;
79
+ }, z.core.$strip>;
80
+ /** x402 v2 payment requirements for the `exact` scheme. */
81
+ export type PaymentRequirements = z.infer<typeof PaymentRequirementsSchema>;
82
+ /** x402 v2 protocol extension value. */
83
+ export declare const ExtensionSchema: z.ZodMiniObject<{
84
+ info: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
85
+ schema: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
86
+ }, z.core.$strip>;
87
+ /** x402 v2 protocol extension value. */
88
+ export type Extension = z.infer<typeof ExtensionSchema>;
89
+ /** x402 v2 protocol extensions map. */
90
+ export declare const ExtensionsSchema: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
91
+ info: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
92
+ schema: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
93
+ }, z.core.$strip>>;
94
+ /** x402 v2 protocol extensions map. */
95
+ export type Extensions = z.infer<typeof ExtensionsSchema>;
96
+ /** Public exact EVM route request accepted by `mppx` handlers. */
97
+ export type ExactRequest = PaymentRequirements & {
98
+ extensions?: Extensions | undefined;
99
+ resource?: ResourceInfo | undefined;
100
+ };
101
+ /** x402 v2 payment-required response. */
102
+ export declare const PaymentRequiredSchema: z.ZodMiniObject<{
103
+ accepts: z.ZodMiniArray<z.ZodMiniObject<{
104
+ amount: z.ZodMiniString<string>;
105
+ asset: z.ZodMiniString<string>;
106
+ extra: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>>;
107
+ maxTimeoutSeconds: z.ZodMiniNumber<number>;
108
+ network: z.ZodMiniType<`eip155:${number}`, unknown, z.core.$ZodTypeInternals<`eip155:${number}`, unknown>>;
109
+ payTo: z.ZodMiniString<string>;
110
+ scheme: z.ZodMiniEnum<{
111
+ exact: "exact";
112
+ }>;
113
+ }, z.core.$strip>>;
114
+ error: z.ZodMiniOptional<z.ZodMiniString<string>>;
115
+ extensions: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
116
+ info: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
117
+ schema: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
118
+ }, z.core.$strip>>>;
119
+ resource: z.ZodMiniObject<{
120
+ description: z.ZodMiniOptional<z.ZodMiniString<string>>;
121
+ iconUrl: z.ZodMiniOptional<z.ZodMiniString<string>>;
122
+ mimeType: z.ZodMiniOptional<z.ZodMiniString<string>>;
123
+ serviceName: z.ZodMiniOptional<z.ZodMiniString<string>>;
124
+ tags: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniString<string>>>;
125
+ url: z.ZodMiniString<string>;
126
+ }, z.core.$strip>;
127
+ x402Version: z.ZodMiniLiteral<2>;
128
+ }, z.core.$strip>;
129
+ /** x402 v2 payment-required response. */
130
+ export type PaymentRequired = z.infer<typeof PaymentRequiredSchema>;
131
+ /** EIP-3009 transferWithAuthorization payload for exact EVM payments. */
132
+ export declare const ExactEip3009PayloadSchema: z.ZodMiniObject<{
133
+ authorization: z.ZodMiniObject<{
134
+ from: z.ZodMiniString<string>;
135
+ nonce: z.ZodMiniString<string>;
136
+ to: z.ZodMiniString<string>;
137
+ validAfter: z.ZodMiniString<string>;
138
+ validBefore: z.ZodMiniString<string>;
139
+ value: z.ZodMiniString<string>;
140
+ }, z.core.$strip>;
141
+ signature: z.ZodMiniString<string>;
142
+ }, z.core.$strip>;
143
+ /** EIP-3009 transferWithAuthorization payload for exact EVM payments. */
144
+ export type ExactEip3009Payload = z.infer<typeof ExactEip3009PayloadSchema>;
145
+ /** Permit2 payload for exact EVM payments. */
146
+ export declare const ExactPermit2PayloadSchema: z.ZodMiniObject<{
147
+ permit2Authorization: z.ZodMiniObject<{
148
+ deadline: z.ZodMiniString<string>;
149
+ from: z.ZodMiniString<string>;
150
+ nonce: z.ZodMiniString<string>;
151
+ permitted: z.ZodMiniObject<{
152
+ amount: z.ZodMiniString<string>;
153
+ token: z.ZodMiniString<string>;
154
+ }, z.core.$strip>;
155
+ spender: z.ZodMiniString<string>;
156
+ witness: z.ZodMiniObject<{
157
+ to: z.ZodMiniString<string>;
158
+ validAfter: z.ZodMiniString<string>;
159
+ }, z.core.$strip>;
160
+ }, z.core.$strip>;
161
+ signature: z.ZodMiniString<string>;
162
+ }, z.core.$strip>;
163
+ /** Permit2 payload for exact EVM payments. */
164
+ export type ExactPermit2Payload = z.infer<typeof ExactPermit2PayloadSchema>;
165
+ /** Exact EVM payment payload body. */
166
+ export declare const ExactPayloadSchema: z.ZodMiniUnion<readonly [z.ZodMiniObject<{
167
+ authorization: z.ZodMiniObject<{
168
+ from: z.ZodMiniString<string>;
169
+ nonce: z.ZodMiniString<string>;
170
+ to: z.ZodMiniString<string>;
171
+ validAfter: z.ZodMiniString<string>;
172
+ validBefore: z.ZodMiniString<string>;
173
+ value: z.ZodMiniString<string>;
174
+ }, z.core.$strip>;
175
+ signature: z.ZodMiniString<string>;
176
+ }, z.core.$strip>, z.ZodMiniObject<{
177
+ permit2Authorization: z.ZodMiniObject<{
178
+ deadline: z.ZodMiniString<string>;
179
+ from: z.ZodMiniString<string>;
180
+ nonce: z.ZodMiniString<string>;
181
+ permitted: z.ZodMiniObject<{
182
+ amount: z.ZodMiniString<string>;
183
+ token: z.ZodMiniString<string>;
184
+ }, z.core.$strip>;
185
+ spender: z.ZodMiniString<string>;
186
+ witness: z.ZodMiniObject<{
187
+ to: z.ZodMiniString<string>;
188
+ validAfter: z.ZodMiniString<string>;
189
+ }, z.core.$strip>;
190
+ }, z.core.$strip>;
191
+ signature: z.ZodMiniString<string>;
192
+ }, z.core.$strip>]>;
193
+ /** Exact EVM payment payload body. */
194
+ export type ExactPayload = z.infer<typeof ExactPayloadSchema>;
195
+ /** x402 v2 payment payload. */
196
+ export declare const PaymentPayloadSchema: z.ZodMiniObject<{
197
+ accepted: z.ZodMiniObject<{
198
+ amount: z.ZodMiniString<string>;
199
+ asset: z.ZodMiniString<string>;
200
+ extra: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>>;
201
+ maxTimeoutSeconds: z.ZodMiniNumber<number>;
202
+ network: z.ZodMiniType<`eip155:${number}`, unknown, z.core.$ZodTypeInternals<`eip155:${number}`, unknown>>;
203
+ payTo: z.ZodMiniString<string>;
204
+ scheme: z.ZodMiniEnum<{
205
+ exact: "exact";
206
+ }>;
207
+ }, z.core.$strip>;
208
+ extensions: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
209
+ info: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
210
+ schema: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
211
+ }, z.core.$strip>>>;
212
+ payload: z.ZodMiniUnion<readonly [z.ZodMiniObject<{
213
+ authorization: z.ZodMiniObject<{
214
+ from: z.ZodMiniString<string>;
215
+ nonce: z.ZodMiniString<string>;
216
+ to: z.ZodMiniString<string>;
217
+ validAfter: z.ZodMiniString<string>;
218
+ validBefore: z.ZodMiniString<string>;
219
+ value: z.ZodMiniString<string>;
220
+ }, z.core.$strip>;
221
+ signature: z.ZodMiniString<string>;
222
+ }, z.core.$strip>, z.ZodMiniObject<{
223
+ permit2Authorization: z.ZodMiniObject<{
224
+ deadline: z.ZodMiniString<string>;
225
+ from: z.ZodMiniString<string>;
226
+ nonce: z.ZodMiniString<string>;
227
+ permitted: z.ZodMiniObject<{
228
+ amount: z.ZodMiniString<string>;
229
+ token: z.ZodMiniString<string>;
230
+ }, z.core.$strip>;
231
+ spender: z.ZodMiniString<string>;
232
+ witness: z.ZodMiniObject<{
233
+ to: z.ZodMiniString<string>;
234
+ validAfter: z.ZodMiniString<string>;
235
+ }, z.core.$strip>;
236
+ }, z.core.$strip>;
237
+ signature: z.ZodMiniString<string>;
238
+ }, z.core.$strip>]>;
239
+ resource: z.ZodMiniOptional<z.ZodMiniObject<{
240
+ description: z.ZodMiniOptional<z.ZodMiniString<string>>;
241
+ iconUrl: z.ZodMiniOptional<z.ZodMiniString<string>>;
242
+ mimeType: z.ZodMiniOptional<z.ZodMiniString<string>>;
243
+ serviceName: z.ZodMiniOptional<z.ZodMiniString<string>>;
244
+ tags: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniString<string>>>;
245
+ url: z.ZodMiniString<string>;
246
+ }, z.core.$strip>>;
247
+ x402Version: z.ZodMiniLiteral<2>;
248
+ }, z.core.$strip>;
249
+ /** x402 v2 payment payload. */
250
+ export type PaymentPayload = z.infer<typeof PaymentPayloadSchema>;
251
+ /** Facilitator verification response. */
252
+ export declare const VerifyResponseSchema: z.ZodMiniObject<{
253
+ extensions: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
254
+ info: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
255
+ schema: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
256
+ }, z.core.$strip>>>;
257
+ extra: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>>;
258
+ invalidMessage: z.ZodMiniOptional<z.ZodMiniString<string>>;
259
+ invalidReason: z.ZodMiniOptional<z.ZodMiniString<string>>;
260
+ isValid: z.ZodMiniBoolean<boolean>;
261
+ payer: z.ZodMiniOptional<z.ZodMiniString<string>>;
262
+ }, z.core.$strip>;
263
+ /** Facilitator verification response. */
264
+ export type VerifyResponse = z.infer<typeof VerifyResponseSchema>;
265
+ /** Facilitator settlement response and x402 `PAYMENT-RESPONSE` body. */
266
+ export declare const SettleResponseSchema: z.ZodMiniObject<{
267
+ amount: z.ZodMiniOptional<z.ZodMiniString<string>>;
268
+ errorMessage: z.ZodMiniOptional<z.ZodMiniString<string>>;
269
+ errorReason: z.ZodMiniOptional<z.ZodMiniString<string>>;
270
+ extensions: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
271
+ info: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
272
+ schema: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>;
273
+ }, z.core.$strip>>>;
274
+ extra: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnknown>>;
275
+ network: z.ZodMiniString<string>;
276
+ payer: z.ZodMiniOptional<z.ZodMiniString<string>>;
277
+ success: z.ZodMiniBoolean<boolean>;
278
+ transaction: z.ZodMiniString<string>;
279
+ }, z.core.$strip>;
280
+ /** Facilitator settlement response and x402 `PAYMENT-RESPONSE` body. */
281
+ export type SettleResponse = z.infer<typeof SettleResponseSchema>;
282
+ /** x402 facilitator client interface used by server exact config. */
283
+ export type Facilitator = {
284
+ settle: (paymentPayload: PaymentPayload, paymentRequirements: PaymentRequirements) => Promise<SettleResponse>;
285
+ verify: (paymentPayload: PaymentPayload, paymentRequirements: PaymentRequirements) => Promise<VerifyResponse>;
286
+ };
287
+ /** Extracts x402 `PaymentRequirements` from a canonical exact request. */
288
+ export declare function toPaymentRequirements(request: ExactRequest): PaymentRequirements;
289
+ //# sourceMappingURL=Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../src/x402/Types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import * as z from '../zod.js';
2
+ export const versions = [2];
3
+ /** mppx method name used for EVM charge challenges backed by x402. */
4
+ export const paymentMethod = 'evm';
5
+ /** mppx intent name used for EVM charge challenges backed by x402 exact. */
6
+ export const exactIntent = 'charge';
7
+ export const schemes = ['exact'];
8
+ export const assetTransferMethods = ['eip3009', 'permit2'];
9
+ /** CAIP-2 namespace prefix for EVM networks. */
10
+ export const evmNetworkPrefix = 'eip155:';
11
+ /** Prefix for synthetic mppx challenge IDs derived from x402 `accepts` entries. */
12
+ export const syntheticChallengeIdPrefix = 'x402:';
13
+ /** HTTP header carrying a base64-encoded x402 payment-required response. */
14
+ export const paymentRequiredHeader = 'PAYMENT-REQUIRED';
15
+ /** HTTP header carrying a base64-encoded x402 payment payload. */
16
+ export const paymentSignatureHeader = 'PAYMENT-SIGNATURE';
17
+ /** HTTP header carrying a base64-encoded x402 settlement response. */
18
+ export const paymentResponseHeader = 'PAYMENT-RESPONSE';
19
+ const nonEmptyString = z.string().check(z.minLength(1));
20
+ const positiveNumber = z.number().check(z.refine((value) => value > 0, 'Must be positive'));
21
+ const atomicAmount = z.string().check(z.regex(/^\d+$/, 'Invalid atomic amount'));
22
+ const address = z.address();
23
+ const evmNetwork = z
24
+ .string()
25
+ .check(z.regex(new RegExp(`^${evmNetworkPrefix}\\d+$`), 'Invalid EVM CAIP-2 network'));
26
+ /** Describes the protected resource in x402 v2 payment-required responses. */
27
+ export const ResourceInfoSchema = z.object({
28
+ description: z.optional(z.string()),
29
+ iconUrl: z.optional(z.string()),
30
+ mimeType: z.optional(z.string()),
31
+ serviceName: z.optional(z.string()),
32
+ tags: z.optional(z.array(z.string())),
33
+ url: nonEmptyString,
34
+ });
35
+ /** Public transfer configuration for exact EVM payments. */
36
+ export const ExactTransferSchema = z.discriminatedUnion('type', [
37
+ z.object({
38
+ name: nonEmptyString,
39
+ type: z.literal('eip3009'),
40
+ version: nonEmptyString,
41
+ }),
42
+ z.object({
43
+ name: z.optional(z.string()),
44
+ type: z.literal('permit2'),
45
+ version: z.optional(z.string()),
46
+ }),
47
+ ]);
48
+ /** x402 v2 payment requirements for the `exact` scheme. */
49
+ export const PaymentRequirementsSchema = z.object({
50
+ amount: atomicAmount,
51
+ asset: nonEmptyString,
52
+ extra: z.optional(z.record(z.string(), z.unknown())),
53
+ maxTimeoutSeconds: positiveNumber,
54
+ network: evmNetwork,
55
+ payTo: nonEmptyString,
56
+ scheme: z.enum(schemes),
57
+ });
58
+ /** x402 v2 protocol extension value. */
59
+ export const ExtensionSchema = z.object({
60
+ info: z.record(z.string(), z.unknown()),
61
+ schema: z.record(z.string(), z.unknown()),
62
+ });
63
+ /** x402 v2 protocol extensions map. */
64
+ export const ExtensionsSchema = z.record(z.string(), ExtensionSchema);
65
+ /** x402 v2 payment-required response. */
66
+ export const PaymentRequiredSchema = z.object({
67
+ accepts: z.array(PaymentRequirementsSchema).check(z.minLength(1)),
68
+ error: z.optional(z.string()),
69
+ extensions: z.optional(ExtensionsSchema),
70
+ resource: ResourceInfoSchema,
71
+ x402Version: z.literal(2),
72
+ });
73
+ /** EIP-3009 transferWithAuthorization payload for exact EVM payments. */
74
+ export const ExactEip3009PayloadSchema = z.object({
75
+ authorization: z.object({
76
+ from: address,
77
+ nonce: z.hash(),
78
+ to: address,
79
+ validAfter: atomicAmount,
80
+ validBefore: atomicAmount,
81
+ value: atomicAmount,
82
+ }),
83
+ signature: z.signature(),
84
+ });
85
+ /** Permit2 payload for exact EVM payments. */
86
+ export const ExactPermit2PayloadSchema = z.object({
87
+ permit2Authorization: z.object({
88
+ deadline: atomicAmount,
89
+ from: address,
90
+ nonce: atomicAmount,
91
+ permitted: z.object({
92
+ amount: atomicAmount,
93
+ token: address,
94
+ }),
95
+ spender: address,
96
+ witness: z.object({
97
+ to: address,
98
+ validAfter: atomicAmount,
99
+ }),
100
+ }),
101
+ signature: z.signature(),
102
+ });
103
+ /** Exact EVM payment payload body. */
104
+ export const ExactPayloadSchema = z.union([ExactEip3009PayloadSchema, ExactPermit2PayloadSchema]);
105
+ /** x402 v2 payment payload. */
106
+ export const PaymentPayloadSchema = z.object({
107
+ accepted: PaymentRequirementsSchema,
108
+ extensions: z.optional(ExtensionsSchema),
109
+ payload: ExactPayloadSchema,
110
+ resource: z.optional(ResourceInfoSchema),
111
+ x402Version: z.literal(2),
112
+ });
113
+ /** Facilitator verification response. */
114
+ export const VerifyResponseSchema = z.object({
115
+ extensions: z.optional(ExtensionsSchema),
116
+ extra: z.optional(z.record(z.string(), z.unknown())),
117
+ invalidMessage: z.optional(z.string()),
118
+ invalidReason: z.optional(z.string()),
119
+ isValid: z.boolean(),
120
+ payer: z.optional(z.string()),
121
+ });
122
+ /** Facilitator settlement response and x402 `PAYMENT-RESPONSE` body. */
123
+ export const SettleResponseSchema = z.object({
124
+ amount: z.optional(atomicAmount),
125
+ errorMessage: z.optional(z.string()),
126
+ errorReason: z.optional(z.string()),
127
+ extensions: z.optional(ExtensionsSchema),
128
+ extra: z.optional(z.record(z.string(), z.unknown())),
129
+ network: nonEmptyString,
130
+ payer: z.optional(z.string()),
131
+ success: z.boolean(),
132
+ transaction: z.string(),
133
+ });
134
+ /** Extracts x402 `PaymentRequirements` from a canonical exact request. */
135
+ export function toPaymentRequirements(request) {
136
+ const { extensions: _extensions, resource: _resource, ...paymentRequirements } = request;
137
+ return PaymentRequirementsSchema.parse(paymentRequirements);
138
+ }
139
+ //# sourceMappingURL=Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Types.js","sourceRoot":"","sources":["../../src/x402/Types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Account } from 'viem';
2
+ import type * as Challenge from '../../Challenge.js';
3
+ import * as Assets from '../Assets.js';
4
+ import * as Types from '../Types.js';
5
+ /**
6
+ * Creates an x402 exact `PAYMENT-SIGNATURE` credential.
7
+ */
8
+ export declare function createCredential(parameters: createCredential.Parameters): Promise<string>;
9
+ export declare namespace createCredential {
10
+ type Parameters = {
11
+ challenge: Challenge.Challenge<Types.ExactRequest>;
12
+ config: Config;
13
+ context?: Context | undefined;
14
+ };
15
+ }
16
+ export type Context = {
17
+ account?: Account | undefined;
18
+ };
19
+ export type Signer = Account & {
20
+ signTypedData?: (parameters: any) => Promise<`0x${string}`>;
21
+ };
22
+ export type Config = {
23
+ /** Account used to sign exact EVM payment payloads. */
24
+ account: Account;
25
+ /** Optional token decimals used to parse `maxAmount` when currency metadata is not provided. */
26
+ decimals?: number | undefined;
27
+ /** Optional maximum display-unit amount the client is willing to pay. */
28
+ maxAmount?: string | undefined;
29
+ /** Optional maximum atomic amount the client is willing to pay. */
30
+ maxAtomicAmount?: string | undefined;
31
+ /** Optional allowlist of supported EVM chain IDs. */
32
+ networks?: readonly number[] | undefined;
33
+ /** Optional allowlist of supported currencies. */
34
+ currencies?: readonly (`0x${string}` | Assets.KnownAsset)[] | undefined;
35
+ /** Legacy alias for `currencies`. */
36
+ assets?: readonly (`0x${string}` | Assets.KnownAsset)[] | undefined;
37
+ };
38
+ //# sourceMappingURL=Exact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Exact.d.ts","sourceRoot":"","sources":["../../../src/x402/client/Exact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,KAAK,SAAS,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAGtC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA2D/F;AAED,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC,KAAK,UAAU,GAAG;QAChB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAClD,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC9B,CAAA;CACF;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG;IAC7B,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAA;CAC5D,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAA;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IACxC,kDAAkD;IAClD,UAAU,CAAC,EAAE,SAAS,CAAC,KAAK,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,SAAS,CAAA;IACvE,qCAAqC;IACrC,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,SAAS,CAAA;CACpE,CAAA"}
@@ -0,0 +1,141 @@
1
+ import { getAddress, parseUnits } from 'viem';
2
+ import * as Assets from '../Assets.js';
3
+ import * as Header from '../Header.js';
4
+ import * as RouteBinding from '../internal/RouteBinding.js';
5
+ import * as Types from '../Types.js';
6
+ /**
7
+ * Creates an x402 exact `PAYMENT-SIGNATURE` credential.
8
+ */
9
+ export async function createCredential(parameters) {
10
+ const account = (parameters.context?.account ?? parameters.config.account);
11
+ if (!account.signTypedData)
12
+ throw new Error('x402 exact requires a typed-data signer.');
13
+ const request = parameters.challenge.request;
14
+ const accepted = Types.toPaymentRequirements(request);
15
+ assertPolicy(parameters.config, accepted);
16
+ if (!request.resource || !request.extensions?.mppx)
17
+ throw new Error('x402 exact EIP-3009 requires route binding.');
18
+ const extensions = withNonceSalt(request.extensions);
19
+ const transferMethod = accepted.extra?.assetTransferMethod ?? 'eip3009';
20
+ if (transferMethod !== 'eip3009')
21
+ throw new Error(`x402 exact ${String(transferMethod)} signing is not implemented yet.`);
22
+ const name = accepted.extra?.name;
23
+ const version = accepted.extra?.version;
24
+ if (typeof name !== 'string' || typeof version !== 'string')
25
+ throw new Error('x402 exact EIP-3009 requires token name and version.');
26
+ const now = Math.floor(Date.now() / 1000);
27
+ const authorization = {
28
+ from: getAddress(account.address),
29
+ nonce: RouteBinding.nonce({
30
+ accepted,
31
+ extensions,
32
+ resource: request.resource,
33
+ }),
34
+ to: getAddress(accepted.payTo),
35
+ validAfter: (now - 600).toString(),
36
+ validBefore: (now + accepted.maxTimeoutSeconds).toString(),
37
+ value: accepted.amount,
38
+ };
39
+ const signature = await account.signTypedData({
40
+ domain: {
41
+ chainId: chainIdOf(accepted.network),
42
+ name,
43
+ verifyingContract: getAddress(accepted.asset),
44
+ version,
45
+ },
46
+ message: {
47
+ ...authorization,
48
+ value: BigInt(authorization.value),
49
+ validAfter: BigInt(authorization.validAfter),
50
+ validBefore: BigInt(authorization.validBefore),
51
+ },
52
+ primaryType: 'TransferWithAuthorization',
53
+ types: authorizationTypes,
54
+ });
55
+ return Header.encodePaymentSignature({
56
+ accepted,
57
+ extensions,
58
+ payload: {
59
+ authorization,
60
+ signature,
61
+ },
62
+ ...(request.resource ? { resource: request.resource } : {}),
63
+ x402Version: 2,
64
+ });
65
+ }
66
+ const authorizationTypes = {
67
+ TransferWithAuthorization: [
68
+ { name: 'from', type: 'address' },
69
+ { name: 'to', type: 'address' },
70
+ { name: 'value', type: 'uint256' },
71
+ { name: 'validAfter', type: 'uint256' },
72
+ { name: 'validBefore', type: 'uint256' },
73
+ { name: 'nonce', type: 'bytes32' },
74
+ ],
75
+ };
76
+ function chainIdOf(network) {
77
+ return Number(network.slice(Types.evmNetworkPrefix.length));
78
+ }
79
+ function assertPolicy(parameters, accepted) {
80
+ const chainId = chainIdOf(accepted.network);
81
+ if (parameters.networks && !parameters.networks.includes(chainId))
82
+ throw new Error(`x402 exact chain ID is not allowed: ${chainId}.`);
83
+ const currencies = parameters.currencies ?? parameters.assets;
84
+ if (currencies?.some((currency) => !Assets.isAsset(currency)) && !parameters.networks?.length)
85
+ throw new Error('x402 exact raw currency allowlists require networks.');
86
+ if (currencies) {
87
+ const acceptedCurrency = getAddress(accepted.asset);
88
+ const allowed = currencies.some((currency) => currencyMatches(currency, acceptedCurrency, accepted.network));
89
+ if (!allowed)
90
+ throw new Error(`x402 exact currency is not allowed: ${acceptedCurrency}.`);
91
+ }
92
+ if (parameters.maxAtomicAmount !== undefined &&
93
+ BigInt(accepted.amount) > BigInt(parameters.maxAtomicAmount))
94
+ throw new Error('x402 exact amount exceeds maxAtomicAmount.');
95
+ if (parameters.maxAmount !== undefined) {
96
+ const decimals = decimalsOfAcceptedCurrency(parameters, accepted);
97
+ if (decimals === undefined)
98
+ throw new Error('x402 exact maxAmount requires currency decimals.');
99
+ if (BigInt(accepted.amount) > parseUnits(parameters.maxAmount, decimals))
100
+ throw new Error('x402 exact amount exceeds maxAmount.');
101
+ }
102
+ }
103
+ function addressOf(currency) {
104
+ return Assets.isAsset(currency) ? currency.address : currency;
105
+ }
106
+ function currencyMatches(currency, acceptedCurrency, network) {
107
+ if (getAddress(addressOf(currency)) !== acceptedCurrency)
108
+ return false;
109
+ return !Assets.isAsset(currency) || currency.network === network;
110
+ }
111
+ function decimalsOfAcceptedCurrency(parameters, accepted) {
112
+ const currencies = parameters.currencies ?? parameters.assets;
113
+ const acceptedCurrency = getAddress(accepted.asset);
114
+ const currency = currencies?.find((currency) => currencyMatches(currency, acceptedCurrency, accepted.network));
115
+ if (currency && Assets.isAsset(currency))
116
+ return currency.decimals;
117
+ return parameters.decimals;
118
+ }
119
+ function withNonceSalt(extensions) {
120
+ const mppx = extensions.mppx;
121
+ if (!mppx)
122
+ return extensions;
123
+ return {
124
+ ...extensions,
125
+ mppx: {
126
+ ...mppx,
127
+ info: {
128
+ ...mppx.info,
129
+ nonce: randomNonceSalt(),
130
+ },
131
+ },
132
+ };
133
+ }
134
+ function randomNonceSalt() {
135
+ const crypto = globalThis.crypto;
136
+ if (!crypto?.getRandomValues)
137
+ throw new Error('x402 exact requires crypto randomness.');
138
+ const bytes = crypto.getRandomValues(new Uint8Array(32));
139
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
140
+ }
141
+ //# sourceMappingURL=Exact.js.map