@coinbase/cdp-sdk 1.44.1 → 1.46.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 (282) hide show
  1. package/CHANGELOG.md +28 -2
  2. package/README.md +164 -43
  3. package/_cjs/accounts/evm/eip6492.js +49 -0
  4. package/_cjs/accounts/evm/eip6492.js.map +1 -0
  5. package/_cjs/accounts/evm/toEvmDelegatedAccount.js +27 -0
  6. package/_cjs/accounts/evm/toEvmDelegatedAccount.js.map +1 -0
  7. package/_cjs/accounts/evm/toEvmServerAccount.js +127 -55
  8. package/_cjs/accounts/evm/toEvmServerAccount.js.map +1 -1
  9. package/_cjs/accounts/evm/toEvmSmartAccount.js +115 -45
  10. package/_cjs/accounts/evm/toEvmSmartAccount.js.map +1 -1
  11. package/_cjs/accounts/evm/toNetworkScopedEvmSmartAccount.js +31 -0
  12. package/_cjs/accounts/evm/toNetworkScopedEvmSmartAccount.js.map +1 -1
  13. package/_cjs/accounts/solana/toSolanaAccount.js +49 -19
  14. package/_cjs/accounts/solana/toSolanaAccount.js.map +1 -1
  15. package/_cjs/actions/evm/waitForEvmEip7702DelegationStatus.js +37 -0
  16. package/_cjs/actions/evm/waitForEvmEip7702DelegationStatus.js.map +1 -0
  17. package/_cjs/actions/solana/transfer.js.map +1 -1
  18. package/_cjs/actions/solana/utils.js +9 -9
  19. package/_cjs/actions/solana/utils.js.map +1 -1
  20. package/_cjs/analytics.js +10 -228
  21. package/_cjs/analytics.js.map +1 -1
  22. package/_cjs/auth/utils/http.js +1 -0
  23. package/_cjs/auth/utils/http.js.map +1 -1
  24. package/_cjs/client/cdp.js +4 -7
  25. package/_cjs/client/cdp.js.map +1 -1
  26. package/_cjs/client/end-user/endUser.js +385 -4
  27. package/_cjs/client/end-user/endUser.js.map +1 -1
  28. package/_cjs/client/end-user/toEndUserAccount.js +201 -23
  29. package/_cjs/client/end-user/toEndUserAccount.js.map +1 -1
  30. package/_cjs/client/evm/evm.js +482 -227
  31. package/_cjs/client/evm/evm.js.map +1 -1
  32. package/_cjs/client/policies/policies.js +41 -11
  33. package/_cjs/client/policies/policies.js.map +1 -1
  34. package/_cjs/client/solana/solana.js +215 -118
  35. package/_cjs/client/solana/solana.js.map +1 -1
  36. package/_cjs/index.js +3 -1
  37. package/_cjs/index.js.map +1 -1
  38. package/_cjs/openapi-client/cdpApiClient.js +32 -0
  39. package/_cjs/openapi-client/cdpApiClient.js.map +1 -1
  40. package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +178 -9
  41. package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -1
  42. package/_cjs/openapi-client/generated/embedded-wallets-core-functionality/embedded-wallets-core-functionality.js +261 -0
  43. package/_cjs/openapi-client/generated/embedded-wallets-core-functionality/embedded-wallets-core-functionality.js.map +1 -0
  44. package/_cjs/openapi-client/generated/end-user-accounts/end-user-accounts.js.map +1 -1
  45. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.js +30 -1
  46. package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -1
  47. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +2 -2
  48. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -1
  49. package/_cjs/openapi-client/generated/evm-swaps/evm-swaps.js.map +1 -1
  50. package/_cjs/openapi-client/generated/evm-token-balances/evm-token-balances.js.map +1 -1
  51. package/_cjs/openapi-client/generated/faucets/faucets.js +6 -5
  52. package/_cjs/openapi-client/generated/faucets/faucets.js.map +1 -1
  53. package/_cjs/openapi-client/generated/onchain-data/onchain-data.js.map +1 -1
  54. package/_cjs/openapi-client/generated/onramp/onramp.js +15 -1
  55. package/_cjs/openapi-client/generated/onramp/onramp.js.map +1 -1
  56. package/_cjs/openapi-client/generated/policy-engine/policy-engine.js.map +1 -1
  57. package/_cjs/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -1
  58. package/_cjs/openapi-client/generated/solana-token-balances/solana-token-balances.js.map +1 -1
  59. package/_cjs/openapi-client/generated/sql-api/sql-api.js +75 -0
  60. package/_cjs/openapi-client/generated/sql-api/sql-api.js.map +1 -0
  61. package/_cjs/openapi-client/generated/webhooks/webhooks.js.map +1 -1
  62. package/_cjs/openapi-client/generated/x402-facilitator/x402-facilitator.js.map +1 -1
  63. package/_cjs/openapi-client/index.js +4 -1
  64. package/_cjs/openapi-client/index.js.map +1 -1
  65. package/_cjs/policies/evmSchema.js +127 -1
  66. package/_cjs/policies/evmSchema.js.map +1 -1
  67. package/_cjs/policies/solanaSchema.js +102 -1
  68. package/_cjs/policies/solanaSchema.js.map +1 -1
  69. package/_cjs/policies/types.js +7 -0
  70. package/_cjs/policies/types.js.map +1 -1
  71. package/_cjs/utils/export.js +6 -5
  72. package/_cjs/utils/export.js.map +1 -1
  73. package/_cjs/version.js +1 -1
  74. package/_esm/accounts/evm/eip6492.js +46 -0
  75. package/_esm/accounts/evm/eip6492.js.map +1 -0
  76. package/_esm/accounts/evm/toEvmDelegatedAccount.js +24 -0
  77. package/_esm/accounts/evm/toEvmDelegatedAccount.js.map +1 -0
  78. package/_esm/accounts/evm/toEvmServerAccount.js +127 -55
  79. package/_esm/accounts/evm/toEvmServerAccount.js.map +1 -1
  80. package/_esm/accounts/evm/toEvmSmartAccount.js +115 -45
  81. package/_esm/accounts/evm/toEvmSmartAccount.js.map +1 -1
  82. package/_esm/accounts/evm/toNetworkScopedEvmSmartAccount.js +31 -0
  83. package/_esm/accounts/evm/toNetworkScopedEvmSmartAccount.js.map +1 -1
  84. package/_esm/accounts/solana/toSolanaAccount.js +49 -19
  85. package/_esm/accounts/solana/toSolanaAccount.js.map +1 -1
  86. package/_esm/actions/evm/waitForEvmEip7702DelegationStatus.js +34 -0
  87. package/_esm/actions/evm/waitForEvmEip7702DelegationStatus.js.map +1 -0
  88. package/_esm/actions/solana/transfer.js.map +1 -1
  89. package/_esm/actions/solana/utils.js +9 -9
  90. package/_esm/actions/solana/utils.js.map +1 -1
  91. package/_esm/analytics.js +9 -227
  92. package/_esm/analytics.js.map +1 -1
  93. package/_esm/auth/utils/http.js +1 -0
  94. package/_esm/auth/utils/http.js.map +1 -1
  95. package/_esm/client/cdp.js +4 -7
  96. package/_esm/client/cdp.js.map +1 -1
  97. package/_esm/client/end-user/endUser.js +385 -4
  98. package/_esm/client/end-user/endUser.js.map +1 -1
  99. package/_esm/client/end-user/toEndUserAccount.js +201 -23
  100. package/_esm/client/end-user/toEndUserAccount.js.map +1 -1
  101. package/_esm/client/evm/evm.js +482 -227
  102. package/_esm/client/evm/evm.js.map +1 -1
  103. package/_esm/client/policies/policies.js +41 -11
  104. package/_esm/client/policies/policies.js.map +1 -1
  105. package/_esm/client/solana/solana.js +215 -118
  106. package/_esm/client/solana/solana.js.map +1 -1
  107. package/_esm/index.js +1 -0
  108. package/_esm/index.js.map +1 -1
  109. package/_esm/openapi-client/cdpApiClient.js +32 -0
  110. package/_esm/openapi-client/cdpApiClient.js.map +1 -1
  111. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +175 -7
  112. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -1
  113. package/_esm/openapi-client/generated/embedded-wallets-core-functionality/embedded-wallets-core-functionality.js +243 -0
  114. package/_esm/openapi-client/generated/embedded-wallets-core-functionality/embedded-wallets-core-functionality.js.map +1 -0
  115. package/_esm/openapi-client/generated/end-user-accounts/end-user-accounts.js.map +1 -1
  116. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js +27 -0
  117. package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -1
  118. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +2 -2
  119. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -1
  120. package/_esm/openapi-client/generated/evm-swaps/evm-swaps.js.map +1 -1
  121. package/_esm/openapi-client/generated/evm-token-balances/evm-token-balances.js.map +1 -1
  122. package/_esm/openapi-client/generated/faucets/faucets.js +6 -5
  123. package/_esm/openapi-client/generated/faucets/faucets.js.map +1 -1
  124. package/_esm/openapi-client/generated/onchain-data/onchain-data.js.map +1 -1
  125. package/_esm/openapi-client/generated/onramp/onramp.js +13 -0
  126. package/_esm/openapi-client/generated/onramp/onramp.js.map +1 -1
  127. package/_esm/openapi-client/generated/policy-engine/policy-engine.js.map +1 -1
  128. package/_esm/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -1
  129. package/_esm/openapi-client/generated/solana-token-balances/solana-token-balances.js.map +1 -1
  130. package/_esm/openapi-client/generated/sql-api/sql-api.js +70 -0
  131. package/_esm/openapi-client/generated/sql-api/sql-api.js.map +1 -0
  132. package/_esm/openapi-client/generated/webhooks/webhooks.js.map +1 -1
  133. package/_esm/openapi-client/generated/x402-facilitator/x402-facilitator.js.map +1 -1
  134. package/_esm/openapi-client/index.js +4 -1
  135. package/_esm/openapi-client/index.js.map +1 -1
  136. package/_esm/policies/evmSchema.js +126 -0
  137. package/_esm/policies/evmSchema.js.map +1 -1
  138. package/_esm/policies/solanaSchema.js +101 -0
  139. package/_esm/policies/solanaSchema.js.map +1 -1
  140. package/_esm/policies/types.js +9 -2
  141. package/_esm/policies/types.js.map +1 -1
  142. package/_esm/utils/export.js +6 -5
  143. package/_esm/utils/export.js.map +1 -1
  144. package/_esm/version.js +1 -1
  145. package/_types/accounts/evm/eip6492.d.ts +17 -0
  146. package/_types/accounts/evm/eip6492.d.ts.map +1 -0
  147. package/_types/accounts/evm/toEvmDelegatedAccount.d.ts +13 -0
  148. package/_types/accounts/evm/toEvmDelegatedAccount.d.ts.map +1 -0
  149. package/_types/accounts/evm/toEvmServerAccount.d.ts.map +1 -1
  150. package/_types/accounts/evm/toEvmSmartAccount.d.ts.map +1 -1
  151. package/_types/accounts/evm/toNetworkScopedEvmSmartAccount.d.ts +4 -4
  152. package/_types/accounts/evm/toNetworkScopedEvmSmartAccount.d.ts.map +1 -1
  153. package/_types/accounts/evm/types.d.ts +3 -2
  154. package/_types/accounts/evm/types.d.ts.map +1 -1
  155. package/_types/accounts/solana/toSolanaAccount.d.ts.map +1 -1
  156. package/_types/actions/evm/waitForEvmEip7702DelegationStatus.d.ts +32 -0
  157. package/_types/actions/evm/waitForEvmEip7702DelegationStatus.d.ts.map +1 -0
  158. package/_types/actions/solana/transfer.d.ts +3 -4
  159. package/_types/actions/solana/transfer.d.ts.map +1 -1
  160. package/_types/actions/solana/types.d.ts +79 -29
  161. package/_types/actions/solana/types.d.ts.map +1 -1
  162. package/_types/actions/solana/utils.d.ts +10 -9
  163. package/_types/actions/solana/utils.d.ts.map +1 -1
  164. package/_types/analytics.d.ts +5 -38
  165. package/_types/analytics.d.ts.map +1 -1
  166. package/_types/auth/utils/http.d.ts.map +1 -1
  167. package/_types/client/cdp.d.ts +4 -0
  168. package/_types/client/cdp.d.ts.map +1 -1
  169. package/_types/client/end-user/endUser.d.ts +272 -1
  170. package/_types/client/end-user/endUser.d.ts.map +1 -1
  171. package/_types/client/end-user/endUser.types.d.ts +491 -1
  172. package/_types/client/end-user/endUser.types.d.ts.map +1 -1
  173. package/_types/client/end-user/toEndUserAccount.d.ts +4 -1
  174. package/_types/client/end-user/toEndUserAccount.d.ts.map +1 -1
  175. package/_types/client/evm/evm.d.ts +54 -1
  176. package/_types/client/evm/evm.d.ts.map +1 -1
  177. package/_types/client/evm/evm.types.d.ts +29 -2
  178. package/_types/client/evm/evm.types.d.ts.map +1 -1
  179. package/_types/client/policies/policies.d.ts.map +1 -1
  180. package/_types/client/solana/solana.d.ts +38 -12
  181. package/_types/client/solana/solana.d.ts.map +1 -1
  182. package/_types/index.d.ts +3 -1
  183. package/_types/index.d.ts.map +1 -1
  184. package/_types/openapi-client/cdpApiClient.d.ts.map +1 -1
  185. package/_types/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts +884 -90
  186. package/_types/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts.map +1 -1
  187. package/_types/openapi-client/generated/embedded-wallets-core-functionality/embedded-wallets-core-functionality.d.ts +163 -0
  188. package/_types/openapi-client/generated/embedded-wallets-core-functionality/embedded-wallets-core-functionality.d.ts.map +1 -0
  189. package/_types/openapi-client/generated/end-user-accounts/end-user-accounts.d.ts +9 -9
  190. package/_types/openapi-client/generated/end-user-accounts/end-user-accounts.d.ts.map +1 -1
  191. package/_types/openapi-client/generated/evm-accounts/evm-accounts.d.ts +35 -15
  192. package/_types/openapi-client/generated/evm-accounts/evm-accounts.d.ts.map +1 -1
  193. package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts +14 -14
  194. package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts.map +1 -1
  195. package/_types/openapi-client/generated/evm-swaps/evm-swaps.d.ts +3 -3
  196. package/_types/openapi-client/generated/evm-swaps/evm-swaps.d.ts.map +1 -1
  197. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.d.ts +2 -2
  198. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.d.ts.map +1 -1
  199. package/_types/openapi-client/generated/faucets/faucets.d.ts +9 -8
  200. package/_types/openapi-client/generated/faucets/faucets.d.ts.map +1 -1
  201. package/_types/openapi-client/generated/onchain-data/onchain-data.d.ts +3 -3
  202. package/_types/openapi-client/generated/onchain-data/onchain-data.d.ts.map +1 -1
  203. package/_types/openapi-client/generated/onramp/onramp.d.ts +12 -5
  204. package/_types/openapi-client/generated/onramp/onramp.d.ts.map +1 -1
  205. package/_types/openapi-client/generated/policy-engine/policy-engine.d.ts +6 -6
  206. package/_types/openapi-client/generated/policy-engine/policy-engine.d.ts.map +1 -1
  207. package/_types/openapi-client/generated/solana-accounts/solana-accounts.d.ts +12 -12
  208. package/_types/openapi-client/generated/solana-accounts/solana-accounts.d.ts.map +1 -1
  209. package/_types/openapi-client/generated/solana-token-balances/solana-token-balances.d.ts +2 -2
  210. package/_types/openapi-client/generated/solana-token-balances/solana-token-balances.d.ts.map +1 -1
  211. package/_types/openapi-client/generated/sql-api/sql-api.d.ts +73 -0
  212. package/_types/openapi-client/generated/sql-api/sql-api.d.ts.map +1 -0
  213. package/_types/openapi-client/generated/webhooks/webhooks.d.ts +6 -6
  214. package/_types/openapi-client/generated/webhooks/webhooks.d.ts.map +1 -1
  215. package/_types/openapi-client/generated/x402-facilitator/x402-facilitator.d.ts +4 -4
  216. package/_types/openapi-client/generated/x402-facilitator/x402-facilitator.d.ts.map +1 -1
  217. package/_types/openapi-client/index.d.ts +23 -3
  218. package/_types/openapi-client/index.d.ts.map +1 -1
  219. package/_types/policies/evmSchema.d.ts +3128 -1064
  220. package/_types/policies/evmSchema.d.ts.map +1 -1
  221. package/_types/policies/solanaSchema.d.ts +1411 -47
  222. package/_types/policies/solanaSchema.d.ts.map +1 -1
  223. package/_types/policies/types.d.ts +8427 -2942
  224. package/_types/policies/types.d.ts.map +1 -1
  225. package/_types/types/contract.d.ts.map +1 -1
  226. package/_types/utils/export.d.ts +1 -1
  227. package/_types/utils/export.d.ts.map +1 -1
  228. package/_types/version.d.ts +1 -1
  229. package/accounts/evm/eip6492.ts +60 -0
  230. package/accounts/evm/toEvmDelegatedAccount.ts +26 -0
  231. package/accounts/evm/toEvmServerAccount.ts +115 -67
  232. package/accounts/evm/toEvmSmartAccount.ts +114 -57
  233. package/accounts/evm/toNetworkScopedEvmSmartAccount.ts +44 -5
  234. package/accounts/evm/types.ts +8 -3
  235. package/accounts/solana/toSolanaAccount.ts +44 -24
  236. package/actions/evm/waitForEvmEip7702DelegationStatus.ts +57 -0
  237. package/actions/solana/transfer.ts +3 -3
  238. package/actions/solana/types.ts +79 -29
  239. package/actions/solana/utils.ts +13 -11
  240. package/analytics.ts +8 -294
  241. package/auth/utils/http.ts +1 -0
  242. package/client/cdp.ts +6 -8
  243. package/client/end-user/endUser.ts +513 -4
  244. package/client/end-user/endUser.types.ts +598 -0
  245. package/client/end-user/toEndUserAccount.ts +330 -26
  246. package/client/evm/evm.ts +517 -282
  247. package/client/evm/evm.types.ts +45 -2
  248. package/client/policies/policies.ts +41 -16
  249. package/client/solana/solana.ts +233 -153
  250. package/index.ts +36 -1
  251. package/openapi-client/cdpApiClient.ts +34 -0
  252. package/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.ts +1155 -172
  253. package/openapi-client/generated/embedded-wallets-core-functionality/embedded-wallets-core-functionality.ts +455 -0
  254. package/openapi-client/generated/end-user-accounts/end-user-accounts.ts +12 -9
  255. package/openapi-client/generated/evm-accounts/evm-accounts.ts +66 -14
  256. package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.ts +16 -16
  257. package/openapi-client/generated/evm-swaps/evm-swaps.ts +3 -3
  258. package/openapi-client/generated/evm-token-balances/evm-token-balances.ts +2 -2
  259. package/openapi-client/generated/faucets/faucets.ts +9 -8
  260. package/openapi-client/generated/onchain-data/onchain-data.ts +3 -3
  261. package/openapi-client/generated/onramp/onramp.ts +28 -4
  262. package/openapi-client/generated/policy-engine/policy-engine.ts +12 -6
  263. package/openapi-client/generated/solana-accounts/solana-accounts.ts +12 -12
  264. package/openapi-client/generated/solana-token-balances/solana-token-balances.ts +2 -2
  265. package/openapi-client/generated/sql-api/sql-api.ts +92 -0
  266. package/openapi-client/generated/webhooks/webhooks.ts +6 -6
  267. package/openapi-client/generated/x402-facilitator/x402-facilitator.ts +6 -4
  268. package/openapi-client/index.ts +4 -1
  269. package/package.json +7 -8
  270. package/policies/evmSchema.ts +164 -0
  271. package/policies/solanaSchema.ts +130 -0
  272. package/policies/types.ts +14 -0
  273. package/types/contract.ts +2 -4
  274. package/utils/export.ts +6 -5
  275. package/version.ts +1 -1
  276. package/_cjs/openapi-client/generated/sql-api-alpha/sql-api-alpha.js +0 -55
  277. package/_cjs/openapi-client/generated/sql-api-alpha/sql-api-alpha.js.map +0 -1
  278. package/_esm/openapi-client/generated/sql-api-alpha/sql-api-alpha.js +0 -50
  279. package/_esm/openapi-client/generated/sql-api-alpha/sql-api-alpha.js.map +0 -1
  280. package/_types/openapi-client/generated/sql-api-alpha/sql-api-alpha.d.ts +0 -53
  281. package/_types/openapi-client/generated/sql-api-alpha/sql-api-alpha.d.ts.map +0 -1
  282. package/openapi-client/generated/sql-api-alpha/sql-api-alpha.ts +0 -72
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # CDP SDK Changelog
2
2
 
