viem 2.56.8 → 2.57.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 (359) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +0 -1
  3. package/_cjs/actions/index.js +5 -3
  4. package/_cjs/actions/index.js.map +1 -1
  5. package/_cjs/actions/public/getStorageValues.js +17 -0
  6. package/_cjs/actions/public/getStorageValues.js.map +1 -0
  7. package/_cjs/actions/public/simulateBlocks.js +2 -0
  8. package/_cjs/actions/public/simulateBlocks.js.map +1 -1
  9. package/_cjs/actions/public/waitForTransactionReceipt.js +12 -1
  10. package/_cjs/actions/public/waitForTransactionReceipt.js.map +1 -1
  11. package/_cjs/chains/definitions/blockdag.js +23 -0
  12. package/_cjs/chains/definitions/blockdag.js.map +1 -0
  13. package/_cjs/chains/definitions/candyChain.js +29 -0
  14. package/_cjs/chains/definitions/candyChain.js.map +1 -0
  15. package/_cjs/chains/definitions/creditCoin3Devnet.js +6 -0
  16. package/_cjs/chains/definitions/creditCoin3Devnet.js.map +1 -1
  17. package/_cjs/chains/definitions/creditCoin3Mainnet.js +6 -0
  18. package/_cjs/chains/definitions/creditCoin3Mainnet.js.map +1 -1
  19. package/_cjs/chains/definitions/creditCoin3Testnet.js +6 -0
  20. package/_cjs/chains/definitions/creditCoin3Testnet.js.map +1 -1
  21. package/_cjs/chains/definitions/kortana.js +23 -0
  22. package/_cjs/chains/definitions/kortana.js.map +1 -0
  23. package/_cjs/chains/definitions/rabbitChainTestnet.js +24 -0
  24. package/_cjs/chains/definitions/rabbitChainTestnet.js.map +1 -0
  25. package/_cjs/chains/index.js +22 -14
  26. package/_cjs/chains/index.js.map +1 -1
  27. package/_cjs/clients/createClientResolver.js +45 -0
  28. package/_cjs/clients/createClientResolver.js.map +1 -0
  29. package/_cjs/clients/decorators/public.js +2 -0
  30. package/_cjs/clients/decorators/public.js.map +1 -1
  31. package/_cjs/errors/version.js +1 -1
  32. package/_cjs/index.js +13 -9
  33. package/_cjs/index.js.map +1 -1
  34. package/_cjs/op-stack/actions/getGame.js +1 -1
  35. package/_cjs/op-stack/actions/getGame.js.map +1 -1
  36. package/_cjs/op-stack/actions/getGames.js +1 -1
  37. package/_cjs/op-stack/actions/getGames.js.map +1 -1
  38. package/_cjs/op-stack/actions/getTimeToNextGame.js +1 -1
  39. package/_cjs/op-stack/actions/getTimeToNextGame.js.map +1 -1
  40. package/_cjs/op-stack/actions/getTimeToNextL2Output.js +1 -1
  41. package/_cjs/op-stack/actions/getTimeToNextL2Output.js.map +1 -1
  42. package/_cjs/tempo/Abis.js +1211 -32
  43. package/_cjs/tempo/Abis.js.map +1 -1
  44. package/_cjs/tempo/Addresses.js +2 -1
  45. package/_cjs/tempo/Addresses.js.map +1 -1
  46. package/_cjs/tempo/Client.js +2 -10
  47. package/_cjs/tempo/Client.js.map +1 -1
  48. package/_cjs/tempo/Decorator.js +12 -0
  49. package/_cjs/tempo/Decorator.js.map +1 -1
  50. package/_cjs/tempo/ExecutionError.js +290 -0
  51. package/_cjs/tempo/ExecutionError.js.map +1 -0
  52. package/_cjs/tempo/Relay.js +88 -0
  53. package/_cjs/tempo/Relay.js.map +1 -0
  54. package/_cjs/tempo/Selectors.js +7 -4
  55. package/_cjs/tempo/Selectors.js.map +1 -1
  56. package/_cjs/tempo/Transaction.js.map +1 -1
  57. package/_cjs/tempo/Transport.js +21 -12
  58. package/_cjs/tempo/Transport.js.map +1 -1
  59. package/_cjs/tempo/actions/index.js +2 -1
  60. package/_cjs/tempo/actions/index.js.map +1 -1
  61. package/_cjs/tempo/actions/propAmm.js +349 -0
  62. package/_cjs/tempo/actions/propAmm.js.map +1 -0
  63. package/_cjs/tempo/chainConfig.js +3 -0
  64. package/_cjs/tempo/chainConfig.js.map +1 -1
  65. package/_cjs/tempo/index.js +3 -3
  66. package/_cjs/tempo/index.js.map +1 -1
  67. package/_cjs/tempo/internal/relay/cache.js +74 -0
  68. package/_cjs/tempo/internal/relay/cache.js.map +1 -0
  69. package/_cjs/tempo/internal/relay/deadline.js +35 -0
  70. package/_cjs/tempo/internal/relay/deadline.js.map +1 -0
  71. package/_cjs/tempo/internal/relay/error.js +102 -0
  72. package/_cjs/tempo/internal/relay/error.js.map +1 -0
  73. package/_cjs/tempo/internal/relay/feePayer.js +426 -0
  74. package/_cjs/tempo/internal/relay/feePayer.js.map +1 -0
  75. package/_cjs/tempo/internal/relay/feeToken.js +143 -0
  76. package/_cjs/tempo/internal/relay/feeToken.js.map +1 -0
  77. package/_cjs/tempo/{Multisig.js → internal/relay/multisig.js} +132 -122
  78. package/_cjs/tempo/internal/relay/multisig.js.map +1 -0
  79. package/_cjs/tempo/internal/relay/plugin.js +13 -0
  80. package/_cjs/tempo/internal/relay/plugin.js.map +1 -0
  81. package/_cjs/tempo/internal/relay/preflight.js +58 -0
  82. package/_cjs/tempo/internal/relay/preflight.js.map +1 -0
  83. package/_cjs/tempo/internal/relay/request.js +319 -0
  84. package/_cjs/tempo/internal/relay/request.js.map +1 -0
  85. package/_cjs/tempo/internal/relay/simulate.js +267 -0
  86. package/_cjs/tempo/internal/relay/simulate.js.map +1 -0
  87. package/_cjs/tempo/internal/relay/utils.js +174 -0
  88. package/_cjs/tempo/internal/relay/utils.js.map +1 -0
  89. package/_cjs/tempo/internal/relay/virtualAddress.js +78 -0
  90. package/_cjs/tempo/internal/relay/virtualAddress.js.map +1 -0
  91. package/_cjs/tempo/internal/relay.js +139 -0
  92. package/_cjs/tempo/internal/relay.js.map +1 -0
  93. package/_cjs/tempo/multisig/Config.js +0 -2
  94. package/_cjs/tempo/multisig/Config.js.map +1 -1
  95. package/_cjs/tempo/multisig/Operation.js +1 -2
  96. package/_cjs/tempo/multisig/Operation.js.map +1 -1
  97. package/_cjs/tokens/definitions/eurc.js +1 -0
  98. package/_cjs/tokens/definitions/eurc.js.map +1 -1
  99. package/_cjs/tokens/definitions/usdc.js +1 -0
  100. package/_cjs/tokens/definitions/usdc.js.map +1 -1
  101. package/_cjs/utils/siwe/parseSiweMessage.js +3 -3
  102. package/_cjs/utils/siwe/parseSiweMessage.js.map +1 -1
  103. package/_esm/actions/index.js +1 -0
  104. package/_esm/actions/index.js.map +1 -1
  105. package/_esm/actions/public/getStorageValues.js +39 -0
  106. package/_esm/actions/public/getStorageValues.js.map +1 -0
  107. package/_esm/actions/public/simulateBlocks.js +4 -0
  108. package/_esm/actions/public/simulateBlocks.js.map +1 -1
  109. package/_esm/actions/public/waitForTransactionReceipt.js +15 -1
  110. package/_esm/actions/public/waitForTransactionReceipt.js.map +1 -1
  111. package/_esm/chains/definitions/blockdag.js +20 -0
  112. package/_esm/chains/definitions/blockdag.js.map +1 -0
  113. package/_esm/chains/definitions/candyChain.js +26 -0
  114. package/_esm/chains/definitions/candyChain.js.map +1 -0
  115. package/_esm/chains/definitions/creditCoin3Devnet.js +6 -0
  116. package/_esm/chains/definitions/creditCoin3Devnet.js.map +1 -1
  117. package/_esm/chains/definitions/creditCoin3Mainnet.js +6 -0
  118. package/_esm/chains/definitions/creditCoin3Mainnet.js.map +1 -1
  119. package/_esm/chains/definitions/creditCoin3Testnet.js +6 -0
  120. package/_esm/chains/definitions/creditCoin3Testnet.js.map +1 -1
  121. package/_esm/chains/definitions/kortana.js +20 -0
  122. package/_esm/chains/definitions/kortana.js.map +1 -0
  123. package/_esm/chains/definitions/rabbitChainTestnet.js +21 -0
  124. package/_esm/chains/definitions/rabbitChainTestnet.js.map +1 -0
  125. package/_esm/chains/index.js +4 -0
  126. package/_esm/chains/index.js.map +1 -1
  127. package/_esm/clients/createClientResolver.js +64 -0
  128. package/_esm/clients/createClientResolver.js.map +1 -0
  129. package/_esm/clients/decorators/public.js +2 -0
  130. package/_esm/clients/decorators/public.js.map +1 -1
  131. package/_esm/errors/version.js +1 -1
  132. package/_esm/index.js +2 -0
  133. package/_esm/index.js.map +1 -1
  134. package/_esm/op-stack/actions/getGame.js +1 -1
  135. package/_esm/op-stack/actions/getGame.js.map +1 -1
  136. package/_esm/op-stack/actions/getGames.js +1 -1
  137. package/_esm/op-stack/actions/getGames.js.map +1 -1
  138. package/_esm/op-stack/actions/getTimeToNextGame.js +2 -2
  139. package/_esm/op-stack/actions/getTimeToNextGame.js.map +1 -1
  140. package/_esm/op-stack/actions/getTimeToNextL2Output.js +2 -2
  141. package/_esm/op-stack/actions/getTimeToNextL2Output.js.map +1 -1
  142. package/_esm/tempo/Abis.js +1214 -34
  143. package/_esm/tempo/Abis.js.map +1 -1
  144. package/_esm/tempo/Addresses.js +2 -0
  145. package/_esm/tempo/Addresses.js.map +1 -1
  146. package/_esm/tempo/Client.js +8 -14
  147. package/_esm/tempo/Client.js.map +1 -1
  148. package/_esm/tempo/Decorator.js +12 -0
  149. package/_esm/tempo/Decorator.js.map +1 -1
  150. package/_esm/tempo/ExecutionError.js +306 -0
  151. package/_esm/tempo/ExecutionError.js.map +1 -0
  152. package/_esm/tempo/Relay.js +170 -0
  153. package/_esm/tempo/Relay.js.map +1 -0
  154. package/_esm/tempo/Selectors.js +6 -3
  155. package/_esm/tempo/Selectors.js.map +1 -1
  156. package/_esm/tempo/Transaction.js.map +1 -1
  157. package/_esm/tempo/Transport.js +21 -46
  158. package/_esm/tempo/Transport.js.map +1 -1
  159. package/_esm/tempo/actions/index.js +1 -0
  160. package/_esm/tempo/actions/index.js.map +1 -1
  161. package/_esm/tempo/actions/propAmm.js +539 -0
  162. package/_esm/tempo/actions/propAmm.js.map +1 -0
  163. package/_esm/tempo/chainConfig.js +4 -0
  164. package/_esm/tempo/chainConfig.js.map +1 -1
  165. package/_esm/tempo/index.js +8 -3
  166. package/_esm/tempo/index.js.map +1 -1
  167. package/_esm/tempo/internal/relay/cache.js +72 -0
  168. package/_esm/tempo/internal/relay/cache.js.map +1 -0
  169. package/_esm/tempo/internal/relay/deadline.js +34 -0
  170. package/_esm/tempo/internal/relay/deadline.js.map +1 -0
  171. package/_esm/tempo/internal/relay/error.js +101 -0
  172. package/_esm/tempo/internal/relay/error.js.map +1 -0
  173. package/_esm/tempo/internal/relay/feePayer.js +442 -0
  174. package/_esm/tempo/internal/relay/feePayer.js.map +1 -0
  175. package/_esm/tempo/internal/relay/feeToken.js +143 -0
  176. package/_esm/tempo/internal/relay/feeToken.js.map +1 -0
  177. package/_esm/tempo/{Multisig.js → internal/relay/multisig.js} +133 -129
  178. package/_esm/tempo/internal/relay/multisig.js.map +1 -0
  179. package/_esm/tempo/internal/relay/plugin.js +10 -0
  180. package/_esm/tempo/internal/relay/plugin.js.map +1 -0
  181. package/_esm/tempo/internal/relay/preflight.js +57 -0
  182. package/_esm/tempo/internal/relay/preflight.js.map +1 -0
  183. package/_esm/tempo/internal/relay/request.js +321 -0
  184. package/_esm/tempo/internal/relay/request.js.map +1 -0
  185. package/_esm/tempo/internal/relay/simulate.js +277 -0
  186. package/_esm/tempo/internal/relay/simulate.js.map +1 -0
  187. package/_esm/tempo/internal/relay/utils.js +174 -0
  188. package/_esm/tempo/internal/relay/utils.js.map +1 -0
  189. package/_esm/tempo/internal/relay/virtualAddress.js +73 -0
  190. package/_esm/tempo/internal/relay/virtualAddress.js.map +1 -0
  191. package/_esm/tempo/internal/relay.js +138 -0
  192. package/_esm/tempo/internal/relay.js.map +1 -0
  193. package/_esm/tempo/multisig/Config.js +2 -1
  194. package/_esm/tempo/multisig/Config.js.map +1 -1
  195. package/_esm/tempo/multisig/Operation.js +1 -1
  196. package/_esm/tempo/multisig/Operation.js.map +1 -1
  197. package/_esm/tokens/definitions/eurc.js +1 -0
  198. package/_esm/tokens/definitions/eurc.js.map +1 -1
  199. package/_esm/tokens/definitions/usdc.js +1 -0
  200. package/_esm/tokens/definitions/usdc.js.map +1 -1
  201. package/_esm/utils/siwe/parseSiweMessage.js +3 -3
  202. package/_esm/utils/siwe/parseSiweMessage.js.map +1 -1
  203. package/_types/actions/index.d.ts +1 -0
  204. package/_types/actions/index.d.ts.map +1 -1
  205. package/_types/actions/public/getStorageValues.d.ts +59 -0
  206. package/_types/actions/public/getStorageValues.d.ts.map +1 -0
  207. package/_types/actions/public/simulateBlocks.d.ts +8 -0
  208. package/_types/actions/public/simulateBlocks.d.ts.map +1 -1
  209. package/_types/actions/public/waitForTransactionReceipt.d.ts.map +1 -1
  210. package/_types/chains/definitions/blockdag.d.ts +51 -0
  211. package/_types/chains/definitions/blockdag.d.ts.map +1 -0
  212. package/_types/chains/definitions/candyChain.d.ts +48 -0
  213. package/_types/chains/definitions/candyChain.d.ts.map +1 -0
  214. package/_types/chains/definitions/creditCoin3Devnet.d.ts +6 -9
  215. package/_types/chains/definitions/creditCoin3Devnet.d.ts.map +1 -1
  216. package/_types/chains/definitions/creditCoin3Mainnet.d.ts +6 -9
  217. package/_types/chains/definitions/creditCoin3Mainnet.d.ts.map +1 -1
  218. package/_types/chains/definitions/creditCoin3Testnet.d.ts +6 -9
  219. package/_types/chains/definitions/creditCoin3Testnet.d.ts.map +1 -1
  220. package/_types/chains/definitions/kortana.d.ts +51 -0
  221. package/_types/chains/definitions/kortana.d.ts.map +1 -0
  222. package/_types/chains/definitions/rabbitChainTestnet.d.ts +51 -0
  223. package/_types/chains/definitions/rabbitChainTestnet.d.ts.map +1 -0
  224. package/_types/chains/index.d.ts +4 -0
  225. package/_types/chains/index.d.ts.map +1 -1
  226. package/_types/clients/createClientResolver.d.ts +76 -0
  227. package/_types/clients/createClientResolver.d.ts.map +1 -0
  228. package/_types/clients/decorators/public.d.ts +11 -0
  229. package/_types/clients/decorators/public.d.ts.map +1 -1
  230. package/_types/errors/version.d.ts +1 -1
  231. package/_types/index.d.ts +3 -0
  232. package/_types/index.d.ts.map +1 -1
  233. package/_types/op-stack/actions/getGame.d.ts.map +1 -1
  234. package/_types/tempo/Abis.d.ts +14686 -9568
  235. package/_types/tempo/Abis.d.ts.map +1 -1
  236. package/_types/tempo/Addresses.d.ts +2 -0
  237. package/_types/tempo/Addresses.d.ts.map +1 -1
  238. package/_types/tempo/Capabilities.d.ts +7 -28
  239. package/_types/tempo/Capabilities.d.ts.map +1 -1
  240. package/_types/tempo/Client.d.ts +6 -15
  241. package/_types/tempo/Client.d.ts.map +1 -1
  242. package/_types/tempo/Decorator.d.ts +205 -1
  243. package/_types/tempo/Decorator.d.ts.map +1 -1
  244. package/_types/tempo/ExecutionError.d.ts +79 -0
  245. package/_types/tempo/ExecutionError.d.ts.map +1 -0
  246. package/_types/tempo/Relay.d.ts +302 -0
  247. package/_types/tempo/Relay.d.ts.map +1 -0
  248. package/_types/tempo/Selectors.d.ts +6 -3
  249. package/_types/tempo/Selectors.d.ts.map +1 -1
  250. package/_types/tempo/Transaction.d.ts +2 -1
  251. package/_types/tempo/Transaction.d.ts.map +1 -1
  252. package/_types/tempo/Transport.d.ts +15 -29
  253. package/_types/tempo/Transport.d.ts.map +1 -1
  254. package/_types/tempo/actions/earn.d.ts +621 -1
  255. package/_types/tempo/actions/earn.d.ts.map +1 -1
  256. package/_types/tempo/actions/index.d.ts +1 -0
  257. package/_types/tempo/actions/index.d.ts.map +1 -1
  258. package/_types/tempo/actions/propAmm.d.ts +2228 -0
  259. package/_types/tempo/actions/propAmm.d.ts.map +1 -0
  260. package/_types/tempo/chainConfig.d.ts.map +1 -1
  261. package/_types/tempo/index.d.ts +8 -3
  262. package/_types/tempo/index.d.ts.map +1 -1
  263. package/_types/tempo/internal/relay/cache.d.ts +9 -0
  264. package/_types/tempo/internal/relay/cache.d.ts.map +1 -0
  265. package/_types/tempo/internal/relay/deadline.d.ts +4 -0
  266. package/_types/tempo/internal/relay/deadline.d.ts.map +1 -0
  267. package/_types/tempo/internal/relay/error.d.ts +47 -0
  268. package/_types/tempo/internal/relay/error.d.ts.map +1 -0
  269. package/_types/tempo/internal/relay/feePayer.d.ts +70 -0
  270. package/_types/tempo/internal/relay/feePayer.d.ts.map +1 -0
  271. package/_types/tempo/internal/relay/feeToken.d.ts +38 -0
  272. package/_types/tempo/internal/relay/feeToken.d.ts.map +1 -0
  273. package/_types/tempo/internal/relay/multisig.d.ts +4 -0
  274. package/_types/tempo/internal/relay/multisig.d.ts.map +1 -0
  275. package/_types/tempo/internal/relay/plugin.d.ts +5 -0
  276. package/_types/tempo/internal/relay/plugin.d.ts.map +1 -0
  277. package/_types/tempo/internal/relay/preflight.d.ts +17 -0
  278. package/_types/tempo/internal/relay/preflight.d.ts.map +1 -0
  279. package/_types/tempo/internal/relay/request.d.ts +16 -0
  280. package/_types/tempo/internal/relay/request.d.ts.map +1 -0
  281. package/_types/tempo/internal/relay/simulate.d.ts +59 -0
  282. package/_types/tempo/internal/relay/simulate.d.ts.map +1 -0
  283. package/_types/tempo/internal/relay/utils.d.ts +294 -0
  284. package/_types/tempo/internal/relay/utils.d.ts.map +1 -0
  285. package/_types/tempo/internal/relay/virtualAddress.d.ts +9 -0
  286. package/_types/tempo/internal/relay/virtualAddress.d.ts.map +1 -0
  287. package/_types/tempo/internal/relay.d.ts +4 -0
  288. package/_types/tempo/internal/relay.d.ts.map +1 -0
  289. package/_types/tempo/multisig/Config.d.ts +0 -13
  290. package/_types/tempo/multisig/Config.d.ts.map +1 -1
  291. package/_types/tempo/multisig/Operation.d.ts +0 -5
  292. package/_types/tempo/multisig/Operation.d.ts.map +1 -1
  293. package/_types/tokens/definitions/eurc.d.ts +1 -0
  294. package/_types/tokens/definitions/eurc.d.ts.map +1 -1
  295. package/_types/tokens/definitions/usdc.d.ts +1 -0
  296. package/_types/tokens/definitions/usdc.d.ts.map +1 -1
  297. package/_types/tokens/sets.d.ts +3 -0
  298. package/_types/tokens/sets.d.ts.map +1 -1
  299. package/_types/types/eip1193.d.ts +20 -0
  300. package/_types/types/eip1193.d.ts.map +1 -1
  301. package/_types/utils/siwe/parseSiweMessage.d.ts.map +1 -1
  302. package/actions/index.ts +6 -0
  303. package/actions/public/getStorageValues.ts +93 -0
  304. package/actions/public/simulateBlocks.ts +13 -0
  305. package/actions/public/waitForTransactionReceipt.ts +16 -2
  306. package/chains/definitions/blockdag.ts +20 -0
  307. package/chains/definitions/candyChain.ts +26 -0
  308. package/chains/definitions/creditCoin3Devnet.ts +6 -0
  309. package/chains/definitions/creditCoin3Mainnet.ts +6 -0
  310. package/chains/definitions/creditCoin3Testnet.ts +6 -0
  311. package/chains/definitions/kortana.ts +20 -0
  312. package/chains/definitions/rabbitChainTestnet.ts +21 -0
  313. package/chains/index.ts +4 -0
  314. package/clients/createClientResolver.ts +191 -0
  315. package/clients/decorators/public.ts +18 -0
  316. package/errors/version.ts +1 -1
  317. package/index.ts +11 -0
  318. package/op-stack/actions/getGame.ts +3 -1
  319. package/op-stack/actions/getGames.ts +1 -1
  320. package/op-stack/actions/getTimeToNextGame.ts +2 -2
  321. package/op-stack/actions/getTimeToNextL2Output.ts +2 -2
  322. package/package.json +1 -1
  323. package/tempo/Abis.ts +1218 -34
  324. package/tempo/Addresses.ts +2 -0
  325. package/tempo/Capabilities.ts +7 -29
  326. package/tempo/Client.ts +8 -38
  327. package/tempo/Decorator.ts +239 -3
  328. package/tempo/ExecutionError.ts +418 -0
  329. package/tempo/Relay.ts +428 -0
  330. package/tempo/Selectors.ts +10 -4
  331. package/tempo/Transaction.ts +2 -1
  332. package/tempo/Transport.ts +69 -60
  333. package/tempo/actions/index.ts +1 -0
  334. package/tempo/actions/propAmm.ts +998 -0
  335. package/tempo/chainConfig.ts +4 -0
  336. package/tempo/index.ts +7 -3
  337. package/tempo/internal/relay/cache.ts +82 -0
  338. package/tempo/internal/relay/deadline.ts +45 -0
  339. package/tempo/internal/relay/error.ts +128 -0
  340. package/tempo/internal/relay/feePayer.ts +692 -0
  341. package/tempo/internal/relay/feeToken.ts +190 -0
  342. package/tempo/{Multisig.ts → internal/relay/multisig.ts} +162 -193
  343. package/tempo/internal/relay/plugin.ts +13 -0
  344. package/tempo/internal/relay/preflight.ts +81 -0
  345. package/tempo/internal/relay/request.ts +391 -0
  346. package/tempo/internal/relay/simulate.ts +367 -0
  347. package/tempo/internal/relay/utils.ts +202 -0
  348. package/tempo/internal/relay/virtualAddress.ts +95 -0
  349. package/tempo/internal/relay.ts +158 -0
  350. package/tempo/multisig/Config.ts +3 -2
  351. package/tempo/multisig/Operation.ts +1 -1
  352. package/tokens/definitions/eurc.ts +1 -0
  353. package/tokens/definitions/usdc.ts +1 -0
  354. package/types/eip1193.ts +20 -0
  355. package/utils/siwe/parseSiweMessage.ts +21 -13
  356. package/_cjs/tempo/Multisig.js.map +0 -1
  357. package/_esm/tempo/Multisig.js.map +0 -1
  358. package/_types/tempo/Multisig.d.ts +0 -37
  359. package/_types/tempo/Multisig.d.ts.map +0 -1
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoped = scoped;
4
+ exports.memoize = memoize;
5
+ const withTimeout_js_1 = require("../../../utils/promise/withTimeout.js");
6
+ const flights = new WeakMap();
7
+ const prefix = 'viem:relay:cache:';
8
+ function scoped(store) {
9
+ if (!store)
10
+ return undefined;
11
+ return {
12
+ getItem: (key) => store.getItem(key),
13
+ setItem: (key, value) => store.setItem(key, value),
14
+ removeItem: (key) => store.removeItem(key),
15
+ };
16
+ }
17
+ async function memoize(fetch, options) {
18
+ const { store, ttl } = options;
19
+ const key = `${prefix}${options.key}`;
20
+ let active = true;
21
+ const timeoutError = new Error('Relay cache operation timed out.');
22
+ return (0, withTimeout_js_1.withTimeout)(async () => {
23
+ const raw = await store.getItem(key);
24
+ if (!active)
25
+ throw timeoutError;
26
+ if (raw) {
27
+ try {
28
+ const entry = JSON.parse(raw, (_key, item) => {
29
+ if (typeof item !== 'string' || !item.startsWith(prefix))
30
+ return item;
31
+ if (item.startsWith(`${prefix}string:`))
32
+ return item.slice(`${prefix}string:`.length);
33
+ if (item.startsWith(`${prefix}bigint:`))
34
+ return BigInt(item.slice(`${prefix}bigint:`.length));
35
+ throw new TypeError('Invalid relay cache value.');
36
+ });
37
+ if (entry.expiresAt > Date.now())
38
+ return entry.value;
39
+ }
40
+ catch {
41
+ }
42
+ }
43
+ let pending = flights.get(store);
44
+ if (!pending) {
45
+ pending = new Map();
46
+ flights.set(store, pending);
47
+ }
48
+ const existing = pending.get(key);
49
+ if (existing)
50
+ return existing;
51
+ const result = (async () => {
52
+ const value = await fetch();
53
+ if (!active)
54
+ throw timeoutError;
55
+ if (value !== undefined)
56
+ await store.setItem(key, JSON.stringify({ value, expiresAt: Date.now() + ttl }, (_key, item) => {
57
+ if (typeof item === 'bigint')
58
+ return `${prefix}bigint:${item}`;
59
+ if (typeof item === 'string' && item.startsWith(prefix))
60
+ return `${prefix}string:${item}`;
61
+ return item;
62
+ }));
63
+ return value;
64
+ })().finally(() => pending.delete(key));
65
+ pending.set(key, result);
66
+ return result;
67
+ }, {
68
+ timeout: 30_000,
69
+ errorInstance: timeoutError,
70
+ }).finally(() => {
71
+ active = false;
72
+ });
73
+ }
74
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../tempo/internal/relay/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.run = run;
4
+ const ox_1 = require("ox");
5
+ async function run(handler, request, options, config) {
6
+ const controller = new AbortController();
7
+ const abort = () => controller.abort(options.signal?.reason);
8
+ options.signal?.addEventListener('abort', abort, { once: true });
9
+ if (options.signal?.aborted)
10
+ abort();
11
+ const timeout = setTimeout(() => controller.abort(new ox_1.RpcResponse.LimitExceededError({
12
+ message: 'Relay fill exceeded its deadline.',
13
+ })), config.timeout ?? 10_000);
14
+ const signal = controller.signal;
15
+ let rejectAbort;
16
+ const aborted = new Promise((_, reject) => {
17
+ rejectAbort = reject;
18
+ });
19
+ const onAbort = () => rejectAbort(signal.reason);
20
+ signal.addEventListener('abort', onAbort, { once: true });
21
+ try {
22
+ signal.throwIfAborted();
23
+ return await Promise.race([
24
+ handler(request, { ...options, signal }),
25
+ aborted,
26
+ ]);
27
+ }
28
+ finally {
29
+ clearTimeout(timeout);
30
+ options.signal?.removeEventListener('abort', abort);
31
+ signal.removeEventListener('abort', onAbort);
32
+ controller.abort();
33
+ }
34
+ }
35
+ //# sourceMappingURL=deadline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deadline.js","sourceRoot":"","sources":["../../../../tempo/internal/relay/deadline.ts"],"names":[],"mappings":";;AAIA,kBAwCC;AA5CD,2BAAgC;AAIzB,KAAK,UAAU,GAAG,CACvB,OAAoC,EACpC,OAAoC,EACpC,OAA2C,EAC3C,MAAmC;IAEnC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5D,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChE,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;QAAE,KAAK,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CACH,UAAU,CAAC,KAAK,CACd,IAAI,gBAAW,CAAC,kBAAkB,CAAC;QACjC,OAAO,EAAE,mCAAmC;KAC7C,CAAC,CACH,EACH,MAAM,CAAC,OAAO,IAAI,MAAM,CACzB,CAAA;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;IAEhC,IAAI,WAAuC,CAAA;IAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC/C,WAAW,GAAG,MAAM,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAChD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,IAAI,CAAC;QACH,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;YACxC,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACnD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAE5C,UAAU,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isExecutionError = isExecutionError;
4
+ exports.formatError = formatError;
5
+ const ox_1 = require("ox");
6
+ const address_js_1 = require("../../../constants/address.js");
7
+ const formatUnits_js_1 = require("../../../utils/unit/formatUnits.js");
8
+ const ExecutionError = require("../../ExecutionError.js");
9
+ const feeToken_js_1 = require("./feeToken.js");
10
+ const simulate_js_1 = require("./simulate.js");
11
+ const Utils = require("./utils.js");
12
+ const virtualAddress_js_1 = require("./virtualAddress.js");
13
+ function isExecutionError(error) {
14
+ if (!(error instanceof Error))
15
+ return false;
16
+ const seen = new Set();
17
+ const pending = [error];
18
+ while (pending.length) {
19
+ const current = pending.pop();
20
+ if (!current || typeof current !== 'object' || seen.has(current))
21
+ continue;
22
+ seen.add(current);
23
+ const candidate = current;
24
+ if (candidate.code === 3 ||
25
+ candidate.name === 'UpstreamRevertError' ||
26
+ candidate.name === 'ExecutionRevertedError' ||
27
+ candidate.name === 'ContractFunctionRevertedError' ||
28
+ [candidate.message, candidate.details].some((message) => typeof message === 'string' && /^execution reverted\b/i.test(message)))
29
+ return true;
30
+ pending.push(candidate.cause, candidate.error);
31
+ }
32
+ return false;
33
+ }
34
+ async function formatError(error, parameters, client, simulateStore) {
35
+ const revert = ExecutionError.from(error);
36
+ const stub = {
37
+ from: parameters.from,
38
+ to: parameters.to ?? null,
39
+ gas: '0x0',
40
+ nonce: '0x0',
41
+ value: '0x0',
42
+ maxFeePerGas: '0x0',
43
+ maxPriorityFeePerGas: '0x0',
44
+ };
45
+ if (revert.errorName === 'InsufficientBalance' && revert.args?.length === 3) {
46
+ const [available, required, token] = revert.args;
47
+ const normalized = Utils.normalizeFillTransactionRequest(parameters);
48
+ const optimisticCalls = normalized ? (0, virtualAddress_js_1.extractCalls)(normalized) : undefined;
49
+ const [{ balanceDiffs, tokenMetadata }, virtualAddresses] = optimisticCalls
50
+ ? await Promise.all([
51
+ (0, simulate_js_1.simulateAndParseDiffs)(client, {
52
+ account: address_js_1.zeroAddress,
53
+ calls: optimisticCalls,
54
+ store: simulateStore,
55
+ }),
56
+ (0, virtualAddress_js_1.resolveVirtualAddresses)(client, { calls: optimisticCalls }).catch(() => undefined),
57
+ ])
58
+ : [{ balanceDiffs: undefined, tokenMetadata: undefined }, undefined];
59
+ const senderDiffs = parameters.from && balanceDiffs
60
+ ? { [parameters.from]: balanceDiffs[address_js_1.zeroAddress] ?? [] }
61
+ : balanceDiffs;
62
+ const metadata = await (0, feeToken_js_1.resolveTokenMetadata)(client, {
63
+ token,
64
+ tokenMetadata,
65
+ store: simulateStore,
66
+ }).catch(() => undefined);
67
+ const deficit = required - available;
68
+ return {
69
+ tx: stub,
70
+ capabilities: {
71
+ balanceDiffs: senderDiffs,
72
+ error: ExecutionError.serialize(revert),
73
+ insufficientFunds: metadata
74
+ ? {
75
+ amount: ox_1.Hex.fromNumber(deficit),
76
+ decimals: metadata.decimals,
77
+ formatted: (0, formatUnits_js_1.formatUnits)(deficit, metadata.decimals),
78
+ token,
79
+ symbol: metadata.symbol,
80
+ }
81
+ : undefined,
82
+ sponsored: false,
83
+ ...(virtualAddresses ? { virtualAddresses } : {}),
84
+ },
85
+ };
86
+ }
87
+ const normalized = Utils.normalizeFillTransactionRequest(parameters);
88
+ const virtualAddresses = normalized
89
+ ? await (0, virtualAddress_js_1.resolveVirtualAddresses)(client, {
90
+ calls: (0, virtualAddress_js_1.extractCalls)(normalized),
91
+ }).catch(() => undefined)
92
+ : undefined;
93
+ return {
94
+ tx: stub,
95
+ capabilities: {
96
+ error: ExecutionError.serialize(revert),
97
+ sponsored: false,
98
+ ...(virtualAddresses ? { virtualAddresses } : {}),
99
+ },
100
+ };
101
+ }
102
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../tempo/internal/relay/error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExternalFeePayerUrl = void 0;
4
+ exports.create = create;
5
+ exports.sign = sign;
6
+ const ox_1 = require("ox");
7
+ const tempo_1 = require("ox/tempo");
8
+ const createClient_js_1 = require("../../../clients/createClient.js");
9
+ const http_js_1 = require("../../../clients/transports/http.js");
10
+ const Transaction = require("../../Transaction.js");
11
+ const Request = require("./request.js");
12
+ const Utils = require("./utils.js");
13
+ function create(options) {
14
+ const authorized = new WeakMap();
15
+ const allowedFeePayers = new Set(options.allowedFeePayers?.map((url) => ExternalFeePayerUrl.normalize(url, {
16
+ allowUnsafe: options.internal_allowUnsafeUrls,
17
+ })));
18
+ return {
19
+ async handleRequest(context, next) {
20
+ const { request } = context;
21
+ if (![
22
+ 'eth_fillTransaction',
23
+ 'eth_signRawTransaction',
24
+ 'eth_sendRawTransaction',
25
+ 'eth_sendRawTransactionSync',
26
+ ].includes(request.method))
27
+ return next();
28
+ const { client, getClient, options: requestOptions } = context;
29
+ const chainId = requestOptions.chainId;
30
+ const getTokens = (id) => context.resolveTokens(id);
31
+ const record = (details) => {
32
+ if (details && requestOptions.response)
33
+ requestOptions.response.sponsorship_details = details;
34
+ };
35
+ if (request.method !== 'eth_fillTransaction') {
36
+ if (!options.account) {
37
+ if (request.method === 'eth_signRawTransaction')
38
+ throw new ox_1.RpcResponse.MethodNotFoundError({
39
+ message: 'eth_signRawTransaction requires a fee payer to be configured on the relay. Add `Relay.feePayer({ account })` to enable transaction sponsorship.',
40
+ });
41
+ return next();
42
+ }
43
+ const serialized = request.params?.[0];
44
+ if (typeof serialized !== 'string' ||
45
+ !requestsRawSponsorship(serialized))
46
+ return next();
47
+ const result = await handleRawTransaction({
48
+ ...options,
49
+ account: options.account,
50
+ getClient,
51
+ getFeeToken: async (id) => (await getTokens(id))[0],
52
+ method: request.method,
53
+ request,
54
+ });
55
+ record(result.sponsorshipDetails);
56
+ return result.result;
57
+ }
58
+ const parameters = request.params[0];
59
+ const { feePayer: _, ...normalized } = Utils.normalizeFillTransactionRequest(parameters);
60
+ const external = typeof parameters.feePayer === 'string'
61
+ ? ExternalFeePayerUrl.normalize(parameters.feePayer, {
62
+ allowUnsafe: options.internal_allowUnsafeUrls ?? false,
63
+ })
64
+ : undefined;
65
+ if (external && !allowedFeePayers.has(external))
66
+ throw new ox_1.RpcResponse.InvalidParamsError({
67
+ message: 'External fee payer URL is not allowed.',
68
+ });
69
+ const wantsSponsorship = (!!options.account || !!external) && parameters.feePayer !== false;
70
+ if (options.account && !external)
71
+ delete normalized.feePayerSignature;
72
+ const base = { ...normalized, chainId };
73
+ if (!wantsSponsorship)
74
+ return Request.fill(client, base);
75
+ const token = options.feeToken ??
76
+ parameters.feeToken ??
77
+ (!options.validate || external
78
+ ? (await getTokens(chainId))[0]
79
+ : undefined);
80
+ const transaction = {
81
+ ...base,
82
+ feePayer: true,
83
+ ...(token ? { feeToken: token } : {}),
84
+ };
85
+ const prepared = isPreparedTransaction(transaction);
86
+ const fillClient = external
87
+ ? (0, createClient_js_1.createClient)({
88
+ chain: client.chain,
89
+ transport: (0, http_js_1.http)(external, {
90
+ fetchOptions: { redirect: 'error' },
91
+ retryCount: 0,
92
+ }),
93
+ })
94
+ : client;
95
+ const result = prepared && !external
96
+ ? { tx: transaction }
97
+ : await Request.fill(fillClient, transaction, external ? { ...requestOptions, retryCount: 0 } : requestOptions);
98
+ const filled = Utils.normalizeTempoTransaction(result.tx);
99
+ if ((!prepared || parameters.feePayer !== true) &&
100
+ filled.gas &&
101
+ !filled.feePayerSignature)
102
+ filled.gas += 20000n;
103
+ if (token && (!external || filled.feeToken == null))
104
+ Object.assign(filled, { feeToken: token });
105
+ const sponsored = external ||
106
+ !options.validate ||
107
+ (await shouldSponsor({
108
+ sender: parameters.from,
109
+ transaction: filled,
110
+ validate: options.validate,
111
+ }));
112
+ if (!sponsored)
113
+ return Request.fill(client, { ...base, feePayer: false });
114
+ const defer = typeof normalized.multisigSimulation === 'object' &&
115
+ normalized.multisigSimulation !== null;
116
+ const sponsor = sponsored
117
+ ? external
118
+ ? (result.capabilities?.sponsor ?? result.sponsor)
119
+ : options.account
120
+ ? getSponsor({ ...options, account: options.account })
121
+ : undefined
122
+ : undefined;
123
+ if (options.account && !external && !defer) {
124
+ delete filled.signature;
125
+ if (!filled.from)
126
+ filled.from = parameters.from;
127
+ authorized.set(context, tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(tempo_1.TxEnvelopeTempo.from(filled), { sender: filled.from }));
128
+ }
129
+ return {
130
+ ...result,
131
+ ...(sponsor ? { sponsor } : {}),
132
+ tx: Utils.formatTempoTransaction(filled),
133
+ capabilities: {
134
+ ...result.capabilities,
135
+ sponsored: external
136
+ ? (result.capabilities?.sponsored ?? !!sponsor)
137
+ : !!sponsor,
138
+ ...(sponsor ? { sponsor } : {}),
139
+ },
140
+ };
141
+ },
142
+ async signTransaction(result, context) {
143
+ const approved = authorized.get(context);
144
+ authorized.delete(context);
145
+ const parameters = context.request.params[0];
146
+ if (!approved ||
147
+ !options.account ||
148
+ typeof parameters.feePayer === 'string' ||
149
+ parameters.feePayer === false ||
150
+ !result.capabilities?.sponsored ||
151
+ (typeof parameters.multisigSimulation === 'object' &&
152
+ parameters.multisigSimulation !== null))
153
+ return undefined;
154
+ const transaction = Utils.normalizeTempoTransaction(result.tx);
155
+ const payload = tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(tempo_1.TxEnvelopeTempo.from(transaction), { sender: (transaction.from ?? parameters.from) });
156
+ if (payload !== approved)
157
+ throw new ox_1.RpcResponse.InvalidParamsError({
158
+ message: 'Sponsored transaction changed after validation.',
159
+ });
160
+ const signed = await sign({
161
+ account: options.account,
162
+ onSponsored: options.onSponsored,
163
+ sender: parameters.from,
164
+ transaction,
165
+ signal: context.options.signal,
166
+ });
167
+ if (signed.sponsorshipDetails && context.options.response)
168
+ context.options.response.sponsorship_details = signed.sponsorshipDetails;
169
+ const tx = Utils.formatTempoTransaction(signed.transaction);
170
+ return tx.feePayerSignature;
171
+ },
172
+ };
173
+ }
174
+ const refusalMessages = {
175
+ billing_past_due: 'Billing past due.',
176
+ billing_required: 'Billing required.',
177
+ fee_token_unsupported: 'Fee token unsupported.',
178
+ spend_limit_exceeded: 'Spend limit exceeded.',
179
+ tx_fee_limit_exceeded: 'Transaction fee limit exceeded.',
180
+ };
181
+ function getSponsor(options) {
182
+ const { account, name, url } = options;
183
+ return {
184
+ address: account.address,
185
+ ...(name ? { name } : {}),
186
+ ...(url ? { url } : {}),
187
+ };
188
+ }
189
+ async function shouldSponsor(options) {
190
+ const { sender, transaction, validate } = options;
191
+ if (!validate)
192
+ return true;
193
+ const verdict = await validate({
194
+ ...transaction,
195
+ from: sender,
196
+ });
197
+ return verdict === true;
198
+ }
199
+ function requestsRawSponsorship(serialized) {
200
+ if (!Utils.isSerializedTempoTransaction(serialized))
201
+ return false;
202
+ const transaction = Transaction.deserialize(serialized);
203
+ return ('feePayerSignature' in transaction && transaction.feePayerSignature === null);
204
+ }
205
+ function isPreparedTransaction(value) {
206
+ return (typeof value.from === 'string' &&
207
+ typeof Utils.resolveChainId(value.chainId) === 'number' &&
208
+ typeof value.gas !== 'undefined' &&
209
+ typeof value.nonce !== 'undefined' &&
210
+ (typeof value.maxFeePerGas !== 'undefined' ||
211
+ typeof value.gasPrice !== 'undefined'));
212
+ }
213
+ async function sign(options) {
214
+ const { account, transaction, sender } = options;
215
+ const from = transaction.from ?? sender;
216
+ const { signature: _, ...withoutSenderSig } = transaction;
217
+ const prepared = { ...withoutSenderSig, from };
218
+ if (!prepared.from)
219
+ throw new ox_1.RpcResponse.InvalidParamsError({
220
+ message: 'Transaction sender must be provided before fee payer signing.',
221
+ });
222
+ if (!account.sign)
223
+ throw new Error('Fee payer account cannot sign transactions.');
224
+ const chainId = Utils.resolveChainId(transaction.chainId);
225
+ if (chainId === undefined)
226
+ throw new ox_1.RpcResponse.InvalidParamsError({
227
+ message: 'Transaction chainId must be provided before fee payer signing.',
228
+ });
229
+ const envelope = tempo_1.TxEnvelopeTempo.from(prepared);
230
+ const signPayload = tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(envelope, {
231
+ sender: prepared.from,
232
+ });
233
+ options.signal?.throwIfAborted();
234
+ const feePayerSignature = ox_1.Signature.from(await account.sign({ hash: signPayload }));
235
+ options.signal?.throwIfAborted();
236
+ const feeToken = transaction.feeToken;
237
+ const sponsorshipDetails = await options.onSponsored?.({
238
+ chainId,
239
+ ...(feeToken ? { feeToken } : {}),
240
+ method: 'eth_fillTransaction',
241
+ sender: prepared.from,
242
+ signPayload,
243
+ transaction: tempo_1.TxEnvelopeTempo.serialize(envelope, { feePayerSignature }),
244
+ });
245
+ return {
246
+ ...(sponsorshipDetails ? { sponsorshipDetails } : {}),
247
+ transaction: { ...prepared, feePayerSignature },
248
+ };
249
+ }
250
+ async function handleRawTransaction(options) {
251
+ const { account, feeToken: sponsorFeeToken, getClient, method, request, validate, } = options;
252
+ const serialized = request.params?.[0];
253
+ if (!Utils.isSerializedTempoTransaction(serialized))
254
+ throw new ox_1.RpcResponse.InvalidParamsError({
255
+ message: 'Only Tempo (0x76/0x78) transactions are supported.',
256
+ });
257
+ const transaction = Transaction.deserialize(serialized);
258
+ const sender = transaction.from ?? options.sender;
259
+ if (!transaction.signature || !sender)
260
+ throw new ox_1.RpcResponse.InvalidParamsError({
261
+ message: 'Transaction must be signed by the sender before fee payer signing.',
262
+ });
263
+ if (!account.sign)
264
+ throw new Error('Fee payer account cannot sign transactions.');
265
+ const client = getClient(transaction.chainId);
266
+ const feeToken_chain = client.chain?.feeToken;
267
+ const feeToken = transaction.feeToken ??
268
+ sponsorFeeToken ??
269
+ (await options.getFeeToken?.(transaction.chainId)) ??
270
+ feeToken_chain;
271
+ const transaction_sponsored = feeToken
272
+ ? { ...transaction, feeToken }
273
+ : transaction;
274
+ if (validate) {
275
+ const verdict = await validate(transaction_sponsored);
276
+ if (verdict !== true)
277
+ throw new ox_1.RpcResponse.InvalidParamsError(verdict === false
278
+ ? { message: 'Sponsorship rejected.' }
279
+ : { data: { code: verdict }, message: refusalMessages[verdict] });
280
+ }
281
+ const envelope = tempo_1.TxEnvelopeTempo.from(transaction_sponsored);
282
+ const signPayload = tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(envelope, {
283
+ sender,
284
+ });
285
+ const feePayerSignature = ox_1.Signature.from(await account.sign({ hash: signPayload }));
286
+ const serializedTransaction = tempo_1.TxEnvelopeTempo.serialize(envelope, {
287
+ feePayerSignature,
288
+ signature: transaction.signature,
289
+ });
290
+ const sponsorshipDetails = await options.onSponsored?.({
291
+ chainId: transaction.chainId,
292
+ ...(feeToken ? { feeToken } : {}),
293
+ method,
294
+ sender,
295
+ signPayload,
296
+ transaction: serializedTransaction,
297
+ transactionHash: ox_1.Hash.keccak256(serializedTransaction),
298
+ });
299
+ const result = method === 'eth_signRawTransaction'
300
+ ? serializedTransaction
301
+ : await client.request({
302
+ method: method,
303
+ params: [
304
+ serializedTransaction,
305
+ ...(request.params?.slice(1) ?? []),
306
+ ],
307
+ });
308
+ return { result, ...(sponsorshipDetails ? { sponsorshipDetails } : {}) };
309
+ }
310
+ var ExternalFeePayerUrl;
311
+ (function (ExternalFeePayerUrl) {
312
+ function normalize(value, options = {}) {
313
+ let url;
314
+ try {
315
+ url = new URL(value);
316
+ }
317
+ catch {
318
+ throw new ox_1.RpcResponse.InvalidParamsError({
319
+ message: 'Invalid fee payer URL.',
320
+ });
321
+ }
322
+ const allowUnsafe = options.allowUnsafe === true;
323
+ if (url.protocol !== 'http:' && url.protocol !== 'https:')
324
+ throw new ox_1.RpcResponse.InvalidParamsError({
325
+ message: 'Invalid fee payer URL protocol.',
326
+ });
327
+ if (!allowUnsafe && url.protocol !== 'https:')
328
+ throw new ox_1.RpcResponse.InvalidParamsError({
329
+ message: 'Invalid fee payer URL protocol.',
330
+ });
331
+ if (!allowUnsafe && isUnsafeHostname(url.hostname))
332
+ throw new ox_1.RpcResponse.InvalidParamsError({
333
+ message: 'Invalid fee payer URL host.',
334
+ });
335
+ url.username = '';
336
+ url.password = '';
337
+ url.hash = '';
338
+ return url.href;
339
+ }
340
+ ExternalFeePayerUrl.normalize = normalize;
341
+ function isUnsafeHostname(hostname) {
342
+ const host = normalizeHostname(hostname);
343
+ if (host === 'localhost' || host.endsWith('.localhost'))
344
+ return true;
345
+ const ipv4 = parseIpv4(host);
346
+ if (ipv4)
347
+ return isUnsafeIpv4(ipv4);
348
+ if (!host.includes(':'))
349
+ return false;
350
+ const ipv6 = parseIpv6(host);
351
+ if (!ipv6)
352
+ return true;
353
+ return isUnsafeIpv6(ipv6);
354
+ }
355
+ function normalizeHostname(hostname) {
356
+ return hostname
357
+ .toLowerCase()
358
+ .replace(/^\[|\]$/g, '')
359
+ .split('%')[0];
360
+ }
361
+ function parseIpv4(value) {
362
+ const parts = value.split('.');
363
+ if (parts.length !== 4 || parts.some((part) => !/^\d+$/.test(part)))
364
+ return undefined;
365
+ const numbers = parts.map((part) => Number(part));
366
+ if (numbers.some((part) => !Number.isInteger(part) || part < 0 || part > 255))
367
+ return undefined;
368
+ return numbers;
369
+ }
370
+ function isUnsafeIpv4(parts) {
371
+ const [a, b] = parts;
372
+ if (a === 0 || a === 10 || a === 127)
373
+ return true;
374
+ if (a === 100 && b >= 64 && b <= 127)
375
+ return true;
376
+ if (a === 169 && b === 254)
377
+ return true;
378
+ if (a === 172 && b >= 16 && b <= 31)
379
+ return true;
380
+ if (a === 192 && b === 168)
381
+ return true;
382
+ return a >= 224;
383
+ }
384
+ function parseIpv6(value) {
385
+ const halves = value.split('::');
386
+ if (halves.length > 2)
387
+ return undefined;
388
+ const left = halves[0] ? halves[0].split(':') : [];
389
+ const right = halves[1] ? halves[1].split(':') : [];
390
+ const missing = halves.length === 2 ? 8 - left.length - right.length : 0;
391
+ if (missing < 0)
392
+ return undefined;
393
+ const parts = [...left, ...Array(missing).fill('0'), ...right];
394
+ if (parts.length !== 8)
395
+ return undefined;
396
+ const numbers = parts.map((part) => /^[\da-f]{1,4}$/i.test(part) ? Number.parseInt(part, 16) : NaN);
397
+ if (numbers.some((part) => !Number.isInteger(part) || part < 0 || part > 0xffff))
398
+ return undefined;
399
+ return numbers;
400
+ }
401
+ function isUnsafeIpv6(parts) {
402
+ const [a] = parts;
403
+ if (parts.every((part) => part === 0))
404
+ return true;
405
+ if (parts.slice(0, 7).every((part) => part === 0) && parts[7] === 1)
406
+ return true;
407
+ if ((a & 0xfe00) === 0xfc00)
408
+ return true;
409
+ if ((a & 0xffc0) === 0xfe80)
410
+ return true;
411
+ if ((a & 0xffc0) === 0xfec0)
412
+ return true;
413
+ if ((a & 0xff00) === 0xff00)
414
+ return true;
415
+ const ipv4 = ipv4FromIpv6(parts);
416
+ return ipv4 ? isUnsafeIpv4(ipv4) : false;
417
+ }
418
+ function ipv4FromIpv6(parts) {
419
+ const mapped = parts.slice(0, 5).every((part) => part === 0) && parts[5] === 0xffff;
420
+ const compatible = parts.slice(0, 6).every((part) => part === 0);
421
+ if (!mapped && !compatible)
422
+ return undefined;
423
+ return [parts[6] >> 8, parts[6] & 0xff, parts[7] >> 8, parts[7] & 0xff];
424
+ }
425
+ })(ExternalFeePayerUrl || (exports.ExternalFeePayerUrl = ExternalFeePayerUrl = {}));
426
+ //# sourceMappingURL=feePayer.js.map