@coinbase/cdp-sdk 1.1.2 → 1.3.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 (332) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/README.md +88 -1
  4. package/{dist → _cjs}/accounts/evm/toEvmServerAccount.js +1 -0
  5. package/_cjs/accounts/evm/toEvmServerAccount.js.map +1 -0
  6. package/{dist → _cjs}/accounts/evm/toEvmSmartAccount.js +1 -0
  7. package/_cjs/accounts/evm/toEvmSmartAccount.js.map +1 -0
  8. package/{dist → _cjs}/accounts/types.js +1 -0
  9. package/_cjs/accounts/types.js.map +1 -0
  10. package/{dist → _cjs}/actions/evm/sendUserOperation.js +1 -0
  11. package/_cjs/actions/evm/sendUserOperation.js.map +1 -0
  12. package/{dist → _cjs}/actions/evm/waitForUserOperation.js +10 -9
  13. package/_cjs/actions/evm/waitForUserOperation.js.map +1 -0
  14. package/{dist → _cjs}/analytics.js +32 -12
  15. package/_cjs/analytics.js.map +1 -0
  16. package/{dist → _cjs}/auth/errors.js +1 -0
  17. package/_cjs/auth/errors.js.map +1 -0
  18. package/{dist → _cjs}/auth/hooks/axios/index.js +2 -1
  19. package/_cjs/auth/hooks/axios/index.js.map +1 -0
  20. package/{dist → _cjs}/auth/hooks/axios/withAuth.js +4 -2
  21. package/_cjs/auth/hooks/axios/withAuth.js.map +1 -0
  22. package/{dist → _cjs}/auth/index.js +4 -3
  23. package/_cjs/auth/index.js.map +1 -0
  24. package/{dist → _cjs}/auth/utils/http.js +6 -5
  25. package/_cjs/auth/utils/http.js.map +1 -0
  26. package/{dist → _cjs}/auth/utils/index.js +3 -2
  27. package/_cjs/auth/utils/index.js.map +1 -0
  28. package/{dist → _cjs}/auth/utils/jwt.js +4 -3
  29. package/_cjs/auth/utils/jwt.js.map +1 -0
  30. package/_cjs/client/cdp.js +101 -0
  31. package/_cjs/client/cdp.js.map +1 -0
  32. package/_cjs/client/evm/evm.js +641 -0
  33. package/_cjs/client/evm/evm.js.map +1 -0
  34. package/{dist → _cjs}/client/evm/evm.types.js +1 -0
  35. package/_cjs/client/evm/evm.types.js.map +1 -0
  36. package/{dist → _cjs}/client/solana/index.js +3 -2
  37. package/_cjs/client/solana/index.js.map +1 -0
  38. package/{dist → _cjs}/client/solana/solana.js +9 -8
  39. package/_cjs/client/solana/solana.js.map +1 -0
  40. package/{dist → _cjs}/client/solana/solana.types.js +1 -0
  41. package/_cjs/client/solana/solana.types.js.map +1 -0
  42. package/{dist → _cjs}/constants.js +1 -0
  43. package/_cjs/constants.js.map +1 -0
  44. package/{dist → _cjs}/errors.js +1 -0
  45. package/_cjs/errors.js.map +1 -0
  46. package/{dist → _cjs}/index.js +4 -3
  47. package/_cjs/index.js.map +1 -0
  48. package/_cjs/openapi-client/cdpApiClient.js +116 -0
  49. package/_cjs/openapi-client/cdpApiClient.js.map +1 -0
  50. package/{dist → _cjs}/openapi-client/errors.js +44 -3
  51. package/_cjs/openapi-client/errors.js.map +1 -0
  52. package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +66 -0
  53. package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -0
  54. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.js +125 -0
  55. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -0
  56. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.msw.js +160 -0
  57. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.msw.js.map +1 -0
  58. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +70 -0
  59. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -0
  60. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +188 -0
  61. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -0
  62. package/_cjs/openapi-client/generated/evm-token-balances/evm-token-balances.js +15 -0
  63. package/_cjs/openapi-client/generated/evm-token-balances/evm-token-balances.js.map +1 -0
  64. package/_cjs/openapi-client/generated/evm-token-balances/evm-token-balances.msw.js +45 -0
  65. package/_cjs/openapi-client/generated/evm-token-balances/evm-token-balances.msw.js.map +1 -0
  66. package/{dist → _cjs}/openapi-client/generated/faucets/faucets.js +20 -14
  67. package/_cjs/openapi-client/generated/faucets/faucets.js.map +1 -0
  68. package/{dist → _cjs}/openapi-client/generated/faucets/faucets.msw.js +16 -12
  69. package/_cjs/openapi-client/generated/faucets/faucets.msw.js.map +1 -0
  70. package/{dist → _cjs}/openapi-client/generated/index.msw.js +6 -4
  71. package/_cjs/openapi-client/generated/index.msw.js.map +1 -0
  72. package/{dist → _cjs}/openapi-client/generated/solana-accounts/solana-accounts.js +38 -35
  73. package/_cjs/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -0
  74. package/{dist → _cjs}/openapi-client/generated/solana-accounts/solana-accounts.msw.js +68 -35
  75. package/_cjs/openapi-client/generated/solana-accounts/solana-accounts.msw.js.map +1 -0
  76. package/{dist → _cjs}/openapi-client/index.js +16 -11
  77. package/_cjs/openapi-client/index.js.map +1 -0
  78. package/_cjs/package.json +1 -0
  79. package/{dist → _cjs}/types/calls.js +1 -0
  80. package/_cjs/types/calls.js.map +1 -0
  81. package/{dist → _cjs}/types/contract.js +1 -0
  82. package/_cjs/types/contract.js.map +1 -0
  83. package/{dist → _cjs}/types/misc.js +1 -0
  84. package/_cjs/types/misc.js.map +1 -0
  85. package/{dist → _cjs}/types/multicall.js +1 -0
  86. package/_cjs/types/multicall.js.map +1 -0
  87. package/{dist → _cjs}/types/utils.js +1 -0
  88. package/_cjs/types/utils.js.map +1 -0
  89. package/{dist → _cjs}/utils/wait.js +3 -2
  90. package/_cjs/utils/wait.js.map +1 -0
  91. package/_cjs/version.js +5 -0
  92. package/_cjs/version.js.map +1 -0
  93. package/_esm/accounts/evm/toEvmServerAccount.js +40 -0
  94. package/_esm/accounts/evm/toEvmServerAccount.js.map +1 -0
  95. package/_esm/accounts/evm/toEvmSmartAccount.js +22 -0
  96. package/_esm/accounts/evm/toEvmSmartAccount.js.map +1 -0
  97. package/_esm/accounts/types.js +2 -0
  98. package/_esm/accounts/types.js.map +1 -0
  99. package/_esm/actions/evm/sendUserOperation.js +85 -0
  100. package/_esm/actions/evm/sendUserOperation.js.map +1 -0
  101. package/_esm/actions/evm/waitForUserOperation.js +58 -0
  102. package/_esm/actions/evm/waitForUserOperation.js.map +1 -0
  103. package/_esm/analytics.js +101 -0
  104. package/_esm/analytics.js.map +1 -0
  105. package/_esm/auth/errors.js +57 -0
  106. package/_esm/auth/errors.js.map +1 -0
  107. package/_esm/auth/hooks/axios/index.js +2 -0
  108. package/_esm/auth/hooks/axios/index.js.map +1 -0
  109. package/_esm/auth/hooks/axios/withAuth.js +72 -0
  110. package/_esm/auth/hooks/axios/withAuth.js.map +1 -0
  111. package/_esm/auth/index.js +5 -0
  112. package/_esm/auth/index.js.map +1 -0
  113. package/_esm/auth/utils/http.js +70 -0
  114. package/_esm/auth/utils/http.js.map +1 -0
  115. package/_esm/auth/utils/index.js +3 -0
  116. package/_esm/auth/utils/index.js.map +1 -0
  117. package/_esm/auth/utils/jwt.js +199 -0
  118. package/_esm/auth/utils/jwt.js.map +1 -0
  119. package/{dist → _esm}/client/cdp.js +16 -13
  120. package/_esm/client/cdp.js.map +1 -0
  121. package/{dist → _esm}/client/evm/evm.js +146 -30
  122. package/_esm/client/evm/evm.js.map +1 -0
  123. package/_esm/client/evm/evm.types.js +2 -0
  124. package/_esm/client/evm/evm.types.js.map +1 -0
  125. package/_esm/client/solana/index.js +2 -0
  126. package/_esm/client/solana/index.js.map +1 -0
  127. package/_esm/client/solana/solana.js +204 -0
  128. package/_esm/client/solana/solana.js.map +1 -0
  129. package/_esm/client/solana/solana.types.js +2 -0
  130. package/_esm/client/solana/solana.types.js.map +1 -0
  131. package/_esm/constants.js +5 -0
  132. package/_esm/constants.js.map +1 -0
  133. package/_esm/errors.js +18 -0
  134. package/_esm/errors.js.map +1 -0
  135. package/_esm/index.js +3 -0
  136. package/_esm/index.js.map +1 -0
  137. package/_esm/openapi-client/cdpApiClient.js +108 -0
  138. package/_esm/openapi-client/cdpApiClient.js.map +1 -0
  139. package/_esm/openapi-client/errors.js +104 -0
  140. package/_esm/openapi-client/errors.js.map +1 -0
  141. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +63 -0
  142. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -0
  143. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js +114 -0
  144. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -0
  145. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.msw.js +140 -0
  146. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.msw.js.map +1 -0
  147. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +61 -0
  148. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -0
  149. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +172 -0
  150. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -0
  151. package/_esm/openapi-client/generated/evm-token-balances/evm-token-balances.js +11 -0
  152. package/_esm/openapi-client/generated/evm-token-balances/evm-token-balances.js.map +1 -0
  153. package/_esm/openapi-client/generated/evm-token-balances/evm-token-balances.msw.js +39 -0
  154. package/_esm/openapi-client/generated/evm-token-balances/evm-token-balances.msw.js.map +1 -0
  155. package/_esm/openapi-client/generated/faucets/faucets.js +52 -0
  156. package/_esm/openapi-client/generated/faucets/faucets.js.map +1 -0
  157. package/_esm/openapi-client/generated/faucets/faucets.msw.js +39 -0
  158. package/_esm/openapi-client/generated/faucets/faucets.msw.js.map +1 -0
  159. package/_esm/openapi-client/generated/index.msw.js +6 -0
  160. package/_esm/openapi-client/generated/index.msw.js.map +1 -0
  161. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.js +73 -0
  162. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -0
  163. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.msw.js +116 -0
  164. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.msw.js.map +1 -0
  165. package/_esm/openapi-client/index.js +31 -0
  166. package/_esm/openapi-client/index.js.map +1 -0
  167. package/_esm/package.json +1 -0
  168. package/_esm/types/calls.js +4 -0
  169. package/_esm/types/calls.js.map +1 -0
  170. package/_esm/types/contract.js +4 -0
  171. package/_esm/types/contract.js.map +1 -0
  172. package/_esm/types/misc.js +3 -0
  173. package/_esm/types/misc.js.map +1 -0
  174. package/_esm/types/multicall.js +2 -0
  175. package/_esm/types/multicall.js.map +1 -0
  176. package/_esm/types/utils.js +4 -0
  177. package/_esm/types/utils.js.map +1 -0
  178. package/_esm/utils/wait.js +32 -0
  179. package/_esm/utils/wait.js.map +1 -0
  180. package/_esm/version.js +2 -0
  181. package/_esm/version.js.map +1 -0
  182. package/{dist → _types}/accounts/evm/toEvmServerAccount.d.ts +3 -2
  183. package/_types/accounts/evm/toEvmServerAccount.d.ts.map +1 -0
  184. package/{dist → _types}/accounts/evm/toEvmSmartAccount.d.ts +3 -2
  185. package/_types/accounts/evm/toEvmSmartAccount.d.ts.map +1 -0
  186. package/{dist → _types}/accounts/types.d.ts +3 -2
  187. package/_types/accounts/types.d.ts.map +1 -0
  188. package/{dist → _types}/actions/evm/sendUserOperation.d.ts +5 -5
  189. package/_types/actions/evm/sendUserOperation.d.ts.map +1 -0
  190. package/{dist → _types}/actions/evm/waitForUserOperation.d.ts +4 -3
  191. package/_types/actions/evm/waitForUserOperation.d.ts.map +1 -0
  192. package/{dist → _types}/analytics.d.ts +16 -0
  193. package/_types/analytics.d.ts.map +1 -0
  194. package/{dist → _types}/auth/errors.d.ts +1 -0
  195. package/_types/auth/errors.d.ts.map +1 -0
  196. package/_types/auth/hooks/axios/index.d.ts +2 -0
  197. package/_types/auth/hooks/axios/index.d.ts.map +1 -0
  198. package/{dist → _types}/auth/hooks/axios/withAuth.d.ts +1 -0
  199. package/_types/auth/hooks/axios/withAuth.d.ts.map +1 -0
  200. package/_types/auth/index.d.ts +5 -0
  201. package/_types/auth/index.d.ts.map +1 -0
  202. package/{dist → _types}/auth/utils/http.d.ts +1 -0
  203. package/_types/auth/utils/http.d.ts.map +1 -0
  204. package/_types/auth/utils/index.d.ts +3 -0
  205. package/_types/auth/utils/index.d.ts.map +1 -0
  206. package/{dist → _types}/auth/utils/jwt.d.ts +1 -0
  207. package/_types/auth/utils/jwt.d.ts.map +1 -0
  208. package/{dist → _types}/client/cdp.d.ts +3 -2
  209. package/_types/client/cdp.d.ts.map +1 -0
  210. package/{dist → _types}/client/evm/evm.d.ts +86 -3
  211. package/_types/client/evm/evm.d.ts.map +1 -0
  212. package/{dist → _types}/client/evm/evm.types.d.ts +104 -7
  213. package/_types/client/evm/evm.types.d.ts.map +1 -0
  214. package/_types/client/solana/index.d.ts +2 -0
  215. package/_types/client/solana/index.d.ts.map +1 -0
  216. package/{dist → _types}/client/solana/solana.d.ts +2 -1
  217. package/_types/client/solana/solana.d.ts.map +1 -0
  218. package/{dist → _types}/client/solana/solana.types.d.ts +2 -1
  219. package/_types/client/solana/solana.types.d.ts.map +1 -0
  220. package/{dist → _types}/constants.d.ts +1 -0
  221. package/_types/constants.d.ts.map +1 -0
  222. package/{dist → _types}/errors.d.ts +1 -0
  223. package/_types/errors.d.ts.map +1 -0
  224. package/_types/index.d.ts +4 -0
  225. package/_types/index.d.ts.map +1 -0
  226. package/{dist → _types}/openapi-client/cdpApiClient.d.ts +1 -0
  227. package/_types/openapi-client/cdpApiClient.d.ts.map +1 -0
  228. package/{dist → _types}/openapi-client/errors.d.ts +30 -2
  229. package/_types/openapi-client/errors.d.ts.map +1 -0
  230. package/{dist → _types}/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts +100 -14
  231. package/_types/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts.map +1 -0
  232. package/_types/openapi-client/generated/evm-accounts/evm-accounts.d.ts +91 -0
  233. package/_types/openapi-client/generated/evm-accounts/evm-accounts.d.ts.map +1 -0
  234. package/{dist → _types}/openapi-client/generated/evm-accounts/evm-accounts.msw.d.ts +5 -2
  235. package/_types/openapi-client/generated/evm-accounts/evm-accounts.msw.d.ts.map +1 -0
  236. package/{dist → _types}/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts +22 -20
  237. package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts.map +1 -0
  238. package/{dist → _types}/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.d.ts +3 -2
  239. package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.d.ts.map +1 -0
  240. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.d.ts +20 -0
  241. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.d.ts.map +1 -0
  242. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.msw.d.ts +6 -0
  243. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.msw.d.ts.map +1 -0
  244. package/{dist → _types}/openapi-client/generated/faucets/faucets.d.ts +11 -9
  245. package/_types/openapi-client/generated/faucets/faucets.d.ts.map +1 -0
  246. package/{dist → _types}/openapi-client/generated/faucets/faucets.msw.d.ts +3 -2
  247. package/_types/openapi-client/generated/faucets/faucets.msw.d.ts.map +1 -0
  248. package/_types/openapi-client/generated/index.msw.d.ts +6 -0
  249. package/_types/openapi-client/generated/index.msw.d.ts.map +1 -0
  250. package/{dist → _types}/openapi-client/generated/solana-accounts/solana-accounts.d.ts +21 -20
  251. package/_types/openapi-client/generated/solana-accounts/solana-accounts.d.ts.map +1 -0
  252. package/{dist → _types}/openapi-client/generated/solana-accounts/solana-accounts.msw.d.ts +3 -2
  253. package/_types/openapi-client/generated/solana-accounts/solana-accounts.msw.d.ts.map +1 -0
  254. package/_types/openapi-client/index.d.ts +61 -0
  255. package/_types/openapi-client/index.d.ts.map +1 -0
  256. package/{dist → _types}/types/calls.d.ts +4 -3
  257. package/_types/types/calls.d.ts.map +1 -0
  258. package/{dist → _types}/types/contract.d.ts +3 -2
  259. package/_types/types/contract.d.ts.map +1 -0
  260. package/_types/types/misc.d.ts +41 -0
  261. package/_types/types/misc.d.ts.map +1 -0
  262. package/{dist → _types}/types/multicall.d.ts +2 -1
  263. package/_types/types/multicall.d.ts.map +1 -0
  264. package/{dist → _types}/types/utils.d.ts +1 -0
  265. package/_types/types/utils.d.ts.map +1 -0
  266. package/{dist → _types}/utils/wait.d.ts +1 -0
  267. package/_types/utils/wait.d.ts.map +1 -0
  268. package/_types/version.d.ts +2 -0
  269. package/_types/version.d.ts.map +1 -0
  270. package/accounts/evm/toEvmServerAccount.ts +60 -0
  271. package/accounts/evm/toEvmSmartAccount.ts +37 -0
  272. package/accounts/types.ts +53 -0
  273. package/actions/evm/sendUserOperation.ts +163 -0
  274. package/actions/evm/waitForUserOperation.ts +115 -0
  275. package/analytics.ts +142 -0
  276. package/auth/README.md +145 -0
  277. package/auth/errors.ts +59 -0
  278. package/auth/hooks/axios/index.ts +1 -0
  279. package/auth/hooks/axios/withAuth.ts +121 -0
  280. package/auth/index.ts +5 -0
  281. package/auth/utils/http.ts +146 -0
  282. package/auth/utils/index.ts +2 -0
  283. package/auth/utils/jwt.ts +324 -0
  284. package/client/cdp.ts +116 -0
  285. package/client/evm/evm.ts +739 -0
  286. package/client/evm/evm.types.ts +408 -0
  287. package/client/solana/index.ts +1 -0
  288. package/client/solana/solana.ts +237 -0
  289. package/client/solana/solana.types.ts +114 -0
  290. package/constants.ts +4 -0
  291. package/errors.ts +17 -0
  292. package/index.ts +4 -0
  293. package/openapi-client/cdpApiClient.ts +221 -0
  294. package/openapi-client/errors.ts +132 -0
  295. package/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.ts +512 -0
  296. package/openapi-client/generated/evm-accounts/evm-accounts.msw.ts +271 -0
  297. package/openapi-client/generated/evm-accounts/evm-accounts.ts +194 -0
  298. package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.ts +283 -0
  299. package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.ts +132 -0
  300. package/openapi-client/generated/evm-token-balances/evm-token-balances.msw.ts +57 -0
  301. package/openapi-client/generated/evm-token-balances/evm-token-balances.ts +37 -0
  302. package/openapi-client/generated/faucets/faucets.msw.ts +76 -0
  303. package/openapi-client/generated/faucets/faucets.ts +84 -0
  304. package/openapi-client/generated/index.msw.ts +5 -0
  305. package/openapi-client/generated/solana-accounts/solana-accounts.msw.ts +219 -0
  306. package/openapi-client/generated/solana-accounts/solana-accounts.ts +143 -0
  307. package/openapi-client/index.ts +36 -0
  308. package/package.json +31 -66
  309. package/types/calls.ts +40 -0
  310. package/types/contract.ts +126 -0
  311. package/types/misc.ts +44 -0
  312. package/types/multicall.ts +29 -0
  313. package/types/utils.ts +288 -0
  314. package/utils/wait.ts +52 -0
  315. package/version.ts +1 -0
  316. package/dist/auth/hooks/axios/index.d.ts +0 -1
  317. package/dist/auth/index.d.ts +0 -4
  318. package/dist/auth/utils/index.d.ts +0 -2
  319. package/dist/client/evm/index.d.ts +0 -1
  320. package/dist/client/evm/index.js +0 -5
  321. package/dist/client/solana/index.d.ts +0 -1
  322. package/dist/index.d.ts +0 -3
  323. package/dist/openapi-client/cdpApiClient.js +0 -146
  324. package/dist/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +0 -54
  325. package/dist/openapi-client/generated/evm-accounts/evm-accounts.d.ts +0 -62
  326. package/dist/openapi-client/generated/evm-accounts/evm-accounts.js +0 -85
  327. package/dist/openapi-client/generated/evm-accounts/evm-accounts.msw.js +0 -113
  328. package/dist/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +0 -66
  329. package/dist/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +0 -99
  330. package/dist/openapi-client/generated/index.msw.d.ts +0 -4
  331. package/dist/openapi-client/index.d.ts +0 -55
  332. package/dist/types/misc.d.ts +0 -3
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Generated by orval v7.6.0 🍺
3
+ * Do not edit manually.
4
+ * Coinbase Developer Platform APIs
5
+ * The Coinbase Developer Platform APIs - leading the world's transition onchain.
6
+ * OpenAPI spec version: 2.0.0
7
+ */
8
+ import { faker } from "@faker-js/faker";
9
+
10
+ import { HttpResponse, delay, http } from "msw";
11
+
12
+ import type {
13
+ ListSolanaAccounts200,
14
+ SignSolanaMessage200,
15
+ SignSolanaTransaction200,
16
+ SolanaAccount,
17
+ } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
18
+
19
+ export const getListSolanaAccountsResponseMock = (): ListSolanaAccounts200 => ({
20
+ ...{
21
+ accounts: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(
22
+ () => ({
23
+ address: faker.helpers.fromRegExp("^[1-9A-HJ-NP-Za-km-z]{32,44}$"),
24
+ name: faker.helpers.arrayElement([
25
+ faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
26
+ undefined,
27
+ ]),
28
+ }),
29
+ ),
30
+ },
31
+ ...{ nextPageToken: faker.helpers.arrayElement([faker.string.alpha(20), undefined]) },
32
+ });
33
+
34
+ export const getCreateSolanaAccountResponseMock = (
35
+ overrideResponse: Partial<SolanaAccount> = {},
36
+ ): SolanaAccount => ({
37
+ address: faker.helpers.fromRegExp("^[1-9A-HJ-NP-Za-km-z]{32,44}$"),
38
+ name: faker.helpers.arrayElement([
39
+ faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
40
+ undefined,
41
+ ]),
42
+ ...overrideResponse,
43
+ });
44
+
45
+ export const getGetSolanaAccountResponseMock = (
46
+ overrideResponse: Partial<SolanaAccount> = {},
47
+ ): SolanaAccount => ({
48
+ address: faker.helpers.fromRegExp("^[1-9A-HJ-NP-Za-km-z]{32,44}$"),
49
+ name: faker.helpers.arrayElement([
50
+ faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
51
+ undefined,
52
+ ]),
53
+ ...overrideResponse,
54
+ });
55
+
56
+ export const getGetSolanaAccountByNameResponseMock = (
57
+ overrideResponse: Partial<SolanaAccount> = {},
58
+ ): SolanaAccount => ({
59
+ address: faker.helpers.fromRegExp("^[1-9A-HJ-NP-Za-km-z]{32,44}$"),
60
+ name: faker.helpers.arrayElement([
61
+ faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
62
+ undefined,
63
+ ]),
64
+ ...overrideResponse,
65
+ });
66
+
67
+ export const getSignSolanaTransactionResponseMock = (
68
+ overrideResponse: Partial<SignSolanaTransaction200> = {},
69
+ ): SignSolanaTransaction200 => ({ signedTransaction: faker.string.alpha(20), ...overrideResponse });
70
+
71
+ export const getSignSolanaMessageResponseMock = (
72
+ overrideResponse: Partial<SignSolanaMessage200> = {},
73
+ ): SignSolanaMessage200 => ({ signature: faker.string.alpha(20), ...overrideResponse });
74
+
75
+ export const getListSolanaAccountsMockHandler = (
76
+ overrideResponse?:
77
+ | ListSolanaAccounts200
78
+ | ((
79
+ info: Parameters<Parameters<typeof http.get>[1]>[0],
80
+ ) => Promise<ListSolanaAccounts200> | ListSolanaAccounts200),
81
+ ) => {
82
+ return http.get("*/v2/solana/accounts", async info => {
83
+ await delay(0);
84
+
85
+ return new HttpResponse(
86
+ JSON.stringify(
87
+ overrideResponse !== undefined
88
+ ? typeof overrideResponse === "function"
89
+ ? await overrideResponse(info)
90
+ : overrideResponse
91
+ : getListSolanaAccountsResponseMock(),
92
+ ),
93
+ { status: 200, headers: { "Content-Type": "application/json" } },
94
+ );
95
+ });
96
+ };
97
+
98
+ export const getCreateSolanaAccountMockHandler = (
99
+ overrideResponse?:
100
+ | SolanaAccount
101
+ | ((
102
+ info: Parameters<Parameters<typeof http.post>[1]>[0],
103
+ ) => Promise<SolanaAccount> | SolanaAccount),
104
+ ) => {
105
+ return http.post("*/v2/solana/accounts", async info => {
106
+ await delay(0);
107
+
108
+ return new HttpResponse(
109
+ JSON.stringify(
110
+ overrideResponse !== undefined
111
+ ? typeof overrideResponse === "function"
112
+ ? await overrideResponse(info)
113
+ : overrideResponse
114
+ : getCreateSolanaAccountResponseMock(),
115
+ ),
116
+ { status: 201, headers: { "Content-Type": "application/json" } },
117
+ );
118
+ });
119
+ };
120
+
121
+ export const getGetSolanaAccountMockHandler = (
122
+ overrideResponse?:
123
+ | SolanaAccount
124
+ | ((
125
+ info: Parameters<Parameters<typeof http.get>[1]>[0],
126
+ ) => Promise<SolanaAccount> | SolanaAccount),
127
+ ) => {
128
+ return http.get("*/v2/solana/accounts/:address", async info => {
129
+ await delay(0);
130
+
131
+ return new HttpResponse(
132
+ JSON.stringify(
133
+ overrideResponse !== undefined
134
+ ? typeof overrideResponse === "function"
135
+ ? await overrideResponse(info)
136
+ : overrideResponse
137
+ : getGetSolanaAccountResponseMock(),
138
+ ),
139
+ { status: 200, headers: { "Content-Type": "application/json" } },
140
+ );
141
+ });
142
+ };
143
+
144
+ export const getGetSolanaAccountByNameMockHandler = (
145
+ overrideResponse?:
146
+ | SolanaAccount
147
+ | ((
148
+ info: Parameters<Parameters<typeof http.get>[1]>[0],
149
+ ) => Promise<SolanaAccount> | SolanaAccount),
150
+ ) => {
151
+ return http.get("*/v2/solana/accounts/by-name/:name", async info => {
152
+ await delay(0);
153
+
154
+ return new HttpResponse(
155
+ JSON.stringify(
156
+ overrideResponse !== undefined
157
+ ? typeof overrideResponse === "function"
158
+ ? await overrideResponse(info)
159
+ : overrideResponse
160
+ : getGetSolanaAccountByNameResponseMock(),
161
+ ),
162
+ { status: 200, headers: { "Content-Type": "application/json" } },
163
+ );
164
+ });
165
+ };
166
+
167
+ export const getSignSolanaTransactionMockHandler = (
168
+ overrideResponse?:
169
+ | SignSolanaTransaction200
170
+ | ((
171
+ info: Parameters<Parameters<typeof http.post>[1]>[0],
172
+ ) => Promise<SignSolanaTransaction200> | SignSolanaTransaction200),
173
+ ) => {
174
+ return http.post("*/v2/solana/accounts/:address/sign/transaction", async info => {
175
+ await delay(0);
176
+
177
+ return new HttpResponse(
178
+ JSON.stringify(
179
+ overrideResponse !== undefined
180
+ ? typeof overrideResponse === "function"
181
+ ? await overrideResponse(info)
182
+ : overrideResponse
183
+ : getSignSolanaTransactionResponseMock(),
184
+ ),
185
+ { status: 200, headers: { "Content-Type": "application/json" } },
186
+ );
187
+ });
188
+ };
189
+
190
+ export const getSignSolanaMessageMockHandler = (
191
+ overrideResponse?:
192
+ | SignSolanaMessage200
193
+ | ((
194
+ info: Parameters<Parameters<typeof http.post>[1]>[0],
195
+ ) => Promise<SignSolanaMessage200> | SignSolanaMessage200),
196
+ ) => {
197
+ return http.post("*/v2/solana/accounts/:address/sign/message", async info => {
198
+ await delay(0);
199
+
200
+ return new HttpResponse(
201
+ JSON.stringify(
202
+ overrideResponse !== undefined
203
+ ? typeof overrideResponse === "function"
204
+ ? await overrideResponse(info)
205
+ : overrideResponse
206
+ : getSignSolanaMessageResponseMock(),
207
+ ),
208
+ { status: 200, headers: { "Content-Type": "application/json" } },
209
+ );
210
+ });
211
+ };
212
+ export const getSolanaAccountsMock = () => [
213
+ getListSolanaAccountsMockHandler(),
214
+ getCreateSolanaAccountMockHandler(),
215
+ getGetSolanaAccountMockHandler(),
216
+ getGetSolanaAccountByNameMockHandler(),
217
+ getSignSolanaTransactionMockHandler(),
218
+ getSignSolanaMessageMockHandler(),
219
+ ];
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Generated by orval v7.6.0 🍺
3
+ * Do not edit manually.
4
+ * Coinbase Developer Platform APIs
5
+ * The Coinbase Developer Platform APIs - leading the world's transition onchain.
6
+ * OpenAPI spec version: 2.0.0
7
+ */
8
+ import type {
9
+ CreateSolanaAccountBody,
10
+ ListSolanaAccounts200,
11
+ ListSolanaAccountsParams,
12
+ SignSolanaMessage200,
13
+ SignSolanaMessageBody,
14
+ SignSolanaTransaction200,
15
+ SignSolanaTransactionBody,
16
+ SolanaAccount,
17
+ } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
18
+
19
+ import { cdpApiClient } from "../../cdpApiClient.js";
20
+
21
+ type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];
22
+
23
+ /**
24
+ * Lists the Solana accounts belonging to the developer.
25
+ The response is paginated, and by default, returns 20 accounts per page.
26
+
27
+ If a name is provided, the response will contain only the account with that name.
28
+ * @summary List Solana accounts or get account by name
29
+ */
30
+ export const listSolanaAccounts = (
31
+ params?: ListSolanaAccountsParams,
32
+ options?: SecondParameter<typeof cdpApiClient>,
33
+ ) => {
34
+ return cdpApiClient<ListSolanaAccounts200>(
35
+ { url: `/v2/solana/accounts`, method: "GET", params },
36
+ options,
37
+ );
38
+ };
39
+ /**
40
+ * Creates a new Solana account.
41
+ * @summary Create a Solana account
42
+ */
43
+ export const createSolanaAccount = (
44
+ createSolanaAccountBody?: CreateSolanaAccountBody,
45
+ options?: SecondParameter<typeof cdpApiClient>,
46
+ ) => {
47
+ return cdpApiClient<SolanaAccount>(
48
+ {
49
+ url: `/v2/solana/accounts`,
50
+ method: "POST",
51
+ headers: { "Content-Type": "application/json" },
52
+ data: createSolanaAccountBody,
53
+ },
54
+ options,
55
+ );
56
+ };
57
+ /**
58
+ * Gets a Solana account by its address.
59
+ * @summary Get a Solana account by address
60
+ */
61
+ export const getSolanaAccount = (
62
+ address: string,
63
+ options?: SecondParameter<typeof cdpApiClient>,
64
+ ) => {
65
+ return cdpApiClient<SolanaAccount>(
66
+ { url: `/v2/solana/accounts/${address}`, method: "GET" },
67
+ options,
68
+ );
69
+ };
70
+ /**
71
+ * Gets a Solana account by its name.
72
+ * @summary Get a Solana account by name
73
+ */
74
+ export const getSolanaAccountByName = (
75
+ name: string,
76
+ options?: SecondParameter<typeof cdpApiClient>,
77
+ ) => {
78
+ return cdpApiClient<SolanaAccount>(
79
+ { url: `/v2/solana/accounts/by-name/${name}`, method: "GET" },
80
+ options,
81
+ );
82
+ };
83
+ /**
84
+ * Signs a transaction with the given Solana account.
85
+ The unsigned transaction should be serialized into a byte array and then encoded as base64.
86
+
87
+ **Transaction types**
88
+
89
+ The following transaction types are supported:
90
+ * [Legacy transactions](https://solana-labs.github.io/solana-web3.js/classes/Transaction.html)
91
+ * [Versioned transactions](https://solana-labs.github.io/solana-web3.js/classes/VersionedTransaction.html)
92
+
93
+ The developer is responsible for ensuring that the unsigned transaction is valid, as the API will not validate the transaction.
94
+ * @summary Sign a transaction
95
+ */
96
+ export const signSolanaTransaction = (
97
+ address: string,
98
+ signSolanaTransactionBody: SignSolanaTransactionBody,
99
+ options?: SecondParameter<typeof cdpApiClient>,
100
+ ) => {
101
+ return cdpApiClient<SignSolanaTransaction200>(
102
+ {
103
+ url: `/v2/solana/accounts/${address}/sign/transaction`,
104
+ method: "POST",
105
+ headers: { "Content-Type": "application/json" },
106
+ data: signSolanaTransactionBody,
107
+ },
108
+ options,
109
+ );
110
+ };
111
+ /**
112
+ * Signs an arbitrary message with the given Solana account.
113
+
114
+ **WARNING:** Never sign a message that you didn't generate, as it can be an arbitrary transaction. For example, it might send all of your funds to an attacker.
115
+ * @summary Sign a message
116
+ */
117
+ export const signSolanaMessage = (
118
+ address: string,
119
+ signSolanaMessageBody: SignSolanaMessageBody,
120
+ options?: SecondParameter<typeof cdpApiClient>,
121
+ ) => {
122
+ return cdpApiClient<SignSolanaMessage200>(
123
+ {
124
+ url: `/v2/solana/accounts/${address}/sign/message`,
125
+ method: "POST",
126
+ headers: { "Content-Type": "application/json" },
127
+ data: signSolanaMessageBody,
128
+ },
129
+ options,
130
+ );
131
+ };
132
+ export type ListSolanaAccountsResult = NonNullable<Awaited<ReturnType<typeof listSolanaAccounts>>>;
133
+ export type CreateSolanaAccountResult = NonNullable<
134
+ Awaited<ReturnType<typeof createSolanaAccount>>
135
+ >;
136
+ export type GetSolanaAccountResult = NonNullable<Awaited<ReturnType<typeof getSolanaAccount>>>;
137
+ export type GetSolanaAccountByNameResult = NonNullable<
138
+ Awaited<ReturnType<typeof getSolanaAccountByName>>
139
+ >;
140
+ export type SignSolanaTransactionResult = NonNullable<
141
+ Awaited<ReturnType<typeof signSolanaTransaction>>
142
+ >;
143
+ export type SignSolanaMessageResult = NonNullable<Awaited<ReturnType<typeof signSolanaMessage>>>;
@@ -0,0 +1,36 @@
1
+ export * from "./generated/coinbaseDeveloperPlatformAPIs.schemas.js";
2
+ export * from "./generated/evm-accounts/evm-accounts.js";
3
+ export * from "./generated/evm-smart-accounts/evm-smart-accounts.js";
4
+ export * from "./generated/evm-token-balances/evm-token-balances.js";
5
+ export * from "./generated/solana-accounts/solana-accounts.js";
6
+ export * from "./generated/faucets/faucets.js";
7
+
8
+ import { configure } from "./cdpApiClient.js";
9
+ import * as evm from "./generated/evm-accounts/evm-accounts.js";
10
+ import * as evmSmartAccounts from "./generated/evm-smart-accounts/evm-smart-accounts.js";
11
+ import * as evmTokenBalances from "./generated/evm-token-balances/evm-token-balances.js";
12
+ import * as faucets from "./generated/faucets/faucets.js";
13
+ import * as solana from "./generated/solana-accounts/solana-accounts.js";
14
+
15
+ export const CdpOpenApiClient = {
16
+ ...evm,
17
+ ...evmSmartAccounts,
18
+ ...evmTokenBalances,
19
+ ...solana,
20
+ ...faucets,
21
+ configure,
22
+ };
23
+
24
+ export const OpenApiEvmMethods = {
25
+ ...evm,
26
+ ...evmSmartAccounts,
27
+ ...evmTokenBalances,
28
+ requestEvmFaucet: faucets.requestEvmFaucet,
29
+ };
30
+
31
+ export const OpenApiSolanaMethods = {
32
+ ...solana,
33
+ requestSolanaFaucet: faucets.requestSolanaFaucet,
34
+ };
35
+
36
+ export type CdpOpenApiClientType = typeof CdpOpenApiClient;
package/package.json CHANGED
@@ -1,12 +1,37 @@
1
1
  {
2
2
  "name": "@coinbase/cdp-sdk",
3
- "version": "1.1.2",
4
- "description": "CDP SDK",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
3
+ "version": "1.3.0",
4
+ "description": "SDK for interacting with the Coinbase Developer Platform Wallet API",
5
+ "main": "./_cjs/index.js",
6
+ "module": "./_esm/index.js",
7
+ "types": "./_types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./_types/index.d.ts",
11
+ "import": "./_esm/index.js",
12
+ "default": "./_cjs/index.js"
13
+ },
14
+ "./auth": {
15
+ "types": "./_types/auth/index.d.ts",
16
+ "import": "./_esm/auth/index.js",
17
+ "default": "./_cjs/auth/index.js"
18
+ }
19
+ },
20
+ "dependencies": {
21
+ "@solana/web3.js": "^1.98.1",
22
+ "abitype": "1.0.6",
23
+ "axios": "^1.8.2",
24
+ "jose": "^6.0.8",
25
+ "md5": "^2.3.0",
26
+ "viem": "^2.21.26"
27
+ },
28
+ "author": "Coinbase Inc.",
7
29
  "repository": "https://github.com/coinbase/cdp-sdk",
