starkfi 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/MCP.md +70 -0
  2. package/README.md +120 -58
  3. package/dist/commands/auth/login.js +2 -2
  4. package/dist/commands/auth/login.js.map +1 -1
  5. package/dist/commands/auth/verify.d.ts.map +1 -1
  6. package/dist/commands/auth/verify.js +2 -2
  7. package/dist/commands/auth/verify.js.map +1 -1
  8. package/dist/commands/batch/batch.d.ts +3 -0
  9. package/dist/commands/batch/batch.d.ts.map +1 -0
  10. package/dist/commands/batch/batch.js +143 -0
  11. package/dist/commands/batch/batch.js.map +1 -0
  12. package/dist/commands/chain/tx-status.js +2 -2
  13. package/dist/commands/chain/tx-status.js.map +1 -1
  14. package/dist/commands/config/config.d.ts.map +1 -1
  15. package/dist/commands/config/config.js +14 -31
  16. package/dist/commands/config/config.js.map +1 -1
  17. package/dist/commands/lending/lending.d.ts +1 -0
  18. package/dist/commands/lending/lending.d.ts.map +1 -1
  19. package/dist/commands/lending/lending.js +187 -48
  20. package/dist/commands/lending/lending.js.map +1 -1
  21. package/dist/commands/portfolio/portfolio.d.ts +3 -0
  22. package/dist/commands/portfolio/portfolio.d.ts.map +1 -0
  23. package/dist/commands/portfolio/portfolio.js +76 -0
  24. package/dist/commands/portfolio/portfolio.js.map +1 -0
  25. package/dist/commands/staking/staking.d.ts +1 -1
  26. package/dist/commands/staking/staking.d.ts.map +1 -1
  27. package/dist/commands/staking/staking.js +142 -61
  28. package/dist/commands/staking/staking.js.map +1 -1
  29. package/dist/commands/trade/multi-swap.d.ts +3 -0
  30. package/dist/commands/trade/multi-swap.d.ts.map +1 -0
  31. package/dist/commands/trade/multi-swap.js +140 -0
  32. package/dist/commands/trade/multi-swap.js.map +1 -0
  33. package/dist/commands/trade/status.js +2 -2
  34. package/dist/commands/trade/status.js.map +1 -1
  35. package/dist/commands/trade/swap.d.ts.map +1 -1
  36. package/dist/commands/trade/swap.js +45 -10
  37. package/dist/commands/trade/swap.js.map +1 -1
  38. package/dist/commands/wallet/balance.d.ts.map +1 -1
  39. package/dist/commands/wallet/balance.js +19 -2
  40. package/dist/commands/wallet/balance.js.map +1 -1
  41. package/dist/commands/wallet/deploy.d.ts.map +1 -1
  42. package/dist/commands/wallet/deploy.js +2 -1
  43. package/dist/commands/wallet/deploy.js.map +1 -1
  44. package/dist/commands/wallet/send.d.ts.map +1 -1
  45. package/dist/commands/wallet/send.js +45 -8
  46. package/dist/commands/wallet/send.js.map +1 -1
  47. package/dist/index.js +22 -7
  48. package/dist/index.js.map +1 -1
  49. package/dist/lib/banner.d.ts +6 -0
  50. package/dist/lib/banner.d.ts.map +1 -0
  51. package/dist/lib/banner.js +78 -0
  52. package/dist/lib/banner.js.map +1 -0
  53. package/dist/lib/config.d.ts +0 -11
  54. package/dist/lib/config.d.ts.map +1 -1
  55. package/dist/lib/config.js +0 -20
  56. package/dist/lib/config.js.map +1 -1
  57. package/dist/lib/errors.d.ts +2 -0
  58. package/dist/lib/errors.d.ts.map +1 -1
  59. package/dist/lib/errors.js +2 -0
  60. package/dist/lib/errors.js.map +1 -1
  61. package/dist/lib/format.d.ts +43 -2
  62. package/dist/lib/format.d.ts.map +1 -1
  63. package/dist/lib/format.js +51 -5
  64. package/dist/lib/format.js.map +1 -1
  65. package/dist/lib/retry.d.ts +15 -0
  66. package/dist/lib/retry.d.ts.map +1 -0
  67. package/dist/lib/retry.js +29 -0
  68. package/dist/lib/retry.js.map +1 -0
  69. package/dist/lib/validation.d.ts +0 -12
  70. package/dist/lib/validation.d.ts.map +1 -1
  71. package/dist/lib/validation.js +1 -23
  72. package/dist/lib/validation.js.map +1 -1
  73. package/dist/mcp/handlers/batch.d.ts +13 -0
  74. package/dist/mcp/handlers/batch.d.ts.map +1 -0
  75. package/dist/mcp/handlers/batch.js +33 -0
  76. package/dist/mcp/handlers/batch.js.map +1 -0
  77. package/dist/mcp/handlers/config.d.ts +1 -1
  78. package/dist/mcp/handlers/config.d.ts.map +1 -1
  79. package/dist/mcp/handlers/config.js +11 -12
  80. package/dist/mcp/handlers/config.js.map +1 -1
  81. package/dist/mcp/handlers/index.d.ts +3 -0
  82. package/dist/mcp/handlers/index.d.ts.map +1 -1
  83. package/dist/mcp/handlers/index.js +3 -0
  84. package/dist/mcp/handlers/index.js.map +1 -1
  85. package/dist/mcp/handlers/lending.d.ts +12 -1
  86. package/dist/mcp/handlers/lending.d.ts.map +1 -1
  87. package/dist/mcp/handlers/lending.js +67 -23
  88. package/dist/mcp/handlers/lending.js.map +1 -1
  89. package/dist/mcp/handlers/multi-swap.d.ts +27 -0
  90. package/dist/mcp/handlers/multi-swap.d.ts.map +1 -0
  91. package/dist/mcp/handlers/multi-swap.js +73 -0
  92. package/dist/mcp/handlers/multi-swap.js.map +1 -0
  93. package/dist/mcp/handlers/portfolio.d.ts +7 -0
  94. package/dist/mcp/handlers/portfolio.d.ts.map +1 -0
  95. package/dist/mcp/handlers/portfolio.js +11 -0
  96. package/dist/mcp/handlers/portfolio.js.map +1 -0
  97. package/dist/mcp/handlers/staking.d.ts +13 -1
  98. package/dist/mcp/handlers/staking.d.ts.map +1 -1
  99. package/dist/mcp/handlers/staking.js +18 -5
  100. package/dist/mcp/handlers/staking.js.map +1 -1
  101. package/dist/mcp/handlers/trade.d.ts +1 -0
  102. package/dist/mcp/handlers/trade.d.ts.map +1 -1
  103. package/dist/mcp/handlers/trade.js +23 -9
  104. package/dist/mcp/handlers/trade.js.map +1 -1
  105. package/dist/mcp/handlers/wallet.d.ts +1 -0
  106. package/dist/mcp/handlers/wallet.d.ts.map +1 -1
  107. package/dist/mcp/handlers/wallet.js +16 -1
  108. package/dist/mcp/handlers/wallet.js.map +1 -1
  109. package/dist/mcp/tools.d.ts.map +1 -1
  110. package/dist/mcp/tools.js +102 -33
  111. package/dist/mcp/tools.js.map +1 -1
  112. package/dist/services/api/client.d.ts +0 -12
  113. package/dist/services/api/client.d.ts.map +1 -1
  114. package/dist/services/api/client.js +3 -8
  115. package/dist/services/api/client.js.map +1 -1
  116. package/dist/services/auth/session.d.ts +1 -7
  117. package/dist/services/auth/session.d.ts.map +1 -1
  118. package/dist/services/auth/session.js +20 -0
  119. package/dist/services/auth/session.js.map +1 -1
  120. package/dist/services/batch/batch.d.ts +36 -0
  121. package/dist/services/batch/batch.d.ts.map +1 -0
  122. package/dist/services/batch/batch.js +111 -0
  123. package/dist/services/batch/batch.js.map +1 -0
  124. package/dist/services/config/config.d.ts +4 -0
  125. package/dist/services/config/config.d.ts.map +1 -1
  126. package/dist/services/config/config.js +31 -1
  127. package/dist/services/config/config.js.map +1 -1
  128. package/dist/services/fibrous/config.d.ts +4 -0
  129. package/dist/services/fibrous/config.d.ts.map +1 -0
  130. package/dist/services/fibrous/config.js +4 -0
  131. package/dist/services/fibrous/config.js.map +1 -0
  132. package/dist/services/fibrous/health.js +1 -1
  133. package/dist/services/fibrous/health.js.map +1 -1
  134. package/dist/services/fibrous/route.d.ts +19 -6
  135. package/dist/services/fibrous/route.d.ts.map +1 -1
  136. package/dist/services/fibrous/route.js +64 -3
  137. package/dist/services/fibrous/route.js.map +1 -1
  138. package/dist/services/portfolio/portfolio.d.ts +35 -0
  139. package/dist/services/portfolio/portfolio.d.ts.map +1 -0
  140. package/dist/services/portfolio/portfolio.js +106 -0
  141. package/dist/services/portfolio/portfolio.js.map +1 -0
  142. package/dist/services/simulate/simulate.d.ts +18 -0
  143. package/dist/services/simulate/simulate.d.ts.map +1 -0
  144. package/dist/services/simulate/simulate.js +61 -0
  145. package/dist/services/simulate/simulate.js.map +1 -0
  146. package/dist/services/staking/staking.d.ts +5 -13
  147. package/dist/services/staking/staking.d.ts.map +1 -1
  148. package/dist/services/staking/staking.js +44 -52
  149. package/dist/services/staking/staking.js.map +1 -1
  150. package/dist/services/starkzap/client.d.ts.map +1 -1
  151. package/dist/services/starkzap/client.js +38 -18
  152. package/dist/services/starkzap/client.js.map +1 -1
  153. package/dist/services/starkzap/config.d.ts +6 -0
  154. package/dist/services/starkzap/config.d.ts.map +1 -0
  155. package/dist/services/starkzap/config.js +13 -0
  156. package/dist/services/starkzap/config.js.map +1 -0
  157. package/dist/services/tokens/balances.d.ts.map +1 -1
  158. package/dist/services/tokens/balances.js +26 -14
  159. package/dist/services/tokens/balances.js.map +1 -1
  160. package/dist/services/tokens/tokens.d.ts +2 -3
  161. package/dist/services/tokens/tokens.d.ts.map +1 -1
  162. package/dist/services/tokens/tokens.js +3 -8
  163. package/dist/services/tokens/tokens.js.map +1 -1
  164. package/dist/services/vesu/api.d.ts +28 -0
  165. package/dist/services/vesu/api.d.ts.map +1 -0
  166. package/dist/services/vesu/api.js +97 -0
  167. package/dist/services/vesu/api.js.map +1 -0
  168. package/dist/services/vesu/config.d.ts +9 -0
  169. package/dist/services/vesu/config.d.ts.map +1 -0
  170. package/dist/services/vesu/config.js +32 -0
  171. package/dist/services/vesu/config.js.map +1 -0
  172. package/dist/services/vesu/index.d.ts +2 -0
  173. package/dist/services/vesu/index.d.ts.map +1 -1
  174. package/dist/services/vesu/index.js +2 -0
  175. package/dist/services/vesu/index.js.map +1 -1
  176. package/dist/services/vesu/lending.d.ts +8 -1
  177. package/dist/services/vesu/lending.d.ts.map +1 -1
  178. package/dist/services/vesu/lending.js +171 -52
  179. package/dist/services/vesu/lending.js.map +1 -1
  180. package/dist/services/vesu/pools.d.ts +5 -11
  181. package/dist/services/vesu/pools.d.ts.map +1 -1
  182. package/dist/services/vesu/pools.js +11 -31
  183. package/dist/services/vesu/pools.js.map +1 -1
  184. package/package.json +88 -82
  185. package/skills/README.md +63 -0
  186. package/skills/authenticate-wallet/SKILL.md +119 -0
  187. package/skills/balance/SKILL.md +80 -0
  188. package/skills/batch/SKILL.md +118 -0
  189. package/skills/config/SKILL.md +144 -0
  190. package/skills/lending/SKILL.md +209 -0
  191. package/skills/multi-swap/SKILL.md +95 -0
  192. package/skills/portfolio/SKILL.md +82 -0
  193. package/skills/send/SKILL.md +82 -0
  194. package/skills/staking/SKILL.md +188 -0
  195. package/skills/trade/SKILL.md +92 -0
