@cyberdrk/onchain 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 +135 -0
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +43 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +7 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +96 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/shared.d.ts +35 -0
- package/dist/cli/shared.d.ts.map +1 -0
- package/dist/cli/shared.js +120 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/balance.d.ts +4 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +141 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/binance.d.ts +4 -0
- package/dist/commands/binance.d.ts.map +1 -0
- package/dist/commands/binance.js +129 -0
- package/dist/commands/binance.js.map +1 -0
- package/dist/commands/coinbase.d.ts +4 -0
- package/dist/commands/coinbase.d.ts.map +1 -0
- package/dist/commands/coinbase.js +122 -0
- package/dist/commands/coinbase.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +90 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/history.d.ts +4 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +124 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/markets.d.ts +4 -0
- package/dist/commands/markets.d.ts.map +1 -0
- package/dist/commands/markets.js +59 -0
- package/dist/commands/markets.js.map +1 -0
- package/dist/commands/polymarket.d.ts +4 -0
- package/dist/commands/polymarket.d.ts.map +1 -0
- package/dist/commands/polymarket.js +180 -0
- package/dist/commands/polymarket.js.map +1 -0
- package/dist/commands/portfolio.d.ts +4 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +162 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/price.d.ts +4 -0
- package/dist/commands/price.d.ts.map +1 -0
- package/dist/commands/price.js +95 -0
- package/dist/commands/price.js.map +1 -0
- package/dist/commands/setup.d.ts +4 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +47 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/test.d.ts +4 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +198 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/browser-scraper.d.ts +39 -0
- package/dist/lib/browser-scraper.d.ts.map +1 -0
- package/dist/lib/browser-scraper.js +214 -0
- package/dist/lib/browser-scraper.js.map +1 -0
- package/dist/lib/config.d.ts +19 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +52 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/credentials.d.ts +23 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +49 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/mixins/binance.d.ts +12 -0
- package/dist/lib/mixins/binance.d.ts.map +1 -0
- package/dist/lib/mixins/binance.js +167 -0
- package/dist/lib/mixins/binance.js.map +1 -0
- package/dist/lib/mixins/coinbase.d.ts +11 -0
- package/dist/lib/mixins/coinbase.d.ts.map +1 -0
- package/dist/lib/mixins/coinbase.js +266 -0
- package/dist/lib/mixins/coinbase.js.map +1 -0
- package/dist/lib/mixins/coingecko.d.ts +10 -0
- package/dist/lib/mixins/coingecko.d.ts.map +1 -0
- package/dist/lib/mixins/coingecko.js +217 -0
- package/dist/lib/mixins/coingecko.js.map +1 -0
- package/dist/lib/mixins/coinmarketcap.d.ts +9 -0
- package/dist/lib/mixins/coinmarketcap.d.ts.map +1 -0
- package/dist/lib/mixins/coinmarketcap.js +142 -0
- package/dist/lib/mixins/coinmarketcap.js.map +1 -0
- package/dist/lib/mixins/debank.d.ts +21 -0
- package/dist/lib/mixins/debank.d.ts.map +1 -0
- package/dist/lib/mixins/debank.js +280 -0
- package/dist/lib/mixins/debank.js.map +1 -0
- package/dist/lib/mixins/helius.d.ts +12 -0
- package/dist/lib/mixins/helius.d.ts.map +1 -0
- package/dist/lib/mixins/helius.js +281 -0
- package/dist/lib/mixins/helius.js.map +1 -0
- package/dist/lib/mixins/polymarket.d.ts +13 -0
- package/dist/lib/mixins/polymarket.d.ts.map +1 -0
- package/dist/lib/mixins/polymarket.js +186 -0
- package/dist/lib/mixins/polymarket.js.map +1 -0
- package/dist/lib/onchain-client-base.d.ts +20 -0
- package/dist/lib/onchain-client-base.d.ts.map +1 -0
- package/dist/lib/onchain-client-base.js +45 -0
- package/dist/lib/onchain-client-base.js.map +1 -0
- package/dist/lib/onchain-client-types.d.ts +228 -0
- package/dist/lib/onchain-client-types.d.ts.map +1 -0
- package/dist/lib/onchain-client-types.js +2 -0
- package/dist/lib/onchain-client-types.js.map +1 -0
- package/dist/lib/onchain-client.d.ts +15 -0
- package/dist/lib/onchain-client.d.ts.map +1 -0
- package/dist/lib/onchain-client.js +13 -0
- package/dist/lib/onchain-client.js.map +1 -0
- package/dist/lib/output.d.ts +28 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +94 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/utils/address.d.ts +26 -0
- package/dist/lib/utils/address.d.ts.map +1 -0
- package/dist/lib/utils/address.js +61 -0
- package/dist/lib/utils/address.js.map +1 -0
- package/dist/lib/utils/formatters.d.ts +42 -0
- package/dist/lib/utils/formatters.d.ts.map +1 -0
- package/dist/lib/utils/formatters.js +173 -0
- package/dist/lib/utils/formatters.js.map +1 -0
- package/package.json +77 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 arein
|
|
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,135 @@
|
|
|
1
|
+
# @cyberdrk/onchain
|
|
2
|
+
|
|
3
|
+
CLI for crypto portfolio tracking, market data, and CEX history. Designed for both human use and AI agent integration.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @cyberdrk/onchain
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or run directly with npx:
|
|
12
|
+
```bash
|
|
13
|
+
npx @cyberdrk/onchain price btc
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Check token prices
|
|
20
|
+
onchain price btc
|
|
21
|
+
onchain price eth sol matic
|
|
22
|
+
|
|
23
|
+
# View wallet balances (auto-detects EVM/Solana)
|
|
24
|
+
onchain balance 0x1234...5678
|
|
25
|
+
|
|
26
|
+
# CEX balances
|
|
27
|
+
onchain coinbase balance
|
|
28
|
+
onchain binance balance
|
|
29
|
+
|
|
30
|
+
# Market overview
|
|
31
|
+
onchain markets
|
|
32
|
+
|
|
33
|
+
# Prediction markets
|
|
34
|
+
onchain polymarket trending
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Commands
|
|
38
|
+
|
|
39
|
+
### Market Data
|
|
40
|
+
```bash
|
|
41
|
+
onchain price <token> # Token price with 24h change
|
|
42
|
+
onchain markets # Market overview with trending coins
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Wallet Data
|
|
46
|
+
```bash
|
|
47
|
+
onchain balance <address> # Token balances (EVM or Solana)
|
|
48
|
+
onchain history <address> # Transaction history
|
|
49
|
+
onchain portfolio <address> # Full portfolio with DeFi positions
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### CEX Data
|
|
53
|
+
```bash
|
|
54
|
+
onchain coinbase balance # Coinbase account balances
|
|
55
|
+
onchain coinbase history # Trade history
|
|
56
|
+
onchain binance balance # Binance account balances
|
|
57
|
+
onchain binance history # Trade history
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Prediction Markets
|
|
61
|
+
```bash
|
|
62
|
+
onchain polymarket trending # Trending markets
|
|
63
|
+
onchain polymarket search <q> # Search markets
|
|
64
|
+
onchain polymarket view <slug> # Market details
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Configuration
|
|
68
|
+
```bash
|
|
69
|
+
onchain setup # Interactive API key setup
|
|
70
|
+
onchain config # View current configuration
|
|
71
|
+
onchain test # Test all configured providers
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Configuration
|
|
75
|
+
|
|
76
|
+
Run `onchain setup` for interactive configuration, or set environment variables:
|
|
77
|
+
|
|
78
|
+
| Feature | Environment Variable | Provider |
|
|
79
|
+
|---------|---------------------|----------|
|
|
80
|
+
| EVM wallets | `DEBANK_API_KEY` | [DeBank Cloud](https://cloud.debank.com/) |
|
|
81
|
+
| Solana wallets | `HELIUS_API_KEY` | [Helius](https://helius.xyz/) |
|
|
82
|
+
| Coinbase | `COINBASE_API_KEY_ID` + `COINBASE_API_KEY_SECRET` | [Coinbase CDP](https://portal.cdp.coinbase.com/) |
|
|
83
|
+
| Binance | `BINANCE_API_KEY` + `BINANCE_API_SECRET` | [Binance](https://www.binance.com/en/my/settings/api-management) |
|
|
84
|
+
| Market data | `COINGECKO_API_KEY` | [CoinGecko](https://www.coingecko.com/en/api) (optional) |
|
|
85
|
+
| Market fallback | `COINMARKETCAP_API_KEY` | [CoinMarketCap](https://coinmarketcap.com/api/) (optional) |
|
|
86
|
+
|
|
87
|
+
Config file locations:
|
|
88
|
+
- Global: `~/.config/onchain/config.json5`
|
|
89
|
+
- Local: `./.onchainrc.json5`
|
|
90
|
+
|
|
91
|
+
## Global Options
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
--json # Output as JSON (for scripting/agents)
|
|
95
|
+
--plain # Disable colors and emoji
|
|
96
|
+
--no-color # Disable colors only
|
|
97
|
+
--timeout <ms> # Request timeout in milliseconds
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Agent Integration
|
|
101
|
+
|
|
102
|
+
This CLI is designed for AI agent use with `--json` output:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Get portfolio value
|
|
106
|
+
onchain --json portfolio 0x123... | jq '.totalValueUsd'
|
|
107
|
+
|
|
108
|
+
# Check if market is up
|
|
109
|
+
onchain --json markets | jq '.marketCapChange24h > 0'
|
|
110
|
+
|
|
111
|
+
# Get specific token price
|
|
112
|
+
onchain --json price eth | jq '{price: .priceUsd, change: .priceChange24h}'
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Exit codes: `0` for success, `1` for errors.
|
|
116
|
+
|
|
117
|
+
## Supported Chains
|
|
118
|
+
|
|
119
|
+
**EVM (via DeBank):** Ethereum, BNB Chain, Polygon, Arbitrum, Optimism, Avalanche, Base, zkSync Era, Linea, Scroll, Blast, Mantle, and 60+ more.
|
|
120
|
+
|
|
121
|
+
**Solana (via Helius):** Full mainnet support including SPL tokens and NFTs.
|
|
122
|
+
|
|
123
|
+
## Development
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pnpm install
|
|
127
|
+
pnpm run dev price btc # Run without building
|
|
128
|
+
pnpm run build # Build TypeScript
|
|
129
|
+
pnpm run test # Run tests
|
|
130
|
+
pnpm run lint # Lint code
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## License
|
|
134
|
+
|
|
135
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CA8BtD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { registerBalanceCommand } from '../commands/balance.js';
|
|
3
|
+
import { registerBinanceCommands } from '../commands/binance.js';
|
|
4
|
+
import { registerCoinbaseCommands } from '../commands/coinbase.js';
|
|
5
|
+
import { registerConfigCommand } from '../commands/config.js';
|
|
6
|
+
import { registerHistoryCommand } from '../commands/history.js';
|
|
7
|
+
import { registerMarketsCommand } from '../commands/markets.js';
|
|
8
|
+
import { registerPolymarketCommands } from '../commands/polymarket.js';
|
|
9
|
+
import { registerPortfolioCommand } from '../commands/portfolio.js';
|
|
10
|
+
import { registerPriceCommand } from '../commands/price.js';
|
|
11
|
+
import { registerSetupCommand } from '../commands/setup.js';
|
|
12
|
+
import { registerTestCommand } from '../commands/test.js';
|
|
13
|
+
const version = process.env.ONCHAIN_VERSION ?? '0.1.0';
|
|
14
|
+
const gitSha = process.env.ONCHAIN_GIT_SHA ?? '';
|
|
15
|
+
export function createProgram(ctx) {
|
|
16
|
+
const program = new Command();
|
|
17
|
+
program
|
|
18
|
+
.name('onchain')
|
|
19
|
+
.description('CLI for crypto portfolio tracking, market data, and CEX history')
|
|
20
|
+
.version(gitSha ? `${version} (${gitSha})` : version, '-V, --version')
|
|
21
|
+
.option('--plain', 'Disable colors and emoji')
|
|
22
|
+
.option('--no-emoji', 'Disable emoji')
|
|
23
|
+
.option('--no-color', 'Disable colors')
|
|
24
|
+
.option('--json', 'Output as JSON')
|
|
25
|
+
.option('--timeout <ms>', 'Request timeout in milliseconds')
|
|
26
|
+
.hook('preAction', (thisCommand) => {
|
|
27
|
+
ctx.applyOutputFromCommand(thisCommand);
|
|
28
|
+
});
|
|
29
|
+
// Register all commands
|
|
30
|
+
registerBalanceCommand(program, ctx);
|
|
31
|
+
registerHistoryCommand(program, ctx);
|
|
32
|
+
registerPortfolioCommand(program, ctx);
|
|
33
|
+
registerPriceCommand(program, ctx);
|
|
34
|
+
registerMarketsCommand(program, ctx);
|
|
35
|
+
registerCoinbaseCommands(program, ctx);
|
|
36
|
+
registerBinanceCommands(program, ctx);
|
|
37
|
+
registerPolymarketCommands(program, ctx);
|
|
38
|
+
registerSetupCommand(program, ctx);
|
|
39
|
+
registerConfigCommand(program, ctx);
|
|
40
|
+
registerTestCommand(program, ctx);
|
|
41
|
+
return program;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC;AACvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;AAEjD,MAAM,UAAU,aAAa,CAAC,GAAe;IAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,iEAAiE,CAAC;SAC9E,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC;SACrE,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC;SAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC;SACrC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;SACtC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;SAC3D,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;QACjC,GAAG,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,wBAAwB;IACxB,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtC,0BAA0B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OnchainConfig } from '../lib/config.js';
|
|
2
|
+
export declare function runSetupWizard(existingConfig: OnchainConfig, colors: {
|
|
3
|
+
section: (s: string) => string;
|
|
4
|
+
accent: (s: string) => string;
|
|
5
|
+
muted: (s: string) => string;
|
|
6
|
+
}): Promise<Partial<OnchainConfig>>;
|
|
7
|
+
//# sourceMappingURL=setup-wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAoBtD,wBAAsB,cAAc,CAClC,cAAc,EAAE,aAAa,EAC7B,MAAM,EAAE;IACN,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9B,GACA,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAuGjC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as readline from 'node:readline';
|
|
2
|
+
function createPrompt() {
|
|
3
|
+
const rl = readline.createInterface({
|
|
4
|
+
input: process.stdin,
|
|
5
|
+
output: process.stdout,
|
|
6
|
+
});
|
|
7
|
+
return {
|
|
8
|
+
question: (prompt) => new Promise((resolve) => {
|
|
9
|
+
rl.question(prompt, resolve);
|
|
10
|
+
}),
|
|
11
|
+
close: () => rl.close(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export async function runSetupWizard(existingConfig, colors) {
|
|
15
|
+
const prompt = createPrompt();
|
|
16
|
+
const config = {};
|
|
17
|
+
console.log();
|
|
18
|
+
console.log(colors.section('Onchain CLI Setup'));
|
|
19
|
+
console.log(colors.muted('Press Enter to skip any field and keep the existing value.'));
|
|
20
|
+
console.log();
|
|
21
|
+
try {
|
|
22
|
+
console.log(colors.accent('API Keys'));
|
|
23
|
+
console.log(colors.muted('These can also be set via environment variables.'));
|
|
24
|
+
console.log();
|
|
25
|
+
// DeBank API Key
|
|
26
|
+
const debankKey = await prompt.question(`DeBank API Key${existingConfig.debankApiKey ? ' (configured)' : ''}: `);
|
|
27
|
+
if (debankKey) {
|
|
28
|
+
config.debankApiKey = debankKey;
|
|
29
|
+
}
|
|
30
|
+
// Helius API Key
|
|
31
|
+
const heliusKey = await prompt.question(`Helius API Key${existingConfig.heliusApiKey ? ' (configured)' : ''}: `);
|
|
32
|
+
if (heliusKey) {
|
|
33
|
+
config.heliusApiKey = heliusKey;
|
|
34
|
+
}
|
|
35
|
+
// Coinbase CDP API (JWT-based auth with ECDSA)
|
|
36
|
+
console.log();
|
|
37
|
+
console.log(colors.muted('Coinbase CDP API (create keys at https://portal.cdp.coinbase.com/):'));
|
|
38
|
+
console.log(colors.muted(' IMPORTANT: Select ECDSA as signature algorithm (NOT Ed25519)'));
|
|
39
|
+
console.log(colors.muted(' API Key ID format: organizations/{org_id}/apiKeys/{key_id}'));
|
|
40
|
+
const coinbaseApiKeyId = await prompt.question(` Coinbase API Key ID${existingConfig.coinbaseApiKeyId ? ' (configured)' : ''}: `);
|
|
41
|
+
if (coinbaseApiKeyId) {
|
|
42
|
+
config.coinbaseApiKeyId = coinbaseApiKeyId;
|
|
43
|
+
}
|
|
44
|
+
console.log(colors.muted(' Secret: paste the EC private key PEM (multiline, end with empty line)'));
|
|
45
|
+
console.log(colors.muted(' Or set COINBASE_API_KEY_SECRET env var with the PEM content'));
|
|
46
|
+
const existingSecret = existingConfig.coinbaseApiKeySecret;
|
|
47
|
+
const secretPrompt = ` Coinbase API Key Secret${existingSecret ? ' (configured, press Enter to keep)' : ''}: `;
|
|
48
|
+
let coinbaseApiKeySecret = await prompt.question(secretPrompt);
|
|
49
|
+
// Handle multiline PEM input
|
|
50
|
+
if (coinbaseApiKeySecret.startsWith('-----BEGIN')) {
|
|
51
|
+
const lines = [coinbaseApiKeySecret];
|
|
52
|
+
while (true) {
|
|
53
|
+
const line = await prompt.question('');
|
|
54
|
+
if (!line) {
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
lines.push(line);
|
|
58
|
+
if (line.includes('-----END')) {
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
coinbaseApiKeySecret = lines.join('\n');
|
|
63
|
+
}
|
|
64
|
+
if (coinbaseApiKeySecret) {
|
|
65
|
+
config.coinbaseApiKeySecret = coinbaseApiKeySecret;
|
|
66
|
+
}
|
|
67
|
+
// Binance
|
|
68
|
+
console.log();
|
|
69
|
+
console.log(colors.muted('Binance (read-only API keys):'));
|
|
70
|
+
const binanceKey = await prompt.question(` Binance API Key${existingConfig.binanceApiKey ? ' (configured)' : ''}: `);
|
|
71
|
+
if (binanceKey) {
|
|
72
|
+
config.binanceApiKey = binanceKey;
|
|
73
|
+
}
|
|
74
|
+
const binanceSecret = await prompt.question(` Binance API Secret${existingConfig.binanceApiSecret ? ' (configured)' : ''}: `);
|
|
75
|
+
if (binanceSecret) {
|
|
76
|
+
config.binanceApiSecret = binanceSecret;
|
|
77
|
+
}
|
|
78
|
+
// CoinGecko (optional)
|
|
79
|
+
console.log();
|
|
80
|
+
const coingeckoKey = await prompt.question(`CoinGecko Pro API Key (optional)${existingConfig.coingeckoApiKey ? ' (configured)' : ''}: `);
|
|
81
|
+
if (coingeckoKey) {
|
|
82
|
+
config.coingeckoApiKey = coingeckoKey;
|
|
83
|
+
}
|
|
84
|
+
// CoinMarketCap (optional fallback)
|
|
85
|
+
const cmcKey = await prompt.question(`CoinMarketCap API Key (optional fallback)${existingConfig.coinmarketcapApiKey ? ' (configured)' : ''}: `);
|
|
86
|
+
if (cmcKey) {
|
|
87
|
+
config.coinmarketcapApiKey = cmcKey;
|
|
88
|
+
}
|
|
89
|
+
console.log();
|
|
90
|
+
return config;
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
prompt.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=setup-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { type OnchainConfig } from '../lib/config.js';
|
|
3
|
+
import { type ResolvedCredentials } from '../lib/credentials.js';
|
|
4
|
+
import type { OnchainClientOptions } from '../lib/onchain-client-types.js';
|
|
5
|
+
import { type LabelKind, type OutputConfig, type StatusKind } from '../lib/output.js';
|
|
6
|
+
export type CliContext = {
|
|
7
|
+
isTty: boolean;
|
|
8
|
+
getOutput: () => OutputConfig;
|
|
9
|
+
colors: {
|
|
10
|
+
banner: (t: string) => string;
|
|
11
|
+
subtitle: (t: string) => string;
|
|
12
|
+
section: (t: string) => string;
|
|
13
|
+
bullet: (t: string) => string;
|
|
14
|
+
command: (t: string) => string;
|
|
15
|
+
option: (t: string) => string;
|
|
16
|
+
argument: (t: string) => string;
|
|
17
|
+
description: (t: string) => string;
|
|
18
|
+
muted: (t: string) => string;
|
|
19
|
+
accent: (t: string) => string;
|
|
20
|
+
positive: (t: string) => string;
|
|
21
|
+
negative: (t: string) => string;
|
|
22
|
+
};
|
|
23
|
+
p: (kind: StatusKind) => string;
|
|
24
|
+
l: (kind: LabelKind) => string;
|
|
25
|
+
config: OnchainConfig;
|
|
26
|
+
applyOutputFromCommand: (command: Command) => void;
|
|
27
|
+
resolveTimeoutFromOptions: (options: {
|
|
28
|
+
timeout?: string | number;
|
|
29
|
+
}) => number | undefined;
|
|
30
|
+
resolveCredentials: () => ResolvedCredentials;
|
|
31
|
+
getClientOptions: () => OnchainClientOptions;
|
|
32
|
+
outputJson: (data: unknown) => void;
|
|
33
|
+
};
|
|
34
|
+
export declare function createCliContext(normalizedArgs: string[], env?: NodeJS.ProcessEnv): CliContext;
|
|
35
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,KAAK,mBAAmB,EAAsB,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGjB,KAAK,UAAU,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,YAAY,CAAC;IAC9B,MAAM,EAAE;QACN,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAChC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAChC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QACnC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;KACjC,CAAC;IACF,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,CAAC;IAChC,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,yBAAyB,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1F,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;IAC9C,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;IAC7C,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,CAAC;AAeF,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,CAoH3G"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import kleur from 'kleur';
|
|
2
|
+
import { loadConfig } from '../lib/config.js';
|
|
3
|
+
import { resolveCredentials } from '../lib/credentials.js';
|
|
4
|
+
import { labelPrefix, resolveOutputConfigFromArgv, resolveOutputConfigFromCommander, statusPrefix, } from '../lib/output.js';
|
|
5
|
+
function resolveTimeoutMs(...values) {
|
|
6
|
+
for (const value of values) {
|
|
7
|
+
if (value === undefined || value === null || value === '') {
|
|
8
|
+
continue;
|
|
9
|
+
}
|
|
10
|
+
const parsed = typeof value === 'number' ? value : Number(value);
|
|
11
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
12
|
+
return parsed;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
export function createCliContext(normalizedArgs, env = process.env) {
|
|
18
|
+
const isTty = process.stdout.isTTY ?? false;
|
|
19
|
+
let output = resolveOutputConfigFromArgv(normalizedArgs, env, isTty);
|
|
20
|
+
kleur.enabled = output.color;
|
|
21
|
+
const wrap = (styler) => (text) => isTty ? styler(text) : text;
|
|
22
|
+
const colors = {
|
|
23
|
+
banner: wrap((t) => kleur.bold().magenta(t)),
|
|
24
|
+
subtitle: wrap((t) => kleur.dim(t)),
|
|
25
|
+
section: wrap((t) => kleur.bold().white(t)),
|
|
26
|
+
bullet: wrap((t) => kleur.magenta(t)),
|
|
27
|
+
command: wrap((t) => kleur.bold().cyan(t)),
|
|
28
|
+
option: wrap((t) => kleur.cyan(t)),
|
|
29
|
+
argument: wrap((t) => kleur.magenta(t)),
|
|
30
|
+
description: wrap((t) => kleur.white(t)),
|
|
31
|
+
muted: wrap((t) => kleur.gray(t)),
|
|
32
|
+
accent: wrap((t) => kleur.cyan(t)),
|
|
33
|
+
positive: wrap((t) => kleur.green(t)),
|
|
34
|
+
negative: wrap((t) => kleur.red(t)),
|
|
35
|
+
};
|
|
36
|
+
const p = (kind) => {
|
|
37
|
+
const prefix = statusPrefix(kind, output);
|
|
38
|
+
if (output.plain || !output.color) {
|
|
39
|
+
return prefix;
|
|
40
|
+
}
|
|
41
|
+
if (kind === 'ok') {
|
|
42
|
+
return kleur.green(prefix);
|
|
43
|
+
}
|
|
44
|
+
if (kind === 'warn') {
|
|
45
|
+
return kleur.yellow(prefix);
|
|
46
|
+
}
|
|
47
|
+
if (kind === 'err') {
|
|
48
|
+
return kleur.red(prefix);
|
|
49
|
+
}
|
|
50
|
+
if (kind === 'info') {
|
|
51
|
+
return kleur.cyan(prefix);
|
|
52
|
+
}
|
|
53
|
+
return kleur.gray(prefix);
|
|
54
|
+
};
|
|
55
|
+
const l = (kind) => {
|
|
56
|
+
const prefix = labelPrefix(kind, output);
|
|
57
|
+
if (output.plain || !output.color) {
|
|
58
|
+
return prefix;
|
|
59
|
+
}
|
|
60
|
+
const colorMap = {
|
|
61
|
+
url: kleur.cyan,
|
|
62
|
+
date: kleur.magenta,
|
|
63
|
+
wallet: kleur.yellow,
|
|
64
|
+
chain: kleur.blue,
|
|
65
|
+
token: kleur.cyan,
|
|
66
|
+
price: kleur.green,
|
|
67
|
+
value: kleur.yellow,
|
|
68
|
+
change: kleur.magenta,
|
|
69
|
+
balance: kleur.blue,
|
|
70
|
+
position: kleur.cyan,
|
|
71
|
+
exchange: kleur.yellow,
|
|
72
|
+
};
|
|
73
|
+
return colorMap[kind](prefix);
|
|
74
|
+
};
|
|
75
|
+
const config = loadConfig((message) => {
|
|
76
|
+
console.error(colors.muted(`${p('warn')}${message}`));
|
|
77
|
+
});
|
|
78
|
+
function applyOutputFromCommand(command) {
|
|
79
|
+
const opts = command.optsWithGlobals();
|
|
80
|
+
output = resolveOutputConfigFromCommander(opts, env, isTty);
|
|
81
|
+
kleur.enabled = output.color;
|
|
82
|
+
}
|
|
83
|
+
function resolveTimeoutFromOptions(options) {
|
|
84
|
+
return resolveTimeoutMs(options.timeout, config.timeoutMs, env.ONCHAIN_TIMEOUT_MS);
|
|
85
|
+
}
|
|
86
|
+
function getResolvedCredentials() {
|
|
87
|
+
return resolveCredentials(config, env);
|
|
88
|
+
}
|
|
89
|
+
function getClientOptions() {
|
|
90
|
+
const creds = getResolvedCredentials();
|
|
91
|
+
return {
|
|
92
|
+
debankApiKey: creds.debankApiKey,
|
|
93
|
+
heliusApiKey: creds.heliusApiKey,
|
|
94
|
+
coinbaseApiKeyId: creds.coinbaseApiKeyId,
|
|
95
|
+
coinbaseApiKeySecret: creds.coinbaseApiKeySecret,
|
|
96
|
+
binanceApiKey: creds.binanceApiKey,
|
|
97
|
+
binanceApiSecret: creds.binanceApiSecret,
|
|
98
|
+
coingeckoApiKey: creds.coingeckoApiKey,
|
|
99
|
+
coinmarketcapApiKey: creds.coinmarketcapApiKey,
|
|
100
|
+
timeoutMs: config.timeoutMs,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function outputJson(data) {
|
|
104
|
+
console.log(JSON.stringify(data, null, 2));
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
isTty,
|
|
108
|
+
getOutput: () => output,
|
|
109
|
+
colors,
|
|
110
|
+
p,
|
|
111
|
+
l,
|
|
112
|
+
config,
|
|
113
|
+
applyOutputFromCommand,
|
|
114
|
+
resolveTimeoutFromOptions,
|
|
115
|
+
resolveCredentials: getResolvedCredentials,
|
|
116
|
+
getClientOptions,
|
|
117
|
+
outputJson,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAA4B,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAEL,WAAW,EAEX,2BAA2B,EAC3B,gCAAgC,EAEhC,YAAY,GACb,MAAM,kBAAkB,CAAC;AA6B1B,SAAS,gBAAgB,CAAC,GAAG,MAAiD;IAC5E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC1D,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,cAAwB,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC7F,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;IAC5C,IAAI,MAAM,GAAiB,2BAA2B,CAAC,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACnF,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;IAE7B,MAAM,IAAI,GACR,CAAC,MAAgC,EAA8B,EAAE,CACjE,CAAC,IAAY,EAAU,EAAE,CACvB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhC,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5C,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACpC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,IAAgB,EAAU,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,IAAe,EAAU,EAAE;QACpC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,QAAQ,GAA6C;YACzD,GAAG,EAAE,KAAK,CAAC,IAAI;YACf,IAAI,EAAE,KAAK,CAAC,OAAO;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,MAAM,EAAE,KAAK,CAAC,OAAO;YACrB,OAAO,EAAE,KAAK,CAAC,IAAI;YACnB,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,QAAQ,EAAE,KAAK,CAAC,MAAM;SACvB,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,SAAS,sBAAsB,CAAC,OAAgB;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAA2E,CAAC;QAChH,MAAM,GAAG,gCAAgC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5D,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,SAAS,yBAAyB,CAAC,OAAsC;QACvE,OAAO,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACrF,CAAC;IAED,SAAS,sBAAsB;QAC7B,OAAO,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,gBAAgB;QACvB,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;QACvC,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;IAED,SAAS,UAAU,CAAC,IAAa;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO;QACL,KAAK;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM;QACvB,MAAM;QACN,CAAC;QACD,CAAC;QACD,MAAM;QACN,sBAAsB;QACtB,yBAAyB;QACzB,kBAAkB,EAAE,sBAAsB;QAC1C,gBAAgB;QAChB,UAAU;KACX,CAAC;AACJ,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createProgram } from './cli/program.js';
|
|
3
|
+
import { createCliContext } from './cli/shared.js';
|
|
4
|
+
const ctx = createCliContext(process.argv);
|
|
5
|
+
const program = createProgram(ctx);
|
|
6
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
7
|
+
console.error(`${ctx.p('err')}${error instanceof Error ? error.message : String(error)}`);
|
|
8
|
+
process.exit(1);
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAEnC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAyK9E"}
|