@antseed/cli 0.1.61 → 0.1.63
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/dist/cli/commands/agent.d.ts +3 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +165 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/balance.d.ts +3 -0
- package/dist/cli/commands/balance.d.ts.map +1 -0
- package/dist/cli/commands/balance.js +62 -0
- package/dist/cli/commands/balance.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +3 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +46 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/browse.d.ts +7 -0
- package/dist/cli/commands/browse.d.ts.map +1 -0
- package/dist/cli/commands/browse.js +103 -0
- package/dist/cli/commands/browse.js.map +1 -0
- package/dist/cli/commands/channels.d.ts +3 -0
- package/dist/cli/commands/channels.d.ts.map +1 -0
- package/dist/cli/commands/channels.js +79 -0
- package/dist/cli/commands/channels.js.map +1 -0
- package/dist/cli/commands/config.d.ts +20 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +239 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/connect.d.ts +13 -0
- package/dist/cli/commands/connect.d.ts.map +1 -0
- package/dist/cli/commands/connect.js +402 -0
- package/dist/cli/commands/connect.js.map +1 -0
- package/dist/cli/commands/connect.test.d.ts +2 -0
- package/dist/cli/commands/connect.test.d.ts.map +1 -0
- package/dist/cli/commands/connect.test.js +52 -0
- package/dist/cli/commands/connect.test.js.map +1 -0
- package/dist/cli/commands/connection.d.ts +3 -0
- package/dist/cli/commands/connection.d.ts.map +1 -0
- package/dist/cli/commands/connection.js +128 -0
- package/dist/cli/commands/connection.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +6 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +48 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/deposit.d.ts +3 -0
- package/dist/cli/commands/deposit.d.ts.map +1 -0
- package/dist/cli/commands/deposit.js +38 -0
- package/dist/cli/commands/deposit.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +3 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +94 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/emissions.d.ts +3 -0
- package/dist/cli/commands/emissions.d.ts.map +1 -0
- package/dist/cli/commands/emissions.js +80 -0
- package/dist/cli/commands/emissions.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +90 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/payments.d.ts +3 -0
- package/dist/cli/commands/payments.d.ts.map +1 -0
- package/dist/cli/commands/payments.js +26 -0
- package/dist/cli/commands/payments.js.map +1 -0
- package/dist/cli/commands/plugin-create.d.ts +11 -0
- package/dist/cli/commands/plugin-create.d.ts.map +1 -0
- package/dist/cli/commands/plugin-create.js +201 -0
- package/dist/cli/commands/plugin-create.js.map +1 -0
- package/dist/cli/commands/plugin-create.test.d.ts +2 -0
- package/dist/cli/commands/plugin-create.test.d.ts.map +1 -0
- package/dist/cli/commands/plugin-create.test.js +53 -0
- package/dist/cli/commands/plugin-create.test.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +3 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +279 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/plugin.test.d.ts +2 -0
- package/dist/cli/commands/plugin.test.d.ts.map +1 -0
- package/dist/cli/commands/plugin.test.js +54 -0
- package/dist/cli/commands/plugin.test.js.map +1 -0
- package/dist/cli/commands/profile.d.ts +10 -0
- package/dist/cli/commands/profile.d.ts.map +1 -0
- package/dist/cli/commands/profile.js +89 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/register.d.ts +3 -0
- package/dist/cli/commands/register.d.ts.map +1 -0
- package/dist/cli/commands/register.js +35 -0
- package/dist/cli/commands/register.js.map +1 -0
- package/dist/cli/commands/seed.d.ts +14 -0
- package/dist/cli/commands/seed.d.ts.map +1 -0
- package/dist/cli/commands/seed.js +500 -0
- package/dist/cli/commands/seed.js.map +1 -0
- package/dist/cli/commands/seed.test.d.ts +2 -0
- package/dist/cli/commands/seed.test.d.ts.map +1 -0
- package/dist/cli/commands/seed.test.js +92 -0
- package/dist/cli/commands/seed.test.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +3 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +84 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/stake.d.ts +3 -0
- package/dist/cli/commands/stake.d.ts.map +1 -0
- package/dist/cli/commands/stake.js +83 -0
- package/dist/cli/commands/stake.js.map +1 -0
- package/dist/cli/commands/status.d.ts +8 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +55 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/subscribe.d.ts +3 -0
- package/dist/cli/commands/subscribe.d.ts.map +1 -0
- package/dist/cli/commands/subscribe.js +96 -0
- package/dist/cli/commands/subscribe.js.map +1 -0
- package/dist/cli/commands/types.d.ts +14 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/types.js +41 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/commands/withdraw.d.ts +3 -0
- package/dist/cli/commands/withdraw.d.ts.map +1 -0
- package/dist/cli/commands/withdraw.js +48 -0
- package/dist/cli/commands/withdraw.js.map +1 -0
- package/dist/cli/formatters.d.ts +29 -0
- package/dist/cli/formatters.d.ts.map +1 -0
- package/dist/cli/formatters.js +67 -0
- package/dist/cli/formatters.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +63 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/payment-utils.d.ts +53 -0
- package/dist/cli/payment-utils.d.ts.map +1 -0
- package/dist/cli/payment-utils.js +137 -0
- package/dist/cli/payment-utils.js.map +1 -0
- package/dist/cli/shutdown.d.ts +11 -0
- package/dist/cli/shutdown.d.ts.map +1 -0
- package/dist/cli/shutdown.js +34 -0
- package/dist/cli/shutdown.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +41 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/effective.d.ts +25 -0
- package/dist/config/effective.d.ts.map +1 -0
- package/dist/config/effective.js +67 -0
- package/dist/config/effective.js.map +1 -0
- package/dist/config/effective.test.d.ts +2 -0
- package/dist/config/effective.test.d.ts.map +1 -0
- package/dist/config/effective.test.js +62 -0
- package/dist/config/effective.test.js.map +1 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +269 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/loader.test.d.ts +2 -0
- package/dist/config/loader.test.d.ts.map +1 -0
- package/dist/config/loader.test.js +124 -0
- package/dist/config/loader.test.js.map +1 -0
- package/dist/config/types.d.ts +167 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +10 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +130 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/env/load-env.d.ts +6 -0
- package/dist/env/load-env.d.ts.map +1 -0
- package/dist/env/load-env.js +18 -0
- package/dist/env/load-env.js.map +1 -0
- package/dist/plugins/loader.d.ts +12 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +111 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +11 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +52 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +45 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/proxy/buyer-proxy.d.ts +82 -0
- package/dist/proxy/buyer-proxy.d.ts.map +1 -0
- package/dist/proxy/buyer-proxy.js +1056 -0
- package/dist/proxy/buyer-proxy.js.map +1 -0
- package/dist/proxy/buyer-proxy.test.d.ts +2 -0
- package/dist/proxy/buyer-proxy.test.d.ts.map +1 -0
- package/dist/proxy/buyer-proxy.test.js +124 -0
- package/dist/proxy/buyer-proxy.test.js.map +1 -0
- package/dist/proxy/request-utils.d.ts +21 -0
- package/dist/proxy/request-utils.d.ts.map +1 -0
- package/dist/proxy/request-utils.js +237 -0
- package/dist/proxy/request-utils.js.map +1 -0
- package/dist/proxy/routing.d.ts +17 -0
- package/dist/proxy/routing.d.ts.map +1 -0
- package/dist/proxy/routing.js +115 -0
- package/dist/proxy/routing.js.map +1 -0
- package/dist/proxy/service-api-adapter.d.ts +3 -0
- package/dist/proxy/service-api-adapter.d.ts.map +1 -0
- package/dist/proxy/service-api-adapter.js +2 -0
- package/dist/proxy/service-api-adapter.js.map +1 -0
- package/dist/proxy/service-api-adapter.test.d.ts +2 -0
- package/dist/proxy/service-api-adapter.test.d.ts.map +1 -0
- package/dist/proxy/service-api-adapter.test.js +121 -0
- package/dist/proxy/service-api-adapter.test.js.map +1 -0
- package/dist/proxy/telemetry.d.ts +23 -0
- package/dist/proxy/telemetry.d.ts.map +1 -0
- package/dist/proxy/telemetry.js +227 -0
- package/dist/proxy/telemetry.js.map +1 -0
- package/dist/status/node-status.d.ts +22 -0
- package/dist/status/node-status.d.ts.map +1 -0
- package/dist/status/node-status.js +83 -0
- package/dist/status/node-status.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+E3D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getGlobalOptions } from './types.js';
|
|
4
|
+
import { loadConfig } from '../../config/loader.js';
|
|
5
|
+
import { loadOrCreateIdentity } from '@antseed/node';
|
|
6
|
+
import { checkSellerReadiness, checkBuyerReadiness } from '@antseed/node/payments';
|
|
7
|
+
import { createDepositsClient, createIdentityClient, createStakingClient, } from '../payment-utils.js';
|
|
8
|
+
export function registerSetupCommand(program) {
|
|
9
|
+
program
|
|
10
|
+
.command('setup')
|
|
11
|
+
.description('Guided onboarding — check readiness and walk through setup steps')
|
|
12
|
+
.option('--role <role>', 'role to check: provider or buyer', 'provider')
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
const globalOpts = getGlobalOptions(program);
|
|
15
|
+
const config = await loadConfig(globalOpts.config);
|
|
16
|
+
const role = options.role;
|
|
17
|
+
if (role !== 'provider' && role !== 'buyer') {
|
|
18
|
+
console.error(chalk.red('Error: --role must be "provider" or "buyer".'));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const identity = await loadOrCreateIdentity(globalOpts.dataDir);
|
|
22
|
+
const address = identity.wallet.address;
|
|
23
|
+
console.log(chalk.bold('\nAntseed Setup\n'));
|
|
24
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
25
|
+
console.log(chalk.dim(`Role: ${role}\n`));
|
|
26
|
+
const spinner = ora('Running readiness checks...').start();
|
|
27
|
+
try {
|
|
28
|
+
const depositsClient = createDepositsClient(config);
|
|
29
|
+
if (role === 'provider') {
|
|
30
|
+
const identityClient = createIdentityClient(config);
|
|
31
|
+
const stakingClient = createStakingClient(config);
|
|
32
|
+
const checks = await checkSellerReadiness(identity, identityClient, stakingClient);
|
|
33
|
+
spinner.stop();
|
|
34
|
+
console.log(chalk.bold('Provider Readiness:\n'));
|
|
35
|
+
let allPassed = true;
|
|
36
|
+
for (const check of checks) {
|
|
37
|
+
const icon = check.passed ? chalk.green('✓') : chalk.red('✗');
|
|
38
|
+
console.log(` ${icon} ${chalk.bold(check.name)}: ${check.message}`);
|
|
39
|
+
if (!check.passed && check.command) {
|
|
40
|
+
console.log(chalk.dim(` → ${check.command}`));
|
|
41
|
+
}
|
|
42
|
+
if (!check.passed)
|
|
43
|
+
allPassed = false;
|
|
44
|
+
}
|
|
45
|
+
console.log('');
|
|
46
|
+
if (allPassed) {
|
|
47
|
+
console.log(chalk.green('All checks passed! You are ready to seed.'));
|
|
48
|
+
console.log(chalk.dim('Run: antseed seed --provider <name>'));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log(chalk.yellow('Some checks failed. Follow the suggestions above to complete setup.'));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const checks = await checkBuyerReadiness(identity, depositsClient);
|
|
56
|
+
spinner.stop();
|
|
57
|
+
console.log(chalk.bold('Buyer Readiness:\n'));
|
|
58
|
+
let allPassed = true;
|
|
59
|
+
for (const check of checks) {
|
|
60
|
+
const icon = check.passed ? chalk.green('✓') : chalk.red('✗');
|
|
61
|
+
console.log(` ${icon} ${chalk.bold(check.name)}: ${check.message}`);
|
|
62
|
+
if (!check.passed && check.command) {
|
|
63
|
+
console.log(chalk.dim(` → ${check.command}`));
|
|
64
|
+
}
|
|
65
|
+
if (!check.passed)
|
|
66
|
+
allPassed = false;
|
|
67
|
+
}
|
|
68
|
+
console.log('');
|
|
69
|
+
if (allPassed) {
|
|
70
|
+
console.log(chalk.green('All checks passed! You are ready to connect.'));
|
|
71
|
+
console.log(chalk.dim('Run: antseed connect --router <name>'));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log(chalk.yellow('Some checks failed. Follow the suggestions above to complete setup.'));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
spinner.fail(chalk.red(`Setup check failed: ${err.message}`));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stake.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoF3D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getGlobalOptions } from './types.js';
|
|
4
|
+
import { loadConfig } from '../../config/loader.js';
|
|
5
|
+
import { createStakingClient, createIdentityClient, loadCryptoContext, formatUsdc, parseUsdcToBaseUnits, } from '../payment-utils.js';
|
|
6
|
+
export function registerStakeCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('stake <amount>')
|
|
9
|
+
.description('Stake USDC as a provider (amount in human-readable USDC, e.g. "10" = 10 USDC)')
|
|
10
|
+
.option('--agent-id <id>', 'ERC-8004 agent ID (from antseed register output)', parseInt)
|
|
11
|
+
.action(async (amount, options) => {
|
|
12
|
+
const globalOpts = getGlobalOptions(program);
|
|
13
|
+
const config = await loadConfig(globalOpts.config);
|
|
14
|
+
let amountBaseUnits;
|
|
15
|
+
try {
|
|
16
|
+
amountBaseUnits = parseUsdcToBaseUnits(amount);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
console.error(chalk.red('Error: Amount must be a positive number.'));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const spinner = ora('Verifying registration...').start();
|
|
23
|
+
try {
|
|
24
|
+
const { wallet, address } = await loadCryptoContext(globalOpts.dataDir);
|
|
25
|
+
const stakingClient = createStakingClient(config);
|
|
26
|
+
const identityClient = createIdentityClient(config);
|
|
27
|
+
const isReg = await identityClient.isRegistered(address);
|
|
28
|
+
if (!isReg) {
|
|
29
|
+
spinner.fail(chalk.red('Not registered. Run: antseed register'));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
// Look up agentId from staking contract, or use --agent-id for first-time staking
|
|
33
|
+
let agentId = await stakingClient.getAgentId(address);
|
|
34
|
+
if (agentId === 0 && options.agentId) {
|
|
35
|
+
agentId = options.agentId;
|
|
36
|
+
}
|
|
37
|
+
if (agentId === 0) {
|
|
38
|
+
spinner.fail(chalk.red('No agentId found. Pass --agent-id <id> from your antseed register output.'));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const amountFloat = parseFloat(amount);
|
|
42
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
43
|
+
console.log(chalk.dim(`Agent ID: ${agentId}`));
|
|
44
|
+
console.log(chalk.dim(`Amount: ${amountFloat} USDC (${amountBaseUnits} base units)`));
|
|
45
|
+
spinner.text = 'Staking USDC...';
|
|
46
|
+
const txHash = await stakingClient.stake(wallet, agentId, amountBaseUnits);
|
|
47
|
+
spinner.succeed(chalk.green(`Staked ${amountFloat} USDC`));
|
|
48
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
spinner.fail(chalk.red(`Staking failed: ${err.message}`));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
program
|
|
56
|
+
.command('unstake')
|
|
57
|
+
.description('Unstake USDC (subject to slash conditions)')
|
|
58
|
+
.action(async () => {
|
|
59
|
+
const globalOpts = getGlobalOptions(program);
|
|
60
|
+
const config = await loadConfig(globalOpts.config);
|
|
61
|
+
const spinner = ora('Fetching stake info...').start();
|
|
62
|
+
try {
|
|
63
|
+
const { wallet, address } = await loadCryptoContext(globalOpts.dataDir);
|
|
64
|
+
const stakingClient = createStakingClient(config);
|
|
65
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
66
|
+
const account = await stakingClient.getSellerAccount(address);
|
|
67
|
+
if (account.stake === 0n) {
|
|
68
|
+
spinner.fail(chalk.yellow('No active stake to withdraw.'));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
console.log(chalk.dim(`Current stake: ${formatUsdc(account.stake)} USDC`));
|
|
72
|
+
spinner.text = 'Unstaking...';
|
|
73
|
+
const txHash = await stakingClient.unstake(wallet);
|
|
74
|
+
spinner.succeed(chalk.green('Unstaked successfully'));
|
|
75
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
spinner.fail(chalk.red(`Unstake failed: ${err.message}`));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=stake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stake.js","sourceRoot":"","sources":["../../../src/cli/commands/stake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/** Possible node states */
|
|
3
|
+
export type NodeState = 'seeding' | 'connected' | 'idle';
|
|
4
|
+
/**
|
|
5
|
+
* Register the `antseed status` command on the Commander program.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerStatusCommand(program: Command): void;
|
|
8
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,2BAA2B;AAC3B,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;AAEzD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwD5D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import Table from 'cli-table3';
|
|
3
|
+
import { getGlobalOptions } from './types.js';
|
|
4
|
+
import { loadConfig } from '../../config/loader.js';
|
|
5
|
+
import { resolveEffectiveSellerConfig } from '../../config/effective.js';
|
|
6
|
+
import { getNodeStatus } from '../../status/node-status.js';
|
|
7
|
+
import { formatEarnings, formatTokens } from '../formatters.js';
|
|
8
|
+
/**
|
|
9
|
+
* Register the `antseed status` command on the Commander program.
|
|
10
|
+
*/
|
|
11
|
+
export function registerStatusCommand(program) {
|
|
12
|
+
program
|
|
13
|
+
.command('status')
|
|
14
|
+
.description('Show current Antseed node status')
|
|
15
|
+
.option('--json', 'output as JSON', false)
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
try {
|
|
18
|
+
const globalOpts = getGlobalOptions(program);
|
|
19
|
+
const config = await loadConfig(globalOpts.config);
|
|
20
|
+
const effectiveSeller = resolveEffectiveSellerConfig({ config });
|
|
21
|
+
const status = await getNodeStatus(config);
|
|
22
|
+
if (options.json) {
|
|
23
|
+
console.log(JSON.stringify(status, null, 2));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// State badge
|
|
27
|
+
const stateColors = {
|
|
28
|
+
seeding: chalk.green,
|
|
29
|
+
connected: chalk.cyan,
|
|
30
|
+
idle: chalk.gray,
|
|
31
|
+
};
|
|
32
|
+
const colorFn = stateColors[status.state] ?? chalk.white;
|
|
33
|
+
console.log(chalk.bold('Status: ') + colorFn(status.state.toUpperCase()));
|
|
34
|
+
console.log('');
|
|
35
|
+
// Summary table
|
|
36
|
+
const table = new Table({
|
|
37
|
+
head: [chalk.bold('Metric'), chalk.bold('Value')],
|
|
38
|
+
colWidths: [25, 35],
|
|
39
|
+
});
|
|
40
|
+
table.push(['Peers connected', chalk.cyan(String(status.peerCount))], ['Earnings today', chalk.green(formatEarnings(status.earningsToday))], ['Tokens today', formatTokens(status.tokensToday)], ['Active channels', String(status.activeChannels)], ['Uptime', status.uptime], ['Wallet address', status.walletAddress ?? chalk.dim('not configured')], ['Proxy port', status.proxyPort ? String(status.proxyPort) : chalk.dim('n/a')]);
|
|
41
|
+
if (status.state === 'seeding') {
|
|
42
|
+
table.push([
|
|
43
|
+
'Seller pricing defaults (USD/1M in/out)',
|
|
44
|
+
`${effectiveSeller.pricing.defaults.inputUsdPerMillion} / ${effectiveSeller.pricing.defaults.outputUsdPerMillion}`,
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
47
|
+
console.log(table.toString());
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error(chalk.red(`Error: ${err.message}`));
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0G/D"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getGlobalOptions } from './types.js';
|
|
4
|
+
import { loadConfig } from '../../config/loader.js';
|
|
5
|
+
import { createSubPoolClient, loadCryptoContext, formatUsdc, } from '../payment-utils.js';
|
|
6
|
+
export function registerSubscribeCommand(program) {
|
|
7
|
+
const subscribe = program
|
|
8
|
+
.command('subscribe')
|
|
9
|
+
.description('Manage subscription pool membership');
|
|
10
|
+
subscribe
|
|
11
|
+
.command('join <tierId>')
|
|
12
|
+
.description('Subscribe to a tier')
|
|
13
|
+
.action(async (tierIdStr) => {
|
|
14
|
+
const globalOpts = getGlobalOptions(program);
|
|
15
|
+
const config = await loadConfig(globalOpts.config);
|
|
16
|
+
const tierId = parseInt(tierIdStr, 10);
|
|
17
|
+
if (isNaN(tierId) || tierId < 0) {
|
|
18
|
+
console.error(chalk.red('Error: tierId must be a non-negative integer.'));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const spinner = ora('Fetching tier info...').start();
|
|
22
|
+
try {
|
|
23
|
+
const { wallet, address } = await loadCryptoContext(globalOpts.dataDir);
|
|
24
|
+
const subPoolClient = createSubPoolClient(config);
|
|
25
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
26
|
+
const tier = await subPoolClient.getTier(tierId);
|
|
27
|
+
if (!tier.active) {
|
|
28
|
+
spinner.fail(chalk.red(`Tier ${tierId} is not active.`));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
console.log(chalk.dim(`Tier ${tierId}: ${formatUsdc(tier.monthlyFee)} USDC/month, ${tier.dailyTokenBudget.toString()} tokens/day`));
|
|
32
|
+
spinner.text = 'Subscribing...';
|
|
33
|
+
const txHash = await subPoolClient.subscribe(wallet, tierId);
|
|
34
|
+
spinner.succeed(chalk.green(`Subscribed to tier ${tierId}`));
|
|
35
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
spinner.fail(chalk.red(`Subscribe failed: ${err.message}`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
subscribe
|
|
43
|
+
.command('status')
|
|
44
|
+
.description('Check subscription status')
|
|
45
|
+
.option('--json', 'output as JSON', false)
|
|
46
|
+
.action(async (options) => {
|
|
47
|
+
const globalOpts = getGlobalOptions(program);
|
|
48
|
+
const config = await loadConfig(globalOpts.config);
|
|
49
|
+
const spinner = ora('Checking subscription...').start();
|
|
50
|
+
try {
|
|
51
|
+
const { address } = await loadCryptoContext(globalOpts.dataDir);
|
|
52
|
+
const subPoolClient = createSubPoolClient(config);
|
|
53
|
+
const [active, remaining] = await Promise.all([
|
|
54
|
+
subPoolClient.isSubscriptionActive(address),
|
|
55
|
+
subPoolClient.getRemainingDailyBudget(address),
|
|
56
|
+
]);
|
|
57
|
+
spinner.stop();
|
|
58
|
+
if (options.json) {
|
|
59
|
+
console.log(JSON.stringify({
|
|
60
|
+
address,
|
|
61
|
+
active,
|
|
62
|
+
remainingDailyBudget: remaining.toString(),
|
|
63
|
+
}, null, 2));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
console.log(chalk.bold('Subscription Status:\n'));
|
|
67
|
+
console.log(` Active: ${active ? chalk.green('Yes') : chalk.red('No')}`);
|
|
68
|
+
console.log(` Remaining daily budget: ${chalk.cyan(remaining.toString() + ' tokens')}`);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
spinner.fail(chalk.red(`Status check failed: ${err.message}`));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
subscribe
|
|
76
|
+
.command('cancel')
|
|
77
|
+
.description('Cancel your subscription')
|
|
78
|
+
.action(async () => {
|
|
79
|
+
const globalOpts = getGlobalOptions(program);
|
|
80
|
+
const config = await loadConfig(globalOpts.config);
|
|
81
|
+
const spinner = ora('Cancelling subscription...').start();
|
|
82
|
+
try {
|
|
83
|
+
const { wallet, address } = await loadCryptoContext(globalOpts.dataDir);
|
|
84
|
+
const subPoolClient = createSubPoolClient(config);
|
|
85
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
86
|
+
const txHash = await subPoolClient.cancelSubscription(wallet);
|
|
87
|
+
spinner.succeed(chalk.green('Subscription cancelled'));
|
|
88
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
spinner.fail(chalk.red(`Cancel failed: ${err.message}`));
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=subscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../../src/cli/commands/subscribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/** All command registration functions follow this signature */
|
|
3
|
+
export type RegisterCommandFn = (program: Command) => void;
|
|
4
|
+
/** Global CLI options available to all commands */
|
|
5
|
+
export interface GlobalOptions {
|
|
6
|
+
config: string;
|
|
7
|
+
dataDir: string;
|
|
8
|
+
verbose: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Extract global options from the Commander program instance.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getGlobalOptions(program: Command): GlobalOptions;
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAE3D,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAyBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAqBhE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
const NEW_HOME_DIR = join(homedir(), '.antseed');
|
|
4
|
+
const NEW_CONFIG_PATH = join(NEW_HOME_DIR, 'config.json');
|
|
5
|
+
function resolvePathWithHome(pathLike, fallbackAbsolutePath) {
|
|
6
|
+
const raw = typeof pathLike === 'string' ? pathLike.trim() : '';
|
|
7
|
+
if (raw.length === 0) {
|
|
8
|
+
return fallbackAbsolutePath;
|
|
9
|
+
}
|
|
10
|
+
if (raw === '~') {
|
|
11
|
+
return homedir();
|
|
12
|
+
}
|
|
13
|
+
if (raw.startsWith('~/')) {
|
|
14
|
+
return join(homedir(), raw.slice(2));
|
|
15
|
+
}
|
|
16
|
+
return resolve(raw);
|
|
17
|
+
}
|
|
18
|
+
function isTruthyEnv(value) {
|
|
19
|
+
if (!value)
|
|
20
|
+
return false;
|
|
21
|
+
const normalized = value.trim().toLowerCase();
|
|
22
|
+
return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract global options from the Commander program instance.
|
|
26
|
+
*/
|
|
27
|
+
export function getGlobalOptions(program) {
|
|
28
|
+
const opts = program.opts();
|
|
29
|
+
const verbose = opts['verbose'] ?? false;
|
|
30
|
+
if (verbose || isTruthyEnv(process.env['ANTSEED_DEBUG'])) {
|
|
31
|
+
process.env['ANTSEED_DEBUG'] = '1';
|
|
32
|
+
}
|
|
33
|
+
const requestedConfig = resolvePathWithHome(opts['config'] ?? process.env['ANTSEED_CONFIG'] ?? '~/.antseed/config.json', NEW_CONFIG_PATH);
|
|
34
|
+
const requestedDataDir = resolvePathWithHome(opts['dataDir'] ?? process.env['ANTSEED_DATA_DIR'] ?? '~/.antseed', NEW_HOME_DIR);
|
|
35
|
+
return {
|
|
36
|
+
config: requestedConfig,
|
|
37
|
+
dataDir: requestedDataDir,
|
|
38
|
+
verbose,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/commands/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAY1C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACjD,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAE1D,SAAS,mBAAmB,CAAC,QAAgB,EAAE,oBAA4B;IACzE,MAAM,GAAG,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,CAAC;AACpG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;IACzC,IAAI,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;IACrC,CAAC;IAED,MAAM,eAAe,GAAG,mBAAmB,CACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,wBAAwB,EAC3E,eAAe,CAChB,CAAC;IACF,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,YAAY,EAClE,YAAY,CACb,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,gBAAgB;QACzB,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgD9D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getGlobalOptions } from './types.js';
|
|
4
|
+
import { loadConfig } from '../../config/loader.js';
|
|
5
|
+
import { loadOrCreateIdentity, DepositsClient, } from '@antseed/node';
|
|
6
|
+
export function registerWithdrawCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('withdraw <amount>')
|
|
9
|
+
.description('Withdraw USDC from the deposits contract (amount in human-readable USDC, e.g. "5" = 5 USDC)')
|
|
10
|
+
.action(async (amount) => {
|
|
11
|
+
const globalOpts = getGlobalOptions(program);
|
|
12
|
+
const config = await loadConfig(globalOpts.config);
|
|
13
|
+
const payments = config.payments;
|
|
14
|
+
if (!payments?.crypto) {
|
|
15
|
+
console.error(chalk.red('Error: No crypto payment configuration found.'));
|
|
16
|
+
console.error(chalk.dim('Configure payments.crypto in your config file or run: antseed init'));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const amountFloat = parseFloat(amount);
|
|
20
|
+
if (isNaN(amountFloat) || amountFloat <= 0) {
|
|
21
|
+
console.error(chalk.red('Error: Amount must be a positive number.'));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
// Convert human-readable USDC to base units (6 decimals)
|
|
25
|
+
const amountBaseUnits = BigInt(Math.round(amountFloat * 1_000_000));
|
|
26
|
+
const identity = await loadOrCreateIdentity(globalOpts.dataDir);
|
|
27
|
+
const wallet = identity.wallet;
|
|
28
|
+
const address = identity.wallet.address;
|
|
29
|
+
const depositsClient = new DepositsClient({
|
|
30
|
+
rpcUrl: payments.crypto.rpcUrl,
|
|
31
|
+
contractAddress: payments.crypto.depositsContractAddress,
|
|
32
|
+
usdcAddress: payments.crypto.usdcContractAddress,
|
|
33
|
+
});
|
|
34
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
35
|
+
console.log(chalk.dim(`Amount: ${amountFloat} USDC (${amountBaseUnits} base units)`));
|
|
36
|
+
const spinner = ora('Withdrawing USDC from deposits contract...').start();
|
|
37
|
+
try {
|
|
38
|
+
const txHash = await depositsClient.withdraw(wallet, address, amountBaseUnits);
|
|
39
|
+
spinner.succeed(chalk.green(`Withdrew ${amountFloat} USDC`));
|
|
40
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
spinner.fail(chalk.red(`Withdrawal failed: ${err.message}`));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=withdraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../../src/cli/commands/withdraw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a USD earnings string with a dollar sign and green color.
|
|
3
|
+
* @param amountUSD - Amount as string (e.g., "1.234567")
|
|
4
|
+
* @returns Formatted string like "$1.23"
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatEarnings(amountUSD: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Format a token count with K/M suffix.
|
|
9
|
+
* @param tokens - Number of tokens
|
|
10
|
+
* @returns Formatted string like "1.5K" or "2.3M"
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatTokens(tokens: number): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format a capacity usage percentage with color coding.
|
|
15
|
+
* Green < 50%, Yellow 50-80%, Red > 80%
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatCapacity(percent: number): string;
|
|
18
|
+
/**
|
|
19
|
+
* Format a duration in milliseconds to a human-readable string.
|
|
20
|
+
* @param ms - Duration in milliseconds
|
|
21
|
+
* @returns String like "2h 15m" or "45s" or "3d 1h"
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatDuration(ms: number): string;
|
|
24
|
+
/**
|
|
25
|
+
* Format a reputation score (0-1) with color coding.
|
|
26
|
+
* Green >= 0.8, Yellow >= 0.5, Red < 0.5
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatReputation(score: number): string;
|
|
29
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CASjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Format a USD earnings string with a dollar sign and green color.
|
|
4
|
+
* @param amountUSD - Amount as string (e.g., "1.234567")
|
|
5
|
+
* @returns Formatted string like "$1.23"
|
|
6
|
+
*/
|
|
7
|
+
export function formatEarnings(amountUSD) {
|
|
8
|
+
const num = parseFloat(amountUSD);
|
|
9
|
+
return chalk.green(`$${num.toFixed(2)}`);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Format a token count with K/M suffix.
|
|
13
|
+
* @param tokens - Number of tokens
|
|
14
|
+
* @returns Formatted string like "1.5K" or "2.3M"
|
|
15
|
+
*/
|
|
16
|
+
export function formatTokens(tokens) {
|
|
17
|
+
if (tokens >= 1_000_000) {
|
|
18
|
+
return `${(tokens / 1_000_000).toFixed(1)}M`;
|
|
19
|
+
}
|
|
20
|
+
if (tokens >= 1_000) {
|
|
21
|
+
return `${(tokens / 1_000).toFixed(1)}K`;
|
|
22
|
+
}
|
|
23
|
+
return String(tokens);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Format a capacity usage percentage with color coding.
|
|
27
|
+
* Green < 50%, Yellow 50-80%, Red > 80%
|
|
28
|
+
*/
|
|
29
|
+
export function formatCapacity(percent) {
|
|
30
|
+
const label = `${percent.toFixed(0)}%`;
|
|
31
|
+
if (percent < 50)
|
|
32
|
+
return chalk.green(label);
|
|
33
|
+
if (percent < 80)
|
|
34
|
+
return chalk.yellow(label);
|
|
35
|
+
return chalk.red(label);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Format a duration in milliseconds to a human-readable string.
|
|
39
|
+
* @param ms - Duration in milliseconds
|
|
40
|
+
* @returns String like "2h 15m" or "45s" or "3d 1h"
|
|
41
|
+
*/
|
|
42
|
+
export function formatDuration(ms) {
|
|
43
|
+
const seconds = Math.floor(ms / 1000);
|
|
44
|
+
if (seconds < 60)
|
|
45
|
+
return `${seconds}s`;
|
|
46
|
+
const minutes = Math.floor(seconds / 60);
|
|
47
|
+
if (minutes < 60)
|
|
48
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
49
|
+
const hours = Math.floor(minutes / 60);
|
|
50
|
+
if (hours < 24)
|
|
51
|
+
return `${hours}h ${minutes % 60}m`;
|
|
52
|
+
const days = Math.floor(hours / 24);
|
|
53
|
+
return `${days}d ${hours % 24}h`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Format a reputation score (0-1) with color coding.
|
|
57
|
+
* Green >= 0.8, Yellow >= 0.5, Red < 0.5
|
|
58
|
+
*/
|
|
59
|
+
export function formatReputation(score) {
|
|
60
|
+
const label = `${(score * 100).toFixed(0)}%`;
|
|
61
|
+
if (score >= 0.8)
|
|
62
|
+
return chalk.green(label);
|
|
63
|
+
if (score >= 0.5)
|
|
64
|
+
return chalk.yellow(label);
|
|
65
|
+
return chalk.red(label);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC"}
|