fibx 0.5.1 → 0.7.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 +73 -2
- package/dist/index.js +277 -292
- package/dist/index.js.map +1 -1
- package/package.json +13 -14
- package/dist/commands/auth/import.d.ts +0 -3
- package/dist/commands/auth/import.d.ts.map +0 -1
- package/dist/commands/auth/import.js +0 -44
- package/dist/commands/auth/import.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 -13
- package/dist/commands/auth/login.js.map +0 -1
- package/dist/commands/auth/logout.d.ts +0 -3
- package/dist/commands/auth/logout.d.ts.map +0 -1
- package/dist/commands/auth/logout.js +0 -11
- package/dist/commands/auth/logout.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 -30
- package/dist/commands/auth/verify.js.map +0 -1
- package/dist/commands/chain/transaction.d.ts +0 -3
- package/dist/commands/chain/transaction.d.ts.map +0 -1
- package/dist/commands/chain/transaction.js +0 -31
- package/dist/commands/chain/transaction.js.map +0 -1
- package/dist/commands/config/index.d.ts +0 -3
- package/dist/commands/config/index.d.ts.map +0 -1
- package/dist/commands/config/index.js +0 -97
- package/dist/commands/config/index.js.map +0 -1
- package/dist/commands/defi/aave.d.ts +0 -8
- package/dist/commands/defi/aave.d.ts.map +0 -1
- package/dist/commands/defi/aave.js +0 -238
- package/dist/commands/defi/aave.js.map +0 -1
- package/dist/commands/portfolio/index.d.ts +0 -3
- package/dist/commands/portfolio/index.d.ts.map +0 -1
- package/dist/commands/portfolio/index.js +0 -64
- package/dist/commands/portfolio/index.js.map +0 -1
- package/dist/commands/trade/status.d.ts +0 -3
- package/dist/commands/trade/status.d.ts.map +0 -1
- package/dist/commands/trade/status.js +0 -30
- package/dist/commands/trade/status.js.map +0 -1
- package/dist/commands/trade/swap.d.ts +0 -9
- package/dist/commands/trade/swap.d.ts.map +0 -1
- package/dist/commands/trade/swap.js +0 -205
- package/dist/commands/trade/swap.js.map +0 -1
- package/dist/commands/wallet/address.d.ts +0 -3
- package/dist/commands/wallet/address.d.ts.map +0 -1
- package/dist/commands/wallet/address.js +0 -13
- package/dist/commands/wallet/address.js.map +0 -1
- package/dist/commands/wallet/balance.d.ts +0 -3
- package/dist/commands/wallet/balance.d.ts.map +0 -1
- package/dist/commands/wallet/balance.js +0 -73
- package/dist/commands/wallet/balance.js.map +0 -1
- package/dist/commands/wallet/list.d.ts +0 -3
- package/dist/commands/wallet/list.d.ts.map +0 -1
- package/dist/commands/wallet/list.js +0 -22
- package/dist/commands/wallet/list.js.map +0 -1
- package/dist/commands/wallet/send.d.ts +0 -7
- package/dist/commands/wallet/send.d.ts.map +0 -1
- package/dist/commands/wallet/send.js +0 -115
- package/dist/commands/wallet/send.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/brand.d.ts +0 -5
- package/dist/lib/brand.d.ts.map +0 -1
- package/dist/lib/brand.js +0 -15
- package/dist/lib/brand.js.map +0 -1
- package/dist/lib/cache.d.ts +0 -3
- package/dist/lib/cache.d.ts.map +0 -1
- package/dist/lib/cache.js +0 -23
- package/dist/lib/cache.js.map +0 -1
- package/dist/lib/cli-helpers.d.ts +0 -10
- package/dist/lib/cli-helpers.d.ts.map +0 -1
- package/dist/lib/cli-helpers.js +0 -20
- package/dist/lib/cli-helpers.js.map +0 -1
- package/dist/lib/concurrency.d.ts +0 -8
- package/dist/lib/concurrency.d.ts.map +0 -1
- package/dist/lib/concurrency.js +0 -26
- package/dist/lib/concurrency.js.map +0 -1
- package/dist/lib/config.d.ts +0 -7
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -9
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/errors.d.ts +0 -28
- package/dist/lib/errors.d.ts.map +0 -1
- package/dist/lib/errors.js +0 -33
- package/dist/lib/errors.js.map +0 -1
- package/dist/lib/format.d.ts +0 -31
- package/dist/lib/format.d.ts.map +0 -1
- package/dist/lib/format.js +0 -169
- package/dist/lib/format.js.map +0 -1
- package/dist/lib/parse-evm-error.d.ts +0 -6
- package/dist/lib/parse-evm-error.d.ts.map +0 -1
- package/dist/lib/parse-evm-error.js +0 -48
- package/dist/lib/parse-evm-error.js.map +0 -1
- package/dist/lib/parseAmount.d.ts +0 -3
- package/dist/lib/parseAmount.d.ts.map +0 -1
- package/dist/lib/parseAmount.js +0 -9
- package/dist/lib/parseAmount.js.map +0 -1
- package/dist/lib/retry.d.ts +0 -20
- package/dist/lib/retry.d.ts.map +0 -1
- package/dist/lib/retry.js +0 -36
- package/dist/lib/retry.js.map +0 -1
- package/dist/lib/validation.d.ts +0 -6
- package/dist/lib/validation.d.ts.map +0 -1
- package/dist/lib/validation.js +0 -24
- package/dist/lib/validation.js.map +0 -1
- package/dist/mcp/handlers.d.ts +0 -87
- package/dist/mcp/handlers.d.ts.map +0 -1
- package/dist/mcp/handlers.js +0 -394
- package/dist/mcp/handlers.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -2
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -21
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/tools.d.ts +0 -3
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.js +0 -227
- package/dist/mcp/tools.js.map +0 -1
- package/dist/services/api/client.d.ts +0 -34
- package/dist/services/api/client.d.ts.map +0 -1
- package/dist/services/api/client.js +0 -68
- package/dist/services/api/client.js.map +0 -1
- package/dist/services/auth/policy.d.ts +0 -2
- package/dist/services/auth/policy.d.ts.map +0 -1
- package/dist/services/auth/policy.js +0 -3
- package/dist/services/auth/policy.js.map +0 -1
- package/dist/services/auth/session.d.ts +0 -20
- package/dist/services/auth/session.d.ts.map +0 -1
- package/dist/services/auth/session.js +0 -70
- package/dist/services/auth/session.js.map +0 -1
- package/dist/services/chain/client.d.ts +0 -17493
- package/dist/services/chain/client.d.ts.map +0 -1
- package/dist/services/chain/client.js +0 -30
- package/dist/services/chain/client.js.map +0 -1
- package/dist/services/chain/constants.d.ts +0 -163
- package/dist/services/chain/constants.d.ts.map +0 -1
- package/dist/services/chain/constants.js +0 -118
- package/dist/services/chain/constants.js.map +0 -1
- package/dist/services/chain/erc20.d.ts +0 -100
- package/dist/services/chain/erc20.d.ts.map +0 -1
- package/dist/services/chain/erc20.js +0 -117
- package/dist/services/chain/erc20.js.map +0 -1
- package/dist/services/chain/nonceManager.d.ts +0 -13
- package/dist/services/chain/nonceManager.d.ts.map +0 -1
- package/dist/services/chain/nonceManager.js +0 -45
- package/dist/services/chain/nonceManager.js.map +0 -1
- package/dist/services/config/config.d.ts +0 -20
- package/dist/services/config/config.d.ts.map +0 -1
- package/dist/services/config/config.js +0 -75
- package/dist/services/config/config.js.map +0 -1
- package/dist/services/defi/aave.d.ts +0 -50
- package/dist/services/defi/aave.d.ts.map +0 -1
- package/dist/services/defi/aave.js +0 -605
- package/dist/services/defi/aave.js.map +0 -1
- package/dist/services/defi/abi/aave.d.ts +0 -304
- package/dist/services/defi/abi/aave.d.ts.map +0 -1
- package/dist/services/defi/abi/aave.js +0 -194
- package/dist/services/defi/abi/aave.js.map +0 -1
- package/dist/services/defi/constants.d.ts +0 -11
- package/dist/services/defi/constants.d.ts.map +0 -1
- package/dist/services/defi/constants.js +0 -12
- package/dist/services/defi/constants.js.map +0 -1
- package/dist/services/fibrous/abi/base.d.ts +0 -768
- package/dist/services/fibrous/abi/base.d.ts.map +0 -1
- package/dist/services/fibrous/abi/base.js +0 -984
- package/dist/services/fibrous/abi/base.js.map +0 -1
- package/dist/services/fibrous/abi/citrea.d.ts +0 -773
- package/dist/services/fibrous/abi/citrea.d.ts.map +0 -1
- package/dist/services/fibrous/abi/citrea.js +0 -990
- package/dist/services/fibrous/abi/citrea.js.map +0 -1
- package/dist/services/fibrous/abi/hyperevm.d.ts +0 -773
- package/dist/services/fibrous/abi/hyperevm.d.ts.map +0 -1
- package/dist/services/fibrous/abi/hyperevm.js +0 -990
- package/dist/services/fibrous/abi/hyperevm.js.map +0 -1
- package/dist/services/fibrous/abi/monad.d.ts +0 -773
- package/dist/services/fibrous/abi/monad.d.ts.map +0 -1
- package/dist/services/fibrous/abi/monad.js +0 -990
- package/dist/services/fibrous/abi/monad.js.map +0 -1
- package/dist/services/fibrous/balances.d.ts +0 -15
- package/dist/services/fibrous/balances.d.ts.map +0 -1
- package/dist/services/fibrous/balances.js +0 -27
- package/dist/services/fibrous/balances.js.map +0 -1
- package/dist/services/fibrous/health.d.ts +0 -12
- package/dist/services/fibrous/health.d.ts.map +0 -1
- package/dist/services/fibrous/health.js +0 -16
- package/dist/services/fibrous/health.js.map +0 -1
- package/dist/services/fibrous/route.d.ts +0 -48
- package/dist/services/fibrous/route.d.ts.map +0 -1
- package/dist/services/fibrous/route.js +0 -65
- package/dist/services/fibrous/route.js.map +0 -1
- package/dist/services/fibrous/tokens.d.ts +0 -12
- package/dist/services/fibrous/tokens.d.ts.map +0 -1
- package/dist/services/fibrous/tokens.js +0 -38
- package/dist/services/fibrous/tokens.js.map +0 -1
- package/dist/services/portfolio/portfolio.d.ts +0 -28
- package/dist/services/portfolio/portfolio.d.ts.map +0 -1
- package/dist/services/portfolio/portfolio.js +0 -116
- package/dist/services/portfolio/portfolio.js.map +0 -1
- package/dist/services/privy/account.d.ts +0 -20
- package/dist/services/privy/account.d.ts.map +0 -1
- package/dist/services/privy/account.js +0 -60
- package/dist/services/privy/account.js.map +0 -1
- package/dist/services/privy/client.d.ts +0 -2
- package/dist/services/privy/client.d.ts.map +0 -1
- package/dist/services/privy/client.js +0 -7
- package/dist/services/privy/client.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fibx",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "Zero-dependency CLI for DeFi operations on Base, Citrea, HyperEVM, and Monad — powered by Fibrous aggregation, with built-in MCP server for AI agents.",
|
|
5
5
|
"author": "Ahmet Enes Dur",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"dist/"
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "
|
|
22
|
+
"build": "tsup",
|
|
23
23
|
"dev": "node --env-file=.env --import tsx/esm src/index.ts",
|
|
24
24
|
"start": "node dist/index.js",
|
|
25
25
|
"typecheck": "tsc --noEmit",
|
|
@@ -29,27 +29,26 @@
|
|
|
29
29
|
"format:check": "prettier --check .",
|
|
30
30
|
"prepublishOnly": "npm run build"
|
|
31
31
|
},
|
|
32
|
-
"dependencies": {
|
|
33
|
-
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
34
|
-
"chalk": "^5.6.2",
|
|
35
|
-
"commander": "^14.0.3",
|
|
36
|
-
"env-paths": "^3.0.0",
|
|
37
|
-
"inquirer": "^13.3.2",
|
|
38
|
-
"ora": "^9.3.0",
|
|
39
|
-
"viem": "^2.47.5",
|
|
40
|
-
"zod": "^4.3.6"
|
|
41
|
-
},
|
|
42
32
|
"devDependencies": {
|
|
43
33
|
"@eslint/js": "^9.39.4",
|
|
34
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
44
35
|
"@types/inquirer": "^9.0.9",
|
|
45
36
|
"@types/node": "^25.5.0",
|
|
37
|
+
"chalk": "^5.6.2",
|
|
38
|
+
"commander": "^14.0.3",
|
|
39
|
+
"env-paths": "^3.0.0",
|
|
46
40
|
"eslint": "^9.39.4",
|
|
47
41
|
"eslint-config-prettier": "^10.1.8",
|
|
48
42
|
"globals": "^17.4.0",
|
|
43
|
+
"inquirer": "^13.3.2",
|
|
44
|
+
"ora": "^9.3.0",
|
|
49
45
|
"prettier": "^3.8.1",
|
|
46
|
+
"tsup": "^8.5.1",
|
|
50
47
|
"tsx": "^4.21.0",
|
|
51
48
|
"typescript": "^5.9.3",
|
|
52
|
-
"typescript-eslint": "^8.57.1"
|
|
49
|
+
"typescript-eslint": "^8.57.1",
|
|
50
|
+
"viem": "^2.47.5",
|
|
51
|
+
"zod": "^4.3.6"
|
|
53
52
|
},
|
|
54
53
|
"engines": {
|
|
55
54
|
"node": ">=18"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,aAAa,EAClB,MAAM,qBAAqB,CAAC;AAM7B,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C1E"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { createSpinner, outputResult, formatError, warn, } from "../../lib/format.js";
|
|
2
|
-
import { saveSession } from "../../services/auth/session.js";
|
|
3
|
-
import { privateKeyToAccount } from "viem/accounts";
|
|
4
|
-
import inquirer from "inquirer";
|
|
5
|
-
export async function authImportCommand(opts) {
|
|
6
|
-
try {
|
|
7
|
-
const { privateKey } = await inquirer.prompt([
|
|
8
|
-
{
|
|
9
|
-
type: "password",
|
|
10
|
-
name: "privateKey",
|
|
11
|
-
message: "Enter your private key (0x...):",
|
|
12
|
-
validate: (input) => {
|
|
13
|
-
if (!/^0x[a-fA-F0-9]{64}$/.test(input)) {
|
|
14
|
-
return "Invalid private key format. Must start with 0x and be 66 chars long.";
|
|
15
|
-
}
|
|
16
|
-
return true;
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
]);
|
|
20
|
-
const spinner = createSpinner("Importing key...").start();
|
|
21
|
-
const account = privateKeyToAccount(privateKey);
|
|
22
|
-
const address = account.address;
|
|
23
|
-
saveSession({
|
|
24
|
-
userId: "local-user",
|
|
25
|
-
walletAddress: address,
|
|
26
|
-
createdAt: new Date().toISOString(),
|
|
27
|
-
type: "private-key",
|
|
28
|
-
privateKey: privateKey,
|
|
29
|
-
});
|
|
30
|
-
spinner.succeed("Private key imported");
|
|
31
|
-
outputResult({
|
|
32
|
-
address: address,
|
|
33
|
-
type: "private-key",
|
|
34
|
-
message: "You're ready to go!",
|
|
35
|
-
}, opts);
|
|
36
|
-
console.log(warn("Your private key is stored locally in session.json."));
|
|
37
|
-
console.log(warn("Make sure your machine is secure."));
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
console.error(formatError(error));
|
|
41
|
-
process.exitCode = 1;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=import.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/auth/import.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,YAAY,EACZ,WAAW,EACX,IAAI,GAEJ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAmB;IAC1D,IAAI,CAAC;QACJ,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC5C;gBACC,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,iCAAiC;gBAC1C,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC3B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBACxC,OAAO,sEAAsE,CAAC;oBAC/E,CAAC;oBACD,OAAO,IAAI,CAAC;gBACb,CAAC;aACD;SACD,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE1D,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAiB,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAEhC,WAAW,CAAC;YACX,MAAM,EAAE,YAAY;YACpB,aAAa,EAAE,OAAO;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,UAAU;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAExC,YAAY,CACX;YACC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,qBAAqB;SAC9B,EACD,IAAI,CACJ,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGvE,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxF"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { apiLogin } from "../../services/api/client.js";
|
|
2
|
-
import { outputResult } from "../../lib/format.js";
|
|
3
|
-
import { runCommand } from "../../lib/cli-helpers.js";
|
|
4
|
-
export async function authLoginCommand(email, opts) {
|
|
5
|
-
await runCommand("Sending OTP...", "OTP sent", "Failed to send OTP", async () => {
|
|
6
|
-
await apiLogin(email);
|
|
7
|
-
return { email };
|
|
8
|
-
}, (data) => outputResult({
|
|
9
|
-
email: data.email,
|
|
10
|
-
message: `OTP sent to ${email}. Run: fibx auth verify ${email} <code>`,
|
|
11
|
-
}, opts));
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=login.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,EAAsB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,IAAmB;IACxE,MAAM,UAAU,CACf,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,KAAK,IAAI,EAAE;QACV,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,CAAC;IAClB,CAAC,EACD,CAAC,IAAI,EAAE,EAAE,CACR,YAAY,CACX;QACC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,eAAe,KAAK,2BAA2B,KAAK,SAAS;KACtE,EACD,IAAI,CACJ,CACF,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAYvB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { clearSession } from "../../services/auth/session.js";
|
|
3
|
-
import { runCommand } from "../../lib/cli-helpers.js";
|
|
4
|
-
export const logoutCommand = new Command("logout")
|
|
5
|
-
.description("Log out and clear current session")
|
|
6
|
-
.action(async () => {
|
|
7
|
-
await runCommand("Logging out...", "Logged out. Session cleared.", "Logout failed", async () => {
|
|
8
|
-
clearSession();
|
|
9
|
-
}, () => { });
|
|
10
|
-
});
|
|
11
|
-
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAChD,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,UAAU,CACf,gBAAgB,EAChB,8BAA8B,EAC9B,eAAe,EACf,KAAK,IAAI,EAAE;QACV,YAAY,EAAE,CAAC;IAChB,CAAC,EACD,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEnG,wBAAsB,iBAAiB,CACtC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { apiVerify } from "../../services/api/client.js";
|
|
2
|
-
import { saveSession } from "../../services/auth/session.js";
|
|
3
|
-
import { createSpinner, outputResult, formatError } from "../../lib/format.js";
|
|
4
|
-
export async function authVerifyCommand(email, code, opts) {
|
|
5
|
-
const spinner = createSpinner("Verifying OTP...").start();
|
|
6
|
-
try {
|
|
7
|
-
const result = await apiVerify(email, code);
|
|
8
|
-
spinner.text = "Saving session...";
|
|
9
|
-
saveSession({
|
|
10
|
-
userId: result.userId,
|
|
11
|
-
walletId: result.walletId,
|
|
12
|
-
walletAddress: result.walletAddress,
|
|
13
|
-
userJwt: result.token,
|
|
14
|
-
createdAt: new Date().toISOString(),
|
|
15
|
-
type: "privy",
|
|
16
|
-
});
|
|
17
|
-
spinner.succeed(result.isExisting ? "Existing wallet connected" : "New wallet created");
|
|
18
|
-
outputResult({
|
|
19
|
-
walletAddress: result.walletAddress,
|
|
20
|
-
walletId: result.walletId,
|
|
21
|
-
message: "You're ready to go!",
|
|
22
|
-
}, opts);
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
spinner.fail("Verification failed");
|
|
26
|
-
console.error(formatError(error));
|
|
27
|
-
process.exitCode = 1;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=verify.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,aAAa,EAAE,YAAY,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAEnG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,KAAa,EACb,IAAY,EACZ,IAAmB;IAEnB,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5C,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAEnC,WAAW,CAAC;YACX,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,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAExF,YAAY,CACX;YACC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,qBAAqB;SAC9B,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/commands/chain/transaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAG3F,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCtF"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { getPublicClient } from "../../services/chain/client.js";
|
|
2
|
-
import { getChainConfig } from "../../services/chain/constants.js";
|
|
3
|
-
import { outputResult } from "../../lib/format.js";
|
|
4
|
-
import { runCommand } from "../../lib/cli-helpers.js";
|
|
5
|
-
export async function txStatusCommand(hash, opts) {
|
|
6
|
-
await runCommand(`Fetching transaction ${hash.slice(0, 10)}...`, "Transaction fetched", "Failed to fetch transaction", async (spinner) => {
|
|
7
|
-
const globalOpts = opts;
|
|
8
|
-
const chainName = globalOpts.chain || "base";
|
|
9
|
-
const chain = getChainConfig(chainName);
|
|
10
|
-
const publicClient = getPublicClient(chain);
|
|
11
|
-
const txHash = hash;
|
|
12
|
-
spinner.text = "Waiting for receipt...";
|
|
13
|
-
const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
14
|
-
spinner.text =
|
|
15
|
-
receipt.status === "success" ? "Transaction confirmed" : "Transaction reverted";
|
|
16
|
-
const explorerLink = chain.viemChain.blockExplorers?.default.url
|
|
17
|
-
? `${chain.viemChain.blockExplorers.default.url}/tx/${hash}`
|
|
18
|
-
: undefined;
|
|
19
|
-
return {
|
|
20
|
-
status: receipt.status,
|
|
21
|
-
blockNumber: receipt.blockNumber.toString(),
|
|
22
|
-
gasUsed: receipt.gasUsed.toString(),
|
|
23
|
-
from: receipt.from,
|
|
24
|
-
to: receipt.to,
|
|
25
|
-
txHash: hash,
|
|
26
|
-
...(explorerLink ? { explorer: explorerLink } : {}),
|
|
27
|
-
chain: chain.name,
|
|
28
|
-
};
|
|
29
|
-
}, (data) => outputResult(data, opts));
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=transaction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,EAA0C,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAmB;IACtE,MAAM,UAAU,CACf,wBAAwB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAC9C,qBAAqB,EACrB,6BAA6B,EAC7B,KAAK,EAAE,OAAO,EAAE,EAAE;QACjB,MAAM,UAAU,GAAG,IAAgC,CAAC;QACpD,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,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/E,OAAO,CAAC,IAAI;YACX,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,sBAAsB,CAAC;QAEjF,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,SAAS,CAAC;QAEb,OAAO;YACN,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,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC;IACH,CAAC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAClC,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAwGtD"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { configService } from "../../services/config/config.js";
|
|
3
|
-
import { SUPPORTED_CHAINS } from "../../services/chain/constants.js";
|
|
4
|
-
import { success, warn, formatError } from "../../lib/format.js";
|
|
5
|
-
import { BLUE } from "../../lib/brand.js";
|
|
6
|
-
export function registerConfigCommands(program) {
|
|
7
|
-
const configCmd = program
|
|
8
|
-
.command("config")
|
|
9
|
-
.description("Manage fibx configuration (RPC URLs, etc.)");
|
|
10
|
-
configCmd
|
|
11
|
-
.command("set-rpc")
|
|
12
|
-
.description("Set a custom RPC URL for a specific chain")
|
|
13
|
-
.argument("<chain>", "Chain name (base, citrea, hyperevm, monad)")
|
|
14
|
-
.argument("<url>", "RPC URL")
|
|
15
|
-
.addHelpText("after", "\nExamples:\n $ fibx config set-rpc base https://my-rpc.example.com\n $ fibx config set-rpc monad https://rpc.monad.xyz")
|
|
16
|
-
.action((chain, url) => {
|
|
17
|
-
if (!SUPPORTED_CHAINS[chain]) {
|
|
18
|
-
console.error(formatError(new Error(`Unsupported chain: ${chain}`)));
|
|
19
|
-
console.log(chalk.gray(`Supported chains: ${Object.keys(SUPPORTED_CHAINS).join(", ")}`));
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
new URL(url); // Validate URL format
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
console.error(formatError(new Error("Invalid URL format.")));
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
configService.setRpcUrl(chain, url);
|
|
30
|
-
console.log(success(`Updated RPC for ${chain} to: ${url}`));
|
|
31
|
-
});
|
|
32
|
-
configCmd
|
|
33
|
-
.command("get-rpc")
|
|
34
|
-
.description("Get the current RPC URL for a chain")
|
|
35
|
-
.argument("<chain>", "Chain name")
|
|
36
|
-
.action((chain) => {
|
|
37
|
-
const customUrl = configService.getRpcUrl(chain);
|
|
38
|
-
const defaultUrl = SUPPORTED_CHAINS[chain]?.rpcUrl;
|
|
39
|
-
if (!defaultUrl) {
|
|
40
|
-
console.error(formatError(new Error(`Unsupported chain: ${chain}`)));
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
if (customUrl) {
|
|
44
|
-
console.log(chalk.bold("Current (Custom):"), chalk.hex(BLUE)(customUrl));
|
|
45
|
-
console.log(chalk.gray("Default:"), chalk.dim(defaultUrl));
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
console.log(chalk.bold("Current (Default):"), defaultUrl);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
configCmd
|
|
52
|
-
.command("list")
|
|
53
|
-
.description("List all configuration")
|
|
54
|
-
.action(() => {
|
|
55
|
-
const config = configService.getConfig();
|
|
56
|
-
console.log(chalk.bold.hex(BLUE)("\n Custom RPCs"));
|
|
57
|
-
if (Object.keys(config.rpcUrls).length === 0) {
|
|
58
|
-
console.log(chalk.gray(" (None set)"));
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
for (const [chain, url] of Object.entries(config.rpcUrls)) {
|
|
62
|
-
console.log(` ${chalk.white(chain.padEnd(12))} ${chalk.hex(BLUE)(url)}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
console.log("");
|
|
66
|
-
});
|
|
67
|
-
configCmd
|
|
68
|
-
.command("reset-rpc")
|
|
69
|
-
.description("Reset custom RPC URL(s) to default")
|
|
70
|
-
.argument("[chain]", "Chain name (omit to reset all)")
|
|
71
|
-
.action((chain) => {
|
|
72
|
-
if (chain) {
|
|
73
|
-
if (!SUPPORTED_CHAINS[chain]) {
|
|
74
|
-
console.error(formatError(new Error(`Unsupported chain: ${chain}`)));
|
|
75
|
-
console.log(chalk.gray(`Supported chains: ${Object.keys(SUPPORTED_CHAINS).join(", ")}`));
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
const currentUrl = configService.getRpcUrl(chain);
|
|
79
|
-
if (!currentUrl) {
|
|
80
|
-
console.log(warn(`No custom RPC set for ${chain}. Already using default.`));
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
configService.resetRpcUrl(chain);
|
|
84
|
-
console.log(success(`Reset RPC for ${chain} to default.`));
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
const config = configService.getConfig();
|
|
88
|
-
if (Object.keys(config.rpcUrls).length === 0) {
|
|
89
|
-
console.log(warn("No custom RPCs set. Already using defaults."));
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
configService.resetAll();
|
|
93
|
-
console.log(success("All custom RPC URLs have been reset to defaults."));
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
interface GlobalOptions {
|
|
2
|
-
json?: boolean;
|
|
3
|
-
chain?: string;
|
|
4
|
-
simulate?: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare const aaveCommand: (action: string, amount: string, tokenSymbol: string, opts: GlobalOptions) => Promise<void>;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=aave.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aave.d.ts","sourceRoot":"","sources":["../../../src/commands/defi/aave.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,eAAO,MAAM,WAAW,GACvB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,aAAa,MAAM,EACnB,MAAM,aAAa,kBAmGnB,CAAC"}
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { AaveService } from "../../services/defi/aave.js";
|
|
3
|
-
import { getChainConfig } from "../../services/chain/constants.js";
|
|
4
|
-
import { resolveToken } from "../../services/fibrous/tokens.js";
|
|
5
|
-
import { HEALTH_FACTOR_WARNING_THRESHOLD, HEALTH_FACTOR_CRITICAL_THRESHOLD, } from "../../services/defi/constants.js";
|
|
6
|
-
import { createSpinner, outputResult, formatResult, formatError } from "../../lib/format.js";
|
|
7
|
-
import { MINT } from "../../lib/brand.js";
|
|
8
|
-
export const aaveCommand = async (action, amount, tokenSymbol, opts) => {
|
|
9
|
-
const spinner = createSpinner("Initializing Aave service...").start();
|
|
10
|
-
try {
|
|
11
|
-
const chainConfig = getChainConfig("base");
|
|
12
|
-
const aave = new AaveService(chainConfig);
|
|
13
|
-
try {
|
|
14
|
-
await attemptSessionLogin(aave, chainConfig);
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// No session = read-only
|
|
18
|
-
}
|
|
19
|
-
const userAddress = aave.getAccountAddress();
|
|
20
|
-
if (action === "status") {
|
|
21
|
-
if (!userAddress) {
|
|
22
|
-
spinner.fail("No wallet connected. Run `fibx auth login` or `fibx auth import`.");
|
|
23
|
-
process.exitCode = 1;
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
await handleStatus(aave, userAddress, opts, spinner);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
if (action === "markets") {
|
|
30
|
-
await handleMarkets(aave, opts, spinner);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// Write operations require an active wallet session
|
|
34
|
-
if (!userAddress) {
|
|
35
|
-
spinner.fail("No active session found. Please login or import a private key.");
|
|
36
|
-
process.exitCode = 1;
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (!isValidAction(action)) {
|
|
40
|
-
spinner.fail(`Unknown action: ${action}`);
|
|
41
|
-
console.log(chalk.gray("Available actions: status, markets, supply, borrow, repay, withdraw"));
|
|
42
|
-
process.exitCode = 1;
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (!tokenSymbol) {
|
|
46
|
-
spinner.fail(`Token is required for action: ${action}`);
|
|
47
|
-
process.exitCode = 1;
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
if (!amount) {
|
|
51
|
-
spinner.fail(`Amount is required for action: ${action}`);
|
|
52
|
-
process.exitCode = 1;
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
spinner.text = `Resolving token ${tokenSymbol}...`;
|
|
56
|
-
let token = await resolveToken(tokenSymbol, chainConfig);
|
|
57
|
-
if (token.address === chainConfig.nativeTokenAddress) {
|
|
58
|
-
token = {
|
|
59
|
-
...token,
|
|
60
|
-
address: chainConfig.wrappedNativeAddress,
|
|
61
|
-
symbol: "WETH",
|
|
62
|
-
name: "Wrapped Ether",
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
spinner.text = "Interacting with Aave Protocol...";
|
|
66
|
-
switch (action) {
|
|
67
|
-
case "supply":
|
|
68
|
-
await handleSupply(aave, token, amount, spinner, opts);
|
|
69
|
-
break;
|
|
70
|
-
case "borrow":
|
|
71
|
-
await handleBorrow(aave, token, amount, spinner, opts);
|
|
72
|
-
break;
|
|
73
|
-
case "repay":
|
|
74
|
-
await handleRepay(aave, token, amount, spinner, opts);
|
|
75
|
-
break;
|
|
76
|
-
case "withdraw":
|
|
77
|
-
await handleWithdraw(aave, token, amount, spinner, opts, tokenSymbol.toUpperCase() === chainConfig.nativeSymbol);
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
spinner.fail("Aave operation failed");
|
|
83
|
-
console.error(formatError(error));
|
|
84
|
-
process.exitCode = 1;
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
function isValidAction(action) {
|
|
88
|
-
return ["status", "markets", "supply", "borrow", "repay", "withdraw"].includes(action);
|
|
89
|
-
}
|
|
90
|
-
function getExplorerLink(txHash) {
|
|
91
|
-
const chain = getChainConfig("base");
|
|
92
|
-
const baseUrl = chain.viemChain.blockExplorers?.default.url;
|
|
93
|
-
return baseUrl ? `${baseUrl}/tx/${txHash}` : undefined;
|
|
94
|
-
}
|
|
95
|
-
async function attemptSessionLogin(aave, chainConfig) {
|
|
96
|
-
try {
|
|
97
|
-
const { loadSession } = await import("../../services/auth/session.js");
|
|
98
|
-
const { getWalletClient } = await import("../../services/chain/client.js");
|
|
99
|
-
const session = loadSession();
|
|
100
|
-
if (session) {
|
|
101
|
-
const walletClient = getWalletClient(session, chainConfig);
|
|
102
|
-
aave.setWalletClient(walletClient);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// No session
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
async function handleStatus(aave, userAddress, opts, spinner) {
|
|
110
|
-
spinner.text = `Fetching Aave V3 data for ${userAddress.slice(0, 6)}...${userAddress.slice(-4)}...`;
|
|
111
|
-
const data = await aave.getUserAccountData(userAddress);
|
|
112
|
-
spinner.succeed("Position loaded");
|
|
113
|
-
const hf = parseFloat(data.healthFactor);
|
|
114
|
-
let hfColor = chalk.green;
|
|
115
|
-
if (hf < HEALTH_FACTOR_CRITICAL_THRESHOLD)
|
|
116
|
-
hfColor = chalk.red;
|
|
117
|
-
else if (hf < HEALTH_FACTOR_WARNING_THRESHOLD)
|
|
118
|
-
hfColor = chalk.yellow;
|
|
119
|
-
const hfDisplay = hf > 100 ? "Safe (>100)" : hf.toFixed(2);
|
|
120
|
-
if (opts.json) {
|
|
121
|
-
outputResult(data, { json: true });
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
console.log(chalk.bold.hex(MINT)("\n Aave V3 Position (Base)\n"));
|
|
125
|
-
console.log(formatResult({
|
|
126
|
-
healthFactor: hfColor(hfDisplay),
|
|
127
|
-
collateral: `$${parseFloat(data.totalCollateralUSD).toFixed(2)}`,
|
|
128
|
-
debt: `$${parseFloat(data.totalDebtUSD).toFixed(2)}`,
|
|
129
|
-
availableBorrow: `$${parseFloat(data.availableBorrowsUSD).toFixed(2)}`,
|
|
130
|
-
}));
|
|
131
|
-
console.log();
|
|
132
|
-
}
|
|
133
|
-
// Format large numbers compactly
|
|
134
|
-
const fmtNum = (s) => {
|
|
135
|
-
const n = parseFloat(s);
|
|
136
|
-
if (n >= 1_000_000)
|
|
137
|
-
return `${(n / 1_000_000).toFixed(2)}M`;
|
|
138
|
-
if (n >= 1_000)
|
|
139
|
-
return `${(n / 1_000).toFixed(2)}K`;
|
|
140
|
-
return n.toFixed(2);
|
|
141
|
-
};
|
|
142
|
-
async function handleMarkets(aave, opts, spinner) {
|
|
143
|
-
spinner.text = "Fetching Aave V3 markets...";
|
|
144
|
-
const markets = await aave.getMarkets();
|
|
145
|
-
spinner.succeed(`Found ${markets.length} active markets`);
|
|
146
|
-
if (opts.json) {
|
|
147
|
-
outputResult(markets, { json: true });
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
console.log(chalk.bold.hex(MINT)("\n Aave V3 Markets on Base\n"));
|
|
151
|
-
// Table header
|
|
152
|
-
const header = [
|
|
153
|
-
"Token".padEnd(10),
|
|
154
|
-
"Supply APY".padEnd(12),
|
|
155
|
-
"Borrow APY".padEnd(12),
|
|
156
|
-
"Total Supply".padEnd(18),
|
|
157
|
-
"Total Borrow".padEnd(18),
|
|
158
|
-
"LTV".padEnd(8),
|
|
159
|
-
].join(" ");
|
|
160
|
-
console.log(chalk.dim(` ${header}`));
|
|
161
|
-
console.log(chalk.dim(` ${"─".repeat(header.length)}`));
|
|
162
|
-
for (const m of markets) {
|
|
163
|
-
const frozen = m.isFrozen ? chalk.yellow(" ❄") : "";
|
|
164
|
-
const supplyColor = chalk.green;
|
|
165
|
-
const borrowVal = parseFloat(m.borrowAPY);
|
|
166
|
-
const borrowColor = borrowVal > 10 ? chalk.red : borrowVal > 5 ? chalk.yellow : chalk.white;
|
|
167
|
-
const row = [
|
|
168
|
-
chalk.white.bold(m.symbol.padEnd(10)),
|
|
169
|
-
supplyColor(m.supplyAPY.padEnd(12)),
|
|
170
|
-
borrowColor(m.borrowAPY.padEnd(12)),
|
|
171
|
-
chalk.dim(fmtNum(m.totalSupply).padEnd(18)),
|
|
172
|
-
chalk.dim(fmtNum(m.totalBorrow).padEnd(18)),
|
|
173
|
-
chalk.white(m.ltv.padEnd(8)),
|
|
174
|
-
].join(" ");
|
|
175
|
-
console.log(` ${row}${frozen}`);
|
|
176
|
-
}
|
|
177
|
-
console.log();
|
|
178
|
-
}
|
|
179
|
-
async function handleSupply(aave, token, amount, spinner, opts) {
|
|
180
|
-
const txHash = await aave.supplyWithAutoWrap(token.address, amount, (status) => {
|
|
181
|
-
spinner.text = status;
|
|
182
|
-
});
|
|
183
|
-
spinner.succeed("Supply confirmed");
|
|
184
|
-
const explorer = getExplorerLink(txHash);
|
|
185
|
-
outputResult({
|
|
186
|
-
action: "Supply",
|
|
187
|
-
amount,
|
|
188
|
-
token: token.symbol,
|
|
189
|
-
txHash,
|
|
190
|
-
...(explorer ? { explorer } : {}),
|
|
191
|
-
chain: "base",
|
|
192
|
-
}, { json: !!opts.json });
|
|
193
|
-
}
|
|
194
|
-
async function handleBorrow(aave, token, amount, spinner, opts) {
|
|
195
|
-
spinner.text = "Signaling Aave Borrow...";
|
|
196
|
-
const tx = await aave.borrow(token.address, amount);
|
|
197
|
-
spinner.succeed("Borrow confirmed");
|
|
198
|
-
const explorer = getExplorerLink(tx);
|
|
199
|
-
outputResult({
|
|
200
|
-
action: "Borrow",
|
|
201
|
-
amount,
|
|
202
|
-
token: token.symbol,
|
|
203
|
-
txHash: tx,
|
|
204
|
-
...(explorer ? { explorer } : {}),
|
|
205
|
-
chain: "base",
|
|
206
|
-
}, { json: !!opts.json });
|
|
207
|
-
}
|
|
208
|
-
async function handleRepay(aave, token, amount, spinner, opts) {
|
|
209
|
-
const txHash = await aave.repayWithAutoWrap(token.address, amount, (status) => {
|
|
210
|
-
spinner.text = status;
|
|
211
|
-
});
|
|
212
|
-
spinner.succeed("Repay confirmed");
|
|
213
|
-
const explorer = getExplorerLink(txHash);
|
|
214
|
-
outputResult({
|
|
215
|
-
action: "Repay",
|
|
216
|
-
amount: amount === "-1" || amount.toLowerCase() === "max" ? "MAX" : amount,
|
|
217
|
-
token: token.symbol,
|
|
218
|
-
txHash,
|
|
219
|
-
...(explorer ? { explorer } : {}),
|
|
220
|
-
chain: "base",
|
|
221
|
-
}, { json: !!opts.json });
|
|
222
|
-
}
|
|
223
|
-
async function handleWithdraw(aave, token, amount, spinner, opts, isNativeETH = false) {
|
|
224
|
-
const txHash = await aave.withdrawWithAutoUnwrap(token.address, amount, isNativeETH, (status) => {
|
|
225
|
-
spinner.text = status;
|
|
226
|
-
});
|
|
227
|
-
spinner.succeed("Withdraw confirmed");
|
|
228
|
-
const explorer = getExplorerLink(txHash);
|
|
229
|
-
outputResult({
|
|
230
|
-
action: "Withdraw",
|
|
231
|
-
amount,
|
|
232
|
-
token: isNativeETH ? "ETH (unwrapped)" : token.symbol,
|
|
233
|
-
txHash,
|
|
234
|
-
...(explorer ? { explorer } : {}),
|
|
235
|
-
chain: "base",
|
|
236
|
-
}, { json: !!opts.json });
|
|
237
|
-
}
|
|
238
|
-
//# sourceMappingURL=aave.js.map
|