@coinbase/cdp-sdk 1.1.1 → 1.2.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 (311) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/LICENSE +21 -0
  3. package/{dist → _cjs}/accounts/evm/toEvmServerAccount.js +1 -0
  4. package/_cjs/accounts/evm/toEvmServerAccount.js.map +1 -0
  5. package/{dist → _cjs}/accounts/evm/toEvmSmartAccount.js +1 -0
  6. package/_cjs/accounts/evm/toEvmSmartAccount.js.map +1 -0
  7. package/{dist → _cjs}/accounts/types.js +1 -0
  8. package/_cjs/accounts/types.js.map +1 -0
  9. package/{dist → _cjs}/actions/evm/sendUserOperation.js +1 -0
  10. package/_cjs/actions/evm/sendUserOperation.js.map +1 -0
  11. package/{dist → _cjs}/actions/evm/waitForUserOperation.js +10 -9
  12. package/_cjs/actions/evm/waitForUserOperation.js.map +1 -0
  13. package/{dist → _cjs}/analytics.js +7 -6
  14. package/_cjs/analytics.js.map +1 -0
  15. package/{dist → _cjs}/auth/errors.js +1 -0
  16. package/_cjs/auth/errors.js.map +1 -0
  17. package/{dist → _cjs}/auth/hooks/axios/index.js +2 -1
  18. package/_cjs/auth/hooks/axios/index.js.map +1 -0
  19. package/{dist → _cjs}/auth/hooks/axios/withAuth.js +3 -2
  20. package/_cjs/auth/hooks/axios/withAuth.js.map +1 -0
  21. package/{dist → _cjs}/auth/index.js +4 -3
  22. package/_cjs/auth/index.js.map +1 -0
  23. package/{dist → _cjs}/auth/utils/http.js +6 -5
  24. package/_cjs/auth/utils/http.js.map +1 -0
  25. package/{dist → _cjs}/auth/utils/index.js +3 -2
  26. package/_cjs/auth/utils/index.js.map +1 -0
  27. package/{dist → _cjs}/auth/utils/jwt.js +4 -3
  28. package/_cjs/auth/utils/jwt.js.map +1 -0
  29. package/{dist → _cjs}/client/cdp.js +13 -8
  30. package/_cjs/client/cdp.js.map +1 -0
  31. package/{dist → _cjs}/client/evm/evm.js +30 -28
  32. package/_cjs/client/evm/evm.js.map +1 -0
  33. package/{dist → _cjs}/client/evm/evm.types.js +1 -0
  34. package/_cjs/client/evm/evm.types.js.map +1 -0
  35. package/{dist → _cjs}/client/solana/index.js +3 -2
  36. package/_cjs/client/solana/index.js.map +1 -0
  37. package/{dist → _cjs}/client/solana/solana.js +9 -8
  38. package/_cjs/client/solana/solana.js.map +1 -0
  39. package/{dist → _cjs}/client/solana/solana.types.js +1 -0
  40. package/_cjs/client/solana/solana.types.js.map +1 -0
  41. package/{dist → _cjs}/constants.js +1 -0
  42. package/_cjs/constants.js.map +1 -0
  43. package/{dist → _cjs}/errors.js +1 -0
  44. package/_cjs/errors.js.map +1 -0
  45. package/{dist → _cjs}/index.js +4 -3
  46. package/_cjs/index.js.map +1 -0
  47. package/{dist → _cjs}/openapi-client/cdpApiClient.js +18 -14
  48. package/_cjs/openapi-client/cdpApiClient.js.map +1 -0
  49. package/{dist → _cjs}/openapi-client/errors.js +6 -0
  50. package/_cjs/openapi-client/errors.js.map +1 -0
  51. package/{dist → _cjs}/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +31 -30
  52. package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -0
  53. package/{dist → _cjs}/openapi-client/generated/evm-accounts/evm-accounts.js +46 -41
  54. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -0
  55. package/{dist → _cjs}/openapi-client/generated/evm-accounts/evm-accounts.msw.js +73 -40
  56. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.msw.js.map +1 -0
  57. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +69 -0
  58. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -0
  59. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +188 -0
  60. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -0
  61. package/{dist → _cjs}/openapi-client/generated/faucets/faucets.js +18 -13
  62. package/_cjs/openapi-client/generated/faucets/faucets.js.map +1 -0
  63. package/{dist → _cjs}/openapi-client/generated/faucets/faucets.msw.js +16 -12
  64. package/_cjs/openapi-client/generated/faucets/faucets.msw.js.map +1 -0
  65. package/{dist → _cjs}/openapi-client/generated/index.msw.js +5 -4
  66. package/_cjs/openapi-client/generated/index.msw.js.map +1 -0
  67. package/{dist → _cjs}/openapi-client/generated/solana-accounts/solana-accounts.js +38 -35
  68. package/_cjs/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -0
  69. package/{dist → _cjs}/openapi-client/generated/solana-accounts/solana-accounts.msw.js +68 -35
  70. package/_cjs/openapi-client/generated/solana-accounts/solana-accounts.msw.js.map +1 -0
  71. package/{dist → _cjs}/openapi-client/index.js +12 -11
  72. package/_cjs/openapi-client/index.js.map +1 -0
  73. package/_cjs/package.json +1 -0
  74. package/{dist → _cjs}/types/calls.js +1 -0
  75. package/_cjs/types/calls.js.map +1 -0
  76. package/{dist → _cjs}/types/contract.js +1 -0
  77. package/_cjs/types/contract.js.map +1 -0
  78. package/{dist → _cjs}/types/misc.js +1 -0
  79. package/_cjs/types/misc.js.map +1 -0
  80. package/{dist → _cjs}/types/multicall.js +1 -0
  81. package/_cjs/types/multicall.js.map +1 -0
  82. package/{dist → _cjs}/types/utils.js +1 -0
  83. package/_cjs/types/utils.js.map +1 -0
  84. package/{dist → _cjs}/utils/wait.js +3 -2
  85. package/_cjs/utils/wait.js.map +1 -0
  86. package/_cjs/version.js +5 -0
  87. package/_cjs/version.js.map +1 -0
  88. package/_esm/accounts/evm/toEvmServerAccount.js +40 -0
  89. package/_esm/accounts/evm/toEvmServerAccount.js.map +1 -0
  90. package/_esm/accounts/evm/toEvmSmartAccount.js +22 -0
  91. package/_esm/accounts/evm/toEvmSmartAccount.js.map +1 -0
  92. package/_esm/accounts/types.js +2 -0
  93. package/_esm/accounts/types.js.map +1 -0
  94. package/_esm/actions/evm/sendUserOperation.js +85 -0
  95. package/_esm/actions/evm/sendUserOperation.js.map +1 -0
  96. package/_esm/actions/evm/waitForUserOperation.js +58 -0
  97. package/_esm/actions/evm/waitForUserOperation.js.map +1 -0
  98. package/_esm/analytics.js +84 -0
  99. package/_esm/analytics.js.map +1 -0
  100. package/_esm/auth/errors.js +57 -0
  101. package/_esm/auth/errors.js.map +1 -0
  102. package/_esm/auth/hooks/axios/index.js +2 -0
  103. package/_esm/auth/hooks/axios/index.js.map +1 -0
  104. package/_esm/auth/hooks/axios/withAuth.js +71 -0
  105. package/_esm/auth/hooks/axios/withAuth.js.map +1 -0
  106. package/_esm/auth/index.js +5 -0
  107. package/_esm/auth/index.js.map +1 -0
  108. package/_esm/auth/utils/http.js +70 -0
  109. package/_esm/auth/utils/http.js.map +1 -0
  110. package/_esm/auth/utils/index.js +3 -0
  111. package/_esm/auth/utils/index.js.map +1 -0
  112. package/_esm/auth/utils/jwt.js +199 -0
  113. package/_esm/auth/utils/jwt.js.map +1 -0
  114. package/_esm/client/cdp.js +95 -0
  115. package/_esm/client/cdp.js.map +1 -0
  116. package/_esm/client/evm/evm.js +518 -0
  117. package/_esm/client/evm/evm.js.map +1 -0
  118. package/_esm/client/evm/evm.types.js +2 -0
  119. package/_esm/client/evm/evm.types.js.map +1 -0
  120. package/_esm/client/solana/index.js +2 -0
  121. package/_esm/client/solana/index.js.map +1 -0
  122. package/_esm/client/solana/solana.js +204 -0
  123. package/_esm/client/solana/solana.js.map +1 -0
  124. package/_esm/client/solana/solana.types.js +2 -0
  125. package/_esm/client/solana/solana.types.js.map +1 -0
  126. package/_esm/constants.js +5 -0
  127. package/_esm/constants.js.map +1 -0
  128. package/_esm/errors.js +18 -0
  129. package/_esm/errors.js.map +1 -0
  130. package/_esm/index.js +3 -0
  131. package/_esm/index.js.map +1 -0
  132. package/_esm/openapi-client/cdpApiClient.js +112 -0
  133. package/_esm/openapi-client/cdpApiClient.js.map +1 -0
  134. package/_esm/openapi-client/errors.js +71 -0
  135. package/_esm/openapi-client/errors.js.map +1 -0
  136. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +52 -0
  137. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -0
  138. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js +80 -0
  139. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -0
  140. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.msw.js +128 -0
  141. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.msw.js.map +1 -0
  142. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +60 -0
  143. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -0
  144. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +172 -0
  145. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -0
  146. package/_esm/openapi-client/generated/faucets/faucets.js +51 -0
  147. package/_esm/openapi-client/generated/faucets/faucets.js.map +1 -0
  148. package/_esm/openapi-client/generated/faucets/faucets.msw.js +39 -0
  149. package/_esm/openapi-client/generated/faucets/faucets.msw.js.map +1 -0
  150. package/_esm/openapi-client/generated/index.msw.js +5 -0
  151. package/_esm/openapi-client/generated/index.msw.js.map +1 -0
  152. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.js +73 -0
  153. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -0
  154. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.msw.js +116 -0
  155. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.msw.js.map +1 -0
  156. package/_esm/openapi-client/index.js +27 -0
  157. package/_esm/openapi-client/index.js.map +1 -0
  158. package/_esm/package.json +1 -0
  159. package/_esm/types/calls.js +4 -0
  160. package/_esm/types/calls.js.map +1 -0
  161. package/_esm/types/contract.js +4 -0
  162. package/_esm/types/contract.js.map +1 -0
  163. package/_esm/types/misc.js +3 -0
  164. package/_esm/types/misc.js.map +1 -0
  165. package/_esm/types/multicall.js +2 -0
  166. package/_esm/types/multicall.js.map +1 -0
  167. package/_esm/types/utils.js +4 -0
  168. package/_esm/types/utils.js.map +1 -0
  169. package/_esm/utils/wait.js +32 -0
  170. package/_esm/utils/wait.js.map +1 -0
  171. package/_esm/version.js +2 -0
  172. package/_esm/version.js.map +1 -0
  173. package/{dist → _types}/accounts/evm/toEvmServerAccount.d.ts +3 -2
  174. package/_types/accounts/evm/toEvmServerAccount.d.ts.map +1 -0
  175. package/{dist → _types}/accounts/evm/toEvmSmartAccount.d.ts +3 -2
  176. package/_types/accounts/evm/toEvmSmartAccount.d.ts.map +1 -0
  177. package/{dist → _types}/accounts/types.d.ts +3 -2
  178. package/_types/accounts/types.d.ts.map +1 -0
  179. package/{dist → _types}/actions/evm/sendUserOperation.d.ts +5 -5
  180. package/_types/actions/evm/sendUserOperation.d.ts.map +1 -0
  181. package/{dist → _types}/actions/evm/waitForUserOperation.d.ts +4 -3
  182. package/_types/actions/evm/waitForUserOperation.d.ts.map +1 -0
  183. package/{dist → _types}/analytics.d.ts +1 -0
  184. package/_types/analytics.d.ts.map +1 -0
  185. package/{dist → _types}/auth/errors.d.ts +1 -0
  186. package/_types/auth/errors.d.ts.map +1 -0
  187. package/_types/auth/hooks/axios/index.d.ts +2 -0
  188. package/_types/auth/hooks/axios/index.d.ts.map +1 -0
  189. package/{dist → _types}/auth/hooks/axios/withAuth.d.ts +1 -0
  190. package/_types/auth/hooks/axios/withAuth.d.ts.map +1 -0
  191. package/_types/auth/index.d.ts +5 -0
  192. package/_types/auth/index.d.ts.map +1 -0
  193. package/{dist → _types}/auth/utils/http.d.ts +1 -0
  194. package/_types/auth/utils/http.d.ts.map +1 -0
  195. package/_types/auth/utils/index.d.ts +3 -0
  196. package/_types/auth/utils/index.d.ts.map +1 -0
  197. package/{dist → _types}/auth/utils/jwt.d.ts +1 -0
  198. package/_types/auth/utils/jwt.d.ts.map +1 -0
  199. package/{dist → _types}/client/cdp.d.ts +3 -2
  200. package/_types/client/cdp.d.ts.map +1 -0
  201. package/{dist → _types}/client/evm/evm.d.ts +4 -3
  202. package/_types/client/evm/evm.d.ts.map +1 -0
  203. package/{dist → _types}/client/evm/evm.types.d.ts +7 -6
  204. package/_types/client/evm/evm.types.d.ts.map +1 -0
  205. package/_types/client/solana/index.d.ts +2 -0
  206. package/_types/client/solana/index.d.ts.map +1 -0
  207. package/{dist → _types}/client/solana/solana.d.ts +2 -1
  208. package/_types/client/solana/solana.d.ts.map +1 -0
  209. package/{dist → _types}/client/solana/solana.types.d.ts +2 -1
  210. package/_types/client/solana/solana.types.d.ts.map +1 -0
  211. package/{dist → _types}/constants.d.ts +1 -0
  212. package/_types/constants.d.ts.map +1 -0
  213. package/{dist → _types}/errors.d.ts +1 -0
  214. package/_types/errors.d.ts.map +1 -0
  215. package/_types/index.d.ts +4 -0
  216. package/_types/index.d.ts.map +1 -0
  217. package/{dist → _types}/openapi-client/cdpApiClient.d.ts +1 -0
  218. package/_types/openapi-client/cdpApiClient.d.ts.map +1 -0
  219. package/{dist → _types}/openapi-client/errors.d.ts +2 -1
  220. package/_types/openapi-client/errors.d.ts.map +1 -0
  221. package/{dist → _types}/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts +13 -12
  222. package/_types/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts.map +1 -0
  223. package/{dist → _types}/openapi-client/generated/evm-accounts/evm-accounts.d.ts +24 -23
  224. package/_types/openapi-client/generated/evm-accounts/evm-accounts.d.ts.map +1 -0
  225. package/{dist → _types}/openapi-client/generated/evm-accounts/evm-accounts.msw.d.ts +3 -2
  226. package/_types/openapi-client/generated/evm-accounts/evm-accounts.msw.d.ts.map +1 -0
  227. package/{dist → _types}/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts +21 -20
  228. package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts.map +1 -0
  229. package/{dist → _types}/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.d.ts +3 -2
  230. package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.d.ts.map +1 -0
  231. package/{dist → _types}/openapi-client/generated/faucets/faucets.d.ts +9 -8
  232. package/_types/openapi-client/generated/faucets/faucets.d.ts.map +1 -0
  233. package/{dist → _types}/openapi-client/generated/faucets/faucets.msw.d.ts +3 -2
  234. package/_types/openapi-client/generated/faucets/faucets.msw.d.ts.map +1 -0
  235. package/_types/openapi-client/generated/index.msw.d.ts +5 -0
  236. package/_types/openapi-client/generated/index.msw.d.ts.map +1 -0
  237. package/{dist → _types}/openapi-client/generated/solana-accounts/solana-accounts.d.ts +21 -20
  238. package/_types/openapi-client/generated/solana-accounts/solana-accounts.d.ts.map +1 -0
  239. package/{dist → _types}/openapi-client/generated/solana-accounts/solana-accounts.msw.d.ts +3 -2
  240. package/_types/openapi-client/generated/solana-accounts/solana-accounts.msw.d.ts.map +1 -0
  241. package/_types/openapi-client/index.d.ts +56 -0
  242. package/_types/openapi-client/index.d.ts.map +1 -0
  243. package/{dist → _types}/types/calls.d.ts +4 -3
  244. package/_types/types/calls.d.ts.map +1 -0
  245. package/{dist → _types}/types/contract.d.ts +3 -2
  246. package/_types/types/contract.d.ts.map +1 -0
  247. package/{dist → _types}/types/misc.d.ts +1 -0
  248. package/_types/types/misc.d.ts.map +1 -0
  249. package/{dist → _types}/types/multicall.d.ts +2 -1
  250. package/_types/types/multicall.d.ts.map +1 -0
  251. package/{dist → _types}/types/utils.d.ts +1 -0
  252. package/_types/types/utils.d.ts.map +1 -0
  253. package/{dist → _types}/utils/wait.d.ts +1 -0
  254. package/_types/utils/wait.d.ts.map +1 -0
  255. package/_types/version.d.ts +2 -0
  256. package/_types/version.d.ts.map +1 -0
  257. package/accounts/evm/toEvmServerAccount.ts +60 -0
  258. package/accounts/evm/toEvmSmartAccount.ts +37 -0
  259. package/accounts/types.ts +53 -0
  260. package/actions/evm/sendUserOperation.ts +163 -0
  261. package/actions/evm/waitForUserOperation.ts +115 -0
  262. package/analytics.ts +123 -0
  263. package/auth/README.md +145 -0
  264. package/auth/errors.ts +59 -0
  265. package/auth/hooks/axios/index.ts +1 -0
  266. package/auth/hooks/axios/withAuth.ts +120 -0
  267. package/auth/index.ts +5 -0
  268. package/auth/utils/http.ts +146 -0
  269. package/auth/utils/index.ts +2 -0
  270. package/auth/utils/jwt.ts +324 -0
  271. package/client/cdp.ts +113 -0
  272. package/client/evm/evm.ts +606 -0
  273. package/client/evm/evm.types.ts +303 -0
  274. package/client/solana/index.ts +1 -0
  275. package/client/solana/solana.ts +237 -0
  276. package/client/solana/solana.types.ts +114 -0
  277. package/constants.ts +4 -0
  278. package/errors.ts +17 -0
  279. package/index.ts +4 -0
  280. package/openapi-client/cdpApiClient.ts +214 -0
  281. package/openapi-client/errors.ts +96 -0
  282. package/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.ts +411 -0
  283. package/openapi-client/generated/evm-accounts/evm-accounts.msw.ts +242 -0
  284. package/openapi-client/generated/evm-accounts/evm-accounts.ts +150 -0
  285. package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.ts +283 -0
  286. package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.ts +131 -0
  287. package/openapi-client/generated/faucets/faucets.msw.ts +76 -0
  288. package/openapi-client/generated/faucets/faucets.ts +83 -0
  289. package/openapi-client/generated/index.msw.ts +4 -0
  290. package/openapi-client/generated/solana-accounts/solana-accounts.msw.ts +219 -0
  291. package/openapi-client/generated/solana-accounts/solana-accounts.ts +143 -0
  292. package/openapi-client/index.ts +32 -0
  293. package/package.json +31 -66
  294. package/types/calls.ts +40 -0
  295. package/types/contract.ts +126 -0
  296. package/types/misc.ts +5 -0
  297. package/types/multicall.ts +29 -0
  298. package/types/utils.ts +288 -0
  299. package/utils/wait.ts +52 -0
  300. package/version.ts +1 -0
  301. package/dist/auth/hooks/axios/index.d.ts +0 -1
  302. package/dist/auth/index.d.ts +0 -4
  303. package/dist/auth/utils/index.d.ts +0 -2
  304. package/dist/client/evm/index.d.ts +0 -1
  305. package/dist/client/evm/index.js +0 -5
  306. package/dist/client/solana/index.d.ts +0 -1
  307. package/dist/index.d.ts +0 -3
  308. package/dist/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +0 -66
  309. package/dist/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +0 -99
  310. package/dist/openapi-client/generated/index.msw.d.ts +0 -4
  311. package/dist/openapi-client/index.d.ts +0 -55
