mppx 0.8.15 → 0.8.18

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 (966) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +15 -0
  3. package/dist/Challenge.js +61 -39
  4. package/dist/Constants.d.ts +17 -17
  5. package/dist/Errors.d.ts +3 -3
  6. package/dist/Method.d.ts +35 -5
  7. package/dist/Method.js +7 -22
  8. package/dist/Store.d.ts +19 -0
  9. package/dist/Store.js +43 -0
  10. package/dist/attestation/Client.d.ts +17 -0
  11. package/dist/attestation/Client.js +28 -0
  12. package/dist/attestation/Constants.d.ts +15 -0
  13. package/dist/attestation/Constants.js +15 -0
  14. package/dist/attestation/Server.d.ts +4 -0
  15. package/dist/attestation/Server.js +8 -0
  16. package/dist/attestation/Types.d.ts +76 -0
  17. package/dist/attestation/Types.js +2 -0
  18. package/dist/attestation/index.d.ts +6 -0
  19. package/dist/attestation/index.js +6 -0
  20. package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
  21. package/dist/attestation/internal/HttpMessageSignature.js +320 -0
  22. package/dist/attestation/internal/SigningContext.d.ts +4 -0
  23. package/dist/attestation/internal/SigningContext.js +11 -0
  24. package/dist/bin.js +3 -3
  25. package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
  26. package/dist/cli/account.d.ts +14 -14
  27. package/dist/cli/cli.d.ts +6 -6
  28. package/dist/cli/cli.js +253 -1504
  29. package/dist/cli/plugins/index.js +19 -5
  30. package/dist/cli/plugins/tempo.js +7 -3
  31. package/dist/cli/sessions/Manager.js +7 -4
  32. package/dist/cli/sessions/commands.d.ts +4 -4
  33. package/dist/cli/sessions/request.d.ts +2 -0
  34. package/dist/cli/sessions/request.js +18 -0
  35. package/dist/cli/sessions/store.js +28 -14
  36. package/dist/cli/utils.d.ts +1 -1
  37. package/dist/cli/validate/index.d.ts +3 -3
  38. package/dist/client/Mppx.d.ts +3 -0
  39. package/dist/client/Mppx.js +13 -5
  40. package/dist/client/Transport.d.ts +3 -5
  41. package/dist/client/Transport.js +1 -17
  42. package/dist/client/internal/Fetch.js +2 -6
  43. package/dist/discovery/Discovery.js +2 -1
  44. package/dist/discovery/OpenApi.d.ts +3 -5
  45. package/dist/discovery/OpenApi.js +13 -34
  46. package/dist/discovery/internal/Metadata.d.ts +20 -0
  47. package/dist/discovery/internal/Metadata.js +36 -0
  48. package/dist/evm/Methods.d.ts +11 -11
  49. package/dist/evm/Types.d.ts +17 -17
  50. package/dist/evm/client/Charge.d.ts +11 -11
  51. package/dist/evm/client/Charge.js +8 -0
  52. package/dist/evm/client/Methods.d.ts +11 -11
  53. package/dist/evm/server/Charge.d.ts +1 -1
  54. package/dist/evm/server/Charge.js +2 -0
  55. package/dist/evm/server/Methods.d.ts +11 -11
  56. package/dist/internal/HeaderCodec.d.ts +2 -2
  57. package/dist/internal/types.d.ts +6 -0
  58. package/dist/proxy/Proxy.d.ts +2 -0
  59. package/dist/proxy/Proxy.js +117 -9
  60. package/dist/proxy/Service.d.ts +36 -1
  61. package/dist/proxy/Service.js +9 -8
  62. package/dist/proxy/services/anthropic.js +1 -0
  63. package/dist/proxy/services/openai.js +1 -0
  64. package/dist/proxy/services/stripe.js +1 -0
  65. package/dist/server/Mppx.d.ts +75 -13
  66. package/dist/server/Mppx.js +201 -23
  67. package/dist/server/core.d.ts +9 -0
  68. package/dist/server/core.js +9 -0
  69. package/dist/server/internal/html/config.d.ts +9 -9
  70. package/dist/server/internal/html/constants.d.ts +17 -17
  71. package/dist/stripe/Methods.d.ts +10 -10
  72. package/dist/stripe/client/Charge.d.ts +10 -10
  73. package/dist/stripe/client/Methods.d.ts +10 -10
  74. package/dist/stripe/internal/constants.d.ts +1 -1
  75. package/dist/stripe/internal/constants.js +1 -1
  76. package/dist/stripe/internal/types.d.ts +1 -0
  77. package/dist/stripe/server/Charge.d.ts +11 -11
  78. package/dist/stripe/server/Charge.js +51 -5
  79. package/dist/stripe/server/Methods.d.ts +137 -48
  80. package/dist/stripe/server/Methods.js +265 -4
  81. package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
  82. package/dist/stripe/server/internal/deposit-address.js +28 -0
  83. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  84. package/dist/stripe/server/internal/html.gen.js +1 -1
  85. package/dist/stripe/server/internal/record-payment.d.ts +15 -0
  86. package/dist/stripe/server/internal/record-payment.js +42 -0
  87. package/dist/stripe/server/internal/request.d.ts +25 -0
  88. package/dist/stripe/server/internal/request.js +29 -0
  89. package/dist/stripe/server/spt.d.ts +8 -0
  90. package/dist/stripe/server/spt.js +8 -0
  91. package/dist/tap/Constants.d.ts +28 -0
  92. package/dist/tap/Constants.js +32 -0
  93. package/dist/tap/Types.d.ts +11 -0
  94. package/dist/tap/Types.js +2 -0
  95. package/dist/tap/client/index.d.ts +26 -0
  96. package/dist/tap/client/index.js +33 -0
  97. package/dist/tap/index.d.ts +5 -0
  98. package/dist/tap/index.js +5 -0
  99. package/dist/tap/server/index.d.ts +20 -0
  100. package/dist/tap/server/index.js +36 -0
  101. package/dist/tempo/Attribution.d.ts +1 -1
  102. package/dist/tempo/Methods.d.ts +73 -60
  103. package/dist/tempo/Methods.js +14 -3
  104. package/dist/tempo/Proof.d.ts +16 -16
  105. package/dist/tempo/client/Charge.d.ts +22 -19
  106. package/dist/tempo/client/Charge.js +32 -16
  107. package/dist/tempo/client/Methods.d.ts +51 -38
  108. package/dist/tempo/client/Subscription.d.ts +23 -23
  109. package/dist/tempo/internal/address.d.ts +2 -1
  110. package/dist/tempo/internal/address.js +3 -1
  111. package/dist/tempo/internal/auto-swap.js +4 -19
  112. package/dist/tempo/internal/defaults.d.ts +17 -6
  113. package/dist/tempo/internal/defaults.js +11 -0
  114. package/dist/tempo/internal/fee-payer.d.ts +12 -12
  115. package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
  116. package/dist/tempo/internal/machine-token-charge.js +113 -0
  117. package/dist/tempo/internal/machine-token-session.d.ts +88 -0
  118. package/dist/tempo/internal/machine-token-session.js +173 -0
  119. package/dist/tempo/internal/proof.d.ts +17 -17
  120. package/dist/tempo/internal/signature-envelope.d.ts +14 -0
  121. package/dist/tempo/internal/signature-envelope.js +28 -0
  122. package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
  123. package/dist/tempo/legacy/client/ChannelOps.js +11 -5
  124. package/dist/tempo/legacy/client/Session.d.ts +33 -21
  125. package/dist/tempo/legacy/client/Session.js +3 -3
  126. package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
  127. package/dist/tempo/legacy/client/SessionManager.js +2 -0
  128. package/dist/tempo/legacy/index.d.ts +1 -3
  129. package/dist/tempo/legacy/index.js +1 -3
  130. package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
  131. package/dist/tempo/server/Charge.d.ts +28 -11
  132. package/dist/tempo/server/Charge.js +101 -55
  133. package/dist/tempo/server/Methods.d.ts +58 -56
  134. package/dist/tempo/server/Methods.js +8 -18
  135. package/dist/tempo/server/Relay.d.ts +1 -1
  136. package/dist/tempo/server/Relay.js +2 -2
  137. package/dist/tempo/server/Subscription.d.ts +25 -25
  138. package/dist/tempo/server/Subscription.js +2 -0
  139. package/dist/tempo/server/index.d.ts +1 -1
  140. package/dist/tempo/server/index.js +1 -1
  141. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  142. package/dist/tempo/server/internal/html.gen.js +1 -1
  143. package/dist/tempo/server/internal/transport.d.ts +2 -0
  144. package/dist/tempo/server/internal/transport.js +9 -2
  145. package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
  146. package/dist/tempo/session/client/ChannelOps.js +35 -6
  147. package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
  148. package/dist/tempo/session/client/ChannelStore.js +2 -2
  149. package/dist/tempo/session/client/CredentialState.d.ts +18 -3
  150. package/dist/tempo/session/client/CredentialState.js +77 -76
  151. package/dist/tempo/session/client/Runtime.d.ts +4 -2
  152. package/dist/tempo/session/client/Runtime.js +21 -5
  153. package/dist/tempo/session/client/Session.d.ts +34 -22
  154. package/dist/tempo/session/client/Session.js +186 -63
  155. package/dist/tempo/session/client/SessionManager.d.ts +3 -1
  156. package/dist/tempo/session/client/SessionManager.js +35 -11
  157. package/dist/tempo/session/client/Transports.d.ts +2 -0
  158. package/dist/tempo/session/client/Transports.js +12 -2
  159. package/dist/tempo/session/precompile/Chain.d.ts +37 -2
  160. package/dist/tempo/session/precompile/Chain.js +116 -15
  161. package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
  162. package/dist/tempo/session/precompile/Protocol.js +7 -0
  163. package/dist/tempo/session/precompile/Voucher.d.ts +7 -5
  164. package/dist/tempo/session/precompile/Voucher.js +6 -12
  165. package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
  166. package/dist/tempo/session/server/ChannelStore.d.ts +15 -0
  167. package/dist/tempo/session/server/ChannelStore.js +27 -12
  168. package/dist/tempo/session/server/CredentialVerification.d.ts +39 -20
  169. package/dist/tempo/session/server/CredentialVerification.js +359 -89
  170. package/dist/tempo/session/server/MeteredStream.d.ts +4 -1
  171. package/dist/tempo/session/server/MeteredStream.js +8 -5
  172. package/dist/tempo/session/server/RequestState.d.ts +19 -0
  173. package/dist/tempo/session/server/RequestState.js +61 -15
  174. package/dist/tempo/session/server/Session.d.ts +46 -23
  175. package/dist/tempo/session/server/Session.js +150 -56
  176. package/dist/tempo/session/server/Settlement.d.ts +11 -4
  177. package/dist/tempo/session/server/Settlement.js +53 -21
  178. package/dist/tempo/session/server/Sse.d.ts +3 -1
  179. package/dist/tempo/session/server/Sse.js +2 -1
  180. package/dist/tempo/session/server/Transports.d.ts +1 -1
  181. package/dist/tempo/session/server/Transports.js +1 -0
  182. package/dist/tempo/session/server/Ws.d.ts +6 -1
  183. package/dist/tempo/session/server/Ws.js +1 -0
  184. package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
  185. package/dist/web-bot-auth/Constants.d.ts +20 -0
  186. package/dist/web-bot-auth/Constants.js +24 -0
  187. package/dist/web-bot-auth/Types.d.ts +10 -0
  188. package/dist/web-bot-auth/Types.js +2 -0
  189. package/dist/web-bot-auth/client/index.d.ts +29 -0
  190. package/dist/web-bot-auth/client/index.js +64 -0
  191. package/dist/web-bot-auth/index.d.ts +7 -0
  192. package/dist/web-bot-auth/index.js +7 -0
  193. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
  194. package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
  195. package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
  196. package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
  197. package/dist/web-bot-auth/server/index.d.ts +35 -0
  198. package/dist/web-bot-auth/server/index.js +88 -0
  199. package/dist/x402/Types.d.ts +6 -6
  200. package/dist/x402/client/Exact.d.ts +8 -0
  201. package/dist/x402/client/Exact.js +40 -10
  202. package/dist/x402/server/EvmCharge.d.ts +22 -0
  203. package/dist/x402/server/EvmCharge.js +54 -20
  204. package/package.json +28 -34
  205. package/dist/BodyDigest.d.ts.map +0 -1
  206. package/dist/BodyDigest.js.map +0 -1
  207. package/dist/Challenge.d.ts.map +0 -1
  208. package/dist/Challenge.js.map +0 -1
  209. package/dist/Constants.d.ts.map +0 -1
  210. package/dist/Constants.js.map +0 -1
  211. package/dist/Credential.d.ts.map +0 -1
  212. package/dist/Credential.js.map +0 -1
  213. package/dist/Errors.d.ts.map +0 -1
  214. package/dist/Errors.js.map +0 -1
  215. package/dist/Expires.d.ts.map +0 -1
  216. package/dist/Expires.js.map +0 -1
  217. package/dist/Html.d.ts.map +0 -1
  218. package/dist/Html.js.map +0 -1
  219. package/dist/Mcp.d.ts.map +0 -1
  220. package/dist/Mcp.js.map +0 -1
  221. package/dist/Method.d.ts.map +0 -1
  222. package/dist/Method.js.map +0 -1
  223. package/dist/PaymentRequest.d.ts.map +0 -1
  224. package/dist/PaymentRequest.js.map +0 -1
  225. package/dist/Receipt.d.ts.map +0 -1
  226. package/dist/Receipt.js.map +0 -1
  227. package/dist/Store.d.ts.map +0 -1
  228. package/dist/Store.js.map +0 -1
  229. package/dist/bin.d.ts.map +0 -1
  230. package/dist/bin.js.map +0 -1
  231. package/dist/cli/account.d.ts.map +0 -1
  232. package/dist/cli/account.js.map +0 -1
  233. package/dist/cli/cli.d.ts.map +0 -1
  234. package/dist/cli/cli.js.map +0 -1
  235. package/dist/cli/config.d.ts.map +0 -1
  236. package/dist/cli/config.js.map +0 -1
  237. package/dist/cli/internal.d.ts.map +0 -1
  238. package/dist/cli/internal.js.map +0 -1
  239. package/dist/cli/plugins/evm.d.ts.map +0 -1
  240. package/dist/cli/plugins/evm.js.map +0 -1
  241. package/dist/cli/plugins/index.d.ts.map +0 -1
  242. package/dist/cli/plugins/index.js.map +0 -1
  243. package/dist/cli/plugins/plugin.d.ts.map +0 -1
  244. package/dist/cli/plugins/plugin.js.map +0 -1
  245. package/dist/cli/plugins/stripe.d.ts.map +0 -1
  246. package/dist/cli/plugins/stripe.js.map +0 -1
  247. package/dist/cli/plugins/tempo.d.ts.map +0 -1
  248. package/dist/cli/plugins/tempo.js.map +0 -1
  249. package/dist/cli/sessions/Manager.d.ts.map +0 -1
  250. package/dist/cli/sessions/Manager.js.map +0 -1
  251. package/dist/cli/sessions/commands.d.ts.map +0 -1
  252. package/dist/cli/sessions/commands.js.map +0 -1
  253. package/dist/cli/sessions/request.d.ts.map +0 -1
  254. package/dist/cli/sessions/request.js.map +0 -1
  255. package/dist/cli/sessions/store.d.ts.map +0 -1
  256. package/dist/cli/sessions/store.js.map +0 -1
  257. package/dist/cli/utils.d.ts.map +0 -1
  258. package/dist/cli/utils.js.map +0 -1
  259. package/dist/cli/validate/challenge.d.ts.map +0 -1
  260. package/dist/cli/validate/challenge.js.map +0 -1
  261. package/dist/cli/validate/discovery.d.ts.map +0 -1
  262. package/dist/cli/validate/discovery.js.map +0 -1
  263. package/dist/cli/validate/helpers.d.ts.map +0 -1
  264. package/dist/cli/validate/helpers.js.map +0 -1
  265. package/dist/cli/validate/index.d.ts.map +0 -1
  266. package/dist/cli/validate/index.js.map +0 -1
  267. package/dist/cli/validate/messages.d.ts.map +0 -1
  268. package/dist/cli/validate/messages.js.map +0 -1
  269. package/dist/cli/validate/payment.d.ts.map +0 -1
  270. package/dist/cli/validate/payment.js.map +0 -1
  271. package/dist/client/Methods.d.ts.map +0 -1
  272. package/dist/client/Methods.js.map +0 -1
  273. package/dist/client/Mppx.d.ts.map +0 -1
  274. package/dist/client/Mppx.js.map +0 -1
  275. package/dist/client/Transport.d.ts.map +0 -1
  276. package/dist/client/Transport.js.map +0 -1
  277. package/dist/client/index.d.ts.map +0 -1
  278. package/dist/client/index.js.map +0 -1
  279. package/dist/client/internal/Fetch.d.ts.map +0 -1
  280. package/dist/client/internal/Fetch.js.map +0 -1
  281. package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
  282. package/dist/client/internal/MethodChallenge.js.map +0 -1
  283. package/dist/client/internal/MethodResponse.d.ts.map +0 -1
  284. package/dist/client/internal/MethodResponse.js.map +0 -1
  285. package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
  286. package/dist/client/internal/protocols/Mcp.js.map +0 -1
  287. package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
  288. package/dist/client/internal/protocols/Mpp.js.map +0 -1
  289. package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
  290. package/dist/client/internal/protocols/Protocol.js.map +0 -1
  291. package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
  292. package/dist/client/internal/protocols/Shared.js.map +0 -1
  293. package/dist/client/internal/protocols/X402.d.ts.map +0 -1
  294. package/dist/client/internal/protocols/X402.js.map +0 -1
  295. package/dist/client/node.d.ts.map +0 -1
  296. package/dist/client/node.js.map +0 -1
  297. package/dist/discovery/Discovery.d.ts.map +0 -1
  298. package/dist/discovery/Discovery.js.map +0 -1
  299. package/dist/discovery/OpenApi.d.ts.map +0 -1
  300. package/dist/discovery/OpenApi.js.map +0 -1
  301. package/dist/discovery/Validate.d.ts.map +0 -1
  302. package/dist/discovery/Validate.js.map +0 -1
  303. package/dist/discovery/index.d.ts.map +0 -1
  304. package/dist/discovery/index.js.map +0 -1
  305. package/dist/evm/Assets.d.ts.map +0 -1
  306. package/dist/evm/Assets.js.map +0 -1
  307. package/dist/evm/Chains.d.ts.map +0 -1
  308. package/dist/evm/Chains.js.map +0 -1
  309. package/dist/evm/Methods.d.ts.map +0 -1
  310. package/dist/evm/Methods.js.map +0 -1
  311. package/dist/evm/Types.d.ts.map +0 -1
  312. package/dist/evm/Types.js.map +0 -1
  313. package/dist/evm/client/Charge.d.ts.map +0 -1
  314. package/dist/evm/client/Charge.js.map +0 -1
  315. package/dist/evm/client/Methods.d.ts.map +0 -1
  316. package/dist/evm/client/Methods.js.map +0 -1
  317. package/dist/evm/client/index.d.ts.map +0 -1
  318. package/dist/evm/client/index.js.map +0 -1
  319. package/dist/evm/index.d.ts.map +0 -1
  320. package/dist/evm/index.js.map +0 -1
  321. package/dist/evm/server/Charge.d.ts.map +0 -1
  322. package/dist/evm/server/Charge.js.map +0 -1
  323. package/dist/evm/server/Methods.d.ts.map +0 -1
  324. package/dist/evm/server/Methods.js.map +0 -1
  325. package/dist/evm/server/index.d.ts.map +0 -1
  326. package/dist/evm/server/index.js.map +0 -1
  327. package/dist/index.d.ts.map +0 -1
  328. package/dist/index.js.map +0 -1
  329. package/dist/internal/AcceptPayment.d.ts.map +0 -1
  330. package/dist/internal/AcceptPayment.js.map +0 -1
  331. package/dist/internal/HeaderCodec.d.ts.map +0 -1
  332. package/dist/internal/HeaderCodec.js.map +0 -1
  333. package/dist/internal/constantTimeEqual.d.ts.map +0 -1
  334. package/dist/internal/constantTimeEqual.js.map +0 -1
  335. package/dist/internal/env.d.ts.map +0 -1
  336. package/dist/internal/env.js.map +0 -1
  337. package/dist/internal/types.d.ts.map +0 -1
  338. package/dist/internal/types.js.map +0 -1
  339. package/dist/mcp/client/McpClient.d.ts.map +0 -1
  340. package/dist/mcp/client/McpClient.js.map +0 -1
  341. package/dist/mcp/client/index.d.ts.map +0 -1
  342. package/dist/mcp/client/index.js.map +0 -1
  343. package/dist/mcp/server/Transport.d.ts.map +0 -1
  344. package/dist/mcp/server/Transport.js.map +0 -1
  345. package/dist/mcp/server/index.d.ts.map +0 -1
  346. package/dist/mcp/server/index.js.map +0 -1
  347. package/dist/middlewares/elysia.d.ts.map +0 -1
  348. package/dist/middlewares/elysia.js.map +0 -1
  349. package/dist/middlewares/express.d.ts.map +0 -1
  350. package/dist/middlewares/express.js.map +0 -1
  351. package/dist/middlewares/hono.d.ts.map +0 -1
  352. package/dist/middlewares/hono.js.map +0 -1
  353. package/dist/middlewares/internal/mppx.d.ts.map +0 -1
  354. package/dist/middlewares/internal/mppx.js.map +0 -1
  355. package/dist/middlewares/nextjs.d.ts.map +0 -1
  356. package/dist/middlewares/nextjs.js.map +0 -1
  357. package/dist/proxy/Proxy.d.ts.map +0 -1
  358. package/dist/proxy/Proxy.js.map +0 -1
  359. package/dist/proxy/Service.d.ts.map +0 -1
  360. package/dist/proxy/Service.js.map +0 -1
  361. package/dist/proxy/index.d.ts.map +0 -1
  362. package/dist/proxy/index.js.map +0 -1
  363. package/dist/proxy/internal/Headers.d.ts.map +0 -1
  364. package/dist/proxy/internal/Headers.js.map +0 -1
  365. package/dist/proxy/internal/Route.d.ts.map +0 -1
  366. package/dist/proxy/internal/Route.js.map +0 -1
  367. package/dist/proxy/services/anthropic.d.ts.map +0 -1
  368. package/dist/proxy/services/anthropic.js.map +0 -1
  369. package/dist/proxy/services/openai.d.ts.map +0 -1
  370. package/dist/proxy/services/openai.js.map +0 -1
  371. package/dist/proxy/services/stripe.d.ts.map +0 -1
  372. package/dist/proxy/services/stripe.js.map +0 -1
  373. package/dist/server/Methods.d.ts.map +0 -1
  374. package/dist/server/Methods.js.map +0 -1
  375. package/dist/server/Mppx.d.ts.map +0 -1
  376. package/dist/server/Mppx.js.map +0 -1
  377. package/dist/server/NodeListener.d.ts.map +0 -1
  378. package/dist/server/NodeListener.js.map +0 -1
  379. package/dist/server/Request.d.ts.map +0 -1
  380. package/dist/server/Request.js.map +0 -1
  381. package/dist/server/Response.d.ts.map +0 -1
  382. package/dist/server/Response.js.map +0 -1
  383. package/dist/server/Transport.d.ts.map +0 -1
  384. package/dist/server/Transport.js.map +0 -1
  385. package/dist/server/index.d.ts.map +0 -1
  386. package/dist/server/index.js.map +0 -1
  387. package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
  388. package/dist/server/internal/html/compose.main.gen.js.map +0 -1
  389. package/dist/server/internal/html/config.d.ts.map +0 -1
  390. package/dist/server/internal/html/config.js.map +0 -1
  391. package/dist/server/internal/html/constants.d.ts.map +0 -1
  392. package/dist/server/internal/html/constants.js.map +0 -1
  393. package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
  394. package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
  395. package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
  396. package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
  397. package/dist/server/internal/scope.d.ts.map +0 -1
  398. package/dist/server/internal/scope.js.map +0 -1
  399. package/dist/stripe/Methods.d.ts.map +0 -1
  400. package/dist/stripe/Methods.js.map +0 -1
  401. package/dist/stripe/client/Charge.d.ts.map +0 -1
  402. package/dist/stripe/client/Charge.js.map +0 -1
  403. package/dist/stripe/client/Methods.d.ts.map +0 -1
  404. package/dist/stripe/client/Methods.js.map +0 -1
  405. package/dist/stripe/client/index.d.ts.map +0 -1
  406. package/dist/stripe/client/index.js.map +0 -1
  407. package/dist/stripe/index.d.ts.map +0 -1
  408. package/dist/stripe/index.js.map +0 -1
  409. package/dist/stripe/internal/constants.d.ts.map +0 -1
  410. package/dist/stripe/internal/constants.js.map +0 -1
  411. package/dist/stripe/internal/types.d.ts.map +0 -1
  412. package/dist/stripe/internal/types.js.map +0 -1
  413. package/dist/stripe/server/Charge.d.ts.map +0 -1
  414. package/dist/stripe/server/Charge.js.map +0 -1
  415. package/dist/stripe/server/Methods.d.ts.map +0 -1
  416. package/dist/stripe/server/Methods.js.map +0 -1
  417. package/dist/stripe/server/index.d.ts.map +0 -1
  418. package/dist/stripe/server/index.js.map +0 -1
  419. package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
  420. package/dist/stripe/server/internal/html/types.js.map +0 -1
  421. package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
  422. package/dist/stripe/server/internal/html.gen.js.map +0 -1
  423. package/dist/tempo/Attribution.d.ts.map +0 -1
  424. package/dist/tempo/Attribution.js.map +0 -1
  425. package/dist/tempo/Methods.d.ts.map +0 -1
  426. package/dist/tempo/Methods.js.map +0 -1
  427. package/dist/tempo/Proof.d.ts.map +0 -1
  428. package/dist/tempo/Proof.js.map +0 -1
  429. package/dist/tempo/client/Charge.d.ts.map +0 -1
  430. package/dist/tempo/client/Charge.js.map +0 -1
  431. package/dist/tempo/client/Methods.d.ts.map +0 -1
  432. package/dist/tempo/client/Methods.js.map +0 -1
  433. package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
  434. package/dist/tempo/client/ResolveAccount.js.map +0 -1
  435. package/dist/tempo/client/Subscription.d.ts.map +0 -1
  436. package/dist/tempo/client/Subscription.js.map +0 -1
  437. package/dist/tempo/client/index.d.ts.map +0 -1
  438. package/dist/tempo/client/index.js.map +0 -1
  439. package/dist/tempo/index.d.ts.map +0 -1
  440. package/dist/tempo/index.js.map +0 -1
  441. package/dist/tempo/internal/account.d.ts.map +0 -1
  442. package/dist/tempo/internal/account.js.map +0 -1
  443. package/dist/tempo/internal/address.d.ts.map +0 -1
  444. package/dist/tempo/internal/address.js.map +0 -1
  445. package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
  446. package/dist/tempo/internal/auto-swap.js.map +0 -1
  447. package/dist/tempo/internal/charge.d.ts.map +0 -1
  448. package/dist/tempo/internal/charge.js.map +0 -1
  449. package/dist/tempo/internal/defaults.d.ts.map +0 -1
  450. package/dist/tempo/internal/defaults.js.map +0 -1
  451. package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
  452. package/dist/tempo/internal/fee-payer.js.map +0 -1
  453. package/dist/tempo/internal/fee-token.d.ts.map +0 -1
  454. package/dist/tempo/internal/fee-token.js.map +0 -1
  455. package/dist/tempo/internal/proof.d.ts.map +0 -1
  456. package/dist/tempo/internal/proof.js.map +0 -1
  457. package/dist/tempo/internal/selectors.d.ts.map +0 -1
  458. package/dist/tempo/internal/selectors.js.map +0 -1
  459. package/dist/tempo/internal/types.d.ts.map +0 -1
  460. package/dist/tempo/internal/types.js.map +0 -1
  461. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
  462. package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
  463. package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
  464. package/dist/tempo/legacy/client/Session.js.map +0 -1
  465. package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
  466. package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
  467. package/dist/tempo/legacy/client/index.d.ts.map +0 -1
  468. package/dist/tempo/legacy/client/index.js.map +0 -1
  469. package/dist/tempo/legacy/index.d.ts.map +0 -1
  470. package/dist/tempo/legacy/index.js.map +0 -1
  471. package/dist/tempo/legacy/server/Session.d.ts +0 -208
  472. package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
  473. package/dist/tempo/legacy/server/Session.js +0 -698
  474. package/dist/tempo/legacy/server/Session.js.map +0 -1
  475. package/dist/tempo/legacy/server/index.d.ts +0 -5
  476. package/dist/tempo/legacy/server/index.d.ts.map +0 -1
  477. package/dist/tempo/legacy/server/index.js +0 -5
  478. package/dist/tempo/legacy/server/index.js.map +0 -1
  479. package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
  480. package/dist/tempo/legacy/session/Chain.js.map +0 -1
  481. package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
  482. package/dist/tempo/legacy/session/Channel.js.map +0 -1
  483. package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
  484. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
  485. package/dist/tempo/legacy/session/ChannelStore.js +0 -6
  486. package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
  487. package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
  488. package/dist/tempo/legacy/session/Types.js.map +0 -1
  489. package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
  490. package/dist/tempo/legacy/session/Voucher.js.map +0 -1
  491. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
  492. package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
  493. package/dist/tempo/legacy/session/index.d.ts.map +0 -1
  494. package/dist/tempo/legacy/session/index.js.map +0 -1
  495. package/dist/tempo/server/Charge.d.ts.map +0 -1
  496. package/dist/tempo/server/Charge.js.map +0 -1
  497. package/dist/tempo/server/Methods.d.ts.map +0 -1
  498. package/dist/tempo/server/Methods.js.map +0 -1
  499. package/dist/tempo/server/Relay.d.ts.map +0 -1
  500. package/dist/tempo/server/Relay.js.map +0 -1
  501. package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
  502. package/dist/tempo/server/SponsorBudget.js.map +0 -1
  503. package/dist/tempo/server/Subscription.d.ts.map +0 -1
  504. package/dist/tempo/server/Subscription.js.map +0 -1
  505. package/dist/tempo/server/index.d.ts.map +0 -1
  506. package/dist/tempo/server/index.js.map +0 -1
  507. package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
  508. package/dist/tempo/server/internal/html.gen.js.map +0 -1
  509. package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
  510. package/dist/tempo/server/internal/request-body.js.map +0 -1
  511. package/dist/tempo/server/internal/transport.d.ts.map +0 -1
  512. package/dist/tempo/server/internal/transport.js.map +0 -1
  513. package/dist/tempo/session/Snapshot.d.ts.map +0 -1
  514. package/dist/tempo/session/Snapshot.js.map +0 -1
  515. package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
  516. package/dist/tempo/session/client/ChannelOps.js.map +0 -1
  517. package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
  518. package/dist/tempo/session/client/ChannelStore.js.map +0 -1
  519. package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
  520. package/dist/tempo/session/client/CredentialState.js.map +0 -1
  521. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
  522. package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
  523. package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
  524. package/dist/tempo/session/client/Runtime.js.map +0 -1
  525. package/dist/tempo/session/client/Session.d.ts.map +0 -1
  526. package/dist/tempo/session/client/Session.js.map +0 -1
  527. package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
  528. package/dist/tempo/session/client/SessionManager.js.map +0 -1
  529. package/dist/tempo/session/client/Transports.d.ts.map +0 -1
  530. package/dist/tempo/session/client/Transports.js.map +0 -1
  531. package/dist/tempo/session/client/index.d.ts.map +0 -1
  532. package/dist/tempo/session/client/index.js.map +0 -1
  533. package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
  534. package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
  535. package/dist/tempo/session/index.d.ts.map +0 -1
  536. package/dist/tempo/session/index.js.map +0 -1
  537. package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
  538. package/dist/tempo/session/precompile/Chain.js.map +0 -1
  539. package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
  540. package/dist/tempo/session/precompile/Channel.js.map +0 -1
  541. package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
  542. package/dist/tempo/session/precompile/Protocol.js.map +0 -1
  543. package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
  544. package/dist/tempo/session/precompile/Voucher.js.map +0 -1
  545. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
  546. package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
  547. package/dist/tempo/session/precompile/index.d.ts.map +0 -1
  548. package/dist/tempo/session/precompile/index.js.map +0 -1
  549. package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
  550. package/dist/tempo/session/server/ChannelOps.js.map +0 -1
  551. package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
  552. package/dist/tempo/session/server/ChannelStore.js.map +0 -1
  553. package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
  554. package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
  555. package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
  556. package/dist/tempo/session/server/MeteredStream.js.map +0 -1
  557. package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
  558. package/dist/tempo/session/server/RequestState.js.map +0 -1
  559. package/dist/tempo/session/server/Session.d.ts.map +0 -1
  560. package/dist/tempo/session/server/Session.js.map +0 -1
  561. package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
  562. package/dist/tempo/session/server/Settlement.js.map +0 -1
  563. package/dist/tempo/session/server/Sse.d.ts.map +0 -1
  564. package/dist/tempo/session/server/Sse.js.map +0 -1
  565. package/dist/tempo/session/server/Transports.d.ts.map +0 -1
  566. package/dist/tempo/session/server/Transports.js.map +0 -1
  567. package/dist/tempo/session/server/Ws.d.ts.map +0 -1
  568. package/dist/tempo/session/server/Ws.js.map +0 -1
  569. package/dist/tempo/session/server/index.d.ts.map +0 -1
  570. package/dist/tempo/session/server/index.js.map +0 -1
  571. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
  572. package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
  573. package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
  574. package/dist/tempo/subscription/Receipt.js.map +0 -1
  575. package/dist/tempo/subscription/Store.d.ts.map +0 -1
  576. package/dist/tempo/subscription/Store.js.map +0 -1
  577. package/dist/tempo/subscription/Types.d.ts.map +0 -1
  578. package/dist/tempo/subscription/Types.js.map +0 -1
  579. package/dist/tempo/subscription/index.d.ts.map +0 -1
  580. package/dist/tempo/subscription/index.js.map +0 -1
  581. package/dist/validation/core.d.ts.map +0 -1
  582. package/dist/validation/core.js.map +0 -1
  583. package/dist/validation/index.d.ts.map +0 -1
  584. package/dist/validation/index.js.map +0 -1
  585. package/dist/viem/Account.d.ts.map +0 -1
  586. package/dist/viem/Account.js.map +0 -1
  587. package/dist/viem/Client.d.ts.map +0 -1
  588. package/dist/viem/Client.js.map +0 -1
  589. package/dist/x402/Assets.d.ts.map +0 -1
  590. package/dist/x402/Assets.js.map +0 -1
  591. package/dist/x402/Header.d.ts.map +0 -1
  592. package/dist/x402/Header.js.map +0 -1
  593. package/dist/x402/Types.d.ts.map +0 -1
  594. package/dist/x402/Types.js.map +0 -1
  595. package/dist/x402/client/Exact.d.ts.map +0 -1
  596. package/dist/x402/client/Exact.js.map +0 -1
  597. package/dist/x402/index.d.ts.map +0 -1
  598. package/dist/x402/index.js.map +0 -1
  599. package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
  600. package/dist/x402/internal/ChallengeBrand.js.map +0 -1
  601. package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
  602. package/dist/x402/internal/RouteBinding.js.map +0 -1
  603. package/dist/x402/server/EvmCharge.d.ts.map +0 -1
  604. package/dist/x402/server/EvmCharge.js.map +0 -1
  605. package/dist/x402/server/Facilitator.d.ts.map +0 -1
  606. package/dist/x402/server/Facilitator.js.map +0 -1
  607. package/dist/zod.d.ts.map +0 -1
  608. package/dist/zod.js.map +0 -1
  609. package/src/BodyDigest.test.ts +0 -43
  610. package/src/BodyDigest.ts +0 -55
  611. package/src/Challenge.fuzz.test.ts +0 -121
  612. package/src/Challenge.test-d.ts +0 -82
  613. package/src/Challenge.test.ts +0 -995
  614. package/src/Challenge.ts +0 -683
  615. package/src/Constants.ts +0 -58
  616. package/src/Credential.fuzz.test.ts +0 -62
  617. package/src/Credential.test.ts +0 -378
  618. package/src/Credential.ts +0 -217
  619. package/src/Errors.test.ts +0 -520
  620. package/src/Errors.ts +0 -448
  621. package/src/Expires.test.ts +0 -112
  622. package/src/Expires.ts +0 -59
  623. package/src/Html.ts +0 -67
  624. package/src/Mcp.ts +0 -85
  625. package/src/Method.test.ts +0 -177
  626. package/src/Method.ts +0 -617
  627. package/src/PaymentRequest.test.ts +0 -147
  628. package/src/PaymentRequest.ts +0 -108
  629. package/src/Receipt.test.ts +0 -151
  630. package/src/Receipt.ts +0 -146
  631. package/src/Store.test-d.ts +0 -195
  632. package/src/Store.test.ts +0 -357
  633. package/src/Store.ts +0 -329
  634. package/src/bin.ts +0 -4
  635. package/src/cli/account.ts +0 -269
  636. package/src/cli/cli.test.ts +0 -2221
  637. package/src/cli/cli.ts +0 -1649
  638. package/src/cli/config.test.ts +0 -89
  639. package/src/cli/config.ts +0 -50
  640. package/src/cli/internal.ts +0 -114
  641. package/src/cli/mcp.test.ts +0 -262
  642. package/src/cli/plugins/evm.ts +0 -55
  643. package/src/cli/plugins/index.ts +0 -4
  644. package/src/cli/plugins/plugin.ts +0 -84
  645. package/src/cli/plugins/stripe.ts +0 -174
  646. package/src/cli/plugins/tempo.ts +0 -1102
  647. package/src/cli/sessions/Manager.test.ts +0 -249
  648. package/src/cli/sessions/Manager.ts +0 -93
  649. package/src/cli/sessions/commands.ts +0 -444
  650. package/src/cli/sessions/request.test.ts +0 -51
  651. package/src/cli/sessions/request.ts +0 -353
  652. package/src/cli/sessions/store.test.ts +0 -581
  653. package/src/cli/sessions/store.ts +0 -940
  654. package/src/cli/utils.test.ts +0 -156
  655. package/src/cli/utils.ts +0 -394
  656. package/src/cli/validate/challenge.ts +0 -565
  657. package/src/cli/validate/discovery.test.ts +0 -435
  658. package/src/cli/validate/discovery.ts +0 -221
  659. package/src/cli/validate/helpers.ts +0 -166
  660. package/src/cli/validate/index.ts +0 -229
  661. package/src/cli/validate/messages.ts +0 -7
  662. package/src/cli/validate/payment.ts +0 -774
  663. package/src/cli/validate.test.ts +0 -843
  664. package/src/client/Methods.ts +0 -8
  665. package/src/client/Mppx.test-d.ts +0 -270
  666. package/src/client/Mppx.test.ts +0 -1065
  667. package/src/client/Mppx.ts +0 -466
  668. package/src/client/Transport.test.ts +0 -619
  669. package/src/client/Transport.ts +0 -191
  670. package/src/client/index.ts +0 -29
  671. package/src/client/internal/Fetch.browser.test.ts +0 -197
  672. package/src/client/internal/Fetch.test-d.ts +0 -109
  673. package/src/client/internal/Fetch.test.ts +0 -2336
  674. package/src/client/internal/Fetch.ts +0 -1079
  675. package/src/client/internal/MethodChallenge.ts +0 -35
  676. package/src/client/internal/MethodResponse.ts +0 -67
  677. package/src/client/internal/protocols/Mcp.test.ts +0 -220
  678. package/src/client/internal/protocols/Mcp.ts +0 -186
  679. package/src/client/internal/protocols/Mpp.ts +0 -21
  680. package/src/client/internal/protocols/Protocol.ts +0 -10
  681. package/src/client/internal/protocols/Shared.ts +0 -25
  682. package/src/client/internal/protocols/X402.ts +0 -46
  683. package/src/client/node.test.ts +0 -115
  684. package/src/client/node.ts +0 -247
  685. package/src/discovery/Discovery.test.ts +0 -214
  686. package/src/discovery/Discovery.ts +0 -105
  687. package/src/discovery/OpenApi.test.ts +0 -453
  688. package/src/discovery/OpenApi.ts +0 -224
  689. package/src/discovery/Validate.test.ts +0 -305
  690. package/src/discovery/Validate.ts +0 -77
  691. package/src/discovery/index.ts +0 -3
  692. package/src/env.d.ts +0 -12
  693. package/src/evm/Assets.ts +0 -1
  694. package/src/evm/Chains.ts +0 -11
  695. package/src/evm/Methods.ts +0 -44
  696. package/src/evm/PublicInterface.test-d.ts +0 -134
  697. package/src/evm/Types.ts +0 -140
  698. package/src/evm/client/Charge.test.ts +0 -347
  699. package/src/evm/client/Charge.ts +0 -187
  700. package/src/evm/client/Methods.ts +0 -19
  701. package/src/evm/client/index.ts +0 -6
  702. package/src/evm/index.ts +0 -16
  703. package/src/evm/server/Charge.test.ts +0 -339
  704. package/src/evm/server/Charge.ts +0 -290
  705. package/src/evm/server/Methods.ts +0 -22
  706. package/src/evm/server/index.ts +0 -6
  707. package/src/index.ts +0 -14
  708. package/src/internal/AcceptPayment.test.ts +0 -343
  709. package/src/internal/AcceptPayment.ts +0 -366
  710. package/src/internal/HeaderCodec.ts +0 -36
  711. package/src/internal/changeset.test.ts +0 -106
  712. package/src/internal/constantTimeEqual.test.ts +0 -47
  713. package/src/internal/constantTimeEqual.ts +0 -10
  714. package/src/internal/env.test.ts +0 -42
  715. package/src/internal/env.ts +0 -49
  716. package/src/internal/types.test-d.ts +0 -21
  717. package/src/internal/types.ts +0 -470
  718. package/src/mcp/client/McpClient.integration.test.ts +0 -652
  719. package/src/mcp/client/McpClient.test-d.ts +0 -144
  720. package/src/mcp/client/McpClient.test.ts +0 -463
  721. package/src/mcp/client/McpClient.ts +0 -307
  722. package/src/mcp/client/McpClient.unit.test.ts +0 -135
  723. package/src/mcp/client/index.ts +0 -2
  724. package/src/mcp/server/Transport.test.ts +0 -191
  725. package/src/mcp/server/Transport.ts +0 -111
  726. package/src/mcp/server/index.ts +0 -1
  727. package/src/middlewares/elysia.test.ts +0 -295
  728. package/src/middlewares/elysia.ts +0 -116
  729. package/src/middlewares/express.test.ts +0 -371
  730. package/src/middlewares/express.ts +0 -140
  731. package/src/middlewares/hono.test.ts +0 -476
  732. package/src/middlewares/hono.ts +0 -153
  733. package/src/middlewares/internal/mppx.test.ts +0 -177
  734. package/src/middlewares/internal/mppx.ts +0 -67
  735. package/src/middlewares/nextjs.test.ts +0 -369
  736. package/src/middlewares/nextjs.ts +0 -107
  737. package/src/proxy/Proxy.test.ts +0 -1031
  738. package/src/proxy/Proxy.ts +0 -345
  739. package/src/proxy/Service.test.ts +0 -182
  740. package/src/proxy/Service.ts +0 -253
  741. package/src/proxy/index.ts +0 -6
  742. package/src/proxy/internal/Headers.test.ts +0 -139
  743. package/src/proxy/internal/Headers.ts +0 -66
  744. package/src/proxy/internal/Route.test.ts +0 -217
  745. package/src/proxy/internal/Route.ts +0 -64
  746. package/src/proxy/services/anthropic.test.ts +0 -132
  747. package/src/proxy/services/anthropic.ts +0 -52
  748. package/src/proxy/services/openai.test.ts +0 -157
  749. package/src/proxy/services/openai.ts +0 -59
  750. package/src/proxy/services/stripe.test.ts +0 -175
  751. package/src/proxy/services/stripe.ts +0 -58
  752. package/src/server/Methods.ts +0 -3
  753. package/src/server/Mppx.authorize.test.ts +0 -210
  754. package/src/server/Mppx.test-d.ts +0 -360
  755. package/src/server/Mppx.test.ts +0 -5813
  756. package/src/server/Mppx.ts +0 -2623
  757. package/src/server/NodeListener.test.ts +0 -293
  758. package/src/server/NodeListener.ts +0 -45
  759. package/src/server/Request.test.ts +0 -255
  760. package/src/server/Request.ts +0 -155
  761. package/src/server/Response.test.ts +0 -32
  762. package/src/server/Response.ts +0 -45
  763. package/src/server/Transport.test.ts +0 -598
  764. package/src/server/Transport.ts +0 -320
  765. package/src/server/index.ts +0 -9
  766. package/src/server/internal/html/compose.main.gen.ts +0 -2
  767. package/src/server/internal/html/compose.main.ts +0 -88
  768. package/src/server/internal/html/config.ts +0 -672
  769. package/src/server/internal/html/constants.ts +0 -28
  770. package/src/server/internal/html/serviceWorker.client.ts +0 -28
  771. package/src/server/internal/html/serviceWorker.gen.ts +0 -2
  772. package/src/server/internal/html/serviceWorker.ts +0 -27
  773. package/src/server/internal/html/tsconfig.compose.json +0 -8
  774. package/src/server/internal/html/tsconfig.worker.client.json +0 -8
  775. package/src/server/internal/html/tsconfig.worker.json +0 -8
  776. package/src/server/internal/scope.ts +0 -43
  777. package/src/stripe/Charge.integration.test.ts +0 -329
  778. package/src/stripe/Methods.test.ts +0 -62
  779. package/src/stripe/Methods.ts +0 -44
  780. package/src/stripe/client/Charge.test.ts +0 -205
  781. package/src/stripe/client/Charge.ts +0 -132
  782. package/src/stripe/client/Methods.ts +0 -37
  783. package/src/stripe/client/index.ts +0 -2
  784. package/src/stripe/index.ts +0 -1
  785. package/src/stripe/internal/constants.ts +0 -7
  786. package/src/stripe/internal/types.ts +0 -46
  787. package/src/stripe/server/Charge.test-d.ts +0 -66
  788. package/src/stripe/server/Charge.test.ts +0 -621
  789. package/src/stripe/server/Charge.ts +0 -434
  790. package/src/stripe/server/Methods.ts +0 -24
  791. package/src/stripe/server/index.ts +0 -2
  792. package/src/stripe/server/internal/html/main.ts +0 -165
  793. package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
  794. package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
  795. package/src/stripe/server/internal/html/package.json +0 -9
  796. package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
  797. package/src/stripe/server/internal/html/tsconfig.json +0 -8
  798. package/src/stripe/server/internal/html/types.ts +0 -5
  799. package/src/stripe/server/internal/html.gen.ts +0 -2
  800. package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
  801. package/src/tempo/Attribution.test.ts +0 -294
  802. package/src/tempo/Attribution.ts +0 -185
  803. package/src/tempo/Methods.test.ts +0 -425
  804. package/src/tempo/Methods.ts +0 -367
  805. package/src/tempo/Proof.conformance.test.ts +0 -146
  806. package/src/tempo/Proof.test-d.ts +0 -32
  807. package/src/tempo/Proof.test.ts +0 -40
  808. package/src/tempo/Proof.ts +0 -69
  809. package/src/tempo/PublicExports.test-d.ts +0 -130
  810. package/src/tempo/Subscription.integration.test.ts +0 -591
  811. package/src/tempo/client/Charge.test.ts +0 -501
  812. package/src/tempo/client/Charge.ts +0 -289
  813. package/src/tempo/client/Methods.ts +0 -45
  814. package/src/tempo/client/ResolveAccount.ts +0 -46
  815. package/src/tempo/client/Subscription.test.ts +0 -180
  816. package/src/tempo/client/Subscription.ts +0 -156
  817. package/src/tempo/client/index.ts +0 -17
  818. package/src/tempo/index.ts +0 -5
  819. package/src/tempo/internal/account.ts +0 -56
  820. package/src/tempo/internal/address.ts +0 -6
  821. package/src/tempo/internal/auto-swap.test.ts +0 -198
  822. package/src/tempo/internal/auto-swap.ts +0 -188
  823. package/src/tempo/internal/charge.test.ts +0 -66
  824. package/src/tempo/internal/charge.ts +0 -43
  825. package/src/tempo/internal/defaults.test.ts +0 -95
  826. package/src/tempo/internal/defaults.ts +0 -53
  827. package/src/tempo/internal/fee-payer.test.ts +0 -1177
  828. package/src/tempo/internal/fee-payer.ts +0 -808
  829. package/src/tempo/internal/fee-token.test.ts +0 -165
  830. package/src/tempo/internal/fee-token.ts +0 -72
  831. package/src/tempo/internal/proof.test.ts +0 -97
  832. package/src/tempo/internal/proof.ts +0 -87
  833. package/src/tempo/internal/selectors.ts +0 -10
  834. package/src/tempo/internal/types.ts +0 -19
  835. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
  836. package/src/tempo/legacy/README.md +0 -9
  837. package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
  838. package/src/tempo/legacy/client/ChannelOps.ts +0 -271
  839. package/src/tempo/legacy/client/Session.test.ts +0 -800
  840. package/src/tempo/legacy/client/Session.ts +0 -397
  841. package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
  842. package/src/tempo/legacy/client/SessionManager.ts +0 -909
  843. package/src/tempo/legacy/client/index.ts +0 -6
  844. package/src/tempo/legacy/index.ts +0 -6
  845. package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
  846. package/src/tempo/legacy/server/Session.test.ts +0 -6370
  847. package/src/tempo/legacy/server/Session.ts +0 -1024
  848. package/src/tempo/legacy/server/index.ts +0 -4
  849. package/src/tempo/legacy/session/Chain.test.ts +0 -1349
  850. package/src/tempo/legacy/session/Chain.ts +0 -830
  851. package/src/tempo/legacy/session/Channel.test.ts +0 -109
  852. package/src/tempo/legacy/session/Channel.ts +0 -51
  853. package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
  854. package/src/tempo/legacy/session/ChannelStore.ts +0 -39
  855. package/src/tempo/legacy/session/Types.ts +0 -91
  856. package/src/tempo/legacy/session/Voucher.test.ts +0 -410
  857. package/src/tempo/legacy/session/Voucher.ts +0 -183
  858. package/src/tempo/legacy/session/escrow.abi.ts +0 -760
  859. package/src/tempo/legacy/session/index.ts +0 -8
  860. package/src/tempo/server/AtomicStore.test-d.ts +0 -50
  861. package/src/tempo/server/Charge.test.ts +0 -6121
  862. package/src/tempo/server/Charge.ts +0 -1351
  863. package/src/tempo/server/Methods.ts +0 -106
  864. package/src/tempo/server/Relay.test.ts +0 -677
  865. package/src/tempo/server/Relay.ts +0 -297
  866. package/src/tempo/server/SponsorBudget.test.ts +0 -154
  867. package/src/tempo/server/SponsorBudget.ts +0 -219
  868. package/src/tempo/server/Sse.test.ts +0 -321
  869. package/src/tempo/server/Subscription.test.ts +0 -1944
  870. package/src/tempo/server/Subscription.ts +0 -1333
  871. package/src/tempo/server/index.ts +0 -12
  872. package/src/tempo/server/internal/html/main.ts +0 -115
  873. package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
  874. package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
  875. package/src/tempo/server/internal/html/package.json +0 -10
  876. package/src/tempo/server/internal/html/tsconfig.json +0 -8
  877. package/src/tempo/server/internal/html.gen.ts +0 -2
  878. package/src/tempo/server/internal/request-body.test.ts +0 -210
  879. package/src/tempo/server/internal/request-body.ts +0 -61
  880. package/src/tempo/server/internal/transport.test.ts +0 -903
  881. package/src/tempo/server/internal/transport.ts +0 -310
  882. package/src/tempo/session/README.md +0 -208
  883. package/src/tempo/session/Snapshot.test.ts +0 -41
  884. package/src/tempo/session/Snapshot.ts +0 -95
  885. package/src/tempo/session/client/ChannelOps.test.ts +0 -218
  886. package/src/tempo/session/client/ChannelOps.ts +0 -348
  887. package/src/tempo/session/client/ChannelStore.ts +0 -111
  888. package/src/tempo/session/client/CredentialState.test.ts +0 -789
  889. package/src/tempo/session/client/CredentialState.ts +0 -942
  890. package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
  891. package/src/tempo/session/client/Runtime.test.ts +0 -1104
  892. package/src/tempo/session/client/Runtime.ts +0 -1008
  893. package/src/tempo/session/client/Session.test.ts +0 -1355
  894. package/src/tempo/session/client/Session.ts +0 -420
  895. package/src/tempo/session/client/SessionManager.test.ts +0 -1899
  896. package/src/tempo/session/client/SessionManager.ts +0 -996
  897. package/src/tempo/session/client/Transports.test.ts +0 -1141
  898. package/src/tempo/session/client/Transports.ts +0 -1534
  899. package/src/tempo/session/client/index.ts +0 -40
  900. package/src/tempo/session/client/internal/SessionManager.ts +0 -36
  901. package/src/tempo/session/index.ts +0 -7
  902. package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
  903. package/src/tempo/session/precompile/Chain.test.ts +0 -1641
  904. package/src/tempo/session/precompile/Chain.ts +0 -1149
  905. package/src/tempo/session/precompile/Channel.test.ts +0 -147
  906. package/src/tempo/session/precompile/Channel.ts +0 -108
  907. package/src/tempo/session/precompile/Protocol.test.ts +0 -358
  908. package/src/tempo/session/precompile/Protocol.ts +0 -520
  909. package/src/tempo/session/precompile/Voucher.test.ts +0 -354
  910. package/src/tempo/session/precompile/Voucher.ts +0 -162
  911. package/src/tempo/session/precompile/escrow.abi.ts +0 -226
  912. package/src/tempo/session/precompile/index.ts +0 -33
  913. package/src/tempo/session/server/ChannelOps.test.ts +0 -129
  914. package/src/tempo/session/server/ChannelOps.ts +0 -157
  915. package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
  916. package/src/tempo/session/server/ChannelStore.ts +0 -835
  917. package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
  918. package/src/tempo/session/server/CredentialVerification.ts +0 -775
  919. package/src/tempo/session/server/MeteredStream.ts +0 -95
  920. package/src/tempo/session/server/RequestState.test.ts +0 -574
  921. package/src/tempo/session/server/RequestState.ts +0 -507
  922. package/src/tempo/session/server/Session.integration.test.ts +0 -449
  923. package/src/tempo/session/server/Session.test.ts +0 -3862
  924. package/src/tempo/session/server/Session.ts +0 -570
  925. package/src/tempo/session/server/Settlement.test.ts +0 -345
  926. package/src/tempo/session/server/Settlement.ts +0 -527
  927. package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
  928. package/src/tempo/session/server/Sse.test.ts +0 -557
  929. package/src/tempo/session/server/Sse.ts +0 -254
  930. package/src/tempo/session/server/Transports.test.ts +0 -346
  931. package/src/tempo/session/server/Transports.ts +0 -255
  932. package/src/tempo/session/server/Ws.test.ts +0 -594
  933. package/src/tempo/session/server/Ws.ts +0 -385
  934. package/src/tempo/session/server/index.ts +0 -12
  935. package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
  936. package/src/tempo/subscription/KeyAuthorization.ts +0 -396
  937. package/src/tempo/subscription/Receipt.ts +0 -28
  938. package/src/tempo/subscription/Store.test.ts +0 -609
  939. package/src/tempo/subscription/Store.ts +0 -449
  940. package/src/tempo/subscription/Types.ts +0 -68
  941. package/src/tempo/subscription/index.ts +0 -23
  942. package/src/tsconfig.json +0 -10
  943. package/src/validation/core.ts +0 -386
  944. package/src/validation/index.ts +0 -11
  945. package/src/viem/Account.test.ts +0 -72
  946. package/src/viem/Account.ts +0 -30
  947. package/src/viem/Client.test.ts +0 -366
  948. package/src/viem/Client.ts +0 -93
  949. package/src/x402/Assets.test.ts +0 -253
  950. package/src/x402/Assets.ts +0 -221
  951. package/src/x402/Exact.e2e.test.ts +0 -448
  952. package/src/x402/Exact.localnet.test.ts +0 -475
  953. package/src/x402/Header.test.ts +0 -73
  954. package/src/x402/Header.ts +0 -79
  955. package/src/x402/PublicInterface.test-d.ts +0 -39
  956. package/src/x402/Types.ts +0 -248
  957. package/src/x402/client/Exact.test.ts +0 -309
  958. package/src/x402/client/Exact.ts +0 -186
  959. package/src/x402/index.ts +0 -6
  960. package/src/x402/internal/ChallengeBrand.ts +0 -14
  961. package/src/x402/internal/RouteBinding.ts +0 -18
  962. package/src/x402/server/EvmCharge.ts +0 -394
  963. package/src/x402/server/Facilitator.test.ts +0 -111
  964. package/src/x402/server/Facilitator.ts +0 -56
  965. package/src/zod.test.ts +0 -169
  966. package/src/zod.ts +0 -71
