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,92 @@
1
+ import { expectTypeOf, test } from 'vp/test'
2
+
3
+ import type { AbiParameter } from 'abitype'
4
+
5
+ import type { FormatAbiParameters } from './formatAbiParameters.js'
6
+ import { formatAbiParameters } from './formatAbiParameters.js'
7
+
8
+ test('FormatAbiParameters', () => {
9
+ // @ts-expect-error must have at least one parameter
10
+ expectTypeOf<FormatAbiParameters<[]>>().toEqualTypeOf<never>()
11
+
12
+ // string
13
+ expectTypeOf<
14
+ FormatAbiParameters<
15
+ [
16
+ {
17
+ readonly type: 'address'
18
+ readonly name: 'from'
19
+ },
20
+ ]
21
+ >
22
+ >().toEqualTypeOf<'address from'>()
23
+ expectTypeOf<
24
+ FormatAbiParameters<
25
+ [
26
+ {
27
+ readonly type: 'address'
28
+ readonly name: 'from'
29
+ readonly indexed: true
30
+ },
31
+ ]
32
+ >
33
+ >().toEqualTypeOf<'address indexed from'>()
34
+
35
+ // Array
36
+ expectTypeOf<
37
+ FormatAbiParameters<
38
+ [
39
+ {
40
+ readonly type: 'tuple'
41
+ readonly components: readonly [
42
+ {
43
+ readonly name: 'name'
44
+ readonly type: 'string'
45
+ },
46
+ ]
47
+ },
48
+ ]
49
+ >
50
+ >().toEqualTypeOf<'(string name)'>()
51
+
52
+ expectTypeOf<
53
+ FormatAbiParameters<
54
+ [
55
+ {
56
+ readonly type: 'tuple'
57
+ readonly components: readonly [
58
+ {
59
+ readonly type: 'string'
60
+ readonly name: 'bar'
61
+ },
62
+ ]
63
+ readonly name: 'foo'
64
+ },
65
+ ]
66
+ >
67
+ >().toEqualTypeOf<'(string bar) foo'>()
68
+ })
69
+
70
+ test('formatAbiParameter', () => {
71
+ expectTypeOf(
72
+ formatAbiParameters([
73
+ {
74
+ type: 'tuple',
75
+ components: [{ type: 'string' }],
76
+ },
77
+ ]),
78
+ ).toEqualTypeOf<'(string)'>()
79
+
80
+ const param = { type: 'address' }
81
+ const param2: AbiParameter = param
82
+
83
+ expectTypeOf(formatAbiParameters([param])).toEqualTypeOf<string>()
84
+
85
+ expectTypeOf(
86
+ formatAbiParameters([param, param]),
87
+ ).toEqualTypeOf<`${string}, ${string}`>()
88
+
89
+ expectTypeOf(
90
+ formatAbiParameters([param2, param2]),
91
+ ).toEqualTypeOf<`${string}, ${string}`>()
92
+ })
@@ -0,0 +1,32 @@
1
+ import { expect, expectTypeOf, test } from 'vp/test'
2
+
3
+ import { formatAbiParameters } from './formatAbiParameters.js'
4
+
5
+ test('default', () => {
6
+ const result = formatAbiParameters([
7
+ { type: 'address', name: 'foo' },
8
+ { type: 'uint256', name: 'bar' },
9
+ ])
10
+ expect(result).toEqual('address foo, uint256 bar')
11
+ expectTypeOf(result).toEqualTypeOf<'address foo, uint256 bar'>()
12
+ })
13
+
14
+ test('tuple', () => {
15
+ const result = formatAbiParameters([
16
+ {
17
+ type: 'tuple',
18
+ components: [
19
+ { type: 'string', name: 'bar' },
20
+ { type: 'string', name: 'baz' },
21
+ ],
22
+ name: 'foo',
23
+ },
24
+ { type: 'uint256', name: 'bar' },
25
+ ])
26
+ expect(result).toMatchInlineSnapshot(
27
+ '"(string bar, string baz) foo, uint256 bar"',
28
+ )
29
+ expectTypeOf(
30
+ result,
31
+ ).toEqualTypeOf<'(string bar, string baz) foo, uint256 bar'>()
32
+ })
@@ -0,0 +1,46 @@
1
+ import type { AbiEventParameter, AbiParameter } from 'abitype'
2
+ import type { Join } from './types.js'
3
+ import {
4
+ type FormatAbiParameter,
5
+ formatAbiParameter,
6
+ } from './formatAbiParameter.js'
7
+
8
+ /**
9
+ * Formats `AbiParameter`s to human-readable ABI parameter.
10
+ *
11
+ * @param abiParameters - ABI parameters
12
+ * @returns Human-readable ABI parameters
13
+ */
14
+ export type FormatAbiParameters<
15
+ abiParameters extends readonly [
16
+ AbiParameter | AbiEventParameter,
17
+ ...(readonly (AbiParameter | AbiEventParameter)[]),
18
+ ],
19
+ > = Join<
20
+ {
21
+ [key in keyof abiParameters]: FormatAbiParameter<abiParameters[key]>
22
+ },
23
+ ', '
24
+ >
25
+
26
+ /**
27
+ * Formats `AbiParameter`s to human-readable ABI parameters.
28
+ *
29
+ * @param abiParameters - ABI parameters
30
+ * @returns Human-readable ABI parameters
31
+ */
32
+ export function formatAbiParameters<
33
+ const abiParameters extends readonly [
34
+ AbiParameter | AbiEventParameter,
35
+ ...(readonly (AbiParameter | AbiEventParameter)[]),
36
+ ],
37
+ >(abiParameters: abiParameters): FormatAbiParameters<abiParameters> {
38
+ let params = ''
39
+ const length = abiParameters.length
40
+ for (let i = 0; i < length; i++) {
41
+ const abiParameter = abiParameters[i]!
42
+ params += formatAbiParameter(abiParameter)
43
+ if (i !== length - 1) params += ', '
44
+ }
45
+ return params as FormatAbiParameters<abiParameters>
46
+ }
@@ -0,0 +1,58 @@
1
+ import { attest } from '@ark/attest'
2
+ import { Abi, AbiItem, AbiParameter, AbiParameters } from 'ox'
3
+ import { describe, test } from 'vp/test'
4
+ import type { seaportHumanReadableAbi } from '../../../../test/abis/human-readable.js'
5
+
6
+ describe('human-readable ABI type instantiations', () => {
7
+ test('Abi.from.ReturnType: erc20-sized ABI', () => {
8
+ type Result = Abi.from.ReturnType<
9
+ [
10
+ 'function name() view returns (string)',
11
+ 'function symbol() view returns (string)',
12
+ 'function decimals() view returns (uint8)',
13
+ 'function totalSupply() view returns (uint256)',
14
+ 'function balanceOf(address owner) view returns (uint256)',
15
+ 'function transfer(address to, uint256 amount) returns (bool)',
16
+ 'function transferFrom(address from, address to, uint256 amount) returns (bool)',
17
+ 'function approve(address spender, uint256 amount) returns (bool)',
18
+ 'function allowance(address owner, address spender) view returns (uint256)',
19
+ 'event Transfer(address indexed from, address indexed to, uint256 amount)',
20
+ 'event Approval(address indexed owner, address indexed spender, uint256 amount)',
21
+ ]
22
+ >
23
+ attest.instantiations([45_000, 'instantiations'])
24
+ attest<Result>({} as Result)
25
+ })
26
+
27
+ test('Abi.from.ReturnType: seaport human-readable ABI', () => {
28
+ type Result = Abi.from.ReturnType<typeof seaportHumanReadableAbi>
29
+ attest.instantiations([5_000_000, 'instantiations'])
30
+ attest<Result>({} as Result)
31
+ })
32
+
33
+ test('AbiItem.from.ReturnType: struct item', () => {
34
+ type Result = AbiItem.from.ReturnType<
35
+ [
36
+ 'struct Foo { address spender; uint256 amount; }',
37
+ 'function approve(Foo foo) returns (bool)',
38
+ ]
39
+ >
40
+ attest.instantiations([15_000, 'instantiations'])
41
+ attest<Result>({} as Result)
42
+ })
43
+
44
+ test('AbiParameters.from.ReturnType: nested tuple parameters', () => {
45
+ type Result =
46
+ AbiParameters.from.ReturnType<'(uint8 a, uint8[] b, (uint8 x, uint8 y)[] c) s, (uint x, uint y) t, uint256 a'>
47
+ attest.instantiations([20_000, 'instantiations'])
48
+ attest<Result>({} as Result)
49
+ })
50
+
51
+ test('AbiParameter.from.ReturnType: struct parameter', () => {
52
+ type Result = AbiParameter.from.ReturnType<
53
+ ['struct Foo { address spender; uint256 amount; }', 'Foo foo']
54
+ >
55
+ attest.instantiations([10_000, 'instantiations'])
56
+ attest<Result>({} as Result)
57
+ })
58
+ })
@@ -0,0 +1,68 @@
1
+ import { expect, test } from 'vp/test'
2
+ import { formatAbiItem } from './formatAbiItem.js'
3
+ import { parseAbiItem } from './parseAbiItem.js'
4
+
5
+ test.each([
6
+ {
7
+ type: 'fallback',
8
+ stateMutability: 'payable',
9
+ } as const,
10
+ {
11
+ type: 'fallback',
12
+ stateMutability: 'nonpayable',
13
+ } as const,
14
+ {
15
+ type: 'receive',
16
+ stateMutability: 'payable',
17
+ } as const,
18
+ {
19
+ type: 'function',
20
+ name: 'foo',
21
+ inputs: [{ type: 'string' }],
22
+ outputs: [],
23
+ stateMutability: 'nonpayable',
24
+ } as const,
25
+ {
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
+ {
35
+ type: 'constructor',
36
+ stateMutability: 'nonpayable',
37
+ inputs: [{ type: 'string' }],
38
+ } as const,
39
+ {
40
+ type: 'constructor',
41
+ stateMutability: 'payable',
42
+ inputs: [{ type: 'string' }],
43
+ } as const,
44
+ {
45
+ type: 'function',
46
+ name: 'initWormhole',
47
+ inputs: [
48
+ {
49
+ type: 'tuple[]',
50
+ name: 'configs',
51
+ components: [
52
+ {
53
+ type: 'uint256',
54
+ name: 'chainId',
55
+ },
56
+ {
57
+ type: 'uint16',
58
+ name: 'wormholeChainId',
59
+ },
60
+ ],
61
+ },
62
+ ],
63
+ outputs: [],
64
+ stateMutability: 'nonpayable',
65
+ } as const,
66
+ ])('use of parseAbiItem - formatAbiItem should be reversible', (abiItem) => {
67
+ expect(parseAbiItem(formatAbiItem(abiItem))).toEqual(abiItem)
68
+ })
@@ -0,0 +1,188 @@
1
+ import { expectTypeOf, test } from 'vp/test'
2
+
3
+ import type { Abi } from 'abitype'
4
+
5
+ import { seaportHumanReadableAbi } from '../../../../test/abis/human-readable.js'
6
+ import type { IsAbi } from 'abitype'
7
+ import type { ParseAbi } from './parseAbi.js'
8
+ import { parseAbi } from './parseAbi.js'
9
+
10
+ test('ParseAbi', () => {
11
+ type SeaportAbi = ParseAbi<typeof seaportHumanReadableAbi>
12
+ expectTypeOf<IsAbi<SeaportAbi>>().toEqualTypeOf<true>()
13
+
14
+ expectTypeOf<ParseAbi<[]>>().toEqualTypeOf<never>()
15
+ expectTypeOf<
16
+ ParseAbi<['struct Foo { string name; }']>
17
+ >().toEqualTypeOf<never>()
18
+
19
+ expectTypeOf<
20
+ ParseAbi<
21
+ [
22
+ 'function foo()',
23
+ 'function bar(Foo, bytes32)',
24
+ 'struct Foo { string name; }',
25
+ ]
26
+ >
27
+ >().toEqualTypeOf<
28
+ readonly [
29
+ {
30
+ readonly name: 'foo'
31
+ readonly type: 'function'
32
+ readonly stateMutability: 'nonpayable'
33
+ readonly inputs: readonly []
34
+ readonly outputs: readonly []
35
+ },
36
+ {
37
+ readonly name: 'bar'
38
+ readonly type: 'function'
39
+ readonly stateMutability: 'nonpayable'
40
+ readonly inputs: readonly [
41
+ {
42
+ readonly type: 'tuple'
43
+ readonly components: readonly [
44
+ {
45
+ readonly name: 'name'
46
+ readonly type: 'string'
47
+ },
48
+ ]
49
+ },
50
+ {
51
+ readonly type: 'bytes32'
52
+ },
53
+ ]
54
+ readonly outputs: readonly []
55
+ },
56
+ ]
57
+ >()
58
+
59
+ expectTypeOf<
60
+ ParseAbi<
61
+ [
62
+ 'function balanceOf(address owner) view returns (uint256)',
63
+ 'event Transfer(address indexed from, address indexed to, uint256 amount)',
64
+ ]
65
+ >
66
+ >().toEqualTypeOf<
67
+ readonly [
68
+ {
69
+ readonly name: 'balanceOf'
70
+ readonly type: 'function'
71
+ readonly stateMutability: 'view'
72
+ readonly inputs: readonly [
73
+ {
74
+ readonly name: 'owner'
75
+ readonly type: 'address'
76
+ },
77
+ ]
78
+ readonly outputs: readonly [
79
+ {
80
+ readonly type: 'uint256'
81
+ },
82
+ ]
83
+ },
84
+ {
85
+ readonly name: 'Transfer'
86
+ readonly type: 'event'
87
+ readonly inputs: readonly [
88
+ {
89
+ readonly name: 'from'
90
+ readonly type: 'address'
91
+ readonly indexed: true
92
+ },
93
+ {
94
+ readonly name: 'to'
95
+ readonly type: 'address'
96
+ readonly indexed: true
97
+ },
98
+ {
99
+ readonly name: 'amount'
100
+ readonly type: 'uint256'
101
+ },
102
+ ]
103
+ },
104
+ ]
105
+ >()
106
+
107
+ expectTypeOf<ParseAbi<['function foo ()']>>().toEqualTypeOf<never>()
108
+ })
109
+
110
+ test('parseAbi', () => {
111
+ // @ts-expect-error empty array not allowed
112
+ expectTypeOf(parseAbi([])).toEqualTypeOf<never>()
113
+ expectTypeOf(parseAbi(['struct Foo { string name; }'])).toEqualTypeOf<never>()
114
+
115
+ // Array
116
+ const res2 = parseAbi([
117
+ 'function bar(Foo, bytes32)',
118
+ 'struct Foo { string name; }',
119
+ ])
120
+ expectTypeOf<typeof res2>().toEqualTypeOf<
121
+ readonly [
122
+ {
123
+ readonly name: 'bar'
124
+ readonly type: 'function'
125
+ readonly stateMutability: 'nonpayable'
126
+ readonly inputs: readonly [
127
+ {
128
+ readonly type: 'tuple'
129
+ readonly components: readonly [
130
+ {
131
+ readonly name: 'name'
132
+ readonly type: 'string'
133
+ },
134
+ ]
135
+ },
136
+ {
137
+ readonly type: 'bytes32'
138
+ },
139
+ ]
140
+ readonly outputs: readonly []
141
+ },
142
+ ]
143
+ >()
144
+
145
+ const abi2 = [
146
+ 'function foo()',
147
+ 'function bar(Foo, bytes32)',
148
+ 'struct Foo { string name; }',
149
+ ]
150
+ expectTypeOf(parseAbi(abi2)).toEqualTypeOf<Abi>()
151
+
152
+ // @ts-expect-error invalid signature
153
+ expectTypeOf(parseAbi(['function foo ()'])).toEqualTypeOf<never>()
154
+
155
+ const param: string[] = abi2
156
+ expectTypeOf(parseAbi(param)).toEqualTypeOf<Abi>()
157
+
158
+ const getOrderType = parseAbi(seaportHumanReadableAbi)[10]
159
+ expectTypeOf<typeof getOrderType>().toEqualTypeOf<{
160
+ readonly name: 'getOrderStatus'
161
+ readonly type: 'function'
162
+ readonly stateMutability: 'view'
163
+ readonly inputs: readonly [
164
+ {
165
+ readonly type: 'bytes32'
166
+ readonly name: 'orderHash'
167
+ },
168
+ ]
169
+ readonly outputs: readonly [
170
+ {
171
+ readonly type: 'bool'
172
+ readonly name: 'isValidated'
173
+ },
174
+ {
175
+ readonly type: 'bool'
176
+ readonly name: 'isCancelled'
177
+ },
178
+ {
179
+ readonly type: 'uint256'
180
+ readonly name: 'totalFilled'
181
+ },
182
+ {
183
+ readonly type: 'uint256'
184
+ readonly name: 'totalSize'
185
+ },
186
+ ]
187
+ }>()
188
+ })
@@ -0,0 +1,82 @@
1
+ import { expect, test } from 'vp/test'
2
+
3
+ import { seaportHumanReadableAbi } from '../../../../test/abis/human-readable.js'
4
+ import { parseAbi } from './parseAbi.js'
5
+
6
+ const customSolidityErrorsHumanReadableAbi = [
7
+ 'constructor()',
8
+ 'error ApprovalCallerNotOwnerNorApproved()',
9
+ 'error ApprovalQueryForNonexistentToken()',
10
+ ] as const
11
+
12
+ test('parseAbi', () => {
13
+ const result = parseAbi(seaportHumanReadableAbi)
14
+ expect(result).toMatchSnapshot()
15
+
16
+ expect(parseAbi(customSolidityErrorsHumanReadableAbi)).toMatchInlineSnapshot(`
17
+ [
18
+ {
19
+ "inputs": [],
20
+ "stateMutability": "nonpayable",
21
+ "type": "constructor",
22
+ },
23
+ {
24
+ "inputs": [],
25
+ "name": "ApprovalCallerNotOwnerNorApproved",
26
+ "type": "error",
27
+ },
28
+ {
29
+ "inputs": [],
30
+ "name": "ApprovalQueryForNonexistentToken",
31
+ "type": "error",
32
+ },
33
+ ]
34
+ `)
35
+ })
36
+
37
+ test('busts cache', () => {
38
+ const result1 = parseAbi([
39
+ 'function balanceOf(Baz baz)',
40
+ 'struct Baz {uint amount; string role;}',
41
+ ])
42
+ expect(result1[0].inputs).toMatchInlineSnapshot(`
43
+ [
44
+ {
45
+ "components": [
46
+ {
47
+ "name": "amount",
48
+ "type": "uint256",
49
+ },
50
+ {
51
+ "name": "role",
52
+ "type": "string",
53
+ },
54
+ ],
55
+ "name": "baz",
56
+ "type": "tuple",
57
+ },
58
+ ]
59
+ `)
60
+ const result2 = parseAbi([
61
+ 'function balanceOf(Baz baz)',
62
+ 'struct Baz {uint price; string role;}',
63
+ ])
64
+ expect(result2[0].inputs).toMatchInlineSnapshot(`
65
+ [
66
+ {
67
+ "components": [
68
+ {
69
+ "name": "price",
70
+ "type": "uint256",
71
+ },
72
+ {
73
+ "name": "role",
74
+ "type": "string",
75
+ },
76
+ ],
77
+ "name": "baz",
78
+ "type": "tuple",
79
+ },
80
+ ]
81
+ `)
82
+ })
@@ -0,0 +1,59 @@
1
+ import type { Abi } from 'abitype'
2
+ import type { Error, Filter } from './types.js'
3
+ import { isStructSignature } from './runtime/signatures.js'
4
+ import { parseStructs } from './runtime/structs.js'
5
+ import { parseSignature } from './runtime/utils.js'
6
+ import type { Signatures } from './types/signatures.js'
7
+ import type { ParseStructs } from './types/structs.js'
8
+ import type { ParseSignature } from './types/utils.js'
9
+
10
+ /**
11
+ * Parses human-readable ABI into JSON `Abi`.
12
+ *
13
+ * @param signatures - Human-readable ABI
14
+ * @returns Parsed `Abi`.
15
+ */
16
+ export type ParseAbi<signatures extends readonly string[]> =
17
+ string[] extends signatures
18
+ ? Abi // If `T` was not able to be inferred (e.g. just `string[]`), return `Abi`
19
+ : signatures extends readonly string[]
20
+ ? signatures extends Signatures<signatures> // Validate signatures
21
+ ? ParseStructs<signatures> extends infer structs
22
+ ? {
23
+ [key in keyof signatures]: signatures[key] extends string
24
+ ? ParseSignature<signatures[key], structs>
25
+ : never
26
+ } extends infer mapped extends readonly unknown[]
27
+ ? Filter<mapped, never> extends infer result
28
+ ? result extends readonly []
29
+ ? never
30
+ : result
31
+ : never
32
+ : never
33
+ : never
34
+ : never
35
+ : never
36
+
37
+ /**
38
+ * Parses human-readable ABI into JSON `Abi`.
39
+ *
40
+ * @param signatures - Human-Readable ABI
41
+ * @returns Parsed `Abi`.
42
+ */
43
+ export function parseAbi<const signatures extends readonly string[]>(
44
+ signatures: signatures['length'] extends 0
45
+ ? Error<'At least one signature required'>
46
+ : Signatures<signatures> extends signatures
47
+ ? signatures
48
+ : Signatures<signatures>,
49
+ ): ParseAbi<signatures> {
50
+ const structs = parseStructs(signatures as readonly string[])
51
+ const abi = []
52
+ const length = signatures.length as number
53
+ for (let i = 0; i < length; i++) {
54
+ const signature = (signatures as readonly string[])[i]!
55
+ if (isStructSignature(signature)) continue
56
+ abi.push(parseSignature(signature, structs))
57
+ }
58
+ return abi as unknown as ParseAbi<signatures>
59
+ }