package/MCP.md ADDED
@@ -0,0 +1,70 @@
1
+ # Model Context Protocol (MCP) Integration
2
+
3
+ StarkFi operates as a fully-featured Model Context Protocol (MCP) server. By executing `npx starkfi mcp-start` over the `stdio` transport layer, AI development environments such as Cursor, Claude Desktop, and Antigravity can interact with the Starknet blockchain and execute decentralized finance operations through natural language commands.
4
+
5
+ ## Client Configuration Instructions
6
+
7
+ To integrate StarkFi into your AI environment, configure your specific MCP client settings file (e.g., `.cursor/mcp.json`, `claude_desktop_config.json`, or `~/.gemini/antigravity/mcp_config.json`) with the following definition:
8
+
9
+ ```json
10
+ {
11
+ "mcpServers": {
12
+ "starkfi": {
13
+ "command": "npx",
14
+ "args": ["-y", "starkfi", "mcp-start"]
15
+ }
16
+ }
17
+ }
18
+ ```
19
+
20
+ **Authentication Requirement:** The StarkFi CLI must be authenticated locally (via `npx starkfi auth login`) before the MCP server can execute any state-mutating transactions on behalf of the user.
21
+
22
+ ## Comprehensive Tool Registry
23
+
24
+ Upon initialization, the StarkFi server dynamically provisions the following tool schemas to the connected AI client.
25
+
26
+ ### Read-Only Tools (State Verification and Information Gathering)
27
+
28
+ These tools do not mutate blockchain state or require user confirmation to execute.
29
+
30
+ | Tool Identifier | Functional Description |
31
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
32
+ | `get_auth_status` | Validates the active CLI session and verifies Fibrous API connectivity. |
33
+ | `get_balance` | Retrieves STRK, ETH, and specified ERC-20 token balances for the authenticated wallet. |
34
+ | `get_tx_status` | Queries the Starknet sequencer for transaction status and execution receipts. |
35
+ | `get_portfolio` | Returns a complete DeFi portfolio: all token balances with USD values, staking positions, and lending positions in one call. |
36
+ | `get_swap_quote` | Calculates optimal routing, expected output, and slippage prior to execution. |
37
+ | `get_multi_swap_quote` | Calculates optimal batch routing for 2-3 swap pairs at once. Uses Fibrous routeBatch API when all pairs share the same output token, otherwise falls back to parallel individual routes. |
38
+ | `list_validators` | Enumerates all officially recognized Starknet staking validators. |
39
+ | `list_pools` | Enumerates available delegation pools for a validator, including multi-token pools. |
40
+ | `get_staking_info` | Retrieves specific user staked balances, unclaimed rewards, and active cooldown periods. |
41
+ | `get_stake_status` | Generates a consolidated staking dashboard across validators. Accepts an optional target validator name to explicitly filter the view. |
42
+ | `list_lending_pools` | Enumerates active Vesu V2 lending pools with live data from the Vesu API — assets (with APY/APR), supported pairs, protocol version, and deprecation status. Accepts optional name filter for detailed view. |
43
+ | `get_lending_position` | Retrieves the user's supplied yield, outstanding debt, Health Factor, and Risk Level for a specific pool. The borrow token is optional if only checking supply balances. |
44
+
45
+ ### Transactional Tools (State Mutation)
46
+
47
+ These tools construct and broadcast transactions. The connecting AI client is strictly responsible for prompting the user for explicit confirmation before finalizing the execution. All transactional tools accept an optional `simulate` parameter — when set to `true`, the tool estimates fees and validates the transaction without broadcasting.
48
+
49
+ | Tool Identifier | Functional Description |
50
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
51
+ | `deploy_account` | Deploys the associated smart contract account to the Starknet network (idempotent operation). |
52
+ | `swap_tokens` | Broadcasts an aggregated token swap transaction via the Fibrous router. Supports `simulate` for dry-run. |
53
+ | `send_tokens` | Broadcasts a standard token transfer transaction for STRK, ETH, or ERC-20 assets. Pre-checks balance. Supports `simulate` for dry-run. |
54
+ | `multi_swap` | Executes 2-3 token swaps in a single transaction via Fibrous batch routing. Supports `simulate` for dry-run. Call `get_multi_swap_quote` first. |
55
+ | `batch_execute` | Executes multiple DeFi operations (swap, stake, supply, send) in a single Starknet multicall. Minimum 2 operations. Supports `simulate`. |
56
+ | `stake_tokens` | Executes multi-token smart delegation (STRK, WBTC, tBTC, SolvBTC, LBTC). Auto-detects enter vs. add. |
57
+ | `unstake_tokens` | Manages the strict two-step Starknet unstaking lifecycle. Supports multi-token pools. |
58
+ | `claim_rewards` | Extracts earned rewards from a staking pool to the user's wallet. |
59
+ | `compound_rewards` | Executes an atomic transaction to claim pending rewards and immediately restake them. |
60
+ | `supply_assets` | Deposits specified assets into a Vesu V2 pool to generate yield. Pool resolved by name (e.g. 'Prime') or contract address. |
61
+ | `withdraw_assets` | Redeems supplied assets from a Vesu V2 pool. Pool resolved by name or contract address. |
62
+ | `borrow_assets` | Executes an atomic collateral deposit and subsequent asset borrow against a Vesu V2 pool. Supports using supplied vTokens. |
63
+ | `repay_debt` | Processes the repayment of borrowed assets against an existing Vesu V2 position. |
64
+ | `close_position` | Atomically closes an active Vesu V2 lending position. Repays all outstanding debt and withdraws all collateral in a single unified execution. |
65
+
66
+ ### Configuration Utilities
67
+
68
+ | Tool Identifier | Functional Description |
69
+ | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
70
+ | `config_action` | Views and modifies global CLI behavior: RPC routing (set/get), network selection, and Gas Abstraction (default: gasless via Paymaster in STRK; configurable to ETH, USDC, USDT, DAI; or developer-sponsored Gasfree mode). |
package/README.md CHANGED
@@ -1,83 +1,145 @@
1
1
  # StarkFi