30
+ "license": "MIT",
8
31
  "files": [
9
- "dist"
32
+ "*",
33
+ "!**/*.test.ts",
34
+ "!examples"
10
35
  ],
11
36
  "keywords": [
12
37
  "coinbase",
@@ -15,65 +40,5 @@
15
40
  "cdp sdk",
16
41
  "sdk",
17
42
  "api"
18
- ],
19
- "author": "Coinbase Inc.",
20
- "license": "MIT",
21
- "dependencies": {
22
- "@solana/web3.js": "^1.98.0",
23
- "abitype": "1.0.6",
24
- "axios": "^1.8.2",
25
- "jose": "^6.0.8",
26
- "md5": "^2.3.0",
27
- "viem": "^2.21.26"
28
- },
29
- "devDependencies": {
30
- "@changesets/changelog-github": "^0.5.1",
31
- "@changesets/cli": "^2.28.1",
32
- "@faker-js/faker": "^9.6.0",
33
- "@types/node": "^20.12.11",
34
- "@typescript-eslint/eslint-plugin": "^7.18.0",
35
- "@typescript-eslint/parser": "^7.18.0",
36
- "@vitest/coverage-v8": "^1.4.0",
37
- "bs58": "^6.0.0",
38
- "dotenv": "^16.4.7",
39
- "eslint": "^8.57.1",
40
- "eslint-config-prettier": "^9.1.0",
41
- "eslint-plugin-jsdoc": "^48.11.0",
42
- "eslint-plugin-prettier": "^5.2.5",
43
- "msw": "^2.7.3",
44
- "orval": "^7.6.0",
45
- "prettier": "^3.2.5",
46
- "tsx": "^4.19.3",
47
- "typedoc": "^0.27.2",
48
- "typescript": "^5.4.5",
49
- "uuid": "^11.1.0",
50
- "vitest": "^1.4.0"
51
- },
52
- "exports": {
53
- ".": {
54
- "types": "./dist/index.d.ts",
55
- "default": "./dist/index.js"
56
- },
57
- "./auth": {
58
- "types": "./dist/auth/index.d.ts",
59
- "default": "./dist/auth/index.js"
60
- }
61
- },
62
- "scripts": {
63
- "changeset": "changeset",
64
- "changeset:version": "changeset version",
65
- "lint": "eslint -c .eslintrc.json \"src/**/*.ts\"",
66
- "lint:fix": "eslint -c .eslintrc.json \"src/**/*.ts\" --fix",
67
- "format": "prettier -c .prettierrc --write \"**/*.{ts,js,cjs,json,md}\"",
68
- "format:check": "prettier -c .prettierrc --check \"**/*.{ts,js,cjs,json,md}\"",
69
- "test": "vitest --config=./vitest.config.ts run",
70
- "test:watch": "vitest --config=./vitest.config.ts",
71
- "test:coverage": "vitest --config=./vitest.config.ts run --coverage",
72
- "test:e2e": "pnpm build && vitest --config=./vitest.e2e.config.ts run",
73
- "test:e2e:watch": "vitest --config=./vitest.e2e.config.ts",
74
- "clean": "rm -rf dist/*",
75
- "build": "tsc",
76
- "docs": "typedoc --entryPoints ./src --entryPointStrategy expand --exclude ./src/tests/**/*.ts",
77
- "orval": "make -C .. check-openapi || echo \" NOTE: THERE IS A NEW OPENAPI FILE AVAILABLE. RUN 'make update-openapi' IN THE ROOT DIRECTORY TO UPDATE IT.\"; orval --config orval.config.ts"
78
- }
43
+ ]
79
44
  }