3
+ ## 1.46.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#624](https://github.com/coinbase/cdp-sdk/pull/624) [`0c0c1c8`](https://github.com/coinbase/cdp-sdk/commit/0c0c1c8d4202dc24bd07b926de2d81144fba8599) Thanks [@sammccord](https://github.com/sammccord)! - Add revokeDelegation, and delegated signing operations to end user client
8
+
9
+ ### Patch Changes
10
+
11
+ - [#627](https://github.com/coinbase/cdp-sdk/pull/627) [`4a10b49`](https://github.com/coinbase/cdp-sdk/commit/4a10b4940c825a77e7af2378e1cb9f8e6d4db956) Thanks [@0xRAG](https://github.com/0xRAG)! - Removed @solana/web3.js dependency to avoid transitive LGPL license
12
+
13
+ - [#622](https://github.com/coinbase/cdp-sdk/pull/622) [`03d0b68`](https://github.com/coinbase/cdp-sdk/commit/03d0b680b0a5d3758a9092a8cf9abaeb2ae4790a) Thanks [@0xRAG](https://github.com/0xRAG)! - Patched security vulnerabilities across several dependencies.
14
+
15
+ - [#623](https://github.com/coinbase/cdp-sdk/pull/623) [`ec2866f`](https://github.com/coinbase/cdp-sdk/commit/ec2866ff0423130a3a6ed948ab7e3c741e376b90) Thanks [@milan-cb](https://github.com/milan-cb)! - Added EIP-6492 signature wrapping for undeployed smart accounts
16
+
17
+ ## 1.45.0
18
+
19
+ ### Minor Changes
20
+
21
+ - [#606](https://github.com/coinbase/cdp-sdk/pull/606) [`3fef84a`](https://github.com/coinbase/cdp-sdk/commit/3fef84a828ee897fcbdc9bb920fcc3641eac8641) Thanks [@milan-cb](https://github.com/milan-cb)! - Added createEvmEip7702Delegation to upgrade EOAs with smart account capabilities
22
+
23
+ - [#612](https://github.com/coinbase/cdp-sdk/pull/612) [`7ed8a11`](https://github.com/coinbase/cdp-sdk/commit/7ed8a1177e5fddc70929ee7ec339887c780657b1) Thanks [@milan-cb](https://github.com/milan-cb)! - Added getEvmEip7702DelegationOperationById and waitForEvmEip7702DelegationOperationStatus
24
+
25
+ - [#608](https://github.com/coinbase/cdp-sdk/pull/608) [`8fcfac3`](https://github.com/coinbase/cdp-sdk/commit/8fcfac348487f586b224b77074f52594ad44198b) Thanks [@sammccord](https://github.com/sammccord)! - Added support for new end user embedded wallet policy rules, reusing existing criteria - signEndUserEvmTransaction, sendEndUserEvmTransaction, signEndUserEvmMessage, signEndUserEvmTypedData, signEndUserSolTransaction, sendEndUserSolTransaction, and signEndUserSolMessage.
26
+
27
+ ### Patch Changes
28
+
29
+ - [#607](https://github.com/coinbase/cdp-sdk/pull/607) [`21244e3`](https://github.com/coinbase/cdp-sdk/commit/21244e32384fb189facbea96668087d24ded035a) Thanks [@0xRAG](https://github.com/0xRAG)! - Simplify analytics
30
+
3
31
  ## 1.44.1
4
32
 
5
33
  ### Patch Changes
@@ -414,7 +442,6 @@
414
442
  - [#122](https://github.com/coinbase/cdp-sdk/pull/122) [`ee41d98`](https://github.com/coinbase/cdp-sdk/commit/ee41d986406e3e8666d1d1a1b1525e7ff7435a2b) Thanks [@sddioulde](https://github.com/sddioulde)! - Added account actions to Solana
415
443
 
416
444
  - [#103](https://github.com/coinbase/cdp-sdk/pull/103) [`2777cde`](https://github.com/coinbase/cdp-sdk/commit/2777cde93e4f10579a4ca31e140720067799cf66) Thanks [@0xRAG](https://github.com/0xRAG)! - Added additional options to transfer methods:
417
-
418
445
  - Added `paymasterUrl` and `waitOptions` to EvmSmartAccount.transfer
419
446
  - Added `waitOptions` to EvmAccount.transfer
420
447
 
@@ -423,7 +450,6 @@
423
450
  ### Minor Changes
424
451
 
425
452
  - [#99](https://github.com/coinbase/cdp-sdk/pull/99) [`0fd6d2b`](https://github.com/coinbase/cdp-sdk/commit/0fd6d2ba56b2da52c96eb19278dc782560b7680b) Thanks [@0xRAG](https://github.com/0xRAG)! - Added actions to EvmAccount and EvmSmartAccount:
426
-
427
453
  - listTokenBalances
428
454
  - requestFaucet
429
455
  - sendTransaction (EvmAccount only)
package/README.md CHANGED
@@ -12,11 +12,13 @@
12
12
  - [Updating Accounts](#updating-evm-or-solana-accounts)
13
13
  - [Testnet Faucet](#testnet-faucet)
14
14
  - [Sending Transactions](#sending-transactions)
15
+ - [EIP-7702 delegation](#eip-7702-delegation)
15
16
  - [EVM Smart Accounts](#evm-smart-accounts)
16
17
  - [EVM Swaps](#evm-swaps)
17
18
  - [Transferring Tokens](#transferring-tokens)
18
19
  - [Account Actions](#account-actions)
19
20
  - [Policy Management](#policy-management)
21
+ - [End User Policies](#end-user-policies)
20
22
  - [End-user Management](#end-user-management)
21
23
  - [Create End User](#create-end-user)
22
24
  - [Import End User](#import-end-user)
@@ -376,37 +378,49 @@ import { CdpClient } from "@coinbase/cdp-sdk";
376
378
  import "dotenv/config";
377
379
 
378
380
  import {
379
- PublicKey,
380
- SystemProgram,
381
- SYSVAR_RECENT_BLOCKHASHES_PUBKEY,
382
- Transaction,
383
- } from "@solana/web3.js";
381
+ address as solanaAddress,
382
+ appendTransactionMessageInstructions,
383
+ compileTransaction,
384
+ createNoopSigner,
385
+ createSolanaRpc,
386
+ createTransactionMessage,
387
+ getBase64EncodedWireTransaction,
388
+ pipe,
389
+ setTransactionMessageFeePayer,
390
+ setTransactionMessageLifetimeUsingBlockhash,
391
+ } from "@solana/kit";
392
+ import { getTransferSolInstruction } from "@solana-program/system";
384
393
 
385
394
  const cdp = new CdpClient();
386
395
 
387
396
  const account = await cdp.solana.createAccount();
388
397
 
389
- const faucetResp = await cdp.solana.requestFaucet({
398
+ await cdp.solana.requestFaucet({
390
399
  address: account.address,
391
400
  token: "sol",
392
401
  });
393
402
 
394
- const transaction = new Transaction();
395
- transaction.add(
396
- SystemProgram.transfer({
397
- fromPubkey: new PublicKey(account.address),
398
- toPubkey: new PublicKey("3KzDtddx4i53FBkvCzuDmRbaMozTZoJBb1TToWhz3JfE"),
399
- lamports: 10000,
400
- })
401
- );
403
+ const rpc = createSolanaRpc("https://api.devnet.solana.com");
404
+ const { value: { blockhash, lastValidBlockHeight } } = await rpc.getLatestBlockhash().send();
405
+
406
+ const instruction = getTransferSolInstruction({
407
+ source: createNoopSigner(solanaAddress(account.address)),
408
+ destination: solanaAddress("3KzDtddx4i53FBkvCzuDmRbaMozTZoJBb1TToWhz3JfE"),
409
+ amount: 10000n,
410
+ });
402
411
 
403
- // A more recent blockhash is set in the backend by CDP
404
- transaction.recentBlockhash = SYSVAR_RECENT_BLOCKHASHES_PUBKEY.toBase58();
405
- transaction.feePayer = new PublicKey(account.address);
412
+ const txMsg = pipe(
413
+ createTransactionMessage({ version: 0 }),
414
+ (tx) => setTransactionMessageFeePayer(solanaAddress(account.address), tx),
415
+ (tx) =>
416
+ setTransactionMessageLifetimeUsingBlockhash(
417
+ { blockhash, lastValidBlockHeight },
418
+ tx,
419
+ ),
420
+ (tx) => appendTransactionMessageInstructions([instruction], tx),
421
+ );
406
422
 
407
- const serializedTx = Buffer.from(
408
- transaction.serialize({ requireAllSignatures: false })
409
- ).toString("base64");
423
+ const serializedTx = getBase64EncodedWireTransaction(compileTransaction(txMsg));
410
424
 
411
425
  console.log("Transaction serialized successfully");
412
426
 
@@ -416,10 +430,43 @@ const txResult = await cdp.solana.sendTransaction({
416
430
  });
417
431
 
418
432
  console.log(
419
- `Transaction confirmed! Explorer link: https://explorer.solana.com/tx/${txResult.signature}?cluster=devnet`
433
+ `Transaction confirmed! Explorer link: https://explorer.solana.com/tx/${txResult.signature}?cluster=devnet`,
420
434
  );
421
435
  ```
422
436
 
437
+ ### EIP-7702 delegation
438
+
439
+ You can create an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) delegation for an existing EOA, upgrading it with smart account capabilities on supported networks. The delegated EOA can then use batched transactions and gas sponsorship via paymaster.
440
+
441
+ ```typescript
442
+ import { CdpClient } from "@coinbase/cdp-sdk";
443
+ import { createPublicClient, http } from "viem";
444
+ import { baseSepolia } from "viem/chains";
445
+
446
+ const cdp = new CdpClient();
447
+ const publicClient = createPublicClient({
448
+ chain: baseSepolia,
449
+ transport: http(),
450
+ });
451
+
452
+ const account = await cdp.evm.getOrCreateAccount({ name: "MyAccount" });
453
+
454
+ const { delegationOperationId } = await cdp.evm.createEvmEip7702Delegation({
455
+ address: account.address,
456
+ network: "base-sepolia",
457
+ enableSpendPermissions: false, // optional, defaults to false
458
+ idempotencyKey: "optional-uuid", // optional
459
+ });
460
+
461
+ // Wait for the delegation operation to complete
462
+ const delegationOperation = await cdp.evm.waitForEvmEip7702DelegationOperationStatus({
463
+ delegationOperationId,
464
+ });
465
+ console.log(`Delegation confirmed (status: ${delegationOperation.status})`);
466
+ ```
467
+
468
+ For a runnable example that includes faucet and receipt waiting, see [examples/typescript/evm/eip7702/createEip7702Delegation.ts](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/eip7702/createEip7702Delegation.ts).
469
+
423
470
  ### EVM Smart Accounts
424
471
 
425
472
  For EVM, we support Smart Accounts which are account-abstraction (ERC-4337) accounts. Currently there is only support for Base Sepolia and Base Mainnet for Smart Accounts.
@@ -754,35 +801,27 @@ await sender.transfer({
754
801
 
755
802
  For complete examples, check out [solana/account.transfer.ts](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/solana/account.transfer.ts).
756
803
 
757
- You can transfer tokens between accounts using the `transfer` function, and wait for the transaction to be confirmed using the `confirmTransaction` function from `@solana/web3.js`:
804
+ You can transfer tokens between accounts using the `transfer` function:
758
805
 
759
806
  ```typescript
760
- import { LAMPORTS_PER_SOL } from "@solana/web3.js";
807
+ import { createSolanaRpc, type Signature } from "@solana/kit";
761
808
 
762
809
  const sender = await cdp.solana.createAccount();
763
810
 
764
- const connection = new Connection("https://api.devnet.solana.com");
765
-
766
811
  const { signature } = await sender.transfer({
767
812
  to: "3KzDtddx4i53FBkvCzuDmRbaMozTZoJBb1TToWhz3JfE",
768
- amount: 0.01 * LAMPORTS_PER_SOL,
813
+ amount: 10_000_000n, // 0.01 SOL in lamports
769
814
  token: "sol",
770
- network: connection,
815
+ network: "devnet",
771
816
  });
772
817
 
773
- const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
818
+ // Poll for confirmation using @solana/kit
819
+ const rpc = createSolanaRpc("https://api.devnet.solana.com");
820
+ const result = await rpc.getSignatureStatuses([signature as Signature]).send();
821
+ const status = result.value[0];
774
822
 
775
- const confirmation = await connection.confirmTransaction(
776
- {
777
- signature,
778
- blockhash,
779
- lastValidBlockHeight,
780
- },
781
- "confirmed",
782
- );
783
-
784
- if (confirmation.value.err) {
785
- console.log(`Something went wrong! Error: ${confirmation.value.err.toString()}`);
823
+ if (status?.err) {
824
+ console.log(`Something went wrong! Error: ${JSON.stringify(status.err)}`);
786
825
  } else {
787
826
  console.log(
788
827
  `Transaction confirmed: Link: https://explorer.solana.com/tx/${signature}?cluster=devnet`,
@@ -801,18 +840,18 @@ const { signature } = await sender.transfer({
801
840
  });
802
841
  ```
803
842
 
804
- If you want to use your own Connection, you can pass one to the `network` parameter:
843
+ If you want to use your own RPC client, you can pass one to the `network` parameter:
805
844
 
806
845
  ```typescript
807
- import { Connection } from "@solana/web3.js";
846
+ import { createSolanaRpc } from "@solana/kit";
808
847
 
809
- const connection = new Connection("YOUR_RPC_URL");
848
+ const rpc = createSolanaRpc("YOUR_RPC_URL");
810
849
 
811
850
  const { signature } = await sender.transfer({
812
851
  to: "3KzDtddx4i53FBkvCzuDmRbaMozTZoJBb1TToWhz3JfE",
813
852
  amount: "0.01",
814
853
  token: "usdc",
815
- network: connection,
854
+ network: rpc,
816
855
  });
817
856
  ```
818
857
 
@@ -1079,6 +1118,8 @@ try {
1079
1118
 
1080
1119
  We currently support the following policy rules:
1081
1120
 
1121
+ **Server wallet rules:**
1122
+
1082
1123
  - [SignEvmTransactionRule](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/policy-engine/create-a-policy#signevmtransactionrule)
1083
1124
  - [SendEvmTransactionRule](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/policy-engine/create-a-policy#sendevmtransactionrule)
1084
1125
  - [SignEvmMessageRule](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/policy-engine/create-a-policy#signevmmessagerule)
@@ -1089,6 +1130,86 @@ We currently support the following policy rules:
1089
1130
  - [PrepareUserOperationRule](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/policy-engine/create-a-policy#prepareuseroperationrule)
1090
1131
  - [SendUserOperationRule](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/policy-engine/create-a-policy#senduseroperationrule)
1091
1132
 
1133
+ **End user rules:**
1134
+
1135
+ - `SignEndUserEvmTransactionRule` — operation: `signEndUserEvmTransaction` (criteria: `ethValue`, `evmAddress`, `evmData`, `netUSDChange`)
1136
+ - `SendEndUserEvmTransactionRule` — operation: `sendEndUserEvmTransaction` (criteria: `ethValue`, `evmAddress`, `evmNetwork`, `evmData`, `netUSDChange`)
1137
+ - `SignEndUserEvmMessageRule` — operation: `signEndUserEvmMessage` (criteria: `evmMessage`)
1138
+ - `SignEndUserEvmTypedDataRule` — operation: `signEndUserEvmTypedData` (criteria: `evmTypedDataField`, `evmTypedDataVerifyingContract`)
1139
+ - `SignEndUserSolTransactionRule` — operation: `signEndUserSolTransaction` (criteria: `solAddress`, `solValue`, `splAddress`, `splValue`, `mintAddress`, `solData`, `programId`)
1140
+ - `SendEndUserSolTransactionRule` — operation: `sendEndUserSolTransaction` (criteria: `solAddress`, `solValue`, `splAddress`, `splValue`, `mintAddress`, `solData`, `programId`, `solNetwork`)
1141
+ - `SignEndUserSolMessageRule` — operation: `signEndUserSolMessage` (criteria: `solMessage`)
1142
+
1143
+ End user rules use the same criteria types as their server wallet counterparts. For example, `signEndUserEvmTransaction` supports the same `ethValue`, `evmAddress`, and `evmData` criteria as `signEvmTransaction`.
1144
+
1145
+ ### End User Policies
1146
+
1147
+ You can create policies that govern end-user operations using the same criteria types available for server wallet policies. The only difference is the `operation` value, which targets end-user-specific actions.
1148
+
1149
+ #### End User EVM Policy
1150
+
1151
+ This policy restricts end-user EVM transaction signing to a max value and allowlisted recipients — the same criteria used in `signEvmTransaction`:
1152
+
1153
+ ```typescript
1154
+ const policy = await cdp.policies.createPolicy({
1155
+ policy: {
1156
+ scope: "project",
1157
+ description: "End User EVM Policy",
1158
+ rules: [
1159
+ {
1160
+ action: "accept",
1161
+ operation: "signEndUserEvmTransaction",
1162
+ criteria: [
1163
+ {
1164
+ type: "ethValue",
1165
+ ethValue: "1000000000000000000", // 1 ETH in wei
1166
+ operator: "<=",
1167
+ },
1168
+ {
1169
+ type: "evmAddress",
1170
+ addresses: ["0x000000000000000000000000000000000000dEaD"],
1171
+ operator: "in",
1172
+ },
1173
+ ],
1174
+ },
1175
+ ],
1176
+ },
1177
+ });
1178
+ ```
1179
+
1180
+ #### End User Solana Policy
1181
+
1182
+ This policy restricts end-user Solana transaction signing to allowlisted recipients under a SOL value threshold — the same criteria used in `signSolTransaction`:
1183
+
1184
+ ```typescript
1185
+ const policy = await cdp.policies.createPolicy({
1186
+ policy: {
1187
+ scope: "project",
1188
+ description: "End User Solana Policy",
1189
+ rules: [
1190
+ {
1191
+ action: "accept",
1192
+ operation: "signEndUserSolTransaction",
1193
+ criteria: [
1194
+ {
1195
+ type: "solAddress",
1196
+ addresses: ["11111111111111111111111111111111"],
1197
+ operator: "in",
1198
+ },
1199
+ {
1200
+ type: "solValue",
1201
+ solValue: "1000000000", // 1 SOL in lamports
1202
+ operator: "<=",
1203
+ },
1204
+ ],
1205
+ },
1206
+ ],
1207
+ },
1208
+ });
1209
+ ```
1210
+
1211
+ > For a comprehensive example demonstrating all 7 end-user operations, see [createEndUserPolicy.ts](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/end-users/createEndUserPolicy.ts).
1212
+
1092
1213
  ### End-user Management
1093
1214
 
1094
1215
  You can use the End User SDK to manage the users of your applications.
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrapSignatureWithEip6492IfUndeployed = wrapSignatureWithEip6492IfUndeployed;
4
+ const viem_1 = require("viem");
5
+ const COINBASE_SMART_WALLET_FACTORY = "0xBA5ED110eFDBa3D005bfC882d75358ACBbB85842";
6
+ const COINBASE_SMART_WALLET_FACTORY_ABI = [
7
+ {
8
+ name: "createAccount",
9
+ type: "function",
10
+ inputs: [
11
+ { name: "owners", type: "bytes[]" },
12
+ { name: "nonce", type: "uint256" },
13
+ ],
14
+ outputs: [{ name: "account", type: "address" }],
15
+ stateMutability: "payable",
16
+ },
17
+ ];
18
+ /**
19
+ * Wraps a smart account signature with EIP-6492 deployment data if the account is not yet deployed.
20
+ *
21
+ * For undeployed (counterfactual) Coinbase Smart Wallet accounts, validators cannot call
22
+ * `isValidSignature` on-chain. EIP-6492 embeds the factory address and calldata so that
23
+ * validators can simulate deployment before verifying the signature.
24
+ *
25
+ * @param publicClient - A viem public client used to check the account bytecode.
26
+ * @param accountAddress - The smart account address to check deployment status.
27
+ * @param ownerAddress - The owner address used as the factory `createAccount` argument.
28
+ * @param signature - The inner ERC-1271 signature to wrap.
29
+ * @returns The original signature if the account is deployed, or an EIP-6492 wrapped signature otherwise.
30
+ */
31
+ async function wrapSignatureWithEip6492IfUndeployed(publicClient, accountAddress, ownerAddress, signature) {
32
+ const bytecode = await publicClient.getCode({ address: accountAddress });
33
+ const isDeployed = bytecode !== undefined && bytecode !== "0x";
34
+ if (!isDeployed) {
35
+ const ownerBytes = (0, viem_1.encodeAbiParameters)([{ type: "address" }], [ownerAddress]);
36
+ const factoryCalldata = (0, viem_1.encodeFunctionData)({
37
+ abi: COINBASE_SMART_WALLET_FACTORY_ABI,
38
+ functionName: "createAccount",
39
+ args: [[ownerBytes], 0n],
40
+ });
41
+ return (0, viem_1.serializeErc6492Signature)({
42
+ address: COINBASE_SMART_WALLET_FACTORY,
43
+ data: factoryCalldata,
44
+ signature,
45
+ });
46
+ }
47
+ return signature;
48
+ }
49
+ //# sourceMappingURL=eip6492.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip6492.js","sourceRoot":"","sources":["../../../accounts/evm/eip6492.ts"],"names":[],"mappings":";;AAiCA,oFA0BC;AA3DD,+BAA0F;AAK1F,MAAM,6BAA6B,GAAG,4CAA4C,CAAC;AAEnF,MAAM,iCAAiC,GAAG;IACxC;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;SACnC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC/C,eAAe,EAAE,SAAS;KAC3B;CACO,CAAC;AAEX;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,oCAAoC,CACxD,YAA0B,EAC1B,cAAuB,EACvB,YAAqB,EACrB,SAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,CAAC;IAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,IAAA,0BAAmB,EAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAE9E,MAAM,eAAe,GAAG,IAAA,yBAAkB,EAAC;YACzC,GAAG,EAAE,iCAAiC;YACtC,YAAY,EAAE,eAAe;YAC7B,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;SACzB,CAAC,CAAC;QAEH,OAAO,IAAA,gCAAyB,EAAC;YAC/B,OAAO,EAAE,6BAA6B;YACtC,IAAI,EAAE,eAAe;YACrB,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toEvmDelegatedAccount = toEvmDelegatedAccount;
4
+ const toEvmSmartAccount_js_1 = require("./toEvmSmartAccount.js");
5
+ const index_js_1 = require("../../openapi-client/index.js");
6
+ /**
7
+ * Creates an EvmSmartAccount view of a server account for use after EIP-7702 delegation.
8
+ * Uses the API client configured by your CdpClient instance.
9
+ *
10
+ * The returned account has the same address as the EOA and uses the server account as owner,
11
+ * so you can call sendUserOperation, waitForUserOperation, etc.
12
+ *
13
+ * @param account - The server account (EOA) that has been delegated via EIP-7702.
14
+ * @returns An EvmSmartAccount view ready for user operation submission.
15
+ */
16
+ function toEvmDelegatedAccount(account) {
17
+ return (0, toEvmSmartAccount_js_1.toEvmSmartAccount)(index_js_1.CdpOpenApiClient, {
18
+ smartAccount: {
19
+ address: account.address,
20
+ owners: [account.address],
21
+ name: account.name,
22
+ policies: account.policies,
23
+ },
24
+ owner: account,
25
+ });
26
+ }
27
+ //# sourceMappingURL=toEvmDelegatedAccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toEvmDelegatedAccount.js","sourceRoot":"","sources":["../../../accounts/evm/toEvmDelegatedAccount.ts"],"names":[],"mappings":";;AAeA,sDAUC;AAzBD,iEAA2D;AAC3D,4DAAiE;AAIjE;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CAAC,OAAyB;IAC7D,OAAO,IAAA,wCAAiB,EAAC,2BAAgB,EAAE;QACzC,YAAY,EAAE;YACZ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B;QACD,KAAK,EAAE,OAAO;KACf,CAAC,CAAC;AACL,CAAC"}