mppx 0.8.17 → 0.8.19

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 (914) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +15 -0
  3. package/dist/Challenge.js +21 -4
  4. package/dist/bin.js +3 -3
  5. package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
  6. package/dist/cli/cli.js +253 -1505
  7. package/dist/cli/plugins/index.js +19 -5
  8. package/dist/cli/plugins/tempo.js +7 -3
  9. package/dist/cli/sessions/Manager.js +7 -4
  10. package/dist/cli/sessions/request.d.ts +2 -0
  11. package/dist/cli/sessions/request.js +18 -0
  12. package/dist/cli/sessions/store.js +28 -14
  13. package/dist/discovery/Discovery.js +2 -1
  14. package/dist/evm/client/Charge.js +8 -0
  15. package/dist/server/core.d.ts +9 -0
  16. package/dist/server/core.js +9 -0
  17. package/dist/stripe/server/Charge.js +2 -4
  18. package/dist/stripe/server/Methods.d.ts +2 -2
  19. package/dist/stripe/server/Methods.js +17 -11
  20. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  21. package/dist/stripe/server/internal/html.gen.js +1 -1
  22. package/dist/stripe/server/spt.d.ts +8 -0
  23. package/dist/stripe/server/spt.js +8 -0
  24. package/dist/tempo/Methods.d.ts +13 -0
  25. package/dist/tempo/Methods.js +14 -3
  26. package/dist/tempo/client/Charge.d.ts +3 -0
  27. package/dist/tempo/client/Charge.js +31 -9
  28. package/dist/tempo/client/Methods.d.ts +13 -0
  29. package/dist/tempo/internal/defaults.d.ts +11 -0
  30. package/dist/tempo/internal/defaults.js +11 -0
  31. package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
  32. package/dist/tempo/internal/machine-token-charge.js +113 -0
  33. package/dist/tempo/internal/machine-token-session.d.ts +88 -0
  34. package/dist/tempo/internal/machine-token-session.js +173 -0
  35. package/dist/tempo/internal/signature-envelope.d.ts +14 -0
  36. package/dist/tempo/internal/signature-envelope.js +28 -0
  37. package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
  38. package/dist/tempo/legacy/client/ChannelOps.js +11 -5
  39. package/dist/tempo/legacy/client/Session.d.ts +13 -1
  40. package/dist/tempo/legacy/client/Session.js +3 -3
  41. package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
  42. package/dist/tempo/legacy/client/SessionManager.js +2 -0
  43. package/dist/tempo/server/Charge.d.ts +3 -0
  44. package/dist/tempo/server/Charge.js +58 -17
  45. package/dist/tempo/server/Methods.d.ts +21 -4
  46. package/dist/tempo/server/Methods.js +8 -4
  47. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  48. package/dist/tempo/server/internal/html.gen.js +1 -1
  49. package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
  50. package/dist/tempo/session/client/ChannelOps.js +35 -6
  51. package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
  52. package/dist/tempo/session/client/ChannelStore.js +2 -2
  53. package/dist/tempo/session/client/CredentialState.d.ts +17 -2
  54. package/dist/tempo/session/client/CredentialState.js +77 -76
  55. package/dist/tempo/session/client/Runtime.d.ts +4 -2
  56. package/dist/tempo/session/client/Runtime.js +21 -5
  57. package/dist/tempo/session/client/Session.d.ts +15 -3
  58. package/dist/tempo/session/client/Session.js +186 -63
  59. package/dist/tempo/session/client/SessionManager.d.ts +3 -1
  60. package/dist/tempo/session/client/SessionManager.js +35 -11
  61. package/dist/tempo/session/client/Transports.d.ts +2 -0
  62. package/dist/tempo/session/client/Transports.js +12 -2
  63. package/dist/tempo/session/precompile/Chain.d.ts +10 -2
  64. package/dist/tempo/session/precompile/Chain.js +51 -10
  65. package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
  66. package/dist/tempo/session/precompile/Protocol.js +7 -0
  67. package/dist/tempo/session/precompile/Voucher.d.ts +3 -1
  68. package/dist/tempo/session/precompile/Voucher.js +6 -12
  69. package/dist/tempo/session/server/ChannelStore.d.ts +6 -0
  70. package/dist/tempo/session/server/ChannelStore.js +11 -4
  71. package/dist/tempo/session/server/CredentialVerification.d.ts +11 -9
  72. package/dist/tempo/session/server/CredentialVerification.js +185 -109
  73. package/dist/tempo/session/server/MeteredStream.d.ts +1 -1
  74. package/dist/tempo/session/server/MeteredStream.js +5 -4
  75. package/dist/tempo/session/server/RequestState.d.ts +19 -0
  76. package/dist/tempo/session/server/RequestState.js +61 -15
  77. package/dist/tempo/session/server/Session.d.ts +14 -2
  78. package/dist/tempo/session/server/Session.js +37 -6
  79. package/dist/tempo/session/server/Settlement.d.ts +11 -4
  80. package/dist/tempo/session/server/Settlement.js +53 -21
  81. package/dist/x402/client/Exact.d.ts +8 -0
  82. package/dist/x402/client/Exact.js +40 -10
  83. package/dist/x402/server/EvmCharge.d.ts +22 -0
  84. package/dist/x402/server/EvmCharge.js +23 -1
  85. package/package.json +15 -37
  86. package/dist/BodyDigest.d.ts.map +0 -1
  87. package/dist/BodyDigest.js.map +0 -1
  88. package/dist/Challenge.d.ts.map +0 -1
  89. package/dist/Challenge.js.map +0 -1
  90. package/dist/Constants.d.ts.map +0 -1
  91. package/dist/Constants.js.map +0 -1
  92. package/dist/Credential.d.ts.map +0 -1
  93. package/dist/Credential.js.map +0 -1
  94. package/dist/Errors.d.ts.map +0 -1
  95. package/dist/Errors.js.map +0 -1
  96. package/dist/Expires.d.ts.map +0 -1
  97. package/dist/Expires.js.map +0 -1
  98. package/dist/Html.d.ts.map +0 -1
  99. package/dist/Html.js.map +0 -1
  100. package/dist/Mcp.d.ts.map +0 -1
  101. package/dist/Mcp.js.map +0 -1
  102. package/dist/Method.d.ts.map +0 -1
  103. package/dist/Method.js.map +0 -1
  104. package/dist/PaymentRequest.d.ts.map +0 -1
  105. package/dist/PaymentRequest.js.map +0 -1
  106. package/dist/Receipt.d.ts.map +0 -1
  107. package/dist/Receipt.js.map +0 -1
  108. package/dist/Store.d.ts.map +0 -1
  109. package/dist/Store.js.map +0 -1
  110. package/dist/attestation/Client.d.ts.map +0 -1
  111. package/dist/attestation/Client.js.map +0 -1
  112. package/dist/attestation/Constants.d.ts.map +0 -1
  113. package/dist/attestation/Constants.js.map +0 -1
  114. package/dist/attestation/Server.d.ts.map +0 -1
  115. package/dist/attestation/Server.js.map +0 -1
  116. package/dist/attestation/Types.d.ts.map +0 -1
  117. package/dist/attestation/Types.js.map +0 -1
  118. package/dist/attestation/index.d.ts.map +0 -1
  119. package/dist/attestation/index.js.map +0 -1
  120. package/dist/attestation/internal/HttpMessageSignature.d.ts.map +0 -1
  121. package/dist/attestation/internal/HttpMessageSignature.js.map +0 -1
  122. package/dist/attestation/internal/SigningContext.d.ts.map +0 -1
  123. package/dist/attestation/internal/SigningContext.js.map +0 -1
  124. package/dist/bin.d.ts.map +0 -1
  125. package/dist/bin.js.map +0 -1
  126. package/dist/cli/account.d.ts.map +0 -1
  127. package/dist/cli/account.js.map +0 -1
  128. package/dist/cli/cli.d.ts.map +0 -1
  129. package/dist/cli/cli.js.map +0 -1
  130. package/dist/cli/config.d.ts.map +0 -1
  131. package/dist/cli/config.js.map +0 -1
  132. package/dist/cli/internal.d.ts.map +0 -1
  133. package/dist/cli/internal.js.map +0 -1
  134. package/dist/cli/plugins/evm.d.ts.map +0 -1
  135. package/dist/cli/plugins/evm.js.map +0 -1
  136. package/dist/cli/plugins/index.d.ts.map +0 -1
  137. package/dist/cli/plugins/index.js.map +0 -1
  138. package/dist/cli/plugins/plugin.d.ts.map +0 -1
  139. package/dist/cli/plugins/plugin.js.map +0 -1
  140. package/dist/cli/plugins/stripe.d.ts.map +0 -1
  141. package/dist/cli/plugins/stripe.js.map +0 -1
  142. package/dist/cli/plugins/tempo.d.ts.map +0 -1
  143. package/dist/cli/plugins/tempo.js.map +0 -1
  144. package/dist/cli/sessions/Manager.d.ts.map +0 -1
  145. package/dist/cli/sessions/Manager.js.map +0 -1
  146. package/dist/cli/sessions/commands.d.ts.map +0 -1
  147. package/dist/cli/sessions/commands.js.map +0 -1
  148. package/dist/cli/sessions/request.d.ts.map +0 -1
  149. package/dist/cli/sessions/request.js.map +0 -1
  150. package/dist/cli/sessions/store.d.ts.map +0 -1
  151. package/dist/cli/sessions/store.js.map +0 -1
  152. package/dist/cli/utils.d.ts.map +0 -1
  153. package/dist/cli/utils.js.map +0 -1
  154. package/dist/cli/validate/challenge.d.ts.map +0 -1
  155. package/dist/cli/validate/challenge.js.map +0 -1
  156. package/dist/cli/validate/discovery.d.ts.map +0 -1
  157. package/dist/cli/validate/discovery.js.map +0 -1
  158. package/dist/cli/validate/helpers.d.ts.map +0 -1
  159. package/dist/cli/validate/helpers.js.map +0 -1
  160. package/dist/cli/validate/index.d.ts.map +0 -1
  161. package/dist/cli/validate/index.js.map +0 -1
  162. package/dist/cli/validate/messages.d.ts.map +0 -1
  163. package/dist/cli/validate/messages.js.map +0 -1
  164. package/dist/cli/validate/payment.d.ts.map +0 -1
  165. package/dist/cli/validate/payment.js.map +0 -1
  166. package/dist/client/Methods.d.ts.map +0 -1
  167. package/dist/client/Methods.js.map +0 -1
  168. package/dist/client/Mppx.d.ts.map +0 -1
  169. package/dist/client/Mppx.js.map +0 -1
  170. package/dist/client/Transport.d.ts.map +0 -1
  171. package/dist/client/Transport.js.map +0 -1
  172. package/dist/client/index.d.ts.map +0 -1
  173. package/dist/client/index.js.map +0 -1
  174. package/dist/client/internal/Fetch.d.ts.map +0 -1
  175. package/dist/client/internal/Fetch.js.map +0 -1
  176. package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
  177. package/dist/client/internal/MethodChallenge.js.map +0 -1
  178. package/dist/client/internal/MethodResponse.d.ts.map +0 -1
  179. package/dist/client/internal/MethodResponse.js.map +0 -1
  180. package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
  181. package/dist/client/internal/protocols/Mcp.js.map +0 -1
  182. package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
  183. package/dist/client/internal/protocols/Mpp.js.map +0 -1
  184. package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
  185. package/dist/client/internal/protocols/Protocol.js.map +0 -1
  186. package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
  187. package/dist/client/internal/protocols/Shared.js.map +0 -1
  188. package/dist/client/internal/protocols/X402.d.ts.map +0 -1
  189. package/dist/client/internal/protocols/X402.js.map +0 -1
  190. package/dist/client/node.d.ts.map +0 -1
  191. package/dist/client/node.js.map +0 -1
  192. package/dist/discovery/Discovery.d.ts.map +0 -1
  193. package/dist/discovery/Discovery.js.map +0 -1
  194. package/dist/discovery/OpenApi.d.ts.map +0 -1
  195. package/dist/discovery/OpenApi.js.map +0 -1
  196. package/dist/discovery/Validate.d.ts.map +0 -1
  197. package/dist/discovery/Validate.js.map +0 -1
  198. package/dist/discovery/index.d.ts.map +0 -1
  199. package/dist/discovery/index.js.map +0 -1
  200. package/dist/discovery/internal/Metadata.d.ts.map +0 -1
  201. package/dist/discovery/internal/Metadata.js.map +0 -1
  202. package/dist/evm/Assets.d.ts.map +0 -1
  203. package/dist/evm/Assets.js.map +0 -1
  204. package/dist/evm/Chains.d.ts.map +0 -1
  205. package/dist/evm/Chains.js.map +0 -1
  206. package/dist/evm/Methods.d.ts.map +0 -1
  207. package/dist/evm/Methods.js.map +0 -1
  208. package/dist/evm/Types.d.ts.map +0 -1
  209. package/dist/evm/Types.js.map +0 -1
  210. package/dist/evm/client/Charge.d.ts.map +0 -1
  211. package/dist/evm/client/Charge.js.map +0 -1
  212. package/dist/evm/client/Methods.d.ts.map +0 -1
  213. package/dist/evm/client/Methods.js.map +0 -1
  214. package/dist/evm/client/index.d.ts.map +0 -1
  215. package/dist/evm/client/index.js.map +0 -1
  216. package/dist/evm/index.d.ts.map +0 -1
  217. package/dist/evm/index.js.map +0 -1
  218. package/dist/evm/server/Charge.d.ts.map +0 -1
  219. package/dist/evm/server/Charge.js.map +0 -1
  220. package/dist/evm/server/Methods.d.ts.map +0 -1
  221. package/dist/evm/server/Methods.js.map +0 -1
  222. package/dist/evm/server/index.d.ts.map +0 -1
  223. package/dist/evm/server/index.js.map +0 -1
  224. package/dist/index.d.ts.map +0 -1
  225. package/dist/index.js.map +0 -1
  226. package/dist/internal/AcceptPayment.d.ts.map +0 -1
  227. package/dist/internal/AcceptPayment.js.map +0 -1
  228. package/dist/internal/HeaderCodec.d.ts.map +0 -1
  229. package/dist/internal/HeaderCodec.js.map +0 -1
  230. package/dist/internal/constantTimeEqual.d.ts.map +0 -1
  231. package/dist/internal/constantTimeEqual.js.map +0 -1
  232. package/dist/internal/env.d.ts.map +0 -1
  233. package/dist/internal/env.js.map +0 -1
  234. package/dist/internal/types.d.ts.map +0 -1
  235. package/dist/internal/types.js.map +0 -1
  236. package/dist/mcp/client/McpClient.d.ts.map +0 -1
  237. package/dist/mcp/client/McpClient.js.map +0 -1
  238. package/dist/mcp/client/index.d.ts.map +0 -1
  239. package/dist/mcp/client/index.js.map +0 -1
  240. package/dist/mcp/server/Transport.d.ts.map +0 -1
  241. package/dist/mcp/server/Transport.js.map +0 -1
  242. package/dist/mcp/server/index.d.ts.map +0 -1
  243. package/dist/mcp/server/index.js.map +0 -1
  244. package/dist/middlewares/elysia.d.ts.map +0 -1
  245. package/dist/middlewares/elysia.js.map +0 -1
  246. package/dist/middlewares/express.d.ts.map +0 -1
  247. package/dist/middlewares/express.js.map +0 -1
  248. package/dist/middlewares/hono.d.ts.map +0 -1
  249. package/dist/middlewares/hono.js.map +0 -1
  250. package/dist/middlewares/internal/mppx.d.ts.map +0 -1
  251. package/dist/middlewares/internal/mppx.js.map +0 -1
  252. package/dist/middlewares/nextjs.d.ts.map +0 -1
  253. package/dist/middlewares/nextjs.js.map +0 -1
  254. package/dist/proxy/Proxy.d.ts.map +0 -1
  255. package/dist/proxy/Proxy.js.map +0 -1
  256. package/dist/proxy/Service.d.ts.map +0 -1
  257. package/dist/proxy/Service.js.map +0 -1
  258. package/dist/proxy/index.d.ts.map +0 -1
  259. package/dist/proxy/index.js.map +0 -1
  260. package/dist/proxy/internal/Headers.d.ts.map +0 -1
  261. package/dist/proxy/internal/Headers.js.map +0 -1
  262. package/dist/proxy/internal/Route.d.ts.map +0 -1
  263. package/dist/proxy/internal/Route.js.map +0 -1
  264. package/dist/proxy/services/anthropic.d.ts.map +0 -1
  265. package/dist/proxy/services/anthropic.js.map +0 -1
  266. package/dist/proxy/services/openai.d.ts.map +0 -1
  267. package/dist/proxy/services/openai.js.map +0 -1
  268. package/dist/proxy/services/stripe.d.ts.map +0 -1
  269. package/dist/proxy/services/stripe.js.map +0 -1
  270. package/dist/server/Methods.d.ts.map +0 -1
  271. package/dist/server/Methods.js.map +0 -1
  272. package/dist/server/Mppx.d.ts.map +0 -1
  273. package/dist/server/Mppx.js.map +0 -1
  274. package/dist/server/NodeListener.d.ts.map +0 -1
  275. package/dist/server/NodeListener.js.map +0 -1
  276. package/dist/server/Request.d.ts.map +0 -1
  277. package/dist/server/Request.js.map +0 -1
  278. package/dist/server/Response.d.ts.map +0 -1
  279. package/dist/server/Response.js.map +0 -1
  280. package/dist/server/Transport.d.ts.map +0 -1
  281. package/dist/server/Transport.js.map +0 -1
  282. package/dist/server/index.d.ts.map +0 -1
  283. package/dist/server/index.js.map +0 -1
  284. package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
  285. package/dist/server/internal/html/compose.main.gen.js.map +0 -1
  286. package/dist/server/internal/html/config.d.ts.map +0 -1
  287. package/dist/server/internal/html/config.js.map +0 -1
  288. package/dist/server/internal/html/constants.d.ts.map +0 -1
  289. package/dist/server/internal/html/constants.js.map +0 -1
  290. package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
  291. package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
  292. package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
  293. package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
  294. package/dist/server/internal/scope.d.ts.map +0 -1
  295. package/dist/server/internal/scope.js.map +0 -1
  296. package/dist/stripe/Methods.d.ts.map +0 -1
  297. package/dist/stripe/Methods.js.map +0 -1
  298. package/dist/stripe/client/Charge.d.ts.map +0 -1
  299. package/dist/stripe/client/Charge.js.map +0 -1
  300. package/dist/stripe/client/Methods.d.ts.map +0 -1
  301. package/dist/stripe/client/Methods.js.map +0 -1
  302. package/dist/stripe/client/index.d.ts.map +0 -1
  303. package/dist/stripe/client/index.js.map +0 -1
  304. package/dist/stripe/index.d.ts.map +0 -1
  305. package/dist/stripe/index.js.map +0 -1
  306. package/dist/stripe/internal/constants.d.ts.map +0 -1
  307. package/dist/stripe/internal/constants.js.map +0 -1
  308. package/dist/stripe/internal/types.d.ts.map +0 -1
  309. package/dist/stripe/internal/types.js.map +0 -1
  310. package/dist/stripe/server/Charge.d.ts.map +0 -1
  311. package/dist/stripe/server/Charge.js.map +0 -1
  312. package/dist/stripe/server/Methods.d.ts.map +0 -1
  313. package/dist/stripe/server/Methods.js.map +0 -1
  314. package/dist/stripe/server/index.d.ts.map +0 -1
  315. package/dist/stripe/server/index.js.map +0 -1
  316. package/dist/stripe/server/internal/deposit-address.d.ts.map +0 -1
  317. package/dist/stripe/server/internal/deposit-address.js.map +0 -1
  318. package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
  319. package/dist/stripe/server/internal/html/types.js.map +0 -1
  320. package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
  321. package/dist/stripe/server/internal/html.gen.js.map +0 -1
  322. package/dist/stripe/server/internal/record-payment.d.ts.map +0 -1
  323. package/dist/stripe/server/internal/record-payment.js.map +0 -1
  324. package/dist/stripe/server/internal/request.d.ts.map +0 -1
  325. package/dist/stripe/server/internal/request.js.map +0 -1
  326. package/dist/tap/Constants.d.ts.map +0 -1
  327. package/dist/tap/Constants.js.map +0 -1
  328. package/dist/tap/Types.d.ts.map +0 -1
  329. package/dist/tap/Types.js.map +0 -1
  330. package/dist/tap/client/index.d.ts.map +0 -1
  331. package/dist/tap/client/index.js.map +0 -1
  332. package/dist/tap/index.d.ts.map +0 -1
  333. package/dist/tap/index.js.map +0 -1
  334. package/dist/tap/server/index.d.ts.map +0 -1
  335. package/dist/tap/server/index.js.map +0 -1
  336. package/dist/tempo/Attribution.d.ts.map +0 -1
  337. package/dist/tempo/Attribution.js.map +0 -1
  338. package/dist/tempo/Methods.d.ts.map +0 -1
  339. package/dist/tempo/Methods.js.map +0 -1
  340. package/dist/tempo/Proof.d.ts.map +0 -1
  341. package/dist/tempo/Proof.js.map +0 -1
  342. package/dist/tempo/client/Charge.d.ts.map +0 -1
  343. package/dist/tempo/client/Charge.js.map +0 -1
  344. package/dist/tempo/client/Methods.d.ts.map +0 -1
  345. package/dist/tempo/client/Methods.js.map +0 -1
  346. package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
  347. package/dist/tempo/client/ResolveAccount.js.map +0 -1
  348. package/dist/tempo/client/Subscription.d.ts.map +0 -1
  349. package/dist/tempo/client/Subscription.js.map +0 -1
  350. package/dist/tempo/client/index.d.ts.map +0 -1
  351. package/dist/tempo/client/index.js.map +0 -1
  352. package/dist/tempo/index.d.ts.map +0 -1
  353. package/dist/tempo/index.js.map +0 -1
  354. package/dist/tempo/internal/account.d.ts.map +0 -1
  355. package/dist/tempo/internal/account.js.map +0 -1
  356. package/dist/tempo/internal/address.d.ts.map +0 -1
  357. package/dist/tempo/internal/address.js.map +0 -1
  358. package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
  359. package/dist/tempo/internal/auto-swap.js.map +0 -1
  360. package/dist/tempo/internal/charge.d.ts.map +0 -1
  361. package/dist/tempo/internal/charge.js.map +0 -1
  362. package/dist/tempo/internal/defaults.d.ts.map +0 -1
  363. package/dist/tempo/internal/defaults.js.map +0 -1
  364. package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
  365. package/dist/tempo/internal/fee-payer.js.map +0 -1
  366. package/dist/tempo/internal/fee-token.d.ts.map +0 -1
  367. package/dist/tempo/internal/fee-token.js.map +0 -1
  368. package/dist/tempo/internal/proof.d.ts.map +0 -1
  369. package/dist/tempo/internal/proof.js.map +0 -1
  370. package/dist/tempo/internal/selectors.d.ts.map +0 -1
  371. package/dist/tempo/internal/selectors.js.map +0 -1
  372. package/dist/tempo/internal/types.d.ts.map +0 -1
  373. package/dist/tempo/internal/types.js.map +0 -1
  374. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
  375. package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
  376. package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
  377. package/dist/tempo/legacy/client/Session.js.map +0 -1
  378. package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
  379. package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
  380. package/dist/tempo/legacy/client/index.d.ts.map +0 -1
  381. package/dist/tempo/legacy/client/index.js.map +0 -1
  382. package/dist/tempo/legacy/index.d.ts.map +0 -1
  383. package/dist/tempo/legacy/index.js.map +0 -1
  384. package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
  385. package/dist/tempo/legacy/session/Chain.js.map +0 -1
  386. package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
  387. package/dist/tempo/legacy/session/Channel.js.map +0 -1
  388. package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
  389. package/dist/tempo/legacy/session/Types.js.map +0 -1
  390. package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
  391. package/dist/tempo/legacy/session/Voucher.js.map +0 -1
  392. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
  393. package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
  394. package/dist/tempo/legacy/session/index.d.ts.map +0 -1
  395. package/dist/tempo/legacy/session/index.js.map +0 -1
  396. package/dist/tempo/server/Charge.d.ts.map +0 -1
  397. package/dist/tempo/server/Charge.js.map +0 -1
  398. package/dist/tempo/server/Methods.d.ts.map +0 -1
  399. package/dist/tempo/server/Methods.js.map +0 -1
  400. package/dist/tempo/server/Relay.d.ts.map +0 -1
  401. package/dist/tempo/server/Relay.js.map +0 -1
  402. package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
  403. package/dist/tempo/server/SponsorBudget.js.map +0 -1
  404. package/dist/tempo/server/Subscription.d.ts.map +0 -1
  405. package/dist/tempo/server/Subscription.js.map +0 -1
  406. package/dist/tempo/server/index.d.ts.map +0 -1
  407. package/dist/tempo/server/index.js.map +0 -1
  408. package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
  409. package/dist/tempo/server/internal/html.gen.js.map +0 -1
  410. package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
  411. package/dist/tempo/server/internal/request-body.js.map +0 -1
  412. package/dist/tempo/server/internal/transport.d.ts.map +0 -1
  413. package/dist/tempo/server/internal/transport.js.map +0 -1
  414. package/dist/tempo/session/Snapshot.d.ts.map +0 -1
  415. package/dist/tempo/session/Snapshot.js.map +0 -1
  416. package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
  417. package/dist/tempo/session/client/ChannelOps.js.map +0 -1
  418. package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
  419. package/dist/tempo/session/client/ChannelStore.js.map +0 -1
  420. package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
  421. package/dist/tempo/session/client/CredentialState.js.map +0 -1
  422. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
  423. package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
  424. package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
  425. package/dist/tempo/session/client/Runtime.js.map +0 -1
  426. package/dist/tempo/session/client/Session.d.ts.map +0 -1
  427. package/dist/tempo/session/client/Session.js.map +0 -1
  428. package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
  429. package/dist/tempo/session/client/SessionManager.js.map +0 -1
  430. package/dist/tempo/session/client/Transports.d.ts.map +0 -1
  431. package/dist/tempo/session/client/Transports.js.map +0 -1
  432. package/dist/tempo/session/client/index.d.ts.map +0 -1
  433. package/dist/tempo/session/client/index.js.map +0 -1
  434. package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
  435. package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
  436. package/dist/tempo/session/index.d.ts.map +0 -1
  437. package/dist/tempo/session/index.js.map +0 -1
  438. package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
  439. package/dist/tempo/session/precompile/Chain.js.map +0 -1
  440. package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
  441. package/dist/tempo/session/precompile/Channel.js.map +0 -1
  442. package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
  443. package/dist/tempo/session/precompile/Protocol.js.map +0 -1
  444. package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
  445. package/dist/tempo/session/precompile/Voucher.js.map +0 -1
  446. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
  447. package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
  448. package/dist/tempo/session/precompile/index.d.ts.map +0 -1
  449. package/dist/tempo/session/precompile/index.js.map +0 -1
  450. package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
  451. package/dist/tempo/session/server/ChannelOps.js.map +0 -1
  452. package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
  453. package/dist/tempo/session/server/ChannelStore.js.map +0 -1
  454. package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
  455. package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
  456. package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
  457. package/dist/tempo/session/server/MeteredStream.js.map +0 -1
  458. package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
  459. package/dist/tempo/session/server/RequestState.js.map +0 -1
  460. package/dist/tempo/session/server/Session.d.ts.map +0 -1
  461. package/dist/tempo/session/server/Session.js.map +0 -1
  462. package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
  463. package/dist/tempo/session/server/Settlement.js.map +0 -1
  464. package/dist/tempo/session/server/Sse.d.ts.map +0 -1
  465. package/dist/tempo/session/server/Sse.js.map +0 -1
  466. package/dist/tempo/session/server/Transports.d.ts.map +0 -1
  467. package/dist/tempo/session/server/Transports.js.map +0 -1
  468. package/dist/tempo/session/server/Ws.d.ts.map +0 -1
  469. package/dist/tempo/session/server/Ws.js.map +0 -1
  470. package/dist/tempo/session/server/index.d.ts.map +0 -1
  471. package/dist/tempo/session/server/index.js.map +0 -1
  472. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
  473. package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
  474. package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
  475. package/dist/tempo/subscription/Receipt.js.map +0 -1
  476. package/dist/tempo/subscription/Store.d.ts.map +0 -1
  477. package/dist/tempo/subscription/Store.js.map +0 -1
  478. package/dist/tempo/subscription/Types.d.ts.map +0 -1
  479. package/dist/tempo/subscription/Types.js.map +0 -1
  480. package/dist/tempo/subscription/index.d.ts.map +0 -1
  481. package/dist/tempo/subscription/index.js.map +0 -1
  482. package/dist/validation/core.d.ts.map +0 -1
  483. package/dist/validation/core.js.map +0 -1
  484. package/dist/validation/index.d.ts.map +0 -1
  485. package/dist/validation/index.js.map +0 -1
  486. package/dist/viem/Account.d.ts.map +0 -1
  487. package/dist/viem/Account.js.map +0 -1
  488. package/dist/viem/Client.d.ts.map +0 -1
  489. package/dist/viem/Client.js.map +0 -1
  490. package/dist/web-bot-auth/Constants.d.ts.map +0 -1
  491. package/dist/web-bot-auth/Constants.js.map +0 -1
  492. package/dist/web-bot-auth/Types.d.ts.map +0 -1
  493. package/dist/web-bot-auth/Types.js.map +0 -1
  494. package/dist/web-bot-auth/client/index.d.ts.map +0 -1
  495. package/dist/web-bot-auth/client/index.js.map +0 -1
  496. package/dist/web-bot-auth/index.d.ts.map +0 -1
  497. package/dist/web-bot-auth/index.js.map +0 -1
  498. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts.map +0 -1
  499. package/dist/web-bot-auth/internal/JwkThumbprint.js.map +0 -1
  500. package/dist/web-bot-auth/internal/SignatureAgent.d.ts.map +0 -1
  501. package/dist/web-bot-auth/internal/SignatureAgent.js.map +0 -1
  502. package/dist/web-bot-auth/server/index.d.ts.map +0 -1
  503. package/dist/web-bot-auth/server/index.js.map +0 -1
  504. package/dist/x402/Assets.d.ts.map +0 -1
  505. package/dist/x402/Assets.js.map +0 -1
  506. package/dist/x402/Header.d.ts.map +0 -1
  507. package/dist/x402/Header.js.map +0 -1
  508. package/dist/x402/Types.d.ts.map +0 -1
  509. package/dist/x402/Types.js.map +0 -1
  510. package/dist/x402/client/Exact.d.ts.map +0 -1
  511. package/dist/x402/client/Exact.js.map +0 -1
  512. package/dist/x402/index.d.ts.map +0 -1
  513. package/dist/x402/index.js.map +0 -1
  514. package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
  515. package/dist/x402/internal/ChallengeBrand.js.map +0 -1
  516. package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
  517. package/dist/x402/internal/RouteBinding.js.map +0 -1
  518. package/dist/x402/server/EvmCharge.d.ts.map +0 -1
  519. package/dist/x402/server/EvmCharge.js.map +0 -1
  520. package/dist/x402/server/Facilitator.d.ts.map +0 -1
  521. package/dist/x402/server/Facilitator.js.map +0 -1
  522. package/dist/zod.d.ts.map +0 -1
  523. package/dist/zod.js.map +0 -1
  524. package/src/BodyDigest.test.ts +0 -43
  525. package/src/BodyDigest.ts +0 -55
  526. package/src/Challenge.fuzz.test.ts +0 -154
  527. package/src/Challenge.test-d.ts +0 -82
  528. package/src/Challenge.test.ts +0 -1060
  529. package/src/Challenge.ts +0 -687
  530. package/src/Constants.ts +0 -58
  531. package/src/Credential.fuzz.test.ts +0 -62
  532. package/src/Credential.test.ts +0 -378
  533. package/src/Credential.ts +0 -217
  534. package/src/Errors.test.ts +0 -520
  535. package/src/Errors.ts +0 -448
  536. package/src/Expires.test.ts +0 -112
  537. package/src/Expires.ts +0 -59
  538. package/src/Html.ts +0 -67
  539. package/src/Mcp.ts +0 -85
  540. package/src/Method.test.ts +0 -177
  541. package/src/Method.ts +0 -631
  542. package/src/PaymentRequest.test.ts +0 -147
  543. package/src/PaymentRequest.ts +0 -108
  544. package/src/Receipt.test.ts +0 -151
  545. package/src/Receipt.ts +0 -146
  546. package/src/Store.test-d.ts +0 -211
  547. package/src/Store.test.ts +0 -407
  548. package/src/Store.ts +0 -397
  549. package/src/attestation/Attestation.integration.test.ts +0 -208
  550. package/src/attestation/Client.test.ts +0 -83
  551. package/src/attestation/Client.ts +0 -34
  552. package/src/attestation/Constants.ts +0 -15
  553. package/src/attestation/Server.test.ts +0 -60
  554. package/src/attestation/Server.ts +0 -12
  555. package/src/attestation/Types.test-d.ts +0 -54
  556. package/src/attestation/Types.ts +0 -77
  557. package/src/attestation/index.ts +0 -5
  558. package/src/attestation/internal/HttpMessageSignature.test.ts +0 -101
  559. package/src/attestation/internal/HttpMessageSignature.ts +0 -429
  560. package/src/attestation/internal/SigningContext.ts +0 -13
  561. package/src/bin.js +0 -2
  562. package/src/bin.ts +0 -4
  563. package/src/cli/account.ts +0 -269
  564. package/src/cli/cli.test.ts +0 -2221
  565. package/src/cli/cli.ts +0 -1650
  566. package/src/cli/config.test.ts +0 -89
  567. package/src/cli/config.ts +0 -50
  568. package/src/cli/internal.ts +0 -114
  569. package/src/cli/mcp.test.ts +0 -262
  570. package/src/cli/plugins/evm.ts +0 -55
  571. package/src/cli/plugins/index.ts +0 -4
  572. package/src/cli/plugins/plugin.ts +0 -84
  573. package/src/cli/plugins/stripe.ts +0 -174
  574. package/src/cli/plugins/tempo.ts +0 -1102
  575. package/src/cli/sessions/Manager.test.ts +0 -249
  576. package/src/cli/sessions/Manager.ts +0 -93
  577. package/src/cli/sessions/commands.ts +0 -444
  578. package/src/cli/sessions/request.test.ts +0 -51
  579. package/src/cli/sessions/request.ts +0 -353
  580. package/src/cli/sessions/store.test.ts +0 -581
  581. package/src/cli/sessions/store.ts +0 -940
  582. package/src/cli/utils.test.ts +0 -156
  583. package/src/cli/utils.ts +0 -394
  584. package/src/cli/validate/challenge.ts +0 -565
  585. package/src/cli/validate/discovery.test.ts +0 -435
  586. package/src/cli/validate/discovery.ts +0 -221
  587. package/src/cli/validate/helpers.ts +0 -166
  588. package/src/cli/validate/index.ts +0 -229
  589. package/src/cli/validate/messages.ts +0 -7
  590. package/src/cli/validate/payment.ts +0 -774
  591. package/src/cli/validate.test.ts +0 -843
  592. package/src/client/Methods.ts +0 -8
  593. package/src/client/Mppx.test-d.ts +0 -287
  594. package/src/client/Mppx.test.ts +0 -1065
  595. package/src/client/Mppx.ts +0 -487
  596. package/src/client/Transport.test.ts +0 -586
  597. package/src/client/Transport.ts +0 -170
  598. package/src/client/index.ts +0 -29
  599. package/src/client/internal/Fetch.browser.test.ts +0 -197
  600. package/src/client/internal/Fetch.test-d.ts +0 -109
  601. package/src/client/internal/Fetch.test.ts +0 -2336
  602. package/src/client/internal/Fetch.ts +0 -1075
  603. package/src/client/internal/MethodChallenge.ts +0 -35
  604. package/src/client/internal/MethodResponse.ts +0 -67
  605. package/src/client/internal/protocols/Mcp.test.ts +0 -220
  606. package/src/client/internal/protocols/Mcp.ts +0 -186
  607. package/src/client/internal/protocols/Mpp.ts +0 -21
  608. package/src/client/internal/protocols/Protocol.ts +0 -10
  609. package/src/client/internal/protocols/Shared.ts +0 -25
  610. package/src/client/internal/protocols/X402.ts +0 -46
  611. package/src/client/node.test.ts +0 -115
  612. package/src/client/node.ts +0 -247
  613. package/src/discovery/Discovery.test.ts +0 -214
  614. package/src/discovery/Discovery.ts +0 -105
  615. package/src/discovery/OpenApi.test.ts +0 -623
  616. package/src/discovery/OpenApi.ts +0 -192
  617. package/src/discovery/Validate.test.ts +0 -305
  618. package/src/discovery/Validate.ts +0 -77
  619. package/src/discovery/index.ts +0 -3
  620. package/src/discovery/internal/Metadata.ts +0 -51
  621. package/src/env.d.ts +0 -12
  622. package/src/evm/Assets.ts +0 -1
  623. package/src/evm/Chains.ts +0 -11
  624. package/src/evm/Methods.ts +0 -44
  625. package/src/evm/PublicInterface.test-d.ts +0 -134
  626. package/src/evm/Types.ts +0 -140
  627. package/src/evm/client/Charge.test.ts +0 -347
  628. package/src/evm/client/Charge.ts +0 -187
  629. package/src/evm/client/Methods.ts +0 -19
  630. package/src/evm/client/index.ts +0 -6
  631. package/src/evm/index.ts +0 -16
  632. package/src/evm/server/Charge.test.ts +0 -339
  633. package/src/evm/server/Charge.ts +0 -295
  634. package/src/evm/server/Methods.ts +0 -22
  635. package/src/evm/server/index.ts +0 -6
  636. package/src/index.ts +0 -14
  637. package/src/internal/AcceptPayment.test.ts +0 -347
  638. package/src/internal/AcceptPayment.ts +0 -366
  639. package/src/internal/HeaderCodec.ts +0 -36
  640. package/src/internal/changeset.test.ts +0 -106
  641. package/src/internal/constantTimeEqual.test.ts +0 -47
  642. package/src/internal/constantTimeEqual.ts +0 -10
  643. package/src/internal/env.test.ts +0 -42
  644. package/src/internal/env.ts +0 -49
  645. package/src/internal/types.test-d.ts +0 -21
  646. package/src/internal/types.ts +0 -479
  647. package/src/mcp/client/McpClient.integration.test.ts +0 -639
  648. package/src/mcp/client/McpClient.test-d.ts +0 -144
  649. package/src/mcp/client/McpClient.test.ts +0 -463
  650. package/src/mcp/client/McpClient.ts +0 -307
  651. package/src/mcp/client/McpClient.unit.test.ts +0 -135
  652. package/src/mcp/client/index.ts +0 -2
  653. package/src/mcp/server/Transport.test.ts +0 -191
  654. package/src/mcp/server/Transport.ts +0 -111
  655. package/src/mcp/server/index.ts +0 -1
  656. package/src/middlewares/elysia.test.ts +0 -285
  657. package/src/middlewares/elysia.ts +0 -116
  658. package/src/middlewares/express.test.ts +0 -361
  659. package/src/middlewares/express.ts +0 -140
  660. package/src/middlewares/hono.test.ts +0 -473
  661. package/src/middlewares/hono.ts +0 -153
  662. package/src/middlewares/internal/mppx.test.ts +0 -177
  663. package/src/middlewares/internal/mppx.ts +0 -67
  664. package/src/middlewares/nextjs.test.ts +0 -359
  665. package/src/middlewares/nextjs.ts +0 -107
  666. package/src/proxy/Proxy.test.ts +0 -1038
  667. package/src/proxy/Proxy.ts +0 -483
  668. package/src/proxy/Proxy.upstreamError.test.ts +0 -364
  669. package/src/proxy/Service.test.ts +0 -252
  670. package/src/proxy/Service.ts +0 -280
  671. package/src/proxy/index.ts +0 -6
  672. package/src/proxy/internal/Headers.test.ts +0 -139
  673. package/src/proxy/internal/Headers.ts +0 -66
  674. package/src/proxy/internal/Route.test.ts +0 -217
  675. package/src/proxy/internal/Route.ts +0 -64
  676. package/src/proxy/services/anthropic.test.ts +0 -132
  677. package/src/proxy/services/anthropic.ts +0 -53
  678. package/src/proxy/services/hooks.test-d.ts +0 -14
  679. package/src/proxy/services/hooks.test.ts +0 -44
  680. package/src/proxy/services/openai.test.ts +0 -157
  681. package/src/proxy/services/openai.ts +0 -60
  682. package/src/proxy/services/stripe.test.ts +0 -175
  683. package/src/proxy/services/stripe.ts +0 -59
  684. package/src/server/Methods.test-d.ts +0 -88
  685. package/src/server/Methods.test.ts +0 -69
  686. package/src/server/Methods.ts +0 -3
  687. package/src/server/Mppx.authorize.test.ts +0 -210
  688. package/src/server/Mppx.test-d.ts +0 -494
  689. package/src/server/Mppx.test.ts +0 -6711
  690. package/src/server/Mppx.ts +0 -2919
  691. package/src/server/NodeListener.test.ts +0 -293
  692. package/src/server/NodeListener.ts +0 -45
  693. package/src/server/Request.test.ts +0 -255
  694. package/src/server/Request.ts +0 -155
  695. package/src/server/Response.test.ts +0 -32
  696. package/src/server/Response.ts +0 -45
  697. package/src/server/Transport.test.ts +0 -598
  698. package/src/server/Transport.ts +0 -320
  699. package/src/server/index.ts +0 -9
  700. package/src/server/internal/html/compose.main.gen.ts +0 -2
  701. package/src/server/internal/html/compose.main.ts +0 -88
  702. package/src/server/internal/html/config.ts +0 -672
  703. package/src/server/internal/html/constants.ts +0 -28
  704. package/src/server/internal/html/serviceWorker.client.ts +0 -28
  705. package/src/server/internal/html/serviceWorker.gen.ts +0 -2
  706. package/src/server/internal/html/serviceWorker.ts +0 -27
  707. package/src/server/internal/html/tsconfig.compose.json +0 -8
  708. package/src/server/internal/html/tsconfig.worker.client.json +0 -8
  709. package/src/server/internal/html/tsconfig.worker.json +0 -8
  710. package/src/server/internal/scope.ts +0 -43
  711. package/src/stripe/Charge.integration.test.ts +0 -329
  712. package/src/stripe/Methods.test.ts +0 -62
  713. package/src/stripe/Methods.ts +0 -44
  714. package/src/stripe/client/Charge.test.ts +0 -205
  715. package/src/stripe/client/Charge.ts +0 -132
  716. package/src/stripe/client/Methods.ts +0 -37
  717. package/src/stripe/client/index.ts +0 -2
  718. package/src/stripe/index.ts +0 -1
  719. package/src/stripe/internal/constants.ts +0 -7
  720. package/src/stripe/internal/types.ts +0 -47
  721. package/src/stripe/server/Charge.test-d.ts +0 -81
  722. package/src/stripe/server/Charge.test.ts +0 -700
  723. package/src/stripe/server/Charge.ts +0 -487
  724. package/src/stripe/server/Methods.test-d.ts +0 -157
  725. package/src/stripe/server/Methods.test.ts +0 -403
  726. package/src/stripe/server/Methods.ts +0 -441
  727. package/src/stripe/server/index.ts +0 -2
  728. package/src/stripe/server/internal/deposit-address.ts +0 -57
  729. package/src/stripe/server/internal/html/main.ts +0 -165
  730. package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
  731. package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
  732. package/src/stripe/server/internal/html/package.json +0 -9
  733. package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
  734. package/src/stripe/server/internal/html/tsconfig.json +0 -8
  735. package/src/stripe/server/internal/html/types.ts +0 -5
  736. package/src/stripe/server/internal/html.gen.ts +0 -2
  737. package/src/stripe/server/internal/record-payment.ts +0 -66
  738. package/src/stripe/server/internal/request.ts +0 -49
  739. package/src/tap/Constants.ts +0 -32
  740. package/src/tap/Tap.test.ts +0 -125
  741. package/src/tap/Types.ts +0 -11
  742. package/src/tap/client/index.ts +0 -54
  743. package/src/tap/index.ts +0 -4
  744. package/src/tap/server/index.ts +0 -48
  745. package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
  746. package/src/tempo/Attribution.test.ts +0 -294
  747. package/src/tempo/Attribution.ts +0 -185
  748. package/src/tempo/Methods.test.ts +0 -425
  749. package/src/tempo/Methods.ts +0 -367
  750. package/src/tempo/Proof.conformance.test.ts +0 -146
  751. package/src/tempo/Proof.test-d.ts +0 -32
  752. package/src/tempo/Proof.test.ts +0 -40
  753. package/src/tempo/Proof.ts +0 -69
  754. package/src/tempo/PublicExports.test-d.ts +0 -130
  755. package/src/tempo/Subscription.integration.test.ts +0 -591
  756. package/src/tempo/client/Charge.test.ts +0 -501
  757. package/src/tempo/client/Charge.ts +0 -271
  758. package/src/tempo/client/Methods.ts +0 -45
  759. package/src/tempo/client/ResolveAccount.ts +0 -46
  760. package/src/tempo/client/Subscription.test.ts +0 -180
  761. package/src/tempo/client/Subscription.ts +0 -156
  762. package/src/tempo/client/index.ts +0 -17
  763. package/src/tempo/index.ts +0 -5
  764. package/src/tempo/internal/account.ts +0 -56
  765. package/src/tempo/internal/address.test.ts +0 -42
  766. package/src/tempo/internal/address.ts +0 -6
  767. package/src/tempo/internal/auto-swap.test.ts +0 -198
  768. package/src/tempo/internal/auto-swap.ts +0 -145
  769. package/src/tempo/internal/charge.test.ts +0 -66
  770. package/src/tempo/internal/charge.ts +0 -43
  771. package/src/tempo/internal/defaults.test.ts +0 -95
  772. package/src/tempo/internal/defaults.ts +0 -53
  773. package/src/tempo/internal/fee-payer.test.ts +0 -1177
  774. package/src/tempo/internal/fee-payer.ts +0 -808
  775. package/src/tempo/internal/fee-token.test.ts +0 -165
  776. package/src/tempo/internal/fee-token.ts +0 -72
  777. package/src/tempo/internal/proof.test.ts +0 -97
  778. package/src/tempo/internal/proof.ts +0 -87
  779. package/src/tempo/internal/selectors.ts +0 -10
  780. package/src/tempo/internal/types.ts +0 -19
  781. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
  782. package/src/tempo/legacy/README.md +0 -9
  783. package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
  784. package/src/tempo/legacy/client/ChannelOps.ts +0 -271
  785. package/src/tempo/legacy/client/Session.test.ts +0 -800
  786. package/src/tempo/legacy/client/Session.ts +0 -397
  787. package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
  788. package/src/tempo/legacy/client/SessionManager.ts +0 -909
  789. package/src/tempo/legacy/client/index.ts +0 -6
  790. package/src/tempo/legacy/index.ts +0 -4
  791. package/src/tempo/legacy/session/Chain.test.ts +0 -1349
  792. package/src/tempo/legacy/session/Chain.ts +0 -830
  793. package/src/tempo/legacy/session/Channel.test.ts +0 -109
  794. package/src/tempo/legacy/session/Channel.ts +0 -51
  795. package/src/tempo/legacy/session/Types.ts +0 -91
  796. package/src/tempo/legacy/session/Voucher.test.ts +0 -410
  797. package/src/tempo/legacy/session/Voucher.ts +0 -183
  798. package/src/tempo/legacy/session/escrow.abi.ts +0 -760
  799. package/src/tempo/legacy/session/index.ts +0 -8
  800. package/src/tempo/server/AtomicStore.test-d.ts +0 -63
  801. package/src/tempo/server/Charge.test.ts +0 -6056
  802. package/src/tempo/server/Charge.ts +0 -1379
  803. package/src/tempo/server/Methods.ts +0 -86
  804. package/src/tempo/server/Relay.test.ts +0 -677
  805. package/src/tempo/server/Relay.ts +0 -297
  806. package/src/tempo/server/SponsorBudget.test.ts +0 -154
  807. package/src/tempo/server/SponsorBudget.ts +0 -219
  808. package/src/tempo/server/Sse.test.ts +0 -321
  809. package/src/tempo/server/Subscription.test.ts +0 -1944
  810. package/src/tempo/server/Subscription.ts +0 -1336
  811. package/src/tempo/server/index.ts +0 -12
  812. package/src/tempo/server/internal/html/main.ts +0 -115
  813. package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
  814. package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
  815. package/src/tempo/server/internal/html/package.json +0 -10
  816. package/src/tempo/server/internal/html/tsconfig.json +0 -8
  817. package/src/tempo/server/internal/html.gen.ts +0 -2
  818. package/src/tempo/server/internal/request-body.test.ts +0 -210
  819. package/src/tempo/server/internal/request-body.ts +0 -61
  820. package/src/tempo/server/internal/transport.test.ts +0 -922
  821. package/src/tempo/server/internal/transport.ts +0 -322
  822. package/src/tempo/session/README.md +0 -320
  823. package/src/tempo/session/Snapshot.test.ts +0 -41
  824. package/src/tempo/session/Snapshot.ts +0 -95
  825. package/src/tempo/session/client/ChannelOps.test.ts +0 -218
  826. package/src/tempo/session/client/ChannelOps.ts +0 -348
  827. package/src/tempo/session/client/ChannelStore.ts +0 -111
  828. package/src/tempo/session/client/CredentialState.test.ts +0 -789
  829. package/src/tempo/session/client/CredentialState.ts +0 -942
  830. package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
  831. package/src/tempo/session/client/Runtime.test.ts +0 -1104
  832. package/src/tempo/session/client/Runtime.ts +0 -1008
  833. package/src/tempo/session/client/Session.test.ts +0 -1355
  834. package/src/tempo/session/client/Session.ts +0 -420
  835. package/src/tempo/session/client/SessionManager.test.ts +0 -1899
  836. package/src/tempo/session/client/SessionManager.ts +0 -996
  837. package/src/tempo/session/client/Transports.test.ts +0 -1141
  838. package/src/tempo/session/client/Transports.ts +0 -1534
  839. package/src/tempo/session/client/index.ts +0 -40
  840. package/src/tempo/session/client/internal/SessionManager.ts +0 -36
  841. package/src/tempo/session/index.ts +0 -7
  842. package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
  843. package/src/tempo/session/precompile/Chain.test.ts +0 -1641
  844. package/src/tempo/session/precompile/Chain.ts +0 -1269
  845. package/src/tempo/session/precompile/Channel.test.ts +0 -147
  846. package/src/tempo/session/precompile/Channel.ts +0 -108
  847. package/src/tempo/session/precompile/Protocol.test.ts +0 -358
  848. package/src/tempo/session/precompile/Protocol.ts +0 -520
  849. package/src/tempo/session/precompile/Voucher.test.ts +0 -354
  850. package/src/tempo/session/precompile/Voucher.ts +0 -162
  851. package/src/tempo/session/precompile/escrow.abi.ts +0 -226
  852. package/src/tempo/session/precompile/index.ts +0 -33
  853. package/src/tempo/session/server/ChannelOps.test.ts +0 -129
  854. package/src/tempo/session/server/ChannelOps.ts +0 -157
  855. package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
  856. package/src/tempo/session/server/ChannelStore.ts +0 -856
  857. package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
  858. package/src/tempo/session/server/CredentialVerification.ts +0 -1087
  859. package/src/tempo/session/server/MeteredStream.ts +0 -99
  860. package/src/tempo/session/server/RequestState.test.ts +0 -574
  861. package/src/tempo/session/server/RequestState.ts +0 -507
  862. package/src/tempo/session/server/Session.integration.test.ts +0 -449
  863. package/src/tempo/session/server/Session.test.ts +0 -4247
  864. package/src/tempo/session/server/Session.ts +0 -669
  865. package/src/tempo/session/server/Settlement.test.ts +0 -345
  866. package/src/tempo/session/server/Settlement.ts +0 -527
  867. package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
  868. package/src/tempo/session/server/Sse.test.ts +0 -634
  869. package/src/tempo/session/server/Sse.ts +0 -261
  870. package/src/tempo/session/server/Transports.test.ts +0 -346
  871. package/src/tempo/session/server/Transports.ts +0 -256
  872. package/src/tempo/session/server/Ws.test.ts +0 -765
  873. package/src/tempo/session/server/Ws.ts +0 -391
  874. package/src/tempo/session/server/index.ts +0 -12
  875. package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
  876. package/src/tempo/subscription/KeyAuthorization.ts +0 -396
  877. package/src/tempo/subscription/Receipt.ts +0 -28
  878. package/src/tempo/subscription/Store.test.ts +0 -609
  879. package/src/tempo/subscription/Store.ts +0 -449
  880. package/src/tempo/subscription/Types.ts +0 -68
  881. package/src/tempo/subscription/index.ts +0 -23
  882. package/src/tsconfig.json +0 -10
  883. package/src/validation/core.ts +0 -386
  884. package/src/validation/index.ts +0 -11
  885. package/src/viem/Account.test.ts +0 -72
  886. package/src/viem/Account.ts +0 -30
  887. package/src/viem/Client.test.ts +0 -366
  888. package/src/viem/Client.ts +0 -93
  889. package/src/web-bot-auth/Constants.ts +0 -24
  890. package/src/web-bot-auth/Types.ts +0 -9
  891. package/src/web-bot-auth/WebBotAuth.test.ts +0 -182
  892. package/src/web-bot-auth/client/index.ts +0 -84
  893. package/src/web-bot-auth/index.ts +0 -6
  894. package/src/web-bot-auth/internal/JwkThumbprint.ts +0 -21
  895. package/src/web-bot-auth/internal/SignatureAgent.ts +0 -18
  896. package/src/web-bot-auth/server/index.ts +0 -113
  897. package/src/x402/Assets.test.ts +0 -253
  898. package/src/x402/Assets.ts +0 -221
  899. package/src/x402/Exact.e2e.test.ts +0 -488
  900. package/src/x402/Exact.localnet.test.ts +0 -475
  901. package/src/x402/Header.test.ts +0 -73
  902. package/src/x402/Header.ts +0 -79
  903. package/src/x402/PublicInterface.test-d.ts +0 -39
  904. package/src/x402/Types.ts +0 -248
  905. package/src/x402/client/Exact.test.ts +0 -309
  906. package/src/x402/client/Exact.ts +0 -186
  907. package/src/x402/index.ts +0 -6
  908. package/src/x402/internal/ChallengeBrand.ts +0 -14
  909. package/src/x402/internal/RouteBinding.ts +0 -18
  910. package/src/x402/server/EvmCharge.ts +0 -410
  911. package/src/x402/server/Facilitator.test.ts +0 -111
  912. package/src/x402/server/Facilitator.ts +0 -56
  913. package/src/zod.test.ts +0 -169
  914. package/src/zod.ts +0 -71
