mppx 0.6.31 → 0.8.0

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 (616) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +20 -11
  3. package/dist/Challenge.d.ts.map +1 -1
  4. package/dist/Challenge.js +27 -13
  5. package/dist/Challenge.js.map +1 -1
  6. package/dist/Constants.d.ts +46 -0
  7. package/dist/Constants.d.ts.map +1 -0
  8. package/dist/Constants.js +46 -0
  9. package/dist/Constants.js.map +1 -0
  10. package/dist/Credential.d.ts.map +1 -1
  11. package/dist/Credential.js +5 -4
  12. package/dist/Credential.js.map +1 -1
  13. package/dist/Mcp.d.ts +3 -0
  14. package/dist/Mcp.d.ts.map +1 -1
  15. package/dist/Mcp.js +2 -0
  16. package/dist/Mcp.js.map +1 -1
  17. package/dist/Method.d.ts +32 -4
  18. package/dist/Method.d.ts.map +1 -1
  19. package/dist/Method.js +5 -2
  20. package/dist/Method.js.map +1 -1
  21. package/dist/PaymentRequest.d.ts +10 -10
  22. package/dist/PaymentRequest.js +8 -8
  23. package/dist/Receipt.d.ts.map +1 -1
  24. package/dist/Receipt.js +3 -2
  25. package/dist/Receipt.js.map +1 -1
  26. package/dist/cli/cli.d.ts.map +1 -1
  27. package/dist/cli/cli.js +19 -11
  28. package/dist/cli/cli.js.map +1 -1
  29. package/dist/cli/plugins/tempo.d.ts.map +1 -1
  30. package/dist/cli/plugins/tempo.js +17 -6
  31. package/dist/cli/plugins/tempo.js.map +1 -1
  32. package/dist/cli/utils.d.ts +5 -0
  33. package/dist/cli/utils.d.ts.map +1 -1
  34. package/dist/cli/utils.js +10 -0
  35. package/dist/cli/utils.js.map +1 -1
  36. package/dist/client/Methods.d.ts +5 -2
  37. package/dist/client/Methods.d.ts.map +1 -1
  38. package/dist/client/Methods.js +5 -2
  39. package/dist/client/Methods.js.map +1 -1
  40. package/dist/client/Mppx.js +2 -2
  41. package/dist/client/Mppx.js.map +1 -1
  42. package/dist/client/Transport.d.ts +11 -16
  43. package/dist/client/Transport.d.ts.map +1 -1
  44. package/dist/client/Transport.js +55 -76
  45. package/dist/client/Transport.js.map +1 -1
  46. package/dist/client/index.d.ts +5 -1
  47. package/dist/client/index.d.ts.map +1 -1
  48. package/dist/client/index.js +3 -1
  49. package/dist/client/index.js.map +1 -1
  50. package/dist/client/internal/Fetch.d.ts.map +1 -1
  51. package/dist/client/internal/Fetch.js +60 -13
  52. package/dist/client/internal/Fetch.js.map +1 -1
  53. package/dist/client/internal/protocols/Mcp.d.ts +7 -0
  54. package/dist/client/internal/protocols/Mcp.d.ts.map +1 -0
  55. package/dist/client/internal/protocols/Mcp.js +159 -0
  56. package/dist/client/internal/protocols/Mcp.js.map +1 -0
  57. package/dist/client/internal/protocols/Mpp.d.ts +4 -0
  58. package/dist/client/internal/protocols/Mpp.d.ts.map +1 -0
  59. package/dist/client/internal/protocols/Mpp.js +18 -0
  60. package/dist/client/internal/protocols/Mpp.js.map +1 -0
  61. package/dist/client/internal/protocols/Protocol.d.ts +10 -0
  62. package/dist/client/internal/protocols/Protocol.d.ts.map +1 -0
  63. package/dist/client/internal/protocols/Protocol.js +2 -0
  64. package/dist/client/internal/protocols/Protocol.js.map +1 -0
  65. package/dist/client/internal/protocols/Shared.d.ts +5 -0
  66. package/dist/client/internal/protocols/Shared.d.ts.map +1 -0
  67. package/dist/client/internal/protocols/Shared.js +20 -0
  68. package/dist/client/internal/protocols/Shared.js.map +1 -0
  69. package/dist/client/internal/protocols/X402.d.ts +8 -0
  70. package/dist/client/internal/protocols/X402.d.ts.map +1 -0
  71. package/dist/client/internal/protocols/X402.js +39 -0
  72. package/dist/client/internal/protocols/X402.js.map +1 -0
  73. package/dist/evm/client/index.d.ts +1 -0
  74. package/dist/evm/client/index.d.ts.map +1 -1
  75. package/dist/evm/client/index.js +1 -0
  76. package/dist/evm/client/index.js.map +1 -1
  77. package/dist/evm/index.d.ts +2 -0
  78. package/dist/evm/index.d.ts.map +1 -1
  79. package/dist/evm/index.js +2 -0
  80. package/dist/evm/index.js.map +1 -1
  81. package/dist/evm/server/Methods.d.ts +1 -1
  82. package/dist/evm/server/Methods.d.ts.map +1 -1
  83. package/dist/evm/server/index.d.ts +1 -0
  84. package/dist/evm/server/index.d.ts.map +1 -1
  85. package/dist/evm/server/index.js +1 -0
  86. package/dist/evm/server/index.js.map +1 -1
  87. package/dist/index.d.ts +1 -0
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +1 -0
  90. package/dist/index.js.map +1 -1
  91. package/dist/internal/AcceptPayment.d.ts +3 -0
  92. package/dist/internal/AcceptPayment.d.ts.map +1 -1
  93. package/dist/internal/AcceptPayment.js +15 -11
  94. package/dist/internal/AcceptPayment.js.map +1 -1
  95. package/dist/mcp/client/McpClient.d.ts +101 -0
  96. package/dist/mcp/client/McpClient.d.ts.map +1 -0
  97. package/dist/mcp/client/McpClient.js +162 -0
  98. package/dist/mcp/client/McpClient.js.map +1 -0
  99. package/dist/mcp/client/index.d.ts.map +1 -0
  100. package/dist/mcp/client/index.js.map +1 -0
  101. package/dist/mcp/server/Transport.d.ts.map +1 -0
  102. package/dist/mcp/server/Transport.js.map +1 -0
  103. package/dist/mcp/server/index.d.ts.map +1 -0
  104. package/dist/mcp/server/index.js.map +1 -0
  105. package/dist/server/Mppx.d.ts +12 -4
  106. package/dist/server/Mppx.d.ts.map +1 -1
  107. package/dist/server/Mppx.js +85 -27
  108. package/dist/server/Mppx.js.map +1 -1
  109. package/dist/server/Response.d.ts.map +1 -1
  110. package/dist/server/Response.js +2 -1
  111. package/dist/server/Response.js.map +1 -1
  112. package/dist/server/Transport.d.ts +1 -1
  113. package/dist/server/Transport.d.ts.map +1 -1
  114. package/dist/server/Transport.js +5 -4
  115. package/dist/server/Transport.js.map +1 -1
  116. package/dist/server/index.d.ts +1 -0
  117. package/dist/server/index.d.ts.map +1 -1
  118. package/dist/server/index.js +1 -0
  119. package/dist/server/index.js.map +1 -1
  120. package/dist/stripe/client/Charge.d.ts +1 -1
  121. package/dist/stripe/client/Charge.d.ts.map +1 -1
  122. package/dist/stripe/client/Charge.js +3 -1
  123. package/dist/stripe/client/Charge.js.map +1 -1
  124. package/dist/stripe/server/Charge.d.ts +1 -1
  125. package/dist/stripe/server/Charge.d.ts.map +1 -1
  126. package/dist/stripe/server/Charge.js +9 -2
  127. package/dist/stripe/server/Charge.js.map +1 -1
  128. package/dist/stripe/server/Methods.d.ts +1 -1
  129. package/dist/stripe/server/Methods.d.ts.map +1 -1
  130. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  131. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  132. package/dist/stripe/server/internal/html.gen.js +1 -1
  133. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  134. package/dist/tempo/Methods.d.ts +18 -0
  135. package/dist/tempo/Methods.d.ts.map +1 -1
  136. package/dist/tempo/Methods.js +16 -1
  137. package/dist/tempo/Methods.js.map +1 -1
  138. package/dist/tempo/Proof.d.ts +85 -1
  139. package/dist/tempo/Proof.d.ts.map +1 -1
  140. package/dist/tempo/Proof.js +35 -0
  141. package/dist/tempo/Proof.js.map +1 -1
  142. package/dist/tempo/client/Charge.d.ts +19 -1
  143. package/dist/tempo/client/Charge.d.ts.map +1 -1
  144. package/dist/tempo/client/Charge.js +47 -27
  145. package/dist/tempo/client/Charge.js.map +1 -1
  146. package/dist/tempo/client/Methods.d.ts +41 -10
  147. package/dist/tempo/client/Methods.d.ts.map +1 -1
  148. package/dist/tempo/client/Methods.js +16 -7
  149. package/dist/tempo/client/Methods.js.map +1 -1
  150. package/dist/tempo/client/ResolveAccount.d.ts +40 -0
  151. package/dist/tempo/client/ResolveAccount.d.ts.map +1 -0
  152. package/dist/tempo/client/ResolveAccount.js +2 -0
  153. package/dist/tempo/client/ResolveAccount.js.map +1 -0
  154. package/dist/tempo/client/index.d.ts +7 -4
  155. package/dist/tempo/client/index.d.ts.map +1 -1
  156. package/dist/tempo/client/index.js +5 -3
  157. package/dist/tempo/client/index.js.map +1 -1
  158. package/dist/tempo/index.d.ts +1 -0
  159. package/dist/tempo/index.d.ts.map +1 -1
  160. package/dist/tempo/index.js +1 -0
  161. package/dist/tempo/index.js.map +1 -1
  162. package/dist/tempo/internal/fee-payer.d.ts +29 -1
  163. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  164. package/dist/tempo/internal/fee-payer.js +138 -4
  165. package/dist/tempo/internal/fee-payer.js.map +1 -1
  166. package/dist/tempo/internal/proof.d.ts +71 -5
  167. package/dist/tempo/internal/proof.d.ts.map +1 -1
  168. package/dist/tempo/internal/proof.js +42 -6
  169. package/dist/tempo/internal/proof.js.map +1 -1
  170. package/dist/tempo/{client → legacy/client}/ChannelOps.d.ts +19 -6
  171. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -0
  172. package/dist/tempo/{client → legacy/client}/ChannelOps.js +9 -3
  173. package/dist/tempo/legacy/client/ChannelOps.js.map +1 -0
  174. package/dist/tempo/{client → legacy/client}/Session.d.ts +23 -4
  175. package/dist/tempo/legacy/client/Session.d.ts.map +1 -0
  176. package/dist/tempo/{client → legacy/client}/Session.js +14 -7
  177. package/dist/tempo/legacy/client/Session.js.map +1 -0
  178. package/dist/tempo/{client → legacy/client}/SessionManager.d.ts +20 -5
  179. package/dist/tempo/legacy/client/SessionManager.d.ts.map +1 -0
  180. package/dist/tempo/{client → legacy/client}/SessionManager.js +30 -19
  181. package/dist/tempo/legacy/client/SessionManager.js.map +1 -0
  182. package/dist/tempo/legacy/client/index.d.ts +7 -0
  183. package/dist/tempo/legacy/client/index.d.ts.map +1 -0
  184. package/dist/tempo/legacy/client/index.js +5 -0
  185. package/dist/tempo/legacy/client/index.js.map +1 -0
  186. package/dist/tempo/legacy/index.d.ts +7 -0
  187. package/dist/tempo/legacy/index.d.ts.map +1 -0
  188. package/dist/tempo/legacy/index.js +7 -0
  189. package/dist/tempo/legacy/index.js.map +1 -0
  190. package/dist/tempo/{server → legacy/server}/Session.d.ts +28 -11
  191. package/dist/tempo/legacy/server/Session.d.ts.map +1 -0
  192. package/dist/tempo/{server → legacy/server}/Session.js +12 -10
  193. package/dist/tempo/legacy/server/Session.js.map +1 -0
  194. package/dist/tempo/legacy/server/index.d.ts +5 -0
  195. package/dist/tempo/legacy/server/index.d.ts.map +1 -0
  196. package/dist/tempo/legacy/server/index.js +5 -0
  197. package/dist/tempo/legacy/server/index.js.map +1 -0
  198. package/dist/tempo/{session → legacy/session}/Chain.d.ts +30 -23
  199. package/dist/tempo/legacy/session/Chain.d.ts.map +1 -0
  200. package/dist/tempo/{session → legacy/session}/Chain.js +12 -11
  201. package/dist/tempo/legacy/session/Chain.js.map +1 -0
  202. package/dist/tempo/{session → legacy/session}/Channel.d.ts +1 -0
  203. package/dist/tempo/legacy/session/Channel.d.ts.map +1 -0
  204. package/dist/tempo/legacy/session/Channel.js.map +1 -0
  205. package/dist/tempo/legacy/session/ChannelStore.d.ts +22 -0
  206. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +1 -0
  207. package/dist/tempo/legacy/session/ChannelStore.js +6 -0
  208. package/dist/tempo/legacy/session/ChannelStore.js.map +1 -0
  209. package/dist/tempo/legacy/session/Types.d.ts +73 -0
  210. package/dist/tempo/legacy/session/Types.d.ts.map +1 -0
  211. package/dist/tempo/legacy/session/Types.js.map +1 -0
  212. package/dist/tempo/{session → legacy/session}/Voucher.d.ts +4 -4
  213. package/dist/tempo/legacy/session/Voucher.d.ts.map +1 -0
  214. package/dist/tempo/{session → legacy/session}/Voucher.js +1 -1
  215. package/dist/tempo/legacy/session/Voucher.js.map +1 -0
  216. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts +1 -0
  217. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts.map +1 -1
  218. package/dist/tempo/{session → legacy/session}/escrow.abi.js +1 -0
  219. package/dist/tempo/legacy/session/escrow.abi.js.map +1 -0
  220. package/dist/tempo/legacy/session/index.d.ts +9 -0
  221. package/dist/tempo/legacy/session/index.d.ts.map +1 -0
  222. package/dist/tempo/legacy/session/index.js +9 -0
  223. package/dist/tempo/legacy/session/index.js.map +1 -0
  224. package/dist/tempo/server/Charge.d.ts +1 -1
  225. package/dist/tempo/server/Charge.d.ts.map +1 -1
  226. package/dist/tempo/server/Charge.js +51 -30
  227. package/dist/tempo/server/Charge.js.map +1 -1
  228. package/dist/tempo/server/Methods.d.ts +67 -8
  229. package/dist/tempo/server/Methods.d.ts.map +1 -1
  230. package/dist/tempo/server/Methods.js +40 -10
  231. package/dist/tempo/server/Methods.js.map +1 -1
  232. package/dist/tempo/server/Subscription.d.ts +11 -1
  233. package/dist/tempo/server/Subscription.d.ts.map +1 -1
  234. package/dist/tempo/server/Subscription.js +135 -23
  235. package/dist/tempo/server/Subscription.js.map +1 -1
  236. package/dist/tempo/server/index.d.ts +6 -5
  237. package/dist/tempo/server/index.d.ts.map +1 -1
  238. package/dist/tempo/server/index.js +5 -5
  239. package/dist/tempo/server/index.js.map +1 -1
  240. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  241. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  242. package/dist/tempo/server/internal/html.gen.js +1 -1
  243. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  244. package/dist/tempo/server/internal/request-body.d.ts +7 -2
  245. package/dist/tempo/server/internal/request-body.d.ts.map +1 -1
  246. package/dist/tempo/server/internal/request-body.js +20 -3
  247. package/dist/tempo/server/internal/request-body.js.map +1 -1
  248. package/dist/tempo/server/internal/transport.d.ts +8 -4
  249. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  250. package/dist/tempo/server/internal/transport.js +8 -7
  251. package/dist/tempo/server/internal/transport.js.map +1 -1
  252. package/dist/tempo/session/Snapshot.d.ts +32 -0
  253. package/dist/tempo/session/Snapshot.d.ts.map +1 -0
  254. package/dist/tempo/session/Snapshot.js +37 -0
  255. package/dist/tempo/session/Snapshot.js.map +1 -0
  256. package/dist/tempo/session/client/ChannelOps.d.ts +81 -0
  257. package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -0
  258. package/dist/tempo/session/client/ChannelOps.js +201 -0
  259. package/dist/tempo/session/client/ChannelOps.js.map +1 -0
  260. package/dist/tempo/session/client/ChannelStore.d.ts +51 -0
  261. package/dist/tempo/session/client/ChannelStore.d.ts.map +1 -0
  262. package/dist/tempo/session/client/ChannelStore.js +63 -0
  263. package/dist/tempo/session/client/ChannelStore.js.map +1 -0
  264. package/dist/tempo/session/client/CredentialState.d.ts +245 -0
  265. package/dist/tempo/session/client/CredentialState.d.ts.map +1 -0
  266. package/dist/tempo/session/client/CredentialState.js +419 -0
  267. package/dist/tempo/session/client/CredentialState.js.map +1 -0
  268. package/dist/tempo/session/client/ReceiptCoordinator.d.ts +26 -0
  269. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +1 -0
  270. package/dist/tempo/session/client/ReceiptCoordinator.js +61 -0
  271. package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -0
  272. package/dist/tempo/session/client/Runtime.d.ts +464 -0
  273. package/dist/tempo/session/client/Runtime.d.ts.map +1 -0
  274. package/dist/tempo/session/client/Runtime.js +499 -0
  275. package/dist/tempo/session/client/Runtime.js.map +1 -0
  276. package/dist/tempo/session/client/Session.d.ts +138 -0
  277. package/dist/tempo/session/client/Session.d.ts.map +1 -0
  278. package/dist/tempo/session/client/Session.js +69 -0
  279. package/dist/tempo/session/client/Session.js.map +1 -0
  280. package/dist/tempo/session/client/SessionManager.d.ts +84 -0
  281. package/dist/tempo/session/client/SessionManager.d.ts.map +1 -0
  282. package/dist/tempo/session/client/SessionManager.js +577 -0
  283. package/dist/tempo/session/client/SessionManager.js.map +1 -0
  284. package/dist/tempo/session/client/Transports.d.ts +449 -0
  285. package/dist/tempo/session/client/Transports.d.ts.map +1 -0
  286. package/dist/tempo/session/client/Transports.js +721 -0
  287. package/dist/tempo/session/client/Transports.js.map +1 -0
  288. package/dist/tempo/session/client/index.d.ts +11 -0
  289. package/dist/tempo/session/client/index.d.ts.map +1 -0
  290. package/dist/tempo/session/client/index.js +6 -0
  291. package/dist/tempo/session/client/index.js.map +1 -0
  292. package/dist/tempo/session/index.d.ts +7 -8
  293. package/dist/tempo/session/index.d.ts.map +1 -1
  294. package/dist/tempo/session/index.js +7 -8
  295. package/dist/tempo/session/index.js.map +1 -1
  296. package/dist/tempo/session/precompile/Chain.d.ts +319 -0
  297. package/dist/tempo/session/precompile/Chain.d.ts.map +1 -0
  298. package/dist/tempo/session/precompile/Chain.js +492 -0
  299. package/dist/tempo/session/precompile/Chain.js.map +1 -0
  300. package/dist/tempo/session/precompile/Channel.d.ts +46 -0
  301. package/dist/tempo/session/precompile/Channel.d.ts.map +1 -0
  302. package/dist/tempo/session/precompile/Channel.js +56 -0
  303. package/dist/tempo/session/precompile/Channel.js.map +1 -0
  304. package/dist/tempo/session/precompile/Protocol.d.ts +308 -0
  305. package/dist/tempo/session/precompile/Protocol.d.ts.map +1 -0
  306. package/dist/tempo/session/precompile/Protocol.js +264 -0
  307. package/dist/tempo/session/precompile/Protocol.js.map +1 -0
  308. package/dist/tempo/session/precompile/Voucher.d.ts +40 -0
  309. package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -0
  310. package/dist/tempo/session/precompile/Voucher.js +125 -0
  311. package/dist/tempo/session/precompile/Voucher.js.map +1 -0
  312. package/dist/tempo/session/precompile/escrow.abi.d.ts +522 -0
  313. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -0
  314. package/dist/tempo/session/precompile/escrow.abi.js +224 -0
  315. package/dist/tempo/session/precompile/escrow.abi.js.map +1 -0
  316. package/dist/tempo/session/precompile/index.d.ts +24 -0
  317. package/dist/tempo/session/precompile/index.d.ts.map +1 -0
  318. package/dist/tempo/session/precompile/index.js +22 -0
  319. package/dist/tempo/session/precompile/index.js.map +1 -0
  320. package/dist/tempo/session/server/ChannelOps.d.ts +56 -0
  321. package/dist/tempo/session/server/ChannelOps.d.ts.map +1 -0
  322. package/dist/tempo/session/server/ChannelOps.js +91 -0
  323. package/dist/tempo/session/server/ChannelOps.js.map +1 -0
  324. package/dist/tempo/session/server/ChannelStore.d.ts +347 -0
  325. package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -0
  326. package/dist/tempo/session/server/ChannelStore.js +404 -0
  327. package/dist/tempo/session/server/ChannelStore.js.map +1 -0
  328. package/dist/tempo/session/server/CredentialVerification.d.ts +85 -0
  329. package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -0
  330. package/dist/tempo/session/server/CredentialVerification.js +494 -0
  331. package/dist/tempo/session/server/CredentialVerification.js.map +1 -0
  332. package/dist/tempo/session/server/MeteredStream.d.ts +40 -0
  333. package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -0
  334. package/dist/tempo/session/server/MeteredStream.js +42 -0
  335. package/dist/tempo/session/server/MeteredStream.js.map +1 -0
  336. package/dist/tempo/session/server/RequestState.d.ts +208 -0
  337. package/dist/tempo/session/server/RequestState.d.ts.map +1 -0
  338. package/dist/tempo/session/server/RequestState.js +252 -0
  339. package/dist/tempo/session/server/RequestState.js.map +1 -0
  340. package/dist/tempo/session/server/Session.d.ts +169 -0
  341. package/dist/tempo/session/server/Session.d.ts.map +1 -0
  342. package/dist/tempo/session/server/Session.js +351 -0
  343. package/dist/tempo/session/server/Session.js.map +1 -0
  344. package/dist/tempo/session/server/Settlement.d.ts +185 -0
  345. package/dist/tempo/session/server/Settlement.d.ts.map +1 -0
  346. package/dist/tempo/session/server/Settlement.js +252 -0
  347. package/dist/tempo/session/server/Settlement.js.map +1 -0
  348. package/dist/tempo/session/{Sse.d.ts → server/Sse.d.ts} +9 -56
  349. package/dist/tempo/session/server/Sse.d.ts.map +1 -0
  350. package/dist/tempo/session/server/Sse.js +184 -0
  351. package/dist/tempo/session/server/Sse.js.map +1 -0
  352. package/dist/tempo/session/server/Transports.d.ts +89 -0
  353. package/dist/tempo/session/server/Transports.d.ts.map +1 -0
  354. package/dist/tempo/session/server/Transports.js +149 -0
  355. package/dist/tempo/session/server/Transports.js.map +1 -0
  356. package/dist/tempo/session/server/Ws.d.ts +48 -0
  357. package/dist/tempo/session/server/Ws.d.ts.map +1 -0
  358. package/dist/tempo/session/server/Ws.js +244 -0
  359. package/dist/tempo/session/server/Ws.js.map +1 -0
  360. package/dist/tempo/session/server/index.d.ts +4 -0
  361. package/dist/tempo/session/server/index.d.ts.map +1 -0
  362. package/dist/tempo/session/server/index.js +2 -0
  363. package/dist/tempo/session/server/index.js.map +1 -0
  364. package/dist/tempo/subscription/KeyAuthorization.d.ts +712 -1
  365. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
  366. package/dist/tempo/subscription/Store.d.ts +2 -0
  367. package/dist/tempo/subscription/Store.d.ts.map +1 -1
  368. package/dist/tempo/subscription/Store.js +16 -1
  369. package/dist/tempo/subscription/Store.js.map +1 -1
  370. package/dist/x402/index.d.ts +1 -0
  371. package/dist/x402/index.d.ts.map +1 -1
  372. package/dist/x402/index.js +1 -0
  373. package/dist/x402/index.js.map +1 -1
  374. package/package.json +25 -9
  375. package/src/Challenge.test.ts +40 -0
  376. package/src/Challenge.ts +28 -13
  377. package/src/Constants.ts +58 -0
  378. package/src/Credential.ts +5 -4
  379. package/src/Mcp.ts +4 -0
  380. package/src/Method.ts +46 -5
  381. package/src/PaymentRequest.ts +10 -10
  382. package/src/Receipt.ts +3 -2
  383. package/src/cli/cli.test.ts +38 -43
  384. package/src/cli/cli.ts +23 -10
  385. package/src/cli/mcp.test.ts +21 -7
  386. package/src/cli/plugins/tempo.ts +21 -8
  387. package/src/cli/utils.test.ts +25 -1
  388. package/src/cli/utils.ts +10 -0
  389. package/src/client/Methods.ts +5 -2
  390. package/src/client/Mppx.test-d.ts +31 -1
  391. package/src/client/Mppx.test.ts +76 -1
  392. package/src/client/Mppx.ts +2 -2
  393. package/src/client/Transport.test.ts +225 -178
  394. package/src/client/Transport.ts +77 -84
  395. package/src/client/index.ts +25 -1
  396. package/src/client/internal/Fetch.test.ts +236 -6
  397. package/src/client/internal/Fetch.ts +69 -11
  398. package/src/client/internal/protocols/Mcp.test.ts +220 -0
  399. package/src/client/internal/protocols/Mcp.ts +162 -0
  400. package/src/client/internal/protocols/Mpp.ts +21 -0
  401. package/src/client/internal/protocols/Protocol.ts +10 -0
  402. package/src/client/internal/protocols/Shared.ts +25 -0
  403. package/src/client/internal/protocols/X402.ts +42 -0
  404. package/src/discovery/OpenApi.test.ts +1 -1
  405. package/src/env.d.ts +1 -1
  406. package/src/evm/PublicInterface.test-d.ts +1 -1
  407. package/src/evm/client/index.ts +1 -0
  408. package/src/evm/index.ts +2 -0
  409. package/src/evm/server/Charge.test.ts +1 -1
  410. package/src/evm/server/index.ts +1 -0
  411. package/src/index.ts +1 -0
  412. package/src/internal/AcceptPayment.test.ts +61 -0
  413. package/src/internal/AcceptPayment.ts +21 -14
  414. package/src/{mcp-sdk → mcp}/client/McpClient.integration.test.ts +18 -11
  415. package/src/{mcp-sdk → mcp}/client/McpClient.test-d.ts +45 -11
  416. package/src/{mcp-sdk → mcp}/client/McpClient.test.ts +211 -5
  417. package/src/mcp/client/McpClient.ts +307 -0
  418. package/src/mcp/client/McpClient.unit.test.ts +135 -0
  419. package/src/middlewares/elysia.test.ts +9 -5
  420. package/src/middlewares/express.test.ts +9 -5
  421. package/src/middlewares/hono.test.ts +5 -5
  422. package/src/middlewares/internal/mppx.test.ts +1 -1
  423. package/src/middlewares/nextjs.test.ts +9 -5
  424. package/src/proxy/Proxy.test.ts +9 -9
  425. package/src/proxy/services/anthropic.test.ts +1 -1
  426. package/src/proxy/services/openai.test.ts +1 -1
  427. package/src/proxy/services/stripe.test.ts +1 -1
  428. package/src/server/Mppx.authorize.test.ts +1 -1
  429. package/src/server/Mppx.test-d.ts +55 -1
  430. package/src/server/Mppx.test.ts +220 -9
  431. package/src/server/Mppx.ts +501 -407
  432. package/src/server/Response.ts +2 -1
  433. package/src/server/Transport.test.ts +6 -6
  434. package/src/server/Transport.ts +5 -4
  435. package/src/server/index.ts +1 -0
  436. package/src/stripe/Charge.integration.test.ts +1 -1
  437. package/src/stripe/client/Charge.test.ts +21 -6
  438. package/src/stripe/client/Charge.ts +6 -2
  439. package/src/stripe/server/Charge.test.ts +115 -2
  440. package/src/stripe/server/Charge.ts +13 -2
  441. package/src/stripe/server/internal/html/package.json +1 -1
  442. package/src/stripe/server/internal/html.gen.ts +1 -1
  443. package/src/tempo/AccessKeyAuthorization.test.ts +4 -94
  444. package/src/tempo/Methods.test.ts +45 -17
  445. package/src/tempo/Methods.ts +22 -0
  446. package/src/tempo/Proof.conformance.test.ts +146 -0
  447. package/src/tempo/Proof.test-d.ts +15 -0
  448. package/src/tempo/Proof.ts +52 -1
  449. package/src/tempo/PublicExports.test-d.ts +105 -0
  450. package/src/tempo/Subscription.integration.test.ts +1 -1
  451. package/src/tempo/client/Charge.test.ts +258 -0
  452. package/src/tempo/client/Charge.ts +84 -38
  453. package/src/tempo/client/Methods.ts +22 -8
  454. package/src/tempo/client/ResolveAccount.ts +46 -0
  455. package/src/tempo/client/index.ts +15 -4
  456. package/src/tempo/index.ts +1 -0
  457. package/src/tempo/internal/fee-payer.test.ts +296 -17
  458. package/src/tempo/internal/fee-payer.ts +186 -4
  459. package/src/tempo/internal/fee-token.test.ts +14 -9
  460. package/src/tempo/internal/proof.test.ts +12 -4
  461. package/src/tempo/internal/proof.ts +55 -6
  462. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +162 -0
  463. package/src/tempo/legacy/README.md +9 -0
  464. package/src/tempo/{client → legacy/client}/ChannelOps.test.ts +6 -7
  465. package/src/tempo/{client → legacy/client}/ChannelOps.ts +22 -9
  466. package/src/tempo/{client → legacy/client}/Session.test.ts +51 -9
  467. package/src/tempo/{client → legacy/client}/Session.ts +25 -11
  468. package/src/tempo/{client → legacy/client}/SessionManager.test.ts +81 -9
  469. package/src/tempo/{client → legacy/client}/SessionManager.ts +52 -23
  470. package/src/tempo/legacy/client/index.ts +6 -0
  471. package/src/tempo/legacy/index.ts +6 -0
  472. package/src/tempo/{server → legacy/server}/Session.test.ts +136 -71
  473. package/src/tempo/{server → legacy/server}/Session.ts +32 -23
  474. package/src/tempo/legacy/server/index.ts +4 -0
  475. package/src/tempo/{session → legacy/session}/Chain.test.ts +3 -4
  476. package/src/tempo/{session → legacy/session}/Chain.ts +94 -63
  477. package/src/tempo/{session → legacy/session}/Channel.ts +1 -0
  478. package/src/tempo/legacy/session/ChannelStore.test.ts +58 -0
  479. package/src/tempo/legacy/session/ChannelStore.ts +39 -0
  480. package/src/tempo/legacy/session/Types.ts +91 -0
  481. package/src/tempo/{session → legacy/session}/Voucher.ts +12 -8
  482. package/src/tempo/{session → legacy/session}/escrow.abi.ts +1 -0
  483. package/src/tempo/legacy/session/index.ts +8 -0
  484. package/src/tempo/server/AtomicStore.test-d.ts +16 -11
  485. package/src/tempo/server/Charge.test.ts +480 -31
  486. package/src/tempo/server/Charge.ts +54 -30
  487. package/src/tempo/server/Methods.ts +58 -10
  488. package/src/tempo/server/Sse.test.ts +2 -2
  489. package/src/tempo/server/Subscription.test.ts +465 -3
  490. package/src/tempo/server/Subscription.ts +174 -19
  491. package/src/tempo/server/index.ts +6 -5
  492. package/src/tempo/server/internal/html/package.json +2 -2
  493. package/src/tempo/server/internal/html.gen.ts +1 -1
  494. package/src/tempo/server/internal/request-body.test.ts +37 -4
  495. package/src/tempo/server/internal/request-body.ts +25 -6
  496. package/src/tempo/server/internal/transport.test.ts +4 -4
  497. package/src/tempo/server/internal/transport.ts +19 -10
  498. package/src/tempo/session/Snapshot.test.ts +41 -0
  499. package/src/tempo/session/Snapshot.ts +74 -0
  500. package/src/tempo/session/client/ChannelOps.test.ts +163 -0
  501. package/src/tempo/session/client/ChannelOps.ts +330 -0
  502. package/src/tempo/session/client/ChannelStore.ts +111 -0
  503. package/src/tempo/session/client/CredentialState.test.ts +789 -0
  504. package/src/tempo/session/client/CredentialState.ts +799 -0
  505. package/src/tempo/session/client/ReceiptCoordinator.ts +95 -0
  506. package/src/tempo/session/client/Runtime.test.ts +1092 -0
  507. package/src/tempo/session/client/Runtime.ts +986 -0
  508. package/src/tempo/session/client/Session.test.ts +774 -0
  509. package/src/tempo/session/client/Session.ts +123 -0
  510. package/src/tempo/session/client/SessionManager.test.ts +1397 -0
  511. package/src/tempo/session/client/SessionManager.ts +751 -0
  512. package/src/tempo/session/client/Transports.test.ts +837 -0
  513. package/src/tempo/session/client/Transports.ts +1292 -0
  514. package/src/tempo/session/client/index.ts +40 -0
  515. package/src/tempo/session/index.ts +7 -8
  516. package/src/tempo/session/precompile/Chain.integration.test.ts +321 -0
  517. package/src/tempo/session/precompile/Chain.test.ts +1258 -0
  518. package/src/tempo/session/precompile/Chain.ts +979 -0
  519. package/src/tempo/session/precompile/Channel.test.ts +138 -0
  520. package/src/tempo/session/precompile/Channel.ts +103 -0
  521. package/src/tempo/session/precompile/Protocol.test.ts +358 -0
  522. package/src/tempo/session/precompile/Protocol.ts +520 -0
  523. package/src/tempo/session/precompile/Voucher.test.ts +354 -0
  524. package/src/tempo/session/precompile/Voucher.ts +162 -0
  525. package/src/tempo/session/precompile/escrow.abi.ts +226 -0
  526. package/src/tempo/session/precompile/index.ts +33 -0
  527. package/src/tempo/session/server/ChannelOps.test.ts +129 -0
  528. package/src/tempo/session/server/ChannelOps.ts +157 -0
  529. package/src/tempo/session/{ChannelStore.test.ts → server/ChannelStore.test.ts} +536 -29
  530. package/src/tempo/session/server/ChannelStore.ts +835 -0
  531. package/src/tempo/session/server/CredentialVerification.test.ts +146 -0
  532. package/src/tempo/session/server/CredentialVerification.ts +710 -0
  533. package/src/tempo/session/server/MeteredStream.ts +88 -0
  534. package/src/tempo/session/server/RequestState.test.ts +531 -0
  535. package/src/tempo/session/server/RequestState.ts +499 -0
  536. package/src/tempo/session/server/Session.integration.test.ts +444 -0
  537. package/src/tempo/session/server/Session.test.ts +3253 -0
  538. package/src/tempo/session/server/Session.ts +543 -0
  539. package/src/tempo/session/server/Settlement.test.ts +329 -0
  540. package/src/tempo/session/server/Settlement.ts +471 -0
  541. package/src/tempo/session/{Sse.test.ts → server/Sse.test.ts} +37 -3
  542. package/src/tempo/session/server/Sse.ts +254 -0
  543. package/src/tempo/session/server/Transports.test.ts +346 -0
  544. package/src/tempo/session/server/Transports.ts +255 -0
  545. package/src/tempo/session/{Ws.test.ts → server/Ws.test.ts} +4 -4
  546. package/src/tempo/session/server/Ws.ts +380 -0
  547. package/src/tempo/session/server/index.ts +8 -0
  548. package/src/tempo/subscription/Store.ts +27 -9
  549. package/src/x402/Exact.e2e.test.ts +1 -1
  550. package/src/x402/PublicInterface.test-d.ts +1 -1
  551. package/src/x402/index.ts +1 -0
  552. package/dist/mcp-sdk/client/McpClient.d.ts +0 -78
  553. package/dist/mcp-sdk/client/McpClient.d.ts.map +0 -1
  554. package/dist/mcp-sdk/client/McpClient.js +0 -105
  555. package/dist/mcp-sdk/client/McpClient.js.map +0 -1
  556. package/dist/mcp-sdk/client/index.d.ts.map +0 -1
  557. package/dist/mcp-sdk/client/index.js.map +0 -1
  558. package/dist/mcp-sdk/server/Transport.d.ts.map +0 -1
  559. package/dist/mcp-sdk/server/Transport.js.map +0 -1
  560. package/dist/mcp-sdk/server/index.d.ts.map +0 -1
  561. package/dist/mcp-sdk/server/index.js.map +0 -1
  562. package/dist/tempo/client/ChannelOps.d.ts.map +0 -1
  563. package/dist/tempo/client/ChannelOps.js.map +0 -1
  564. package/dist/tempo/client/Session.d.ts.map +0 -1
  565. package/dist/tempo/client/Session.js.map +0 -1
  566. package/dist/tempo/client/SessionManager.d.ts.map +0 -1
  567. package/dist/tempo/client/SessionManager.js.map +0 -1
  568. package/dist/tempo/server/Session.d.ts.map +0 -1
  569. package/dist/tempo/server/Session.js.map +0 -1
  570. package/dist/tempo/session/Chain.d.ts.map +0 -1
  571. package/dist/tempo/session/Chain.js.map +0 -1
  572. package/dist/tempo/session/Channel.d.ts.map +0 -1
  573. package/dist/tempo/session/Channel.js.map +0 -1
  574. package/dist/tempo/session/ChannelStore.d.ts +0 -117
  575. package/dist/tempo/session/ChannelStore.d.ts.map +0 -1
  576. package/dist/tempo/session/ChannelStore.js +0 -172
  577. package/dist/tempo/session/ChannelStore.js.map +0 -1
  578. package/dist/tempo/session/Receipt.d.ts +0 -22
  579. package/dist/tempo/session/Receipt.d.ts.map +0 -1
  580. package/dist/tempo/session/Receipt.js +0 -34
  581. package/dist/tempo/session/Receipt.js.map +0 -1
  582. package/dist/tempo/session/Sse.d.ts.map +0 -1
  583. package/dist/tempo/session/Sse.js +0 -363
  584. package/dist/tempo/session/Sse.js.map +0 -1
  585. package/dist/tempo/session/Types.d.ts +0 -78
  586. package/dist/tempo/session/Types.d.ts.map +0 -1
  587. package/dist/tempo/session/Types.js.map +0 -1
  588. package/dist/tempo/session/Voucher.d.ts.map +0 -1
  589. package/dist/tempo/session/Voucher.js.map +0 -1
  590. package/dist/tempo/session/Ws.d.ts +0 -87
  591. package/dist/tempo/session/Ws.d.ts.map +0 -1
  592. package/dist/tempo/session/Ws.js +0 -443
  593. package/dist/tempo/session/Ws.js.map +0 -1
  594. package/dist/tempo/session/escrow.abi.js.map +0 -1
  595. package/src/mcp-sdk/client/McpClient.ts +0 -196
  596. package/src/tempo/session/ChannelStore.ts +0 -308
  597. package/src/tempo/session/Receipt.test.ts +0 -89
  598. package/src/tempo/session/Receipt.ts +0 -46
  599. package/src/tempo/session/Sse.ts +0 -462
  600. package/src/tempo/session/Types.ts +0 -86
  601. package/src/tempo/session/Ws.ts +0 -576
  602. /package/dist/{mcp-sdk → mcp}/client/index.d.ts +0 -0
  603. /package/dist/{mcp-sdk → mcp}/client/index.js +0 -0
  604. /package/dist/{mcp-sdk → mcp}/server/Transport.d.ts +0 -0
  605. /package/dist/{mcp-sdk → mcp}/server/Transport.js +0 -0
  606. /package/dist/{mcp-sdk → mcp}/server/index.d.ts +0 -0
  607. /package/dist/{mcp-sdk → mcp}/server/index.js +0 -0
  608. /package/dist/tempo/{session → legacy/session}/Channel.js +0 -0
  609. /package/dist/tempo/{session → legacy/session}/Types.js +0 -0
  610. /package/src/{mcp-sdk → mcp}/client/index.ts +0 -0
  611. /package/src/{mcp-sdk → mcp}/server/Transport.test.ts +0 -0
  612. /package/src/{mcp-sdk → mcp}/server/Transport.ts +0 -0
  613. /package/src/{mcp-sdk → mcp}/server/index.ts +0 -0
  614. /package/src/tempo/{session → legacy/session}/Channel.test.ts +0 -0
  615. /package/src/tempo/{session → legacy/session}/Voucher.test.ts +0 -0
  616. /package/src/tempo/session/{Sse.fuzz.test.ts → server/Sse.fuzz.test.ts} +0 -0
