fibx 0.2.4 → 0.3.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.
- package/README.md +38 -164
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +2 -21
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/verify.d.ts.map +1 -1
- package/dist/commands/auth/verify.js +11 -44
- package/dist/commands/auth/verify.js.map +1 -1
- package/dist/commands/defi/aave.d.ts.map +1 -1
- package/dist/commands/defi/aave.js +7 -9
- package/dist/commands/defi/aave.js.map +1 -1
- package/dist/commands/trade/swap.d.ts.map +1 -1
- package/dist/commands/trade/swap.js +20 -9
- package/dist/commands/trade/swap.js.map +1 -1
- package/dist/commands/wallet/balance.js +1 -1
- package/dist/commands/wallet/balance.js.map +1 -1
- package/dist/commands/wallet/list.d.ts +1 -1
- package/dist/commands/wallet/list.d.ts.map +1 -1
- package/dist/commands/wallet/list.js +18 -26
- package/dist/commands/wallet/list.js.map +1 -1
- package/dist/commands/wallet/send.d.ts.map +1 -1
- package/dist/commands/wallet/send.js +6 -7
- package/dist/commands/wallet/send.js.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +3 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +6 -2
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +4 -2
- package/dist/lib/errors.js.map +1 -1
- package/dist/services/api/client.d.ts +34 -0
- package/dist/services/api/client.d.ts.map +1 -0
- package/dist/services/api/client.js +68 -0
- package/dist/services/api/client.js.map +1 -0
- package/dist/services/chain/client.d.ts +17 -18
- package/dist/services/chain/client.d.ts.map +1 -1
- package/dist/services/chain/client.js +6 -6
- package/dist/services/chain/client.js.map +1 -1
- package/dist/services/chain/constants.d.ts +7 -8
- package/dist/services/chain/constants.d.ts.map +1 -1
- package/dist/services/chain/constants.js +11 -8
- package/dist/services/chain/constants.js.map +1 -1
- package/dist/services/chain/nonceManager.d.ts +0 -1
- package/dist/services/chain/nonceManager.d.ts.map +1 -1
- package/dist/services/chain/nonceManager.js +2 -4
- package/dist/services/chain/nonceManager.js.map +1 -1
- package/dist/services/defi/aave.d.ts +6 -1
- package/dist/services/defi/aave.d.ts.map +1 -1
- package/dist/services/defi/aave.js +192 -73
- package/dist/services/defi/aave.js.map +1 -1
- package/dist/services/defi/abi/aave.d.ts +60 -0
- package/dist/services/defi/abi/aave.d.ts.map +1 -1
- package/dist/services/defi/abi/aave.js +41 -0
- package/dist/services/defi/abi/aave.js.map +1 -1
- package/dist/services/defi/constants.d.ts +1 -2
- package/dist/services/defi/constants.d.ts.map +1 -1
- package/dist/services/defi/constants.js +2 -2
- package/dist/services/defi/constants.js.map +1 -1
- package/dist/services/fibrous/abi/citrea.d.ts +772 -63
- package/dist/services/fibrous/abi/citrea.d.ts.map +1 -1
- package/dist/services/fibrous/abi/citrea.js.map +1 -1
- package/dist/services/fibrous/abi/hyperevm.d.ts +772 -63
- package/dist/services/fibrous/abi/hyperevm.d.ts.map +1 -1
- package/dist/services/fibrous/abi/hyperevm.js.map +1 -1
- package/dist/services/fibrous/abi/monad.d.ts +772 -63
- package/dist/services/fibrous/abi/monad.d.ts.map +1 -1
- package/dist/services/fibrous/abi/monad.js.map +1 -1
- package/dist/services/privy/account.d.ts +5 -2
- package/dist/services/privy/account.d.ts.map +1 -1
- package/dist/services/privy/account.js +19 -21
- package/dist/services/privy/account.js.map +1 -1
- package/dist/services/privy/client.d.ts +1 -14
- package/dist/services/privy/client.d.ts.map +1 -1
- package/dist/services/privy/client.js +6 -62
- package/dist/services/privy/client.js.map +1 -1
- package/package.json +1 -2
- package/dist/chain/chains.d.ts +0 -14
- package/dist/chain/chains.d.ts.map +0 -1
- package/dist/chain/chains.js +0 -21
- package/dist/chain/chains.js.map +0 -1
- package/dist/chain/erc20.d.ts +0 -6
- package/dist/chain/erc20.d.ts.map +0 -1
- package/dist/chain/erc20.js +0 -72
- package/dist/chain/erc20.js.map +0 -1
- package/dist/chain/viem.d.ts +0 -24029
- package/dist/chain/viem.d.ts.map +0 -1
- package/dist/chain/viem.js +0 -74
- package/dist/chain/viem.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -85
- package/dist/cli.js.map +0 -1
- package/dist/commands/address.d.ts +0 -3
- package/dist/commands/address.d.ts.map +0 -1
- package/dist/commands/address.js +0 -15
- package/dist/commands/address.js.map +0 -1
- package/dist/commands/auth-login.d.ts +0 -3
- package/dist/commands/auth-login.d.ts.map +0 -1
- package/dist/commands/auth-login.js +0 -34
- package/dist/commands/auth-login.js.map +0 -1
- package/dist/commands/auth-verify.d.ts +0 -3
- package/dist/commands/auth-verify.d.ts.map +0 -1
- package/dist/commands/auth-verify.js +0 -64
- package/dist/commands/auth-verify.js.map +0 -1
- package/dist/commands/balance.d.ts +0 -3
- package/dist/commands/balance.d.ts.map +0 -1
- package/dist/commands/balance.js +0 -55
- package/dist/commands/balance.js.map +0 -1
- package/dist/commands/send.d.ts +0 -3
- package/dist/commands/send.d.ts.map +0 -1
- package/dist/commands/send.js +0 -58
- package/dist/commands/send.js.map +0 -1
- package/dist/commands/status.d.ts +0 -3
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -31
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/trade.d.ts +0 -7
- package/dist/commands/trade.d.ts.map +0 -1
- package/dist/commands/trade.js +0 -69
- package/dist/commands/trade.js.map +0 -1
- package/dist/commands/wallets.d.ts +0 -3
- package/dist/commands/wallets.d.ts.map +0 -1
- package/dist/commands/wallets.js +0 -39
- package/dist/commands/wallets.js.map +0 -1
- package/dist/fibrous/abi/base.d.ts +0 -768
- package/dist/fibrous/abi/base.d.ts.map +0 -1
- package/dist/fibrous/abi/base.js +0 -984
- package/dist/fibrous/abi/base.js.map +0 -1
- package/dist/fibrous/balances.d.ts +0 -14
- package/dist/fibrous/balances.d.ts.map +0 -1
- package/dist/fibrous/balances.js +0 -26
- package/dist/fibrous/balances.js.map +0 -1
- package/dist/fibrous/health.d.ts +0 -11
- package/dist/fibrous/health.d.ts.map +0 -1
- package/dist/fibrous/health.js +0 -18
- package/dist/fibrous/health.js.map +0 -1
- package/dist/fibrous/route.d.ts +0 -47
- package/dist/fibrous/route.d.ts.map +0 -1
- package/dist/fibrous/route.js +0 -60
- package/dist/fibrous/route.js.map +0 -1
- package/dist/fibrous/tokens.d.ts +0 -10
- package/dist/fibrous/tokens.d.ts.map +0 -1
- package/dist/fibrous/tokens.js +0 -37
- package/dist/fibrous/tokens.js.map +0 -1
- package/dist/format/output.d.ts +0 -8
- package/dist/format/output.d.ts.map +0 -1
- package/dist/format/output.js +0 -69
- package/dist/format/output.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -3
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js +0 -23
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/config.d.ts +0 -7
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -8
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -22
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -29
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/parseAmount.d.ts +0 -3
- package/dist/utils/parseAmount.d.ts.map +0 -1
- package/dist/utils/parseAmount.js +0 -10
- package/dist/utils/parseAmount.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -6
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -24
- package/dist/utils/validation.js.map +0 -1
- package/dist/wallet/policy.d.ts +0 -2
- package/dist/wallet/policy.d.ts.map +0 -1
- package/dist/wallet/policy.js +0 -3
- package/dist/wallet/policy.js.map +0 -1
- package/dist/wallet/privy.d.ts +0 -15
- package/dist/wallet/privy.d.ts.map +0 -1
- package/dist/wallet/privy.js +0 -63
- package/dist/wallet/privy.js.map +0 -1
- package/dist/wallet/session.d.ts +0 -15
- package/dist/wallet/session.d.ts.map +0 -1
- package/dist/wallet/session.js +0 -47
- package/dist/wallet/session.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,101 +1,41 @@
|
|
|
1
1
|
# fibx
|
|
2
2
|
|
|
3
|
-
A command-line tool for
|
|
3
|
+
A command-line tool for DeFi operations on **Base, Citrea, HyperEVM, and Monad**, powered by [Fibrous](https://fibrous.finance) aggregation and [Privy](https://privy.io) Server Wallets.
|
|
4
4
|
|
|
5
5
|
[](https://badge.fury.io/js/fibx)
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **Automated Simulation**: All transactions (send, swap, Aave) are simulated on-chain before execution to prevent failures.
|
|
18
|
-
- **JSON Output**: All commands support `--json` for easy integration into scripts and pipelines.
|
|
9
|
+
- **Multi-Chain Support**: Base, Citrea, HyperEVM, and Monad
|
|
10
|
+
- **Token Swaps**: Optimal routing via Fibrous aggregation with auto-slippage
|
|
11
|
+
- **Transfers**: Send ETH or any ERC-20 token
|
|
12
|
+
- **Aave V3**: Supply, borrow, repay, and withdraw on Base
|
|
13
|
+
- **Privy Server Wallets**: Secure server-side signing
|
|
14
|
+
- **Private Key Import**: Use an existing wallet for local execution
|
|
15
|
+
- **Simulation**: All transactions are simulated before execution
|
|
16
|
+
- **JSON Output**: `--json` flag for scripting and pipelines
|
|
19
17
|
|
|
20
18
|
## Requirements
|
|
21
19
|
|
|
22
|
-
- Node.js
|
|
23
|
-
-
|
|
24
|
-
- Privy App ID and Secret (from [dashboard.privy.io](https://dashboard.privy.io))
|
|
20
|
+
- Node.js >= 18
|
|
21
|
+
- A running [fibx-server](https://github.com/ahmetenesdur/fibx-server) instance
|
|
25
22
|
|
|
26
23
|
## Quick Start
|
|
27
24
|
|
|
28
|
-
###
|
|
29
|
-
|
|
30
|
-
You can use `fibx` without installation via `npx`, or install it globally.
|
|
31
|
-
|
|
32
|
-
**Option A: No Installation (Recommended for Agents)**
|
|
25
|
+
### Authentication
|
|
33
26
|
|
|
34
27
|
```bash
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**Option B: Global Install**
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
npm install -g fibx
|
|
42
|
-
fibx <command>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Set your Privy credentials as environment variables:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
export PRIVY_APP_ID="your_app_id"
|
|
49
|
-
export PRIVY_APP_SECRET="your_app_secret"
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 2. Authenticate & Provision Wallet
|
|
53
|
-
|
|
54
|
-
This two-step process links your email to a server-side wallet.
|
|
55
|
-
|
|
56
|
-
**Step 1: Request OTP**
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
npx fibx auth login <email>
|
|
60
|
-
# Example:
|
|
28
|
+
# Email OTP
|
|
61
29
|
npx fibx auth login user@example.com
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**Step 2: Verify & Create Session**
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
npx fibx auth verify <email> <code>
|
|
68
|
-
# Example:
|
|
69
30
|
npx fibx auth verify user@example.com 123456
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
_Successfully verifying will create a local session file and provision a Server Wallet if one doesn't exist._
|
|
73
31
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
If you prefer to use an existing private key (e.g., from Metamask or a generated wallet) instead of Privy:
|
|
77
|
-
|
|
78
|
-
```bash
|
|
32
|
+
# Or import a private key
|
|
79
33
|
npx fibx auth import
|
|
80
|
-
```
|
|
81
34
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
> **Security Note:** Your private key is stored locally on your machine. Ensure your environment is secure.
|
|
85
|
-
|
|
86
|
-
### 4. Logout
|
|
87
|
-
|
|
88
|
-
If you want to clear your local session:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
35
|
+
# Logout
|
|
91
36
|
npx fibx auth logout
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### 5. Check Status
|
|
95
|
-
|
|
96
|
-
Verify that you are authenticated and the API is healthy:
|
|
97
37
|
|
|
98
|
-
|
|
38
|
+
# Check status
|
|
99
39
|
npx fibx status
|
|
100
40
|
```
|
|
101
41
|
|
|
@@ -103,126 +43,60 @@ npx fibx status
|
|
|
103
43
|
|
|
104
44
|
### Global Options
|
|
105
45
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
**Supported Chains:** `base` (default), `citrea`, `hyperevm`, `monad`
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
npx fibx status --chain monad
|
|
112
|
-
```
|
|
46
|
+
Use `-c` or `--chain` to specify the target chain. Default is `base`.
|
|
113
47
|
|
|
114
|
-
|
|
48
|
+
Supported: `base`, `citrea`, `hyperevm`, `monad`
|
|
115
49
|
|
|
116
|
-
|
|
50
|
+
### Balance
|
|
117
51
|
|
|
118
52
|
```bash
|
|
119
53
|
npx fibx balance
|
|
120
54
|
npx fibx balance --chain citrea
|
|
121
55
|
```
|
|
122
56
|
|
|
123
|
-
### Send
|
|
124
|
-
|
|
125
|
-
Transfer ETH or ERC-20 tokens to another address.
|
|
126
|
-
|
|
127
|
-
**Send ETH (Default):**
|
|
57
|
+
### Send
|
|
128
58
|
|
|
129
59
|
```bash
|
|
130
|
-
npx fibx send 0.001
|
|
60
|
+
npx fibx send 0.001 0xRecipient # Send ETH
|
|
61
|
+
npx fibx send 10 0xRecipient USDC # Send ERC-20
|
|
62
|
+
npx fibx send 1 0xRecipient --chain monad # Send on Monad
|
|
131
63
|
```
|
|
132
64
|
|
|
133
|
-
|
|
65
|
+
### Swap
|
|
134
66
|
|
|
135
67
|
```bash
|
|
136
|
-
npx fibx
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### Swap Tokens
|
|
140
|
-
|
|
141
|
-
Swap tokens using Fibrous Finance's aggregator.
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
npx fibx trade <amount> <from_token> <to_token>
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**Examples:**
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
# Swap 0.0001 ETH to USDC
|
|
68
|
+
npx fibx trade <amount> <from> <to>
|
|
151
69
|
npx fibx trade 0.0001 ETH USDC
|
|
152
|
-
|
|
153
|
-
# Swap 20 USDC to DAI on Base
|
|
154
70
|
npx fibx trade 20 USDC DAI
|
|
155
|
-
|
|
156
|
-
# Swap on Monad
|
|
157
71
|
npx fibx trade 1 MON USDC --chain monad
|
|
158
72
|
```
|
|
159
73
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
- `--slippage <number>`: Set slippage tolerance (default: 0.5%)
|
|
163
|
-
- `--approve-max`: Approve maximum amount (infinite approval) instead of exact amount (default: false)
|
|
164
|
-
- `--json`: Output result as JSON
|
|
165
|
-
|
|
166
|
-
### Check Transaction Status
|
|
74
|
+
Options: `--slippage <n>` (default: 0.5%), `--approve-max`, `--json`
|
|
167
75
|
|
|
168
|
-
|
|
76
|
+
### Transaction Status
|
|
169
77
|
|
|
170
78
|
```bash
|
|
171
79
|
npx fibx tx-status <hash>
|
|
172
|
-
|
|
173
|
-
npx fibx tx-status 0x123...abc
|
|
174
|
-
npx fibx tx-status 0x456...def --chain monad
|
|
80
|
+
npx fibx tx-status 0x123...abc --chain monad
|
|
175
81
|
```
|
|
176
82
|
|
|
177
|
-
###
|
|
178
|
-
|
|
179
|
-
Print your connected wallet address (Privy or Local):
|
|
83
|
+
### Wallet Info
|
|
180
84
|
|
|
181
85
|
```bash
|
|
182
|
-
npx fibx address
|
|
86
|
+
npx fibx address # Print wallet address
|
|
87
|
+
npx fibx wallets <email> # List active wallet
|
|
183
88
|
```
|
|
184
89
|
|
|
185
|
-
### Aave V3 (Base
|
|
186
|
-
|
|
187
|
-
Interact with Aave V3 protocols on the Base network.
|
|
90
|
+
### Aave V3 (Base)
|
|
188
91
|
|
|
189
92
|
```bash
|
|
190
|
-
npx fibx aave
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
- `status`: Check account health (HF, LTV)
|
|
196
|
-
- `supply`: Deposit assets
|
|
197
|
-
- `borrow`: Borrow assets (requires collateral)
|
|
198
|
-
- `repay`: Repay debt (use `max` to repay all)
|
|
199
|
-
- `withdraw`: Withdraw assets (use `max` to withdraw all)
|
|
200
|
-
|
|
201
|
-
**Example:**
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
npx fibx aave supply 100 USDC
|
|
93
|
+
npx fibx aave status # Account health
|
|
94
|
+
npx fibx aave supply 100 USDC # Deposit
|
|
95
|
+
npx fibx aave borrow 50 USDC # Borrow
|
|
96
|
+
npx fibx aave repay max USDC # Repay all
|
|
97
|
+
npx fibx aave withdraw max USDC # Withdraw all
|
|
205
98
|
```
|
|
206
99
|
|
|
207
100
|
## Agent Skills
|
|
208
101
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
Check out the [fibx-skills](https://github.com/ahmetenesdur/fibx-skills) directory for:
|
|
212
|
-
|
|
213
|
-
## Development
|
|
214
|
-
|
|
215
|
-
1. Clone the repo
|
|
216
|
-
2. `pnpm install`
|
|
217
|
-
3. `cp .env.example .env` (add secrets)
|
|
218
|
-
4. Run commands with `pnpm dev <command>`
|
|
219
|
-
|
|
220
|
-
# Architecture
|
|
221
|
-
|
|
222
|
-
This CLI uses a **Hybrid Wallet** architecture:
|
|
223
|
-
|
|
224
|
-
1. **Authentication**:
|
|
225
|
-
- **Privy**: Uses "Agentic" server-side wallets (ownerless) for automated signing.
|
|
226
|
-
- **Local Key**: Direct private key import for standard execution without external dependencies.
|
|
227
|
-
2. **Viem**: Handles all blockchain interactions (RPC calls, transaction signing) using a unified `WalletClient` interface, abstracting away the underlying signer (Privy vs. Local).
|
|
228
|
-
3. **Fibrous**: Provides the routing and calldata for optimal token swaps on all supported chains, encapsulated in the `services/fibrous` module.
|
|
102
|
+
For AI agent integration, see the [fibx-skills](./fibx-skills) directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxF"}
|
|
@@ -1,27 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { apiLogin } from "../../services/api/client.js";
|
|
2
2
|
import { outputResult, outputError, withSpinner } from "../../lib/format.js";
|
|
3
3
|
export async function authLoginCommand(email, opts) {
|
|
4
4
|
try {
|
|
5
|
-
|
|
6
|
-
await withSpinner("Sending OTP...", async () => {
|
|
7
|
-
const appId = process.env.PRIVY_APP_ID;
|
|
8
|
-
const appSecret = process.env.PRIVY_APP_SECRET;
|
|
9
|
-
const credentials = Buffer.from(`${appId}:${appSecret}`).toString("base64");
|
|
10
|
-
const res = await fetch("https://auth.privy.io/api/v1/passwordless/init", {
|
|
11
|
-
method: "POST",
|
|
12
|
-
headers: {
|
|
13
|
-
"Content-Type": "application/json",
|
|
14
|
-
Authorization: `Basic ${credentials}`,
|
|
15
|
-
"privy-app-id": appId,
|
|
16
|
-
},
|
|
17
|
-
body: JSON.stringify({ email }),
|
|
18
|
-
});
|
|
19
|
-
if (!res.ok) {
|
|
20
|
-
const body = await res.text().catch(() => "");
|
|
21
|
-
throw new Error(`OTP init failed (${res.status}): ${body}`);
|
|
22
|
-
}
|
|
23
|
-
return res.json();
|
|
24
|
-
}, opts);
|
|
5
|
+
await withSpinner("Sending OTP...", async () => apiLogin(email), opts);
|
|
25
6
|
outputResult({
|
|
26
7
|
email,
|
|
27
8
|
message: `OTP sent to ${email}. Run: fibx auth verify ${email} <code>`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,IAAmB;IACxE,IAAI,CAAC;QACJ,MAAM,WAAW,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAEvE,YAAY,CACX;YACC,KAAK;YACL,OAAO,EAAE,eAAe,KAAK,2BAA2B,KAAK,SAAS;SACtE,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,wBAAsB,iBAAiB,CACtC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
|
@@ -1,56 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { apiVerify } from "../../services/api/client.js";
|
|
2
2
|
import { saveSession } from "../../services/auth/session.js";
|
|
3
3
|
import { outputResult, outputError, withSpinner } from "../../lib/format.js";
|
|
4
4
|
export async function authVerifyCommand(email, code, opts) {
|
|
5
5
|
try {
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const appSecret = process.env.PRIVY_APP_SECRET;
|
|
10
|
-
const credentials = Buffer.from(`${appId}:${appSecret}`).toString("base64");
|
|
11
|
-
const res = await fetch("https://auth.privy.io/api/v1/passwordless/authenticate", {
|
|
12
|
-
method: "POST",
|
|
13
|
-
headers: {
|
|
14
|
-
"Content-Type": "application/json",
|
|
15
|
-
Authorization: `Basic ${credentials}`,
|
|
16
|
-
"privy-app-id": appId,
|
|
17
|
-
},
|
|
18
|
-
body: JSON.stringify({ email, code }),
|
|
19
|
-
});
|
|
20
|
-
if (!res.ok) {
|
|
21
|
-
const body = await res.text().catch(() => "");
|
|
22
|
-
throw new Error(`OTP verify failed (${res.status}): ${body}`);
|
|
23
|
-
}
|
|
24
|
-
const data = (await res.json());
|
|
25
|
-
return { userId: data.user.id, userToken: data.privy_access_token };
|
|
26
|
-
}, opts);
|
|
27
|
-
// Check for existing wallet
|
|
28
|
-
const existingWallet = await withSpinner("Checking for existing wallet...", async () => findExistingWallet(privy, email), opts);
|
|
29
|
-
let wallet;
|
|
30
|
-
let isExisting;
|
|
31
|
-
if (existingWallet) {
|
|
32
|
-
wallet = existingWallet;
|
|
33
|
-
isExisting = true;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
// Create new server wallet
|
|
37
|
-
wallet = await withSpinner("Creating server wallet...", async () => createAgentWallet(privy), opts);
|
|
38
|
-
// Link wallet to user
|
|
39
|
-
await withSpinner("Linking wallet to user...", async () => saveWalletIdToUser(privy, userId, wallet.id), opts);
|
|
40
|
-
isExisting = false;
|
|
41
|
-
}
|
|
6
|
+
// 1. Verify OTP + provision wallet via backend
|
|
7
|
+
const result = await withSpinner("Verifying OTP...", async () => apiVerify(email, code), opts);
|
|
8
|
+
// 2. Save session locally (store backend JWT instead of Privy token)
|
|
42
9
|
await saveSession({
|
|
43
|
-
userId,
|
|
44
|
-
walletId:
|
|
45
|
-
walletAddress:
|
|
46
|
-
userJwt:
|
|
10
|
+
userId: result.userId,
|
|
11
|
+
walletId: result.walletId,
|
|
12
|
+
walletAddress: result.walletAddress,
|
|
13
|
+
userJwt: result.token,
|
|
47
14
|
createdAt: new Date().toISOString(),
|
|
48
15
|
type: "privy",
|
|
49
16
|
});
|
|
50
17
|
outputResult({
|
|
51
|
-
walletAddress:
|
|
52
|
-
walletId:
|
|
53
|
-
message: isExisting
|
|
18
|
+
walletAddress: result.walletAddress,
|
|
19
|
+
walletId: result.walletId,
|
|
20
|
+
message: result.isExisting
|
|
54
21
|
? "Existing wallet found and connected. You're ready to go!"
|
|
55
22
|
: "New wallet created and session saved. You're ready to go!",
|
|
56
23
|
}, opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,KAAa,EACb,IAAY,EACZ,IAAmB;IAEnB,IAAI,CAAC;QACJ,+CAA+C;QAC/C,MAAM,MAAM,GAAG,MAAM,WAAW,CAC/B,kBAAkB,EAClB,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAClC,IAAI,CACJ,CAAC;QAEF,qEAAqE;QACrE,MAAM,WAAW,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,aAAa,EAAE,MAAM,CAAC,aAA8B;YACpD,OAAO,EAAE,MAAM,CAAC,KAAK;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,OAAO;SACb,CAAC,CAAC;QAEH,YAAY,CACX;YACC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,UAAU;gBACzB,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,2DAA2D;SAC9D,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aave.d.ts","sourceRoot":"","sources":["../../../src/commands/defi/aave.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aave.d.ts","sourceRoot":"","sources":["../../../src/commands/defi/aave.ts"],"names":[],"mappings":"AAeA,UAAU,aAAa;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAID,eAAO,MAAM,WAAW,GACvB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,aAAa,MAAM,EACnB,MAAM,aAAa,kBAkGnB,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { AaveService } from "../../services/defi/aave.js";
|
|
|
4
4
|
import { getChainConfig } from "../../services/chain/constants.js";
|
|
5
5
|
import { resolveToken } from "../../services/fibrous/tokens.js";
|
|
6
6
|
import { getBalances } from "../../services/fibrous/balances.js";
|
|
7
|
-
import { HEALTH_FACTOR_WARNING_THRESHOLD, HEALTH_FACTOR_CRITICAL_THRESHOLD,
|
|
7
|
+
import { HEALTH_FACTOR_WARNING_THRESHOLD, HEALTH_FACTOR_CRITICAL_THRESHOLD, } from "../../services/defi/constants.js";
|
|
8
8
|
import { outputError, outputResult } from "../../lib/format.js";
|
|
9
9
|
import { getPublicClient } from "../../services/chain/client.js";
|
|
10
10
|
import { formatUnits, parseUnits } from "viem";
|
|
@@ -14,7 +14,7 @@ export const aaveCommand = async (action, amount, tokenSymbol, opts) => {
|
|
|
14
14
|
// Aave V3 is currently Base-only
|
|
15
15
|
const chainConfig = getChainConfig("base");
|
|
16
16
|
// Initialize Service
|
|
17
|
-
const aave = new AaveService();
|
|
17
|
+
const aave = new AaveService(chainConfig);
|
|
18
18
|
try {
|
|
19
19
|
// Try to load session (Privy or Private Key)
|
|
20
20
|
await attemptSessionLogin(aave, chainConfig);
|
|
@@ -56,7 +56,7 @@ export const aaveCommand = async (action, amount, tokenSymbol, opts) => {
|
|
|
56
56
|
if (token.address === chainConfig.nativeTokenAddress) {
|
|
57
57
|
token = {
|
|
58
58
|
...token,
|
|
59
|
-
address:
|
|
59
|
+
address: chainConfig.wrappedNativeAddress,
|
|
60
60
|
symbol: "WETH",
|
|
61
61
|
name: "Wrapped Ether",
|
|
62
62
|
};
|
|
@@ -64,7 +64,7 @@ export const aaveCommand = async (action, amount, tokenSymbol, opts) => {
|
|
|
64
64
|
spinner.text = "Interacting with Aave Protocol...";
|
|
65
65
|
switch (action) {
|
|
66
66
|
case "supply":
|
|
67
|
-
await handleSupply(aave, token, amount, userAddress, chainConfig, spinner, opts, tokenSymbol.toUpperCase() ===
|
|
67
|
+
await handleSupply(aave, token, amount, userAddress, chainConfig, spinner, opts, tokenSymbol.toUpperCase() === chainConfig.nativeSymbol);
|
|
68
68
|
break;
|
|
69
69
|
case "borrow":
|
|
70
70
|
await handleBorrow(aave, token, amount, spinner, opts);
|
|
@@ -73,7 +73,7 @@ export const aaveCommand = async (action, amount, tokenSymbol, opts) => {
|
|
|
73
73
|
await handleRepay(aave, token, amount, spinner, opts);
|
|
74
74
|
break;
|
|
75
75
|
case "withdraw":
|
|
76
|
-
await handleWithdraw(aave, token, amount, spinner, opts, tokenSymbol.toUpperCase() ===
|
|
76
|
+
await handleWithdraw(aave, token, amount, spinner, opts, tokenSymbol.toUpperCase() === chainConfig.nativeSymbol);
|
|
77
77
|
break;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -89,12 +89,10 @@ function isValidAction(action) {
|
|
|
89
89
|
async function attemptSessionLogin(aave, chainConfig) {
|
|
90
90
|
try {
|
|
91
91
|
const { loadSession } = await import("../../services/auth/session.js");
|
|
92
|
-
const { getPrivyClient } = await import("../../services/privy/client.js");
|
|
93
92
|
const { getWalletClient } = await import("../../services/chain/client.js");
|
|
94
93
|
const session = loadSession();
|
|
95
94
|
if (session) {
|
|
96
|
-
const
|
|
97
|
-
const walletClient = getWalletClient(privy, session, chainConfig);
|
|
95
|
+
const walletClient = getWalletClient(session, chainConfig);
|
|
98
96
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
99
97
|
aave.setWalletClient(walletClient);
|
|
100
98
|
}
|
|
@@ -210,7 +208,7 @@ async function handleWithdraw(aave, token, amount, spinner, opts, isNativeETH =
|
|
|
210
208
|
outputResult({
|
|
211
209
|
action: "Withdraw",
|
|
212
210
|
amount,
|
|
213
|
-
token: isNativeETH ? "ETH" : token.symbol,
|
|
211
|
+
token: isNativeETH ? "ETH (unwrapped)" : token.symbol,
|
|
214
212
|
txHash: tx,
|
|
215
213
|
chain: "base",
|
|
216
214
|
}, { json: !!opts.json });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aave.js","sourceRoot":"","sources":["../../../src/commands/defi/aave.ts"],"names":[],"mappings":"AAAA,OAAO,GAAiB,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAoB,MAAM,mCAAmC,CAAC;AACrF,OAAO,EAAE,YAAY,EAAc,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,OAAO,EACN,+BAA+B,EAC/B,gCAAgC,
|
|
1
|
+
{"version":3,"file":"aave.js","sourceRoot":"","sources":["../../../src/commands/defi/aave.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"AAUA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,UAAU,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,YAAY,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CA0If"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { requireSession } from "../../services/auth/session.js";
|
|
2
|
-
import { getPrivyClient } from "../../services/privy/client.js";
|
|
3
2
|
import { getWalletClient, getPublicClient } from "../../services/chain/client.js";
|
|
4
3
|
import { getChainConfig } from "../../services/chain/constants.js";
|
|
5
4
|
import { getAllowance, encodeApprove } from "../../services/chain/erc20.js";
|
|
@@ -16,14 +15,12 @@ export async function tradeCommand(amount, from, to, opts) {
|
|
|
16
15
|
const chainName = globalOpts.chain || "base";
|
|
17
16
|
const chain = getChainConfig(chainName);
|
|
18
17
|
const session = requireSession();
|
|
19
|
-
const
|
|
20
|
-
const walletClient = getWalletClient(privy, session, chain);
|
|
18
|
+
const walletClient = getWalletClient(session, chain);
|
|
21
19
|
const publicClient = getPublicClient(chain);
|
|
22
20
|
const wallet = session.walletAddress;
|
|
23
21
|
const [tokenIn, tokenOut] = await withSpinner(`Resolving tokens on ${chain.name}...`, async () => Promise.all([resolveToken(from, chain), resolveToken(to, chain)]), opts);
|
|
24
22
|
const amountBaseUnits = parseAmount(amount, tokenIn.decimals);
|
|
25
|
-
const isNativeInput = tokenIn.address.toLowerCase() === chain.nativeTokenAddress.toLowerCase()
|
|
26
|
-
tokenIn.symbol.toUpperCase() === "ETH";
|
|
23
|
+
const isNativeInput = tokenIn.address.toLowerCase() === chain.nativeTokenAddress.toLowerCase();
|
|
27
24
|
const routeData = await withSpinner("Finding best route...", async () => {
|
|
28
25
|
return getRouteAndCallData({
|
|
29
26
|
amount: amountBaseUnits.toString(),
|
|
@@ -39,22 +36,36 @@ export async function tradeCommand(amount, from, to, opts) {
|
|
|
39
36
|
if (currentAllowance < amountBaseUnits) {
|
|
40
37
|
await withSpinner("Approving token spend...", async () => {
|
|
41
38
|
const amountToApprove = opts.approveMax
|
|
42
|
-
? 115792089237316195423570985008687907853269984665640564039457584007913129639935n
|
|
39
|
+
? 115792089237316195423570985008687907853269984665640564039457584007913129639935n
|
|
43
40
|
: amountBaseUnits;
|
|
44
41
|
const approveData = encodeApprove(routerAddress, amountToApprove);
|
|
45
|
-
|
|
42
|
+
const approveTxHash = await walletClient.sendTransaction({
|
|
46
43
|
to: tokenIn.address,
|
|
47
44
|
data: approveData,
|
|
48
45
|
value: 0n,
|
|
49
46
|
});
|
|
47
|
+
await publicClient.waitForTransactionReceipt({
|
|
48
|
+
hash: approveTxHash,
|
|
49
|
+
confirmations: 1,
|
|
50
|
+
});
|
|
51
|
+
// Wait for allowance to be updated on-chain (handle RPC lag)
|
|
52
|
+
let retries = 0;
|
|
53
|
+
const maxRetries = 15; // 30 seconds max
|
|
54
|
+
while (retries < maxRetries) {
|
|
55
|
+
const newAllowance = await getAllowance(publicClient, tokenIn.address, wallet, routerAddress);
|
|
56
|
+
if (newAllowance >= amountToApprove) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
60
|
+
retries++;
|
|
61
|
+
}
|
|
62
|
+
return approveTxHash;
|
|
50
63
|
}, opts);
|
|
51
64
|
}
|
|
52
65
|
}
|
|
53
66
|
const hash = await withSpinner(`Swapping ${amount} ${tokenIn.symbol} → ${tokenOut.symbol}...`, async () => {
|
|
54
67
|
const swapData = encodeSwapCalldata(routeData.calldata, chain);
|
|
55
68
|
const value = isNativeInput ? amountBaseUnits : 0n;
|
|
56
|
-
// Simulate Swap (using estimateGas as we have raw calldata)
|
|
57
|
-
// We use call/estimateGas to ensure it doesn't revert
|
|
58
69
|
try {
|
|
59
70
|
await publicClient.estimateGas({
|
|
60
71
|
account: wallet,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ export async function balanceCommand(opts) {
|
|
|
30
30
|
};
|
|
31
31
|
}, opts);
|
|
32
32
|
const result = {};
|
|
33
|
-
result[
|
|
33
|
+
result[chainConfig.nativeSymbol] = balances.eth;
|
|
34
34
|
for (const item of balances.tokens) {
|
|
35
35
|
const balanceVal = parseFloat(item.balance);
|
|
36
36
|
if (balanceVal > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAmB;IACvD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,WAAW,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC;YAC7E,OAAO;QACR,CAAC;QAED,MAAM,UAAU,GAAG,IAAqC,CAAC;QACzD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC;QAC7C,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,aAAwB,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,MAAM,WAAW,CACjC,wBAAwB,WAAW,CAAC,IAAI,KAAK,EAC7C,KAAK,IAAI,EAAE;YACV,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACrD,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBACtC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC;aAC3C,CAAC,CAAC;YAEH,OAAO;gBACN,GAAG,EAAE,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;gBACjC,MAAM,EAAE,aAAa;aACrB,CAAC;QACH,CAAC,EACD,IAAI,CACJ,CAAC;QAEF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type OutputOptions } from "../../lib/format.js";
|
|
2
|
-
export declare function walletsCommand(
|
|
2
|
+
export declare function walletsCommand(_email: string, opts: OutputOptions): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/list.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/list.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpF,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BvF"}
|