@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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +135 -0
  3. package/dist/cli/program.d.ts +4 -0
  4. package/dist/cli/program.d.ts.map +1 -0
  5. package/dist/cli/program.js +43 -0
  6. package/dist/cli/program.js.map +1 -0
  7. package/dist/cli/setup-wizard.d.ts +7 -0
  8. package/dist/cli/setup-wizard.d.ts.map +1 -0
  9. package/dist/cli/setup-wizard.js +96 -0
  10. package/dist/cli/setup-wizard.js.map +1 -0
  11. package/dist/cli/shared.d.ts +35 -0
  12. package/dist/cli/shared.d.ts.map +1 -0
  13. package/dist/cli/shared.js +120 -0
  14. package/dist/cli/shared.js.map +1 -0
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +10 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/commands/balance.d.ts +4 -0
  20. package/dist/commands/balance.d.ts.map +1 -0
  21. package/dist/commands/balance.js +141 -0
  22. package/dist/commands/balance.js.map +1 -0
  23. package/dist/commands/binance.d.ts +4 -0
  24. package/dist/commands/binance.d.ts.map +1 -0
  25. package/dist/commands/binance.js +129 -0
  26. package/dist/commands/binance.js.map +1 -0
  27. package/dist/commands/coinbase.d.ts +4 -0
  28. package/dist/commands/coinbase.d.ts.map +1 -0
  29. package/dist/commands/coinbase.js +122 -0
  30. package/dist/commands/coinbase.js.map +1 -0
  31. package/dist/commands/config.d.ts +4 -0
  32. package/dist/commands/config.d.ts.map +1 -0
  33. package/dist/commands/config.js +90 -0
  34. package/dist/commands/config.js.map +1 -0
  35. package/dist/commands/history.d.ts +4 -0
  36. package/dist/commands/history.d.ts.map +1 -0
  37. package/dist/commands/history.js +124 -0
  38. package/dist/commands/history.js.map +1 -0
  39. package/dist/commands/markets.d.ts +4 -0
  40. package/dist/commands/markets.d.ts.map +1 -0
  41. package/dist/commands/markets.js +59 -0
  42. package/dist/commands/markets.js.map +1 -0
  43. package/dist/commands/polymarket.d.ts +4 -0
  44. package/dist/commands/polymarket.d.ts.map +1 -0
  45. package/dist/commands/polymarket.js +180 -0
  46. package/dist/commands/polymarket.js.map +1 -0
  47. package/dist/commands/portfolio.d.ts +4 -0
  48. package/dist/commands/portfolio.d.ts.map +1 -0
  49. package/dist/commands/portfolio.js +162 -0
  50. package/dist/commands/portfolio.js.map +1 -0
  51. package/dist/commands/price.d.ts +4 -0
  52. package/dist/commands/price.d.ts.map +1 -0
  53. package/dist/commands/price.js +95 -0
  54. package/dist/commands/price.js.map +1 -0
  55. package/dist/commands/setup.d.ts +4 -0
  56. package/dist/commands/setup.d.ts.map +1 -0
  57. package/dist/commands/setup.js +47 -0
  58. package/dist/commands/setup.js.map +1 -0
  59. package/dist/commands/test.d.ts +4 -0
  60. package/dist/commands/test.d.ts.map +1 -0
  61. package/dist/commands/test.js +198 -0
  62. package/dist/commands/test.js.map +1 -0
  63. package/dist/index.d.ts +5 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +6 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/lib/browser-scraper.d.ts +39 -0
  68. package/dist/lib/browser-scraper.d.ts.map +1 -0
  69. package/dist/lib/browser-scraper.js +214 -0
  70. package/dist/lib/browser-scraper.js.map +1 -0
  71. package/dist/lib/config.d.ts +19 -0
  72. package/dist/lib/config.d.ts.map +1 -0
  73. package/dist/lib/config.js +52 -0
  74. package/dist/lib/config.js.map +1 -0
  75. package/dist/lib/credentials.d.ts +23 -0
  76. package/dist/lib/credentials.d.ts.map +1 -0
  77. package/dist/lib/credentials.js +49 -0
  78. package/dist/lib/credentials.js.map +1 -0
  79. package/dist/lib/mixins/binance.d.ts +12 -0
  80. package/dist/lib/mixins/binance.d.ts.map +1 -0
  81. package/dist/lib/mixins/binance.js +167 -0
  82. package/dist/lib/mixins/binance.js.map +1 -0
  83. package/dist/lib/mixins/coinbase.d.ts +11 -0
  84. package/dist/lib/mixins/coinbase.d.ts.map +1 -0
  85. package/dist/lib/mixins/coinbase.js +266 -0
  86. package/dist/lib/mixins/coinbase.js.map +1 -0
  87. package/dist/lib/mixins/coingecko.d.ts +10 -0
  88. package/dist/lib/mixins/coingecko.d.ts.map +1 -0
  89. package/dist/lib/mixins/coingecko.js +217 -0
  90. package/dist/lib/mixins/coingecko.js.map +1 -0
  91. package/dist/lib/mixins/coinmarketcap.d.ts +9 -0
  92. package/dist/lib/mixins/coinmarketcap.d.ts.map +1 -0
  93. package/dist/lib/mixins/coinmarketcap.js +142 -0
  94. package/dist/lib/mixins/coinmarketcap.js.map +1 -0
  95. package/dist/lib/mixins/debank.d.ts +21 -0
  96. package/dist/lib/mixins/debank.d.ts.map +1 -0
  97. package/dist/lib/mixins/debank.js +280 -0
  98. package/dist/lib/mixins/debank.js.map +1 -0
  99. package/dist/lib/mixins/helius.d.ts +12 -0
  100. package/dist/lib/mixins/helius.d.ts.map +1 -0
  101. package/dist/lib/mixins/helius.js +281 -0
  102. package/dist/lib/mixins/helius.js.map +1 -0
  103. package/dist/lib/mixins/polymarket.d.ts +13 -0
  104. package/dist/lib/mixins/polymarket.d.ts.map +1 -0
  105. package/dist/lib/mixins/polymarket.js +186 -0
  106. package/dist/lib/mixins/polymarket.js.map +1 -0
  107. package/dist/lib/onchain-client-base.d.ts +20 -0
  108. package/dist/lib/onchain-client-base.d.ts.map +1 -0
  109. package/dist/lib/onchain-client-base.js +45 -0
  110. package/dist/lib/onchain-client-base.js.map +1 -0
  111. package/dist/lib/onchain-client-types.d.ts +228 -0
  112. package/dist/lib/onchain-client-types.d.ts.map +1 -0
  113. package/dist/lib/onchain-client-types.js +2 -0
  114. package/dist/lib/onchain-client-types.js.map +1 -0
  115. package/dist/lib/onchain-client.d.ts +15 -0
  116. package/dist/lib/onchain-client.d.ts.map +1 -0
  117. package/dist/lib/onchain-client.js +13 -0
  118. package/dist/lib/onchain-client.js.map +1 -0
  119. package/dist/lib/output.d.ts +28 -0
  120. package/dist/lib/output.d.ts.map +1 -0
  121. package/dist/lib/output.js +94 -0
  122. package/dist/lib/output.js.map +1 -0
  123. package/dist/lib/utils/address.d.ts +26 -0
  124. package/dist/lib/utils/address.d.ts.map +1 -0
  125. package/dist/lib/utils/address.js +61 -0
  126. package/dist/lib/utils/address.js.map +1 -0
  127. package/dist/lib/utils/formatters.d.ts +42 -0
  128. package/dist/lib/utils/formatters.d.ts.map +1 -0
  129. package/dist/lib/utils/formatters.js +173 -0
  130. package/dist/lib/utils/formatters.js.map +1 -0
  131. 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,4 @@
