httpcat-cli 0.3.0 → 0.3.1

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 (322) hide show
  1. package/.github/workflows/ci.yml +3 -0
  2. package/.github/workflows/rc-publish.yml +6 -0
  3. package/.github/workflows/release.yml +102 -0
  4. package/.github/workflows/sync-version.yml +31 -2
  5. package/README.md +1408 -109
  6. package/additions.txt +3 -0
  7. package/bun.lock +260 -25
  8. package/dist/agent/autonomous-trader.d.ts.map +1 -0
  9. package/dist/agent/autonomous-trader.js +362 -0
  10. package/dist/agent/autonomous-trader.js.map +1 -0
  11. package/dist/agent/ax-agent.d.ts.map +1 -1
  12. package/dist/agent/ax-agent.js +356 -18
  13. package/dist/agent/ax-agent.js.map +1 -1
  14. package/dist/agent/event-client.d.ts.map +1 -0
  15. package/dist/agent/event-client.js +82 -0
  16. package/dist/agent/event-client.js.map +1 -0
  17. package/dist/agent/log-stream.d.ts.map +1 -0
  18. package/dist/agent/log-stream.js +95 -0
  19. package/dist/agent/log-stream.js.map +1 -0
  20. package/dist/agent/memory/conversation-session.d.ts.map +1 -0
  21. package/dist/agent/memory/conversation-session.js +232 -0
  22. package/dist/agent/memory/conversation-session.js.map +1 -0
  23. package/dist/agent/memory/conversation-store.d.ts.map +1 -0
  24. package/dist/agent/memory/conversation-store.js +214 -0
  25. package/dist/agent/memory/conversation-store.js.map +1 -0
  26. package/dist/agent/memory/database-schema.d.ts.map +1 -0
  27. package/dist/agent/memory/database-schema.js +355 -0
  28. package/dist/agent/memory/database-schema.js.map +1 -0
  29. package/dist/agent/memory/decision-tracker.d.ts.map +1 -0
  30. package/dist/agent/memory/decision-tracker.js +274 -0
  31. package/dist/agent/memory/decision-tracker.js.map +1 -0
  32. package/dist/agent/memory/memory-manager.d.ts.map +1 -0
  33. package/dist/agent/memory/memory-manager.js +187 -0
  34. package/dist/agent/memory/memory-manager.js.map +1 -0
  35. package/dist/agent/memory/types.d.ts.map +1 -0
  36. package/dist/agent/memory/types.js +5 -0
  37. package/dist/agent/memory/types.js.map +1 -0
  38. package/dist/agent/message-formatter.d.ts.map +1 -0
  39. package/dist/agent/message-formatter.js +76 -0
  40. package/dist/agent/message-formatter.js.map +1 -0
  41. package/dist/agent/position-db.d.ts.map +1 -0
  42. package/dist/agent/position-db.js +154 -0
  43. package/dist/agent/position-db.js.map +1 -0
  44. package/dist/agent/simple-chat-ui-static.d.ts.map +1 -0
  45. package/dist/agent/simple-chat-ui-static.js +129 -0
  46. package/dist/agent/simple-chat-ui-static.js.map +1 -0
  47. package/dist/agent/simple-chat-ui.d.ts.map +1 -0
  48. package/dist/agent/simple-chat-ui.js +90 -0
  49. package/dist/agent/simple-chat-ui.js.map +1 -0
  50. package/dist/agent/tools.d.ts.map +1 -1
  51. package/dist/agent/tools.js +297 -4
  52. package/dist/agent/tools.js.map +1 -1
  53. package/dist/agent/ui.d.ts.map +1 -0
  54. package/dist/agent/ui.js +84 -0
  55. package/dist/agent/ui.js.map +1 -0
  56. package/dist/agent/unified-runtime.d.ts.map +1 -0
  57. package/dist/agent/unified-runtime.js +397 -0
  58. package/dist/agent/unified-runtime.js.map +1 -0
  59. package/dist/client.d.ts.map +1 -1
  60. package/dist/client.js +272 -21
  61. package/dist/client.js.map +1 -1
  62. package/dist/commands/account.d.ts.map +1 -1
  63. package/dist/commands/account.js +187 -33
  64. package/dist/commands/account.js.map +1 -1
  65. package/dist/commands/agent.d.ts.map +1 -0
  66. package/dist/commands/agent.js +125 -0
  67. package/dist/commands/agent.js.map +1 -0
  68. package/dist/commands/approve.d.ts.map +1 -0
  69. package/dist/commands/approve.js +505 -0
  70. package/dist/commands/approve.js.map +1 -0
  71. package/dist/commands/automation.d.ts.map +1 -0
  72. package/dist/commands/automation.js +346 -0
  73. package/dist/commands/automation.js.map +1 -0
  74. package/dist/commands/balances.d.ts.map +1 -1
  75. package/dist/commands/balances.js +226 -73
  76. package/dist/commands/balances.js.map +1 -1
  77. package/dist/commands/buy.d.ts.map +1 -1
  78. package/dist/commands/buy.js +149 -146
  79. package/dist/commands/buy.js.map +1 -1
  80. package/dist/commands/call.d.ts.map +1 -0
  81. package/dist/commands/call.js +51 -0
  82. package/dist/commands/call.js.map +1 -0
  83. package/dist/commands/cex.d.ts.map +1 -0
  84. package/dist/commands/cex.js +958 -0
  85. package/dist/commands/cex.js.map +1 -0
  86. package/dist/commands/chat.d.ts.map +1 -1
  87. package/dist/commands/chat.js +169 -411
  88. package/dist/commands/chat.js.map +1 -1
  89. package/dist/commands/claim.d.ts.map +1 -1
  90. package/dist/commands/claim.js +313 -29
  91. package/dist/commands/claim.js.map +1 -1
  92. package/dist/commands/create.d.ts.map +1 -1
  93. package/dist/commands/create.js +151 -43
  94. package/dist/commands/create.js.map +1 -1
  95. package/dist/commands/gasless-swap.d.ts.map +1 -0
  96. package/dist/commands/gasless-swap.js +232 -0
  97. package/dist/commands/gasless-swap.js.map +1 -0
  98. package/dist/commands/health.d.ts.map +1 -1
  99. package/dist/commands/health.js +63 -7
  100. package/dist/commands/health.js.map +1 -1
  101. package/dist/commands/info.d.ts.map +1 -1
  102. package/dist/commands/info.js +131 -47
  103. package/dist/commands/info.js.map +1 -1
  104. package/dist/commands/launchpad.d.ts.map +1 -0
  105. package/dist/commands/launchpad.js +708 -0
  106. package/dist/commands/launchpad.js.map +1 -0
  107. package/dist/commands/list.d.ts.map +1 -1
  108. package/dist/commands/list.js +57 -23
  109. package/dist/commands/list.js.map +1 -1
  110. package/dist/commands/market.d.ts.map +1 -0
  111. package/dist/commands/market.js +960 -0
  112. package/dist/commands/market.js.map +1 -0
  113. package/dist/commands/mcp-install.d.ts.map +1 -0
  114. package/dist/commands/mcp-install.js +387 -0
  115. package/dist/commands/mcp-install.js.map +1 -0
  116. package/dist/commands/opps.d.ts.map +1 -0
  117. package/dist/commands/opps.js +409 -0
  118. package/dist/commands/opps.js.map +1 -0
  119. package/dist/commands/perps.d.ts.map +1 -0
  120. package/dist/commands/perps.js +248 -0
  121. package/dist/commands/perps.js.map +1 -0
  122. package/dist/commands/portfolio.d.ts.map +1 -0
  123. package/dist/commands/portfolio.js +679 -0
  124. package/dist/commands/portfolio.js.map +1 -0
  125. package/dist/commands/positions.d.ts.map +1 -1
  126. package/dist/commands/positions.js +76 -47
  127. package/dist/commands/positions.js.map +1 -1
  128. package/dist/commands/predict.d.ts.map +1 -0
  129. package/dist/commands/predict.js +280 -0
  130. package/dist/commands/predict.js.map +1 -0
  131. package/dist/commands/predictions.d.ts.map +1 -0
  132. package/dist/commands/predictions.js +486 -0
  133. package/dist/commands/predictions.js.map +1 -0
  134. package/dist/commands/risk.d.ts.map +1 -0
  135. package/dist/commands/risk.js +225 -0
  136. package/dist/commands/risk.js.map +1 -0
  137. package/dist/commands/security.d.ts.map +1 -0
  138. package/dist/commands/security.js +244 -0
  139. package/dist/commands/security.js.map +1 -0
  140. package/dist/commands/sell.d.ts.map +1 -1
  141. package/dist/commands/sell.js +67 -34
  142. package/dist/commands/sell.js.map +1 -1
  143. package/dist/commands/send.d.ts.map +1 -0
  144. package/dist/commands/send.js +733 -0
  145. package/dist/commands/send.js.map +1 -0
  146. package/dist/commands/sign.d.ts.map +1 -0
  147. package/dist/commands/sign.js +1048 -0
  148. package/dist/commands/sign.js.map +1 -0
  149. package/dist/commands/swap.d.ts.map +1 -0
  150. package/dist/commands/swap.js +744 -0
  151. package/dist/commands/swap.js.map +1 -0
  152. package/dist/commands/system.d.ts.map +1 -0
  153. package/dist/commands/system.js +417 -0
  154. package/dist/commands/system.js.map +1 -0
  155. package/dist/commands/tools/index.d.ts.map +1 -0
  156. package/dist/commands/tools/index.js +2040 -0
  157. package/dist/commands/tools/index.js.map +1 -0
  158. package/dist/commands/trade.d.ts.map +1 -0
  159. package/dist/commands/trade.js +237 -0
  160. package/dist/commands/trade.js.map +1 -0
  161. package/dist/commands/transactions.d.ts.map +1 -1
  162. package/dist/commands/transactions.js +29 -17
  163. package/dist/commands/transactions.js.map +1 -1
  164. package/dist/commands/update.d.ts.map +1 -0
  165. package/dist/commands/update.js +429 -0
  166. package/dist/commands/update.js.map +1 -0
  167. package/dist/config.d.ts.map +1 -1
  168. package/dist/config.js +351 -40
  169. package/dist/config.js.map +1 -1
  170. package/dist/index.js +4524 -924
  171. package/dist/index.js.map +1 -1
  172. package/dist/interactive/art.d.ts.map +1 -1
  173. package/dist/interactive/art.js +33 -1
  174. package/dist/interactive/art.js.map +1 -1
  175. package/dist/interactive/shell.d.ts.map +1 -1
  176. package/dist/interactive/shell.js +467 -2652
  177. package/dist/interactive/shell.js.map +1 -1
  178. package/dist/mcp/context.d.ts.map +1 -0
  179. package/dist/mcp/context.js +211 -0
  180. package/dist/mcp/context.js.map +1 -0
  181. package/dist/mcp/onboarding.d.ts.map +1 -0
  182. package/dist/mcp/onboarding.js +266 -0
  183. package/dist/mcp/onboarding.js.map +1 -0
  184. package/dist/mcp/resources.d.ts.map +1 -0
  185. package/dist/mcp/resources.js +222 -0
  186. package/dist/mcp/resources.js.map +1 -0
  187. package/dist/mcp/server.d.ts.map +1 -1
  188. package/dist/mcp/server.js +51 -1
  189. package/dist/mcp/server.js.map +1 -1
  190. package/dist/mcp/tools.d.ts.map +1 -1
  191. package/dist/mcp/tools.js +4119 -169
  192. package/dist/mcp/tools.js.map +1 -1
  193. package/dist/mcp/types.d.ts.map +1 -1
  194. package/dist/types/agent-info.d.ts.map +1 -0
  195. package/dist/types/agent-info.js +11 -0
  196. package/dist/types/agent-info.js.map +1 -0
  197. package/dist/ui/components/ScrollableList.d.ts.map +1 -0
  198. package/dist/ui/components/ScrollableList.js +72 -0
  199. package/dist/ui/components/ScrollableList.js.map +1 -0
  200. package/dist/ui/components/ThemeProvider.d.ts.map +1 -0
  201. package/dist/ui/components/ThemeProvider.js +87 -0
  202. package/dist/ui/components/ThemeProvider.js.map +1 -0
  203. package/dist/ui/components/ThemedBox.d.ts.map +1 -0
  204. package/dist/ui/components/ThemedBox.js +24 -0
  205. package/dist/ui/components/ThemedBox.js.map +1 -0
  206. package/dist/ui/components/agent/ChatHeader.d.ts.map +1 -0
  207. package/dist/ui/components/agent/ChatHeader.js +39 -0
  208. package/dist/ui/components/agent/ChatHeader.js.map +1 -0
  209. package/dist/ui/components/agent/Header.d.ts.map +1 -0
  210. package/dist/ui/components/agent/Header.js +14 -0
  211. package/dist/ui/components/agent/Header.js.map +1 -0
  212. package/dist/ui/components/agent/Input.d.ts.map +1 -0
  213. package/dist/ui/components/agent/Input.js +23 -0
  214. package/dist/ui/components/agent/Input.js.map +1 -0
  215. package/dist/ui/components/agent/Output.d.ts.map +1 -0
  216. package/dist/ui/components/agent/Output.js +23 -0
  217. package/dist/ui/components/agent/Output.js.map +1 -0
  218. package/dist/ui/components/chat/TokenChatUI.d.ts.map +1 -0
  219. package/dist/ui/components/chat/TokenChatUI.js +133 -0
  220. package/dist/ui/components/chat/TokenChatUI.js.map +1 -0
  221. package/dist/ui/components/shell/ShellHeader.d.ts.map +1 -0
  222. package/dist/ui/components/shell/ShellHeader.js +31 -0
  223. package/dist/ui/components/shell/ShellHeader.js.map +1 -0
  224. package/dist/ui/components/shell/ShellInput.d.ts.map +1 -0
  225. package/dist/ui/components/shell/ShellInput.js +151 -0
  226. package/dist/ui/components/shell/ShellInput.js.map +1 -0
  227. package/dist/ui/components/shell/ShellOutput.d.ts.map +1 -0
  228. package/dist/ui/components/shell/ShellOutput.js +8 -0
  229. package/dist/ui/components/shell/ShellOutput.js.map +1 -0
  230. package/dist/ui/hooks/useChatWebSocket.d.ts.map +1 -0
  231. package/dist/ui/hooks/useChatWebSocket.js +76 -0
  232. package/dist/ui/hooks/useChatWebSocket.js.map +1 -0
  233. package/dist/ui/hooks/useCommandHistory.d.ts.map +1 -0
  234. package/dist/ui/hooks/useCommandHistory.js +70 -0
  235. package/dist/ui/hooks/useCommandHistory.js.map +1 -0
  236. package/dist/ui/hooks/useDebounce.d.ts.map +1 -0
  237. package/dist/ui/hooks/useDebounce.js +17 -0
  238. package/dist/ui/hooks/useDebounce.js.map +1 -0
  239. package/dist/ui/hooks/useLogStream.d.ts.map +1 -0
  240. package/dist/ui/hooks/useLogStream.js +20 -0
  241. package/dist/ui/hooks/useLogStream.js.map +1 -0
  242. package/dist/ui/hooks/useVirtualScroll.d.ts.map +1 -0
  243. package/dist/ui/hooks/useVirtualScroll.js +70 -0
  244. package/dist/ui/hooks/useVirtualScroll.js.map +1 -0
  245. package/dist/utils/admin.d.ts.map +1 -0
  246. package/dist/utils/admin.js +144 -0
  247. package/dist/utils/admin.js.map +1 -0
  248. package/dist/utils/autoSetup.d.ts.map +1 -0
  249. package/dist/utils/autoSetup.js +252 -0
  250. package/dist/utils/autoSetup.js.map +1 -0
  251. package/dist/utils/build-constants.d.ts.map +1 -0
  252. package/dist/utils/build-constants.js +10 -0
  253. package/dist/utils/build-constants.js.map +1 -0
  254. package/dist/utils/constants.d.ts.map +1 -1
  255. package/dist/utils/errors.d.ts.map +1 -1
  256. package/dist/utils/errors.js +10 -1
  257. package/dist/utils/errors.js.map +1 -1
  258. package/dist/utils/formatting.d.ts.map +1 -1
  259. package/dist/utils/formatting.js +46 -9
  260. package/dist/utils/formatting.js.map +1 -1
  261. package/dist/utils/llm-cli-config.d.ts.map +1 -0
  262. package/dist/utils/llm-cli-config.js +963 -0
  263. package/dist/utils/llm-cli-config.js.map +1 -0
  264. package/dist/utils/llm-cli-detector.d.ts.map +1 -0
  265. package/dist/utils/llm-cli-detector.js +202 -0
  266. package/dist/utils/llm-cli-detector.js.map +1 -0
  267. package/dist/utils/loading.d.ts.map +1 -1
  268. package/dist/utils/loading.js +25 -3
  269. package/dist/utils/loading.js.map +1 -1
  270. package/dist/utils/maintenance.d.ts.map +1 -0
  271. package/dist/utils/maintenance.js +17 -0
  272. package/dist/utils/maintenance.js.map +1 -0
  273. package/dist/utils/mcp-config.d.ts.map +1 -0
  274. package/dist/utils/mcp-config.js +77 -0
  275. package/dist/utils/mcp-config.js.map +1 -0
  276. package/dist/utils/privateKeyPrompt.d.ts.map +1 -1
  277. package/dist/utils/privateKeyPrompt.js +308 -129
  278. package/dist/utils/privateKeyPrompt.js.map +1 -1
  279. package/dist/utils/process-cleanup.d.ts.map +1 -0
  280. package/dist/utils/process-cleanup.js +136 -0
  281. package/dist/utils/process-cleanup.js.map +1 -0
  282. package/dist/utils/retry.d.ts.map +1 -0
  283. package/dist/utils/retry.js +56 -0
  284. package/dist/utils/retry.js.map +1 -0
  285. package/dist/utils/rpc-helpers.d.ts.map +1 -0
  286. package/dist/utils/rpc-helpers.js +70 -0
  287. package/dist/utils/rpc-helpers.js.map +1 -0
  288. package/dist/utils/rpc-transport.d.ts.map +1 -0
  289. package/dist/utils/rpc-transport.js +87 -0
  290. package/dist/utils/rpc-transport.js.map +1 -0
  291. package/dist/utils/shell-setup.d.ts.map +1 -0
  292. package/dist/utils/shell-setup.js +531 -0
  293. package/dist/utils/shell-setup.js.map +1 -0
  294. package/dist/utils/status.d.ts.map +1 -1
  295. package/dist/utils/status.js +34 -5
  296. package/dist/utils/status.js.map +1 -1
  297. package/dist/utils/token-resolver.d.ts.map +1 -1
  298. package/dist/utils/token-resolver.js +51 -8
  299. package/dist/utils/token-resolver.js.map +1 -1
  300. package/dist/utils/x402-caller.d.ts.map +1 -0
  301. package/dist/utils/x402-caller.js +17 -0
  302. package/dist/utils/x402-caller.js.map +1 -0
  303. package/docs/README.md +28 -0
  304. package/docs/agent/README.md +18 -0
  305. package/docs/api/README.md +41 -0
  306. package/docs/cli/README.md +42 -0
  307. package/docs/guides/README.md +26 -0
  308. package/docs/implementation/README.md +18 -0
  309. package/docs/planning/README.md +19 -0
  310. package/docs/testing/README.md +15 -0
  311. package/docs/ux/README.md +16 -0
  312. package/issues.txt +2 -0
  313. package/package.json +24 -9
  314. package/scripts/cat-spin.sh +417 -0
  315. package/scripts/deprecate-rc-versions.js +58 -0
  316. package/scripts/inject-build-constants.js +43 -0
  317. package/scripts/monitor-foobar.js +117 -0
  318. package/swap.logs +61 -0
  319. package/swapping.txt +108 -0
  320. package/test.txt +12 -0
  321. package/tests/fixtures/test-data.json +16 -0
  322. package/Screenshot 2025-12-21 at 8.56.02/342/200/257PM.png +0 -0
