starkfi 0.1.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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/commands/auth/import.d.ts +3 -0
- package/dist/commands/auth/import.d.ts.map +1 -0
- package/dist/commands/auth/import.js +56 -0
- package/dist/commands/auth/import.js.map +1 -0
- package/dist/commands/auth/login.d.ts +3 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +23 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +3 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +14 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/verify.d.ts +3 -0
- package/dist/commands/auth/verify.d.ts.map +1 -0
- package/dist/commands/auth/verify.js +64 -0
- package/dist/commands/auth/verify.js.map +1 -0
- package/dist/commands/chain/tx-status.d.ts +3 -0
- package/dist/commands/chain/tx-status.d.ts.map +1 -0
- package/dist/commands/chain/tx-status.js +39 -0
- package/dist/commands/chain/tx-status.js.map +1 -0
- package/dist/commands/config/config.d.ts +3 -0
- package/dist/commands/config/config.d.ts.map +1 -0
- package/dist/commands/config/config.js +122 -0
- package/dist/commands/config/config.js.map +1 -0
- package/dist/commands/lending/lending.d.ts +8 -0
- package/dist/commands/lending/lending.d.ts.map +1 -0
- package/dist/commands/lending/lending.js +201 -0
- package/dist/commands/lending/lending.js.map +1 -0
- package/dist/commands/staking/staking.d.ts +8 -0
- package/dist/commands/staking/staking.d.ts.map +1 -0
- package/dist/commands/staking/staking.js +272 -0
- package/dist/commands/staking/staking.js.map +1 -0
- package/dist/commands/trade/status.d.ts +3 -0
- package/dist/commands/trade/status.d.ts.map +1 -0
- package/dist/commands/trade/status.js +41 -0
- package/dist/commands/trade/status.js.map +1 -0
- package/dist/commands/trade/swap.d.ts +3 -0
- package/dist/commands/trade/swap.d.ts.map +1 -0
- package/dist/commands/trade/swap.js +65 -0
- package/dist/commands/trade/swap.js.map +1 -0
- package/dist/commands/wallet/address.d.ts +3 -0
- package/dist/commands/wallet/address.d.ts.map +1 -0
- package/dist/commands/wallet/address.js +20 -0
- package/dist/commands/wallet/address.js.map +1 -0
- package/dist/commands/wallet/balance.d.ts +3 -0
- package/dist/commands/wallet/balance.d.ts.map +1 -0
- package/dist/commands/wallet/balance.js +46 -0
- package/dist/commands/wallet/balance.js.map +1 -0
- package/dist/commands/wallet/deploy.d.ts +3 -0
- package/dist/commands/wallet/deploy.d.ts.map +1 -0
- package/dist/commands/wallet/deploy.js +73 -0
- package/dist/commands/wallet/deploy.js.map +1 -0
- package/dist/commands/wallet/send.d.ts +3 -0
- package/dist/commands/wallet/send.d.ts.map +1 -0
- package/dist/commands/wallet/send.js +51 -0
- package/dist/commands/wallet/send.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cache.d.ts +3 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +33 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/command.d.ts +3 -0
- package/dist/lib/command.d.ts.map +1 -0
- package/dist/lib/command.js +6 -0
- package/dist/lib/command.js.map +1 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +30 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +39 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +45 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/format.d.ts +10 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +45 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/validation.d.ts +14 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +28 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/mcp/handlers/auth.d.ts +7 -0
- package/dist/mcp/handlers/auth.d.ts.map +1 -0
- package/dist/mcp/handlers/auth.js +22 -0
- package/dist/mcp/handlers/auth.js.map +1 -0
- package/dist/mcp/handlers/config.d.ts +10 -0
- package/dist/mcp/handlers/config.d.ts.map +1 -0
- package/dist/mcp/handlers/config.js +79 -0
- package/dist/mcp/handlers/config.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +7 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -0
- package/dist/mcp/handlers/index.js +7 -0
- package/dist/mcp/handlers/index.js.map +1 -0
- package/dist/mcp/handlers/lending.d.ts +62 -0
- package/dist/mcp/handlers/lending.d.ts.map +1 -0
- package/dist/mcp/handlers/lending.js +101 -0
- package/dist/mcp/handlers/lending.js.map +1 -0
- package/dist/mcp/handlers/staking.d.ts +56 -0
- package/dist/mcp/handlers/staking.d.ts.map +1 -0
- package/dist/mcp/handlers/staking.js +110 -0
- package/dist/mcp/handlers/staking.js.map +1 -0
- package/dist/mcp/handlers/trade.d.ts +22 -0
- package/dist/mcp/handlers/trade.d.ts.map +1 -0
- package/dist/mcp/handlers/trade.js +57 -0
- package/dist/mcp/handlers/trade.js.map +1 -0
- package/dist/mcp/handlers/utils.d.ts +13 -0
- package/dist/mcp/handlers/utils.d.ts.map +1 -0
- package/dist/mcp/handlers/utils.js +7 -0
- package/dist/mcp/handlers/utils.js.map +1 -0
- package/dist/mcp/handlers/wallet.d.ts +33 -0
- package/dist/mcp/handlers/wallet.d.ts.map +1 -0
- package/dist/mcp/handlers/wallet.js +83 -0
- package/dist/mcp/handlers/wallet.js.map +1 -0
- package/dist/mcp/handlers.d.ts +108 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +325 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +13 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +3 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +156 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/services/api/client.d.ts +26 -0
- package/dist/services/api/client.d.ts.map +1 -0
- package/dist/services/api/client.js +59 -0
- package/dist/services/api/client.js.map +1 -0
- package/dist/services/auth/session.d.ts +22 -0
- package/dist/services/auth/session.d.ts.map +1 -0
- package/dist/services/auth/session.js +36 -0
- package/dist/services/auth/session.js.map +1 -0
- package/dist/services/config/config.d.ts +20 -0
- package/dist/services/config/config.d.ts.map +1 -0
- package/dist/services/config/config.js +49 -0
- package/dist/services/config/config.js.map +1 -0
- package/dist/services/fibrous/balances.d.ts +8 -0
- package/dist/services/fibrous/balances.d.ts.map +1 -0
- package/dist/services/fibrous/balances.js +23 -0
- package/dist/services/fibrous/balances.js.map +1 -0
- package/dist/services/fibrous/health.d.ts +5 -0
- package/dist/services/fibrous/health.d.ts.map +1 -0
- package/dist/services/fibrous/health.js +24 -0
- package/dist/services/fibrous/health.js.map +1 -0
- package/dist/services/fibrous/route.d.ts +42 -0
- package/dist/services/fibrous/route.d.ts.map +1 -0
- package/dist/services/fibrous/route.js +41 -0
- package/dist/services/fibrous/route.js.map +1 -0
- package/dist/services/fibrous/tokens.d.ts +6 -0
- package/dist/services/fibrous/tokens.d.ts.map +1 -0
- package/dist/services/fibrous/tokens.js +34 -0
- package/dist/services/fibrous/tokens.js.map +1 -0
- package/dist/services/staking/staking.d.ts +70 -0
- package/dist/services/staking/staking.d.ts.map +1 -0
- package/dist/services/staking/staking.js +170 -0
- package/dist/services/staking/staking.js.map +1 -0
- package/dist/services/staking/validators.d.ts +6 -0
- package/dist/services/staking/validators.d.ts.map +1 -0
- package/dist/services/staking/validators.js +14 -0
- package/dist/services/staking/validators.js.map +1 -0
- package/dist/services/starkzap/client.d.ts +18 -0
- package/dist/services/starkzap/client.d.ts.map +1 -0
- package/dist/services/starkzap/client.js +65 -0
- package/dist/services/starkzap/client.js.map +1 -0
- package/dist/services/tokens/balances.d.ts +8 -0
- package/dist/services/tokens/balances.d.ts.map +1 -0
- package/dist/services/tokens/balances.js +23 -0
- package/dist/services/tokens/balances.js.map +1 -0
- package/dist/services/tokens/tokens.d.ts +5 -0
- package/dist/services/tokens/tokens.d.ts.map +1 -0
- package/dist/services/tokens/tokens.js +24 -0
- package/dist/services/tokens/tokens.js.map +1 -0
- package/dist/services/vesu/index.d.ts +3 -0
- package/dist/services/vesu/index.d.ts.map +1 -0
- package/dist/services/vesu/index.js +3 -0
- package/dist/services/vesu/index.js.map +1 -0
- package/dist/services/vesu/lending.d.ts +17 -0
- package/dist/services/vesu/lending.d.ts.map +1 -0
- package/dist/services/vesu/lending.js +153 -0
- package/dist/services/vesu/lending.js.map +1 -0
- package/dist/services/vesu/pools.d.ts +13 -0
- package/dist/services/vesu/pools.d.ts.map +1 -0
- package/dist/services/vesu/pools.js +35 -0
- package/dist/services/vesu/pools.js.map +1 -0
- package/package.json +83 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 ahmetenesdur
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# StarkFi
|
|
2
|
+
|
|
3
|
+
A minimalist command-line interface and AI Agent toolkit for DeFi operations on **Starknet**.
|
|
4
|
+
Powered by [StarkZap](https://github.com/keep-starknet-strange/starkzap) SDK, [Fibrous](https://fibrous.finance) aggregation, and [AVNU](https://docs.avnu.fi) Paymaster.
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
StarkFi provides a unified interface for Starknet interactions, designed for both human CLI usage and AI agent workflows (via MCP).
|
|
9
|
+
|
|
10
|
+
- **Optimal Trading:** Aggregated token swaps via Fibrous.
|
|
11
|
+
- **Gas Abstraction:** Default (STRK), Gasfree (developer-sponsored), or Gasless (user pays in USDC/ETH).
|
|
12
|
+
- **Staking Management:** Full lifecycle support for delegation pools (stake, compound, unstake).
|
|
13
|
+
- **Lending & Borrowing:** Supply, withdraw, borrow, and repay via Vesu V2 lending protocol.
|
|
14
|
+
- **AI Integration:** Built-in Model Context Protocol (MCP) server.
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### 1. Authentication
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Via Email OTP (requires starkfi-server)
|
|
22
|
+
npx starkfi auth login user@example.com
|
|
23
|
+
npx starkfi auth verify user@example.com <code>
|
|
24
|
+
|
|
25
|
+
# Or via Private Key (local execution)
|
|
26
|
+
npx starkfi auth import
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. Core Commands
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Authentication & Wallet
|
|
33
|
+
npx starkfi auth login <email> # Email OTP login
|
|
34
|
+
npx starkfi auth verify <email> <code> # Verify OTP
|
|
35
|
+
npx starkfi auth import # Import private key
|
|
36
|
+
npx starkfi auth logout # Clear session
|
|
37
|
+
npx starkfi address # Show active address
|
|
38
|
+
npx starkfi deploy # Deploy account on-chain
|
|
39
|
+
|
|
40
|
+
# Assets & Trading
|
|
41
|
+
npx starkfi balance [token] # Show token balances
|
|
42
|
+
npx starkfi send <amount> <token> <recipient> # Transfer tokens
|
|
43
|
+
npx starkfi trade <amount> <from> <to> # Swap tokens via Fibrous
|
|
44
|
+
|
|
45
|
+
# Staking
|
|
46
|
+
npx starkfi validators # List all validators
|
|
47
|
+
npx starkfi pools <validator> # List delegation pools
|
|
48
|
+
npx starkfi staking-stats # Full staking dashboard
|
|
49
|
+
npx starkfi stake <amount> --pool <pool> # Stake tokens
|
|
50
|
+
npx starkfi rewards --pool <pool> [--claim|--compound] # Manage rewards
|
|
51
|
+
npx starkfi unstake <intent|exit> --pool <pool> [--amount <amount>] # Unstake
|
|
52
|
+
|
|
53
|
+
# Network & Config
|
|
54
|
+
npx starkfi tx-status <hash> # Check tx receipt
|
|
55
|
+
npx starkfi config list # View configuration
|
|
56
|
+
npx starkfi config set-rpc <url> # Set custom RPC
|
|
57
|
+
npx starkfi config set-network <network> # Set network (mainnet/sepolia)
|
|
58
|
+
npx starkfi config set-gasfree <on|off> # Toggle AVNU-sponsored gas
|
|
59
|
+
npx starkfi config set-gas-token <token|off> # Pay gas in ERC-20 (USDC, etc)
|
|
60
|
+
|
|
61
|
+
# Lending (Vesu V2)
|
|
62
|
+
npx starkfi lend-pools # List Vesu lending pools
|
|
63
|
+
npx starkfi lend-pools Genesis # Filter by name
|
|
64
|
+
npx starkfi lend-supply 100 -p Genesis -t STRK # Supply assets to earn interest
|
|
65
|
+
npx starkfi lend-withdraw 50 -p Genesis -t STRK # Withdraw supplied assets
|
|
66
|
+
npx starkfi lend-borrow -p Genesis --collateral-amount 1 --collateral-token ETH --borrow-amount 500 --borrow-token USDC
|
|
67
|
+
npx starkfi lend-repay 250 -p Genesis -t USDC --collateral-token ETH # Repay debt
|
|
68
|
+
npx starkfi lend-status -p Genesis --collateral-token ETH --debt-token USDC
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## AI Native (MCP)
|
|
72
|
+
|
|
73
|
+
StarkFi includes a built-in MCP server, exposing all DeFi capabilities to AI editors like Cursor and Claude.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx starkfi mcp-start
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
> See [MCP.md](MCP.md) for editor configuration and the complete tool registry.
|
|
80
|
+
|
|
81
|
+
## License
|
|
82
|
+
|
|
83
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D5D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
import { createSDK, connectWallet, resolveFeeModeConfig } from "../../services/starkzap/client.js";
|
|
3
|
+
import { saveSession } from "../../services/auth/session.js";
|
|
4
|
+
import { createSpinner, success, formatResult } from "../../lib/format.js";
|
|
5
|
+
import { ConfigService } from "../../services/config/config.js";
|
|
6
|
+
import { getOrCreateAuthCommand } from "../../lib/command.js";
|
|
7
|
+
export function registerImportCommand(program) {
|
|
8
|
+
const authCmd = getOrCreateAuthCommand(program);
|
|
9
|
+
authCmd
|
|
10
|
+
.command("import")
|
|
11
|
+
.description("Import a Stark private key to authenticate")
|
|
12
|
+
.option("-n, --network <network>", "Network (mainnet or sepolia)", "mainnet")
|
|
13
|
+
.action(async (opts) => {
|
|
14
|
+
try {
|
|
15
|
+
const { privateKey } = await inquirer.prompt([
|
|
16
|
+
{
|
|
17
|
+
type: "password",
|
|
18
|
+
name: "privateKey",
|
|
19
|
+
message: "Enter your Stark private key:",
|
|
20
|
+
mask: "*",
|
|
21
|
+
validate: (input) => {
|
|
22
|
+
if (!input || !input.startsWith("0x")) {
|
|
23
|
+
return "Private key must start with 0x";
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
]);
|
|
29
|
+
const network = (opts.network === "sepolia" ? "sepolia" : "mainnet");
|
|
30
|
+
const spinner = createSpinner("Connecting wallet...").start();
|
|
31
|
+
const configService = ConfigService.getInstance();
|
|
32
|
+
const rpcUrl = configService.get("rpcUrl");
|
|
33
|
+
const gasfreeMode = configService.get("gasfreeMode") === true;
|
|
34
|
+
const gasToken = configService.get("gasToken");
|
|
35
|
+
const { needsPaymaster } = resolveFeeModeConfig(gasfreeMode, gasToken);
|
|
36
|
+
const sdk = createSDK(network, rpcUrl, needsPaymaster);
|
|
37
|
+
const wallet = await connectWallet(sdk, {
|
|
38
|
+
type: "local",
|
|
39
|
+
network,
|
|
40
|
+
address: "",
|
|
41
|
+
privateKey,
|
|
42
|
+
});
|
|
43
|
+
await wallet.ensureReady({ deploy: "if_needed" });
|
|
44
|
+
const address = wallet.address.toString();
|
|
45
|
+
saveSession({ type: "local", network, address, privateKey });
|
|
46
|
+
spinner.succeed("Wallet connected");
|
|
47
|
+
console.log(formatResult({ network, address }));
|
|
48
|
+
console.log(success("Session saved. You can now use starkfi commands."));
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error("Import failed:", error instanceof Error ? error.message : error);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/auth/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoB3D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { apiLogin } from "../../services/api/client.js";
|
|
2
|
+
import { createSpinner, success } from "../../lib/format.js";
|
|
3
|
+
import { getOrCreateAuthCommand } from "../../lib/command.js";
|
|
4
|
+
export function registerLoginCommand(program) {
|
|
5
|
+
const authCmd = getOrCreateAuthCommand(program);
|
|
6
|
+
authCmd
|
|
7
|
+
.command("login <email>")
|
|
8
|
+
.description("Send OTP to email for Privy wallet authentication")
|
|
9
|
+
.action(async (email) => {
|
|
10
|
+
try {
|
|
11
|
+
const spinner = createSpinner("Sending OTP...").start();
|
|
12
|
+
await apiLogin(email);
|
|
13
|
+
spinner.succeed("OTP sent");
|
|
14
|
+
console.log(success(`Check your email (${email}) for the code.`));
|
|
15
|
+
console.log(`Run: starkfi auth verify ${email} <code>`);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.error("Login failed:", error instanceof Error ? error.message : error);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACpD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC/B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YAExD,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,SAAS,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAU5D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { clearSession } from "../../services/auth/session.js";
|
|
2
|
+
import { success } from "../../lib/format.js";
|
|
3
|
+
import { getOrCreateAuthCommand } from "../../lib/command.js";
|
|
4
|
+
export function registerLogoutCommand(program) {
|
|
5
|
+
const authCmd = getOrCreateAuthCommand(program);
|
|
6
|
+
authCmd
|
|
7
|
+
.command("logout")
|
|
8
|
+
.description("Clear session and log out")
|
|
9
|
+
.action(() => {
|
|
10
|
+
clearSession();
|
|
11
|
+
console.log(success("Logged out. Session cleared."));
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,GAAG,EAAE;QACZ,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E5D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { apiVerify } from "../../services/api/client.js";
|
|
2
|
+
import { saveSession } from "../../services/auth/session.js";
|
|
3
|
+
import { createSpinner, success, formatResult } from "../../lib/format.js";
|
|
4
|
+
import { STARKFI_API_URL_DEFAULT } from "../../lib/config.js";
|
|
5
|
+
import { createSDK, connectWallet, resolveFeeModeConfig } from "../../services/starkzap/client.js";
|
|
6
|
+
import { ConfigService } from "../../services/config/config.js";
|
|
7
|
+
import { getOrCreateAuthCommand } from "../../lib/command.js";
|
|
8
|
+
export function registerVerifyCommand(program) {
|
|
9
|
+
const authCmd = getOrCreateAuthCommand(program);
|
|
10
|
+
authCmd
|
|
11
|
+
.command("verify <email> <code>")
|
|
12
|
+
.description("Verify OTP and connect Privy wallet")
|
|
13
|
+
.option("-n, --network <network>", "Network (mainnet or sepolia)", "mainnet")
|
|
14
|
+
.action(async (email, code, opts) => {
|
|
15
|
+
try {
|
|
16
|
+
const network = (opts.network === "sepolia" ? "sepolia" : "mainnet");
|
|
17
|
+
const spinner = createSpinner("Verifying OTP...").start();
|
|
18
|
+
const result = await apiVerify(email, code);
|
|
19
|
+
const serverUrl = (process.env.STARKFI_API_URL ?? STARKFI_API_URL_DEFAULT) + "/sign/hash";
|
|
20
|
+
const tempSession = {
|
|
21
|
+
type: "privy",
|
|
22
|
+
network,
|
|
23
|
+
address: result.walletAddress,
|
|
24
|
+
userId: result.userId,
|
|
25
|
+
walletId: result.walletId,
|
|
26
|
+
publicKey: result.walletPublicKey,
|
|
27
|
+
token: result.token,
|
|
28
|
+
serverUrl,
|
|
29
|
+
};
|
|
30
|
+
const configService = ConfigService.getInstance();
|
|
31
|
+
const rpcUrl = configService.get("rpcUrl");
|
|
32
|
+
const gasfreeMode = configService.get("gasfreeMode") === true;
|
|
33
|
+
const gasToken = configService.get("gasToken");
|
|
34
|
+
const { needsPaymaster } = resolveFeeModeConfig(gasfreeMode, gasToken);
|
|
35
|
+
const sdk = createSDK(network, rpcUrl, needsPaymaster);
|
|
36
|
+
const wallet = await connectWallet(sdk, tempSession);
|
|
37
|
+
const actualAddress = wallet.address.toString();
|
|
38
|
+
saveSession({ ...tempSession, address: actualAddress });
|
|
39
|
+
spinner.succeed("Wallet connected");
|
|
40
|
+
console.log(formatResult({
|
|
41
|
+
network,
|
|
42
|
+
address: actualAddress,
|
|
43
|
+
walletId: result.walletId,
|
|
44
|
+
message: result.isExisting
|
|
45
|
+
? "Existing wallet found and connected."
|
|
46
|
+
: "New wallet created and session saved.",
|
|
47
|
+
}));
|
|
48
|
+
console.log(success("Ready. You can now use starkfi commands."));
|
|
49
|
+
if (!result.isExisting) {
|
|
50
|
+
console.log("\n Next steps:\n" +
|
|
51
|
+
" 1. Send some ETH or STRK to your address above\n" +
|
|
52
|
+
" 2. Run: starkfi deploy\n" +
|
|
53
|
+
" 3. Start using: starkfi send, starkfi trade\n\n" +
|
|
54
|
+
" Or enable gasfree mode (no funds needed):\n" +
|
|
55
|
+
" starkfi config set-gasfree on\n");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error("Verification failed:", error instanceof Error ? error.message : error);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-status.d.ts","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuC9D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { requireSession } from "../../services/auth/session.js";
|
|
2
|
+
import { createSDK } from "../../services/starkzap/client.js";
|
|
3
|
+
import { ConfigService } from "../../services/config/config.js";
|
|
4
|
+
import { createSpinner, formatResult } from "../../lib/format.js";
|
|
5
|
+
import { explorerUrl } from "../../lib/config.js";
|
|
6
|
+
export function registerTxStatusCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command("tx-status")
|
|
9
|
+
.description("Check transaction status by hash")
|
|
10
|
+
.argument("<hash>", "Transaction hash (0x...)")
|
|
11
|
+
.action(async (hash) => {
|
|
12
|
+
const spinner = createSpinner("Checking transaction...").start();
|
|
13
|
+
try {
|
|
14
|
+
const session = requireSession();
|
|
15
|
+
const configService = ConfigService.getInstance();
|
|
16
|
+
const rpcUrl = configService.get("rpcUrl");
|
|
17
|
+
const sdk = createSDK(session.network, rpcUrl);
|
|
18
|
+
const provider = sdk.getProvider();
|
|
19
|
+
const receipt = await provider.getTransactionReceipt(hash);
|
|
20
|
+
spinner.succeed("Transaction found");
|
|
21
|
+
const actualFee = "actual_fee" in receipt ? String(receipt.actual_fee) : "N/A";
|
|
22
|
+
const blockNumber = "block_number" in receipt ? String(receipt.block_number) : "pending";
|
|
23
|
+
console.log(formatResult({
|
|
24
|
+
hash,
|
|
25
|
+
status: JSON.stringify(receipt.statusReceipt),
|
|
26
|
+
actualFee,
|
|
27
|
+
blockNumber,
|
|
28
|
+
network: session.network,
|
|
29
|
+
explorer: explorerUrl(hash, session.network),
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
spinner.fail("Failed to get transaction status");
|
|
34
|
+
console.error(error instanceof Error ? error.message : error);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=tx-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-status.js","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACvD,OAAO;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjE,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;YACjE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAE3D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAErC,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/E,MAAM,WAAW,GAChB,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtE,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;gBACZ,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC7C,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;aAC5C,CAAC,CACF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8I5D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { ConfigService } from "../../services/config/config.js";
|
|
2
|
+
import { success, formatResult, warn } from "../../lib/format.js";
|
|
3
|
+
import { GASLESS_SUPPORTED_TOKENS } from "../../lib/config.js";
|
|
4
|
+
export function registerConfigCommand(program) {
|
|
5
|
+
const configCmd = program.command("config").description("Manage starkfi configuration");
|
|
6
|
+
configCmd
|
|
7
|
+
.command("set-rpc")
|
|
8
|
+
.description("Set custom RPC URL for Starknet")
|
|
9
|
+
.argument("<url>", "RPC URL")
|
|
10
|
+
.action((url) => {
|
|
11
|
+
const configService = ConfigService.getInstance();
|
|
12
|
+
configService.set("rpcUrl", url);
|
|
13
|
+
console.log(success(`RPC URL set to: ${url}`));
|
|
14
|
+
});
|
|
15
|
+
configCmd
|
|
16
|
+
.command("get-rpc")
|
|
17
|
+
.description("Show current RPC URL")
|
|
18
|
+
.action(() => {
|
|
19
|
+
const configService = ConfigService.getInstance();
|
|
20
|
+
const rpcUrl = configService.get("rpcUrl");
|
|
21
|
+
console.log(formatResult({
|
|
22
|
+
rpcUrl: rpcUrl || "default (StarkZap preset)",
|
|
23
|
+
}));
|
|
24
|
+
});
|
|
25
|
+
configCmd
|
|
26
|
+
.command("set-network")
|
|
27
|
+
.description("Set default network (mainnet or sepolia)")
|
|
28
|
+
.argument("<network>", "mainnet or sepolia")
|
|
29
|
+
.action((network) => {
|
|
30
|
+
if (!["mainnet", "sepolia"].includes(network)) {
|
|
31
|
+
console.log(warn("Network must be 'mainnet' or 'sepolia'"));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const configService = ConfigService.getInstance();
|
|
35
|
+
configService.set("network", network);
|
|
36
|
+
console.log(success(`Network set to: ${network}`));
|
|
37
|
+
});
|
|
38
|
+
// Gasfree mode: developer sponsors gas via AVNU API key
|
|
39
|
+
configCmd
|
|
40
|
+
.command("set-gasfree")
|
|
41
|
+
.description("Enable/disable Gasfree mode — developer sponsors all gas costs via AVNU Paymaster")
|
|
42
|
+
.argument("<mode>", "on or off")
|
|
43
|
+
.action((mode) => {
|
|
44
|
+
if (!["on", "off"].includes(mode)) {
|
|
45
|
+
console.log(warn("Mode must be 'on' or 'off'"));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const configService = ConfigService.getInstance();
|
|
49
|
+
configService.set("gasfreeMode", mode === "on");
|
|
50
|
+
if (mode === "on") {
|
|
51
|
+
// Gasfree and Gasless are mutually exclusive
|
|
52
|
+
configService.delete("gasToken");
|
|
53
|
+
console.log(success("Gasfree mode: on (developer sponsors gas via AVNU)"));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(success("Gasfree mode: off"));
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// Kept as hidden alias for backwards compatibility
|
|
60
|
+
configCmd
|
|
61
|
+
.command("set-gasless", { hidden: true })
|
|
62
|
+
.description("Alias for set-gasfree (deprecated)")
|
|
63
|
+
.argument("<mode>", "on or off")
|
|
64
|
+
.action((mode) => {
|
|
65
|
+
if (!["on", "off"].includes(mode)) {
|
|
66
|
+
console.log(warn("Mode must be 'on' or 'off'"));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
const configService = ConfigService.getInstance();
|
|
70
|
+
configService.set("gasfreeMode", mode === "on");
|
|
71
|
+
if (mode === "on")
|
|
72
|
+
configService.delete("gasToken");
|
|
73
|
+
console.log(warn("Hint: 'set-gasless' is deprecated. Use 'starkfi config set-gasfree' instead."));
|
|
74
|
+
console.log(success(`Gasfree mode: ${mode}`));
|
|
75
|
+
});
|
|
76
|
+
// Gasless mode: user pays gas in a non-STRK token
|
|
77
|
+
configCmd
|
|
78
|
+
.command("set-gas-token")
|
|
79
|
+
.description(`Set gas payment token for Gasless mode — user pays gas in this token instead of STRK.\nSupported: ${GASLESS_SUPPORTED_TOKENS.join(", ")}\nUse 'off' to disable Gasless mode.`)
|
|
80
|
+
.argument("<token>", `Token symbol or 'off'. Supported: ${GASLESS_SUPPORTED_TOKENS.join(", ")}`)
|
|
81
|
+
.action((token) => {
|
|
82
|
+
const configService = ConfigService.getInstance();
|
|
83
|
+
if (token.toLowerCase() === "off") {
|
|
84
|
+
configService.delete("gasToken");
|
|
85
|
+
console.log(success("Gasless mode disabled — reverting to default STRK gas"));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const upper = token.toUpperCase();
|
|
89
|
+
if (!GASLESS_SUPPORTED_TOKENS.includes(upper)) {
|
|
90
|
+
console.log(warn(`Unsupported token '${token}'. Supported: ${GASLESS_SUPPORTED_TOKENS.join(", ")}`));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
// Gasless and Gasfree are mutually exclusive
|
|
94
|
+
configService.delete("gasfreeMode");
|
|
95
|
+
configService.set("gasToken", upper);
|
|
96
|
+
console.log(success(`Gasless mode: on — gas will be paid in ${upper} (no STRK needed)`));
|
|
97
|
+
});
|
|
98
|
+
configCmd
|
|
99
|
+
.command("list")
|
|
100
|
+
.description("Show all configuration settings")
|
|
101
|
+
.action(() => {
|
|
102
|
+
const configService = ConfigService.getInstance();
|
|
103
|
+
const all = configService.getAll();
|
|
104
|
+
if (Object.keys(all).length === 0) {
|
|
105
|
+
console.log(" No custom settings. Using defaults.\n");
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Human-readable fee mode summary
|
|
109
|
+
const gasfreeMode = all.gasfreeMode === true;
|
|
110
|
+
const gasToken = all.gasToken;
|
|
111
|
+
let feeModeSummary = "default (pays STRK)";
|
|
112
|
+
if (gasfreeMode)
|
|
113
|
+
feeModeSummary = "gasfree (developer-sponsored via AVNU)";
|
|
114
|
+
else if (gasToken)
|
|
115
|
+
feeModeSummary = `gasless (user pays in ${gasToken})`;
|
|
116
|
+
console.log(formatResult({
|
|
117
|
+
...all,
|
|
118
|
+
feeMode: feeModeSummary,
|
|
119
|
+
}));
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
export declare function registerLendPoolsCommand(program: Command): void;
|
|
3
|
+
export declare function registerLendSupplyCommand(program: Command): void;
|
|
4
|
+
export declare function registerLendWithdrawCommand(program: Command): void;
|
|
5
|
+
export declare function registerLendBorrowCommand(program: Command): void;
|
|
6
|
+
export declare function registerLendRepayCommand(program: Command): void;
|
|
7
|
+
export declare function registerLendStatusCommand(program: Command): void;
|
|
8
|
+
//# sourceMappingURL=lending.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lending.d.ts","sourceRoot":"","sources":["../../../src/commands/lending/lending.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuC/D;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoChE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyClE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmDhE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8C/D;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4ChE"}
|