fibx 0.1.2 → 0.1.3
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 +34 -6
- package/dist/commands/chain/transaction.d.ts +3 -0
- package/dist/commands/chain/transaction.d.ts.map +1 -0
- package/dist/commands/chain/transaction.js +31 -0
- package/dist/commands/chain/transaction.js.map +1 -0
- package/dist/commands/trade/status.d.ts.map +1 -1
- package/dist/commands/trade/status.js +4 -3
- package/dist/commands/trade/status.js.map +1 -1
- package/dist/commands/trade/swap.d.ts +1 -0
- package/dist/commands/trade/swap.d.ts.map +1 -1
- package/dist/commands/trade/swap.js +14 -9
- package/dist/commands/trade/swap.js.map +1 -1
- package/dist/commands/wallet/balance.d.ts.map +1 -1
- package/dist/commands/wallet/balance.js +16 -11
- package/dist/commands/wallet/balance.js.map +1 -1
- package/dist/commands/wallet/send.d.ts.map +1 -1
- package/dist/commands/wallet/send.js +7 -8
- package/dist/commands/wallet/send.js.map +1 -1
- package/dist/index.js +17 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +0 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +1 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/services/chain/client.d.ts +123 -15794
- package/dist/services/chain/client.d.ts.map +1 -1
- package/dist/services/chain/client.js +16 -12
- package/dist/services/chain/client.js.map +1 -1
- package/dist/services/chain/constants.d.ts +146 -2
- package/dist/services/chain/constants.d.ts.map +1 -1
- package/dist/services/chain/constants.js +79 -0
- package/dist/services/chain/constants.js.map +1 -1
- package/dist/services/chain/erc20.d.ts +3 -3
- package/dist/services/chain/erc20.d.ts.map +1 -1
- package/dist/services/chain/erc20.js +4 -5
- package/dist/services/chain/erc20.js.map +1 -1
- package/dist/services/fibrous/abi/citrea.d.ts +64 -0
- package/dist/services/fibrous/abi/citrea.d.ts.map +1 -0
- package/dist/services/fibrous/abi/citrea.js +990 -0
- package/dist/services/fibrous/abi/citrea.js.map +1 -0
- package/dist/services/fibrous/abi/hyperevm.d.ts +64 -0
- package/dist/services/fibrous/abi/hyperevm.d.ts.map +1 -0
- package/dist/services/fibrous/abi/hyperevm.js +990 -0
- package/dist/services/fibrous/abi/hyperevm.js.map +1 -0
- package/dist/services/fibrous/abi/monad.d.ts +64 -0
- package/dist/services/fibrous/abi/monad.d.ts.map +1 -0
- package/dist/services/fibrous/abi/monad.js +990 -0
- package/dist/services/fibrous/abi/monad.js.map +1 -0
- package/dist/services/fibrous/balances.d.ts +2 -1
- package/dist/services/fibrous/balances.d.ts.map +1 -1
- package/dist/services/fibrous/balances.js +2 -4
- package/dist/services/fibrous/balances.js.map +1 -1
- package/dist/services/fibrous/health.d.ts +2 -1
- package/dist/services/fibrous/health.d.ts.map +1 -1
- package/dist/services/fibrous/health.js +2 -4
- package/dist/services/fibrous/health.js.map +1 -1
- package/dist/services/fibrous/route.d.ts +3 -2
- package/dist/services/fibrous/route.d.ts.map +1 -1
- package/dist/services/fibrous/route.js +3 -6
- package/dist/services/fibrous/route.js.map +1 -1
- package/dist/services/fibrous/tokens.d.ts +3 -2
- package/dist/services/fibrous/tokens.d.ts.map +1 -1
- package/dist/services/fibrous/tokens.js +5 -7
- package/dist/services/fibrous/tokens.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
# fibx
|
|
2
2
|
|
|
3
|
-
A command-line tool for specialized DeFi operations on **Base**, powered by [Fibrous Finance](https://fibrous.finance) aggregation and [Privy](https://privy.io) Server Wallets.
|
|
3
|
+
A command-line tool for specialized DeFi operations on **Base, Citrea, HyperEVM, and Monad**, powered by [Fibrous Finance](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
9
|
- **Privy Server Wallets**: Uses "Agentic" server-side wallets (ownerless) for seamless, automated signing without user interaction.
|
|
10
|
-
- **
|
|
10
|
+
- **Multi-Chain Support**: seamlessly interact with Base, Citrea, HyperEVM, and Monad.
|
|
11
|
+
- **ETH & Token Transfers**: Send native assets or any ERC-20 token with a simple command.
|
|
11
12
|
- **Fibrous Aggregation**: Execute token swaps with optimal routing and auto-slippage protection.
|
|
13
|
+
- **Transaction Status**: Check the status of any transaction hash and get a block explorer link.
|
|
12
14
|
- **Automated Auth Flow**: One-time email OTP login provisions a persistent server wallet linked to your user profile.
|
|
13
15
|
- **JSON Output**: All commands support `--json` for easy integration into scripts and pipelines.
|
|
14
16
|
|
|
@@ -76,12 +78,23 @@ npx fibx status
|
|
|
76
78
|
|
|
77
79
|
## Usage
|
|
78
80
|
|
|
81
|
+
### Global Options
|
|
82
|
+
|
|
83
|
+
You can specify the target chain for any command using the `-c` or `--chain` flag.
|
|
84
|
+
|
|
85
|
+
**Supported Chains:** `base` (default), `citrea`, `hyperevm`, `monad`
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx fibx status --chain monad
|
|
89
|
+
```
|
|
90
|
+
|
|
79
91
|
### Check Balance
|
|
80
92
|
|
|
81
|
-
View your
|
|
93
|
+
View your balances on the selected chain:
|
|
82
94
|
|
|
83
95
|
```bash
|
|
84
96
|
npx fibx balance
|
|
97
|
+
npx fibx balance --chain citrea
|
|
85
98
|
```
|
|
86
99
|
|
|
87
100
|
### Send Tokens
|
|
@@ -114,15 +127,30 @@ npx fibx trade <amount> <from_token> <to_token>
|
|
|
114
127
|
# Swap 0.0001 ETH to USDC
|
|
115
128
|
npx fibx trade 0.0001 ETH USDC
|
|
116
129
|
|
|
117
|
-
# Swap 20 USDC to DAI
|
|
130
|
+
# Swap 20 USDC to DAI on Base
|
|
118
131
|
npx fibx trade 20 USDC DAI
|
|
132
|
+
|
|
133
|
+
# Swap on Monad
|
|
134
|
+
npx fibx trade 1 MON USDC --chain monad
|
|
119
135
|
```
|
|
120
136
|
|
|
121
137
|
**Options:**
|
|
122
138
|
|
|
123
139
|
- `--slippage <number>`: Set slippage tolerance (default: 0.5%)
|
|
140
|
+
- `--approve-max`: Approve maximum amount (infinite approval) instead of exact amount (default: false)
|
|
124
141
|
- `--json`: Output result as JSON
|
|
125
142
|
|
|
143
|
+
### Check Transaction Status
|
|
144
|
+
|
|
145
|
+
Check the status of a transaction and get the explorer link.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
npx fibx tx-status <hash>
|
|
149
|
+
# Example:
|
|
150
|
+
npx fibx tx-status 0x123...abc
|
|
151
|
+
npx fibx tx-status 0x456...def --chain monad
|
|
152
|
+
```
|
|
153
|
+
|
|
126
154
|
### View Wallet Address
|
|
127
155
|
|
|
128
156
|
Print your connected server wallet address:
|
|
@@ -133,7 +161,7 @@ npx fibx address
|
|
|
133
161
|
|
|
134
162
|
## Agent Skills
|
|
135
163
|
|
|
136
|
-
Looking to use `fibx` with an AI Agent? Check out the [fibx-agentic-wallet-skills](
|
|
164
|
+
Looking to use `fibx` with an AI Agent? Check out the [fibx-agentic-wallet-skills](https://github.com/ahmetenesdur/fibx-agentic-wallet-skills) package.
|
|
137
165
|
|
|
138
166
|
## Development
|
|
139
167
|
|
|
@@ -148,4 +176,4 @@ This CLI uses a **Server Wallet** architecture:
|
|
|
148
176
|
|
|
149
177
|
1. **Privy**: Manages the embedded wallets. We use "Ownerless" wallets (Agents) that are controlled via the Privy App Secret, allowing the CLI to sign transactions programmatically without requiring a user-side browser or JWT.
|
|
150
178
|
2. **Viem**: Handles all blockchain interactions (RPC calls, transaction signing) using a custom Privy-backed account, abstracted in the `services/chain` module.
|
|
151
|
-
3. **Fibrous**: Provides the routing and calldata for optimal token swaps on
|
|
179
|
+
3. **Fibrous**: Provides the routing and calldata for optimal token swaps on all supported chains, encapsulated in the `services/fibrous` module.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/commands/chain/transaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCtF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getPublicClient } from "../../services/chain/client.js";
|
|
2
|
+
import { getChainConfig } from "../../services/chain/constants.js";
|
|
3
|
+
import { outputResult, outputError, withSpinner } from "../../lib/format.js";
|
|
4
|
+
export async function txStatusCommand(hash, opts) {
|
|
5
|
+
try {
|
|
6
|
+
const globalOpts = opts;
|
|
7
|
+
const chainName = globalOpts.chain || "base";
|
|
8
|
+
const chain = getChainConfig(chainName);
|
|
9
|
+
const publicClient = getPublicClient(chain);
|
|
10
|
+
const txHash = hash;
|
|
11
|
+
const receipt = await withSpinner(`Fetching transaction status for ${hash}...`, async () => {
|
|
12
|
+
return publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
13
|
+
}, opts);
|
|
14
|
+
const explorerLink = chain.viemChain.blockExplorers?.default.url
|
|
15
|
+
? `${chain.viemChain.blockExplorers.default.url}/tx/${hash}`
|
|
16
|
+
: "N/A";
|
|
17
|
+
outputResult({
|
|
18
|
+
status: receipt.status,
|
|
19
|
+
blockNumber: receipt.blockNumber.toString(),
|
|
20
|
+
gasUsed: receipt.gasUsed.toString(),
|
|
21
|
+
from: receipt.from,
|
|
22
|
+
to: receipt.to,
|
|
23
|
+
explorerLink,
|
|
24
|
+
chain: chain.name,
|
|
25
|
+
}, opts);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
outputError(error, opts);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/commands/chain/transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAmB;IACtE,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,IAAqC,CAAC;QACzD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC;QAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAExC,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAY,CAAC;QAE5B,MAAM,OAAO,GAAG,MAAM,WAAW,CAChC,mCAAmC,IAAI,KAAK,EAC5C,KAAK,IAAI,EAAE;YACV,OAAO,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC,EACD,IAAI,CACJ,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;YAC/D,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,IAAI,EAAE;YAC5D,CAAC,CAAC,KAAK,CAAC;QAET,YAAY,CACX;YACC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,YAAY;YACZ,KAAK,EAAE,KAAK,CAAC,IAAI;SACjB,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":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtE"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { loadSession } from "../../services/auth/session.js";
|
|
2
2
|
import { checkHealth } from "../../services/fibrous/health.js";
|
|
3
3
|
import { getChainConfig } from "../../services/chain/constants.js";
|
|
4
|
-
import { ACTIVE_NETWORK } from "../../lib/config.js";
|
|
5
4
|
import { outputResult, outputError, withSpinner } from "../../lib/format.js";
|
|
6
5
|
export async function statusCommand(opts) {
|
|
7
6
|
try {
|
|
8
|
-
const
|
|
7
|
+
const globalOpts = opts;
|
|
8
|
+
const chainName = globalOpts.chain || "base";
|
|
9
|
+
const chain = getChainConfig(chainName);
|
|
9
10
|
const session = loadSession();
|
|
10
11
|
const fibrousHealth = await withSpinner("Checking Fibrous API...", async () => {
|
|
11
12
|
try {
|
|
12
|
-
const health = await checkHealth();
|
|
13
|
+
const health = await checkHealth(chain);
|
|
13
14
|
return { ok: true, message: health.message };
|
|
14
15
|
}
|
|
15
16
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/trade/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/trade/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACtD,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,IAAqC,CAAC;QACzD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC;QAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAE9B,MAAM,aAAa,GAAG,MAAM,WAAW,CACtC,yBAAyB,EACzB,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAC9C,CAAC;QACF,CAAC,EACD,IAAI,CACJ,CAAC;QAEF,YAAY,CACX;YACC,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,aAAa,EAAE,CAAC,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,EAAE,aAAa,IAAI,IAAI;YACtC,OAAO,EAAE,aAAa;SACtB,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type OutputOptions } from "../../lib/format.js";
|
|
2
2
|
interface TradeOptions extends OutputOptions {
|
|
3
3
|
slippage: number;
|
|
4
|
+
approveMax?: boolean;
|
|
4
5
|
}
|
|
5
6
|
export declare function tradeCommand(amount: string, from: string, to: string, opts: TradeOptions): Promise<void>;
|
|
6
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,UAAU,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"AAWA,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,CAmGf"}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
import { requireSession } from "../../services/auth/session.js";
|
|
2
2
|
import { getPrivyClient } from "../../services/privy/client.js";
|
|
3
|
-
import { getWalletClient } from "../../services/chain/client.js";
|
|
3
|
+
import { getWalletClient, getPublicClient } from "../../services/chain/client.js";
|
|
4
4
|
import { getChainConfig } from "../../services/chain/constants.js";
|
|
5
5
|
import { getAllowance, encodeApprove } from "../../services/chain/erc20.js";
|
|
6
6
|
import { resolveToken } from "../../services/fibrous/tokens.js";
|
|
7
7
|
import { getRouteAndCallData, encodeSwapCalldata } from "../../services/fibrous/route.js";
|
|
8
|
-
import {
|
|
8
|
+
import { DEFAULT_SLIPPAGE } from "../../lib/config.js";
|
|
9
9
|
import { validateAmount } from "../../lib/validation.js";
|
|
10
10
|
import { parseAmount, formatAmount } from "../../lib/parseAmount.js";
|
|
11
11
|
import { outputResult, outputError, withSpinner } from "../../lib/format.js";
|
|
12
12
|
export async function tradeCommand(amount, from, to, opts) {
|
|
13
13
|
try {
|
|
14
14
|
validateAmount(amount);
|
|
15
|
-
const
|
|
15
|
+
const globalOpts = opts;
|
|
16
|
+
const chainName = globalOpts.chain || "base";
|
|
17
|
+
const chain = getChainConfig(chainName);
|
|
16
18
|
const session = requireSession();
|
|
17
19
|
const privy = getPrivyClient();
|
|
18
20
|
const wallet = session.walletAddress;
|
|
19
|
-
const [tokenIn, tokenOut] = await withSpinner(
|
|
21
|
+
const [tokenIn, tokenOut] = await withSpinner(`Resolving tokens on ${chain.name}...`, async () => Promise.all([resolveToken(from, chain), resolveToken(to, chain)]), opts);
|
|
20
22
|
const amountBaseUnits = parseAmount(amount, tokenIn.decimals);
|
|
21
23
|
const isNativeInput = tokenIn.address.toLowerCase() === chain.nativeTokenAddress.toLowerCase();
|
|
22
24
|
const routeData = await withSpinner("Finding best route...", async () => {
|
|
@@ -26,15 +28,18 @@ export async function tradeCommand(amount, from, to, opts) {
|
|
|
26
28
|
tokenOutAddress: tokenOut.address,
|
|
27
29
|
slippage: opts.slippage ?? DEFAULT_SLIPPAGE,
|
|
28
30
|
destination: wallet,
|
|
29
|
-
});
|
|
31
|
+
}, chain);
|
|
30
32
|
}, opts);
|
|
31
33
|
const routerAddress = routeData.router_address;
|
|
32
|
-
const walletClient = getWalletClient(privy, session);
|
|
34
|
+
const walletClient = getWalletClient(privy, session, chain);
|
|
33
35
|
if (!isNativeInput) {
|
|
34
|
-
const currentAllowance = await getAllowance(tokenIn.address, wallet, routerAddress);
|
|
36
|
+
const currentAllowance = await getAllowance(getPublicClient(chain), tokenIn.address, wallet, routerAddress);
|
|
35
37
|
if (currentAllowance < amountBaseUnits) {
|
|
36
38
|
await withSpinner("Approving token spend...", async () => {
|
|
37
|
-
const
|
|
39
|
+
const amountToApprove = opts.approveMax
|
|
40
|
+
? 115792089237316195423570985008687907853269984665640564039457584007913129639935n // Max Uint256
|
|
41
|
+
: amountBaseUnits;
|
|
42
|
+
const approveData = encodeApprove(routerAddress, amountToApprove);
|
|
38
43
|
return walletClient.sendTransaction({
|
|
39
44
|
to: tokenIn.address,
|
|
40
45
|
data: approveData,
|
|
@@ -44,7 +49,7 @@ export async function tradeCommand(amount, from, to, opts) {
|
|
|
44
49
|
}
|
|
45
50
|
}
|
|
46
51
|
const hash = await withSpinner(`Swapping ${amount} ${tokenIn.symbol} → ${tokenOut.symbol}...`, async () => {
|
|
47
|
-
const swapData = encodeSwapCalldata(routeData.calldata);
|
|
52
|
+
const swapData = encodeSwapCalldata(routeData.calldata, chain);
|
|
48
53
|
return walletClient.sendTransaction({
|
|
49
54
|
to: routerAddress,
|
|
50
55
|
data: swapData,
|
|
@@ -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,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,wBAAsB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DvE"}
|
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { loadSession } from "../../services/auth/session.js";
|
|
2
|
+
import { getPublicClient } from "../../services/chain/client.js";
|
|
3
3
|
import { getChainConfig } from "../../services/chain/constants.js";
|
|
4
|
-
import { ACTIVE_NETWORK } from "../../lib/config.js";
|
|
5
4
|
import { getTokens } from "../../services/fibrous/tokens.js";
|
|
6
5
|
import { getBalances } from "../../services/fibrous/balances.js";
|
|
7
6
|
import { formatAmount } from "../../lib/parseAmount.js";
|
|
8
7
|
import { outputResult, outputError, withSpinner } from "../../lib/format.js";
|
|
9
8
|
export async function balanceCommand(opts) {
|
|
10
9
|
try {
|
|
11
|
-
const
|
|
12
|
-
|
|
10
|
+
const session = loadSession();
|
|
11
|
+
if (!session) {
|
|
12
|
+
outputError("No active session. Run 'fibx auth login <email>' first.", opts);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const globalOpts = opts;
|
|
16
|
+
const chainName = globalOpts.chain || "base";
|
|
17
|
+
const chainConfig = getChainConfig(chainName);
|
|
18
|
+
const client = getPublicClient(chainConfig);
|
|
13
19
|
const wallet = session.walletAddress;
|
|
14
|
-
const tokensMap = await getTokens();
|
|
20
|
+
const tokensMap = await getTokens(chainConfig);
|
|
15
21
|
const tokenList = Object.values(tokensMap);
|
|
16
|
-
const balances = await withSpinner(
|
|
22
|
+
const balances = await withSpinner(`Fetching balances on ${chainConfig.name}...`, async () => {
|
|
17
23
|
const [ethBalance, tokenBalances] = await Promise.all([
|
|
18
|
-
|
|
19
|
-
getBalances(tokenList, wallet),
|
|
24
|
+
client.getBalance({ address: wallet }),
|
|
25
|
+
getBalances(tokenList, wallet, chainConfig),
|
|
20
26
|
]);
|
|
21
27
|
return {
|
|
22
28
|
eth: formatAmount(ethBalance, 18),
|
|
@@ -24,7 +30,6 @@ export async function balanceCommand(opts) {
|
|
|
24
30
|
};
|
|
25
31
|
}, opts);
|
|
26
32
|
const result = {};
|
|
27
|
-
// Always show ETH first
|
|
28
33
|
result["ETH"] = balances.eth;
|
|
29
34
|
for (const item of balances.tokens) {
|
|
30
35
|
const balanceVal = parseFloat(item.balance);
|
|
@@ -37,7 +42,7 @@ export async function balanceCommand(opts) {
|
|
|
37
42
|
}
|
|
38
43
|
outputResult({
|
|
39
44
|
wallet: session.walletAddress,
|
|
40
|
-
chain:
|
|
45
|
+
chain: chainConfig.name,
|
|
41
46
|
...result,
|
|
42
47
|
}, opts);
|
|
43
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
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,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;gBAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEhD,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/B,CAAC;QACF,CAAC;QAED,YAAY,CACX;YACC,MAAM,EAAE,OAAO,CAAC,aAAa;YAC7B,KAAK,EAAE,WAAW,CAAC,IAAI;YACvB,GAAG,MAAM;SACT,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":"send.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"AASA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,wBAAsB,WAAW,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,CA6Df"}
|
|
@@ -3,7 +3,6 @@ import { getPrivyClient } from "../../services/privy/client.js";
|
|
|
3
3
|
import { getWalletClient } from "../../services/chain/client.js";
|
|
4
4
|
import { getChainConfig } from "../../services/chain/constants.js";
|
|
5
5
|
import { encodeTransfer } from "../../services/chain/erc20.js";
|
|
6
|
-
import { ACTIVE_NETWORK } from "../../lib/config.js";
|
|
7
6
|
import { resolveToken } from "../../services/fibrous/tokens.js";
|
|
8
7
|
import { validateAddress, validateAmount } from "../../lib/validation.js";
|
|
9
8
|
import { parseAmount } from "../../lib/parseAmount.js";
|
|
@@ -12,17 +11,18 @@ export async function sendCommand(amount, recipient, tokenSymbol, opts) {
|
|
|
12
11
|
try {
|
|
13
12
|
validateAmount(amount);
|
|
14
13
|
validateAddress(recipient);
|
|
15
|
-
const
|
|
14
|
+
const globalOpts = opts;
|
|
15
|
+
const chainName = globalOpts.chain || "base";
|
|
16
|
+
const chain = getChainConfig(chainName);
|
|
16
17
|
const session = requireSession();
|
|
17
18
|
const privy = getPrivyClient();
|
|
18
|
-
const walletClient = getWalletClient(privy, session);
|
|
19
|
+
const walletClient = getWalletClient(privy, session, chain);
|
|
19
20
|
let txHash;
|
|
20
21
|
let amountBigInt;
|
|
21
22
|
const isEth = tokenSymbol.toUpperCase() === "ETH";
|
|
22
23
|
if (isEth) {
|
|
23
|
-
// Native ETH Transfer
|
|
24
24
|
amountBigInt = parseAmount(amount, 18);
|
|
25
|
-
txHash = await withSpinner(`Sending ${amount} ETH...`, async () => {
|
|
25
|
+
txHash = await withSpinner(`Sending ${amount} ETH on ${chain.name}...`, async () => {
|
|
26
26
|
return walletClient.sendTransaction({
|
|
27
27
|
to: recipient,
|
|
28
28
|
value: amountBigInt,
|
|
@@ -31,11 +31,10 @@ export async function sendCommand(amount, recipient, tokenSymbol, opts) {
|
|
|
31
31
|
}, opts);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
|
-
|
|
35
|
-
const token = await resolveToken(tokenSymbol);
|
|
34
|
+
const token = await resolveToken(tokenSymbol, chain);
|
|
36
35
|
amountBigInt = parseAmount(amount, token.decimals);
|
|
37
36
|
const data = encodeTransfer(recipient, amountBigInt);
|
|
38
|
-
txHash = await withSpinner(`Sending ${amount} ${token.symbol}...`, async () => {
|
|
37
|
+
txHash = await withSpinner(`Sending ${amount} ${token.symbol} on ${chain.name}...`, async () => {
|
|
39
38
|
return walletClient.sendTransaction({
|
|
40
39
|
to: token.address,
|
|
41
40
|
data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,MAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,IAAmB;IAEnB,IAAI,CAAC;QACJ,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3B,MAAM,UAAU,GAAG,IAAqC,CAAC;QACzD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC;QAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAE5D,IAAI,MAAqB,CAAC;QAC1B,IAAI,YAAoB,CAAC;QACzB,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;QAElD,IAAI,KAAK,EAAE,CAAC;YACX,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,GAAG,MAAM,WAAW,CACzB,WAAW,MAAM,WAAW,KAAK,CAAC,IAAI,KAAK,EAC3C,KAAK,IAAI,EAAE;gBACV,OAAO,YAAY,CAAC,eAAe,CAAC;oBACnC,EAAE,EAAE,SAAoB;oBACxB,KAAK,EAAE,YAAY;oBACnB,IAAI,EAAE,SAAS;iBACf,CAAC,CAAC;YACJ,CAAC,EACD,IAAI,CACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACrD,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,cAAc,CAAC,SAAoB,EAAE,YAAY,CAAC,CAAC;YAEhE,MAAM,GAAG,MAAM,WAAW,CACzB,WAAW,MAAM,IAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,EACvD,KAAK,IAAI,EAAE;gBACV,OAAO,YAAY,CAAC,eAAe,CAAC;oBACnC,EAAE,EAAE,KAAK,CAAC,OAAkB;oBAC5B,IAAI;oBACJ,KAAK,EAAE,EAAE;iBACT,CAAC,CAAC;YACJ,CAAC,EACD,IAAI,CACJ,CAAC;QACH,CAAC;QAED,YAAY,CACX;YACC,MAAM;YACN,MAAM;YACN,SAAS;YACT,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;YAChD,KAAK,EAAE,KAAK,CAAC,IAAI;SACjB,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,11 +8,13 @@ import { balanceCommand } from "./commands/wallet/balance.js";
|
|
|
8
8
|
import { sendCommand } from "./commands/wallet/send.js";
|
|
9
9
|
import { tradeCommand } from "./commands/trade/swap.js";
|
|
10
10
|
import { walletsCommand } from "./commands/wallet/list.js";
|
|
11
|
+
import { txStatusCommand } from "./commands/chain/transaction.js";
|
|
11
12
|
const program = new Command();
|
|
12
13
|
program
|
|
13
14
|
.name("fibx")
|
|
14
15
|
.description("Fibrous DeFi CLI — wallet, transfer, swap")
|
|
15
|
-
.version("0.1.
|
|
16
|
+
.version("0.1.3")
|
|
17
|
+
.option("-c, --chain <chain>", "Chain to use (base, citrea, hyperevm, monad)", "base")
|
|
16
18
|
.option("--json", "Output results as JSON", false);
|
|
17
19
|
const auth = program.command("auth").description("Authentication commands");
|
|
18
20
|
auth.command("login")
|
|
@@ -35,7 +37,15 @@ program
|
|
|
35
37
|
.description("Check auth status and Fibrous health")
|
|
36
38
|
.action(async (_opts, cmd) => {
|
|
37
39
|
const globalOpts = cmd.parent.opts();
|
|
38
|
-
await statusCommand({ json: globalOpts.json });
|
|
40
|
+
await statusCommand({ ...globalOpts, json: globalOpts.json });
|
|
41
|
+
});
|
|
42
|
+
program
|
|
43
|
+
.command("tx-status")
|
|
44
|
+
.description("Check transaction status and receipt")
|
|
45
|
+
.argument("<hash>", "Transaction hash (0x...)")
|
|
46
|
+
.action(async (hash, _opts, cmd) => {
|
|
47
|
+
const globalOpts = cmd.parent.opts();
|
|
48
|
+
await txStatusCommand(hash, { ...globalOpts, json: globalOpts.json });
|
|
39
49
|
});
|
|
40
50
|
program
|
|
41
51
|
.command("wallets")
|
|
@@ -55,7 +65,7 @@ program
|
|
|
55
65
|
.description("Show ETH and USDC balances")
|
|
56
66
|
.action(async (_opts, cmd) => {
|
|
57
67
|
const globalOpts = cmd.parent.opts();
|
|
58
|
-
await balanceCommand({ json: globalOpts.json });
|
|
68
|
+
await balanceCommand({ ...globalOpts, json: globalOpts.json });
|
|
59
69
|
});
|
|
60
70
|
program
|
|
61
71
|
.command("send")
|
|
@@ -65,7 +75,7 @@ program
|
|
|
65
75
|
.argument("[token]", "Token symbol or address", "ETH")
|
|
66
76
|
.action(async (amount, recipient, token, _opts, cmd) => {
|
|
67
77
|
const globalOpts = cmd.parent.opts();
|
|
68
|
-
await sendCommand(amount, recipient, token, { json: globalOpts.json });
|
|
78
|
+
await sendCommand(amount, recipient, token, { ...globalOpts, json: globalOpts.json });
|
|
69
79
|
});
|
|
70
80
|
program
|
|
71
81
|
.command("trade")
|
|
@@ -74,11 +84,14 @@ program
|
|
|
74
84
|
.argument("<from>", "Source token (symbol or address)")
|
|
75
85
|
.argument("<to>", "Destination token (symbol or address)")
|
|
76
86
|
.option("-s, --slippage <number>", "Slippage tolerance", "0.5")
|
|
87
|
+
.option("--approve-max", "Approve maximum amount instead of exact amount", false)
|
|
77
88
|
.action(async (amount, from, to, opts, cmd) => {
|
|
78
89
|
const globalOpts = cmd.parent.opts();
|
|
79
90
|
await tradeCommand(amount, from, to, {
|
|
91
|
+
...globalOpts,
|
|
80
92
|
json: globalOpts.json,
|
|
81
93
|
slippage: parseFloat(opts.slippage),
|
|
94
|
+
approveMax: opts.approveMax,
|
|
82
95
|
});
|
|
83
96
|
});
|
|
84
97
|
program.parseAsync();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare const paths: import("env-paths").Paths;
|
|
2
|
-
export declare const ACTIVE_NETWORK = "base";
|
|
3
2
|
export declare const FIBROUS_BASE_URL = "https://api.fibrous.finance";
|
|
4
3
|
export declare const FIBROUS_GRAPH_URL = "https://graph.fibrous.finance";
|
|
5
4
|
export declare const DEFAULT_SLIPPAGE = 0.5;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,2BAAmB,CAAC;AAEtC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,2BAAmB,CAAC;AAEtC,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAC9D,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AAEjE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,kBAAkB,QAAsB,CAAC"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import envPaths from "env-paths";
|
|
2
2
|
export const paths = envPaths("fibx");
|
|
3
|
-
export const ACTIVE_NETWORK = "base";
|
|
4
3
|
export const FIBROUS_BASE_URL = "https://api.fibrous.finance";
|
|
5
4
|
export const FIBROUS_GRAPH_URL = "https://graph.fibrous.finance";
|
|
6
5
|
export const DEFAULT_SLIPPAGE = 0.5;
|
|
7
|
-
export const TOKEN_CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
6
|
+
export const TOKEN_CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
8
7
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAEjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
|