@@ -0,0 +1,505 @@
1
+ import chalk from "chalk";
2
+ import { printBox, formatAddress, } from "../utils/formatting.js";
3
+ import { printSuccess } from "../interactive/art.js";
4
+ import { resolveTokenId } from "../utils/token-resolver.js";
5
+ import { createPublicClient, createWalletClient, parseAbi, formatUnits, parseUnits, formatEther, isAddress, getAddress, encodeFunctionData, } from "viem";
6
+ import { privateKeyToAccount } from "viem/accounts";
7
+ import { config } from "../config.js";
8
+ import { createRpcTransport } from "../utils/rpc-transport.js";
9
+ import { getNetworkConfig } from "../utils/constants.js";
10
+ import inquirer from "inquirer";
11
+ // ERC20 ABI for token operations
12
+ const ERC20_ABI = parseAbi([
13
+ "function approve(address spender, uint256 amount) returns (bool)",
14
+ "function allowance(address owner, address spender) view returns (uint256)",
15
+ "function balanceOf(address owner) view returns (uint256)",
16
+ "function decimals() view returns (uint8)",
17
+ "function symbol() view returns (string)",
18
+ "function name() view returns (string)",
19
+ ]);
20
+ // Permit2 address (Uniswap Universal Router)
21
+ const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
22
+ // Permit2 ABI
23
+ const PERMIT2_ABI = parseAbi([
24
+ "function allowance(address owner, address token, address spender) view returns (uint160 amount, uint48 expiration, uint48 nonce)",
25
+ "function approve(address token, address spender, uint160 amount, uint48 expiration)",
26
+ ]);
27
+ /**
28
+ * Validate and checksum an Ethereum address
29
+ */
30
+ function validateAddress(address) {
31
+ if (!isAddress(address)) {
32
+ throw new Error(`Invalid address format: ${address}`);
33
+ }
34
+ return getAddress(address);
35
+ }
36
+ /**
37
+ * Resolve recipient (account index or address) - helper
38
+ */
39
+ function resolveRecipient(to) {
40
+ // Check if it's a number (account index)
41
+ const accountIndex = parseInt(to, 10);
42
+ if (!isNaN(accountIndex) && to.trim() === accountIndex.toString()) {
43
+ // It's a number - try to resolve to account address
44
+ const accounts = config.getAllAccounts();
45
+ const account = accounts.find((acc) => acc.index === accountIndex);
46
+ if (!account) {
47
+ throw new Error(`Account at index ${accountIndex} not found. Use "httpcat account list" to see available accounts.`);
48
+ }
49
+ return account.address;
50
+ }
51
+ // Not a number - treat as address
52
+ return to;
53
+ }
54
+ /**
55
+ * Get gas configuration
56
+ */
57
+ async function getGasConfig(publicClient, options) {
58
+ const gasConfig = {};
59
+ if (options.gasPrice) {
60
+ gasConfig.gasPrice = BigInt(parseFloat(options.gasPrice) * 1e9);
61
+ }
62
+ if (options.maxFeePerGas) {
63
+ gasConfig.maxFeePerGas = BigInt(parseFloat(options.maxFeePerGas) * 1e9);
64
+ }
65
+ if (options.maxPriorityFeePerGas) {
66
+ gasConfig.maxPriorityFeePerGas = BigInt(parseFloat(options.maxPriorityFeePerGas) * 1e9);
67
+ }
68
+ if (options.gasLimit) {
69
+ gasConfig.gas = options.gasLimit;
70
+ }
71
+ // If no gas config provided, try to get from network
72
+ if (!gasConfig.gasPrice && !gasConfig.maxFeePerGas) {
73
+ try {
74
+ const feeData = await publicClient.estimateFeesPerGas();
75
+ if (feeData) {
76
+ gasConfig.maxFeePerGas = feeData.maxFeePerGas;
77
+ gasConfig.maxPriorityFeePerGas =
78
+ feeData.maxPriorityFeePerGas || feeData.maxFeePerGas / 2n;
79
+ }
80
+ }
81
+ catch {
82
+ // Fallback to default if estimation fails
83
+ }
84
+ }
85
+ return gasConfig;
86
+ }
87
+ /**
88
+ * Prompt for confirmation
89
+ */
90
+ async function promptConfirmation(summary, options) {
91
+ if (options.noConfirm) {
92
+ return true;
93
+ }
94
+ if (options.confirm || !options.silent) {
95
+ const message = options.permit2
96
+ ? `Approve ${summary.tokenSymbol || summary.token} to Permit2 (${summary.spender})?\n Amount: ${summary.amountFormatted}`
97
+ : `Approve ${summary.amountFormatted} ${summary.tokenSymbol || summary.token} to ${summary.spender}?`;
98
+ const answers = await inquirer.prompt([
99
+ {
100
+ type: "confirm",
101
+ name: "confirm",
102
+ message,
103
+ default: false,
104
+ },
105
+ ]);
106
+ return answers.confirm;
107
+ }
108
+ // Default: show summary but don't require confirmation in non-interactive mode
109
+ return true;
110
+ }
111
+ /**
112
+ * Approve ERC20 token
113
+ */
114
+ export async function approveToken(client, tokenIdentifier, spender, amount, privateKey, options = {}) {
115
+ const account = privateKeyToAccount(privateKey);
116
+ const from = account.address;
117
+ const network = client.getNetwork();
118
+ const { chain } = await getNetworkConfig(network);
119
+ const publicClient = createPublicClient({
120
+ chain,
121
+ transport: createRpcTransport({
122
+ chainId: chain.id,
123
+ httpcatClient: client,
124
+ }),
125
+ });
126
+ const walletClient = createWalletClient({
127
+ account,
128
+ chain,
129
+ transport: createRpcTransport({
130
+ chainId: chain.id,
131
+ httpcatClient: client,
132
+ }),
133
+ });
134
+ // Resolve spender (account index or address)
135
+ const spenderAddress = validateAddress(resolveRecipient(spender));
136
+ // Resolve token identifier to address
137
+ let tokenAddress;
138
+ try {
139
+ const resolved = await resolveTokenId(tokenIdentifier, client, options.silent);
140
+ tokenAddress = validateAddress(resolved);
141
+ }
142
+ catch (error) {
143
+ // If resolution fails, try treating it as an address directly
144
+ if (isAddress(tokenIdentifier)) {
145
+ tokenAddress = getAddress(tokenIdentifier);
146
+ }
147
+ else {
148
+ throw new Error(`Failed to resolve token "${tokenIdentifier}": ${error instanceof Error ? error.message : "Unknown error"}`);
149
+ }
150
+ }
151
+ // Get token metadata
152
+ let tokenDecimals = options.decimals;
153
+ let tokenSymbol = "TOKEN";
154
+ let tokenName = "Token";
155
+ try {
156
+ if (!tokenDecimals) {
157
+ tokenDecimals = (await publicClient.readContract({
158
+ address: tokenAddress,
159
+ abi: ERC20_ABI,
160
+ functionName: "decimals",
161
+ }));
162
+ }
163
+ tokenSymbol = (await publicClient.readContract({
164
+ address: tokenAddress,
165
+ abi: ERC20_ABI,
166
+ functionName: "symbol",
167
+ }));
168
+ tokenName = (await publicClient.readContract({
169
+ address: tokenAddress,
170
+ abi: ERC20_ABI,
171
+ functionName: "name",
172
+ }));
173
+ }
174
+ catch (error) {
175
+ if (!tokenDecimals) {
176
+ throw new Error(`Failed to get token decimals. Use --decimals flag or ensure token contract is valid. ${error instanceof Error ? error.message : ""}`);
177
+ }
178
+ }
179
+ // Check current allowance
180
+ const currentAllowance = (await publicClient.readContract({
181
+ address: tokenAddress,
182
+ abi: ERC20_ABI,
183
+ functionName: "allowance",
184
+ args: [from, spenderAddress],
185
+ }));
186
+ const currentAllowanceFormatted = formatUnits(currentAllowance, tokenDecimals || 18);
187
+ // Determine approval amount
188
+ let approvalAmount;
189
+ let amountFormatted;
190
+ if (amount === "unlimited" || amount === "max") {
191
+ approvalAmount =
192
+ BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
193
+ amountFormatted = "Unlimited";
194
+ }
195
+ else if (amount === "revoke" || amount === "0") {
196
+ approvalAmount = 0n;
197
+ amountFormatted = "0";
198
+ }
199
+ else {
200
+ approvalAmount = parseUnits(amount, tokenDecimals || 18);
201
+ amountFormatted = amount;
202
+ }
203
+ // Show summary
204
+ if (!options.silent) {
205
+ console.log(chalk.cyan(`\n🔐 Token Approval`));
206
+ console.log(chalk.dim(`Token: ${tokenName} (${tokenSymbol})`));
207
+ console.log(chalk.dim(`Token Address: ${formatAddress(tokenAddress)}`));
208
+ console.log(chalk.dim(`Spender: ${formatAddress(spenderAddress)}`));
209
+ console.log(chalk.dim(`Current Allowance: ${currentAllowanceFormatted} ${tokenSymbol}`));
210
+ console.log(chalk.dim(`New Allowance: ${amountFormatted} ${tokenSymbol}`));
211
+ }
212
+ // Prompt for confirmation
213
+ const confirmed = await promptConfirmation({
214
+ token: tokenAddress,
215
+ tokenSymbol,
216
+ spender: spenderAddress,
217
+ amount: approvalAmount.toString(),
218
+ amountFormatted,
219
+ currentAllowance: currentAllowance.toString(),
220
+ currentAllowanceFormatted,
221
+ type: options.permit2 ? "permit2" : "erc20",
222
+ }, options);
223
+ if (!confirmed) {
224
+ throw new Error("Approval cancelled by user");
225
+ }
226
+ // Dry run mode
227
+ if (options.dryRun) {
228
+ if (!options.silent) {
229
+ console.log(chalk.yellow("\n🔍 Dry Run Mode - Transaction not broadcast\n"));
230
+ }
231
+ return {
232
+ success: true,
233
+ type: options.permit2 ? "permit2" : "erc20",
234
+ tokenAddress,
235
+ tokenSymbol,
236
+ spender: spenderAddress,
237
+ amount: approvalAmount.toString(),
238
+ amountFormatted,
239
+ currentAllowance: currentAllowance.toString(),
240
+ currentAllowanceFormatted,
241
+ };
242
+ }
243
+ // Get gas configuration
244
+ const gasConfig = await getGasConfig(publicClient, options);
245
+ // Estimate gas
246
+ let estimatedGas;
247
+ try {
248
+ if (options.permit2) {
249
+ // Permit2 approval - estimate via Permit2 contract
250
+ const expiration = Math.floor(Date.now() / 1000) + 365 * 24 * 60 * 60; // 1 year expiration (uint48)
251
+ estimatedGas = await publicClient.estimateGas({
252
+ account: from,
253
+ to: PERMIT2_ADDRESS,
254
+ data: encodeFunctionData({
255
+ abi: PERMIT2_ABI,
256
+ functionName: "approve",
257
+ args: [
258
+ tokenAddress,
259
+ spenderAddress,
260
+ approvalAmount ===
261
+ BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
262
+ ? (BigInt(2 ** 160) - 1n) // MAX_UINT160 for Permit2
263
+ : approvalAmount,
264
+ expiration,
265
+ ],
266
+ }),
267
+ });
268
+ }
269
+ else {
270
+ // Direct ERC20 approval
271
+ estimatedGas = await publicClient.estimateGas({
272
+ account: from,
273
+ to: tokenAddress,
274
+ data: encodeFunctionData({
275
+ abi: ERC20_ABI,
276
+ functionName: "approve",
277
+ args: [spenderAddress, approvalAmount],
278
+ }),
279
+ });
280
+ }
281
+ }
282
+ catch (error) {
283
+ throw new Error(`Failed to estimate gas: ${error instanceof Error ? error.message : "Unknown error"}`);
284
+ }
285
+ // Check ETH balance for gas
286
+ const ethBalance = await publicClient.getBalance({ address: from });
287
+ const estimatedGasCost = (gasConfig.gas || estimatedGas) *
288
+ (gasConfig.gasPrice || gasConfig.maxFeePerGas || 0n);
289
+ if (ethBalance < estimatedGasCost) {
290
+ throw new Error(`Insufficient ETH for gas. Need ${formatEther(estimatedGasCost)} ETH`);
291
+ }
292
+ // Build transaction
293
+ let txHash;
294
+ if (options.permit2) {
295
+ // Permit2 approval
296
+ if (!options.silent) {
297
+ console.log(chalk.cyan(`\n📤 Approving via Permit2 to ${spenderAddress}...`));
298
+ }
299
+ const maxUint160 = BigInt(2 ** 160) - 1n;
300
+ const expiration = Math.floor(Date.now() / 1000) + 365 * 24 * 60 * 60; // 1 year expiration (uint48)
301
+ const permit2TxRequest = {
302
+ address: PERMIT2_ADDRESS,
303
+ abi: PERMIT2_ABI,
304
+ functionName: "approve",
305
+ args: [
306
+ tokenAddress,
307
+ spenderAddress,
308
+ approvalAmount ===
309
+ BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
310
+ ? maxUint160
311
+ : approvalAmount,
312
+ expiration,
313
+ ],
314
+ gas: gasConfig.gas || estimatedGas,
315
+ };
316
+ // Only include gas config fields if they're defined
317
+ if (gasConfig.maxFeePerGas)
318
+ permit2TxRequest.maxFeePerGas = gasConfig.maxFeePerGas;
319
+ if (gasConfig.maxPriorityFeePerGas)
320
+ permit2TxRequest.maxPriorityFeePerGas = gasConfig.maxPriorityFeePerGas;
321
+ if (gasConfig.gasPrice)
322
+ permit2TxRequest.gasPrice = gasConfig.gasPrice;
323
+ txHash = await walletClient.writeContract(permit2TxRequest);
324
+ }
325
+ else {
326
+ // Direct ERC20 approval
327
+ if (!options.silent) {
328
+ console.log(chalk.cyan(`\n📤 Approving ${amountFormatted} ${tokenSymbol}...`));
329
+ }
330
+ const erc20TxRequest = {
331
+ address: tokenAddress,
332
+ abi: ERC20_ABI,
333
+ functionName: "approve",
334
+ args: [spenderAddress, approvalAmount],
335
+ gas: gasConfig.gas || estimatedGas,
336
+ };
337
+ // Only include gas config fields if they're defined
338
+ if (gasConfig.maxFeePerGas)
339
+ erc20TxRequest.maxFeePerGas = gasConfig.maxFeePerGas;
340
+ if (gasConfig.maxPriorityFeePerGas)
341
+ erc20TxRequest.maxPriorityFeePerGas = gasConfig.maxPriorityFeePerGas;
342
+ if (gasConfig.gasPrice)
343
+ erc20TxRequest.gasPrice = gasConfig.gasPrice;
344
+ txHash = await walletClient.writeContract(erc20TxRequest);
345
+ }
346
+ let result = {
347
+ success: true,
348
+ type: options.permit2 ? "permit2" : "erc20",
349
+ txHash,
350
+ tokenAddress,
351
+ tokenSymbol,
352
+ spender: spenderAddress,
353
+ amount: approvalAmount.toString(),
354
+ amountFormatted,
355
+ currentAllowance: currentAllowance.toString(),
356
+ currentAllowanceFormatted,
357
+ };
358
+ // Wait for confirmation if requested
359
+ if (options.wait) {
360
+ if (!options.silent) {
361
+ console.log(chalk.cyan(`⏳ Waiting for confirmation...`));
362
+ }
363
+ const receipt = await publicClient.waitForTransactionReceipt({
364
+ hash: txHash,
365
+ timeout: (options.timeout || 300) * 1000,
366
+ });
367
+ result.gasUsed = receipt.gasUsed;
368
+ result.blockNumber = receipt.blockNumber;
369
+ if (!options.silent) {
370
+ console.log(chalk.green(`✅ Approval confirmed in block ${receipt.blockNumber.toString()}`));
371
+ }
372
+ }
373
+ return result;
374
+ }
375
+ /**
376
+ * Check current allowance
377
+ */
378
+ export async function checkAllowance(client, tokenIdentifier, spender, privateKey, options = {}) {
379
+ const account = privateKeyToAccount(privateKey);
380
+ const from = account.address;
381
+ const network = client.getNetwork();
382
+ const { chain } = await getNetworkConfig(network);
383
+ const publicClient = createPublicClient({
384
+ chain,
385
+ transport: createRpcTransport({
386
+ chainId: chain.id,
387
+ httpcatClient: client,
388
+ }),
389
+ });
390
+ // Resolve spender (account index or address)
391
+ const spenderAddress = validateAddress(resolveRecipient(spender));
392
+ // Resolve token identifier to address
393
+ let tokenAddress;
394
+ try {
395
+ const resolved = await resolveTokenId(tokenIdentifier, client, options.silent);
396
+ tokenAddress = validateAddress(resolved);
397
+ }
398
+ catch (error) {
399
+ // If resolution fails, try treating it as an address directly
400
+ if (isAddress(tokenIdentifier)) {
401
+ tokenAddress = getAddress(tokenIdentifier);
402
+ }
403
+ else {
404
+ throw new Error(`Failed to resolve token "${tokenIdentifier}": ${error instanceof Error ? error.message : "Unknown error"}`);
405
+ }
406
+ }
407
+ // Get token metadata
408
+ let tokenDecimals = options.decimals;
409
+ let tokenSymbol = "TOKEN";
410
+ try {
411
+ if (!tokenDecimals) {
412
+ tokenDecimals = (await publicClient.readContract({
413
+ address: tokenAddress,
414
+ abi: ERC20_ABI,
415
+ functionName: "decimals",
416
+ }));
417
+ }
418
+ tokenSymbol = (await publicClient.readContract({
419
+ address: tokenAddress,
420
+ abi: ERC20_ABI,
421
+ functionName: "symbol",
422
+ }));
423
+ }
424
+ catch (error) {
425
+ if (!tokenDecimals) {
426
+ throw new Error(`Failed to get token decimals. Use --decimals flag or ensure token contract is valid. ${error instanceof Error ? error.message : ""}`);
427
+ }
428
+ }
429
+ // Check allowance
430
+ let allowance;
431
+ if (options.permit2) {
432
+ // Check Permit2 allowance
433
+ const permit2Allowance = await publicClient.readContract({
434
+ address: PERMIT2_ADDRESS,
435
+ abi: PERMIT2_ABI,
436
+ functionName: "allowance",
437
+ args: [from, tokenAddress, spenderAddress],
438
+ });
439
+ // Permit2 returns [amount: bigint, expiration: bigint, nonce: bigint]
440
+ allowance = permit2Allowance[0]; // amount
441
+ }
442
+ else {
443
+ // Check direct ERC20 allowance
444
+ allowance = (await publicClient.readContract({
445
+ address: tokenAddress,
446
+ abi: ERC20_ABI,
447
+ functionName: "allowance",
448
+ args: [from, spenderAddress],
449
+ }));
450
+ }
451
+ const allowanceFormatted = formatUnits(allowance, tokenDecimals || 18);
452
+ return {
453
+ tokenAddress,
454
+ tokenSymbol,
455
+ spender: spenderAddress,
456
+ allowance: allowance.toString(),
457
+ allowanceFormatted,
458
+ type: options.permit2 ? "permit2" : "erc20",
459
+ };
460
+ }
461
+ /**
462
+ * Display approve result for interactive mode
463
+ */
464
+ export function displayApproveResult(result) {
465
+ console.log();
466
+ printSuccess(result.success ? "Approval successful!" : "Approval failed");
467
+ const boxData = {
468
+ Type: chalk.cyan(result.type.toUpperCase()),
469
+ Token: formatAddress(result.tokenAddress) + (result.tokenSymbol ? ` (${result.tokenSymbol})` : ""),
470
+ Spender: formatAddress(result.spender),
471
+ "New Allowance": chalk.green(result.amountFormatted + (result.tokenSymbol ? ` ${result.tokenSymbol}` : "")),
472
+ };
473
+ if (result.currentAllowanceFormatted) {
474
+ boxData["Previous Allowance"] = chalk.dim(result.currentAllowanceFormatted + (result.tokenSymbol ? ` ${result.tokenSymbol}` : ""));
475
+ }
476
+ if (result.txHash) {
477
+ boxData["Transaction"] = chalk.blue(result.txHash);
478
+ }
479
+ if (result.gasUsed) {
480
+ boxData["Gas Used"] = result.gasUsed.toString();
481
+ }
482
+ if (result.blockNumber) {
483
+ boxData["Block"] = result.blockNumber.toString();
484
+ }
485
+ if (result.error) {
486
+ boxData["Error"] = chalk.red(result.error);
487
+ }
488
+ printBox("Approval Result", boxData);
489
+ console.log();
490
+ }
491
+ /**
492
+ * Display allowance check result
493
+ */
494
+ export function displayAllowanceResult(result) {
495
+ console.log();
496
+ const boxData = {
497
+ Type: chalk.cyan(result.type.toUpperCase()),
498
+ Token: formatAddress(result.tokenAddress) + (result.tokenSymbol ? ` (${result.tokenSymbol})` : ""),
499
+ Spender: formatAddress(result.spender),
500
+ Allowance: chalk.green(result.allowanceFormatted + (result.tokenSymbol ? ` ${result.tokenSymbol}` : "")),
501
+ };
502
+ printBox("Current Allowance", boxData);
503
+ console.log();
504
+ }
505
+ //# sourceMappingURL=approve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation.d.ts","sourceRoot":"","sources":["../../src/commands/automation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CpC,wBAAgB,uBAAuB,IAAI,OAAO,CA2SjD"}