ox 1.0.0-beta.8 → 1.0.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 (413) hide show
  1. package/CHANGELOG.md +1143 -0
  2. package/dist/core/Abi.d.ts +6 -2
  3. package/dist/core/Abi.d.ts.map +1 -1
  4. package/dist/core/Abi.js +6 -3
  5. package/dist/core/Abi.js.map +1 -1
  6. package/dist/core/AbiConstructor.d.ts +2 -1
  7. package/dist/core/AbiConstructor.d.ts.map +1 -1
  8. package/dist/core/AbiConstructor.js +2 -2
  9. package/dist/core/AbiConstructor.js.map +1 -1
  10. package/dist/core/AbiError.d.ts +3 -1
  11. package/dist/core/AbiError.d.ts.map +1 -1
  12. package/dist/core/AbiError.js +2 -2
  13. package/dist/core/AbiError.js.map +1 -1
  14. package/dist/core/AbiEvent.d.ts +3 -1
  15. package/dist/core/AbiEvent.d.ts.map +1 -1
  16. package/dist/core/AbiEvent.js +2 -2
  17. package/dist/core/AbiEvent.js.map +1 -1
  18. package/dist/core/AbiFunction.d.ts +3 -1
  19. package/dist/core/AbiFunction.d.ts.map +1 -1
  20. package/dist/core/AbiFunction.js +2 -2
  21. package/dist/core/AbiFunction.js.map +1 -1
  22. package/dist/core/AbiItem.d.ts +6 -3
  23. package/dist/core/AbiItem.d.ts.map +1 -1
  24. package/dist/core/AbiItem.js +9 -7
  25. package/dist/core/AbiItem.js.map +1 -1
  26. package/dist/core/AbiParameter.d.ts +88 -0
  27. package/dist/core/AbiParameter.d.ts.map +1 -0
  28. package/dist/core/AbiParameter.js +82 -0
  29. package/dist/core/AbiParameter.js.map +1 -0
  30. package/dist/core/AbiParameters.d.ts +58 -2
  31. package/dist/core/AbiParameters.d.ts.map +1 -1
  32. package/dist/core/AbiParameters.js +60 -6
  33. package/dist/core/AbiParameters.js.map +1 -1
  34. package/dist/core/Rlp.d.ts +27 -5
  35. package/dist/core/Rlp.d.ts.map +1 -1
  36. package/dist/core/Rlp.js +40 -4
  37. package/dist/core/Rlp.js.map +1 -1
  38. package/dist/core/RpcSchema.d.ts +2 -2
  39. package/dist/core/internal/abiParameters.d.ts.map +1 -1
  40. package/dist/core/internal/abiParameters.js +21 -3
  41. package/dist/core/internal/abiParameters.js.map +1 -1
  42. package/dist/core/internal/human-readable/errors.d.ts +103 -0
  43. package/dist/core/internal/human-readable/errors.d.ts.map +1 -0
  44. package/dist/core/internal/human-readable/errors.js +142 -0
  45. package/dist/core/internal/human-readable/errors.js.map +1 -0
  46. package/dist/core/internal/human-readable/formatAbi.d.ts +19 -0
  47. package/dist/core/internal/human-readable/formatAbi.d.ts.map +1 -0
  48. package/dist/core/internal/human-readable/formatAbi.js +18 -0
  49. package/dist/core/internal/human-readable/formatAbi.js.map +1 -0
  50. package/dist/core/internal/human-readable/formatAbiItem.d.ts +23 -0
  51. package/dist/core/internal/human-readable/formatAbiItem.d.ts.map +1 -0
  52. package/dist/core/internal/human-readable/formatAbiItem.js +25 -0
  53. package/dist/core/internal/human-readable/formatAbiItem.js.map +1 -0
  54. package/dist/core/internal/human-readable/formatAbiParameter.d.ts +41 -0
  55. package/dist/core/internal/human-readable/formatAbiParameter.d.ts.map +1 -0
  56. package/dist/core/internal/human-readable/formatAbiParameter.js +36 -0
  57. package/dist/core/internal/human-readable/formatAbiParameter.js.map +1 -0
  58. package/dist/core/internal/human-readable/formatAbiParameters.d.ts +26 -0
  59. package/dist/core/internal/human-readable/formatAbiParameters.d.ts.map +1 -0
  60. package/dist/core/internal/human-readable/formatAbiParameters.js +19 -0
  61. package/dist/core/internal/human-readable/formatAbiParameters.js.map +1 -0
  62. package/dist/core/internal/human-readable/parseAbi.d.ts +22 -0
  63. package/dist/core/internal/human-readable/parseAbi.d.ts.map +1 -0
  64. package/dist/core/internal/human-readable/parseAbi.js +22 -0
  65. package/dist/core/internal/human-readable/parseAbi.js.map +1 -0
  66. package/dist/core/internal/human-readable/parseAbiItem.d.ts +23 -0
  67. package/dist/core/internal/human-readable/parseAbiItem.d.ts.map +1 -0
  68. package/dist/core/internal/human-readable/parseAbiItem.js +30 -0
  69. package/dist/core/internal/human-readable/parseAbiItem.js.map +1 -0
  70. package/dist/core/internal/human-readable/parseAbiParameter.d.ts +28 -0
  71. package/dist/core/internal/human-readable/parseAbiParameter.d.ts.map +1 -0
  72. package/dist/core/internal/human-readable/parseAbiParameter.js +32 -0
  73. package/dist/core/internal/human-readable/parseAbiParameter.js.map +1 -0
  74. package/dist/core/internal/human-readable/parseAbiParameters.d.ts +38 -0
  75. package/dist/core/internal/human-readable/parseAbiParameters.d.ts.map +1 -0
  76. package/dist/core/internal/human-readable/parseAbiParameters.js +39 -0
  77. package/dist/core/internal/human-readable/parseAbiParameters.js.map +1 -0
  78. package/dist/core/internal/human-readable/regex.d.ts +9 -0
  79. package/dist/core/internal/human-readable/regex.d.ts.map +1 -0
  80. package/dist/core/internal/human-readable/regex.js +12 -0
  81. package/dist/core/internal/human-readable/regex.js.map +1 -0
  82. package/dist/core/internal/human-readable/runtime/cache.d.ts +22 -0
  83. package/dist/core/internal/human-readable/runtime/cache.d.ts.map +1 -0
  84. package/dist/core/internal/human-readable/runtime/cache.js +86 -0
  85. package/dist/core/internal/human-readable/runtime/cache.js.map +1 -0
  86. package/dist/core/internal/human-readable/runtime/signatures.d.ts +39 -0
  87. package/dist/core/internal/human-readable/runtime/signatures.d.ts.map +1 -0
  88. package/dist/core/internal/human-readable/runtime/signatures.js +67 -0
  89. package/dist/core/internal/human-readable/runtime/signatures.js.map +1 -0
  90. package/dist/core/internal/human-readable/runtime/structs.d.ts +3 -0
  91. package/dist/core/internal/human-readable/runtime/structs.d.ts.map +1 -0
  92. package/dist/core/internal/human-readable/runtime/structs.js +79 -0
  93. package/dist/core/internal/human-readable/runtime/structs.js.map +1 -0
  94. package/dist/core/internal/human-readable/runtime/utils.d.ts +205 -0
  95. package/dist/core/internal/human-readable/runtime/utils.d.ts.map +1 -0
  96. package/dist/core/internal/human-readable/runtime/utils.js +232 -0
  97. package/dist/core/internal/human-readable/runtime/utils.js.map +1 -0
  98. package/dist/core/internal/human-readable/types/signatures.d.ts +38 -0
  99. package/dist/core/internal/human-readable/types/signatures.d.ts.map +1 -0
  100. package/dist/core/internal/human-readable/types/signatures.js +2 -0
  101. package/dist/core/internal/human-readable/types/signatures.js.map +1 -0
  102. package/dist/core/internal/human-readable/types/structs.d.ts +48 -0
  103. package/dist/core/internal/human-readable/types/structs.d.ts.map +1 -0
  104. package/dist/core/internal/human-readable/types/structs.js +2 -0
  105. package/dist/core/internal/human-readable/types/structs.js.map +1 -0
  106. package/dist/core/internal/human-readable/types/utils.d.ts +163 -0
  107. package/dist/core/internal/human-readable/types/utils.d.ts.map +1 -0
  108. package/dist/core/internal/human-readable/types/utils.js +2 -0
  109. package/dist/core/internal/human-readable/types/utils.js.map +1 -0
  110. package/dist/core/internal/human-readable/types.d.ts +29 -0
  111. package/dist/core/internal/human-readable/types.d.ts.map +1 -0
  112. package/dist/core/internal/human-readable/types.js +2 -0
  113. package/dist/core/internal/human-readable/types.js.map +1 -0
  114. package/dist/core/internal/rpcSchemas/eth.d.ts +36 -0
  115. package/dist/core/internal/rpcSchemas/eth.d.ts.map +1 -1
  116. package/dist/erc4337/EntryPoint.d.ts +1072 -1
  117. package/dist/erc4337/EntryPoint.d.ts.map +1 -1
  118. package/dist/erc4337/EntryPoint.js +872 -0
  119. package/dist/erc4337/EntryPoint.js.map +1 -1
  120. package/dist/erc4337/RpcSchema.d.ts +2 -2
  121. package/dist/erc4337/RpcSchema.d.ts.map +1 -1
  122. package/dist/erc4337/UserOperation.d.ts +39 -10
  123. package/dist/erc4337/UserOperation.d.ts.map +1 -1
  124. package/dist/erc4337/UserOperation.js +62 -48
  125. package/dist/erc4337/UserOperation.js.map +1 -1
  126. package/dist/erc4337/UserOperationGas.d.ts +9 -5
  127. package/dist/erc4337/UserOperationGas.d.ts.map +1 -1
  128. package/dist/erc4337/UserOperationGas.js +17 -15
  129. package/dist/erc4337/UserOperationGas.js.map +1 -1
  130. package/dist/erc4337/UserOperationReceipt.d.ts +4 -4
  131. package/dist/erc4337/UserOperationReceipt.d.ts.map +1 -1
  132. package/dist/erc4337/UserOperationReceipt.js.map +1 -1
  133. package/dist/index.d.ts +37 -0
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +37 -0
  136. package/dist/index.js.map +1 -1
  137. package/dist/tempo/Channel.d.ts +8 -14
  138. package/dist/tempo/Channel.d.ts.map +1 -1
  139. package/dist/tempo/Channel.js +4 -8
  140. package/dist/tempo/Channel.js.map +1 -1
  141. package/dist/tempo/KeyAuthorization.d.ts +5 -5
  142. package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
  143. package/dist/tempo/KeyAuthorization.js +4 -4
  144. package/dist/tempo/KeyAuthorization.js.map +1 -1
  145. package/dist/tempo/MultisigConfig.d.ts +37 -85
  146. package/dist/tempo/MultisigConfig.d.ts.map +1 -1
  147. package/dist/tempo/MultisigConfig.js +39 -83
  148. package/dist/tempo/MultisigConfig.js.map +1 -1
  149. package/dist/tempo/PoolId.d.ts +8 -7
  150. package/dist/tempo/PoolId.d.ts.map +1 -1
  151. package/dist/tempo/PoolId.js +10 -6
  152. package/dist/tempo/PoolId.js.map +1 -1
  153. package/dist/tempo/SignatureEnvelope.d.ts +32 -30
  154. package/dist/tempo/SignatureEnvelope.d.ts.map +1 -1
  155. package/dist/tempo/SignatureEnvelope.js +56 -51
  156. package/dist/tempo/SignatureEnvelope.js.map +1 -1
  157. package/dist/tempo/Transaction.d.ts +16 -5
  158. package/dist/tempo/Transaction.d.ts.map +1 -1
  159. package/dist/tempo/Transaction.js +34 -7
  160. package/dist/tempo/Transaction.js.map +1 -1
  161. package/dist/tempo/TransactionReceipt.d.ts +3 -3
  162. package/dist/tempo/TransactionReceipt.d.ts.map +1 -1
  163. package/dist/tempo/TransactionReceipt.js +8 -1
  164. package/dist/tempo/TransactionReceipt.js.map +1 -1
  165. package/dist/tempo/TransactionRequest.d.ts +15 -2
  166. package/dist/tempo/TransactionRequest.d.ts.map +1 -1
  167. package/dist/tempo/TransactionRequest.js +65 -29
  168. package/dist/tempo/TransactionRequest.js.map +1 -1
  169. package/dist/tempo/TxEnvelopeTempo.d.ts +2 -3
  170. package/dist/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  171. package/dist/tempo/TxEnvelopeTempo.js +5 -6
  172. package/dist/tempo/TxEnvelopeTempo.js.map +1 -1
  173. package/dist/tempo/index.d.ts +6 -26
  174. package/dist/tempo/index.d.ts.map +1 -1
  175. package/dist/tempo/index.js +6 -26
  176. package/dist/tempo/index.js.map +1 -1
  177. package/dist/zod/Abi.d.ts +214 -0
  178. package/dist/zod/Abi.d.ts.map +1 -0
  179. package/dist/zod/Abi.js +5 -0
  180. package/dist/zod/Abi.js.map +1 -0
  181. package/dist/zod/AbiConstructor.d.ts +58 -0
  182. package/dist/zod/AbiConstructor.d.ts.map +1 -0
  183. package/dist/zod/AbiConstructor.js +18 -0
  184. package/dist/zod/AbiConstructor.js.map +1 -0
  185. package/dist/zod/AbiError.d.ts +20 -0
  186. package/dist/zod/AbiError.d.ts.map +1 -0
  187. package/dist/zod/AbiError.js +9 -0
  188. package/dist/zod/AbiError.js.map +1 -0
  189. package/dist/zod/AbiEvent.d.ts +23 -0
  190. package/dist/zod/AbiEvent.d.ts.map +1 -0
  191. package/dist/zod/AbiEvent.js +11 -0
  192. package/dist/zod/AbiEvent.js.map +1 -0
  193. package/dist/zod/AbiFallback.d.ts +16 -0
  194. package/dist/zod/AbiFallback.d.ts.map +1 -0
  195. package/dist/zod/AbiFallback.js +16 -0
  196. package/dist/zod/AbiFallback.js.map +1 -0
  197. package/dist/zod/AbiFunction.d.ts +109 -0
  198. package/dist/zod/AbiFunction.d.ts.map +1 -0
  199. package/dist/zod/AbiFunction.js +26 -0
  200. package/dist/zod/AbiFunction.js.map +1 -0
  201. package/dist/zod/AbiItem.d.ts +216 -0
  202. package/dist/zod/AbiItem.d.ts.map +1 -0
  203. package/dist/zod/AbiItem.js +26 -0
  204. package/dist/zod/AbiItem.js.map +1 -0
  205. package/dist/zod/AbiParameter.d.ts +32 -0
  206. package/dist/zod/AbiParameter.d.ts.map +1 -0
  207. package/dist/zod/AbiParameter.js +28 -0
  208. package/dist/zod/AbiParameter.js.map +1 -0
  209. package/dist/zod/AbiParameters.d.ts +30 -0
  210. package/dist/zod/AbiParameters.d.ts.map +1 -0
  211. package/dist/zod/AbiParameters.js +6 -0
  212. package/dist/zod/AbiParameters.js.map +1 -0
  213. package/dist/zod/AbiReceive.d.ts +6 -0
  214. package/dist/zod/AbiReceive.d.ts.map +1 -0
  215. package/dist/zod/AbiReceive.js +7 -0
  216. package/dist/zod/AbiReceive.js.map +1 -0
  217. package/dist/zod/RpcSchema.d.ts +6 -5
  218. package/dist/zod/RpcSchema.d.ts.map +1 -1
  219. package/dist/zod/Solidity.d.ts +15 -0
  220. package/dist/zod/Solidity.d.ts.map +1 -0
  221. package/dist/zod/Solidity.js +41 -0
  222. package/dist/zod/Solidity.js.map +1 -0
  223. package/dist/zod/TypedData.d.ts +226 -0
  224. package/dist/zod/TypedData.d.ts.map +1 -0
  225. package/dist/zod/TypedData.js +84 -0
  226. package/dist/zod/TypedData.js.map +1 -0
  227. package/dist/zod/internal/rpcSchemas/Eth.d.ts +1 -0
  228. package/dist/zod/internal/rpcSchemas/Eth.d.ts.map +1 -1
  229. package/dist/zod/internal/rpcSchemas/Eth.js +5 -0
  230. package/dist/zod/internal/rpcSchemas/Eth.js.map +1 -1
  231. package/dist/zod/tempo/AuthorizationTempo.d.ts +0 -20
  232. package/dist/zod/tempo/AuthorizationTempo.d.ts.map +1 -1
  233. package/dist/zod/tempo/KeyAuthorization.d.ts +503 -67
  234. package/dist/zod/tempo/KeyAuthorization.d.ts.map +1 -1
  235. package/dist/zod/tempo/KeyAuthorization.js +32 -15
  236. package/dist/zod/tempo/KeyAuthorization.js.map +1 -1
  237. package/dist/zod/tempo/RpcSchemaTempo.d.ts +216 -34
  238. package/dist/zod/tempo/RpcSchemaTempo.d.ts.map +1 -1
  239. package/dist/zod/tempo/SignatureEnvelope.d.ts +0 -6
  240. package/dist/zod/tempo/SignatureEnvelope.d.ts.map +1 -1
  241. package/dist/zod/tempo/SignatureEnvelope.js +0 -2
  242. package/dist/zod/tempo/SignatureEnvelope.js.map +1 -1
  243. package/dist/zod/tempo/Transaction.d.ts +1479 -333
  244. package/dist/zod/tempo/Transaction.d.ts.map +1 -1
  245. package/dist/zod/tempo/Transaction.js +65 -16
  246. package/dist/zod/tempo/Transaction.js.map +1 -1
  247. package/dist/zod/tempo/TransactionRequest.d.ts +410 -57
  248. package/dist/zod/tempo/TransactionRequest.d.ts.map +1 -1
  249. package/dist/zod/tempo/TransactionRequest.js +81 -18
  250. package/dist/zod/tempo/TransactionRequest.js.map +1 -1
  251. package/dist/zod/tempo/TxEnvelopeTempo.d.ts +225 -18
  252. package/dist/zod/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  253. package/dist/zod/tempo/TxEnvelopeTempo.js +1 -1
  254. package/dist/zod/tempo/TxEnvelopeTempo.js.map +1 -1
  255. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts +0 -3
  256. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts.map +1 -1
  257. package/dist/zod/tempo/z.d.ts +0 -1
  258. package/dist/zod/tempo/z.d.ts.map +1 -1
  259. package/dist/zod/tempo/z.js +0 -1
  260. package/dist/zod/tempo/z.js.map +1 -1
  261. package/dist/zod/z.d.ts +12 -0
  262. package/dist/zod/z.d.ts.map +1 -1
  263. package/dist/zod/z.js +12 -0
  264. package/dist/zod/z.js.map +1 -1
  265. package/package.json +67 -11
  266. package/src/core/Abi.bench.ts +30 -0
  267. package/src/core/Abi.ts +13 -4
  268. package/src/core/AbiConstructor.ts +3 -2
  269. package/src/core/AbiError.ts +6 -2
  270. package/src/core/AbiEvent.ts +6 -2
  271. package/src/core/AbiFunction.ts +6 -2
  272. package/src/core/AbiItem.bench.ts +19 -0
  273. package/src/core/AbiItem.ts +20 -10
  274. package/src/core/AbiParameter.bench.ts +35 -0
  275. package/src/core/AbiParameter.ts +126 -0
  276. package/src/core/AbiParameters.bench.ts +22 -0
  277. package/src/core/AbiParameters.ts +77 -8
  278. package/src/core/Rlp.ts +66 -3
  279. package/src/core/RpcSchema.ts +2 -2
  280. package/src/core/_test/Abi.test.ts +4 -0
  281. package/src/core/_test/AbiItem.test.ts +3 -0
  282. package/src/core/_test/AbiParameter.test-d.ts +41 -0
  283. package/src/core/_test/AbiParameter.test.ts +84 -0
  284. package/src/core/_test/AbiParameters.decode.test.ts +88 -12
  285. package/src/core/_test/AbiParameters.encode.test.ts +68 -0
  286. package/src/core/_test/AbiParameters.test.ts +7 -0
  287. package/src/core/_test/Rlp.test.ts +101 -0
  288. package/src/core/_test/index.test.ts +1 -0
  289. package/src/core/internal/abiParameters.ts +21 -3
  290. package/src/core/internal/human-readable/_snap/formatAbi.test.ts.snap +74 -0
  291. package/src/core/internal/human-readable/_snap/parseAbi.test.ts.snap +2353 -0
  292. package/src/core/internal/human-readable/errors.test.ts +258 -0
  293. package/src/core/internal/human-readable/errors.ts +205 -0
  294. package/src/core/internal/human-readable/formatAbi.test-d.ts +144 -0
  295. package/src/core/internal/human-readable/formatAbi.test.ts +23 -0
  296. package/src/core/internal/human-readable/formatAbi.ts +37 -0
  297. package/src/core/internal/human-readable/formatAbiItem.test-d.ts +115 -0
  298. package/src/core/internal/human-readable/formatAbiItem.test.ts +102 -0
  299. package/src/core/internal/human-readable/formatAbiItem.ts +136 -0
  300. package/src/core/internal/human-readable/formatAbiParameter.test-d.ts +125 -0
  301. package/src/core/internal/human-readable/formatAbiParameter.test.ts +126 -0
  302. package/src/core/internal/human-readable/formatAbiParameter.ts +86 -0
  303. package/src/core/internal/human-readable/formatAbiParameters.test-d.ts +92 -0
  304. package/src/core/internal/human-readable/formatAbiParameters.test.ts +32 -0
  305. package/src/core/internal/human-readable/formatAbiParameters.ts +46 -0
  306. package/src/core/internal/human-readable/human-readable.bench-d.ts +58 -0
  307. package/src/core/internal/human-readable/integration.test.ts +68 -0
  308. package/src/core/internal/human-readable/parseAbi.test-d.ts +188 -0
  309. package/src/core/internal/human-readable/parseAbi.test.ts +82 -0
  310. package/src/core/internal/human-readable/parseAbi.ts +59 -0
  311. package/src/core/internal/human-readable/parseAbiItem.test-d.ts +183 -0
  312. package/src/core/internal/human-readable/parseAbiItem.test.ts +264 -0
  313. package/src/core/internal/human-readable/parseAbiItem.ts +91 -0
  314. package/src/core/internal/human-readable/parseAbiParameter.test-d.ts +68 -0
  315. package/src/core/internal/human-readable/parseAbiParameter.test.ts +207 -0
  316. package/src/core/internal/human-readable/parseAbiParameter.ts +95 -0
  317. package/src/core/internal/human-readable/parseAbiParameters.test-d.ts +160 -0
  318. package/src/core/internal/human-readable/parseAbiParameters.test.ts +80 -0
  319. package/src/core/internal/human-readable/parseAbiParameters.ts +123 -0
  320. package/src/core/internal/human-readable/regex.ts +15 -0
  321. package/src/core/internal/human-readable/runtime/cache.ts +96 -0
  322. package/src/core/internal/human-readable/runtime/signatures.test.ts +236 -0
  323. package/src/core/internal/human-readable/runtime/signatures.ts +106 -0
  324. package/src/core/internal/human-readable/runtime/structs.test.ts +210 -0
  325. package/src/core/internal/human-readable/runtime/structs.ts +97 -0
  326. package/src/core/internal/human-readable/runtime/utils.test.ts +717 -0
  327. package/src/core/internal/human-readable/runtime/utils.ts +344 -0
  328. package/src/core/internal/human-readable/types/signatures.test-d.ts +255 -0
  329. package/src/core/internal/human-readable/types/signatures.ts +369 -0
  330. package/src/core/internal/human-readable/types/structs.test-d.ts +221 -0
  331. package/src/core/internal/human-readable/types/structs.ts +88 -0
  332. package/src/core/internal/human-readable/types/utils.test-d.ts +1029 -0
  333. package/src/core/internal/human-readable/types/utils.ts +392 -0
  334. package/src/core/internal/human-readable/types.ts +69 -0
  335. package/src/core/internal/rpcSchemas/eth.ts +36 -0
  336. package/src/erc4337/EntryPoint.ts +875 -1
  337. package/src/erc4337/RpcSchema.ts +4 -2
  338. package/src/erc4337/UserOperation.ts +130 -60
  339. package/src/erc4337/UserOperationGas.ts +36 -28
  340. package/src/erc4337/UserOperationReceipt.ts +15 -7
  341. package/src/erc4337/_test/EntryPoint.test.ts +48 -0
  342. package/src/erc4337/_test/RpcSchema.test-d.ts +56 -0
  343. package/src/erc4337/_test/UserOperation.snap-d.ts +31 -0
  344. package/src/erc4337/_test/UserOperation.test.ts +221 -5
  345. package/src/erc4337/_test/UserOperationGas.test.ts +30 -1
  346. package/src/index.ts +38 -0
  347. package/src/tempo/Channel.test.ts +2 -23
  348. package/src/tempo/Channel.ts +10 -22
  349. package/src/tempo/KeyAuthorization.test.ts +22 -0
  350. package/src/tempo/KeyAuthorization.ts +9 -9
  351. package/src/tempo/MultisigConfig.test.ts +54 -37
  352. package/src/tempo/MultisigConfig.ts +59 -134
  353. package/src/tempo/PoolId.test.ts +7 -41
  354. package/src/tempo/PoolId.ts +15 -10
  355. package/src/tempo/SignatureEnvelope.test.ts +118 -17
  356. package/src/tempo/SignatureEnvelope.ts +77 -72
  357. package/src/tempo/Transaction.test.ts +0 -15
  358. package/src/tempo/Transaction.ts +63 -12
  359. package/src/tempo/TransactionReceipt.test.ts +76 -0
  360. package/src/tempo/TransactionReceipt.ts +11 -5
  361. package/src/tempo/TransactionRequest.test.ts +174 -1
  362. package/src/tempo/TransactionRequest.ts +84 -32
  363. package/src/tempo/TxEnvelopeTempo.test.ts +2 -2
  364. package/src/tempo/TxEnvelopeTempo.ts +7 -7
  365. package/src/tempo/e2e.test.ts +228 -50
  366. package/src/tempo/index.ts +6 -26
  367. package/src/version.ts +1 -1
  368. package/src/zod/Abi.ts +5 -0
  369. package/src/zod/AbiConstructor.ts +24 -0
  370. package/src/zod/AbiError.ts +9 -0
  371. package/src/zod/AbiEvent.ts +11 -0
  372. package/src/zod/AbiFallback.ts +22 -0
  373. package/src/zod/AbiFunction.ts +32 -0
  374. package/src/zod/AbiItem.ts +28 -0
  375. package/src/zod/AbiParameter.ts +36 -0
  376. package/src/zod/AbiParameters.ts +7 -0
  377. package/src/zod/AbiReceive.ts +7 -0
  378. package/src/zod/RpcSchema.ts +5 -5
  379. package/src/zod/Solidity.ts +83 -0
  380. package/src/zod/TypedData.ts +111 -0
  381. package/src/zod/_test/Abi.test-d.ts +46 -0
  382. package/src/zod/_test/Abi.test.ts +163 -0
  383. package/src/zod/_test/TypedData.test-d.ts +20 -0
  384. package/src/zod/_test/TypedData.test.ts +87 -0
  385. package/src/zod/_test/z.test-d.ts +6 -0
  386. package/src/zod/_test/z.test.ts +17 -0
  387. package/src/zod/internal/rpcSchemas/Eth.ts +6 -0
  388. package/src/zod/tempo/KeyAuthorization.ts +34 -15
  389. package/src/zod/tempo/SignatureEnvelope.ts +0 -2
  390. package/src/zod/tempo/Transaction.ts +84 -22
  391. package/src/zod/tempo/TransactionRequest.ts +86 -20
  392. package/src/zod/tempo/TxEnvelopeTempo.ts +1 -1
  393. package/src/zod/tempo/_test/KeyAuthorization.test.ts +53 -0
  394. package/src/zod/tempo/_test/SignatureEnvelope.test.ts +0 -2
  395. package/src/zod/tempo/_test/Transaction.test.ts +155 -0
  396. package/src/zod/tempo/_test/TransactionRequest.test.ts +44 -0
  397. package/src/zod/tempo/z.ts +0 -1
  398. package/src/zod/z.ts +12 -0
  399. package/dist/tempo/TokenId.d.ts +0 -87
  400. package/dist/tempo/TokenId.d.ts.map +0 -1
  401. package/dist/tempo/TokenId.js +0 -123
  402. package/dist/tempo/TokenId.js.map +0 -1
  403. package/dist/zod/tempo/TokenId.d.ts +0 -6
  404. package/dist/zod/tempo/TokenId.d.ts.map +0 -1
  405. package/dist/zod/tempo/TokenId.js +0 -14
  406. package/dist/zod/tempo/TokenId.js.map +0 -1
  407. package/src/CHANGELOG.md +0 -820
  408. package/src/tempo/TokenId.bench.ts +0 -36
  409. package/src/tempo/TokenId.test.ts +0 -79
  410. package/src/tempo/TokenId.ts +0 -141
  411. package/src/zod/tempo/TokenId.ts +0 -15
  412. package/src/zod/tempo/_test/TokenId.test-d.ts +0 -17
  413. package/src/zod/tempo/_test/TokenId.test.ts +0 -21