@@ -1,1269 +0,0 @@
1
- import type { Account, Address, Client, Hex } from 'viem'
2
- import { decodeFunctionData, encodeFunctionData, isAddressEqual, parseEventLogs } from 'viem'
3
- import {
4
- call,
5
- prepareTransactionRequest,
6
- readContract,
7
- sendRawTransaction,
8
- sendRawTransactionSync,
9
- sendTransaction as sendViemTransaction,
10
- signTransaction,
11
- waitForTransactionReceipt,
12
- } from 'viem/actions'
13
- import { Abis, Addresses, Transaction } from 'viem/tempo'
14
-
15
- import { BadRequestError, VerificationFailedError } from '../../../Errors.js'
16
- import * as FeePayer from '../../internal/fee-payer.js'
17
- import { resolveFeeToken } from '../../internal/fee-token.js'
18
- import * as ChannelOps from '../server/ChannelOps.js'
19
- import * as ChannelUtils from './Channel.js'
20
- import type { ChannelDescriptor } from './Channel.js'
21
- import { escrowAbi } from './escrow.abi.js'
22
- import { tip20ChannelEscrow } from './Protocol.js'
23
-
24
- /** Minimal on-chain state read back after precompile transaction receipts. */
25
- export type ReceiptValidationChannelState = {
26
- /** Cumulative amount settled on-chain. */
27
- settled: bigint
28
- /** Current on-chain channel deposit. */
29
- deposit: bigint
30
- /** Close-request timestamp, or zero when open. */
31
- closeRequestedAt: number
32
- }
33
-
34
- /** Inputs used to validate a ChannelOpened event against the verified open calldata. */
35
- export type ValidateChannelOpenedReceiptParameters = {
36
- /** Chain ID used in descriptor-derived channel ID. */
37
- chainId: number
38
- /** Descriptor reconstructed from the open calldata. */
39
- descriptor: ChannelDescriptor
40
- /** Channel ID emitted by the ChannelOpened event. */
41
- emittedChannelId: Hex
42
- /** Deposit emitted by the ChannelOpened event. */
43
- emittedDeposit: bigint
44
- /** Expiring nonce hash emitted by the ChannelOpened event. */
45
- emittedExpiringNonceHash: Hex
46
- /** Escrow precompile address used in descriptor-derived channel ID. */
47
- escrow: Address
48
- /** Channel ID expected from the credential. */
49
- expectedChannelId: Hex
50
- /** Deposit parsed from open calldata. */
51
- openDeposit: bigint
52
- }
53
-
54
- /** Inputs used to validate open read-back state after ChannelOpened. */
55
- export type ValidateOpenReadbackStateParameters = {
56
- /** Deposit emitted by the ChannelOpened event. */
57
- emittedDeposit: bigint
58
- /** State read back from the precompile. */
59
- state: ReceiptValidationChannelState
60
- }
61
-
62
- /** Inputs used to validate a TopUp event against the credential channel ID. */
63
- export type ValidateTopUpReceiptParameters = {
64
- /** Channel ID emitted by the TopUp event. */
65
- emittedChannelId: Hex
66
- /** Channel ID expected from the credential. */
67
- expectedChannelId: Hex
68
- }
69
-
70
- /** Inputs used to validate top-up read-back state after TopUp. */
71
- export type ValidateTopUpReadbackStateParameters = {
72
- /** New deposit emitted by the TopUp event. */
73
- newDeposit: bigint
74
- /** State read back from the precompile. */
75
- state: ReceiptValidationChannelState
76
- }
77
-
78
- /** Typed fields decoded from a ChannelOpened receipt event. */
79
- export type ChannelOpenedReceiptFields = {
80
- /** Channel ID emitted by the precompile. */
81
- channelId: Hex
82
- /** Deposit emitted by the precompile. */
83
- deposit: bigint
84
- /** Expiring nonce hash emitted by the precompile. */
85
- expiringNonceHash: Hex
86
- }
87
-
88
- /** Typed fields decoded from a TopUp receipt event. */
89
- export type TopUpReceiptFields = {
90
- /** Channel ID emitted by the precompile. */
91
- channelId: Hex
92
- /** New total deposit emitted by the precompile. */
93
- newDeposit: bigint
94
- }
95
-
96
- /** Typed fields decoded from a Settled receipt event. */
97
- export type SettledReceiptFields = {
98
- /** New cumulative amount settled on-chain. */
99
- newSettled: bigint
100
- }
101
-
102
- /** Typed fields decoded from a ChannelClosed receipt event. */
103
- export type ChannelClosedReceiptFields = {
104
- /** Amount captured by the payee. */
105
- settledToPayee: bigint
106
- /** Amount refunded to the payer. */
107
- refundedToPayer: bigint
108
- }
109
-
110
- type ReceiptEventWithArgs = {
111
- args: Record<string, unknown>
112
- }
113
-
114
- const uint96Max = 2n ** 96n - 1n
115
-
116
- function readBytes32(value: unknown, label: string): Hex {
117
- if (typeof value === 'string' && /^0x[0-9a-fA-F]{64}$/.test(value)) return value as Hex
118
- throw new VerificationFailedError({ reason: `${label} missing from receipt event` })
119
- }
120
-
121
- function readUint96(value: unknown, label: string): bigint {
122
- if (typeof value !== 'bigint')
123
- throw new VerificationFailedError({ reason: `${label} missing from receipt event` })
124
- if (value < 0n || value > uint96Max)
125
- throw new VerificationFailedError({ reason: `${label} exceeds uint96 range` })
126
- return value
127
- }
128
-
129
- /** Reads and validates typed fields from a ChannelOpened receipt event. */
130
- export function readChannelOpenedReceiptFields(
131
- event: ReceiptEventWithArgs,
132
- ): ChannelOpenedReceiptFields {
133
- return {
134
- channelId: readBytes32(event.args.channelId, 'ChannelOpened channelId'),
135
- deposit: readUint96(event.args.deposit, 'ChannelOpened deposit'),
136
- expiringNonceHash: readBytes32(event.args.expiringNonceHash, 'ChannelOpened expiringNonceHash'),
137
- }
138
- }
139
-
140
- /** Reads and validates typed fields from a TopUp receipt event. */
141
- export function readTopUpReceiptFields(event: ReceiptEventWithArgs): TopUpReceiptFields {
142
- return {
143
- channelId: readBytes32(event.args.channelId, 'TopUp channelId'),
144
- newDeposit: readUint96(event.args.newDeposit, 'TopUp newDeposit'),
145
- }
146
- }
147
-
148
- /** Reads and validates typed fields from a Settled receipt event. */
149
- export function readSettledReceiptFields(event: ReceiptEventWithArgs): SettledReceiptFields {
150
- return {
151
- newSettled: readUint96(event.args.newSettled, 'Settled newSettled'),
152
- }
153
- }
154
-
155
- /** Reads and validates typed fields from a ChannelClosed receipt event. */
156
- export function readChannelClosedReceiptFields(
157
- event: ReceiptEventWithArgs,
158
- ): ChannelClosedReceiptFields {
159
- return {
160
- settledToPayee: readUint96(event.args.settledToPayee, 'ChannelClosed settledToPayee'),
161
- refundedToPayer: readUint96(event.args.refundedToPayer, 'ChannelClosed refundedToPayer'),
162
- }
163
- }
164
-
165
- /** Validates that ChannelOpened receipt fields match calldata, descriptor, and credential. */
166
- export function validateChannelOpenedReceipt(
167
- parameters: ValidateChannelOpenedReceiptParameters,
168
- ): void {
169
- const {
170
- chainId,
171
- descriptor,
172
- emittedChannelId,
173
- emittedDeposit,
174
- emittedExpiringNonceHash,
175
- escrow,
176
- expectedChannelId,
177
- openDeposit,
178
- } = parameters
179
-
180
- if (emittedChannelId.toLowerCase() !== expectedChannelId.toLowerCase())
181
- throw new VerificationFailedError({
182
- reason: 'ChannelOpened channelId does not match credential',
183
- })
184
- if (emittedExpiringNonceHash.toLowerCase() !== descriptor.expiringNonceHash.toLowerCase())
185
- throw new VerificationFailedError({
186
- reason: 'ChannelOpened expiringNonceHash does not match descriptor',
187
- })
188
- if (emittedDeposit !== openDeposit)
189
- throw new VerificationFailedError({ reason: 'ChannelOpened deposit does not match calldata' })
190
-
191
- const confirmedChannelId = ChannelUtils.computeId({ ...descriptor, chainId, escrow })
192
- if (confirmedChannelId.toLowerCase() !== emittedChannelId.toLowerCase())
193
- throw new VerificationFailedError({
194
- reason: 'descriptor does not match ChannelOpened channelId',
195
- })
196
- }
197
-
198
- /** Validates the state read back after a successful open transaction. */
199
- export function validateOpenReadbackState(parameters: ValidateOpenReadbackStateParameters): void {
200
- const { emittedDeposit, state } = parameters
201
- if (state.deposit !== emittedDeposit || state.settled !== 0n || state.closeRequestedAt !== 0)
202
- throw new VerificationFailedError({
203
- reason: 'on-chain channel state does not match open receipt',
204
- })
205
- }
206
-
207
- /** Validates that a TopUp receipt belongs to the credential channel. */
208
- export function validateTopUpReceipt(parameters: ValidateTopUpReceiptParameters): void {
209
- if (parameters.emittedChannelId.toLowerCase() !== parameters.expectedChannelId.toLowerCase())
210
- throw new VerificationFailedError({ reason: 'TopUp channelId does not match credential' })
211
- }
212
-
213
- /** Validates the state read back after a successful top-up transaction. */
214
- export function validateTopUpReadbackState(parameters: ValidateTopUpReadbackStateParameters): void {
215
- if (parameters.state.deposit !== parameters.newDeposit)
216
- throw new VerificationFailedError({
217
- reason: 'on-chain channel state does not match topUp receipt',
218
- })
219
- }
220
-
221
- /** Fee fields produced by viem transaction preparation for direct precompile calls. */
222
- export type PreparedPrecompileFeePayerTransaction = {
223
- /** Estimated gas units for the transaction. */
224
- gas?: bigint | undefined
225
- /** Maximum fee per gas unit. */
226
- maxFeePerGas?: bigint | undefined
227
- /** Maximum priority fee per gas unit. */
228
- maxPriorityFeePerGas?: bigint | undefined
229
- }
230
-
231
- /** Parameters for checking a direct precompile transaction against sponsor limits. */
232
- export type AssertPrecompileFeePayerPolicyParameters = {
233
- /** Prepared transaction fee fields to validate. */
234
- prepared: PreparedPrecompileFeePayerTransaction
235
- /** Optional sponsor policy overrides. Missing fields are not enforced here. */
236
- policy?: Partial<FeePayer.Policy> | undefined
237
- }
238
-
239
- /** Enforces sponsor gas and fee limits before co-signing a direct precompile call. */
240
- export function assertPrecompileFeePayerPolicy(
241
- parameters: AssertPrecompileFeePayerPolicyParameters,
242
- ) {
243
- const { policy, prepared } = parameters
244
- if (!policy) return
245
- if (policy.maxGas !== undefined && (prepared.gas ?? 0n) > policy.maxGas)
246
- throw new BadRequestError({ reason: 'fee-payer policy maxGas exceeded' })
247
- if (policy.maxFeePerGas !== undefined && (prepared.maxFeePerGas ?? 0n) > policy.maxFeePerGas)
248
- throw new BadRequestError({ reason: 'fee-payer policy maxFeePerGas exceeded' })
249
- if (
250
- policy.maxPriorityFeePerGas !== undefined &&
251
- (prepared.maxPriorityFeePerGas ?? 0n) > policy.maxPriorityFeePerGas
252
- )
253
- throw new BadRequestError({ reason: 'fee-payer policy maxPriorityFeePerGas exceeded' })
254
- if (
255
- policy.maxTotalFee !== undefined &&
256
- (prepared.gas ?? 0n) * (prepared.maxFeePerGas ?? 0n) > policy.maxTotalFee
257
- )
258
- throw new BadRequestError({ reason: 'fee-payer policy maxTotalFee exceeded' })
259
- }
260
-
261
- const UINT96_MAX = 2n ** 96n - 1n
262
-
263
- /** viem client shape accepted by raw Tempo transaction actions. */
264
- export type TransactionClient = Parameters<typeof sendRawTransaction>[0]
265
-
266
- function assertUint96(amount: bigint): void {
267
- if (amount < 0n || amount > UINT96_MAX) {
268
- throw new VerificationFailedError({ reason: 'amount exceeds uint96 range' })
269
- }
270
- }
271
-
272
- /**
273
- * On-chain channel state from the TIP20EscrowChannel precompile.
274
- */
275
- export type ChannelState = {
276
- settled: bigint
277
- deposit: bigint
278
- closeRequestedAt: number
279
- }
280
-
281
- /**
282
- * On-chain channel descriptor and state from the TIP20EscrowChannel precompile.
283
- */
284
- export type Channel = {
285
- descriptor: ChannelDescriptor
286
- state: ChannelState
287
- }
288
-
289
- /**
290
- * Read channel descriptor and state from the TIP20EscrowChannel precompile.
291
- */
292
- export async function getChannel(
293
- client: Client,
294
- descriptor: ChannelDescriptor,
295
- escrow: Address = tip20ChannelEscrow,
296
- blockNumber?: bigint,
297
- ): Promise<Channel> {
298
- const channel = await readContract(client, {
299
- address: escrow,
300
- abi: escrowAbi,
301
- functionName: 'getChannel',
302
- args: [descriptorTuple(descriptor)],
303
- ...(blockNumber !== undefined ? { blockNumber } : {}),
304
- })
305
- return {
306
- descriptor: channel.descriptor,
307
- state: stateFromTuple(channel.state),
308
- }
309
- }
310
-
311
- /**
312
- * Read channel state from the TIP20EscrowChannel precompile.
313
- */
314
- export async function getChannelState(
315
- client: Client,
316
- channelId: Hex,
317
- escrow: Address = tip20ChannelEscrow,
318
- blockNumber?: bigint,
319
- ): Promise<ChannelState> {
320
- const state = await readContract(client, {
321
- address: escrow,
322
- abi: escrowAbi,
323
- functionName: 'getChannelState',
324
- args: [channelId],
325
- ...(blockNumber !== undefined ? { blockNumber } : {}),
326
- })
327
- return stateFromTuple(state)
328
- }
329
-
330
- /**
331
- * Read channel states from the TIP20EscrowChannel precompile.
332
- */
333
- export async function getChannelStatesBatch(
334
- client: Client,
335
- channelIds: readonly Hex[],
336
- escrow: Address = tip20ChannelEscrow,
337
- ): Promise<ChannelState[]> {
338
- const states = await readContract(client, {
339
- address: escrow,
340
- abi: escrowAbi,
341
- functionName: 'getChannelStatesBatch',
342
- args: [channelIds],
343
- })
344
- return states.map(stateFromTuple)
345
- }
346
-
347
- /** Tuning for {@link readbackWithRetry}. */
348
- export type ReadbackRetryOptions = {
349
- /** Additional attempts after the first, before giving up. @default 5 */
350
- retries?: number | undefined
351
- /** Delay between attempts, in milliseconds. @default 250 */
352
- delayMs?: number | undefined
353
- }
354
-
355
- /**
356
- * Retry an on-chain readback that is pinned to the block containing a just-sent
357
- * transaction.
358
- *
359
- * The escrow state read is served by a load-balanced RPC whose replicas can lag
360
- * behind the block that produced the transaction receipt. Callers pin the read
361
- * to that block number (via the `blockNumber` arg on {@link getChannel} /
362
- * {@link getChannelState}) so a node that has imported the block returns
363
- * authoritative state; replicas that have not yet imported it throw (e.g.
364
- * "header not found"), so we retry with a short backoff until one catches up.
365
- *
366
- * This closes the read-after-write race behind
367
- * `on-chain channel state does not match open receipt` — without it, a stale
368
- * `latest` read on a lagging replica returns an empty channel and fails
369
- * verification even though the open transaction succeeded.
370
- */
371
- export async function readbackWithRetry<T>(
372
- read: () => Promise<T>,
373
- options: ReadbackRetryOptions = {},
374
- ): Promise<T> {
375
- const { retries = 5, delayMs = 250 } = options
376
- let lastError: unknown
377
- for (let attempt = 0; attempt <= retries; attempt++) {
378
- try {
379
- return await read()
380
- } catch (error) {
381
- lastError = error
382
- if (attempt < retries) await new Promise((resolve) => setTimeout(resolve, delayMs))
383
- }
384
- }
385
- throw lastError
386
- }
387
-
388
- /** Options accepted by low-level TIP-1034 on-chain management helpers. */
389
- export type ChannelTransactionOptions = {
390
- /** Account used to send the transaction when the viem client has no default account. */
391
- account?: Account | undefined
392
- /** Candidate fee tokens used when resolving a fee token for fee-sponsored transactions. */
393
- candidateFeeTokens?: readonly Address[] | undefined
394
- /** Fee-payer account used to co-sign Tempo fee-sponsored transactions. */
395
- feePayer?: Account | undefined
396
- /** Optional fee-payer gas and total-fee limits enforced before co-signing. */
397
- feePayerPolicy?: Partial<FeePayer.Policy> | undefined
398
- /** Explicit fee token for the transaction. */
399
- feeToken?: Address | undefined
400
- }
401
-
402
- type ParsedPrecompileCredentialTransaction = {
403
- call: Transaction.TransactionTempo['calls'][number] & { data: Hex; to: Address }
404
- prefixCalls: readonly Transaction.TransactionTempo['calls'][number][]
405
- transaction: ReturnType<(typeof Transaction)['deserialize']>
406
- }
407
-
408
- function parsePrecompileCredentialTransaction(parameters: {
409
- escrowContract: Address
410
- feePayer?: Account | true | undefined
411
- label: 'open' | 'topUp'
412
- serializedTransaction: Hex
413
- }): ParsedPrecompileCredentialTransaction {
414
- const { escrowContract, feePayer, label, serializedTransaction } = parameters
415
- if (feePayer && !FeePayer.isTempoTransaction(serializedTransaction))
416
- throw new BadRequestError({ reason: 'Only Tempo (0x76/0x78) transactions are supported' })
417
-
418
- const transaction = Transaction.deserialize(
419
- serializedTransaction as Transaction.TransactionSerializedTempo,
420
- )
421
- const calls = transaction.calls
422
- if (calls.length !== 1 && calls.length !== 3)
423
- throw new VerificationFailedError({
424
- reason: `TIP-1034 ${label} transaction must contain one management call, optionally preceded by an auto-swap`,
425
- })
426
- const call = calls[calls.length - 1]!
427
- if (!call.to || !isAddressEqual(call.to, escrowContract))
428
- throw new VerificationFailedError({
429
- reason: `TIP-1034 ${label} transaction targets the wrong address`,
430
- })
431
- if (!call.data)
432
- throw new VerificationFailedError({
433
- reason: `TIP-1034 ${label} transaction is missing calldata`,
434
- })
435
- return {
436
- transaction,
437
- call: { ...call, data: call.data, to: call.to },
438
- prefixCalls: calls.slice(0, -1),
439
- }
440
- }
441
-
442
- function validateAutoSwapPrefix(parameters: {
443
- amountOut: bigint
444
- currency: Address
445
- label: 'open' | 'topUp'
446
- prefixCalls: readonly Transaction.TransactionTempo['calls'][number][]
447
- }) {
448
- const { amountOut, currency, label, prefixCalls } = parameters
449
- if (prefixCalls.length === 0) return
450
-
451
- const fail = (reason: string): never => {
452
- throw new VerificationFailedError({ reason: `TIP-1034 ${label} auto-swap ${reason}` })
453
- }
454
- if (prefixCalls.length !== 2) fail('must contain exactly approve and swap calls')
455
-
456
- const approveCall = prefixCalls[0]!
457
- const swapCall = prefixCalls[1]!
458
- const approveTo = approveCall.to
459
- const approveData = approveCall.data
460
- const swapTo = swapCall.to
461
- const swapData = swapCall.data
462
- if (!approveTo || !approveData || !swapTo || !swapData)
463
- fail('call is missing a target or calldata')
464
- const checkedApproveTo = approveTo as Address
465
- const checkedApproveData = approveData as Hex
466
- const checkedSwapTo = swapTo as Address
467
- const checkedSwapData = swapData as Hex
468
- if ((approveCall.value ?? 0n) !== 0n || (swapCall.value ?? 0n) !== 0n)
469
- fail('calls must not transfer native value')
470
- if (!isAddressEqual(checkedSwapTo, Addresses.stablecoinDex)) fail('targets the wrong DEX')
471
-
472
- const approve = (() => {
473
- try {
474
- return decodeFunctionData({ abi: Abis.tip20, data: checkedApproveData })
475
- } catch {
476
- return fail('approval calldata is invalid')
477
- }
478
- })()
479
- const swap = (() => {
480
- try {
481
- return decodeFunctionData({ abi: Abis.stablecoinDex, data: checkedSwapData })
482
- } catch {
483
- return fail('swap calldata is invalid')
484
- }
485
- })()
486
- if (approve.functionName !== 'approve' || swap.functionName !== 'swapExactAmountOut')
487
- fail('must contain approve followed by swapExactAmountOut')
488
-
489
- const [spender, approvedAmount] = approve.args as readonly [Address, bigint]
490
- const [tokenIn, tokenOut, swapAmountOut, maxAmountIn] = swap.args as readonly [
491
- Address,
492
- Address,
493
- bigint,
494
- bigint,
495
- ]
496
- if (!isAddressEqual(checkedApproveTo, tokenIn)) fail('approval token does not match swap input')
497
- if (!isAddressEqual(spender, Addresses.stablecoinDex)) fail('approval spender is not the DEX')
498
- if (approvedAmount !== maxAmountIn) fail('approval amount does not match swap maximum input')
499
- if (!isAddressEqual(tokenOut, currency)) fail('output token does not match channel currency')
500
- if (swapAmountOut !== amountOut) fail('output amount does not match channel deposit')
501
- if (isAddressEqual(tokenIn, tokenOut)) fail('input and output tokens must differ')
502
-
503
- const canonicalApprove = encodeFunctionData({
504
- abi: Abis.tip20,
505
- functionName: 'approve',
506
- args: [spender, approvedAmount],
507
- })
508
- const canonicalSwap = encodeFunctionData({
509
- abi: Abis.stablecoinDex,
510
- functionName: 'swapExactAmountOut',
511
- args: [tokenIn, tokenOut, swapAmountOut, maxAmountIn],
512
- })
513
- if (checkedApproveData.toLowerCase() !== canonicalApprove.toLowerCase())
514
- fail('approval calldata is not canonical')
515
- if (checkedSwapData.toLowerCase() !== canonicalSwap.toLowerCase())
516
- fail('swap calldata is not canonical')
517
- }
518
-
519
- async function simulateTempoTransaction(client: Client, request: unknown) {
520
- // viem's public `call` type does not yet model Tempo's multi-call and
521
- // fee-payer fields together. Keep that compatibility cast in one place.
522
- await call(client, request as never)
523
- }
524
-
525
- /** Simulates an unsponsored client-signed session transaction without broadcasting it. */
526
- export async function simulateCredentialTransaction(parameters: {
527
- /** viem client used for the read-only execution simulation. */
528
- client: TransactionClient
529
- /** Fee-payer configuration for the eventual broadcast. Sponsored transactions are simulated after completion. */
530
- feePayer?: Account | true | undefined
531
- /** Parsed client-signed Tempo transaction. */
532
- transaction: ReturnType<(typeof Transaction)['deserialize']>
533
- }): Promise<void> {
534
- if (parameters.feePayer) return
535
- await simulateTempoTransaction(
536
- parameters.client,
537
- FeePayer.simulationTransaction(parameters.transaction, { feePayer: false }),
538
- )
539
- }
540
-
541
- function validateCredentialSponsorship(parameters: {
542
- allowedFeeTokens: readonly Address[]
543
- challengeExpires?: string | undefined
544
- chainId: number
545
- details: Record<string, string>
546
- feePayer?: Account | true | undefined
547
- feePayerPolicy?: Partial<FeePayer.Policy> | undefined
548
- transaction: ReturnType<(typeof Transaction)['deserialize']>
549
- }) {
550
- const {
551
- allowedFeeTokens,
552
- challengeExpires,
553
- chainId,
554
- details,
555
- feePayer,
556
- feePayerPolicy,
557
- transaction,
558
- } = parameters
559
- if (!feePayer || feePayer === true) return
560
- FeePayer.prepareSponsoredTransaction({
561
- account: feePayer,
562
- allowedFeeTokens,
563
- challengeExpires,
564
- chainId,
565
- details,
566
- policy: feePayerPolicy,
567
- transaction: {
568
- ...transaction,
569
- ...(allowedFeeTokens[0] ? { feeToken: transaction.feeToken ?? allowedFeeTokens[0] } : {}),
570
- },
571
- })
572
- }
573
-
574
- async function signTempoTransaction(client: Client, transaction: unknown): Promise<Hex> {
575
- return (await signTransaction(client, transaction as never)) as Hex
576
- }
577
-
578
- async function prepareFeePayerCallTransaction(
579
- client: Client,
580
- parameters: {
581
- account: Account
582
- data: Hex
583
- feeToken?: Address | undefined
584
- to: Address
585
- },
586
- ) {
587
- const { account, data, feeToken, to } = parameters
588
- // viem's stable request type does not expose Tempo fee-payer transaction
589
- // fields for this call shape. Keep the cast at the boundary.
590
- return prepareTransactionRequest(client, {
591
- account,
592
- calls: [{ to, data }],
593
- feePayer: true,
594
- ...(feeToken ? { feeToken } : {}),
595
- } as never)
596
- }
597
-
598
- function sendPrecompileContractCall(
599
- client: Client,
600
- parameters: {
601
- account?: Account | undefined
602
- data: Hex
603
- feeToken?: Address | undefined
604
- to: Address
605
- },
606
- ): Promise<Hex> {
607
- const { account, data, feeToken, to } = parameters
608
- // `feeToken` is Tempo-specific and not represented on viem's base
609
- // transaction request type.
610
- return sendViemTransaction(client, {
611
- ...(account ? { account } : {}),
612
- to,
613
- data,
614
- ...(feeToken ? { feeToken } : {}),
615
- } as never)
616
- }
617
-
618
- /**
619
- * Submit a settle transaction on-chain.
620
- */
621
- export async function settleOnChain(
622
- client: Client,
623
- descriptor: ChannelDescriptor,
624
- cumulativeAmount: bigint,
625
- signature: Hex,
626
- escrow: Address = tip20ChannelEscrow,
627
- options?: ChannelTransactionOptions,
628
- ): Promise<Hex> {
629
- assertUint96(cumulativeAmount)
630
- const args = [descriptorTuple(descriptor), cumulativeAmount, signature] as const
631
- return sendPrecompileTransaction(
632
- client,
633
- escrow,
634
- encodeFunctionData({ abi: escrowAbi, functionName: 'settle', args }),
635
- 'settle',
636
- options,
637
- )
638
- }
639
-
640
- /**
641
- * Submit a top-up transaction on-chain.
642
- */
643
- export async function topUpOnChain(
644
- client: Client,
645
- descriptor: ChannelDescriptor,
646
- additionalDeposit: bigint,
647
- escrow: Address = tip20ChannelEscrow,
648
- options?: ChannelTransactionOptions,
649
- ): Promise<Hex> {
650
- assertUint96(additionalDeposit)
651
- const args = [descriptorTuple(descriptor), additionalDeposit] as const
652
- return sendPrecompileTransaction(
653
- client,
654
- escrow,
655
- encodeFunctionData({ abi: escrowAbi, functionName: 'topUp', args }),
656
- 'topUp',
657
- options,
658
- )
659
- }
660
-
661
- /**
662
- * Submit a request-close transaction on-chain.
663
- */
664
- export async function requestCloseOnChain(
665
- client: Client,
666
- descriptor: ChannelDescriptor,
667
- escrow: Address = tip20ChannelEscrow,
668
- options?: ChannelTransactionOptions,
669
- ): Promise<Hex> {
670
- const args = [descriptorTuple(descriptor)] as const
671
- return sendPrecompileTransaction(
672
- client,
673
- escrow,
674
- encodeFunctionData({ abi: escrowAbi, functionName: 'requestClose', args }),
675
- 'requestClose',
676
- options,
677
- )
678
- }
679
-
680
- /**
681
- * Submit a withdraw transaction on-chain.
682
- */
683
- export async function withdrawOnChain(
684
- client: Client,
685
- descriptor: ChannelDescriptor,
686
- escrow: Address = tip20ChannelEscrow,
687
- options?: ChannelTransactionOptions,
688
- ): Promise<Hex> {
689
- const args = [descriptorTuple(descriptor)] as const
690
- return sendPrecompileTransaction(
691
- client,
692
- escrow,
693
- encodeFunctionData({ abi: escrowAbi, functionName: 'withdraw', args }),
694
- 'withdraw',
695
- options,
696
- )
697
- }
698
-
699
- /**
700
- * Submit a close transaction on-chain.
701
- */
702
- export async function closeOnChain(
703
- client: Client,
704
- descriptor: ChannelDescriptor,
705
- cumulativeAmount: bigint,
706
- captureAmount: bigint,
707
- signature: Hex,
708
- escrow: Address = tip20ChannelEscrow,
709
- options?: ChannelTransactionOptions,
710
- ): Promise<Hex> {
711
- assertUint96(cumulativeAmount)
712
- assertUint96(captureAmount)
713
- const args = [descriptorTuple(descriptor), cumulativeAmount, captureAmount, signature] as const
714
- return sendPrecompileTransaction(
715
- client,
716
- escrow,
717
- encodeFunctionData({ abi: escrowAbi, functionName: 'close', args }),
718
- 'close',
719
- options,
720
- )
721
- }
722
-
723
- /** Receipt event shape emitted by TIP20EscrowChannel precompile management calls. */
724
- export type ChannelReceiptEvent = {
725
- args: {
726
- channelId: Hex
727
- expiringNonceHash?: Hex | undefined
728
- deposit?: bigint | undefined
729
- newDeposit?: bigint | undefined
730
- newSettled?: bigint | undefined
731
- settledToPayee?: bigint | undefined
732
- refundedToPayer?: bigint | undefined
733
- }
734
- }
735
-
736
- /** Receipt-like input used when extracting channel events from transaction logs. */
737
- export type ChannelEventReceipt = {
738
- logs: Parameters<typeof parseEventLogs>[0]['logs']
739
- }
740
-
741
- /**
742
- * Asserts that a deserialized transaction has an existing sender signature.
743
- */
744
- export function assertSenderSigned(
745
- transaction: ReturnType<(typeof Transaction)['deserialize']>,
746
- ): void {
747
- if (!transaction.signature || !transaction.from)
748
- throw new BadRequestError({
749
- reason: 'Transaction must be signed by the sender before fee payer co-signing',
750
- })
751
- }
752
-
753
- /** Broadcast a raw serialized transaction. */
754
- export async function sendTransaction(client: TransactionClient, transaction: Hex) {
755
- return sendRawTransaction(client, { serializedTransaction: transaction })
756
- }
757
-
758
- /** Wait for a receipt and reject reverted precompile transactions. */
759
- export async function waitForSuccessfulReceipt(client: TransactionClient, hash: Hex) {
760
- const receipt = await waitForTransactionReceipt(client, { hash, checkReplacement: false })
761
- if (receipt.status !== 'success')
762
- throw new VerificationFailedError({ reason: 'precompile transaction reverted' })
763
- return receipt
764
- }
765
-
766
- /** Extract exactly one channel event for a channel ID from a receipt. */
767
- export function getChannelEvent(
768
- receipt: ChannelEventReceipt,
769
- name: 'ChannelOpened' | 'TopUp' | 'Settled' | 'ChannelClosed',
770
- channelId: Hex,
771
- ): ChannelReceiptEvent {
772
- const logs = parseEventLogs({
773
- abi: escrowAbi,
774
- eventName: name,
775
- logs: receipt.logs,
776
- }) as ChannelReceiptEvent[]
777
- const matches = logs.filter((log) => log.args.channelId.toLowerCase() === channelId.toLowerCase())
778
- if (matches.length !== 1)
779
- throw new VerificationFailedError({
780
- reason: `expected one ${name} event for credential channelId in receipt`,
781
- })
782
- return matches[0]!
783
- }
784
-
785
- /** Inputs for broadcasting a client-signed precompile management transaction. */
786
- export type SendCredentialTransactionParameters = {
787
- /** Challenge expiration propagated into fee-payer policy checks. */
788
- challengeExpires?: string | undefined
789
- /** Chain ID used for fee-payer transaction signing. */
790
- chainId: number
791
- /** viem client used to submit the transaction. */
792
- client: TransactionClient
793
- /** Fee tokens allowed by the server for sponsored transactions. */
794
- allowedFeeTokens?: readonly Address[] | undefined
795
- /** Human-readable transaction details used by fee-payer policy hooks. */
796
- details: Record<string, string>
797
- /** Fee-payer account, or `true` when the client transport delegates co-signing to a hosted relay. */
798
- feePayer?: Account | true | undefined
799
- /** Optional fee-payer policy enforced before co-signing. */
800
- feePayerPolicy?: Partial<FeePayer.Policy> | undefined
801
- /** Management transaction kind, used for validation errors. */
802
- label: 'open' | 'topUp'
803
- /** Client-signed serialized transaction. */
804
- serializedTransaction: Hex
805
- /** Deserialized transaction corresponding to `serializedTransaction`. */
806
- transaction: ReturnType<(typeof Transaction)['deserialize']>
807
- }
808
-
809
- /** Broadcasts a client-signed management transaction, adding a fee-payer co-signature when requested. */
810
- export async function sendCredentialTransaction(parameters: SendCredentialTransactionParameters) {
811
- const {
812
- challengeExpires,
813
- chainId,
814
- client,
815
- allowedFeeTokens,
816
- details,
817
- feePayer,
818
- feePayerPolicy,
819
- label,
820
- serializedTransaction,
821
- transaction,
822
- } = parameters
823
-
824
- if (!feePayer) {
825
- const txHash = await sendTransaction(client, serializedTransaction)
826
- return waitForSuccessfulReceipt(client, txHash)
827
- }
828
-
829
- if (!FeePayer.isTempoTransaction(serializedTransaction))
830
- throw new BadRequestError({ reason: 'Only Tempo (0x76/0x78) transactions are supported' })
831
- assertSenderSigned(transaction)
832
-
833
- if (feePayer === true) {
834
- // The transport owns hosted completion, so mppx can only preflight call
835
- // execution as the sender. It intentionally omits fee fields here; the
836
- // transport is responsible for validating its final sponsored envelope.
837
- await simulateTempoTransaction(
838
- client,
839
- FeePayer.simulationTransaction(transaction, { feePayer: true }),
840
- )
841
- const txHash = await sendTransaction(client, serializedTransaction)
842
- return waitForSuccessfulReceipt(client, txHash)
843
- }
844
-
845
- const sponsorshipTransaction = {
846
- ...transaction,
847
- ...(allowedFeeTokens?.[0] ? { feeToken: transaction.feeToken ?? allowedFeeTokens[0] } : {}),
848
- }
849
- const completed = await FeePayer.preflightSponsorship({
850
- transaction: sponsorshipTransaction,
851
- simulate: (request) => simulateTempoTransaction(client, request),
852
- async complete() {
853
- const sponsored = FeePayer.prepareSponsoredTransaction({
854
- account: feePayer,
855
- allowedFeeTokens,
856
- challengeExpires,
857
- chainId,
858
- details,
859
- policy: feePayerPolicy,
860
- transaction: sponsorshipTransaction,
861
- })
862
- return { feePayer: feePayer.address, transaction: sponsored }
863
- },
864
- })
865
- const serialized = await signTempoTransaction(client, completed.transaction)
866
- const receipt = await sendRawTransactionSync(client, {
867
- serializedTransaction: serialized as Transaction.TransactionSerializedTempo,
868
- })
869
- if (receipt.status !== 'success')
870
- throw new VerificationFailedError({
871
- reason: `${label} precompile transaction reverted: ${receipt.transactionHash}`,
872
- })
873
- return receipt
874
- }
875
-
876
- /** Result returned after a TIP-1034 open transaction is broadcast and verified. */
877
- export type BroadcastOpenTransactionResult = {
878
- /** Broadcast transaction hash. */
879
- txHash: Hex
880
- /** Descriptor recovered from the verified open transaction. */
881
- descriptor: ChannelDescriptor
882
- /** Latest on-chain channel state after open. */
883
- state: ChannelState
884
- /** Expiring nonce hash emitted by the open receipt. */
885
- expiringNonceHash: Hex
886
- /** Deposit amount encoded in the open calldata. */
887
- openDeposit: bigint
888
- }
889
-
890
- /** Inputs for broadcasting and verifying a client-signed TIP-1034 open transaction. */
891
- export type BroadcastOpenTransactionParameters = {
892
- /** Hook invoked after calldata validation but before broadcasting. */
893
- beforeBroadcast?:
894
- | ((result: Omit<BroadcastOpenTransactionResult, 'txHash' | 'state'>) => Promise<void> | void)
895
- | undefined
896
- /** Challenge expiration propagated into fee-payer policy checks. */
897
- challengeExpires?: string | undefined
898
- /** Chain ID used for channel ID and voucher domain separation. */
899
- chainId: number
900
- /** viem client used for transaction submission and readback. */
901
- client: TransactionClient
902
- /** TIP20EscrowChannel precompile address. */
903
- escrowContract: Address
904
- /** Authorized voucher signer expected in the open calldata. */
905
- expectedAuthorizedSigner: Address
906
- /** Channel ID expected from descriptor, escrow, and chain ID. */
907
- expectedChannelId: Hex
908
- /** Payment token expected in the open calldata. */
909
- expectedCurrency: Address
910
- /** Transaction-bound nonce hash expected in the descriptor. */
911
- expectedExpiringNonceHash: Hex
912
- /** Payee-side operator expected in the open calldata. */
913
- expectedOperator: Address
914
- /** Payment recipient expected in the open calldata. */
915
- expectedPayee: Address
916
- /** Payer expected to have signed the open transaction. */
917
- expectedPayer: Address
918
- /** Fee-payer account, or `true` when the client transport delegates co-signing to a hosted relay. */
919
- feePayer?: Account | true | undefined
920
- /** Optional fee-payer policy enforced before co-signing. */
921
- feePayerPolicy?: Partial<FeePayer.Policy> | undefined
922
- /** Client-signed serialized open transaction. */
923
- serializedTransaction: Hex
924
- }
925
-
926
- /** Inputs for validating a client-signed TIP-1034 open transaction without broadcasting it. */
927
- export type ValidateOpenCredentialTransactionParameters = Omit<
928
- BroadcastOpenTransactionParameters,
929
- 'beforeBroadcast' | 'client'
930
- >
931
-
932
- /** Validated fields recovered from a client-signed TIP-1034 open transaction. */
933
- export type ValidatedOpenCredentialTransaction = Omit<
934
- BroadcastOpenTransactionResult,
935
- 'state' | 'txHash'
936
- > & {
937
- /** Parsed client-signed transaction, reused by simulation and broadcast. */
938
- transaction: ReturnType<(typeof Transaction)['deserialize']>
939
- }
940
-
941
- /** Validates the immutable fields of a client-signed TIP-1034 open transaction. */
942
- export function validateOpenCredentialTransaction(
943
- parameters: ValidateOpenCredentialTransactionParameters,
944
- ): ValidatedOpenCredentialTransaction {
945
- const { transaction, call, prefixCalls } = parsePrecompileCredentialTransaction({
946
- escrowContract: parameters.escrowContract,
947
- feePayer: parameters.feePayer,
948
- label: 'open',
949
- serializedTransaction: parameters.serializedTransaction,
950
- })
951
- const payer = transaction.from ?? parameters.expectedPayer
952
- const open = ChannelOps.parseOpenCall({
953
- data: call.data,
954
- expected: {
955
- payee: parameters.expectedPayee,
956
- token: parameters.expectedCurrency,
957
- operator: parameters.expectedOperator,
958
- authorizedSigner: parameters.expectedAuthorizedSigner,
959
- },
960
- })
961
- validateAutoSwapPrefix({
962
- amountOut: open.deposit,
963
- currency: parameters.expectedCurrency,
964
- label: 'open',
965
- prefixCalls,
966
- })
967
- const descriptor = ChannelOps.descriptorFromOpen({
968
- chainId: parameters.chainId,
969
- escrow: parameters.escrowContract,
970
- payer,
971
- open,
972
- expiringNonceHash: parameters.expectedExpiringNonceHash,
973
- channelId: parameters.expectedChannelId,
974
- })
975
- if (parameters.feePayer) assertSenderSigned(transaction)
976
- validateCredentialSponsorship({
977
- allowedFeeTokens: [parameters.expectedCurrency],
978
- challengeExpires: parameters.challengeExpires,
979
- chainId: parameters.chainId,
980
- details: {
981
- channelId: parameters.expectedChannelId,
982
- currency: parameters.expectedCurrency,
983
- recipient: parameters.expectedPayee,
984
- },
985
- feePayer: parameters.feePayer,
986
- feePayerPolicy: parameters.feePayerPolicy,
987
- transaction,
988
- })
989
- const expiringNonceHash = ChannelUtils.computeExpiringNonceHash(
990
- ChannelUtils.transactionForExpiringNonceHash({
991
- feePayer: parameters.feePayer,
992
- transaction,
993
- }),
994
- { sender: payer },
995
- )
996
- if (expiringNonceHash.toLowerCase() !== descriptor.expiringNonceHash.toLowerCase())
997
- throw new VerificationFailedError({
998
- reason: 'credential expiringNonceHash does not match transaction',
999
- })
1000
- return { descriptor, expiringNonceHash, openDeposit: open.deposit, transaction }
1001
- }
1002
-
1003
- /** Broadcast and validate a client-signed TIP-1034 open transaction. */
1004
- export async function broadcastOpenTransaction(
1005
- parameters: BroadcastOpenTransactionParameters,
1006
- ): Promise<BroadcastOpenTransactionResult> {
1007
- const { descriptor, expiringNonceHash, openDeposit, transaction } =
1008
- validateOpenCredentialTransaction(parameters)
1009
- await parameters.beforeBroadcast?.({
1010
- descriptor,
1011
- expiringNonceHash,
1012
- openDeposit,
1013
- })
1014
- const receipt = await sendCredentialTransaction({
1015
- challengeExpires: parameters.challengeExpires,
1016
- chainId: parameters.chainId,
1017
- client: parameters.client,
1018
- allowedFeeTokens: [parameters.expectedCurrency],
1019
- details: {
1020
- channelId: parameters.expectedChannelId,
1021
- currency: parameters.expectedCurrency,
1022
- recipient: parameters.expectedPayee,
1023
- },
1024
- feePayer: parameters.feePayer,
1025
- feePayerPolicy: parameters.feePayerPolicy,
1026
- label: 'open',
1027
- serializedTransaction: parameters.serializedTransaction,
1028
- transaction,
1029
- })
1030
- const opened = readChannelOpenedReceiptFields(
1031
- getChannelEvent(receipt, 'ChannelOpened', parameters.expectedChannelId),
1032
- )
1033
- validateChannelOpenedReceipt({
1034
- chainId: parameters.chainId,
1035
- descriptor,
1036
- emittedChannelId: opened.channelId,
1037
- emittedDeposit: opened.deposit,
1038
- emittedExpiringNonceHash: opened.expiringNonceHash,
1039
- escrow: parameters.escrowContract,
1040
- expectedChannelId: parameters.expectedChannelId,
1041
- openDeposit,
1042
- })
1043
- const chainChannel = await readbackWithRetry(() =>
1044
- getChannel(parameters.client, descriptor, parameters.escrowContract, receipt.blockNumber),
1045
- )
1046
- const state = chainChannel.state
1047
- validateOpenReadbackState({ emittedDeposit: opened.deposit, state })
1048
- return {
1049
- txHash: receipt.transactionHash,
1050
- descriptor,
1051
- state,
1052
- expiringNonceHash: opened.expiringNonceHash,
1053
- openDeposit,
1054
- }
1055
- }
1056
-
1057
- /** Result returned after a TIP-1034 top-up transaction is broadcast and verified. */
1058
- export type BroadcastTopUpTransactionResult = {
1059
- /** Broadcast transaction hash. */
1060
- txHash: Hex
1061
- /** New on-chain deposit emitted by the top-up receipt. */
1062
- newDeposit: bigint
1063
- /** Latest on-chain channel state after top-up. */
1064
- state: ChannelState
1065
- }
1066
-
1067
- /** Inputs for broadcasting and verifying a client-signed TIP-1034 top-up transaction. */
1068
- export type BroadcastTopUpTransactionParameters = {
1069
- /** Additional deposit amount expected in the top-up calldata. */
1070
- additionalDeposit: bigint
1071
- /** Challenge expiration propagated into fee-payer policy checks. */
1072
- challengeExpires?: string | undefined
1073
- /** Chain ID used for fee-payer transaction signing. */
1074
- chainId: number
1075
- /** viem client used for transaction submission and readback. */
1076
- client: TransactionClient
1077
- /** Descriptor expected in the top-up calldata. */
1078
- descriptor: ChannelDescriptor
1079
- /** TIP20EscrowChannel precompile address. */
1080
- escrowContract: Address
1081
- /** Channel ID expected in the top-up receipt. */
1082
- expectedChannelId: Hex
1083
- /** Payment token expected for sponsored transaction fee token checks. */
1084
- expectedCurrency: Address
1085
- /** Fee-payer account, or `true` when the client transport delegates co-signing to a hosted relay. */
1086
- feePayer?: Account | true | undefined
1087
- /** Optional fee-payer policy enforced before co-signing. */
1088
- feePayerPolicy?: Partial<FeePayer.Policy> | undefined
1089
- /** Client-signed serialized top-up transaction. */
1090
- serializedTransaction: Hex
1091
- }
1092
-
1093
- /** Inputs for validating a client-signed TIP-1034 top-up transaction without broadcasting it. */
1094
- export type ValidateTopUpCredentialTransactionParameters = Omit<
1095
- BroadcastTopUpTransactionParameters,
1096
- 'client'
1097
- >
1098
-
1099
- /** Validated fields recovered from a client-signed TIP-1034 top-up transaction. */
1100
- export type ValidatedTopUpCredentialTransaction = {
1101
- /** Parsed client-signed transaction, reused by simulation and broadcast. */
1102
- transaction: ReturnType<(typeof Transaction)['deserialize']>
1103
- }
1104
-
1105
- /** Validates the immutable fields of a client-signed TIP-1034 top-up transaction. */
1106
- export function validateTopUpCredentialTransaction(
1107
- parameters: ValidateTopUpCredentialTransactionParameters,
1108
- ): ValidatedTopUpCredentialTransaction {
1109
- const { transaction, call, prefixCalls } = parsePrecompileCredentialTransaction({
1110
- escrowContract: parameters.escrowContract,
1111
- feePayer: parameters.feePayer,
1112
- label: 'topUp',
1113
- serializedTransaction: parameters.serializedTransaction,
1114
- })
1115
- ChannelOps.parseTopUpCall({
1116
- data: call.data,
1117
- expected: {
1118
- descriptor: parameters.descriptor,
1119
- additionalDeposit: parameters.additionalDeposit,
1120
- },
1121
- })
1122
- validateAutoSwapPrefix({
1123
- amountOut: parameters.additionalDeposit,
1124
- currency: parameters.expectedCurrency,
1125
- label: 'topUp',
1126
- prefixCalls,
1127
- })
1128
- if (parameters.feePayer) assertSenderSigned(transaction)
1129
- validateCredentialSponsorship({
1130
- allowedFeeTokens: [parameters.expectedCurrency],
1131
- challengeExpires: parameters.challengeExpires,
1132
- chainId: parameters.chainId,
1133
- details: {
1134
- additionalDeposit: parameters.additionalDeposit.toString(),
1135
- channelId: parameters.expectedChannelId,
1136
- currency: parameters.expectedCurrency,
1137
- },
1138
- feePayer: parameters.feePayer,
1139
- feePayerPolicy: parameters.feePayerPolicy,
1140
- transaction,
1141
- })
1142
- return { transaction }
1143
- }
1144
-
1145
- /** Broadcast and validate a client-signed TIP-1034 top-up transaction. */
1146
- export async function broadcastTopUpTransaction(
1147
- parameters: BroadcastTopUpTransactionParameters,
1148
- ): Promise<BroadcastTopUpTransactionResult> {
1149
- const { transaction } = validateTopUpCredentialTransaction(parameters)
1150
- const receipt = await sendCredentialTransaction({
1151
- challengeExpires: parameters.challengeExpires,
1152
- chainId: parameters.chainId,
1153
- client: parameters.client,
1154
- allowedFeeTokens: [parameters.expectedCurrency],
1155
- details: {
1156
- additionalDeposit: parameters.additionalDeposit.toString(),
1157
- channelId: parameters.expectedChannelId,
1158
- currency: parameters.expectedCurrency,
1159
- },
1160
- feePayer: parameters.feePayer,
1161
- feePayerPolicy: parameters.feePayerPolicy,
1162
- label: 'topUp',
1163
- serializedTransaction: parameters.serializedTransaction,
1164
- transaction,
1165
- })
1166
- const toppedUp = readTopUpReceiptFields(
1167
- getChannelEvent(receipt, 'TopUp', parameters.expectedChannelId),
1168
- )
1169
- validateTopUpReceipt({
1170
- emittedChannelId: toppedUp.channelId,
1171
- expectedChannelId: parameters.expectedChannelId,
1172
- })
1173
- const state = await readbackWithRetry(() =>
1174
- getChannelState(
1175
- parameters.client,
1176
- toppedUp.channelId,
1177
- parameters.escrowContract,
1178
- receipt.blockNumber,
1179
- ),
1180
- )
1181
- validateTopUpReadbackState({ newDeposit: toppedUp.newDeposit, state })
1182
- return { txHash: receipt.transactionHash, newDeposit: toppedUp.newDeposit, state }
1183
- }
1184
-
1185
- function stateFromTuple(state: {
1186
- settled: bigint
1187
- deposit: bigint
1188
- closeRequestedAt: number
1189
- }): ChannelState {
1190
- assertUint96(state.settled)
1191
- assertUint96(state.deposit)
1192
- return {
1193
- settled: state.settled,
1194
- deposit: state.deposit,
1195
- closeRequestedAt: state.closeRequestedAt,
1196
- }
1197
- }
1198
-
1199
- function descriptorTuple(descriptor: ChannelDescriptor) {
1200
- return {
1201
- payer: descriptor.payer,
1202
- payee: descriptor.payee,
1203
- operator: descriptor.operator,
1204
- token: descriptor.token,
1205
- salt: descriptor.salt,
1206
- authorizedSigner: descriptor.authorizedSigner,
1207
- expiringNonceHash: descriptor.expiringNonceHash,
1208
- } as const
1209
- }
1210
-
1211
- async function sendPrecompileTransaction(
1212
- client: Client,
1213
- to: Address,
1214
- data: Hex,
1215
- label: string,
1216
- options?: ChannelTransactionOptions,
1217
- ): Promise<Hex> {
1218
- const account = options?.account ?? client.account
1219
- const selfSponsored =
1220
- account && options?.feePayer && isAddressEqual(account.address, options.feePayer.address)
1221
-
1222
- if (options?.feePayer && !selfSponsored) {
1223
- if (!account) throw new Error(`Cannot ${label} precompile channel: no account available.`)
1224
- const feeToken =
1225
- options.feeToken ??
1226
- (await resolveFeeToken({
1227
- account: options.feePayer.address,
1228
- candidateTokens: options.candidateFeeTokens,
1229
- client,
1230
- }))
1231
- const prepared = await prepareFeePayerCallTransaction(client, {
1232
- account,
1233
- data,
1234
- feeToken,
1235
- to,
1236
- })
1237
- assertPrecompileFeePayerPolicy({ prepared, policy: options.feePayerPolicy })
1238
- const serialized = await signTempoTransaction(client, {
1239
- ...prepared,
1240
- account,
1241
- feePayer: options.feePayer,
1242
- })
1243
- const receipt = await sendRawTransactionSync(client, {
1244
- serializedTransaction: serialized as Transaction.TransactionSerializedTempo,
1245
- })
1246
- if (receipt.status !== 'success')
1247
- throw new VerificationFailedError({
1248
- reason: `${label} precompile transaction reverted: ${receipt.transactionHash}`,
1249
- })
1250
- return receipt.transactionHash
1251
- }
1252
-
1253
- const feeToken =
1254
- options?.feeToken ??
1255
- (selfSponsored
1256
- ? await resolveFeeToken({
1257
- account: account.address,
1258
- candidateTokens: options?.candidateFeeTokens,
1259
- client,
1260
- })
1261
- : undefined)
1262
-
1263
- return sendPrecompileContractCall(client, {
1264
- account,
1265
- to,
1266
- data,
1267
- feeToken,
1268
- })
1269
- }