@@ -0,0 +1,83 @@
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
+ RequestEvmFaucet200,
10
+ RequestEvmFaucetBody,
11
+ RequestSolanaFaucet200,
12
+ RequestSolanaFaucetBody,
13
+ } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
14
+
15
+ import { cdpApiClient } from "../../cdpApiClient.js";
16
+
17
+ type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];
18
+
19
+ /**
20
+ * Request funds from the CDP Faucet on supported EVM test networks.
21
+
22
+ Faucets are available for ETH, USDC, EURC, and cbBTC on Base Sepolia and Ethereum Sepolia.
23
+
24
+ To prevent abuse, we enforce rate limits within a rolling 24-hour window to control the amount of funds that can be requested.
25
+ These limits are applied at both the CDP User level and the blockchain address level.
26
+ A single blockchain address cannot exceed the specified limits, even if multiple users submit requests to the same address.
27
+
28
+ | Token | Amount per Faucet Request |Rolling 24-hour window Rate Limits|
29
+ |:-----:|:-------------------------:|:--------------------------------:|
30
+ | ETH | 0.0001 ETH | 0.001 ETH |
31
+ | USDC | 1 USDC | 10 USDC |
32
+ | EURC | 1 EURC | 10 EURC |
33
+ | cbBTC | 0.0001 cbBTC | 0.001 cbBTC |
34
+
35
+ * @summary Request funds on EVM test networks
36
+ */
37
+ export const requestEvmFaucet = (
38
+ requestEvmFaucetBody: RequestEvmFaucetBody,
39
+ options?: SecondParameter<typeof cdpApiClient>,
40
+ ) => {
41
+ return cdpApiClient<RequestEvmFaucet200>(
42
+ {
43
+ url: `/v2/evm/faucet`,
44
+ method: "POST",
45
+ headers: { "Content-Type": "application/json" },
46
+ data: requestEvmFaucetBody,
47
+ },
48
+ options,
49
+ );
50
+ };
51
+ /**
52
+ * Request funds from the CDP Faucet on Solana devnet.
53
+
54
+ Faucets are available for SOL.
55
+
56
+ To prevent abuse, we enforce rate limits within a rolling 24-hour window to control the amount of funds that can be requested.
57
+ These limits are applied at both the CDP User level and the blockchain address level.
58
+ A single blockchain address cannot exceed the specified limits, even if multiple users submit requests to the same address.
59
+
60
+ | Token | Amount per Faucet Request |Rolling 24-hour window Rate Limits|
61
+ |:-----:|:-------------------------:|:--------------------------------:|
62
+ | SOL | 0.00125 SOL | 0.0125 SOL |
63
+
64
+ * @summary Request funds on Solana devnet
65
+ */
66
+ export const requestSolanaFaucet = (
67
+ requestSolanaFaucetBody: RequestSolanaFaucetBody,
68
+ options?: SecondParameter<typeof cdpApiClient>,
69
+ ) => {
70
+ return cdpApiClient<RequestSolanaFaucet200>(
71
+ {
72
+ url: `/v2/solana/faucet`,
73
+ method: "POST",
74
+ headers: { "Content-Type": "application/json" },
75
+ data: requestSolanaFaucetBody,
76
+ },
77
+ options,
78
+ );
79
+ };
80
+ export type RequestEvmFaucetResult = NonNullable<Awaited<ReturnType<typeof requestEvmFaucet>>>;
81
+ export type RequestSolanaFaucetResult = NonNullable<
82
+ Awaited<ReturnType<typeof requestSolanaFaucet>>
83
+ >;
@@ -0,0 +1,4 @@
1
+ export * from "./evm-accounts/evm-accounts.msw.js";
2
+ export * from "./evm-smart-accounts/evm-smart-accounts.msw.js";
3
+ export * from "./faucets/faucets.msw.js";
4
+ export * from "./solana-accounts/solana-accounts.msw.js";
@@ -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,32 @@
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/solana-accounts/solana-accounts.js";
5
+ export * from "./generated/faucets/faucets.js";
6
+
7
+ import { configure } from "./cdpApiClient.js";
8
+ import * as evm from "./generated/evm-accounts/evm-accounts.js";
9
+ import * as evmSmartAccounts from "./generated/evm-smart-accounts/evm-smart-accounts.js";
10
+ import * as faucets from "./generated/faucets/faucets.js";
11
+ import * as solana from "./generated/solana-accounts/solana-accounts.js";
12
+
13
+ export const CdpOpenApiClient = {
14
+ ...evm,
15
+ ...evmSmartAccounts,
16
+ ...solana,
17
+ ...faucets,
18
+ configure,
19
+ };
20
+
21
+ export const OpenApiEvmMethods = {
22
+ ...evm,
23
+ ...evmSmartAccounts,
24
+ requestEvmFaucet: faucets.requestEvmFaucet,
25
+ };
26
+
27
+ export const OpenApiSolanaMethods = {
28
+ ...solana,
29
+ requestSolanaFaucet: faucets.requestSolanaFaucet,
30
+ };
31
+
32
+ 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.1",
4
- "description": "CDP SDK",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
3
+ "version": "1.2.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>[];