1
+ import { Command } from 'commander';
2
+ import type { CliContext } from './shared.js';
3
+ export declare function createProgram(ctx: CliContext): Command;
4
+ //# sourceMappingURL=program.d.ts.map
@@ -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":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAG1C,SAAS,YAAY;IAInB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE,CAC3B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACtB,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC;QACJ,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,cAA6B,EAC7B,MAIC;IAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,iBAAiB;QACjB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,iBAAiB,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACjH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAClC,CAAC;QAED,iBAAiB;QACjB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,iBAAiB,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACjH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAClC,CAAC;QAED,+CAA+C;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC,CAAC;QAC1F,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,QAAQ,CAC5C,wBAAwB,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CACnF,CAAC;QACF,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;QAC3F,MAAM,cAAc,GAAG,cAAc,CAAC,oBAAoB,CAAC;QAC3D,MAAM,YAAY,GAAG,4BAA4B,cAAc,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAChH,IAAI,oBAAoB,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAE/D,6BAA6B;QAC7B,IAAI,oBAAoB,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACrC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM;gBACR,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9B,MAAM;gBACR,CAAC;YACH,CAAC;YACD,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,oBAAoB,EAAE,CAAC;YACzB,MAAM,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACrD,CAAC;QAED,UAAU;QACV,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CACtC,oBAAoB,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAC5E,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,CACzC,uBAAuB,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAClF,CAAC;QACF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,CAAC,gBAAgB,GAAG,aAAa,CAAC;QAC1C,CAAC;QAED,uBAAuB;QACvB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,CACxC,mCAAmC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAC7F,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC;QACxC,CAAC;QAED,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAClC,4CAA4C,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAC1G,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -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":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { CliContext } from '../cli/shared.js';
3
+ export declare function registerBalanceCommand(program: Command, ctx: CliContext): void;
4
+ //# sourceMappingURL=balance.d.ts.map
@@ -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"}