@@ -1,13 +1,14 @@
1
1
  import type { Account } from 'viem'
2
2
  import { createClient } from 'viem'
3
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
3
4
  import { Actions, Addresses } from 'viem/tempo'
4
5
  import { describe, expect, test } from 'vp/test'
5
- import { nodeEnv } from '~test/config.js'
6
- import { accounts, asset, chain, fundAccount, http } from '~test/tempo/viem.js'
6
+ import { tempoNetwork } from '~test/config.js'
7
+ import { asset, chain, fundAccount, http } from '~test/tempo/viem.js'
7
8
 
8
9
  import { resolveFeeToken } from './fee-token.js'
9
10
 
10
- const isLocalnet = nodeEnv === 'localnet'
11
+ const isLocalnet = tempoNetwork === 'localnet'
11
12
 
12
13
  function clientFor(account: Account) {
13
14
  return createClient({
@@ -21,9 +22,13 @@ function expectAddress(actual: string | undefined, expected: string) {
21
22
  expect(actual?.toLowerCase()).toBe(expected.toLowerCase())
22
23
  }
23
24
 
25
+ function testAccount() {
26
+ return privateKeyToAccount(generatePrivateKey())
27
+ }
28
+
24
29
  describe.runIf(isLocalnet)('resolveFeeToken', () => {
25
30
  test('uses the funded account fee preference first', async () => {
26
- const account = accounts[11]
31
+ const account = testAccount()
27
32
  const client = clientFor(account)
28
33
  await fundAccount({ address: account.address, token: asset })
29
34
  await Actions.fee.setUserTokenSync(client, {
@@ -41,7 +46,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
41
46
  })
42
47
 
43
48
  test('falls through to the first funded candidate token', async () => {
44
- const account = accounts[12]
49
+ const account = testAccount()
45
50
  const client = clientFor(account)
46
51
  await fundAccount({ address: account.address, token: asset })
47
52
 
@@ -55,7 +60,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
55
60
  })
56
61
 
57
62
  test('falls through from an unfunded account fee preference', async () => {
58
- const account = accounts[13]
63
+ const account = testAccount()
59
64
  const client = clientFor(account)
60
65
  await fundAccount({ address: account.address, token: asset })
61
66
  await Actions.fee.setUserTokenSync(client, {
@@ -73,7 +78,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
73
78
  })
74
79
 
75
80
  test('uses a funded chain fee token when configured', async () => {
76
- const account = accounts[14]
81
+ const account = testAccount()
77
82
  const client = createClient({
78
83
  account,
79
84
  chain: { ...chain, feeToken: asset },
@@ -91,7 +96,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
91
96
  })
92
97
 
93
98
  test('falls through from an unfunded chain fee token', async () => {
94
- const account = accounts[15]
99
+ const account = testAccount()
95
100
  const client = createClient({
96
101
  account,
97
102
  chain: { ...chain, feeToken: Addresses.pathUsd },
@@ -109,7 +114,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
109
114
  })
110
115
 
111
116
  test('falls back to the first known token when none are funded', async () => {
112
- const account = accounts[16]
117
+ const account = testAccount()
113
118
  const client = clientFor(account)
114
119
 
115
120
  const feeToken = await resolveFeeToken({
@@ -44,9 +44,10 @@ const parsePkhSourceCases = [
44
44
  ] as const
45
45
 
46
46
  describe('Proof', () => {
47
- test('types has Proof with challengeId and realm fields', () => {
47
+ test('types has Proof with account, challengeId and realm fields', () => {
48
48
  expect(Proof.types).toEqual({
49
49
  Proof: [
50
+ { name: 'account', type: 'address' },
50
51
  { name: 'challengeId', type: 'string' },
51
52
  { name: 'realm', type: 'string' },
52
53
  ],
@@ -55,7 +56,7 @@ describe('Proof', () => {
55
56
 
56
57
  test('domain returns EIP-712 domain with name, version, chainId', () => {
57
58
  const d = Proof.domain(42431)
58
- expect(d).toEqual({ name: 'MPP', version: '2', chainId: 42431 })
59
+ expect(d).toEqual({ name: 'MPP', version: '3', chainId: 42431 })
59
60
  })
60
61
 
61
62
  test('domain uses provided chainId', () => {
@@ -63,8 +64,15 @@ describe('Proof', () => {
63
64
  expect(Proof.domain(99999).chainId).toBe(99999)
64
65
  })
65
66
 
66
- test('message wraps challengeId and realm', () => {
67
- expect(Proof.message('abc123', 'api.example.com')).toEqual({
67
+ test('message wraps account, challengeId and realm', () => {
68
+ expect(
69
+ Proof.message({
70
+ account: '0xAbCdEf1234567890AbCdEf1234567890AbCdEf12',
71
+ challengeId: 'abc123',
72
+ realm: 'api.example.com',
73
+ }),
74
+ ).toEqual({
75
+ account: '0xAbCdEf1234567890AbCdEf1234567890AbCdEf12',
68
76
  challengeId: 'abc123',
69
77
  realm: 'api.example.com',
70
78
  })
@@ -1,8 +1,18 @@
1
- import { isAddress, type Address } from 'viem'
1
+ import { hashTypedData, isAddress, type Address, type Hex } from 'viem'
2
2
 
3
- /** EIP-712 typed data types for proof credentials. */
3
+ /** EIP-712 primary type for proof credentials. */
4
+ export const primaryType = 'Proof' as const
5
+
6
+ /**
7
+ * EIP-712 typed-data field definitions for Tempo zero-amount proof credentials.
8
+ *
9
+ * The `account` field cryptographically binds the signature to the payer
10
+ * wallet, so a proof signed for one account cannot be replayed against another
11
+ * — including across an access key that is authorized for multiple accounts.
12
+ */
4
13
  export const types = {
5
14
  Proof: [
15
+ { name: 'account', type: 'address' },
6
16
  { name: 'challengeId', type: 'string' },
7
17
  { name: 'realm', type: 'string' },
8
18
  ],
@@ -10,12 +20,51 @@ export const types = {
10
20
 
11
21
  /** Constructs the EIP-712 domain for a proof credential. */
12
22
  export function domain(chainId: number) {
13
- return { name: 'MPP', version: '2', chainId } as const
23
+ return { name: 'MPP', version: '3', chainId } as const
24
+ }
25
+
26
+ /**
27
+ * Constructs the EIP-712 message for a proof credential.
28
+ *
29
+ * @param parameters - Proof message parameters.
30
+ * @param parameters.account - Payer wallet address the proof is bound to.
31
+ * @param parameters.challengeId - Challenge `id` being proven.
32
+ * @param parameters.realm - Challenge `realm` being proven.
33
+ */
34
+ export function message(parameters: { account: Address; challengeId: string; realm: string }) {
35
+ const { account, challengeId, realm } = parameters
36
+ return { account, challengeId, realm } as const
37
+ }
38
+
39
+ /**
40
+ * Constructs the complete EIP-712 typed-data payload for a proof credential.
41
+ *
42
+ * This is the canonical, wallet-bound proof contract: signing this payload
43
+ * commits the signer to a specific `account`, `challengeId`, and `realm`.
44
+ */
45
+ export function typedData(parameters: {
46
+ account: Address
47
+ chainId: number
48
+ challengeId: string
49
+ realm: string
50
+ }) {
51
+ const { account, chainId, challengeId, realm } = parameters
52
+ return {
53
+ domain: domain(chainId),
54
+ types,
55
+ primaryType,
56
+ message: message({ account, challengeId, realm }),
57
+ } as const
14
58
  }
15
59
 
16
- /** Constructs the EIP-712 message for a proof credential. */
17
- export function message(challengeId: string, realm: string) {
18
- return { challengeId, realm } as const
60
+ /** Computes the EIP-712 digest (signing payload) for a proof credential. */
61
+ export function hash(parameters: {
62
+ account: Address
63
+ chainId: number
64
+ challengeId: string
65
+ realm: string
66
+ }): Hex {
67
+ return hashTypedData(typedData(parameters))
19
68
  }
20
69
 
21
70
  /** Constructs the expected `did:pkh` source DID for a proof credential. */
@@ -0,0 +1,162 @@
1
+ import { type Address, createClient, custom, type Hex } from 'viem'
2
+ import {
3
+ Account as TempoAccount,
4
+ KeyAuthorizationManager,
5
+ Secp256k1,
6
+ Transaction,
7
+ } from 'viem/tempo'
8
+ import { beforeAll, describe, expect, test } from 'vp/test'
9
+ import { tempoNetwork } from '~test/config.js'
10
+ import { deployEscrow, openChannel } from '~test/tempo/legacy/session.js'
11
+ import { asset as currency, chain, http } from '~test/tempo/viem.js'
12
+
13
+ import { createOpenPayload } from './client/ChannelOps.js'
14
+ import { closeOnChain, settleOnChain } from './session/Chain.js'
15
+ import { signVoucher } from './session/Voucher.js'
16
+
17
+ const rootAccount = TempoAccount.fromSecp256k1(
18
+ '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
19
+ )
20
+ const recipient = '0x2222222222222222222222222222222222222222' as Address
21
+ const isLocalnet = tempoNetwork === 'localnet'
22
+
23
+ async function createAccessKeyClient() {
24
+ const keyAuthorizationManager = KeyAuthorizationManager.memory()
25
+ const accessKey = TempoAccount.fromSecp256k1(Secp256k1.randomPrivateKey(), {
26
+ access: rootAccount,
27
+ keyAuthorizationManager,
28
+ })
29
+ const keyAuthorization = await rootAccount.signKeyAuthorization(
30
+ {
31
+ accessKeyAddress: accessKey.accessKeyAddress,
32
+ keyType: accessKey.keyType,
33
+ },
34
+ {
35
+ chainId: BigInt(chain.id),
36
+ },
37
+ )
38
+ await keyAuthorizationManager.set(
39
+ {
40
+ accessKey: accessKey.accessKeyAddress,
41
+ address: rootAccount.address,
42
+ chainId: chain.id,
43
+ },
44
+ keyAuthorization,
45
+ )
46
+
47
+ const signedTransactions: Transaction.TransactionSerializedTempo[] = []
48
+ const rpcClient = createClient({ chain, transport: http() })
49
+
50
+ const client = createClient({
51
+ account: accessKey,
52
+ chain,
53
+ transport: custom({
54
+ async request({ method, params }: { method: string; params?: readonly unknown[] }) {
55
+ if (method === 'eth_sendRawTransaction' || method === 'eth_sendRawTransactionSync')
56
+ signedTransactions.push(params?.[0] as Transaction.TransactionSerializedTempo)
57
+ return rpcClient.request({ method, params } as never)
58
+ },
59
+ }),
60
+ })
61
+
62
+ return { accessKey, client, keyAuthorization, signedTransactions }
63
+ }
64
+
65
+ function expectTransactionKeyAuthorization(
66
+ serializedTransaction: Hex,
67
+ keyAuthorization: Awaited<ReturnType<typeof rootAccount.signKeyAuthorization>>,
68
+ ) {
69
+ const transaction = Transaction.deserialize(
70
+ serializedTransaction as Transaction.TransactionSerializedTempo,
71
+ )
72
+ expect(transaction.keyAuthorization).toEqual(keyAuthorization)
73
+ }
74
+
75
+ async function createChannelForPayee(payee: Address, escrowContract: Address) {
76
+ const payer = rootAccount
77
+ const { channelId } = await openChannel({
78
+ deposit: 10_000_000n,
79
+ escrow: escrowContract,
80
+ payee,
81
+ payer,
82
+ salt: Secp256k1.randomPrivateKey(),
83
+ token: currency,
84
+ })
85
+ const cumulativeAmount = 1_000_000n
86
+ const signature = await signVoucher(
87
+ createClient({ account: payer, chain, transport: http() }),
88
+ payer,
89
+ { channelId, cumulativeAmount },
90
+ escrowContract,
91
+ chain.id,
92
+ )
93
+
94
+ return { channelId, cumulativeAmount, escrowContract, signature }
95
+ }
96
+
97
+ describe.runIf(isLocalnet)('legacy Tempo session access-key authorization attachment', () => {
98
+ let escrowContract: Address
99
+
100
+ beforeAll(async () => {
101
+ escrowContract = await deployEscrow()
102
+ })
103
+
104
+ test('open signs a prepared transaction with keyAuthorization', async () => {
105
+ const { accessKey, client, keyAuthorization } = await createAccessKeyClient()
106
+
107
+ const { payload } = await createOpenPayload(client, accessKey, {
108
+ chainId: chain.id,
109
+ currency,
110
+ deposit: 5_000_000n,
111
+ escrowContract,
112
+ initialAmount: 1_000_000n,
113
+ payee: recipient,
114
+ })
115
+
116
+ expect(payload.action).toBe('open')
117
+ if (payload.action !== 'open') throw new Error('unexpected payload action')
118
+ expectTransactionKeyAuthorization(payload.transaction, keyAuthorization)
119
+ })
120
+
121
+ test('settle sends a prepared transaction with keyAuthorization', async () => {
122
+ const { accessKey, client, keyAuthorization, signedTransactions } =
123
+ await createAccessKeyClient()
124
+ const channel = await createChannelForPayee(rootAccount.address, escrowContract)
125
+
126
+ const hash = await settleOnChain(
127
+ client,
128
+ channel.escrowContract,
129
+ {
130
+ channelId: channel.channelId,
131
+ cumulativeAmount: channel.cumulativeAmount,
132
+ signature: channel.signature,
133
+ },
134
+ { account: accessKey },
135
+ )
136
+
137
+ expect(hash).toMatch(/^0x[0-9a-f]{64}$/)
138
+ expect(signedTransactions).toHaveLength(1)
139
+ expectTransactionKeyAuthorization(signedTransactions[0]!, keyAuthorization)
140
+ })
141
+
142
+ test('close sends a prepared transaction with keyAuthorization', async () => {
143
+ const { accessKey, client, keyAuthorization, signedTransactions } =
144
+ await createAccessKeyClient()
145
+ const channel = await createChannelForPayee(rootAccount.address, escrowContract)
146
+
147
+ const hash = await closeOnChain(
148
+ client,
149
+ channel.escrowContract,
150
+ {
151
+ channelId: channel.channelId,
152
+ cumulativeAmount: channel.cumulativeAmount,
153
+ signature: channel.signature,
154
+ },
155
+ { account: accessKey },
156
+ )
157
+
158
+ expect(hash).toMatch(/^0x[0-9a-f]{64}$/)
159
+ expect(signedTransactions).toHaveLength(1)
160
+ expectTransactionKeyAuthorization(signedTransactions[0]!, keyAuthorization)
161
+ })
162
+ })
@@ -0,0 +1,9 @@
1
+ # Tempo Legacy Session
2
+
3
+ This directory contains the legacy smart-contract-backed `tempo/session`
4
+ implementation.
5
+
6
+ The default `tempo.session` implementation is TIP-1034 precompile-backed and
7
+ lives under `src/tempo/session/precompile`. Legacy code may import shared transport and
8
+ accounting helpers from `src/tempo/session`, but legacy chain, channel, voucher,
9
+ client, and server implementations should stay inside this directory.
@@ -4,18 +4,16 @@ import { type Address, createClient, decodeFunctionData } from 'viem'
4
4
  import { privateKeyToAccount } from 'viem/accounts'
5
5
  import { Account as TempoAccount, Addresses, Transaction } from 'viem/tempo'
6
6
  import { beforeAll, describe, expect, test } from 'vp/test'
7
- import { nodeEnv } from '~test/config.js'
8
- import { deployEscrow, openChannel } from '~test/tempo/session.js'
7
+ import { tempoNetwork } from '~test/config.js'
8
+ import { deployEscrow, openChannel } from '~test/tempo/legacy/session.js'
9
9
  import { accounts, asset, chain, client, fundAccount, http } from '~test/tempo/viem.js'
10
10
 
11
- const isLocalnet = nodeEnv === 'localnet'
12
-
13
- import type { Challenge } from '../../Challenge.js'
14
- import * as Credential from '../../Credential.js'
11
+ import type { Challenge } from '../../../Challenge.js'
12
+ import * as Credential from '../../../Credential.js'
15
13
  import {
16
14
  chainId as chainIdDefaults,
17
15
  escrowContract as escrowContractDefaults,
18
- } from '../internal/defaults.js'
16
+ } from '../../internal/defaults.js'
19
17
  import { escrowAbi } from '../session/Chain.js'
20
18
  import { verifyVoucher } from '../session/Voucher.js'
21
19
  import {
@@ -40,6 +38,7 @@ const localClient = createClient({
40
38
  const channelId = '0x0000000000000000000000000000000000000000000000000000000000000001' as Hex.Hex
41
39
  const escrowContract = '0x1234567890abcdef1234567890abcdef12345678' as Address
42
40
  const chainId = 42431
41
+ const isLocalnet = tempoNetwork === 'localnet'
43
42
 
44
43
  function makeChallenge(overrides?: Partial<Challenge>): Challenge {
45
44
  return {
@@ -16,21 +16,28 @@ import {
16
16
  import { prepareTransactionRequest, signTransaction } from 'viem/actions'
17
17
  import { Abis } from 'viem/tempo'
18
18
 
19
- import type { Challenge } from '../../Challenge.js'
20
- import * as Credential from '../../Credential.js'
21
- import { getAccountSignerAddress } from '../internal/account.js'
22
- import * as defaults from '../internal/defaults.js'
19
+ import type { Challenge } from '../../../Challenge.js'
20
+ import * as Credential from '../../../Credential.js'
21
+ import { getAccountSignerAddress } from '../../internal/account.js'
22
+ import * as defaults from '../../internal/defaults.js'
23
23
  import { escrowAbi, getOnChainChannel } from '../session/Chain.js'
24
24
  import * as Channel from '../session/Channel.js'
25
- import type { SessionCredentialPayload } from '../session/Types.js'
25
+ import type { LegacySessionCredentialPayload } from '../session/Types.js'
26
26
  import { signVoucher } from '../session/Voucher.js'
27
27
 
28
+ /** Cached channel metadata used by the legacy auto-driving session client. */
28
29
  export type ChannelEntry = {
30
+ /** Legacy contract-backed channel ID. */
29
31
  channelId: Hex.Hex
32
+ /** Salt used to derive the channel ID. */
30
33
  salt: Hex.Hex
34
+ /** Highest cumulative voucher amount locally authorized. */
31
35
  cumulativeAmount: bigint
36
+ /** Escrow contract backing this channel. */
32
37
  escrowContract: Address
38
+ /** Chain ID used for channel ID and voucher domain separation. */
33
39
  chainId: number
40
+ /** Whether the client considers the channel reusable. */
34
41
  opened: boolean
35
42
  }
36
43
 
@@ -41,11 +48,13 @@ function resolveVoucherSigner(
41
48
  return voucherSigner ?? account
42
49
  }
43
50
 
51
+ /** Resolves the chain ID embedded in a legacy session challenge. */
44
52
  export function resolveChainId(challenge: Challenge): number {
45
53
  const md = challenge.request.methodDetails as { chainId?: number } | undefined
46
54
  return md?.chainId ?? 0
47
55
  }
48
56
 
57
+ /** Resolves the legacy escrow contract from local override, challenge hint, or defaults. */
49
58
  export function resolveEscrow(
50
59
  challenge: { request: { methodDetails?: unknown } },
51
60
  chainId: number,
@@ -64,9 +73,10 @@ export function resolveEscrow(
64
73
  return escrow
65
74
  }
66
75
 
76
+ /** Serializes a legacy session credential with a payer DID source. */
67
77
  export function serializeCredential(
68
78
  challenge: Challenge,
69
- payload: SessionCredentialPayload,
79
+ payload: LegacySessionCredentialPayload,
70
80
  chainId: number,
71
81
  account: viem_Account,
72
82
  ): string {
@@ -77,6 +87,7 @@ export function serializeCredential(
77
87
  })
78
88
  }
79
89
 
90
+ /** Creates a legacy cumulative voucher credential payload. */
80
91
  export async function createVoucherPayload(
81
92
  client: viem_Client,
82
93
  account: viem_Account,
@@ -85,7 +96,7 @@ export async function createVoucherPayload(
85
96
  escrowContract: Address,
86
97
  chainId: number,
87
98
  voucherSigner?: viem_Account | undefined,
88
- ): Promise<SessionCredentialPayload> {
99
+ ): Promise<LegacySessionCredentialPayload> {
89
100
  const signer = resolveVoucherSigner(account, voucherSigner)
90
101
  const signature = await signVoucher(
91
102
  client,
@@ -103,6 +114,7 @@ export async function createVoucherPayload(
103
114
  }
104
115
  }
105
116
 
117
+ /** Creates a legacy cooperative close credential payload. */
106
118
  export async function createClosePayload(
107
119
  client: viem_Client,
108
120
  account: viem_Account,
@@ -111,7 +123,7 @@ export async function createClosePayload(
111
123
  escrowContract: Address,
112
124
  chainId: number,
113
125
  voucherSigner?: viem_Account | undefined,
114
- ): Promise<SessionCredentialPayload> {
126
+ ): Promise<LegacySessionCredentialPayload> {
115
127
  const signer = resolveVoucherSigner(account, voucherSigner)
116
128
  const signature = await signVoucher(
117
129
  client,
@@ -129,6 +141,7 @@ export async function createClosePayload(
129
141
  }
130
142
  }
131
143
 
144
+ /** Creates a legacy open transaction credential payload and local channel entry. */
132
145
  export async function createOpenPayload(
133
146
  client: viem_Client,
134
147
  account: viem_Account,
@@ -142,7 +155,7 @@ export async function createOpenPayload(
142
155
  chainId: number
143
156
  feePayer?: boolean | undefined
144
157
  },
145
- ): Promise<{ entry: ChannelEntry; payload: SessionCredentialPayload }> {
158
+ ): Promise<{ entry: ChannelEntry; payload: LegacySessionCredentialPayload }> {
146
159
  const { escrowContract, payee, currency, deposit, initialAmount, chainId, feePayer } = options
147
160
  const voucherSigner = resolveVoucherSigner(account, options.voucherSigner)
148
161
  const authorizedSigner = getAccountSignerAddress(voucherSigner)
@@ -3,22 +3,21 @@ import { type Address, createClient, decodeFunctionData, erc20Abi, type Hex, htt
3
3
  import { privateKeyToAccount } from 'viem/accounts'
4
4
  import { Account as TempoAccount, Addresses, Transaction, WebCryptoP256 } from 'viem/tempo'
5
5
  import { beforeAll, describe, expect, test } from 'vp/test'
6
- import { nodeEnv } from '~test/config.js'
7
- import { deployEscrow, openChannel } from '~test/tempo/session.js'
6
+ import { tempoNetwork } from '~test/config.js'
7
+ import { deployEscrow, openChannel } from '~test/tempo/legacy/session.js'
8
8
  import { accounts, asset, chain, client, fundAccount } from '~test/tempo/viem.js'
9
9
 
10
- const isLocalnet = nodeEnv === 'localnet'
11
-
12
- import * as Challenge from '../../Challenge.js'
13
- import * as Credential from '../../Credential.js'
14
- import { chainId, escrowContract as escrowContractDefaults } from '../internal/defaults.js'
10
+ import * as Challenge from '../../../Challenge.js'
11
+ import * as Constants from '../../../Constants.js'
12
+ import * as Credential from '../../../Credential.js'
13
+ import { chainId, escrowContract as escrowContractDefaults } from '../../internal/defaults.js'
15
14
  import { escrowAbi } from '../session/Chain.js'
16
- import type { SessionCredentialPayload } from '../session/Types.js'
15
+ import type { LegacySessionCredentialPayload } from '../session/Types.js'
17
16
  import { verifyVoucher } from '../session/Voucher.js'
18
17
  import { session } from './Session.js'
19
18
 
20
19
  function deserializePayload(result: string) {
21
- const cred = Credential.deserialize<SessionCredentialPayload>(result)
20
+ const cred = Credential.deserialize<LegacySessionCredentialPayload>(result)
22
21
  return cred
23
22
  }
24
23
 
@@ -33,6 +32,7 @@ const pureClient = createClient({
33
32
  const escrowAddress = escrowContractDefaults[chainId.testnet] as Address
34
33
  const recipient = '0x2222222222222222222222222222222222222222' as Address
35
34
  const currency = '0x3333333333333333333333333333333333333333' as Address
35
+ const isLocalnet = tempoNetwork === 'localnet'
36
36
 
37
37
  function makeChallenge(overrides?: Record<string, unknown>) {
38
38
  return Challenge.from({
@@ -55,6 +55,48 @@ function makeChallenge(overrides?: Record<string, unknown>) {
55
55
  }
56
56
 
57
57
  describe('session (pure)', () => {
58
+ test('handles legacy and unmarked session challenges', () => {
59
+ const method = session({
60
+ getClient: () => pureClient,
61
+ account: pureAccount,
62
+ })
63
+
64
+ expect(method.canHandleChallenge?.({ challenge: makeChallenge() })).toBe(true)
65
+ expect(
66
+ method.canHandleChallenge?.({
67
+ challenge: makeChallenge({
68
+ methodDetails: {
69
+ chainId: 42431,
70
+ escrowContract: escrowAddress,
71
+ sessionProtocol: Constants.SessionProtocols.v1,
72
+ },
73
+ }),
74
+ }),
75
+ ).toBe(true)
76
+ expect(
77
+ method.canHandleChallenge?.({
78
+ challenge: makeChallenge({
79
+ methodDetails: {
80
+ chainId: 42431,
81
+ escrowContract: escrowAddress,
82
+ sessionProtocol: Constants.SessionProtocols.v2,
83
+ },
84
+ }),
85
+ }),
86
+ ).toBe(false)
87
+ expect(
88
+ method.canHandleChallenge?.({
89
+ challenge: makeChallenge({
90
+ methodDetails: {
91
+ chainId: 42431,
92
+ escrowContract: escrowAddress,
93
+ sessionProtocol: 'future' as never,
94
+ },
95
+ }),
96
+ }),
97
+ ).toBe(false)
98
+ })
99
+
58
100
  describe('error: no action and no deposit/maxDeposit', () => {
59
101
  test('throws when neither configured', async () => {
60
102
  const method = session({
@@ -2,15 +2,16 @@ import type { Hex } from 'ox'
2
2
  import { type Address, parseUnits, type Account as viem_Account } from 'viem'
3
3
  import { tempo as tempo_chain } from 'viem/tempo/chains'
4
4
 
5
- import type * as Challenge from '../../Challenge.js'
6
- import * as Method from '../../Method.js'
7
- import * as Account from '../../viem/Account.js'
8
- import * as Client from '../../viem/Client.js'
9
- import * as z from '../../zod.js'
10
- import { getAccountSignerAddress } from '../internal/account.js'
11
- import * as defaults from '../internal/defaults.js'
12
- import * as Methods from '../Methods.js'
13
- import type { SessionCredentialPayload } from '../session/Types.js'
5
+ import type * as Challenge from '../../../Challenge.js'
6
+ import * as Constants from '../../../Constants.js'
7
+ import * as Method from '../../../Method.js'
8
+ import * as Account from '../../../viem/Account.js'
9
+ import * as Client from '../../../viem/Client.js'
10
+ import * as z from '../../../zod.js'
11
+ import { getAccountSignerAddress } from '../../internal/account.js'
12
+ import * as defaults from '../../internal/defaults.js'
13
+ import * as Methods from '../../Methods.js'
14
+ import type { LegacySessionCredentialPayload } from '../session/Types.js'
14
15
  import { signVoucher } from '../session/Voucher.js'
15
16
  import {
16
17
  type ChannelEntry,
@@ -21,6 +22,7 @@ import {
21
22
  tryRecoverChannel,
22
23
  } from './ChannelOps.js'
23
24
 
25
+ /** Runtime schema for legacy low-level session credential context. */
24
26
  export const sessionContextSchema = z.object({
25
27
  account: z.optional(z.custom<Account.getResolver.Parameters['account']>()),
26
28
  action: z.optional(z.enum(['open', 'topUp', 'voucher', 'close'])),
@@ -33,6 +35,7 @@ export const sessionContextSchema = z.object({
33
35
  depositRaw: z.optional(z.string()),
34
36
  })
35
37
 
38
+ /** Context accepted by the legacy low-level session client method. */
36
39
  export type SessionContext = z.infer<typeof sessionContextSchema>
37
40
 
38
41
  /**
@@ -172,7 +175,7 @@ export function session(parameters: session.Parameters = {}) {
172
175
  }
173
176
  }
174
177
 
175
- let payload: SessionCredentialPayload
178
+ let payload: LegacySessionCredentialPayload
176
179
 
177
180
  if (entry?.opened) {
178
181
  entry.cumulativeAmount += amount
@@ -236,7 +239,7 @@ export function session(parameters: session.Parameters = {}) {
236
239
  const escrowContract = resolveEscrowCached(challenge, chainId, channelId)
237
240
  escrowContractMap.set(channelId, escrowContract)
238
241
 
239
- let payload: SessionCredentialPayload
242
+ let payload: LegacySessionCredentialPayload
240
243
 
241
244
  switch (action) {
242
245
  case 'open': {
@@ -335,6 +338,16 @@ export function session(parameters: session.Parameters = {}) {
335
338
  }
336
339
 
337
340
  return Method.toClient(Methods.session, {
341
+ canHandleChallenge({ challenge }) {
342
+ const sessionProtocolMarker = Constants.getMethodDetail(
343
+ challenge.request.methodDetails,
344
+ Constants.MethodDetailKeys.sessionProtocol,
345
+ )
346
+ return (
347
+ sessionProtocolMarker === undefined ||
348
+ sessionProtocolMarker === Constants.SessionProtocols.v1
349
+ )
350
+ },
338
351
  context: sessionContextSchema,
339
352
 
340
353
  async createCredential({ challenge, context }) {
@@ -354,6 +367,7 @@ export function session(parameters: session.Parameters = {}) {
354
367
  })
355
368
  }
356
369
 
370
+ /** Type helpers for the legacy low-level session client method. */
357
371
  export declare namespace session {
358
372
  type Parameters = Account.getResolver.Parameters &
359
373
  Client.getResolver.Parameters & {