package/types/calls.ts ADDED
@@ -0,0 +1,40 @@
1
+ /* eslint-disable */
2
+ // Adapted from viem (https://github.com/wevm/viem)
3
+
4
+ import type { AbiStateMutability, Address } from "viem";
5
+ import type { GetMulticallContractParameters } from "./multicall.js";
6
+ import type { OneOf, Prettify } from "./utils.js";
7
+ import type { Hex } from "./misc.js";
8
+
9
+ export type Call<call = unknown, extraProperties extends Record<string, unknown> = {}> = OneOf<
10
+ | (extraProperties & {
11
+ data?: Hex | undefined;
12
+ to: Address;
13
+ value?: bigint | undefined;
14
+ })
15
+ | (extraProperties &
16
+ (Omit<GetMulticallContractParameters<call, AbiStateMutability>, "address"> & {
17
+ to: Address;
18
+ value?: bigint | undefined;
19
+ }))
20
+ >;
21
+
22
+ export type Calls<
23
+ calls extends readonly unknown[],
24
+ extraProperties extends Record<string, unknown> = {},
25
+ ///
26
+ result extends readonly any[] = [],
27
+ > = calls extends readonly [] // no calls, return empty
28
+ ? readonly []
29
+ : calls extends readonly [infer call] // one call left before returning `result`
30
+ ? readonly [...result, Prettify<Call<call, extraProperties>>]
31
+ : calls extends readonly [infer call, ...infer rest] // grab first call and recurse through `rest`
32
+ ? Calls<[...rest], extraProperties, [...result, Prettify<Call<call, extraProperties>>]>
33
+ : readonly unknown[] extends calls
34
+ ? calls
35
+ : // If `calls` is *some* array but we couldn't assign `unknown[]` to it, then it must hold some known/homogenous type!
36
+ // use this to infer the param types in the case of Array.map() argument
37
+ calls extends readonly (infer call extends OneOf<Call>)[]
38
+ ? readonly Prettify<call>[]
39
+ : // Fallback
40
+ readonly OneOf<Call>[];
@@ -0,0 +1,126 @@
1
+ /* eslint-disable */
2
+ // Adapted from viem (https://github.com/wevm/viem)
3
+
4
+ import type {
5
+ Abi,
6
+ AbiFunction,
7
+ AbiParametersToPrimitiveTypes,
8
+ AbiStateMutability,
9
+ Address,
10
+ ExtractAbiFunction,
11
+ ExtractAbiFunctionNames,
12
+ ResolvedRegister,
13
+ } from "abitype";
14
+
15
+ import type { Hex } from "./misc.js";
16
+ import type { IsUnion, UnionToTuple } from "./utils.js";
17
+
18
+ export type ContractFunctionName<
19
+ abi extends Abi | readonly unknown[] = Abi,
20
+ mutability extends AbiStateMutability = AbiStateMutability,
21
+ > =
22
+ ExtractAbiFunctionNames<
23
+ abi extends Abi ? abi : Abi,
24
+ mutability
25
+ > extends infer functionName extends string
26
+ ? [functionName] extends [never]
27
+ ? string
28
+ : functionName
29
+ : string;
30
+
31
+ export type ContractFunctionArgs<
32
+ abi extends Abi | readonly unknown[] = Abi,
33
+ mutability extends AbiStateMutability = AbiStateMutability,
34
+ functionName extends ContractFunctionName<abi, mutability> = ContractFunctionName<
35
+ abi,
36
+ mutability
37
+ >,
38
+ > =
39
+ AbiParametersToPrimitiveTypes<
40
+ ExtractAbiFunction<abi extends Abi ? abi : Abi, functionName, mutability>["inputs"],
41
+ "inputs"
42
+ > extends infer args
43
+ ? [args] extends [never]
44
+ ? readonly unknown[]
45
+ : args
46
+ : readonly unknown[];
47
+
48
+ export type Widen<type> =
49
+ | ([unknown] extends [type] ? unknown : never)
50
+ | (type extends Function ? type : never)
51
+ | (type extends ResolvedRegister["BigIntType"] ? bigint : never)
52
+ | (type extends boolean ? boolean : never)
53
+ | (type extends ResolvedRegister["IntType"] ? number : never)
54
+ | (type extends string
55
+ ? type extends ResolvedRegister["AddressType"]
56
+ ? ResolvedRegister["AddressType"]
57
+ : type extends ResolvedRegister["BytesType"]["inputs"]
58
+ ? ResolvedRegister["BytesType"]
59
+ : string
60
+ : never)
61
+ | (type extends readonly [] ? readonly [] : never)
62
+ | (type extends Record<string, unknown> ? { [K in keyof type]: Widen<type[K]> } : never)
63
+ | (type extends { length: number }
64
+ ? {
65
+ [K in keyof type]: Widen<type[K]>;
66
+ } extends infer Val extends readonly unknown[]
67
+ ? readonly [...Val]
68
+ : never
69
+ : never);
70
+
71
+ export type UnionWiden<type> = type extends any ? Widen<type> : never;
72
+
73
+ export type ExtractAbiFunctionForArgs<
74
+ abi extends Abi,
75
+ mutability extends AbiStateMutability,
76
+ functionName extends ContractFunctionName<abi, mutability>,
77
+ args extends ContractFunctionArgs<abi, mutability, functionName>,
78
+ > =
79
+ ExtractAbiFunction<abi, functionName, mutability> extends infer abiFunction extends AbiFunction
80
+ ? IsUnion<abiFunction> extends true // narrow overloads using `args` by converting to tuple and filtering out overloads that don't match
81
+ ? UnionToTuple<abiFunction> extends infer abiFunctions extends readonly AbiFunction[]
82
+ ? // convert back to union (removes `never` tuple entries)
83
+ { [k in keyof abiFunctions]: CheckArgs<abiFunctions[k], args> }[number]
84
+ : never
85
+ : abiFunction
86
+ : never;
87
+ type CheckArgs<
88
+ abiFunction extends AbiFunction,
89
+ args,
90
+ ///
91
+ targetArgs extends AbiParametersToPrimitiveTypes<
92
+ abiFunction["inputs"],
93
+ "inputs"
94
+ > = AbiParametersToPrimitiveTypes<abiFunction["inputs"], "inputs">,
95
+ > = (readonly [] extends args ? readonly [] : args) extends targetArgs // fallback to `readonly []` if `args` has no value (e.g. `args` property not provided)
96
+ ? abiFunction
97
+ : never;
98
+
99
+ export type ContractFunctionParameters<
100
+ abi extends Abi | readonly unknown[] = Abi,
101
+ mutability extends AbiStateMutability = AbiStateMutability,
102
+ functionName extends ContractFunctionName<abi, mutability> = ContractFunctionName<
103
+ abi,
104
+ mutability
105
+ >,
106
+ args extends ContractFunctionArgs<abi, mutability, functionName> = ContractFunctionArgs<
107
+ abi,
108
+ mutability,
109
+ functionName
110
+ >,
111
+ deployless extends boolean = false,
112
+ ///
113
+ allFunctionNames = ContractFunctionName<abi, mutability>,
114
+ allArgs = ContractFunctionArgs<abi, mutability, functionName>,
115
+ /*
116
+ * when `args` is inferred to `readonly []` ("inputs": []) or `never` (`abi` declared as `Abi` or not inferrable), allow `args` to be optional.
117
+ * important that both branches return same structural type
118
+ */
119
+ > = {
120
+ abi: abi;
121
+ functionName:
122
+ | allFunctionNames // show all options
123
+ | (functionName extends allFunctionNames ? functionName : never); // infer value
124
+ args?: (abi extends Abi ? UnionWiden<args> : never) | allArgs | undefined;
125
+ } & (readonly [] extends allArgs ? {} : { args: Widen<args> }) &
126
+ (deployless extends true ? { address?: undefined; code: Hex } : { address: Address });