starkfi 0.3.1 → 0.3.4
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.
- package/MCP.md +7 -7
- package/README.md +93 -71
- package/dist/commands/auth/login.js +2 -1
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/batch/batch.d.ts.map +1 -1
- package/dist/commands/batch/batch.js +6 -15
- package/dist/commands/batch/batch.js.map +1 -1
- package/dist/commands/chain/tx-status.d.ts.map +1 -1
- package/dist/commands/chain/tx-status.js +8 -13
- package/dist/commands/chain/tx-status.js.map +1 -1
- package/dist/commands/config/config.d.ts.map +1 -1
- package/dist/commands/config/config.js +10 -7
- package/dist/commands/config/config.js.map +1 -1
- package/dist/commands/lending/lending.d.ts.map +1 -1
- package/dist/commands/lending/lending.js +46 -11
- package/dist/commands/lending/lending.js.map +1 -1
- package/dist/commands/portfolio/portfolio.d.ts.map +1 -1
- package/dist/commands/portfolio/portfolio.js +21 -7
- package/dist/commands/portfolio/portfolio.js.map +1 -1
- package/dist/commands/staking/staking.d.ts.map +1 -1
- package/dist/commands/staking/staking.js +30 -9
- package/dist/commands/staking/staking.js.map +1 -1
- package/dist/commands/system/status.d.ts +3 -0
- package/dist/commands/system/status.d.ts.map +1 -0
- package/dist/commands/system/status.js +41 -0
- package/dist/commands/system/status.js.map +1 -0
- package/dist/commands/trade/multi-swap.d.ts.map +1 -1
- package/dist/commands/trade/multi-swap.js +5 -14
- package/dist/commands/trade/multi-swap.js.map +1 -1
- package/dist/commands/trade/swap.d.ts.map +1 -1
- package/dist/commands/trade/swap.js +4 -13
- package/dist/commands/trade/swap.js.map +1 -1
- package/dist/commands/wallet/address.d.ts.map +1 -1
- package/dist/commands/wallet/address.js +1 -1
- package/dist/commands/wallet/address.js.map +1 -1
- package/dist/commands/wallet/balance.d.ts.map +1 -1
- package/dist/commands/wallet/balance.js +8 -7
- package/dist/commands/wallet/balance.js.map +1 -1
- package/dist/commands/wallet/deploy.d.ts.map +1 -1
- package/dist/commands/wallet/deploy.js +9 -15
- package/dist/commands/wallet/deploy.js.map +1 -1
- package/dist/commands/wallet/send.d.ts.map +1 -1
- package/dist/commands/wallet/send.js +4 -13
- package/dist/commands/wallet/send.js.map +1 -1
- package/dist/index.js +4 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/brand.d.ts +5 -0
- package/dist/lib/brand.d.ts.map +1 -0
- package/dist/lib/brand.js +15 -0
- package/dist/lib/brand.js.map +1 -0
- package/dist/lib/cli-helpers.d.ts +8 -0
- package/dist/lib/cli-helpers.d.ts.map +1 -0
- package/dist/lib/cli-helpers.js +20 -0
- package/dist/lib/cli-helpers.js.map +1 -0
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/format.d.ts +2 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +22 -8
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/parse-starknet-error.d.ts +2 -0
- package/dist/lib/parse-starknet-error.d.ts.map +1 -0
- package/dist/lib/parse-starknet-error.js +81 -0
- package/dist/lib/parse-starknet-error.js.map +1 -0
- package/dist/mcp/handlers/auth.js +1 -1
- package/dist/mcp/handlers/auth.js.map +1 -1
- package/dist/mcp/handlers/batch.d.ts.map +1 -1
- package/dist/mcp/handlers/batch.js +17 -24
- package/dist/mcp/handlers/batch.js.map +1 -1
- package/dist/mcp/handlers/config.d.ts +1 -1
- package/dist/mcp/handlers/config.d.ts.map +1 -1
- package/dist/mcp/handlers/config.js +4 -0
- package/dist/mcp/handlers/config.js.map +1 -1
- package/dist/mcp/handlers/context.d.ts +10 -0
- package/dist/mcp/handlers/context.d.ts.map +1 -0
- package/dist/mcp/handlers/context.js +16 -0
- package/dist/mcp/handlers/context.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +1 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -1
- package/dist/mcp/handlers/index.js +1 -0
- package/dist/mcp/handlers/index.js.map +1 -1
- package/dist/mcp/handlers/lending.d.ts.map +1 -1
- package/dist/mcp/handlers/lending.js +105 -116
- package/dist/mcp/handlers/lending.js.map +1 -1
- package/dist/mcp/handlers/multi-swap.d.ts.map +1 -1
- package/dist/mcp/handlers/multi-swap.js +31 -39
- package/dist/mcp/handlers/multi-swap.js.map +1 -1
- package/dist/mcp/handlers/portfolio.d.ts.map +1 -1
- package/dist/mcp/handlers/portfolio.js +5 -6
- package/dist/mcp/handlers/portfolio.js.map +1 -1
- package/dist/mcp/handlers/staking.d.ts.map +1 -1
- package/dist/mcp/handlers/staking.js +73 -77
- package/dist/mcp/handlers/staking.js.map +1 -1
- package/dist/mcp/handlers/trade.d.ts.map +1 -1
- package/dist/mcp/handlers/trade.js +32 -40
- package/dist/mcp/handlers/trade.js.map +1 -1
- package/dist/mcp/handlers/utils.d.ts +7 -0
- package/dist/mcp/handlers/utils.d.ts.map +1 -1
- package/dist/mcp/handlers/utils.js +14 -0
- package/dist/mcp/handlers/utils.js.map +1 -1
- package/dist/mcp/handlers/wallet.d.ts.map +1 -1
- package/dist/mcp/handlers/wallet.js +61 -65
- package/dist/mcp/handlers/wallet.js.map +1 -1
- package/dist/mcp/tools/auth.d.ts.map +1 -1
- package/dist/mcp/tools/auth.js +10 -2
- package/dist/mcp/tools/auth.js.map +1 -1
- package/dist/mcp/tools/error-handling.d.ts.map +1 -1
- package/dist/mcp/tools/error-handling.js +9 -15
- package/dist/mcp/tools/error-handling.js.map +1 -1
- package/dist/services/auth/session.js +1 -1
- package/dist/services/auth/session.js.map +1 -1
- package/dist/services/config/config.d.ts +1 -0
- package/dist/services/config/config.d.ts.map +1 -1
- package/dist/services/config/config.js +4 -0
- package/dist/services/config/config.js.map +1 -1
- package/dist/services/fibrous/route.d.ts +1 -0
- package/dist/services/fibrous/route.d.ts.map +1 -1
- package/dist/services/fibrous/route.js +26 -1
- package/dist/services/fibrous/route.js.map +1 -1
- package/dist/services/portfolio/portfolio.d.ts +2 -0
- package/dist/services/portfolio/portfolio.d.ts.map +1 -1
- package/dist/services/portfolio/portfolio.js +21 -24
- package/dist/services/portfolio/portfolio.js.map +1 -1
- package/dist/services/simulate/simulate.d.ts.map +1 -1
- package/dist/services/simulate/simulate.js +7 -6
- package/dist/services/simulate/simulate.js.map +1 -1
- package/dist/services/staking/staking.d.ts.map +1 -1
- package/dist/services/staking/staking.js +16 -3
- package/dist/services/staking/staking.js.map +1 -1
- package/dist/services/staking/validators.d.ts +1 -2
- package/dist/services/staking/validators.d.ts.map +1 -1
- package/dist/services/staking/validators.js.map +1 -1
- package/dist/services/starkzap/client.d.ts +1 -1
- package/dist/services/starkzap/client.d.ts.map +1 -1
- package/dist/services/starkzap/client.js +11 -6
- package/dist/services/starkzap/client.js.map +1 -1
- package/dist/services/tokens/tokens.d.ts.map +1 -1
- package/dist/services/tokens/tokens.js +17 -9
- package/dist/services/tokens/tokens.js.map +1 -1
- package/dist/services/vesu/lending.d.ts.map +1 -1
- package/dist/services/vesu/lending.js +0 -7
- package/dist/services/vesu/lending.js.map +1 -1
- package/dist/services/vesu/pools.d.ts +4 -0
- package/dist/services/vesu/pools.d.ts.map +1 -1
- package/dist/services/vesu/pools.js +8 -0
- package/dist/services/vesu/pools.js.map +1 -1
- package/package.json +9 -5
- package/skills/README.md +1 -1
- package/skills/balance/SKILL.md +1 -1
- package/skills/batch/SKILL.md +6 -6
- package/skills/config/SKILL.md +10 -1
- package/skills/lending/SKILL.md +20 -9
- package/skills/multi-swap/SKILL.md +1 -1
- package/skills/portfolio/SKILL.md +2 -2
- package/skills/send/SKILL.md +1 -1
- package/skills/staking/SKILL.md +10 -10
- package/skills/trade/SKILL.md +1 -1
package/MCP.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Model Context Protocol (MCP) Integration
|
|
2
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.
|
|
3
|
+
StarkFi operates as a fully-featured Model Context Protocol (MCP) server. By executing `npx starkfi@latest 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
4
|
|
|
5
5
|
## Client Configuration
|
|
6
6
|
|
|
@@ -11,13 +11,13 @@ To integrate StarkFi into your AI environment, configure your MCP client setting
|
|
|
11
11
|
"mcpServers": {
|
|
12
12
|
"starkfi": {
|
|
13
13
|
"command": "npx",
|
|
14
|
-
"args": ["-y", "starkfi", "mcp-start"]
|
|
14
|
+
"args": ["-y", "starkfi@latest", "mcp-start"]
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
```
|
|
19
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.
|
|
20
|
+
**Authentication Requirement:** The StarkFi CLI must be authenticated locally (via `npx starkfi@latest auth login`) before the MCP server can execute any state-mutating transactions on behalf of the user.
|
|
21
21
|
|
|
22
22
|
## Tool Registry
|
|
23
23
|
|
|
@@ -276,10 +276,10 @@ Atomically closes an active Vesu V2 lending position. Repays all outstanding deb
|
|
|
276
276
|
|
|
277
277
|
Views and modifies global CLI behavior: RPC routing, network selection, and Gas Abstraction.
|
|
278
278
|
|
|
279
|
-
| Parameter | Type | Required | Description
|
|
280
|
-
| --------- | ------ | -------- |
|
|
281
|
-
| `action` | enum | **Yes** | One of: `list`, `set-rpc`, `get-rpc`, `set-network`, `set-gasfree`, `set-gas-token`
|
|
282
|
-
| `value` | string | No | `set-gasfree`: `on`/`off`. `set-gas-token`: symbol (`USDC`, `ETH`) or `
|
|
279
|
+
| Parameter | Type | Required | Description |
|
|
280
|
+
| --------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
281
|
+
| `action` | enum | **Yes** | One of: `list`, `reset`, `set-rpc`, `get-rpc`, `set-network`, `set-gasfree`, `set-gas-token` |
|
|
282
|
+
| `value` | string | No | `set-gasfree`: `on`/`off`. `set-gas-token`: symbol (`USDC`, `ETH`) or `reset`. `set-rpc`: URL string. `set-network`: `mainnet`/`sepolia`. |
|
|
283
283
|
|
|
284
284
|
---
|
|
285
285
|
|
package/README.md
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<a href="https://starkfi.app">
|
|
3
|
-
<img src="
|
|
3
|
+
<img src="landing/favicon.svg" alt="StarkFi Logo" width="100" height="100"/>
|
|
4
4
|
</a>
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<h1 align="center">StarkFi</h1>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<strong>The
|
|
11
|
-
<em>The AI-native DeFi toolkit for Starknet.</em><br>
|
|
10
|
+
<strong>The AI-native DeFi toolkit for Starknet.</strong><br>
|
|
12
11
|
A production-grade CLI and MCP server that gives both developers and AI agents full access to swaps, multi-swap, atomic batch transactions, staking, lending, portfolio management, and gasless transactions — all powered by the <a href="https://github.com/keep-starknet-strange/starkzap">Starkzap SDK</a>.
|
|
13
12
|
</p>
|
|
14
13
|
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://www.npmjs.com/package/starkfi"><img src="https://img.shields.io/npm/v/starkfi?style=flat-square&color=CB3837&logo=npm&logoColor=white" alt="npm version"/></a>
|
|
16
|
+
<a href="https://www.npmjs.com/package/starkfi"><img src="https://img.shields.io/npm/dm/starkfi?style=flat-square&color=blue" alt="npm downloads"/></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
15
19
|
```bash
|
|
16
|
-
npx starkfi --help
|
|
20
|
+
npx starkfi@latest --help
|
|
17
21
|
```
|
|
18
22
|
|
|
19
23
|
---
|
|
@@ -33,35 +37,36 @@ Most DeFi tools are built for humans clicking buttons. StarkFi is built for **ag
|
|
|
33
37
|
## Architecture
|
|
34
38
|
|
|
35
39
|
```
|
|
36
|
-
|
|
37
|
-
│
|
|
38
|
-
│
|
|
39
|
-
│
|
|
40
|
-
│ │ CLI
|
|
41
|
-
│ │
|
|
42
|
-
│
|
|
43
|
-
│
|
|
44
|
-
│
|
|
45
|
-
│
|
|
46
|
-
│
|
|
47
|
-
│
|
|
48
|
-
│ │
|
|
49
|
-
│ │
|
|
50
|
-
│ │ │ Fibrous
|
|
51
|
-
│ │ │ Swap
|
|
52
|
-
│ │
|
|
53
|
-
│ │ │
|
|
54
|
-
│ │
|
|
55
|
-
│ │
|
|
56
|
-
│ │
|
|
57
|
-
│ │
|
|
58
|
-
│
|
|
59
|
-
│
|
|
60
|
-
│
|
|
61
|
-
│
|
|
62
|
-
│ │
|
|
63
|
-
│
|
|
64
|
-
|
|
40
|
+
┌──────────────────────────────────────────────────────────────────────────┐
|
|
41
|
+
│ StarkFi │
|
|
42
|
+
│ │
|
|
43
|
+
│ ┌──────────┐ ┌─────────────────────┐ ┌───────────────────────┐ │
|
|
44
|
+
│ │ CLI │ │ MCP Server │ │ Agent Skills │ │
|
|
45
|
+
│ │ (30+ │ │ (27 tools) │ │ (10 workflows) │ │
|
|
46
|
+
│ │ commands)│ │ stdio transport │ │ npx starkfi@latest │ │
|
|
47
|
+
│ └────┬─────┘ └──────────┬──────────┘ └──────────┬────────────┘ │
|
|
48
|
+
│ │ │ │ │
|
|
49
|
+
│ └──────────────────────┼───────────────────────────┘ │
|
|
50
|
+
│ ▼ │
|
|
51
|
+
│ ┌──────────────────────────────────────────────────────────────────┐ │
|
|
52
|
+
│ │ Service Layer │ │
|
|
53
|
+
│ │ ┌──────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐ │ │
|
|
54
|
+
│ │ │ Fibrous │ │ Staking │ │ Vesu │ │ Batch │ │ │
|
|
55
|
+
│ │ │ Swap │ │ Lifecycle│ │ V2 │ │ Multicall│ │ │
|
|
56
|
+
│ │ └────┬─────┘ └────┬─────┘ └───┬────┘ └────┬─────┘ │ │
|
|
57
|
+
│ │ └─────────────┴────────────┴────────────┘ │ │
|
|
58
|
+
│ │ │ │ │
|
|
59
|
+
│ │ ┌───────────────┴───────────────────────────┐ │ │
|
|
60
|
+
│ │ │ Starkzap SDK (starkzap v1.0.0) │ │ │
|
|
61
|
+
│ │ │ Wallet · TxBuilder · Tokens · Paymaster │ │ │
|
|
62
|
+
│ │ └───────────────┬───────────────────────────┘ │ │
|
|
63
|
+
│ └───────────────────────┼──────────────────────────────────────────┘ │
|
|
64
|
+
│ ▼ │
|
|
65
|
+
│ ┌──────────────────────────────────────┐ ┌──────────────────────┐ │
|
|
66
|
+
│ │ Auth Server (Hono + Privy TEE) │ │ AVNU Paymaster │ │
|
|
67
|
+
│ │ Email OTP · Wallet · Sign · Gas │ │ Gas Abstraction │ │
|
|
68
|
+
│ └──────────────────────────────────────┘ └──────────────────────┘ │
|
|
69
|
+
└──────────────────────────────────────────────────────────────────────────┘
|
|
65
70
|
│
|
|
66
71
|
▼
|
|
67
72
|
┌──────────────────┐
|
|
@@ -92,8 +97,8 @@ StarkFi leverages **all core Starkzap modules**:
|
|
|
92
97
|
DEX-aggregated swaps with optimal routing. Single swaps, multi-swap (up to 3 pairs), and batch routing.
|
|
93
98
|
|
|
94
99
|
```bash
|
|
95
|
-
npx starkfi trade 100 USDC ETH --slippage 1
|
|
96
|
-
npx starkfi multi-swap "100 USDC>ETH, 50 USDT>ETH"
|
|
100
|
+
npx starkfi@latest trade 100 USDC ETH --slippage 1
|
|
101
|
+
npx starkfi@latest multi-swap "100 USDC>ETH, 50 USDT>ETH"
|
|
97
102
|
```
|
|
98
103
|
|
|
99
104
|
### ⚛️ Atomic Transaction Batching
|
|
@@ -101,7 +106,7 @@ npx starkfi multi-swap "100 USDC>ETH, 50 USDT>ETH"
|
|
|
101
106
|
Bundle multiple DeFi operations into a single Starknet multicall. Minimum 2 operations.
|
|
102
107
|
|
|
103
108
|
```bash
|
|
104
|
-
npx starkfi batch \
|
|
109
|
+
npx starkfi@latest batch \
|
|
105
110
|
--swap "100 USDC ETH" \
|
|
106
111
|
--stake "50 STRK karnot" \
|
|
107
112
|
--supply "200 USDC Prime" \
|
|
@@ -113,10 +118,10 @@ npx starkfi batch \
|
|
|
113
118
|
Full staking lifecycle across multiple validators with STRK, WBTC, tBTC, SolvBTC, and LBTC support.
|
|
114
119
|
|
|
115
120
|
```bash
|
|
116
|
-
npx starkfi stake 100 -v karnot
|
|
117
|
-
npx starkfi rewards -v karnot --compound
|
|
118
|
-
npx starkfi unstake intent -v karnot -a 50
|
|
119
|
-
npx starkfi unstake exit -v karnot
|
|
121
|
+
npx starkfi@latest stake 100 -v karnot
|
|
122
|
+
npx starkfi@latest rewards -v karnot --compound
|
|
123
|
+
npx starkfi@latest unstake intent -v karnot -a 50
|
|
124
|
+
npx starkfi@latest unstake exit -v karnot
|
|
120
125
|
```
|
|
121
126
|
|
|
122
127
|
### 🏦 Lending & Borrowing (Vesu V2)
|
|
@@ -124,24 +129,25 @@ npx starkfi unstake exit -v karnot
|
|
|
124
129
|
Supply collateral, borrow assets, monitor health factors, and atomically close positions.
|
|
125
130
|
|
|
126
131
|
```bash
|
|
127
|
-
npx starkfi lend-supply 100 -p Prime -t STRK
|
|
128
|
-
npx starkfi lend-borrow -p Prime \
|
|
132
|
+
npx starkfi@latest lend-supply 100 -p Prime -t STRK
|
|
133
|
+
npx starkfi@latest lend-borrow -p Prime \
|
|
129
134
|
--collateral-amount 200 --collateral-token STRK \
|
|
130
135
|
--borrow-amount 50 --borrow-token USDC
|
|
131
|
-
npx starkfi lend-status -
|
|
132
|
-
npx starkfi lend-
|
|
136
|
+
npx starkfi@latest lend-status # Auto-scan all pools
|
|
137
|
+
npx starkfi@latest lend-status -p Prime --collateral-token STRK --borrow-token USDC # Specific position
|
|
138
|
+
npx starkfi@latest lend-close -p Prime --collateral-token STRK --borrow-token USDC
|
|
133
139
|
```
|
|
134
140
|
|
|
135
141
|
### 💸 Gas Abstraction
|
|
136
142
|
|
|
137
|
-
|
|
143
|
+
Users pay gas fees in their preferred ERC-20 token via AVNU Paymaster — no native STRK or ETH required. Alternatively, developers can sponsor gas entirely.
|
|
138
144
|
|
|
139
145
|
```bash
|
|
140
146
|
# Pay gas in USDC instead of STRK
|
|
141
|
-
npx starkfi config set-gas-token USDC
|
|
147
|
+
npx starkfi@latest config set-gas-token USDC
|
|
142
148
|
|
|
143
149
|
# Developer pays all gas (gasfree mode)
|
|
144
|
-
npx starkfi config set-gasfree on
|
|
150
|
+
npx starkfi@latest config set-gasfree on
|
|
145
151
|
```
|
|
146
152
|
|
|
147
153
|
| Mode | Who Pays | Gas Tokens | Description |
|
|
@@ -154,8 +160,8 @@ npx starkfi config set-gasfree on
|
|
|
154
160
|
Estimate fees and validate any transaction before broadcasting.
|
|
155
161
|
|
|
156
162
|
```bash
|
|
157
|
-
npx starkfi trade 100 USDC ETH --simulate
|
|
158
|
-
# → mode: SIMULATION, estimatedFee: 0.
|
|
163
|
+
npx starkfi@latest trade 100 USDC ETH --simulate
|
|
164
|
+
# → mode: SIMULATION, estimatedFee: 0.054 STRK ($0.0024), callCount: 4
|
|
159
165
|
```
|
|
160
166
|
|
|
161
167
|
### 📊 Portfolio Dashboard
|
|
@@ -163,7 +169,7 @@ npx starkfi trade 100 USDC ETH --simulate
|
|
|
163
169
|
Consolidated view of all DeFi positions in one call.
|
|
164
170
|
|
|
165
171
|
```bash
|
|
166
|
-
npx starkfi portfolio
|
|
172
|
+
npx starkfi@latest portfolio
|
|
167
173
|
# → Token Balances (USD), Staking Positions, Lending Positions, Total Value
|
|
168
174
|
```
|
|
169
175
|
|
|
@@ -175,7 +181,7 @@ StarkFi exposes **27 MCP tools** via stdio transport, enabling AI assistants to
|
|
|
175
181
|
|
|
176
182
|
```bash
|
|
177
183
|
# Start the MCP server
|
|
178
|
-
npx starkfi mcp-start
|
|
184
|
+
npx starkfi@latest mcp-start
|
|
179
185
|
```
|
|
180
186
|
|
|
181
187
|
### Tool Categories
|
|
@@ -208,13 +214,13 @@ Add to your AI assistant's MCP config (Cursor, Claude, etc.):
|
|
|
208
214
|
"mcpServers": {
|
|
209
215
|
"starkfi": {
|
|
210
216
|
"command": "npx",
|
|
211
|
-
"args": ["-y", "starkfi", "mcp-start"]
|
|
217
|
+
"args": ["-y", "starkfi@latest", "mcp-start"]
|
|
212
218
|
}
|
|
213
219
|
}
|
|
214
220
|
}
|
|
215
221
|
```
|
|
216
222
|
|
|
217
|
-
For the complete tool registry and schemas, see [MCP Documentation](
|
|
223
|
+
For the complete tool registry and schemas, see [MCP Documentation](https://docs.starkfi.app/docs/mcp).
|
|
218
224
|
|
|
219
225
|
---
|
|
220
226
|
|
|
@@ -234,7 +240,7 @@ StarkFi ships with **10 agent skills** — structured instruction sets that teac
|
|
|
234
240
|
npx skills add ahmetenesdur/starkfi
|
|
235
241
|
```
|
|
236
242
|
|
|
237
|
-
See [Skills Documentation](skills
|
|
243
|
+
See [Skills Documentation](https://docs.starkfi.app/docs/skills) for details.
|
|
238
244
|
|
|
239
245
|
---
|
|
240
246
|
|
|
@@ -248,27 +254,27 @@ See [Skills Documentation](skills/README.md) for details.
|
|
|
248
254
|
### 1. Authenticate
|
|
249
255
|
|
|
250
256
|
```bash
|
|
251
|
-
npx starkfi auth login user@example.com
|
|
252
|
-
npx starkfi auth verify user@example.com <OTP_CODE>
|
|
257
|
+
npx starkfi@latest auth login user@example.com
|
|
258
|
+
npx starkfi@latest auth verify user@example.com <OTP_CODE>
|
|
253
259
|
```
|
|
254
260
|
|
|
255
261
|
### 2. Deploy Account
|
|
256
262
|
|
|
257
263
|
```bash
|
|
258
|
-
npx starkfi deploy
|
|
264
|
+
npx starkfi@latest deploy
|
|
259
265
|
```
|
|
260
266
|
|
|
261
267
|
### 3. Check Balance
|
|
262
268
|
|
|
263
269
|
```bash
|
|
264
|
-
npx starkfi balance
|
|
270
|
+
npx starkfi@latest balance
|
|
265
271
|
```
|
|
266
272
|
|
|
267
273
|
### 4. Start Trading
|
|
268
274
|
|
|
269
275
|
```bash
|
|
270
|
-
npx starkfi trade 10 STRK ETH --simulate # Preview first
|
|
271
|
-
npx starkfi trade 10 STRK ETH # Execute
|
|
276
|
+
npx starkfi@latest trade 10 STRK ETH --simulate # Preview first
|
|
277
|
+
npx starkfi@latest trade 10 STRK ETH # Execute
|
|
272
278
|
```
|
|
273
279
|
|
|
274
280
|
---
|
|
@@ -322,7 +328,7 @@ npx starkfi trade 10 STRK ETH # Execute
|
|
|
322
328
|
| `lend-withdraw <amount> -p <pool> -t <token>` | Withdraw assets |
|
|
323
329
|
| `lend-borrow -p <pool> --collateral-amount <n> --collateral-token <t> --borrow-amount <n> --borrow-token <t> [--use-supplied]` | Borrow |
|
|
324
330
|
| `lend-repay <amount> -p <pool> -t <token> --collateral-token <t>` | Repay debt |
|
|
325
|
-
| `lend-status -p <pool> --collateral-token <t> [--borrow-token <t>]`
|
|
331
|
+
| `lend-status [-p <pool> --collateral-token <t> [--borrow-token <t>]]` | Position status (auto-scan if no args) |
|
|
326
332
|
| `lend-close -p <pool> --collateral-token <t> --borrow-token <t>` | Close position atomically |
|
|
327
333
|
|
|
328
334
|
### Configuration
|
|
@@ -330,6 +336,7 @@ npx starkfi trade 10 STRK ETH # Execute
|
|
|
330
336
|
| Command | Description |
|
|
331
337
|
| --------------------------------------- | ------------------------------ |
|
|
332
338
|
| `config list` | Show current configuration |
|
|
339
|
+
| `config reset` | Reset all settings to defaults |
|
|
333
340
|
| `config set-rpc <url>` | Set custom RPC endpoint |
|
|
334
341
|
| `config get-rpc` | Show current RPC |
|
|
335
342
|
| `config set-network <mainnet\|sepolia>` | Switch network |
|
|
@@ -372,7 +379,7 @@ See [`server/README.md`](server/README.md) for setup instructions.
|
|
|
372
379
|
| **CLI** | [Commander.js](https://github.com/tj/commander.js) v14.0.3 |
|
|
373
380
|
| **MCP** | [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) v1.27.1 |
|
|
374
381
|
| **Schema** | [Zod](https://zod.dev/) v4.3.6 |
|
|
375
|
-
| **Auth Server** | [Hono](https://hono.dev/) v4.12.
|
|
382
|
+
| **Auth Server** | [Hono](https://hono.dev/) v4.12.7 + [Privy TEE](https://privy.io/) |
|
|
376
383
|
| **DEX Routing** | [Fibrous](https://fibrous.finance/) Aggregator |
|
|
377
384
|
| **Lending** | [Vesu](https://vesu.io/) V2 Protocol |
|
|
378
385
|
| **Gas** | [AVNU](https://avnu.fi/) Paymaster |
|
|
@@ -381,19 +388,34 @@ See [`server/README.md`](server/README.md) for setup instructions.
|
|
|
381
388
|
|
|
382
389
|
## Error Handling
|
|
383
390
|
|
|
384
|
-
StarkFi implements a robust error handling system with a custom `StarkfiError` class and **
|
|
391
|
+
StarkFi implements a robust error handling system with a custom `StarkfiError` class and **25 specific error codes** organized by domain:
|
|
385
392
|
|
|
386
|
-
| Domain | Error Codes
|
|
387
|
-
| -------------- |
|
|
388
|
-
| **Auth** | `
|
|
389
|
-
| **Wallet** | `
|
|
390
|
-
| **Network** | `NETWORK_ERROR`, `
|
|
391
|
-
| **Validation** | `
|
|
392
|
-
| **DeFi** | `SWAP_FAILED`, `STAKING_FAILED`, `LENDING_FAILED`, `POOL_NOT_FOUND`
|
|
393
|
-
| **System** | `
|
|
393
|
+
| Domain | Error Codes |
|
|
394
|
+
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
395
|
+
| **Auth** | `AUTH_REQUIRED`, `AUTH_FAILED`, `SESSION_EXPIRED` |
|
|
396
|
+
| **Wallet** | `WALLET_NOT_DEPLOYED`, `WALLET_NOT_FOUND`, `INSUFFICIENT_BALANCE` |
|
|
397
|
+
| **Network** | `NETWORK_ERROR`, `RATE_LIMITED`, `TX_FAILED`, `TX_NOT_FOUND`, `PAYMASTER_ERROR` |
|
|
398
|
+
| **Validation** | `INVALID_CONFIG`, `INVALID_ADDRESS`, `INVALID_AMOUNT` |
|
|
399
|
+
| **DeFi** | `SWAP_FAILED`, `NO_ROUTE_FOUND`, `SLIPPAGE_EXCEEDED`, `STAKING_FAILED`, `LENDING_FAILED`, `POOL_NOT_FOUND`, `EXIT_NOT_READY`, `VALIDATOR_NOT_FOUND` |
|
|
400
|
+
| **System** | `SIMULATION_FAILED`, `BATCH_LIMIT_EXCEEDED`, `UNKNOWN` |
|
|
394
401
|
|
|
395
402
|
All network operations include **automatic retry with exponential backoff** (500ms base, max 2 retries). Parallel operations use a **sliding-window concurrency pool** to prevent RPC rate-limiting.
|
|
396
403
|
|
|
404
|
+
### Readable Starknet Errors
|
|
405
|
+
|
|
406
|
+
Raw Starknet JSON-RPC errors (hex-encoded Cairo strings like `u256_sub Overflow`) are automatically parsed into human-readable messages:
|
|
407
|
+
|
|
408
|
+
| Raw Error | Displayed Message |
|
|
409
|
+
|-----------|------------------|
|
|
410
|
+
| `u256_sub Overflow` | Insufficient balance — you don't have enough tokens (including gas fees) |
|
|
411
|
+
| `ERC20: insufficient allowance` | Token approval required — not enough allowance for this operation |
|
|
412
|
+
| `UNAUTHORIZED` | Unauthorized — session may have expired, try: starkfi auth login |
|
|
413
|
+
| `argent/multicall-failed` | One or more calls in the transaction failed |
|
|
414
|
+
| `dusty-collateral-balance` | Collateral amount is below the pool's minimum (dust limit). Please increase the amount. |
|
|
415
|
+
| `dusty-debt-balance` | Borrow amount is below the pool's minimum (dust limit). Please increase the amount. |
|
|
416
|
+
|
|
417
|
+
This applies to both CLI output (`formatError`) and MCP responses (`withErrorHandling`).
|
|
418
|
+
|
|
397
419
|
---
|
|
398
420
|
|
|
399
421
|
## Development
|
|
@@ -7,14 +7,15 @@ export function registerLoginCommand(program) {
|
|
|
7
7
|
.command("login <email>")
|
|
8
8
|
.description("Send OTP to email for Privy wallet authentication")
|
|
9
9
|
.action(async (email) => {
|
|
10
|
+
const spinner = createSpinner("Sending OTP...").start();
|
|
10
11
|
try {
|
|
11
|
-
const spinner = createSpinner("Sending OTP...").start();
|
|
12
12
|
await apiLogin(email);
|
|
13
13
|
spinner.succeed("OTP sent");
|
|
14
14
|
console.log(success(`Check your email (${email}) for the code.`));
|
|
15
15
|
console.log(`Run: starkfi auth verify ${email} <code>`);
|
|
16
16
|
}
|
|
17
17
|
catch (error) {
|
|
18
|
+
spinner.fail("Login failed");
|
|
18
19
|
console.error(formatError(error));
|
|
19
20
|
process.exit(1);
|
|
20
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,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,
|
|
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,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,IAAI,CAAC;YACJ,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,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7B,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":"batch.d.ts","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
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;AA8EzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuG3D"}
|
|
@@ -2,13 +2,14 @@ import { requireSession } from "../../services/auth/session.js";
|
|
|
2
2
|
import { initSDKAndWallet } from "../../services/starkzap/client.js";
|
|
3
3
|
import { buildBatch } from "../../services/batch/batch.js";
|
|
4
4
|
import { simulateTransaction } from "../../services/simulate/simulate.js";
|
|
5
|
-
import { createSpinner,
|
|
5
|
+
import { createSpinner, formatError } from "../../lib/format.js";
|
|
6
|
+
import { outputResult } from "../../lib/cli-helpers.js";
|
|
6
7
|
import { ErrorCode, StarkfiError } from "../../lib/errors.js";
|
|
7
|
-
|
|
8
|
+
// Collect repeatable options into array.
|
|
8
9
|
function collect(value, previous) {
|
|
9
10
|
return previous.concat([value]);
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
+
// Parse "100 USDC ETH" into a typed BatchOperation.
|
|
12
13
|
function parseOperation(type, raw) {
|
|
13
14
|
const parts = raw.trim().split(/\s+/);
|
|
14
15
|
switch (type) {
|
|
@@ -119,12 +120,7 @@ Minimum 2 operations required. Each flag can be repeated.`)
|
|
|
119
120
|
calls: sim.callCount,
|
|
120
121
|
...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
|
|
121
122
|
};
|
|
122
|
-
|
|
123
|
-
console.log(JSON.stringify(simResult, null, 2));
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
console.log(formatResult(simResult));
|
|
127
|
-
}
|
|
123
|
+
outputResult(simResult, opts);
|
|
128
124
|
return;
|
|
129
125
|
}
|
|
130
126
|
spinner.start();
|
|
@@ -138,12 +134,7 @@ Minimum 2 operations required. Each flag can be repeated.`)
|
|
|
138
134
|
txHash: tx.hash,
|
|
139
135
|
explorer: tx.explorerUrl,
|
|
140
136
|
};
|
|
141
|
-
|
|
142
|
-
console.log(JSON.stringify(txResult, null, 2));
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
console.log(formatResult(txResult));
|
|
146
|
-
}
|
|
137
|
+
outputResult(txResult, opts);
|
|
147
138
|
}
|
|
148
139
|
catch (error) {
|
|
149
140
|
spinner.fail("Batch failed");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAuB,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-status.d.ts","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"tx-status.d.ts","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC9D"}
|
|
@@ -1,39 +1,34 @@
|
|
|
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 {
|
|
4
|
+
import { formatActualFee } from "../../lib/format.js";
|
|
5
5
|
import { explorerUrl } from "../../lib/config.js";
|
|
6
|
+
import { runCommand, outputResult } from "../../lib/cli-helpers.js";
|
|
6
7
|
export function registerTxStatusCommand(program) {
|
|
7
8
|
program
|
|
8
9
|
.command("tx-status")
|
|
9
10
|
.description("Check transaction status by hash")
|
|
10
11
|
.argument("<hash>", "Transaction hash (0x...)")
|
|
11
12
|
.action(async (hash) => {
|
|
12
|
-
|
|
13
|
-
try {
|
|
13
|
+
await runCommand("Checking transaction...", "Transaction found", "Failed to get transaction status", async () => {
|
|
14
14
|
const session = requireSession();
|
|
15
15
|
const configService = ConfigService.getInstance();
|
|
16
16
|
const rpcUrl = configService.get("rpcUrl");
|
|
17
17
|
const sdk = createSDK(session.network, rpcUrl);
|
|
18
18
|
const provider = sdk.getProvider();
|
|
19
19
|
const receipt = await provider.getTransactionReceipt(hash);
|
|
20
|
-
|
|
21
|
-
const actualFee =
|
|
20
|
+
const rawFee = "actual_fee" in receipt ? receipt.actual_fee : null;
|
|
21
|
+
const actualFee = formatActualFee(rawFee);
|
|
22
22
|
const blockNumber = "block_number" in receipt ? String(receipt.block_number) : "pending";
|
|
23
|
-
|
|
23
|
+
return {
|
|
24
24
|
hash,
|
|
25
25
|
status: JSON.stringify(receipt.statusReceipt),
|
|
26
26
|
actualFee,
|
|
27
27
|
blockNumber,
|
|
28
28
|
network: session.network,
|
|
29
29
|
explorer: explorerUrl(hash, session.network),
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
spinner.fail("Failed to get transaction status");
|
|
34
|
-
console.error(formatError(error));
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
30
|
+
};
|
|
31
|
+
}, (result) => outputResult(result, {}));
|
|
37
32
|
});
|
|
38
33
|
}
|
|
39
34
|
//# sourceMappingURL=tx-status.js.map
|
|
@@ -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,
|
|
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,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEpE,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,UAAU,CACf,yBAAyB,EACzB,mBAAmB,EACnB,kCAAkC,EAClC,KAAK,IAAI,EAAE;YACV,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,MAAM,MAAM,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACnE,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,WAAW,GAChB,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtE,OAAO;gBACN,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;QACH,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CACpC,CAAC;IACH,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,
|
|
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,CA+I5D"}
|
|
@@ -2,6 +2,7 @@ import { ConfigService } from "../../services/config/config.js";
|
|
|
2
2
|
import { success, formatResult, warn } from "../../lib/format.js";
|
|
3
3
|
import { GASLESS_SUPPORTED_TOKENS } from "../../services/starkzap/config.js";
|
|
4
4
|
export function registerConfigCommand(program) {
|
|
5
|
+
const configService = ConfigService.getInstance();
|
|
5
6
|
const configCmd = program.command("config").description("Manage starkfi configuration");
|
|
6
7
|
configCmd
|
|
7
8
|
.command("set-rpc")
|
|
@@ -9,7 +10,6 @@ export function registerConfigCommand(program) {
|
|
|
9
10
|
.argument("<url>", "RPC endpoint URL")
|
|
10
11
|
.addHelpText("after", "\nExample:\n $ starkfi config set-rpc https://starknet-mainnet.g.alchemy.com/v2/<key>")
|
|
11
12
|
.action((url) => {
|
|
12
|
-
const configService = ConfigService.getInstance();
|
|
13
13
|
configService.set("rpcUrl", url);
|
|
14
14
|
console.log(success(`RPC URL set to: ${url}`));
|
|
15
15
|
});
|
|
@@ -18,10 +18,9 @@ export function registerConfigCommand(program) {
|
|
|
18
18
|
.description("Show the current RPC URL")
|
|
19
19
|
.addHelpText("after", "\nExample:\n $ starkfi config get-rpc")
|
|
20
20
|
.action(() => {
|
|
21
|
-
const configService = ConfigService.getInstance();
|
|
22
21
|
const rpcUrl = configService.get("rpcUrl");
|
|
23
22
|
console.log(formatResult({
|
|
24
|
-
rpcUrl: rpcUrl || "default (
|
|
23
|
+
rpcUrl: rpcUrl || "default (Starkzap preset)",
|
|
25
24
|
}));
|
|
26
25
|
});
|
|
27
26
|
configCmd
|
|
@@ -34,7 +33,6 @@ export function registerConfigCommand(program) {
|
|
|
34
33
|
console.log(warn("Network must be 'mainnet' or 'sepolia'"));
|
|
35
34
|
process.exit(1);
|
|
36
35
|
}
|
|
37
|
-
const configService = ConfigService.getInstance();
|
|
38
36
|
configService.set("network", network);
|
|
39
37
|
console.log(success(`Network set to: ${network}`));
|
|
40
38
|
});
|
|
@@ -49,7 +47,6 @@ export function registerConfigCommand(program) {
|
|
|
49
47
|
console.log(warn("Mode must be 'on' or 'off'"));
|
|
50
48
|
process.exit(1);
|
|
51
49
|
}
|
|
52
|
-
const configService = ConfigService.getInstance();
|
|
53
50
|
configService.set("gasfreeMode", mode === "on");
|
|
54
51
|
if (mode === "on") {
|
|
55
52
|
// Gasfree and Gasless are mutually exclusive
|
|
@@ -67,7 +64,6 @@ export function registerConfigCommand(program) {
|
|
|
67
64
|
.argument("<token>", `Token symbol or 'reset' (supported: ${GASLESS_SUPPORTED_TOKENS.join(", ")})`)
|
|
68
65
|
.addHelpText("after", `\nExamples:\n $ starkfi config set-gas-token ETH\n $ starkfi config set-gas-token USDC\n $ starkfi config set-gas-token reset # revert to STRK`)
|
|
69
66
|
.action((token) => {
|
|
70
|
-
const configService = ConfigService.getInstance();
|
|
71
67
|
if (["off", "reset", "default"].includes(token.toLowerCase())) {
|
|
72
68
|
configService.delete("gasToken");
|
|
73
69
|
console.log(success("Gas token reset to default: STRK"));
|
|
@@ -88,7 +84,6 @@ export function registerConfigCommand(program) {
|
|
|
88
84
|
.description("Show all configuration settings")
|
|
89
85
|
.addHelpText("after", "\nExample:\n $ starkfi config list")
|
|
90
86
|
.action(() => {
|
|
91
|
-
const configService = ConfigService.getInstance();
|
|
92
87
|
const all = configService.getAll();
|
|
93
88
|
if (Object.keys(all).length === 0) {
|
|
94
89
|
console.log(" No custom settings. Using defaults.\n");
|
|
@@ -107,5 +102,13 @@ export function registerConfigCommand(program) {
|
|
|
107
102
|
feeMode: feeModeSummary,
|
|
108
103
|
}));
|
|
109
104
|
});
|
|
105
|
+
configCmd
|
|
106
|
+
.command("reset")
|
|
107
|
+
.description("Reset all configuration to defaults")
|
|
108
|
+
.addHelpText("after", "\nExample:\n $ starkfi config reset")
|
|
109
|
+
.action(() => {
|
|
110
|
+
configService.clear();
|
|
111
|
+
console.log(success("All settings reset to defaults."));
|
|
112
|
+
});
|
|
110
113
|
}
|
|
111
114
|
//# sourceMappingURL=config.js.map
|