2
2
 
3
- A minimalist command-line interface and AI Agent toolkit for DeFi operations on **Starknet**.
4
- Powered by [StarkZap](https://github.com/keep-starknet-strange/starkzap) SDK, [Fibrous](https://fibrous.finance) aggregation, and [AVNU](https://docs.avnu.fi) Paymaster.
3
+ StarkFi is an advanced command-line interface and Model Context Protocol (MCP) toolkit designed for decentralized finance operations on Starknet. Engineered for both direct developer interaction and artificial intelligence agent workflows, it provides a highly optimized, abstracted layer over complex DeFi protocols.
5
4
 
6
- ## Overview
5
+ The toolkit integrates the StarkZap SDK, Privy authentication, Fibrous trade aggregation, Vesu V2 lending, and AVNU paymaster services into a unified, secure environment.
7
6
 
8
- StarkFi provides a unified interface for Starknet interactions, designed for both human CLI usage and AI agent workflows (via MCP).
7
+ ## System Architecture Overview
9
8
 
10
- - **Optimal Trading:** Aggregated token swaps via Fibrous.
11
- - **Gas Abstraction:** Default (STRK), Gasfree (developer-sponsored), or Gasless (user pays in USDC/ETH).
12
- - **Staking Management:** Full lifecycle support for delegation pools (stake, compound, unstake).
13
- - **Lending & Borrowing:** Supply, withdraw, borrow, and repay via Vesu V2 lending protocol.
14
- - **AI Integration:** Built-in Model Context Protocol (MCP) server.
9
+ StarkFi abstracts the complexities of the Starknet ecosystem through the following core capabilities:
15
10
 
16
- ## Quick Start
11
+ - **Intelligent Trade Routing:** Seamless token swaps aggregated via Fibrous for optimal execution paths.
12
+ - **Multi-Swap:** Execute up to 3 token swaps in a single transaction via Fibrous batch routing.
13
+ - **Transaction Batching:** Bundle different operations (swap + stake + supply + send) into a single Starknet multicall.
14
+ - **Simulation / Dry Run:** Estimate fees and validate any transaction without broadcasting — available on swap, send, multi-swap, and batch.
15
+ - **Portfolio Dashboard:** Consolidated view of all DeFi positions — token balances (with USD), staking, and lending.
16
+ - **Advanced Gas Abstraction:** All transactions are routed through the Paymaster by default. Gas is paid in STRK (configurable to ETH, USDC, USDT, DAI). Developer-sponsored (Gasfree) mode is also available.
17
+ - **Delegation and Staking Management:** Multi-token staking lifecycle controls (STRK, WBTC, tBTC, SolvBTC, LBTC), including entering pools, restaking, atomic compounding, and intent-based unstaking.
18
+ - **Protocol-Level Lending:** Direct integration with Vesu V2 for supplying collateral, borrowing assets, and managing debt positions.
19
+ - **Native AI Integration:** An embedded Model Context Protocol (MCP) server that exposes the entire toolkit to LLM-driven environments such as Cursor and Claude.
17
20
 
18
- ### 1. Authentication
21
+ ## System Requirements
22
+
23
+ - **Node.js:** v18.0.0+
24
+ - **Starknet Auth Server:** Required for Email OTP (Privy TEE) and AVNU Paymaster gas abstraction.
25
+
26
+ ## Quick Start Configuration
27
+
28
+ ### 1. Secure Authentication
29
+
30
+ StarkFi utilizes a remote Auth Server for email-based OTP.
31
+
32
+ ```bash
33
+ # Email OTP Authentication (Requires running starkfi-server)
34
+ npx starkfi auth login <user@example.com>
35
+ npx starkfi auth verify <user@example.com> <verification_code>
36
+ ```
37
+
38
+ ### 2. Primary Command Reference
39
+
40
+ #### Session and Wallet Management
41
+
42
+ ```bash
43
+ npx starkfi auth logout # Terminate active session
44
+ npx starkfi status # Check authentication status and API health
45
+ npx starkfi address # Display active Starknet address
46
+ npx starkfi deploy # Deploy smart account contract on-chain
47
+ npx starkfi balance [--token <symbol>] [--json] # Query token balances (STRK, ETH, ERC-20)
48
+ npx starkfi send <amount> <token> <recipient> [--simulate] [--json] # Execute token transfer
49
+ npx starkfi portfolio [--json] # Complete DeFi portfolio (balances, staking, lending)
50
+ ```
51
+
52
+ #### Trading and Aggregation (Fibrous)
53
+
54
+ ```bash
55
+ npx starkfi trade <amount> <from> <to> [--slippage <percent>] [--simulate] [--json]
56
+ npx starkfi multi-swap "<pairs>" [--slippage <percent>] [--simulate] [--json]
57
+ # Example: npx starkfi multi-swap "100 USDC>ETH, 50 USDT>STRK"
58
+ ```
59
+
60
+ #### Transaction Batching (Multicall)
61
+
62
+ ```bash
63
+ npx starkfi batch [--simulate] \
64
+ --swap "100 USDC ETH" \
65
+ --stake "50 STRK karnot" \
66
+ --supply "200 USDC 0xPool" \
67
+ --send "10 STRK 0xAddr"
68
+ # All options are repeatable. Minimum 2 operations required.
69
+ ```
70
+
71
+ #### Staking Operations
19
72
 
20
73
  ```bash
21
- # Via Email OTP (requires starkfi-server)
22
- npx starkfi auth login user@example.com
23
- npx starkfi auth verify user@example.com <code>
74
+ npx starkfi validators [--json] # Retrieve active validator set
75
+ npx starkfi pools <validator> [--json] # Query delegation pools per validator (multi-token)
76
+ npx starkfi stake-status [validator] [--json] # Display comprehensive or filtered staking dashboard
77
+ npx starkfi stake <amount> --validator <name> [--token <symbol>] [--simulate] # Smart stake (default: STRK)
78
+ npx starkfi rewards --validator <name> [--token <symbol>] <--claim|--compound>
79
+ npx starkfi unstake <intent|exit> --validator <name> [--token <symbol>] [--amount <amount>]
80
+ ```
24
81
 
25
- # Or via Private Key (local execution)
26
- npx starkfi auth import
82
+ #### Environment Configuration
83
+
84
+ ```bash
85
+ npx starkfi tx-status <hash> # Query transaction receipt and status
86
+ npx starkfi config list # Display current environment configuration
87
+ npx starkfi config set-rpc <url> # Override default RPC endpoint
88
+ npx starkfi config get-rpc # Show current RPC URL
89
+ npx starkfi config set-network <mainnet|sepolia> # Modify target network
90
+ npx starkfi config set-gasfree <on|off> # Toggle developer-sponsored gas (Paymaster credits)
91
+ npx starkfi config set-gas-token <token|reset> # Set gas payment token (default: STRK)
27
92
  ```
28
93
 
29
- ### 2. Core Commands
94
+ #### Lending and Borrowing (Vesu V2)
95
+
96
+ Pool data (assets, APY, pairs) is fetched dynamically from the Vesu API.
30
97
 
31
98
  ```bash
32
- # Authentication & Wallet
33
- npx starkfi auth login <email> # Email OTP login
34
- npx starkfi auth verify <email> <code> # Verify OTP
35
- npx starkfi auth import # Import private key
36
- npx starkfi auth logout # Clear session
37
- npx starkfi address # Show active address
38
- npx starkfi deploy # Deploy account on-chain
39
-
40
- # Assets & Trading
41
- npx starkfi balance [token] # Show token balances
42
- npx starkfi send <amount> <token> <recipient> # Transfer tokens
43
- npx starkfi trade <amount> <from> <to> # Swap tokens via Fibrous
44
-
45
- # Staking
46
- npx starkfi validators # List all validators
47
- npx starkfi pools <validator> # List delegation pools
48
- npx starkfi staking-stats # Full staking dashboard
49
- npx starkfi stake <amount> --pool <pool> # Stake tokens
50
- npx starkfi rewards --pool <pool> [--claim|--compound] # Manage rewards
51
- npx starkfi unstake <intent|exit> --pool <pool> [--amount <amount>] # Unstake
52
-
53
- # Network & Config
54
- npx starkfi tx-status <hash> # Check tx receipt
55
- npx starkfi config list # View configuration
56
- npx starkfi config set-rpc <url> # Set custom RPC
57
- npx starkfi config set-network <network> # Set network (mainnet/sepolia)
58
- npx starkfi config set-gasfree <on|off> # Toggle AVNU-sponsored gas
59
- npx starkfi config set-gas-token <token|off> # Pay gas in ERC-20 (USDC, etc)
60
-
61
- # Lending (Vesu V2)
62
- npx starkfi lend-pools # List Vesu lending pools
63
- npx starkfi lend-pools Genesis # Filter by name
64
- npx starkfi lend-supply 100 -p Genesis -t STRK # Supply assets to earn interest
65
- npx starkfi lend-withdraw 50 -p Genesis -t STRK # Withdraw supplied assets
66
- npx starkfi lend-borrow -p Genesis --collateral-amount 1 --collateral-token ETH --borrow-amount 500 --borrow-token USDC
67
- npx starkfi lend-repay 250 -p Genesis -t USDC --collateral-token ETH # Repay debt
68
- npx starkfi lend-status -p Genesis --collateral-token ETH --debt-token USDC
99
+ npx starkfi lend-pools # Summary table (name, version, asset/pair counts)
100
+ npx starkfi lend-pools <name> # Detail view (assets with APY, pairs, pool address)
101
+ npx starkfi lend-supply <amount> -p <pool> -t <token> # Supply liquidity
102
+ npx starkfi lend-withdraw <amount> -p <pool> -t <token> # Withdraw supplied liquidity
103
+ npx starkfi lend-borrow -p <pool> \ # Initiate collateralized borrow
104
+ --collateral-amount <n> --collateral-token <token> \
105
+ --borrow-amount <n> --borrow-token <token> \
106
+ [--use-supplied]
107
+ npx starkfi lend-repay <amount> -p <pool> -t <token> \ # Repay outstanding debt
108
+ --collateral-token <token>
109
+ npx starkfi lend-status -p <pool> \ # Query active position status
110
+ --collateral-token <token> [--borrow-token <token>]
111
+ npx starkfi lend-close -p <pool> \ # Atomically repay debt and withdraw collateral
112
+ --collateral-token <token> --borrow-token <token>
69
113
  ```
70
114
 
71
- ## AI Native (MCP)
115
+ ## Artificial Intelligence Integration (MCP)
72
116
 
73
- StarkFi includes a built-in MCP server, exposing all DeFi capabilities to AI editors like Cursor and Claude.
117
+ StarkFi is built from the ground up to operate as an MCP server, allowing AI assistants to reason about and execute DeFi operations.
74
118
 
75
119
  ```bash
76
120
  npx starkfi mcp-start
77
121
  ```
78
122
 
79
- > See [MCP.md](MCP.md) for editor configuration and the complete tool registry.
123
+ For detailed integration instructions and the complete LLM tool registry, refer to the [MCP Documentation](MCP.md).
124
+
125
+ ## Agent Skills
126
+
127
+ StarkFi ships with **10 agent skills** — structured instruction sets that teach AI coding assistants (Cursor, Claude, Antigravity) how to use the CLI without custom prompting.
128
+
129
+ | Category | Skills |
130
+ | ----------- | ------------------------------------------------------------ |
131
+ | Auth | `authenticate-wallet` |
132
+ | Wallet Data | `balance`, `portfolio` |
133
+ | Transaction | `send`, `trade`, `multi-swap`, `batch`, `staking`, `lending` |
134
+ | Utility | `config` |
135
+
136
+ ```bash
137
+ # Install via Skills CLI
138
+ npx skills add ahmetenesdur/starkfi
139
+ ```
140
+
141
+ Each skill documents the exact commands, parameters, error handling, and multi-step workflows an agent should follow. For full details, see the [Skills Documentation](skills/README.md).
80
142
 
81
143
  ## License
82
144
 
83
- MIT
145
+ MIT License.
@@ -1,5 +1,5 @@
1
1
  import { apiLogin } from "../../services/api/client.js";
2
- import { createSpinner, success } from "../../lib/format.js";
2
+ import { createSpinner, success, formatError } from "../../lib/format.js";
3
3
  import { getOrCreateAuthCommand } from "../../lib/command.js";
4
4
  export function registerLoginCommand(program) {
5
5
  const authCmd = getOrCreateAuthCommand(program);
@@ -15,7 +15,7 @@ export function registerLoginCommand(program) {
15
15
  console.log(`Run: starkfi auth verify ${email} <code>`);
16
16
  }
17
17
  catch (error) {
18
- console.error("Login failed:", error instanceof Error ? error.message : error);
18
+ console.error(formatError(error));
19
19
  process.exit(1);
20
20
  }
21
21
  });
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACpD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC/B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YAExD,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,SAAS,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACpD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC/B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YAExD,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,SAAS,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E5D"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE5D"}
@@ -1,6 +1,6 @@
1
1
  import { apiVerify } from "../../services/api/client.js";
