@coinbase/agentkit 0.0.0-nightly-20250328174338

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 (292) hide show
  1. package/README.md +827 -0
  2. package/dist/action-providers/across/acrossActionProvider.d.ts +50 -0
  3. package/dist/action-providers/across/acrossActionProvider.js +333 -0
  4. package/dist/action-providers/across/acrossActionProvider.test.d.ts +1 -0
  5. package/dist/action-providers/across/acrossActionProvider.test.js +391 -0
  6. package/dist/action-providers/across/constants.d.ts +1 -0
  7. package/dist/action-providers/across/constants.js +2 -0
  8. package/dist/action-providers/across/index.d.ts +1 -0
  9. package/dist/action-providers/across/index.js +17 -0
  10. package/dist/action-providers/across/schemas.d.ts +36 -0
  11. package/dist/action-providers/across/schemas.js +46 -0
  12. package/dist/action-providers/across/utils.d.ts +7 -0
  13. package/dist/action-providers/across/utils.js +25 -0
  14. package/dist/action-providers/actionDecorator.d.ts +69 -0
  15. package/dist/action-providers/actionDecorator.js +96 -0
  16. package/dist/action-providers/actionProvider.d.ts +48 -0
  17. package/dist/action-providers/actionProvider.js +62 -0
  18. package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.d.ts +55 -0
  19. package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.js +173 -0
  20. package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.test.d.ts +1 -0
  21. package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.test.js +131 -0
  22. package/dist/action-providers/alchemy/index.d.ts +2 -0
  23. package/dist/action-providers/alchemy/index.js +18 -0
  24. package/dist/action-providers/alchemy/schemas.d.ts +41 -0
  25. package/dist/action-providers/alchemy/schemas.js +34 -0
  26. package/dist/action-providers/allora/alloraActionProvider.d.ts +44 -0
  27. package/dist/action-providers/allora/alloraActionProvider.js +195 -0
  28. package/dist/action-providers/allora/alloraActionProvider.test.d.ts +1 -0
  29. package/dist/action-providers/allora/alloraActionProvider.test.js +109 -0
  30. package/dist/action-providers/allora/index.d.ts +2 -0
  31. package/dist/action-providers/allora/index.js +18 -0
  32. package/dist/action-providers/allora/schemas.d.ts +28 -0
  33. package/dist/action-providers/allora/schemas.js +30 -0
  34. package/dist/action-providers/basename/basenameActionProvider.d.ts +30 -0
  35. package/dist/action-providers/basename/basenameActionProvider.js +109 -0
  36. package/dist/action-providers/basename/basenameActionProvider.test.d.ts +1 -0
  37. package/dist/action-providers/basename/basenameActionProvider.test.js +146 -0
  38. package/dist/action-providers/basename/constants.d.ts +52 -0
  39. package/dist/action-providers/basename/constants.js +81 -0
  40. package/dist/action-providers/basename/index.d.ts +2 -0
  41. package/dist/action-providers/basename/index.js +18 -0
  42. package/dist/action-providers/basename/schemas.d.ts +14 -0
  43. package/dist/action-providers/basename/schemas.js +14 -0
  44. package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +43 -0
  45. package/dist/action-providers/cdp/cdpApiActionProvider.js +128 -0
  46. package/dist/action-providers/cdp/cdpApiActionProvider.test.d.ts +1 -0
  47. package/dist/action-providers/cdp/cdpApiActionProvider.test.js +146 -0
  48. package/dist/action-providers/cdp/cdpWalletActionProvider.d.ts +58 -0
  49. package/dist/action-providers/cdp/cdpWalletActionProvider.js +224 -0
  50. package/dist/action-providers/cdp/cdpWalletActionProvider.test.d.ts +1 -0
  51. package/dist/action-providers/cdp/cdpWalletActionProvider.test.js +267 -0
  52. package/dist/action-providers/cdp/constants.d.ts +31 -0
  53. package/dist/action-providers/cdp/constants.js +34 -0
  54. package/dist/action-providers/cdp/index.d.ts +3 -0
  55. package/dist/action-providers/cdp/index.js +19 -0
  56. package/dist/action-providers/cdp/schemas.d.ts +91 -0
  57. package/dist/action-providers/cdp/schemas.js +77 -0
  58. package/dist/action-providers/compound/compoundActionProvider.d.ts +67 -0
  59. package/dist/action-providers/compound/compoundActionProvider.js +365 -0
  60. package/dist/action-providers/compound/compoundActionProvider.test.d.ts +1 -0
  61. package/dist/action-providers/compound/compoundActionProvider.test.js +353 -0
  62. package/dist/action-providers/compound/constants.d.ts +180 -0
  63. package/dist/action-providers/compound/constants.js +129 -0
  64. package/dist/action-providers/compound/index.d.ts +1 -0
  65. package/dist/action-providers/compound/index.js +17 -0
  66. package/dist/action-providers/compound/schemas.d.ts +57 -0
  67. package/dist/action-providers/compound/schemas.js +58 -0
  68. package/dist/action-providers/compound/utils.d.ts +95 -0
  69. package/dist/action-providers/compound/utils.js +353 -0
  70. package/dist/action-providers/customActionProvider.d.ts +30 -0
  71. package/dist/action-providers/customActionProvider.js +66 -0
  72. package/dist/action-providers/defillama/constants.d.ts +8 -0
  73. package/dist/action-providers/defillama/constants.js +11 -0
  74. package/dist/action-providers/defillama/defillamaActionProvider.d.ts +54 -0
  75. package/dist/action-providers/defillama/defillamaActionProvider.js +180 -0
  76. package/dist/action-providers/defillama/defillamaActionProvider.test.d.ts +1 -0
  77. package/dist/action-providers/defillama/defillamaActionProvider.test.js +114 -0
  78. package/dist/action-providers/defillama/index.d.ts +1 -0
  79. package/dist/action-providers/defillama/index.js +17 -0
  80. package/dist/action-providers/defillama/schemas.d.ts +34 -0
  81. package/dist/action-providers/defillama/schemas.js +34 -0
  82. package/dist/action-providers/defillama/types.d.ts +73 -0
  83. package/dist/action-providers/defillama/types.js +2 -0
  84. package/dist/action-providers/defillama/utils.d.ts +10 -0
  85. package/dist/action-providers/defillama/utils.js +87 -0
  86. package/dist/action-providers/defillama/utils.test.d.ts +1 -0
  87. package/dist/action-providers/defillama/utils.test.js +124 -0
  88. package/dist/action-providers/erc20/constants.d.ts +137 -0
  89. package/dist/action-providers/erc20/constants.js +202 -0
  90. package/dist/action-providers/erc20/erc20ActionProvider.d.ts +38 -0
  91. package/dist/action-providers/erc20/erc20ActionProvider.js +142 -0
  92. package/dist/action-providers/erc20/erc20ActionProvider.test.d.ts +1 -0
  93. package/dist/action-providers/erc20/erc20ActionProvider.test.js +131 -0
  94. package/dist/action-providers/erc20/index.d.ts +1 -0
  95. package/dist/action-providers/erc20/index.js +17 -0
  96. package/dist/action-providers/erc20/schemas.d.ts +27 -0
  97. package/dist/action-providers/erc20/schemas.js +26 -0
  98. package/dist/action-providers/erc721/constants.d.ts +232 -0
  99. package/dist/action-providers/erc721/constants.js +298 -0
  100. package/dist/action-providers/erc721/erc721ActionProvider.d.ts +46 -0
  101. package/dist/action-providers/erc721/erc721ActionProvider.js +164 -0
  102. package/dist/action-providers/erc721/erc721ActionProvider.test.d.ts +1 -0
  103. package/dist/action-providers/erc721/erc721ActionProvider.test.js +137 -0
  104. package/dist/action-providers/erc721/index.d.ts +1 -0
  105. package/dist/action-providers/erc721/index.js +17 -0
  106. package/dist/action-providers/erc721/schemas.d.ts +46 -0
  107. package/dist/action-providers/erc721/schemas.js +44 -0
  108. package/dist/action-providers/farcaster/farcasterActionProvider.d.ts +57 -0
  109. package/dist/action-providers/farcaster/farcasterActionProvider.js +142 -0
  110. package/dist/action-providers/farcaster/farcasterActionProvider.test.d.ts +1 -0
  111. package/dist/action-providers/farcaster/farcasterActionProvider.test.js +151 -0
  112. package/dist/action-providers/farcaster/index.d.ts +2 -0
  113. package/dist/action-providers/farcaster/index.js +18 -0
  114. package/dist/action-providers/farcaster/schemas.d.ts +15 -0
  115. package/dist/action-providers/farcaster/schemas.js +20 -0
  116. package/dist/action-providers/index.d.ts +24 -0
  117. package/dist/action-providers/index.js +40 -0
  118. package/dist/action-providers/jupiter/index.d.ts +1 -0
  119. package/dist/action-providers/jupiter/index.js +17 -0
  120. package/dist/action-providers/jupiter/jupiterActionProvider.d.ts +36 -0
  121. package/dist/action-providers/jupiter/jupiterActionProvider.js +115 -0
  122. package/dist/action-providers/jupiter/jupiterActionProvider.test.d.ts +1 -0
  123. package/dist/action-providers/jupiter/jupiterActionProvider.test.js +146 -0
  124. package/dist/action-providers/jupiter/schemas.d.ts +20 -0
  125. package/dist/action-providers/jupiter/schemas.js +20 -0
  126. package/dist/action-providers/messari/constants.d.ts +17 -0
  127. package/dist/action-providers/messari/constants.js +20 -0
  128. package/dist/action-providers/messari/index.d.ts +5 -0
  129. package/dist/action-providers/messari/index.js +21 -0
  130. package/dist/action-providers/messari/messariActionProvider.d.ts +42 -0
  131. package/dist/action-providers/messari/messariActionProvider.js +128 -0
  132. package/dist/action-providers/messari/messariActionProvider.test.d.ts +1 -0
  133. package/dist/action-providers/messari/messariActionProvider.test.js +152 -0
  134. package/dist/action-providers/messari/schemas.d.ts +11 -0
  135. package/dist/action-providers/messari/schemas.js +16 -0
  136. package/dist/action-providers/messari/types.d.ts +40 -0
  137. package/dist/action-providers/messari/types.js +2 -0
  138. package/dist/action-providers/messari/utils.d.ts +22 -0
  139. package/dist/action-providers/messari/utils.js +65 -0
  140. package/dist/action-providers/moonwell/constants.d.ts +78 -0
  141. package/dist/action-providers/moonwell/constants.js +111 -0
  142. package/dist/action-providers/moonwell/index.d.ts +1 -0
  143. package/dist/action-providers/moonwell/index.js +5 -0
  144. package/dist/action-providers/moonwell/moonwellActionProvider.d.ts +39 -0
  145. package/dist/action-providers/moonwell/moonwellActionProvider.js +249 -0
  146. package/dist/action-providers/moonwell/moonwellActionProvider.test.d.ts +1 -0
  147. package/dist/action-providers/moonwell/moonwellActionProvider.test.js +455 -0
  148. package/dist/action-providers/moonwell/schemas.d.ts +30 -0
  149. package/dist/action-providers/moonwell/schemas.js +39 -0
  150. package/dist/action-providers/morpho/constants.d.ts +16 -0
  151. package/dist/action-providers/morpho/constants.js +27 -0
  152. package/dist/action-providers/morpho/index.d.ts +2 -0
  153. package/dist/action-providers/morpho/index.js +18 -0
  154. package/dist/action-providers/morpho/morphoActionProvider.d.ts +39 -0
  155. package/dist/action-providers/morpho/morphoActionProvider.js +154 -0
  156. package/dist/action-providers/morpho/morphoActionProvider.test.d.ts +1 -0
  157. package/dist/action-providers/morpho/morphoActionProvider.test.js +128 -0
  158. package/dist/action-providers/morpho/schemas.d.ts +36 -0
  159. package/dist/action-providers/morpho/schemas.js +47 -0
  160. package/dist/action-providers/opensea/index.d.ts +1 -0
  161. package/dist/action-providers/opensea/index.js +17 -0
  162. package/dist/action-providers/opensea/openseaActionProvider.d.ts +59 -0
  163. package/dist/action-providers/opensea/openseaActionProvider.js +146 -0
  164. package/dist/action-providers/opensea/openseaActionProvider.test.d.ts +1 -0
  165. package/dist/action-providers/opensea/openseaActionProvider.test.js +201 -0
  166. package/dist/action-providers/opensea/schemas.d.ts +30 -0
  167. package/dist/action-providers/opensea/schemas.js +33 -0
  168. package/dist/action-providers/opensea/utils.d.ts +12 -0
  169. package/dist/action-providers/opensea/utils.js +47 -0
  170. package/dist/action-providers/pyth/index.d.ts +2 -0
  171. package/dist/action-providers/pyth/index.js +18 -0
  172. package/dist/action-providers/pyth/pythActionProvider.d.ts +33 -0
  173. package/dist/action-providers/pyth/pythActionProvider.js +121 -0
  174. package/dist/action-providers/pyth/pythActionProvider.test.d.ts +1 -0
  175. package/dist/action-providers/pyth/pythActionProvider.test.js +113 -0
  176. package/dist/action-providers/pyth/schemas.d.ts +21 -0
  177. package/dist/action-providers/pyth/schemas.js +20 -0
  178. package/dist/action-providers/spl/index.d.ts +1 -0
  179. package/dist/action-providers/spl/index.js +17 -0
  180. package/dist/action-providers/spl/schemas.d.ts +30 -0
  181. package/dist/action-providers/spl/schemas.js +26 -0
  182. package/dist/action-providers/spl/splActionProvider.d.ts +45 -0
  183. package/dist/action-providers/spl/splActionProvider.js +173 -0
  184. package/dist/action-providers/spl/splActionProvider.test.d.ts +1 -0
  185. package/dist/action-providers/spl/splActionProvider.test.js +300 -0
  186. package/dist/action-providers/twitter/index.d.ts +2 -0
  187. package/dist/action-providers/twitter/index.js +18 -0
  188. package/dist/action-providers/twitter/schemas.d.ts +38 -0
  189. package/dist/action-providers/twitter/schemas.js +44 -0
  190. package/dist/action-providers/twitter/twitterActionProvider.d.ts +82 -0
  191. package/dist/action-providers/twitter/twitterActionProvider.js +204 -0
  192. package/dist/action-providers/twitter/twitterActionProvider.test.d.ts +1 -0
  193. package/dist/action-providers/twitter/twitterActionProvider.test.js +185 -0
  194. package/dist/action-providers/wallet/index.d.ts +1 -0
  195. package/dist/action-providers/wallet/index.js +17 -0
  196. package/dist/action-providers/wallet/schemas.d.ts +19 -0
  197. package/dist/action-providers/wallet/schemas.js +19 -0
  198. package/dist/action-providers/wallet/walletActionProvider.d.ts +44 -0
  199. package/dist/action-providers/wallet/walletActionProvider.js +140 -0
  200. package/dist/action-providers/wallet/walletActionProvider.test.d.ts +1 -0
  201. package/dist/action-providers/wallet/walletActionProvider.test.js +194 -0
  202. package/dist/action-providers/weth/constants.d.ts +19 -0
  203. package/dist/action-providers/weth/constants.js +29 -0
  204. package/dist/action-providers/weth/index.d.ts +1 -0
  205. package/dist/action-providers/weth/index.js +17 -0
  206. package/dist/action-providers/weth/schemas.d.ts +8 -0
  207. package/dist/action-providers/weth/schemas.js +10 -0
  208. package/dist/action-providers/weth/wethActionProvider.d.ts +30 -0
  209. package/dist/action-providers/weth/wethActionProvider.js +89 -0
  210. package/dist/action-providers/weth/wethActionProvider.test.d.ts +1 -0
  211. package/dist/action-providers/weth/wethActionProvider.test.js +92 -0
  212. package/dist/action-providers/wow/constants.d.ts +15 -0
  213. package/dist/action-providers/wow/constants.js +844 -0
  214. package/dist/action-providers/wow/index.d.ts +2 -0
  215. package/dist/action-providers/wow/index.js +18 -0
  216. package/dist/action-providers/wow/schemas.d.ts +43 -0
  217. package/dist/action-providers/wow/schemas.js +47 -0
  218. package/dist/action-providers/wow/uniswap/constants.d.ts +3 -0
  219. package/dist/action-providers/wow/uniswap/constants.js +100 -0
  220. package/dist/action-providers/wow/uniswap/utils.d.ts +82 -0
  221. package/dist/action-providers/wow/uniswap/utils.js +226 -0
  222. package/dist/action-providers/wow/utils.d.ts +27 -0
  223. package/dist/action-providers/wow/utils.js +63 -0
  224. package/dist/action-providers/wow/wowActionProvider.d.ts +46 -0
  225. package/dist/action-providers/wow/wowActionProvider.js +223 -0
  226. package/dist/action-providers/wow/wowActionProvider.test.d.ts +1 -0
  227. package/dist/action-providers/wow/wowActionProvider.test.js +291 -0
  228. package/dist/agentkit.d.ts +44 -0
  229. package/dist/agentkit.js +68 -0
  230. package/dist/analytics/index.d.ts +1 -0
  231. package/dist/analytics/index.js +17 -0
  232. package/dist/analytics/sendAnalyticsEvent.d.ts +31 -0
  233. package/dist/analytics/sendAnalyticsEvent.js +52 -0
  234. package/dist/index.d.ts +4 -0
  235. package/dist/index.js +20 -0
  236. package/dist/network/index.d.ts +3 -0
  237. package/dist/network/index.js +19 -0
  238. package/dist/network/network.d.ts +20 -0
  239. package/dist/network/network.js +86 -0
  240. package/dist/network/svm.d.ts +15 -0
  241. package/dist/network/svm.js +38 -0
  242. package/dist/network/types.d.ts +17 -0
  243. package/dist/network/types.js +2 -0
  244. package/dist/utils.d.ts +22 -0
  245. package/dist/utils.js +57 -0
  246. package/dist/utils.test.d.ts +1 -0
  247. package/dist/utils.test.js +50 -0
  248. package/dist/wallet-providers/cdpWalletProvider.d.ts +246 -0
  249. package/dist/wallet-providers/cdpWalletProvider.js +421 -0
  250. package/dist/wallet-providers/cdpWalletProvider.test.d.ts +1 -0
  251. package/dist/wallet-providers/cdpWalletProvider.test.js +701 -0
  252. package/dist/wallet-providers/evmWalletProvider.d.ts +51 -0
  253. package/dist/wallet-providers/evmWalletProvider.js +14 -0
  254. package/dist/wallet-providers/evmWalletProvider.test.d.ts +1 -0
  255. package/dist/wallet-providers/evmWalletProvider.test.js +56 -0
  256. package/dist/wallet-providers/index.d.ts +10 -0
  257. package/dist/wallet-providers/index.js +26 -0
  258. package/dist/wallet-providers/privyEvmWalletProvider.d.ts +55 -0
  259. package/dist/wallet-providers/privyEvmWalletProvider.js +140 -0
  260. package/dist/wallet-providers/privyEvmWalletProvider.test.d.ts +1 -0
  261. package/dist/wallet-providers/privyEvmWalletProvider.test.js +331 -0
  262. package/dist/wallet-providers/privyShared.d.ts +40 -0
  263. package/dist/wallet-providers/privyShared.js +49 -0
  264. package/dist/wallet-providers/privySvmWalletProvider.d.ts +128 -0
  265. package/dist/wallet-providers/privySvmWalletProvider.js +212 -0
  266. package/dist/wallet-providers/privySvmWalletProvider.test.d.ts +1 -0
  267. package/dist/wallet-providers/privySvmWalletProvider.test.js +310 -0
  268. package/dist/wallet-providers/privyWalletProvider.d.ts +35 -0
  269. package/dist/wallet-providers/privyWalletProvider.js +39 -0
  270. package/dist/wallet-providers/privyWalletProvider.test.d.ts +1 -0
  271. package/dist/wallet-providers/privyWalletProvider.test.js +124 -0
  272. package/dist/wallet-providers/smartWalletProvider.d.ts +177 -0
  273. package/dist/wallet-providers/smartWalletProvider.js +303 -0
  274. package/dist/wallet-providers/smartWalletProvider.test.d.ts +1 -0
  275. package/dist/wallet-providers/smartWalletProvider.test.js +388 -0
  276. package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +143 -0
  277. package/dist/wallet-providers/solanaKeypairWalletProvider.js +280 -0
  278. package/dist/wallet-providers/solanaKeypairWalletProvider.test.d.ts +1 -0
  279. package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +218 -0
  280. package/dist/wallet-providers/svmWalletProvider.d.ts +56 -0
  281. package/dist/wallet-providers/svmWalletProvider.js +13 -0
  282. package/dist/wallet-providers/svmWalletProvider.test.d.ts +1 -0
  283. package/dist/wallet-providers/svmWalletProvider.test.js +55 -0
  284. package/dist/wallet-providers/viemWalletProvider.d.ts +103 -0
  285. package/dist/wallet-providers/viemWalletProvider.js +206 -0
  286. package/dist/wallet-providers/viemWalletProvider.test.d.ts +1 -0
  287. package/dist/wallet-providers/viemWalletProvider.test.js +338 -0
  288. package/dist/wallet-providers/walletProvider.d.ts +48 -0
  289. package/dist/wallet-providers/walletProvider.js +41 -0
  290. package/dist/wallet-providers/walletProvider.test.d.ts +1 -0
  291. package/dist/wallet-providers/walletProvider.test.js +103 -0
  292. package/package.json +83 -0
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const privyEvmWalletProvider_1 = require("./privyEvmWalletProvider");
4
+ global.fetch = jest.fn(() => Promise.resolve({
5
+ ok: true,
6
+ json: () => Promise.resolve({}),
7
+ }));
8
+ jest.mock("../analytics", () => ({
9
+ sendAnalyticsEvent: jest.fn().mockImplementation(() => Promise.resolve()),
10
+ }));
11
+ const MOCK_ADDRESS = "0x742d35Cc6634C0532925a3b844Bc454e4438f44e";
12
+ const MOCK_WALLET_ID = "test-wallet-id";
13
+ const MOCK_TRANSACTION_HASH = "0xef01";
14
+ const MOCK_SIGNATURE_HASH_1 = "0x1234";
15
+ const MOCK_SIGNATURE_HASH_2 = "0x5678";
16
+ const MOCK_SIGNATURE_HASH_3 = "0xabcd";
17
+ jest.mock("@privy-io/server-auth", () => ({
18
+ PrivyClient: jest.fn().mockImplementation(() => ({
19
+ appId: "mock-app-id",
20
+ walletApi: {
21
+ create: jest.fn().mockResolvedValue({
22
+ id: "test-wallet-id",
23
+ address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
24
+ }),
25
+ getWallet: jest.fn().mockResolvedValue({
26
+ id: "test-wallet-id",
27
+ address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
28
+ }),
29
+ },
30
+ })),
31
+ }));
32
+ jest.mock("@privy-io/server-auth/viem", () => ({
33
+ getWalletClient: jest.fn().mockReturnValue({
34
+ account: {
35
+ address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
36
+ },
37
+ chain: {
38
+ id: 1,
39
+ name: "Ethereum",
40
+ rpcUrls: {
41
+ default: { http: ["https://eth.llamarpc.com"] },
42
+ },
43
+ nativeCurrency: {
44
+ name: "Ether",
45
+ symbol: "ETH",
46
+ decimals: 18,
47
+ },
48
+ },
49
+ signMessage: jest.fn().mockResolvedValue("0x1234"),
50
+ signTypedData: jest.fn().mockResolvedValue("0x5678"),
51
+ signTransaction: jest.fn().mockResolvedValue("0xabcd"),
52
+ sendTransaction: jest.fn().mockResolvedValue("0xef01"),
53
+ }),
54
+ getPublicClient: jest.fn().mockReturnValue({
55
+ getChainId: jest.fn().mockResolvedValue(1),
56
+ getBalance: jest.fn().mockResolvedValue(BigInt(1000000000000000000)),
57
+ waitForTransactionReceipt: jest.fn().mockResolvedValue({ transactionHash: "0xef01" }),
58
+ readContract: jest.fn().mockResolvedValue("mock_result"),
59
+ estimateFeesPerGas: jest.fn().mockResolvedValue({
60
+ maxFeePerGas: BigInt(100000000),
61
+ maxPriorityFeePerGas: BigInt(10000000),
62
+ }),
63
+ estimateGas: jest.fn().mockResolvedValue(BigInt(21000)),
64
+ }),
65
+ createViemAccount: jest.fn().mockResolvedValue({
66
+ address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
67
+ type: "local",
68
+ signMessage: jest.fn().mockResolvedValue("0x1234"),
69
+ signTypedData: jest.fn().mockResolvedValue("0x5678"),
70
+ signTransaction: jest.fn().mockResolvedValue("0xabcd"),
71
+ }),
72
+ }));
73
+ jest.mock("../network", () => {
74
+ const chain = {
75
+ id: 1,
76
+ name: "Ethereum",
77
+ rpcUrls: {
78
+ default: { http: ["https://eth.llamarpc.com"] },
79
+ },
80
+ nativeCurrency: {
81
+ name: "Ether",
82
+ symbol: "ETH",
83
+ decimals: 18,
84
+ },
85
+ };
86
+ return {
87
+ getNetwork: jest.fn().mockReturnValue({
88
+ protocolFamily: "evm",
89
+ chainId: "1",
90
+ networkId: "ethereum-mainnet",
91
+ }),
92
+ getChain: jest.fn().mockReturnValue(chain),
93
+ CHAIN_ID_TO_NETWORK_ID: {
94
+ "1": "ethereum-mainnet",
95
+ "5": "ethereum-goerli",
96
+ "11155111": "ethereum-sepolia",
97
+ },
98
+ NETWORK_ID_TO_CHAIN_ID: {
99
+ "ethereum-mainnet": "1",
100
+ "ethereum-goerli": "5",
101
+ "ethereum-sepolia": "11155111",
102
+ },
103
+ };
104
+ });
105
+ jest.mock("viem", () => {
106
+ const originalModule = jest.requireActual("viem");
107
+ return {
108
+ ...originalModule,
109
+ createPublicClient: jest.fn().mockReturnValue({
110
+ getChainId: jest.fn().mockResolvedValue(1),
111
+ getBalance: jest.fn().mockResolvedValue(BigInt(1000000000000000000)),
112
+ waitForTransactionReceipt: jest.fn().mockResolvedValue({ transactionHash: "0xef01" }),
113
+ readContract: jest.fn().mockResolvedValue("mock_result"),
114
+ estimateFeesPerGas: jest.fn().mockResolvedValue({
115
+ maxFeePerGas: BigInt(100000000),
116
+ maxPriorityFeePerGas: BigInt(10000000),
117
+ }),
118
+ estimateGas: jest.fn().mockResolvedValue(BigInt(21000)),
119
+ }),
120
+ createWalletClient: jest.fn().mockReturnValue({
121
+ account: {
122
+ address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
123
+ },
124
+ chain: {
125
+ id: 1,
126
+ name: "Ethereum",
127
+ rpcUrls: {
128
+ default: { http: ["https://eth.llamarpc.com"] },
129
+ },
130
+ nativeCurrency: {
131
+ name: "Ether",
132
+ symbol: "ETH",
133
+ decimals: 18,
134
+ },
135
+ },
136
+ signMessage: jest.fn().mockResolvedValue("0x1234"),
137
+ signTypedData: jest.fn().mockResolvedValue("0x5678"),
138
+ signTransaction: jest.fn().mockResolvedValue("0xabcd"),
139
+ sendTransaction: jest.fn().mockResolvedValue("0xef01"),
140
+ }),
141
+ parseEther: jest.fn().mockReturnValue(BigInt(1000000000000000000)),
142
+ };
143
+ });
144
+ jest.mock("./privyShared", () => ({
145
+ createPrivyWallet: jest.fn().mockResolvedValue({
146
+ wallet: {
147
+ id: "test-wallet-id",
148
+ address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
149
+ },
150
+ privy: {
151
+ appId: "mock-app-id",
152
+ walletApi: {
153
+ create: jest.fn(),
154
+ getWallet: jest.fn(),
155
+ },
156
+ },
157
+ }),
158
+ }));
159
+ describe("PrivyEvmWalletProvider", () => {
160
+ const MOCK_CONFIG = {
161
+ appId: "mock-app-id",
162
+ apiKey: "mock-api-key",
163
+ appSecret: "mock-app-secret",
164
+ networkId: "ethereum-mainnet",
165
+ };
166
+ beforeEach(() => {
167
+ jest.clearAllMocks();
168
+ });
169
+ describe("configureWithWallet", () => {
170
+ it("should configure a wallet with required configuration", async () => {
171
+ const provider = await privyEvmWalletProvider_1.PrivyEvmWalletProvider.configureWithWallet(MOCK_CONFIG);
172
+ expect(provider).toBeInstanceOf(privyEvmWalletProvider_1.PrivyEvmWalletProvider);
173
+ expect(provider.getNetwork()).toEqual({
174
+ protocolFamily: "evm",
175
+ chainId: "1",
176
+ networkId: "ethereum-mainnet",
177
+ });
178
+ });
179
+ it("should configure a wallet with chain ID", async () => {
180
+ const provider = await privyEvmWalletProvider_1.PrivyEvmWalletProvider.configureWithWallet({
181
+ ...MOCK_CONFIG,
182
+ chainId: "5",
183
+ });
184
+ expect(provider).toBeInstanceOf(privyEvmWalletProvider_1.PrivyEvmWalletProvider);
185
+ expect(provider.getNetwork()).toEqual({
186
+ protocolFamily: "evm",
187
+ chainId: "1",
188
+ networkId: "ethereum-mainnet",
189
+ });
190
+ });
191
+ it("should configure a wallet with existing wallet ID", async () => {
192
+ const provider = await privyEvmWalletProvider_1.PrivyEvmWalletProvider.configureWithWallet({
193
+ ...MOCK_CONFIG,
194
+ walletId: "existing-wallet-id",
195
+ });
196
+ expect(provider).toBeInstanceOf(privyEvmWalletProvider_1.PrivyEvmWalletProvider);
197
+ });
198
+ });
199
+ describe("wallet methods", () => {
200
+ let provider;
201
+ beforeEach(async () => {
202
+ provider = await privyEvmWalletProvider_1.PrivyEvmWalletProvider.configureWithWallet(MOCK_CONFIG);
203
+ });
204
+ it("should get the wallet address", () => {
205
+ expect(provider.getAddress()).toBe(MOCK_ADDRESS);
206
+ });
207
+ it("should get the network information", () => {
208
+ expect(provider.getNetwork()).toEqual({
209
+ protocolFamily: "evm",
210
+ chainId: "1",
211
+ networkId: "ethereum-mainnet",
212
+ });
213
+ });
214
+ it("should get the provider name", () => {
215
+ expect(provider.getName()).toBe("privy_evm_wallet_provider");
216
+ });
217
+ it("should sign a message", async () => {
218
+ const result = await provider.signMessage("Hello, world!");
219
+ expect(result).toBe(MOCK_SIGNATURE_HASH_1);
220
+ });
221
+ it("should sign typed data", async () => {
222
+ const typedData = {
223
+ domain: { name: "Test" },
224
+ types: { Test: [{ name: "test", type: "string" }] },
225
+ primaryType: "Test",
226
+ message: { test: "test" },
227
+ };
228
+ const result = await provider.signTypedData(typedData);
229
+ expect(result).toBe(MOCK_SIGNATURE_HASH_2);
230
+ });
231
+ it("should sign a transaction", async () => {
232
+ const transaction = {
233
+ to: "0x1234567890123456789012345678901234567890",
234
+ value: 1000000000000000000n,
235
+ };
236
+ const result = await provider.signTransaction(transaction);
237
+ expect(result).toBe(MOCK_SIGNATURE_HASH_3);
238
+ });
239
+ it("should send a transaction", async () => {
240
+ const transaction = {
241
+ to: "0x1234567890123456789012345678901234567890",
242
+ value: 1000000000000000000n,
243
+ };
244
+ const result = await provider.sendTransaction(transaction);
245
+ expect(result).toBe(MOCK_TRANSACTION_HASH);
246
+ });
247
+ it("should get the wallet balance", async () => {
248
+ const balance = await provider.getBalance();
249
+ expect(balance).toBe(BigInt(1000000000000000000));
250
+ });
251
+ it("should wait for transaction receipt", async () => {
252
+ const receipt = await provider.waitForTransactionReceipt(MOCK_TRANSACTION_HASH);
253
+ expect(receipt).toEqual({ transactionHash: MOCK_TRANSACTION_HASH });
254
+ });
255
+ it("should read contract data", async () => {
256
+ const abi = [
257
+ {
258
+ name: "balanceOf",
259
+ type: "function",
260
+ inputs: [{ name: "account", type: "address" }],
261
+ outputs: [{ name: "balance", type: "uint256" }],
262
+ stateMutability: "view",
263
+ },
264
+ ];
265
+ const params = {
266
+ address: "0x1234567890123456789012345678901234567890",
267
+ abi,
268
+ functionName: "balanceOf",
269
+ args: [MOCK_ADDRESS],
270
+ };
271
+ const result = await provider.readContract(params);
272
+ expect(result).toBe("mock_result");
273
+ });
274
+ it("should transfer native tokens", async () => {
275
+ const result = await provider.nativeTransfer("0x1234567890123456789012345678901234567890", "1.0");
276
+ expect(result).toBe(MOCK_TRANSACTION_HASH);
277
+ });
278
+ it("should export wallet data", () => {
279
+ const exportData = provider.exportWallet();
280
+ expect(exportData).toEqual({
281
+ walletId: MOCK_WALLET_ID,
282
+ authorizationPrivateKey: undefined,
283
+ chainId: "1",
284
+ networkId: "ethereum-mainnet",
285
+ });
286
+ });
287
+ it("should handle authorization key requirements properly", async () => {
288
+ const authorizationKeyId = "test-auth-key-id";
289
+ const mockPrivyClient = {
290
+ walletApi: {
291
+ create: jest.fn().mockImplementation(({ authorizationKeyIds }) => {
292
+ if (authorizationKeyIds && authorizationKeyIds.length > 0) {
293
+ throw new Error("Missing `privy-authorization-signature` header");
294
+ }
295
+ return Promise.resolve({
296
+ id: "test-wallet-id",
297
+ address: MOCK_ADDRESS,
298
+ });
299
+ }),
300
+ },
301
+ };
302
+ const privyServerAuth = jest.requireMock("@privy-io/server-auth");
303
+ const originalMockImplementation = privyServerAuth.PrivyClient.getMockImplementation();
304
+ privyServerAuth.PrivyClient.mockImplementation(() => mockPrivyClient);
305
+ await expect(privyEvmWalletProvider_1.PrivyEvmWalletProvider.configureWithWallet({
306
+ appId: "test-app-id",
307
+ appSecret: "test-app-secret",
308
+ authorizationKeyId,
309
+ })).rejects.toThrow("authorizationPrivateKey is required when creating a new wallet with an authorizationKeyId");
310
+ privyServerAuth.PrivyClient.mockImplementation(originalMockImplementation);
311
+ });
312
+ it("should handle wallet creation errors", async () => {
313
+ const mockPrivyClient = {
314
+ walletApi: {
315
+ create: jest.fn().mockRejectedValue(new Error("API rate limit exceeded")),
316
+ },
317
+ };
318
+ const privyServerAuth = jest.requireMock("@privy-io/server-auth");
319
+ const originalMockImplementation = privyServerAuth.PrivyClient.getMockImplementation();
320
+ privyServerAuth.PrivyClient.mockImplementation(() => mockPrivyClient);
321
+ const originalConsoleError = console.error;
322
+ console.error = jest.fn();
323
+ await expect(privyEvmWalletProvider_1.PrivyEvmWalletProvider.configureWithWallet({
324
+ appId: "test-app-id",
325
+ appSecret: "test-app-secret",
326
+ })).rejects.toThrow("Failed to create wallet");
327
+ console.error = originalConsoleError;
328
+ privyServerAuth.PrivyClient.mockImplementation(originalMockImplementation);
329
+ });
330
+ });
331
+ });
@@ -0,0 +1,40 @@
1
+ import { PrivyClient, Wallet } from "@privy-io/server-auth";
2
+ /**
3
+ * Configuration options for the Privy wallet provider.
4
+ *
5
+ * @interface
6
+ */
7
+ export interface PrivyWalletConfig {
8
+ /** The Privy application ID */
9
+ appId: string;
10
+ /** The Privy application secret */
11
+ appSecret: string;
12
+ /** The ID of the wallet to use, if not provided a new wallet will be created */
13
+ walletId?: string;
14
+ /** Optional authorization key for the wallet API */
15
+ authorizationPrivateKey?: string;
16
+ /** Optional authorization key ID for creating new wallets */
17
+ authorizationKeyId?: string;
18
+ /** The chain type to create the wallet on */
19
+ chainType?: "ethereum" | "solana";
20
+ }
21
+ export type PrivyWalletExport = {
22
+ walletId: string;
23
+ authorizationPrivateKey: string | undefined;
24
+ chainId: string | undefined;
25
+ networkId: string | undefined;
26
+ };
27
+ type CreatePrivyWalletReturnType = {
28
+ wallet: Wallet & {
29
+ id: string;
30
+ };
31
+ privy: PrivyClient;
32
+ };
33
+ /**
34
+ * Create a Privy wallet
35
+ *
36
+ * @param config - The configuration options for the Privy wallet
37
+ * @returns The created Privy wallet
38
+ */
39
+ export declare function createPrivyWallet(config: PrivyWalletConfig): Promise<CreatePrivyWalletReturnType>;
40
+ export {};
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPrivyWallet = createPrivyWallet;
4
+ const server_auth_1 = require("@privy-io/server-auth");
5
+ /**
6
+ * Create a Privy wallet
7
+ *
8
+ * @param config - The configuration options for the Privy wallet
9
+ * @returns The created Privy wallet
10
+ */
11
+ async function createPrivyWallet(config) {
12
+ const privy = new server_auth_1.PrivyClient(config.appId, config.appSecret, {
13
+ walletApi: config.authorizationPrivateKey
14
+ ? {
15
+ authorizationPrivateKey: config.authorizationPrivateKey,
16
+ }
17
+ : undefined,
18
+ });
19
+ if (config.walletId) {
20
+ const wallet = await privy.walletApi.getWallet({ id: config.walletId });
21
+ if (!wallet) {
22
+ throw new Error(`Wallet with ID ${config.walletId} not found`);
23
+ }
24
+ return { wallet, privy };
25
+ }
26
+ if (config.authorizationPrivateKey && !config.authorizationKeyId) {
27
+ throw new Error("authorizationKeyId is required when creating a new wallet with an authorization key, this can be found in your Privy Dashboard");
28
+ }
29
+ if (config.authorizationKeyId && !config.authorizationPrivateKey) {
30
+ throw new Error("authorizationPrivateKey is required when creating a new wallet with an authorizationKeyId. " +
31
+ "If you don't have it, you can create a new one in your Privy Dashboard, or delete the authorization key.");
32
+ }
33
+ try {
34
+ const wallet = await privy.walletApi.create({
35
+ chainType: config.chainType,
36
+ authorizationKeyIds: config.authorizationKeyId ? [config.authorizationKeyId] : undefined,
37
+ });
38
+ return { wallet, privy };
39
+ }
40
+ catch (error) {
41
+ console.error(error);
42
+ if (error instanceof Error &&
43
+ error.message.includes("Missing `privy-authorization-signature` header")) {
44
+ // Providing a more informative error message, see context: https://github.com/coinbase/agentkit/pull/242#discussion_r1956428617
45
+ throw new Error("Privy error: you have an authorization key on your account which can create and modify wallets, please delete this key or pass it to the PrivyWalletProvider to create a new wallet");
46
+ }
47
+ throw new Error("Failed to create wallet");
48
+ }
49
+ }
@@ -0,0 +1,128 @@
1
+ import { SvmWalletProvider } from "./svmWalletProvider";
2
+ import { RpcResponseAndContext, SignatureStatus, VersionedTransaction, Connection, PublicKey, SignatureResult } from "@solana/web3.js";
3
+ import { Network } from "../network/types";
4
+ import { PrivyWalletConfig, PrivyWalletExport } from "./privyShared";
5
+ /**
6
+ * Configuration options for the Privy Svm wallet provider.
7
+ */
8
+ export interface PrivySvmWalletConfig extends PrivyWalletConfig {
9
+ /** The network ID to use for the wallet */
10
+ networkId?: string;
11
+ /** The connection to use for the wallet */
12
+ connection?: Connection;
13
+ }
14
+ /**
15
+ * A wallet provider that uses Privy's server wallet API.
16
+ * This provider extends the SvmWalletProvider to provide Privy-specific wallet functionality
17
+ * while maintaining compatibility with the base wallet provider interface.
18
+ */
19
+ export declare class PrivySvmWalletProvider extends SvmWalletProvider {
20
+ #private;
21
+ /**
22
+ * Private constructor to enforce use of factory method.
23
+ *
24
+ * @param config - The configuration options for the Privy wallet
25
+ */
26
+ private constructor();
27
+ /**
28
+ * Creates and configures a new PrivySolanaWalletProvider instance.
29
+ *
30
+ * @param config - The configuration options for the Privy wallet
31
+ * @returns A configured PrivySolanaWalletProvider instance
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const provider = await PrivySolanaWalletProvider.configureWithWallet({
36
+ * appId: "your-app-id",
37
+ * appSecret: "your-app-secret",
38
+ * walletId: "wallet-id",
39
+ * });
40
+ * ```
41
+ */
42
+ static configureWithWallet<T extends PrivySvmWalletProvider>(config: PrivySvmWalletConfig): Promise<T>;
43
+ /**
44
+ * Sign a transaction.
45
+ *
46
+ * @param transaction - The transaction to sign.
47
+ * @returns The signed transaction.
48
+ */
49
+ signTransaction(transaction: VersionedTransaction): Promise<VersionedTransaction>;
50
+ /**
51
+ * Sign and send a transaction.
52
+ *
53
+ * @param transaction - The transaction to send.
54
+ * @returns The transaction hash.
55
+ */
56
+ signAndSendTransaction(transaction: VersionedTransaction): Promise<string>;
57
+ /**
58
+ * Send a transaction.
59
+ *
60
+ * @param _ - The transaction to send.
61
+ * @returns The transaction hash.
62
+ */
63
+ sendTransaction(_: VersionedTransaction): Promise<string>;
64
+ /**
65
+ * Exports the wallet data.
66
+ *
67
+ * @returns The wallet data
68
+ */
69
+ exportWallet(): PrivyWalletExport;
70
+ /**
71
+ * Gets the name of the wallet provider.
72
+ *
73
+ * @returns The string identifier for this wallet provider
74
+ */
75
+ getName(): string;
76
+ /**
77
+ * Get the address of the wallet.
78
+ *
79
+ * @returns The address of the wallet.
80
+ */
81
+ getAddress(): string;
82
+ /**
83
+ * Get the network of the wallet.
84
+ *
85
+ * @returns The network of the wallet.
86
+ */
87
+ getNetwork(): Network;
88
+ /**
89
+ * Get the balance of the wallet.
90
+ *
91
+ * @returns The balance of the wallet.
92
+ */
93
+ getBalance(): Promise<bigint>;
94
+ /**
95
+ * Transfer a native token.
96
+ *
97
+ * @param _ - The address to transfer the token to.
98
+ * @param arg2 - The value to transfer.
99
+ * @returns The transaction hash.
100
+ */
101
+ nativeTransfer(_: string, arg2: string): Promise<string>;
102
+ /**
103
+ * Get the status of a transaction.
104
+ *
105
+ * @param signature - The transaction signature.
106
+ * @returns The transaction status.
107
+ */
108
+ getSignatureStatus(signature: string): Promise<RpcResponseAndContext<SignatureStatus | null>>;
109
+ /**
110
+ * Wait for a signature result.
111
+ *
112
+ * @param signature - The signature to wait for.
113
+ * @returns The signature result.
114
+ */
115
+ waitForSignatureResult(signature: string): Promise<RpcResponseAndContext<SignatureResult>>;
116
+ /**
117
+ * Get the connection.
118
+ *
119
+ * @returns The connection.
120
+ */
121
+ getConnection(): Connection;
122
+ /**
123
+ * Get the public key.
124
+ *
125
+ * @returns The public key.
126
+ */
127
+ getPublicKey(): PublicKey;
128
+ }