@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
@@ -0,0 +1,95 @@
1
+ import { OnchainClient } from '../lib/onchain-client.js';
2
+ import { formatCompactUsd, formatPercent, formatUsd } from '../lib/utils/formatters.js';
3
+ export function registerPriceCommand(program, ctx) {
4
+ program
5
+ .command('price')
6
+ .description('Get token price and market data')
7
+ .argument('<token>', 'Token symbol or CoinGecko ID (e.g., btc, eth, bitcoin, solana)')
8
+ .option('--json', 'Output as JSON')
9
+ .action(async (token, cmdOpts) => {
10
+ const opts = program.opts();
11
+ const timeoutMs = ctx.resolveTimeoutFromOptions(opts);
12
+ const clientOpts = ctx.getClientOptions();
13
+ clientOpts.timeoutMs = timeoutMs;
14
+ const client = new OnchainClient(clientOpts);
15
+ const result = await client.getTokenPrice(token);
16
+ if (!result.success) {
17
+ console.error(`${ctx.p('err')}${result.error}`);
18
+ process.exit(1);
19
+ }
20
+ const output = ctx.getOutput();
21
+ if (cmdOpts.json || output.json) {
22
+ ctx.outputJson(result.token);
23
+ return;
24
+ }
25
+ const t = result.token;
26
+ const colors = ctx.colors;
27
+ console.log();
28
+ console.log(colors.section(`${t.name} (${t.symbol})`));
29
+ console.log();
30
+ // Price and changes
31
+ console.log(`${ctx.l('price')}${formatUsd(t.priceUsd)}`);
32
+ const changeColor = (val) => {
33
+ if (val === undefined) {
34
+ return '-';
35
+ }
36
+ const formatted = formatPercent(val, { showSign: true });
37
+ return val >= 0 ? colors.positive(formatted) : colors.negative(formatted);
38
+ };
39
+ if (t.priceChange24h !== undefined) {
40
+ console.log(`${ctx.l('change')}24h: ${changeColor(t.priceChange24h)}`);
41
+ }
42
+ // Additional changes in a row
43
+ const changes = [];
44
+ if (t.priceChange1h !== undefined) {
45
+ changes.push(`1h: ${changeColor(t.priceChange1h)}`);
46
+ }
47
+ if (t.priceChange7d !== undefined) {
48
+ changes.push(`7d: ${changeColor(t.priceChange7d)}`);
49
+ }
50
+ if (t.priceChange30d !== undefined) {
51
+ changes.push(`30d: ${changeColor(t.priceChange30d)}`);
52
+ }
53
+ if (changes.length > 0) {
54
+ console.log(` ${changes.join(' ')}`);
55
+ }
56
+ console.log();
57
+ // Market data
58
+ if (t.marketCapRank) {
59
+ console.log(`Rank: #${t.marketCapRank}`);
60
+ }
61
+ if (t.marketCap) {
62
+ console.log(`Market Cap: ${formatCompactUsd(t.marketCap)}`);
63
+ }
64
+ if (t.volume24h) {
65
+ console.log(`Volume 24h: ${formatCompactUsd(t.volume24h)}`);
66
+ }
67
+ // Supply info
68
+ if (t.circulatingSupply || t.totalSupply) {
69
+ console.log();
70
+ if (t.circulatingSupply) {
71
+ console.log(`Circulating: ${formatCompactUsd(t.circulatingSupply).replace('$', '')} ${t.symbol}`);
72
+ }
73
+ if (t.totalSupply) {
74
+ console.log(`Total: ${formatCompactUsd(t.totalSupply).replace('$', '')} ${t.symbol}`);
75
+ }
76
+ if (t.maxSupply) {
77
+ console.log(`Max: ${formatCompactUsd(t.maxSupply).replace('$', '')} ${t.symbol}`);
78
+ }
79
+ }
80
+ // ATH/ATL
81
+ if (t.ath || t.atl) {
82
+ console.log();
83
+ if (t.ath) {
84
+ const athChange = t.athChangePercent !== undefined ? ` (${formatPercent(t.athChangePercent, { showSign: true })})` : '';
85
+ console.log(`ATH: ${formatUsd(t.ath)}${athChange}`);
86
+ }
87
+ if (t.atl) {
88
+ const atlChange = t.atlChangePercent !== undefined ? ` (${formatPercent(t.atlChangePercent, { showSign: true })})` : '';
89
+ console.log(`ATL: ${formatUsd(t.atl)}${atlChange}`);
90
+ }
91
+ }
92
+ console.log();
93
+ });
94
+ }
95
+ //# sourceMappingURL=price.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/commands/price.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { CliContext } from '../cli/shared.js';
3
+ export declare function registerSetupCommand(program: Command, ctx: CliContext): void;
4
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAiD5E"}
@@ -0,0 +1,47 @@
1
+ import { runSetupWizard } from '../cli/setup-wizard.js';
2
+ import { getConfigPath, saveConfig } from '../lib/config.js';
3
+ export function registerSetupCommand(program, ctx) {
4
+ program
5
+ .command('setup')
6
+ .description('Interactive setup wizard for configuring wallets and API keys')
7
+ .option('--global', 'Save configuration globally (~/.config/onchain/config.json5)')
8
+ .action(async (cmdOpts) => {
9
+ const colors = ctx.colors;
10
+ try {
11
+ const configUpdates = await runSetupWizard(ctx.config, colors);
12
+ if (Object.keys(configUpdates).length === 0) {
13
+ console.log(colors.muted('No changes made.'));
14
+ return;
15
+ }
16
+ saveConfig(configUpdates, { global: cmdOpts.global });
17
+ const configPath = getConfigPath({ global: cmdOpts.global });
18
+ console.log(`${ctx.p('ok')}Configuration saved to ${configPath}`);
19
+ console.log();
20
+ // Show what was configured
21
+ const apiKeys = [
22
+ configUpdates.debankApiKey ? 'DeBank' : null,
23
+ configUpdates.heliusApiKey ? 'Helius' : null,
24
+ configUpdates.coinbaseApiKeyId ? 'Coinbase' : null,
25
+ configUpdates.binanceApiKey ? 'Binance' : null,
26
+ configUpdates.coingeckoApiKey ? 'CoinGecko' : null,
27
+ configUpdates.coinmarketcapApiKey ? 'CoinMarketCap' : null,
28
+ ].filter(Boolean);
29
+ if (apiKeys.length > 0) {
30
+ console.log(colors.accent('API keys configured:'));
31
+ console.log(` ${apiKeys.join(', ')}`);
32
+ console.log();
33
+ }
34
+ console.log(colors.muted('Run `onchain config` to view your configuration.'));
35
+ }
36
+ catch (error) {
37
+ if (error.code === 'ERR_USE_AFTER_CLOSE') {
38
+ // User pressed Ctrl+C
39
+ console.log();
40
+ console.log(colors.muted('Setup cancelled.'));
41
+ return;
42
+ }
43
+ throw error;
44
+ }
45
+ });
46
+ }
47
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,GAAe;IACpE,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,UAAU,EAAE,8DAA8D,CAAC;SAClF,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAE/D,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,UAAU,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAEtD,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,2BAA2B;YAC3B,MAAM,OAAO,GAAG;gBACd,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBAC5C,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBAC5C,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;gBAClD,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;gBAC9C,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;gBAClD,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;aAC3D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAElB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBACpE,sBAAsB;gBACtB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { CliContext } from '../cli/shared.js';
3
+ export declare function registerTestCommand(program: Command, ctx: CliContext): void;
4
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAgBnD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA8N3E"}
@@ -0,0 +1,198 @@
1
+ import { isAgentBrowserAvailable, scrapeDebankProfile, scrapeSolscanProfile } from '../lib/browser-scraper.js';
2
+ import { validateCredentials } from '../lib/credentials.js';
3
+ import { OnchainClient } from '../lib/onchain-client.js';
4
+ // Test addresses (public, well-known addresses with activity)
5
+ const TEST_EVM_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'; // vitalik.eth
6
+ const TEST_SOL_ADDRESS = '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY'; // Known Solana address
7
+ export function registerTestCommand(program, ctx) {
8
+ program
9
+ .command('test')
10
+ .description('Test all configured providers and integrations')
11
+ .option('--json', 'Output results as JSON')
12
+ .option('--verbose', 'Show detailed output')
13
+ .action(async (cmdOpts) => {
14
+ ctx.applyOutputFromCommand(program);
15
+ const output = ctx.getOutput();
16
+ const colors = ctx.colors;
17
+ const creds = ctx.resolveCredentials();
18
+ const validation = validateCredentials(creds);
19
+ const client = new OnchainClient(ctx.getClientOptions());
20
+ const results = [];
21
+ const isJson = cmdOpts.json || output.json;
22
+ if (!isJson) {
23
+ console.log();
24
+ console.log(colors.section('Testing Onchain Providers'));
25
+ console.log();
26
+ }
27
+ // Helper to run a test
28
+ async function runTest(name, isConfigured, testFn, fallbackFn) {
29
+ const start = Date.now();
30
+ if (!isConfigured && !fallbackFn) {
31
+ results.push({ provider: name, status: 'skip', message: 'Not configured' });
32
+ if (!isJson) {
33
+ console.log(`${ctx.p('hint')}${name}: ${colors.muted('Not configured')}`);
34
+ }
35
+ return;
36
+ }
37
+ try {
38
+ let result;
39
+ if (isConfigured) {
40
+ result = await testFn();
41
+ }
42
+ else if (fallbackFn) {
43
+ if (!isJson && cmdOpts.verbose) {
44
+ console.log(colors.muted(` Using browser fallback for ${name}...`));
45
+ }
46
+ result = await fallbackFn();
47
+ }
48
+ else {
49
+ result = { ok: false, message: 'Not configured' };
50
+ }
51
+ const duration = Date.now() - start;
52
+ if (result.ok) {
53
+ results.push({ provider: name, status: 'ok', message: result.message, duration });
54
+ if (!isJson) {
55
+ console.log(`${ctx.p('ok')}${name}: ${result.message} ${colors.muted(`(${duration}ms)`)}`);
56
+ }
57
+ }
58
+ else {
59
+ results.push({ provider: name, status: 'fail', message: result.message, duration });
60
+ if (!isJson) {
61
+ console.log(`${ctx.p('err')}${name}: ${colors.negative(result.message)} ${colors.muted(`(${duration}ms)`)}`);
62
+ }
63
+ }
64
+ }
65
+ catch (error) {
66
+ const duration = Date.now() - start;
67
+ const message = error instanceof Error ? error.message : String(error);
68
+ results.push({ provider: name, status: 'fail', message, duration });
69
+ if (!isJson) {
70
+ console.log(`${ctx.p('err')}${name}: ${colors.negative(message)} ${colors.muted(`(${duration}ms)`)}`);
71
+ }
72
+ }
73
+ }
74
+ // Test CoinGecko (always available, free tier)
75
+ await runTest('CoinGecko', true, async () => {
76
+ const result = await client.getTokenPrice('bitcoin');
77
+ if (result.success) {
78
+ return { ok: true, message: `BTC price: $${result.token.priceUsd.toLocaleString()}` };
79
+ }
80
+ return { ok: false, message: result.error };
81
+ });
82
+ // Test CoinMarketCap (if configured)
83
+ await runTest('CoinMarketCap', validation.hasCoinMarketCap, async () => {
84
+ const result = await client.cmcGetTokenPrice('BTC');
85
+ if (result.success) {
86
+ return { ok: true, message: `BTC price: $${result.token.priceUsd.toLocaleString()}` };
87
+ }
88
+ return { ok: false, message: result.error };
89
+ });
90
+ // Check if browser fallback is available
91
+ const hasBrowser = isAgentBrowserAvailable();
92
+ // Test DeBank (EVM) - with browser fallback if API not configured
93
+ await runTest('DeBank (EVM)', validation.hasDebank, async () => {
94
+ const result = await client.getEvmBalances(TEST_EVM_ADDRESS);
95
+ if (result.success) {
96
+ return {
97
+ ok: true,
98
+ message: `Found ${result.balances.length} tokens, total: $${result.totalValueUsd.toLocaleString()}`,
99
+ };
100
+ }
101
+ return { ok: false, message: result.error };
102
+ }, hasBrowser
103
+ ? async () => {
104
+ const result = await scrapeDebankProfile(TEST_EVM_ADDRESS);
105
+ if (result.success) {
106
+ return {
107
+ ok: true,
108
+ message: `[browser] Found ${result.balances.length} tokens, total: $${result.totalValueUsd.toLocaleString()}`,
109
+ };
110
+ }
111
+ return { ok: false, message: result.error };
112
+ }
113
+ : undefined);
114
+ // Test Helius (Solana) - with browser fallback if API not configured
115
+ await runTest('Helius (Solana)', validation.hasHelius, async () => {
116
+ const result = await client.getSolanaBalances(TEST_SOL_ADDRESS);
117
+ if (result.success) {
118
+ return {
119
+ ok: true,
120
+ message: `Found ${result.balances.length} tokens, total: $${result.totalValueUsd.toLocaleString()}`,
121
+ };
122
+ }
123
+ return { ok: false, message: result.error };
124
+ }, hasBrowser
125
+ ? async () => {
126
+ const result = await scrapeSolscanProfile(TEST_SOL_ADDRESS);
127
+ if (result.success) {
128
+ return {
129
+ ok: true,
130
+ message: `[browser] Found ${result.balances.length} tokens, total: $${result.totalValueUsd.toLocaleString()}`,
131
+ };
132
+ }
133
+ return { ok: false, message: result.error };
134
+ }
135
+ : undefined);
136
+ // Test Coinbase
137
+ await runTest('Coinbase', validation.hasCoinbase, async () => {
138
+ const result = await client.getCoinbaseBalances();
139
+ if (result.success) {
140
+ return {
141
+ ok: true,
142
+ message: `Found ${result.balances.length} assets, total: $${result.totalValueUsd.toLocaleString()}`,
143
+ };
144
+ }
145
+ return { ok: false, message: result.error };
146
+ });
147
+ // Test Binance
148
+ await runTest('Binance', validation.hasBinance, async () => {
149
+ const result = await client.getBinanceBalances();
150
+ if (result.success) {
151
+ return {
152
+ ok: true,
153
+ message: `Found ${result.balances.length} assets, total: $${result.totalValueUsd.toLocaleString()}`,
154
+ };
155
+ }
156
+ return { ok: false, message: result.error };
157
+ });
158
+ // Test Polymarket (always available, no auth needed)
159
+ await runTest('Polymarket', true, async () => {
160
+ const result = await client.getPolymarketTrending({ limit: 3 });
161
+ if (result.success) {
162
+ return { ok: true, message: `Found ${result.markets.length} trending markets` };
163
+ }
164
+ return { ok: false, message: result.error };
165
+ });
166
+ // Summary
167
+ if (isJson) {
168
+ ctx.outputJson({
169
+ results,
170
+ summary: {
171
+ passed: results.filter((r) => r.status === 'ok').length,
172
+ failed: results.filter((r) => r.status === 'fail').length,
173
+ skipped: results.filter((r) => r.status === 'skip').length,
174
+ },
175
+ });
176
+ }
177
+ else {
178
+ console.log();
179
+ const okCount = results.filter((r) => r.status === 'ok').length;
180
+ const failCount = results.filter((r) => r.status === 'fail').length;
181
+ const skipCount = results.filter((r) => r.status === 'skip').length;
182
+ const summary = [
183
+ colors.positive(`${okCount} passed`),
184
+ failCount > 0 ? colors.negative(`${failCount} failed`) : null,
185
+ skipCount > 0 ? colors.muted(`${skipCount} skipped`) : null,
186
+ ]
187
+ .filter(Boolean)
188
+ .join(', ');
189
+ console.log(colors.section('Summary:'), summary);
190
+ console.log();
191
+ }
192
+ // Exit with error code if any tests failed
193
+ if (results.some((r) => r.status === 'fail')) {
194
+ process.exit(1);
195
+ }
196
+ });
197
+ }
198
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { OnchainClient } from './lib/onchain-client.js';
2
+ export type { BalanceResult, CexBalance, CexBalanceResult, CexHistoryResult, CexTrade, ChainType, DefiPosition, DefiResult, EvmChain, HistoryResult, MarketOverview, MarketResult, NftAsset, NftResult, OnchainClientOptions, PolymarketDetailResult, PolymarketMarket, PolymarketResult, PriceResult, PricesResult, SupportedChain, TokenBalance, TokenPrice, Transaction, } from './lib/onchain-client-types.js';
3
+ export { detectChainType, isEvmAddress, isSolanaAddress, truncateAddress } from './lib/utils/address.js';
4
+ export { formatChainName, formatCompactNumber, formatCompactUsd, formatPercent, formatRelativeTime, formatTimestamp, formatTokenAmount, formatUsd, } from './lib/utils/formatters.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,SAAS,GACV,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ // Library exports for programmatic use
2
+ export { OnchainClient } from './lib/onchain-client.js';
3
+ // Utility exports
4
+ export { detectChainType, isEvmAddress, isSolanaAddress, truncateAddress } from './lib/utils/address.js';
5
+ export { formatChainName, formatCompactNumber, formatCompactUsd, formatPercent, formatRelativeTime, formatTimestamp, formatTokenAmount, formatUsd, } from './lib/utils/formatters.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA4BxD,kBAAkB;AAClB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,SAAS,GACV,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Browser scraper using agent-browser CLI for fallback when API keys aren't available.
3
+ * Uses the agent-browser CLI for browser automation.
4
+ *
5
+ * IMPORTANT: Uses unique session names to avoid "Browser not launched" errors
6
+ * from corrupted default sessions.
7
+ */
8
+ export interface ScrapedBalance {
9
+ symbol: string;
10
+ name: string;
11
+ amount: number;
12
+ valueUsd: number | null;
13
+ chain?: string;
14
+ }
15
+ export interface BrowserScrapeResult {
16
+ success: true;
17
+ balances: ScrapedBalance[];
18
+ totalValueUsd: number;
19
+ }
20
+ export interface BrowserScrapeError {
21
+ success: false;
22
+ error: string;
23
+ }
24
+ export type ScrapeResult = BrowserScrapeResult | BrowserScrapeError;
25
+ /**
26
+ * Check if agent-browser CLI is available.
27
+ */
28
+ export declare function isAgentBrowserAvailable(): boolean;
29
+ /**
30
+ * Scrape DeBank profile page for EVM wallet balances.
31
+ * Uses agent-browser CLI to navigate and extract data via JavaScript.
32
+ */
33
+ export declare function scrapeDebankProfile(address: string, timeoutMs?: number): Promise<ScrapeResult>;
34
+ /**
35
+ * Scrape Solscan profile page for Solana wallet balances.
36
+ * Uses agent-browser CLI to navigate and extract data via JavaScript.
37
+ */
38
+ export declare function scrapeSolscanProfile(address: string, timeoutMs?: number): Promise<ScrapeResult>;
39
+ //# sourceMappingURL=browser-scraper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-scraper.d.ts","sourceRoot":"","sources":["../../src/lib/browser-scraper.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAyCpE;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAOjD;AA+FD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAyCnG;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CA4CpG"}