2
2
  import { saveSession } from "../../services/auth/session.js";
3
- import { createSpinner, success, formatResult } from "../../lib/format.js";
3
+ import { createSpinner, success, formatResult, formatError } from "../../lib/format.js";
4
4
  import { STARKFI_API_URL_DEFAULT } from "../../lib/config.js";
5
5
  import { createSDK, connectWallet, resolveFeeModeConfig } from "../../services/starkzap/client.js";
6
6
  import { ConfigService } from "../../services/config/config.js";
@@ -56,7 +56,7 @@ export function registerVerifyCommand(program) {
56
56
  }
57
57
  }
58
58
  catch (error) {
59
- console.error("Verification failed:", error instanceof Error ? error.message : error);
59
+ console.error(formatError(error));
60
60
  process.exit(1);
61
61
  }
62
62
  });
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,yBAAyB,EAAE,8BAA8B,EAAE,SAAS,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE;QACnD,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAEvD,CAAC;YAEb,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;YAE1D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAE5C,MAAM,SAAS,GACd,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB,CAAC,GAAG,YAAY,CAAC;YAEzE,MAAM,WAAW,GAAG;gBACnB,IAAI,EAAE,OAAgB;gBACtB,OAAO;gBACP,OAAO,EAAE,MAAM,CAAC,aAAa;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,eAAe;gBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS;aACT,CAAC;YAEF,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;YACjE,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;YAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAuB,CAAC;YACrE,MAAM,EAAE,cAAc,EAAE,GAAG,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAEvE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAEhD,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAExD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;gBACZ,OAAO;gBACP,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,UAAU;oBACzB,CAAC,CAAC,sCAAsC;oBACxC,CAAC,CAAC,uCAAuC;aAC1C,CAAC,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,CAAC;YAEjE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CACV,mBAAmB;oBAClB,oDAAoD;oBACpD,4BAA4B;oBAC5B,mDAAmD;oBACnD,+CAA+C;oBAC/C,mCAAmC,CACpC,CAAC;YACH,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerBatchCommand(program: Command): void;
3
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6EzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgG3D"}
@@ -0,0 +1,143 @@
1
+ import { requireSession } from "../../services/auth/session.js";
2
+ import { initSDKAndWallet } from "../../services/starkzap/client.js";
3
+ import { buildBatch } from "../../services/batch/batch.js";
4
+ import { simulateTransaction } from "../../services/simulate/simulate.js";
5
+ import { createSpinner, formatResult, formatError } from "../../lib/format.js";
6
+ import { ErrorCode, StarkfiError } from "../../lib/errors.js";
7
+ /** Collect repeatable options into array. */
8
+ function collect(value, previous) {
9
+ return previous.concat([value]);
10
+ }
11
+ /** Parse "100 USDC ETH" into a typed BatchOperation. */
12
+ function parseOperation(type, raw) {
13
+ const parts = raw.trim().split(/\s+/);
14
+ switch (type) {
15
+ case "swap": {
16
+ if (parts.length < 3) {
17
+ throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --swap format: "${raw}". Expected: "100 USDC ETH"`);
18
+ }
19
+ return {
20
+ type: "swap",
21
+ params: { amount: parts[0], from_token: parts[1], to_token: parts[2] },
22
+ };
23
+ }
24
+ case "stake": {
25
+ if (parts.length < 2) {
26
+ throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --stake format: "${raw}". Expected: "50 STRK karnot" or "50 STRK 0xPool"`);
27
+ }
28
+ const target = parts[2];
29
+ const isAddress = target?.startsWith("0x");
30
+ return {
31
+ type: "stake",
32
+ params: {
33
+ amount: parts[0],
34
+ token: parts[1],
35
+ ...(isAddress ? { pool: target } : { validator: target }),
36
+ },
37
+ };
38
+ }
39
+ case "supply": {
40
+ if (parts.length < 3) {
41
+ throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --supply format: "${raw}". Expected: "200 USDC 0xPool"`);
42
+ }
43
+ return {
44
+ type: "supply",
45
+ params: { amount: parts[0], token: parts[1], pool: parts[2] },
46
+ };
47
+ }
48
+ case "send": {
49
+ if (parts.length < 3) {
50
+ throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --send format: "${raw}". Expected: "10 STRK 0x04a3..."`);
51
+ }
52
+ return {
53
+ type: "send",
54
+ params: { amount: parts[0], token: parts[1], to: parts[2] },
55
+ };
56
+ }
57
+ default:
58
+ throw new StarkfiError(ErrorCode.INVALID_CONFIG, `Unknown operation type: ${type}`);
59
+ }
60
+ }
61
+ export function registerBatchCommand(program) {
62
+ program
63
+ .command("batch")
64
+ .description("Execute multiple DeFi operations in a single Starknet transaction (multicall)")
65
+ .option("--swap <args>", 'Swap tokens: "100 USDC ETH" (repeatable)', collect, [])
66
+ .option("--stake <args>", 'Stake tokens: "50 STRK karnot" (repeatable)', collect, [])
67
+ .option("--supply <args>", 'Supply to Vesu: "200 USDC 0xPool" (repeatable)', collect, [])
68
+ .option("--send <args>", 'Send tokens: "10 STRK 0xAddr" (repeatable)', collect, [])
69
+ .option("--simulate", "Estimate fees and validate without executing")
70
+ .option("--json", "Output raw JSON")
71
+ .action(async (opts) => {
72
+ const spinner = createSpinner("Preparing batch...").start();
73
+ try {
74
+ const operations = [
75
+ ...opts.swap.map((s) => parseOperation("swap", s)),
76
+ ...opts.stake.map((s) => parseOperation("stake", s)),
77
+ ...opts.supply.map((s) => parseOperation("supply", s)),
78
+ ...opts.send.map((s) => parseOperation("send", s)),
79
+ ];
80
+ if (operations.length < 2) {
81
+ throw new StarkfiError(ErrorCode.INVALID_AMOUNT, "Batch requires at least 2 operations. Provide multiple --swap/--stake/--supply/--send options.");
82
+ }
83
+ const session = requireSession();
84
+ const { wallet } = await initSDKAndWallet(session);
85
+ await wallet.ensureReady({ deploy: "if_needed" });
86
+ spinner.text = "Building batch transaction...";
87
+ const { builder, summary } = await buildBatch(wallet, session, operations);
88
+ spinner.stop();
89
+ console.log("\n Batch Operations:\n");
90
+ summary.forEach((s, i) => console.log(` ${i + 1}. ${s}`));
91
+ console.log();
92
+ if (opts.simulate) {
93
+ spinner.start();
94
+ spinner.text = "Simulating batch...";
95
+ const sim = await simulateTransaction(builder);
96
+ if (sim.success) {
97
+ spinner.succeed("Simulation complete");
98
+ }
99
+ else {
100
+ spinner.fail("Simulation failed");
101
+ }
102
+ const simResult = {
103
+ mode: "SIMULATION (no TX sent)",
104
+ operations: operations.length,
105
+ estimatedFee: sim.estimatedFee,
106
+ estimatedFeeUsd: sim.estimatedFeeUsd,
107
+ calls: sim.callCount,
108
+ ...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
109
+ };
110
+ if (opts.json) {
111
+ console.log(JSON.stringify(simResult, null, 2));
112
+ }
113
+ else {
114
+ console.log(formatResult(simResult));
115
+ }
116
+ return;
117
+ }
118
+ spinner.start();
119
+ spinner.text = "Executing batch...";
120
+ const tx = await builder.send();
121
+ spinner.text = "Waiting for confirmation...";
122
+ await tx.wait();
123
+ spinner.succeed("Batch confirmed");
124
+ const txResult = {
125
+ operations: operations.length,
126
+ txHash: tx.hash,
127
+ explorer: tx.explorerUrl,
128
+ };
129
+ if (opts.json) {
130
+ console.log(JSON.stringify(txResult, null, 2));
131
+ }
132
+ else {
133
+ console.log(formatResult(txResult));
134
+ }
135
+ }
136
+ catch (error) {
137
+ spinner.fail("Batch failed");
138
+ console.error(formatError(error));
139
+ process.exit(1);
140
+ }
141
+ });
142
+ }
143
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { requireSession } from "../../services/auth/session.js";
2
2
  import { createSDK } from "../../services/starkzap/client.js";
3
3
  import { ConfigService } from "../../services/config/config.js";
4
- import { createSpinner, formatResult } from "../../lib/format.js";
4
+ import { createSpinner, formatResult, formatError } from "../../lib/format.js";
5
5
  import { explorerUrl } from "../../lib/config.js";
6
6
  export function registerTxStatusCommand(program) {
7
7
  program
@@ -31,7 +31,7 @@ export function registerTxStatusCommand(program) {
31
31
  }
32
32
  catch (error) {
33
33
  spinner.fail("Failed to get transaction status");
34
- console.error(error instanceof Error ? error.message : error);
34
+ console.error(formatError(error));
35
35
  process.exit(1);
36
36
  }
37
37
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tx-status.js","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACvD,OAAO;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjE,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;YACjE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAE3D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAErC,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/E,MAAM,WAAW,GAChB,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtE,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;gBACZ,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC7C,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;aAC5C,CAAC,CACF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"tx-status.js","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACvD,OAAO;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjE,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;YACjE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAE3D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAErC,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/E,MAAM,WAAW,GAChB,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtE,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;gBACZ,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC7C,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;aAC5C,CAAC,CACF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8I5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyH5D"}