@@ -0,0 +1,115 @@
1
+ import { expectTypeOf, test } from 'vp/test'
2
+
3
+ import type {
4
+ Abi,
5
+ AbiConstructor,
6
+ AbiError,
7
+ AbiEvent,
8
+ AbiFallback,
9
+ AbiFunction,
10
+ AbiReceive,
11
+ } from 'abitype'
12
+ import type { FormatAbiItem } from './formatAbiItem.js'
13
+ import { formatAbiItem } from './formatAbiItem.js'
14
+
15
+ test('FormatAbiItem', () => {
16
+ expectTypeOf<FormatAbiItem<Abi[number]>>().toEqualTypeOf<string>()
17
+ expectTypeOf<FormatAbiItem<AbiFunction>>().toEqualTypeOf<string>()
18
+ expectTypeOf<FormatAbiItem<AbiEvent>>().toEqualTypeOf<string>()
19
+ expectTypeOf<FormatAbiItem<AbiError>>().toEqualTypeOf<string>()
20
+ expectTypeOf<FormatAbiItem<AbiConstructor>>().toEqualTypeOf<string>()
21
+ expectTypeOf<FormatAbiItem<AbiFallback>>().toEqualTypeOf<string>()
22
+ expectTypeOf<FormatAbiItem<AbiReceive>>().toEqualTypeOf<string>()
23
+
24
+ expectTypeOf<
25
+ FormatAbiItem<{
26
+ readonly name: 'foo'
27
+ readonly type: 'function'
28
+ readonly stateMutability: 'nonpayable'
29
+ readonly inputs: readonly []
30
+ readonly outputs: readonly []
31
+ }>
32
+ >().toEqualTypeOf<'function foo()'>()
33
+
34
+ expectTypeOf<
35
+ FormatAbiItem<{
36
+ readonly name: 'address'
37
+ readonly type: 'function'
38
+ readonly stateMutability: 'nonpayable'
39
+ readonly inputs: readonly []
40
+ readonly outputs: readonly []
41
+ }>
42
+ >().toEqualTypeOf<'function [Error: "address" is a protected Solidity keyword.]()'>()
43
+
44
+ expectTypeOf<
45
+ FormatAbiItem<{
46
+ readonly name: 'Transfer'
47
+ readonly type: 'event'
48
+ readonly inputs: readonly [
49
+ {
50
+ readonly name: 'from'
51
+ readonly type: 'address'
52
+ readonly indexed: true
53
+ },
54
+ {
55
+ readonly name: 'to'
56
+ readonly type: 'address'
57
+ readonly indexed: true
58
+ },
59
+ {
60
+ readonly name: 'amount'
61
+ readonly type: 'uint256'
62
+ },
63
+ ]
64
+ }>
65
+ >().toEqualTypeOf<'event Transfer(address indexed from, address indexed to, uint256 amount)'>()
66
+ })
67
+
68
+ test('formatAbiItem', () => {
69
+ expectTypeOf(
70
+ formatAbiItem({
71
+ name: 'foo',
72
+ type: 'function',
73
+ stateMutability: 'nonpayable',
74
+ inputs: [],
75
+ outputs: [],
76
+ }),
77
+ ).toEqualTypeOf<'function foo()'>()
78
+ expectTypeOf(
79
+ formatAbiItem({
80
+ name: 'foo',
81
+ type: 'function',
82
+ stateMutability: 'nonpayable',
83
+ inputs: [
84
+ {
85
+ type: 'tuple',
86
+ components: [
87
+ {
88
+ type: 'string',
89
+ },
90
+ ],
91
+ },
92
+ {
93
+ type: 'address',
94
+ },
95
+ ],
96
+ outputs: [],
97
+ }),
98
+ ).toEqualTypeOf<'function foo((string), address)'>()
99
+
100
+ const abiItem: Abi[number] = {
101
+ type: 'function',
102
+ name: 'foo',
103
+ inputs: [],
104
+ outputs: [],
105
+ stateMutability: 'nonpayable',
106
+ }
107
+ expectTypeOf(formatAbiItem(abiItem)).toEqualTypeOf<string>()
108
+
109
+ expectTypeOf(
110
+ formatAbiItem({ type: 'fallback', stateMutability: 'nonpayable' }),
111
+ ).toEqualTypeOf<'fallback() external'>()
112
+ expectTypeOf(
113
+ formatAbiItem({ type: 'fallback', stateMutability: 'payable' }),
114
+ ).toEqualTypeOf<'fallback() external payable'>()
115
+ })
@@ -0,0 +1,102 @@
1
+ import { expect, test } from 'vp/test'
2
+
3
+ import { seaportAbi } from '../../../../test/abis/json.js'
4
+ import { formatAbiItem } from './formatAbiItem.js'
5
+
6
+ test('default', () => {
7
+ const result = formatAbiItem(seaportAbi[1])
8
+ expect(result).toMatchInlineSnapshot(
9
+ '"function cancel((address offerer, address zone, (uint8 itemType, address token, uint256 identifierOrCriteria, uint256 startAmount, uint256 endAmount)[] offer, (uint8 itemType, address token, uint256 identifierOrCriteria, uint256 startAmount, uint256 endAmount, address recipient)[] consideration, uint8 orderType, uint256 startTime, uint256 endTime, bytes32 zoneHash, uint256 salt, bytes32 conduitKey, uint256 counter)[] orders) returns (bool cancelled)"',
10
+ )
11
+ })
12
+
13
+ test.each([
14
+ {
15
+ abiItem: {
16
+ type: 'function',
17
+ name: 'foo',
18
+ inputs: [{ type: 'string' }],
19
+ outputs: [],
20
+ stateMutability: 'nonpayable',
21
+ } as const,
22
+ expected: 'function foo(string)',
23
+ },
24
+ {
25
+ abiItem: {
26
+ type: 'event',
27
+ name: 'Foo',
28
+ inputs: [
29
+ { type: 'address', name: 'from', indexed: true },
30
+ { type: 'address', name: 'to', indexed: true },
31
+ { type: 'uint256', name: 'amount' },
32
+ ],
33
+ } as const,
34
+ expected:
35
+ 'event Foo(address indexed from, address indexed to, uint256 amount)',
36
+ },
37
+ {
38
+ abiItem: {
39
+ type: 'constructor',
40
+ stateMutability: 'nonpayable',
41
+ inputs: [{ type: 'string' }],
42
+ } as const,
43
+ expected: 'constructor(string)',
44
+ },
45
+ {
46
+ abiItem: {
47
+ type: 'constructor',
48
+ stateMutability: 'payable',
49
+ inputs: [{ type: 'string' }],
50
+ } as const,
51
+ expected: 'constructor(string) payable',
52
+ },
53
+ {
54
+ abiItem: {
55
+ type: 'fallback',
56
+ stateMutability: 'nonpayable',
57
+ } as const,
58
+ expected: 'fallback() external',
59
+ },
60
+ {
61
+ abiItem: {
62
+ type: 'fallback',
63
+ stateMutability: 'payable',
64
+ } as const,
65
+ expected: 'fallback() external payable',
66
+ },
67
+ {
68
+ abiItem: {
69
+ type: 'receive',
70
+ stateMutability: 'payable',
71
+ } as const,
72
+ expected: 'receive() external payable',
73
+ },
74
+ {
75
+ abiItem: {
76
+ type: 'function',
77
+ name: 'initWormhole',
78
+ inputs: [
79
+ {
80
+ type: 'tuple[]',
81
+ name: 'configs',
82
+ components: [
83
+ {
84
+ type: 'uint256',
85
+ name: 'chainId',
86
+ },
87
+ {
88
+ type: 'uint16',
89
+ name: 'wormholeChainId',
90
+ },
91
+ ],
92
+ },
93
+ ],
94
+ outputs: [],
95
+ stateMutability: 'nonpayable',
96
+ } as const,
97
+ expected:
98
+ 'function initWormhole((uint256 chainId, uint16 wormholeChainId)[] configs)',
99
+ },
100
+ ])('formatAbiItem($expected)', ({ abiItem, expected }) => {
101
+ expect(formatAbiItem(abiItem)).toEqual(expected)
102
+ })
@@ -0,0 +1,136 @@
1
+ import type {
2
+ Abi,
3
+ AbiConstructor,
4
+ AbiError,
5
+ AbiEvent,
6
+ AbiEventParameter,
7
+ AbiFallback,
8
+ AbiFunction,
9
+ AbiParameter,
10
+ AbiReceive,
11
+ AbiStateMutability,
12
+ } from 'abitype'
13
+ import {
14
+ type FormatAbiParameters as FormatAbiParameters_,
15
+ formatAbiParameters,
16
+ } from './formatAbiParameters.js'
17
+ import type { AssertName } from './types/signatures.js'
18
+
19
+ /**
20
+ * Formats ABI item (e.g. error, event, function) into human-readable ABI item
21
+ *
22
+ * @param abiItem - ABI item
23
+ * @returns Human-readable ABI item
24
+ */
25
+ export type FormatAbiItem<abiItem extends Abi[number]> =
26
+ Abi[number] extends abiItem
27
+ ? string
28
+ :
29
+ | (abiItem extends AbiFunction
30
+ ? AbiFunction extends abiItem
31
+ ? string
32
+ : `function ${AssertName<abiItem['name']>}(${FormatAbiParameters<
33
+ abiItem['inputs']
34
+ >})${abiItem['stateMutability'] extends Exclude<
35
+ AbiStateMutability,
36
+ 'nonpayable'
37
+ >
38
+ ? ` ${abiItem['stateMutability']}`
39
+ : ''}${abiItem['outputs']['length'] extends 0
40
+ ? ''
41
+ : ` returns (${FormatAbiParameters<abiItem['outputs']>})`}`
42
+ : never)
43
+ | (abiItem extends AbiEvent
44
+ ? AbiEvent extends abiItem
45
+ ? string
46
+ : `event ${AssertName<abiItem['name']>}(${FormatAbiParameters<
47
+ abiItem['inputs']
48
+ >})`
49
+ : never)
50
+ | (abiItem extends AbiError
51
+ ? AbiError extends abiItem
52
+ ? string
53
+ : `error ${AssertName<abiItem['name']>}(${FormatAbiParameters<
54
+ abiItem['inputs']
55
+ >})`
56
+ : never)
57
+ | (abiItem extends AbiConstructor
58
+ ? AbiConstructor extends abiItem
59
+ ? string
60
+ : `constructor(${FormatAbiParameters<
61
+ abiItem['inputs']
62
+ >})${abiItem['stateMutability'] extends 'payable'
63
+ ? ' payable'
64
+ : ''}`
65
+ : never)
66
+ | (abiItem extends AbiFallback
67
+ ? AbiFallback extends abiItem
68
+ ? string
69
+ : `fallback() external${abiItem['stateMutability'] extends 'payable'
70
+ ? ' payable'
71
+ : ''}`
72
+ : never)
73
+ | (abiItem extends AbiReceive
74
+ ? AbiReceive extends abiItem
75
+ ? string
76
+ : 'receive() external payable'
77
+ : never)
78
+
79
+ type FormatAbiParameters<
80
+ abiParameters extends readonly (AbiParameter | AbiEventParameter)[],
81
+ > = abiParameters['length'] extends 0
82
+ ? ''
83
+ : FormatAbiParameters_<
84
+ abiParameters extends readonly [
85
+ AbiParameter | AbiEventParameter,
86
+ ...(readonly (AbiParameter | AbiEventParameter)[]),
87
+ ]
88
+ ? abiParameters
89
+ : never
90
+ >
91
+
92
+ /**
93
+ * Formats ABI item (e.g. error, event, function) into human-readable ABI item
94
+ *
95
+ * @param abiItem - ABI item
96
+ * @returns Human-readable ABI item
97
+ */
98
+ export function formatAbiItem<const abiItem extends Abi[number]>(
99
+ abiItem: abiItem,
100
+ ): FormatAbiItem<abiItem> {
101
+ type Result = FormatAbiItem<abiItem>
102
+ type Params = readonly [
103
+ AbiParameter | AbiEventParameter,
104
+ ...(readonly (AbiParameter | AbiEventParameter)[]),
105
+ ]
106
+
107
+ if (abiItem.type === 'function')
108
+ return `function ${abiItem.name}(${formatAbiParameters(
109
+ abiItem.inputs as Params,
110
+ )})${
111
+ abiItem.stateMutability && abiItem.stateMutability !== 'nonpayable'
112
+ ? ` ${abiItem.stateMutability}`
113
+ : ''
114
+ }${
115
+ abiItem.outputs?.length
116
+ ? ` returns (${formatAbiParameters(abiItem.outputs as Params)})`
117
+ : ''
118
+ }`
119
+ if (abiItem.type === 'event')
120
+ return `event ${abiItem.name}(${formatAbiParameters(
121
+ abiItem.inputs as Params,
122
+ )})`
123
+ if (abiItem.type === 'error')
124
+ return `error ${abiItem.name}(${formatAbiParameters(
125
+ abiItem.inputs as Params,
126
+ )})`
127
+ if (abiItem.type === 'constructor')
128
+ return `constructor(${formatAbiParameters(abiItem.inputs as Params)})${
129
+ abiItem.stateMutability === 'payable' ? ' payable' : ''
130
+ }`
131
+ if (abiItem.type === 'fallback')
132
+ return `fallback() external${
133
+ abiItem.stateMutability === 'payable' ? ' payable' : ''
134
+ }` as Result
135
+ return 'receive() external payable' as Result
136
+ }
@@ -0,0 +1,125 @@
1
+ import { expectTypeOf, test } from 'vp/test'
2
+
3
+ import type { AbiParameter } from 'abitype'
4
+ import type { FormatAbiParameter } from './formatAbiParameter.js'
5
+ import { formatAbiParameter } from './formatAbiParameter.js'
6
+
7
+ test('FormatAbiParameter', () => {
8
+ // string
9
+ expectTypeOf<
10
+ FormatAbiParameter<{
11
+ readonly type: 'address'
12
+ readonly name: 'from'
13
+ }>
14
+ >().toEqualTypeOf<'address from'>()
15
+ expectTypeOf<
16
+ FormatAbiParameter<{
17
+ readonly type: 'address'
18
+ readonly name: 'from'
19
+ readonly indexed: true
20
+ }>
21
+ >().toEqualTypeOf<'address indexed from'>()
22
+ expectTypeOf<
23
+ FormatAbiParameter<{
24
+ readonly type: 'address'
25
+ readonly name: ''
26
+ }>
27
+ >().toEqualTypeOf<'address'>()
28
+
29
+ expectTypeOf<
30
+ FormatAbiParameter<{
31
+ type: 'address'
32
+ name: 'address'
33
+ }>
34
+ >().toEqualTypeOf<'address [Error: "address" is a protected Solidity keyword.]'>()
35
+
36
+ expectTypeOf<
37
+ FormatAbiParameter<{
38
+ type: 'address'
39
+ name: '123'
40
+ }>
41
+ >().toEqualTypeOf<'address [Error: Identifier "123" cannot be a number string.]'>()
42
+
43
+ // Array
44
+ expectTypeOf<
45
+ FormatAbiParameter<{
46
+ readonly type: 'tuple'
47
+ readonly components: readonly [
48
+ {
49
+ readonly name: 'name'
50
+ readonly type: 'string'
51
+ },
52
+ ]
53
+ }>
54
+ >().toEqualTypeOf<'(string name)'>()
55
+
56
+ expectTypeOf<
57
+ FormatAbiParameter<{
58
+ readonly type: 'tuple'
59
+ readonly components: readonly [
60
+ {
61
+ readonly type: 'string'
62
+ readonly name: 'bar'
63
+ },
64
+ ]
65
+ readonly name: 'foo'
66
+ }>
67
+ >().toEqualTypeOf<'(string bar) foo'>()
68
+
69
+ expectTypeOf<
70
+ FormatAbiParameter<{
71
+ readonly components: [
72
+ {
73
+ readonly components: [
74
+ {
75
+ readonly type: 'string'
76
+ readonly name: 'foo'
77
+ },
78
+ ]
79
+ readonly type: 'tuple'
80
+ },
81
+ ]
82
+ readonly type: 'tuple'
83
+ }>
84
+ >().toEqualTypeOf<'((string foo))'>()
85
+
86
+ expectTypeOf<
87
+ FormatAbiParameter<{
88
+ readonly components: [
89
+ {
90
+ readonly components: [
91
+ {
92
+ readonly components: [
93
+ {
94
+ readonly components: [
95
+ {
96
+ readonly type: 'string'
97
+ },
98
+ ]
99
+ readonly type: 'tuple'
100
+ },
101
+ ]
102
+ readonly type: 'tuple'
103
+ },
104
+ ]
105
+ readonly type: 'tuple'
106
+ },
107
+ ]
108
+ readonly type: 'tuple'
109
+ }>
110
+ >().toEqualTypeOf<'((((string))))'>()
111
+ })
112
+
113
+ test('formatAbiParameter', () => {
114
+ expectTypeOf(
115
+ formatAbiParameter({
116
+ type: 'tuple',
117
+ components: [{ type: 'string' }],
118
+ }),
119
+ ).toEqualTypeOf<'(string)'>()
120
+
121
+ const param = { type: 'address' }
122
+ const param2: AbiParameter = param
123
+ expectTypeOf(formatAbiParameter(param)).toEqualTypeOf<string>()
124
+ expectTypeOf(formatAbiParameter(param2)).toEqualTypeOf<string>()
125
+ })
@@ -0,0 +1,126 @@
1
+ import { assertType, expect, expectTypeOf, test } from 'vp/test'
2
+
3
+ import { formatAbiParameter } from './formatAbiParameter.js'
4
+
5
+ test('default', () => {
6
+ const result = formatAbiParameter({ type: 'address', name: 'foo' })
7
+ expect(result).toEqual('address foo')
8
+ expectTypeOf(result).toEqualTypeOf<'address foo'>()
9
+ })
10
+
11
+ test('tuple', () => {
12
+ const result = formatAbiParameter({
13
+ type: 'tuple',
14
+ components: [
15
+ { type: 'string', name: 'bar' },
16
+ { type: 'string', name: 'baz' },
17
+ ],
18
+ name: 'foo',
19
+ })
20
+ expect(result).toMatchInlineSnapshot('"(string bar, string baz) foo"')
21
+ expectTypeOf(result).toEqualTypeOf<'(string bar, string baz) foo'>()
22
+ })
23
+
24
+ test('tuple[][]', () => {
25
+ const result = formatAbiParameter({
26
+ type: 'tuple[123][]',
27
+ components: [
28
+ { type: 'string', name: 'bar' },
29
+ { type: 'string', name: 'baz' },
30
+ ],
31
+ name: 'foo',
32
+ })
33
+ expect(result).toMatchInlineSnapshot('"(string bar, string baz)[123][] foo"')
34
+ expectTypeOf(result).toEqualTypeOf<'(string bar, string baz)[123][] foo'>()
35
+ })
36
+
37
+ test.each([
38
+ {
39
+ abiParameter: { type: 'string' },
40
+ expected: 'string',
41
+ },
42
+ {
43
+ abiParameter: { name: 'foo', type: 'string' },
44
+ expected: 'string foo',
45
+ },
46
+ {
47
+ abiParameter: { name: 'foo', type: 'string', indexed: true },
48
+ expected: 'string indexed foo',
49
+ },
50
+ {
51
+ abiParameter: { type: 'tuple', components: [{ type: 'string' }] },
52
+ expected: '(string)',
53
+ },
54
+ {
55
+ abiParameter: {
56
+ type: 'tuple',
57
+ components: [{ name: 'foo', type: 'string' }],
58
+ },
59
+ expected: '(string foo)',
60
+ },
61
+ {
62
+ abiParameter: {
63
+ type: 'tuple',
64
+ name: 'foo',
65
+ components: [{ name: 'bar', type: 'string' }],
66
+ },
67
+ expected: '(string bar) foo',
68
+ },
69
+ {
70
+ abiParameter: {
71
+ type: 'tuple',
72
+ name: 'foo',
73
+ components: [
74
+ { name: 'bar', type: 'string' },
75
+ { name: 'baz', type: 'string' },
76
+ ],
77
+ },
78
+ expected: '(string bar, string baz) foo',
79
+ },
80
+ {
81
+ abiParameter: { type: 'string', indexed: false },
82
+ expected: 'string',
83
+ },
84
+ {
85
+ abiParameter: { type: 'string', indexed: true },
86
+ expected: 'string indexed',
87
+ },
88
+ {
89
+ abiParameter: { type: 'string', indexed: true, name: 'foo' },
90
+ expected: 'string indexed foo',
91
+ },
92
+ ])('formatAbiParameter($abiParameter)', ({ abiParameter, expected }) => {
93
+ expect(formatAbiParameter(abiParameter)).toEqual(expected)
94
+ })
95
+
96
+ test('nested tuple', () => {
97
+ const result = formatAbiParameter({
98
+ components: [
99
+ {
100
+ components: [
101
+ {
102
+ components: [
103
+ {
104
+ components: [
105
+ {
106
+ name: 'baz',
107
+ type: 'string',
108
+ },
109
+ ],
110
+ name: 'bar',
111
+ type: 'tuple',
112
+ },
113
+ ],
114
+ name: 'foo',
115
+ type: 'tuple[1]',
116
+ },
117
+ ],
118
+ name: 'boo',
119
+ type: 'tuple',
120
+ },
121
+ ],
122
+ type: 'tuple',
123
+ })
124
+ expect(result).toMatchInlineSnapshot('"((((string baz) bar)[1] foo) boo)"')
125
+ assertType<'((((string baz) bar)[1] foo) boo)'>(result)
126
+ })
@@ -0,0 +1,86 @@
1
+ import type { AbiEventParameter, AbiParameter } from 'abitype'
2
+ import { execTyped } from './regex.js'
3
+ import type { IsNarrowable, Join } from './types.js'
4
+ import type { AssertName } from './types/signatures.js'
5
+
6
+ /**
7
+ * Formats `AbiParameter` to human-readable ABI parameter.
8
+ *
9
+ * @param abiParameter - ABI parameter
10
+ * @returns Human-readable ABI parameter
11
+ */
12
+ export type FormatAbiParameter<
13
+ abiParameter extends AbiParameter | AbiEventParameter,
14
+ > = abiParameter extends {
15
+ name?: infer name extends string
16
+ type: `tuple${infer array}`
17
+ components: infer components extends readonly AbiParameter[]
18
+ indexed?: infer indexed extends boolean
19
+ }
20
+ ? FormatAbiParameter<
21
+ {
22
+ type: `(${Join<
23
+ {
24
+ [key in keyof components]: FormatAbiParameter<
25
+ {
26
+ type: components[key]['type']
27
+ } & (IsNarrowable<components[key]['name'], string> extends true
28
+ ? { name: components[key]['name'] }
29
+ : unknown) &
30
+ (components[key] extends { components: readonly AbiParameter[] }
31
+ ? { components: components[key]['components'] }
32
+ : unknown)
33
+ >
34
+ },
35
+ ', '
36
+ >})${array}`
37
+ } & (IsNarrowable<name, string> extends true ? { name: name } : unknown) &
38
+ (IsNarrowable<indexed, boolean> extends true
39
+ ? { indexed: indexed }
40
+ : unknown)
41
+ >
42
+ : `${abiParameter['type']}${abiParameter extends { indexed: true }
43
+ ? ' indexed'
44
+ : ''}${abiParameter['name'] extends infer name extends string
45
+ ? name extends ''
46
+ ? ''
47
+ : ` ${AssertName<name>}`
48
+ : ''}`
49
+
50
+ // https://regexr.com/7f7rv
51
+ const tupleRegex = /^tuple(?<array>(\[(\d*)\])*)$/
52
+
53
+ /**
54
+ * Formats `AbiParameter` to human-readable ABI parameter.
55
+ *
56
+ * @param abiParameter - ABI parameter
57
+ * @returns Human-readable ABI parameter
58
+ */
59
+ export function formatAbiParameter<
60
+ const abiParameter extends AbiParameter | AbiEventParameter,
61
+ >(abiParameter: abiParameter): FormatAbiParameter<abiParameter> {
62
+ type Result = FormatAbiParameter<abiParameter>
63
+
64
+ let type = abiParameter.type
65
+ if (tupleRegex.test(abiParameter.type) && 'components' in abiParameter) {
66
+ type = '('
67
+ const length = abiParameter.components.length as number
68
+ for (let i = 0; i < length; i++) {
69
+ const component = abiParameter.components[i]!
70
+ type += formatAbiParameter(component)
71
+ if (i < length - 1) type += ', '
72
+ }
73
+ const result = execTyped<{ array?: string }>(tupleRegex, abiParameter.type)
74
+ type += `)${result?.array || ''}`
75
+ return formatAbiParameter({
76
+ ...abiParameter,
77
+ type,
78
+ }) as Result
79
+ }
80
+ // Add `indexed` to type if in `abiParameter`
81
+ if ('indexed' in abiParameter && abiParameter.indexed)
82
+ type = `${type} indexed`
83
+ // Return human-readable ABI parameter
84
+ if (abiParameter.name) return `${type} ${abiParameter.name}` as Result
85
+ return type as Result
86
+ }