@@ -1,1102 +0,0 @@
1
- import * as child from 'node:child_process'
2
- import * as fs from 'node:fs'
3
- import { createRequire } from 'node:module'
4
- import * as os from 'node:os'
5
- import * as path from 'node:path'
6
-
7
- import { Errors, z } from 'incur'
8
- import { Base64 } from 'ox'
9
- import type { Address } from 'viem'
10
- import { createClient, http } from 'viem'
11
- import { privateKeyToAccount } from 'viem/accounts'
12
- import { Actions } from 'viem/tempo'
13
-
14
- import type * as Challenge from '../../Challenge.js'
15
- import { normalizeHeaders } from '../../client/internal/Fetch.js'
16
- import * as Constants from '../../Constants.js'
17
- import * as Credential from '../../Credential.js'
18
- import { tempo as tempoMethods } from '../../tempo/client/index.js'
19
- import { tip20ChannelEscrow } from '../../tempo/session/precompile/Protocol.js'
20
- import type {
21
- ChannelDescriptor,
22
- SessionCredentialPayload,
23
- } from '../../tempo/session/precompile/Protocol.js'
24
- import { signVoucher } from '../../tempo/session/precompile/Voucher.js'
25
- import { createDefaultStore, createKeychain, resolveAccountName } from '../account.js'
26
- import {
27
- fetchTokenInfo,
28
- fmtBalance,
29
- isTempoAccount,
30
- isTestnet,
31
- link,
32
- pc,
33
- resolveChain,
34
- resolveRpcUrl,
35
- type Network,
36
- } from '../utils.js'
37
- import { createPlugin, type Plugin } from './plugin.js'
38
-
39
- const packageJson = createRequire(import.meta.url)('../../../package.json') as { name: string }
40
- const booleanOption = z.union([
41
- z.boolean(),
42
- z.literal('true').transform(() => true),
43
- z.literal('false').transform(() => false),
44
- ])
45
-
46
- async function writeResponseBody(response: Response) {
47
- process.stdout.write(Buffer.from(await response.arrayBuffer()))
48
- }
49
-
50
- const tempoOptionSchema = z.object({
51
- autoSwap: z.optional(booleanOption),
52
- channel: z.optional(z.coerce.string()),
53
- deposit: z.optional(z.union([z.string(), z.number()])),
54
- payWith: z.optional(z.string()),
55
- slippage: z.optional(z.coerce.number()),
56
- tokenIn: z.optional(z.string()),
57
- })
58
- const tempoOptionKeys = [
59
- 'autoSwap',
60
- 'channel',
61
- 'deposit',
62
- 'payWith',
63
- 'slippage',
64
- 'tokenIn',
65
- ] as const
66
- const tempoChargeChallengeScoreOrder = [
67
- 'payable',
68
- 'unknownBalance',
69
- 'insufficientBalance',
70
- 'unsupported',
71
- ] as const
72
-
73
- type TempoChargeChallengeScore = (typeof tempoChargeChallengeScoreOrder)[number]
74
-
75
- /**
76
- * Orders Tempo charge challenges by whether the configured wallet can satisfy them.
77
- *
78
- * Direct balances are preferred first. Unsupported or unpayable challenges keep
79
- * their original relative order.
80
- */
81
- export async function orderTempoChargeChallengesByBalance(
82
- challenges: readonly Challenge.Challenge[],
83
- ctx: {
84
- options: {
85
- account?: string | undefined
86
- network?: Network | undefined
87
- rpcUrl?: string | undefined
88
- }
89
- },
90
- ): Promise<Challenge.Challenge[]> {
91
- const tempoPositions: number[] = []
92
- const tempoChallenges: Challenge.Challenge[] = []
93
- for (const [index, challenge] of challenges.entries()) {
94
- if (!isTempoChargeChallenge(challenge)) continue
95
- tempoPositions.push(index)
96
- tempoChallenges.push(challenge)
97
- }
98
- if (tempoChallenges.length < 2) return [...challenges]
99
-
100
- const probe = await resolveBalanceProbe(ctx).catch(() => undefined)
101
- if (!probe) return [...challenges]
102
-
103
- const scored = await Promise.all(
104
- tempoChallenges.map(async (challenge, index) => ({
105
- challenge,
106
- index,
107
- score: await scoreTempoChargeChallenge(challenge, probe),
108
- })),
109
- )
110
- scored.sort(
111
- (left, right) =>
112
- tempoChargeChallengeScoreOrder.indexOf(left.score) -
113
- tempoChargeChallengeScoreOrder.indexOf(right.score) || left.index - right.index,
114
- )
115
-
116
- const ordered = [...challenges]
117
- for (const [index, position] of tempoPositions.entries()) {
118
- ordered[position] = scored[index]!.challenge
119
- }
120
- return ordered
121
- }
122
-
123
- export function tempo() {
124
- let _session:
125
- | {
126
- signVoucher(params: {
127
- channelId: string
128
- cumulativeAmount: bigint
129
- escrowContract: Address
130
- chainId: number
131
- action?: 'voucher' | 'close'
132
- }): Promise<string>
133
- descriptor?: ChannelDescriptor | undefined
134
- source: string
135
- }
136
- | undefined
137
-
138
- return createPlugin({
139
- method: 'tempo',
140
- supports(challenge) {
141
- return challenge.method === 'tempo' && ['charge', 'session'].includes(challenge.intent)
142
- },
143
-
144
- async setup({ challenge, options, methodOpts }) {
145
- const accountName = resolveAccountName(options.account)
146
- const challengeRequest = challenge.request as Record<string, unknown>
147
- const currency = challengeRequest.currency as string | undefined
148
- const tempoOpts = parseTempoOptions(methodOpts)
149
- const autoSwap = resolveAutoSwap({
150
- autoSwap: tempoOpts.autoSwap ?? options.autoSwap,
151
- payWith: tempoOpts.payWith ?? options.payWith,
152
- slippage: tempoOpts.slippage ?? options.slippage,
153
- tokenIn: tempoOpts.tokenIn,
154
- })
155
-
156
- let tokenSymbol = currency ?? ''
157
- let tokenDecimals = (challengeRequest.decimals as number | undefined) ?? 6
158
- let explorerUrl: string | undefined
159
-
160
- let account: ReturnType<typeof privateKeyToAccount> | undefined
161
- let client: ReturnType<typeof createClient> | undefined
162
- let useTempoCliSign = false
163
-
164
- const privateKey =
165
- process.env.MPPX_PRIVATE_KEY?.trim() ||
166
- (isTempoAccount(accountName) ? undefined : await createKeychain(accountName).get())
167
-
168
- if (!privateKey && isTempoAccount(accountName) && hasTempoCliSync()) {
169
- useTempoCliSign = true
170
- const tempoEntry = resolveTempoAccount(accountName)
171
- if (tempoEntry) {
172
- const rpcUrl = resolveRpcUrl(options.rpcUrl, { network: options.network })
173
- client = createClient({
174
- chain: await resolveChain({ network: options.network, rpcUrl }),
175
- transport: http(rpcUrl),
176
- })
177
- assertChallengeChain({ challenge, clientChainId: client.chain?.id })
178
- explorerUrl = client.chain?.blockExplorers?.default?.url
179
- const tokenInfo = currency
180
- ? await fetchTokenInfo(
181
- client,
182
- currency as Address,
183
- tempoEntry.wallet_address as Address,
184
- ).catch(() => undefined)
185
- : undefined
186
- tokenSymbol = tokenInfo?.symbol ?? currency ?? ''
187
- tokenDecimals =
188
- tokenInfo?.decimals ?? (challengeRequest.decimals as number | undefined) ?? 6
189
- }
190
- } else if (!privateKey) {
191
- const fallback = fallbackFromTempo()
192
- if (fallback) {
193
- const fallbackKey = await createKeychain(fallback).get()
194
- if (fallbackKey) account = privateKeyToAccount(fallbackKey as `0x${string}`)
195
- }
196
- if (!account) {
197
- if (options.account)
198
- throw new Errors.IncurError({
199
- code: 'ACCOUNT_NOT_FOUND',
200
- message: `Account "${accountName}" not found.`,
201
- exitCode: 69,
202
- })
203
- else
204
- throw new Errors.IncurError({
205
- code: 'ACCOUNT_NOT_FOUND',
206
- message: 'No account found.',
207
- exitCode: 69,
208
- })
209
- }
210
- } else account = privateKeyToAccount(privateKey as `0x${string}`)
211
-
212
- if (!useTempoCliSign && account) {
213
- const rpcUrl = resolveRpcUrl(options.rpcUrl, { network: options.network })
214
- client = createClient({
215
- chain: await resolveChain({ network: options.network, rpcUrl }),
216
- transport: http(rpcUrl),
217
- })
218
- assertChallengeChain({ challenge, clientChainId: client.chain?.id })
219
- explorerUrl = client.chain?.blockExplorers?.default?.url
220
- const tokenInfo = currency
221
- ? await fetchTokenInfo(client, currency as Address, account.address).catch(
222
- () => undefined,
223
- )
224
- : undefined
225
- tokenSymbol = tokenInfo?.symbol ?? currency ?? ''
226
- tokenDecimals =
227
- tokenInfo?.decimals ?? (challengeRequest.decimals as number | undefined) ?? 6
228
- }
229
-
230
- if (useTempoCliSign)
231
- return {
232
- tokenSymbol,
233
- tokenDecimals,
234
- explorerUrl,
235
- methods: [],
236
- async createCredential(response: Response) {
237
- const wwwAuth = response.headers.get('www-authenticate')
238
- if (!wwwAuth) throw new Error('No WWW-Authenticate header in 402 response.')
239
- return tempoCliSign(wwwAuth)
240
- },
241
- }
242
-
243
- if (!account || !client)
244
- throw new Errors.IncurError({
245
- code: 'ACCOUNT_NOT_FOUND',
246
- message: 'Tempo requires a configured account.',
247
- exitCode: 69,
248
- })
249
-
250
- const methods = tempoMethods({
251
- account,
252
- getClient: () => client!,
253
- ...(autoSwap !== undefined ? { autoSwap } : {}),
254
- maxDeposit: (() => {
255
- if (challenge.intent !== 'session') return undefined
256
- const suggestedDeposit = (challenge.request as Record<string, unknown>)
257
- .suggestedDeposit as string | undefined
258
- const cliDeposit = tempoOpts.deposit !== undefined ? String(tempoOpts.deposit) : undefined
259
- const resolved =
260
- cliDeposit ?? suggestedDeposit ?? (isTestnet(client!.chain!) ? '10' : undefined)
261
- if (!resolved) {
262
- throw new Errors.IncurError({
263
- code: 'MISSING_DEPOSIT',
264
- message:
265
- 'Session payment requires a deposit. Use -M deposit=<amount> or connect to testnet.',
266
- exitCode: 2,
267
- })
268
- }
269
- return resolved
270
- })(),
271
- })
272
-
273
- const credentialContext = (() => {
274
- if (!tempoOpts.channel) return undefined
275
- const channelId = tempoOpts.channel
276
- const saved = readChannelCumulative(channelId)
277
- return {
278
- channelId,
279
- ...(saved !== undefined && { cumulativeAmountRaw: saved.toString() }),
280
- }
281
- })()
282
-
283
- const chainId = client.chain!.id
284
-
285
- // Store session support for use in lifecycle hooks
286
- _session = {
287
- descriptor: undefined,
288
- async signVoucher({
289
- channelId,
290
- cumulativeAmount,
291
- escrowContract,
292
- chainId,
293
- action = 'voucher',
294
- }) {
295
- const descriptor = _session?.descriptor
296
- if (!descriptor) throw new Error('session descriptor not available')
297
- return Credential.serialize({
298
- challenge,
299
- payload: {
300
- action,
301
- channelId,
302
- descriptor,
303
- cumulativeAmount: cumulativeAmount.toString(),
304
- signature: await signVoucher(
305
- client!,
306
- account!,
307
- { channelId: channelId as `0x${string}`, cumulativeAmount },
308
- escrowContract,
309
- chainId,
310
- ),
311
- },
312
- source: `did:pkh:eip155:${chainId}:${account!.address}`,
313
- })
314
- },
315
- source: `did:pkh:eip155:${chainId}:${account.address}`,
316
- }
317
-
318
- return {
319
- tokenSymbol,
320
- tokenDecimals,
321
- explorerUrl,
322
- methods: [...methods],
323
- credentialContext,
324
- }
325
- },
326
-
327
- prepareCredentialRequest({ challenge, headers }) {
328
- if (challenge.intent === 'session') headers.Accept = 'text/event-stream'
329
- },
330
-
331
- async handleResponse(ctx) {
332
- if (ctx.challenge.intent !== 'session') return false
333
- if (!_session) return false
334
-
335
- const { challenge, credential, response, fetchUrl, fetchInit, verbose } = ctx
336
- const { silent, confirmEnabled, tokenSymbol, tokenDecimals, explorerUrl, shownKeys } = ctx
337
- const info = silent ? (_msg: string) => {} : (msg: string) => process.stderr.write(msg)
338
-
339
- const parsed = Credential.deserialize<SessionCredentialPayload>(credential)
340
- const challengeRequest = challenge.request as Record<string, unknown>
341
- const sessionMd = challengeRequest.methodDetails as
342
- | { escrow?: string; escrowContract?: string; chainId?: number }
343
- | undefined
344
- const channelId = parsed.payload.channelId
345
- const escrowContract = (sessionMd?.escrowContract ??
346
- sessionMd?.escrow ??
347
- tip20ChannelEscrow) as Address
348
- const chainId = sessionMd?.chainId ?? 0
349
- const tickCost = BigInt(challengeRequest.amount as string)
350
- let cumulativeAmount =
351
- 'cumulativeAmount' in parsed.payload && parsed.payload.cumulativeAmount
352
- ? BigInt(parsed.payload.cumulativeAmount)
353
- : 0n
354
- if ('descriptor' in parsed.payload) _session.descriptor = parsed.payload.descriptor
355
-
356
- if (verbose >= 1) {
357
- if (parsed.payload.action === 'open') {
358
- const depositRaw = challengeRequest.suggestedDeposit as string | undefined
359
- const depositDisplay = depositRaw
360
- ? ` ${pc.dim(`(deposit ${depositRaw} ${tokenSymbol})`)}`
361
- : ''
362
- const prefix = confirmEnabled ? '' : '\n'
363
- info(
364
- `${prefix}${pc.dim(`Channel opened ${parsed.payload.channelId}`)}${depositDisplay}\n`,
365
- )
366
- } else {
367
- const prefix = confirmEnabled ? '' : '\n'
368
- info(`${prefix}${pc.dim(`Channel reused ${parsed.payload.channelId}`)}\n`)
369
- }
370
- }
371
-
372
- // Handle non-SSE session response (server returned non-streaming).
373
- // The open credential already paid for this unit — no follow-up
374
- // voucher is needed. Just record the cumulativeAmount so the
375
- // channel close uses the correct value.
376
- const credentialResponse = response
377
- if (
378
- credentialResponse.ok &&
379
- !credentialResponse.headers.get('Content-Type')?.includes('text/event-stream')
380
- ) {
381
- if (parsed.payload.action === 'open' && 'cumulativeAmount' in parsed.payload) {
382
- cumulativeAmount = BigInt(parsed.payload.cumulativeAmount)
383
- }
384
- }
385
-
386
- // Print receipt from initial response headers
387
- const receiptHeader = credentialResponse.headers.get(Constants.Headers.paymentReceipt)
388
- if (receiptHeader) {
389
- try {
390
- const receiptJson = JSON.parse(Base64.toString(receiptHeader)) as Record<string, unknown>
391
- assertReceiptWithinCliState(receiptJson, cumulativeAmount)
392
- if (
393
- typeof receiptJson.acceptedCumulative === 'string' &&
394
- receiptJson.acceptedCumulative
395
- ) {
396
- writeChannelCumulative(channelId, cumulativeAmount)
397
- }
398
- if (verbose >= 1)
399
- printReceipt(receiptJson, {
400
- info,
401
- shownKeys,
402
- tokenSymbol,
403
- tokenDecimals,
404
- explorerUrl,
405
- handler: this,
406
- prefix: '\n',
407
- })
408
- } catch {}
409
- }
410
-
411
- const contentType = credentialResponse.headers.get('Content-Type') ?? ''
412
- if (contentType.includes('text/event-stream')) {
413
- await handleSseStream(credentialResponse, {
414
- challenge,
415
- channelId,
416
- escrowContract,
417
- chainId,
418
- cumulativeAmount,
419
- tickCost,
420
- fetchUrl,
421
- fetchInit,
422
- session: _session,
423
- info,
424
- verbose,
425
- shownKeys,
426
- tokenSymbol,
427
- tokenDecimals,
428
- explorerUrl,
429
- handler: this,
430
- })
431
- } else {
432
- // Non-SSE: print body, then close channel
433
- await writeResponseBody(credentialResponse)
434
-
435
- if (channelId && escrowContract && chainId) {
436
- if (confirmEnabled) info('\n')
437
- if (confirmEnabled && !(await ctx.confirm('Close channel?', true))) {
438
- if (verbose >= 1) info(`${pc.dim('Kept channel open.')}\n`)
439
- } else {
440
- await closeChannel({
441
- channelId,
442
- cumulativeAmount,
443
- escrowContract,
444
- chainId,
445
- fetchUrl,
446
- fetchInit,
447
- session: _session,
448
- info,
449
- verbose,
450
- tokenSymbol,
451
- tokenDecimals,
452
- explorerUrl,
453
- confirmEnabled,
454
- })
455
- }
456
- }
457
- }
458
-
459
- return true
460
- },
461
-
462
- formatReceiptField(key, value) {
463
- if (
464
- (key === 'reference' || key === 'txHash') &&
465
- typeof value === 'string' &&
466
- value.startsWith('0x')
467
- )
468
- return undefined // let default explorer link handling apply
469
- },
470
- })
471
- }
472
-
473
- // --- Session helpers ---
474
-
475
- function printReceipt(
476
- receiptJson: Record<string, unknown>,
477
- opts: {
478
- info: (msg: string) => void
479
- shownKeys: Set<string>
480
- tokenSymbol: string
481
- tokenDecimals: number
482
- explorerUrl?: string | undefined
483
- handler: Plugin
484
- prefix?: string | undefined
485
- },
486
- ) {
487
- opts.info(`${opts.prefix ?? ''}${pc.bold(pc.green('Payment Receipt'))}\n`)
488
- const rows: [string, string][] = []
489
- const skipRef =
490
- receiptJson.channelId &&
491
- receiptJson.reference &&
492
- receiptJson.channelId === receiptJson.reference
493
- const receiptBalanceKeys = new Set(['acceptedCumulative', 'spent'])
494
- for (const [key, value] of Object.entries(receiptJson)) {
495
- if (value === undefined || opts.shownKeys.has(key)) continue
496
- if (key === 'reference' && skipRef) continue
497
- const formatted = opts.handler.formatReceiptField?.(key, value)
498
- if (formatted !== undefined) {
499
- rows.push([key, formatted])
500
- } else if (receiptBalanceKeys.has(key) && typeof value === 'string') {
501
- rows.push([
502
- key,
503
- `${value} ${pc.dim(`(${fmtBalance(BigInt(value), opts.tokenSymbol, opts.tokenDecimals)})`)}`,
504
- ])
505
- } else if (
506
- (key === 'reference' || key === 'txHash') &&
507
- typeof value === 'string' &&
508
- opts.explorerUrl
509
- ) {
510
- rows.push([key, link(`${opts.explorerUrl}/tx/${value}`, value)])
511
- } else rows.push([key, String(value)])
512
- }
513
- rows.sort(([a], [b]) => a.localeCompare(b))
514
- const pad = Math.max(...rows.map(([k]) => k.length))
515
- for (const [label, value] of rows) opts.info(` ${pc.dim(label.padEnd(pad))} ${value}\n`)
516
- if (opts.prefix) opts.info('\n')
517
- }
518
-
519
- function assertReceiptWithinCliState(
520
- receiptJson: Record<string, unknown>,
521
- cumulativeAmount: bigint,
522
- ) {
523
- if (typeof receiptJson.acceptedCumulative !== 'string') return
524
- const acceptedCumulative = BigInt(receiptJson.acceptedCumulative)
525
- const spent = typeof receiptJson.spent === 'string' ? BigInt(receiptJson.spent) : 0n
526
- if (spent > acceptedCumulative) {
527
- throw new Error('receipt spent exceeds accepted cumulative voucher amount')
528
- }
529
- if (acceptedCumulative > cumulativeAmount) {
530
- throw new Error('receipt accepted cumulative exceeds locally signed voucher amount')
531
- }
532
- if (spent > cumulativeAmount) {
533
- throw new Error('receipt spent exceeds locally signed voucher amount')
534
- }
535
- }
536
-
537
- async function handleSseStream(
538
- response: Response,
539
- opts: {
540
- challenge: import('../../Challenge.js').Challenge
541
- channelId: string
542
- escrowContract: Address | undefined
543
- chainId: number
544
- cumulativeAmount: bigint
545
- tickCost: bigint
546
- fetchUrl: string
547
- fetchInit: RequestInit
548
- session: {
549
- signVoucher(params: {
550
- channelId: string
551
- cumulativeAmount: bigint
552
- escrowContract: Address
553
- chainId: number
554
- }): Promise<string>
555
- }
556
- info: (msg: string) => void
557
- verbose: number
558
- shownKeys: Set<string>
559
- tokenSymbol: string
560
- tokenDecimals: number
561
- explorerUrl?: string | undefined
562
- handler: Plugin
563
- },
564
- ) {
565
- let cumulativeAmount = opts.cumulativeAmount
566
-
567
- const reader = response.body?.getReader()
568
- if (!reader) throw new Error('No response body')
569
-
570
- const decoder = new TextDecoder()
571
- let buffer = ''
572
- let currentEvent = ''
573
-
574
- const termBg = opts.verbose ? await detectTerminalBg() : undefined
575
- const chunkBgs = (() => {
576
- if (!termBg || !pc.isColorSupported) return undefined
577
- const clamp = (n: number) => Math.max(0, Math.min(255, Math.round(n)))
578
- const isDark = 0.299 * termBg.r + 0.587 * termBg.g + 0.114 * termBg.b < 128
579
- const offset = isDark ? 1 : -1
580
- const bgRgb = (d: number) => (s: string) => {
581
- const r = clamp(termBg.r + d * offset)
582
- const g = clamp(termBg.g + d * offset)
583
- const b = clamp(termBg.b + d * offset)
584
- return `\x1b[48;2;${r};${g};${b}m${s}\x1b[49m`
585
- }
586
- return [bgRgb(12), bgRgb(24)] as const
587
- })()
588
- let chunkIdx = 0
589
-
590
- const writeContent = (chunk: string) => {
591
- if (chunkBgs) {
592
- const bgFn = chunkBgs[chunkIdx % chunkBgs.length]!
593
- process.stdout.write(chunk.replace(/[^\n]+/g, (m) => bgFn(m)))
594
- chunkIdx++
595
- } else {
596
- process.stdout.write(chunk)
597
- }
598
- }
599
-
600
- const processLines = async (lines: string[]) => {
601
- for (const line of lines) {
602
- if (line.startsWith('event: ')) {
603
- currentEvent = line.slice(7).trim()
604
- continue
605
- }
606
- if (!line.startsWith('data: ')) {
607
- if (line === '') currentEvent = ''
608
- continue
609
- }
610
- const data = line.slice(6)
611
- if (data.trim() === '[DONE]') continue
612
- if (
613
- currentEvent === 'payment-need-voucher' &&
614
- opts.channelId &&
615
- opts.escrowContract &&
616
- opts.chainId
617
- ) {
618
- try {
619
- const event = JSON.parse(data) as {
620
- channelId: string
621
- requiredCumulative: string
622
- }
623
- if (event.channelId !== opts.channelId) {
624
- throw new Error('payment-need-voucher channelId does not match current session')
625
- }
626
- const required = BigInt(event.requiredCumulative)
627
- if (required > cumulativeAmount + opts.tickCost) {
628
- throw new Error('payment-need-voucher exceeds next locally billable amount')
629
- }
630
- cumulativeAmount = cumulativeAmount > required ? cumulativeAmount : required
631
-
632
- const voucherCred = await opts.session.signVoucher({
633
- channelId: opts.channelId,
634
- cumulativeAmount,
635
- escrowContract: opts.escrowContract,
636
- chainId: opts.chainId,
637
- })
638
- await globalThis.fetch(opts.fetchUrl, {
639
- method: 'POST',
640
- headers: { [Constants.Headers.authorization]: voucherCred },
641
- })
642
- } catch (e) {
643
- opts.info(pc.dim(pc.yellow(` [voucher failed: ${e instanceof Error ? e.message : e}]`)))
644
- }
645
- currentEvent = ''
646
- continue
647
- }
648
- if (currentEvent === 'payment-receipt') {
649
- if (opts.verbose >= 1) {
650
- try {
651
- const receipt = JSON.parse(data) as Record<string, unknown>
652
- printReceipt(receipt, {
653
- info: opts.info,
654
- shownKeys: opts.shownKeys,
655
- tokenSymbol: opts.tokenSymbol,
656
- tokenDecimals: opts.tokenDecimals,
657
- explorerUrl: opts.explorerUrl,
658
- handler: opts.handler,
659
- prefix: '\n\n',
660
- })
661
- } catch {}
662
- }
663
- currentEvent = ''
664
- continue
665
- }
666
- if (data.length === 0) {
667
- writeContent('\n')
668
- } else {
669
- try {
670
- const parsed = JSON.parse(data) as {
671
- token?: string
672
- choices?: { delta?: { content?: string } }[]
673
- }
674
- writeContent(parsed.token ?? parsed.choices?.[0]?.delta?.content ?? data)
675
- } catch {
676
- writeContent(data)
677
- }
678
- }
679
- currentEvent = ''
680
- }
681
- }
682
-
683
- while (true) {
684
- const { done, value } = await reader.read()
685
- if (done) break
686
- buffer += decoder.decode(value, { stream: true })
687
- const lines = buffer.split('\n')
688
- buffer = lines.pop()!
689
- await processLines(lines)
690
- }
691
- if (buffer.trim()) await processLines([buffer])
692
-
693
- // Close channel after SSE stream ends
694
- if (opts.channelId && opts.escrowContract && opts.chainId) {
695
- await closeChannel({
696
- channelId: opts.channelId,
697
- cumulativeAmount,
698
- escrowContract: opts.escrowContract,
699
- chainId: opts.chainId,
700
- fetchUrl: opts.fetchUrl,
701
- fetchInit: opts.fetchInit,
702
- session: opts.session,
703
- info: opts.info,
704
- verbose: opts.verbose,
705
- tokenSymbol: opts.tokenSymbol,
706
- tokenDecimals: opts.tokenDecimals,
707
- explorerUrl: opts.explorerUrl,
708
- confirmEnabled: false,
709
- })
710
- }
711
- }
712
-
713
- async function closeChannel(opts: {
714
- channelId: string
715
- cumulativeAmount: bigint
716
- escrowContract: Address
717
- chainId: number
718
- fetchUrl: string
719
- fetchInit: RequestInit
720
- session: {
721
- signVoucher(params: {
722
- channelId: string
723
- cumulativeAmount: bigint
724
- escrowContract: Address
725
- chainId: number
726
- action?: 'voucher' | 'close'
727
- }): Promise<string>
728
- }
729
- info: (msg: string) => void
730
- verbose: number
731
- tokenSymbol: string
732
- tokenDecimals: number
733
- explorerUrl?: string | undefined
734
- confirmEnabled: boolean
735
- }) {
736
- const closeCred = await opts.session.signVoucher({
737
- channelId: opts.channelId,
738
- cumulativeAmount: opts.cumulativeAmount,
739
- escrowContract: opts.escrowContract,
740
- chainId: opts.chainId,
741
- action: 'close',
742
- })
743
- const closeRes = await globalThis.fetch(opts.fetchUrl, {
744
- ...opts.fetchInit,
745
- headers: {
746
- ...normalizeHeaders(opts.fetchInit.headers),
747
- Authorization: closeCred,
748
- },
749
- })
750
- if (closeRes.ok) {
751
- deleteChannelState(opts.channelId)
752
- if (opts.verbose >= 1) {
753
- const closeReceiptHeader = closeRes.headers.get(Constants.Headers.paymentReceipt)
754
- let closeTxHash: string | undefined
755
- if (closeReceiptHeader) {
756
- try {
757
- const r = JSON.parse(Base64.toString(closeReceiptHeader)) as Record<string, unknown>
758
- if (typeof r.txHash === 'string') closeTxHash = r.txHash
759
- } catch {}
760
- }
761
- const txInfo =
762
- closeTxHash && opts.explorerUrl
763
- ? ` ${pc.dim(link(`${opts.explorerUrl}/tx/${closeTxHash}`, closeTxHash))}`
764
- : ''
765
- opts.info(
766
- `${pc.dim('Channel closed.')} ${pc.dim(`Spent ${fmtBalance(opts.cumulativeAmount, opts.tokenSymbol, opts.tokenDecimals)}.`)}${txInfo}\n`,
767
- )
768
- }
769
- } else {
770
- const closeBody = await closeRes.text().catch(() => '')
771
- opts.info(`\n${pc.dim(pc.yellow('Channel close failed'))} ${pc.dim(`(${closeRes.status})`)}\n`)
772
- opts.info(
773
- `${pc.dim(` channelId: ${opts.channelId}`)}\n` +
774
- `${pc.dim(` cumulativeAmount: ${opts.cumulativeAmount}`)}\n` +
775
- `${pc.dim(` escrowContract: ${opts.escrowContract}`)}\n` +
776
- `${pc.dim(` chainId: ${opts.chainId}`)}\n` +
777
- `${pc.dim(` response: ${closeBody || '(empty)'}`)}\n`,
778
- )
779
- }
780
- }
781
-
782
- function detectTerminalBg(
783
- timeoutMs = 100,
784
- ): Promise<{ r: number; g: number; b: number } | undefined> {
785
- if (!process.stdin.isTTY || !process.stdout.isTTY) return Promise.resolve(undefined)
786
- return new Promise((resolve) => {
787
- const wasRaw = process.stdin.isRaw
788
- let buf = ''
789
- const cleanup = () => {
790
- clearTimeout(timer)
791
- process.stdin.removeListener('data', onData)
792
- if (process.stdin.isTTY) process.stdin.setRawMode(wasRaw ?? false)
793
- process.stdin.pause()
794
- }
795
- const timer = setTimeout(() => {
796
- cleanup()
797
- resolve(undefined)
798
- }, timeoutMs)
799
- const onData = (data: Buffer) => {
800
- buf += data.toString()
801
- // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence for terminal background detection
802
- const match = buf.match(/\x1b\]11;rgb:([0-9a-f]+)\/([0-9a-f]+)\/([0-9a-f]+)/i)
803
- if (!match) return
804
- cleanup()
805
- const parse = (hex: string) => Number.parseInt(hex.slice(0, 2), 16)
806
- resolve({ r: parse(match[1]!), g: parse(match[2]!), b: parse(match[3]!) })
807
- }
808
- process.stdin.setRawMode(true)
809
- process.stdin.resume()
810
- process.stdin.on('data', onData)
811
- process.stdout.write('\x1b]11;?\x07')
812
- })
813
- }
814
-
815
- // --- Account helpers ---
816
-
817
- type BalanceProbe = {
818
- account: Address
819
- client: ReturnType<typeof createClient>
820
- }
821
-
822
- function parseTempoOptions(rawOptions: Record<string, string>) {
823
- return parseOptions(tempoOptionSchema, rawOptions, tempoOptionKeys)
824
- }
825
-
826
- function isTempoChargeChallenge(challenge: Challenge.Challenge): boolean {
827
- return challenge.method === 'tempo' && challenge.intent === 'charge'
828
- }
829
-
830
- async function resolveBalanceProbe(ctx: {
831
- options: {
832
- account?: string | undefined
833
- network?: Network | undefined
834
- rpcUrl?: string | undefined
835
- }
836
- }): Promise<BalanceProbe | undefined> {
837
- const accountName = resolveAccountName(ctx.options.account)
838
- const privateKey =
839
- process.env.MPPX_PRIVATE_KEY?.trim() ||
840
- (isTempoAccount(accountName) ? undefined : await createKeychain(accountName).get())
841
-
842
- let account: Address | undefined
843
- if (privateKey) {
844
- account = privateKeyToAccount(privateKey as `0x${string}`).address
845
- } else if (isTempoAccount(accountName) && hasTempoCliSync()) {
846
- account = resolveTempoAccount(accountName)?.wallet_address as Address | undefined
847
- } else {
848
- const fallback = fallbackFromTempo()
849
- if (fallback) {
850
- const fallbackKey = await createKeychain(fallback).get()
851
- if (fallbackKey) account = privateKeyToAccount(fallbackKey as `0x${string}`).address
852
- }
853
- }
854
- if (!account) return undefined
855
-
856
- const rpcUrl = resolveRpcUrl(ctx.options.rpcUrl, { network: ctx.options.network })
857
- const client = createClient({
858
- chain: await resolveChain({ network: ctx.options.network, rpcUrl }),
859
- transport: http(rpcUrl),
860
- })
861
-
862
- return {
863
- account,
864
- client,
865
- }
866
- }
867
-
868
- async function scoreTempoChargeChallenge(
869
- challenge: Challenge.Challenge,
870
- probe: BalanceProbe,
871
- ): Promise<TempoChargeChallengeScore> {
872
- const request = challenge.request as Record<string, unknown>
873
- const currency = request.currency
874
- const amount = request.amount
875
- if (typeof currency !== 'string' || typeof amount !== 'string') return 'unsupported'
876
-
877
- const requiredChainId = (request.methodDetails as { chainId?: number } | undefined)?.chainId
878
- if (requiredChainId && probe.client.chain?.id && requiredChainId !== probe.client.chain.id) {
879
- return 'unsupported'
880
- }
881
-
882
- const amountRaw = BigInt(amount)
883
- if (amountRaw === 0n) return 'payable'
884
-
885
- const balance = await Actions.token
886
- .getBalance(probe.client as never, {
887
- account: probe.account,
888
- token: currency as Address,
889
- })
890
- .then((value) => value.amount)
891
- .catch(() => undefined)
892
- if (balance === undefined) return 'unknownBalance'
893
- if (balance >= amountRaw) return 'payable'
894
- return 'insufficientBalance'
895
- }
896
-
897
- function parseOptions<const schema extends z.ZodType>(
898
- schema: schema,
899
- rawOptions: unknown,
900
- allowedKeys: readonly string[],
901
- ): z.output<schema> {
902
- if (rawOptions && typeof rawOptions === 'object' && !Array.isArray(rawOptions)) {
903
- const unknownKeys = Object.keys(rawOptions).filter((key) => !allowedKeys.includes(key))
904
- if (unknownKeys.length)
905
- throw new Error(`Unsupported CLI method option(s): ${unknownKeys.join(', ')}`)
906
- }
907
- const result = schema.safeParse(rawOptions ?? {})
908
- if (result.success) return result.data
909
- const summary = result.error.issues
910
- .map((issue) => {
911
- const path = issue.path.length ? issue.path.join('.') : 'options'
912
- return `${path}: ${issue.message}`
913
- })
914
- .join(', ')
915
- throw new Error(`Invalid CLI options (${summary})`)
916
- }
917
-
918
- function assertChallengeChain(opts: {
919
- challenge: { request: Record<string, unknown> }
920
- clientChainId?: number | undefined
921
- }) {
922
- const methodDetails = opts.challenge.request.methodDetails as
923
- | { chainId?: number | undefined }
924
- | undefined
925
- const requiredChainId = methodDetails?.chainId
926
- if (!requiredChainId || !opts.clientChainId || requiredChainId === opts.clientChainId) return
927
- const hint =
928
- requiredChainId === 4217
929
- ? ' Use --network mainnet or --rpc-url https://rpc.tempo.xyz.'
930
- : requiredChainId === 42431
931
- ? ' Use --network testnet or --rpc-url https://rpc.moderato.tempo.xyz.'
932
- : ''
933
- throw new Errors.IncurError({
934
- code: 'CHAIN_MISMATCH',
935
- message: `Challenge requires chainId ${requiredChainId}, but RPC is chainId ${opts.clientChainId}.${hint}`,
936
- exitCode: 2,
937
- })
938
- }
939
-
940
- function parseTokenList(value: string | undefined): Address[] | undefined {
941
- if (!value) return undefined
942
- return value
943
- .split(',')
944
- .map((token) => token.trim())
945
- .filter(Boolean) as Address[]
946
- }
947
-
948
- function resolveAutoSwap(opts: {
949
- autoSwap?: boolean | undefined
950
- payWith?: string | undefined
951
- slippage?: number | undefined
952
- tokenIn?: string | undefined
953
- }) {
954
- const tokenIn = parseTokenList(opts.tokenIn) ?? parseTokenList(opts.payWith)
955
- if (!opts.autoSwap && !tokenIn && opts.slippage === undefined) return undefined
956
- if (opts.autoSwap === false && !tokenIn && opts.slippage === undefined) return false
957
- if (opts.slippage !== undefined && (!Number.isFinite(opts.slippage) || opts.slippage < 0))
958
- throw new Error('Invalid CLI options (slippage: expected a non-negative number)')
959
- return {
960
- ...(tokenIn ? { tokenIn } : {}),
961
- ...(opts.slippage !== undefined ? { slippage: opts.slippage } : {}),
962
- }
963
- }
964
-
965
- function channelStateDir() {
966
- return path.join(
967
- process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config'),
968
- 'mppx',
969
- 'channels',
970
- )
971
- }
972
-
973
- function readChannelCumulative(channelId: string): bigint | undefined {
974
- try {
975
- const raw = fs.readFileSync(path.join(channelStateDir(), channelId), 'utf-8').trim()
976
- return raw ? BigInt(raw) : undefined
977
- } catch {
978
- return undefined
979
- }
980
- }
981
-
982
- function writeChannelCumulative(channelId: string, cumulative: bigint): void {
983
- const dir = channelStateDir()
984
- fs.mkdirSync(dir, { recursive: true })
985
- fs.writeFileSync(path.join(dir, channelId), cumulative.toString(), 'utf-8')
986
- }
987
-
988
- function deleteChannelState(channelId: string): void {
989
- try {
990
- fs.unlinkSync(path.join(channelStateDir(), channelId))
991
- } catch {}
992
- }
993
-
994
- function tempoKeystorePath(): string {
995
- const platform = os.platform()
996
- if (platform === 'darwin')
997
- return path.join(os.homedir(), 'Library', 'Application Support', 'tempo', 'wallet', 'keys.toml')
998
- return path.join(
999
- process.env.XDG_DATA_HOME || path.join(os.homedir(), '.local', 'share'),
1000
- 'tempo',
1001
- 'wallet',
1002
- 'keys.toml',
1003
- )
1004
- }
1005
-
1006
- interface TempoKeyEntry {
1007
- wallet_type: string
1008
- wallet_address: string
1009
- chain_id: number
1010
- }
1011
-
1012
- export function readTempoKeystore(): TempoKeyEntry[] {
1013
- try {
1014
- const raw = fs.readFileSync(tempoKeystorePath(), 'utf-8')
1015
- const entries: TempoKeyEntry[] = []
1016
- let current: Partial<TempoKeyEntry> | undefined
1017
- for (const line of raw.split('\n')) {
1018
- const trimmed = line.trim()
1019
- if (trimmed === '[[keys]]') {
1020
- if (current?.wallet_address) entries.push(current as TempoKeyEntry)
1021
- current = { wallet_type: 'local', wallet_address: '', chain_id: 0 }
1022
- continue
1023
- }
1024
- if (!current) continue
1025
- const m = trimmed.match(/^(\w+)\s*=\s*"?([^"]*)"?$/)
1026
- if (!m) continue
1027
- const [, key, value] = m
1028
- if (key === 'wallet_type') current.wallet_type = value!
1029
- else if (key === 'wallet_address') current.wallet_address = value!
1030
- else if (key === 'chain_id') current.chain_id = Number.parseInt(value!, 10)
1031
- }
1032
- if (current?.wallet_address) entries.push(current as TempoKeyEntry)
1033
- return entries
1034
- } catch {
1035
- return []
1036
- }
1037
- }
1038
-
1039
- export function resolveTempoAccount(accountName: string): TempoKeyEntry | undefined {
1040
- const entries = readTempoKeystore()
1041
- if (entries.length === 0) return undefined
1042
- const suffix = accountName.slice('tempo:'.length)
1043
- if (suffix === 'default' || suffix === '') return entries[0]
1044
- const idx = Number.parseInt(suffix, 10)
1045
- if (!Number.isNaN(idx) && idx >= 0 && idx < entries.length) return entries[idx]
1046
- return undefined
1047
- }
1048
-
1049
- let _tempoCliAvailable: boolean | undefined
1050
- function hasTempoCliSync(): boolean {
1051
- if (_tempoCliAvailable !== undefined) return _tempoCliAvailable
1052
- try {
1053
- child.execFileSync('which', ['tempo'], { stdio: 'ignore' })
1054
- _tempoCliAvailable = true
1055
- } catch {
1056
- _tempoCliAvailable = false
1057
- }
1058
- return _tempoCliAvailable
1059
- }
1060
-
1061
- async function tempoCliSign(wwwAuth: string): Promise<string> {
1062
- return new Promise((resolve, reject) => {
1063
- child.execFile('tempo', ['mpp', 'sign', '--challenge', wwwAuth], (error, stdout, stderr) => {
1064
- if (error) {
1065
- const msg = stderr?.trim() || error.message
1066
- reject(new Error(`tempo mpp sign failed: ${msg}`))
1067
- return
1068
- }
1069
- const trimmed = stdout.trim()
1070
- if (!trimmed) {
1071
- reject(new Error('tempo mpp sign returned empty output'))
1072
- return
1073
- }
1074
- resolve(trimmed)
1075
- })
1076
- })
1077
- }
1078
-
1079
- function fallbackFromTempo(): string | undefined {
1080
- const store = createDefaultStore()
1081
- const currentDefault = store.get()
1082
- if (!isTempoAccount(currentDefault)) return undefined
1083
- if (hasTempoCliSync()) return undefined
1084
- const platform = os.platform()
1085
- if (platform === 'darwin') {
1086
- try {
1087
- const stdout = child.execFileSync('security', ['dump-keychain'], { encoding: 'utf-8' })
1088
- const mppxAccounts: string[] = []
1089
- for (const block of stdout.split('keychain:')) {
1090
- const serviceMatch = block.match(/"svce"<blob>="([^"]*)"/)
1091
- const accountMatch = block.match(/"acct"<blob>="([^"]*)"/)
1092
- if (serviceMatch?.[1] === packageJson.name && accountMatch?.[1])
1093
- mppxAccounts.push(accountMatch[1])
1094
- }
1095
- if (mppxAccounts.length > 0) {
1096
- store.set(mppxAccounts[0]!)
1097
- return mppxAccounts[0]!
1098
- }
1099
- } catch {}
1100
- }
1101
- return undefined
1102
- }