httpcat-cli 0.0.1
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/.claude/settings.local.json +11 -0
- package/README.md +796 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +149 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/buy.d.ts.map +1 -0
- package/dist/commands/buy.js +37 -0
- package/dist/commands/buy.js.map +1 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +28 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +33 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +43 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +49 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/sell.d.ts.map +1 -0
- package/dist/commands/sell.js +64 -0
- package/dist/commands/sell.js.map +1 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +194 -0
- package/dist/config.js.map +1 -0
- package/dist/headless/json-output.d.ts.map +1 -0
- package/dist/headless/json-output.js +73 -0
- package/dist/headless/json-output.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +478 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive/art.d.ts.map +1 -0
- package/dist/interactive/art.js +136 -0
- package/dist/interactive/art.js.map +1 -0
- package/dist/interactive/shell.d.ts.map +1 -0
- package/dist/interactive/shell.js +223 -0
- package/dist/interactive/shell.js.map +1 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +119 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +77 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/token-resolver.d.ts.map +1 -0
- package/dist/utils/token-resolver.js +41 -0
- package/dist/utils/token-resolver.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +31 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { createInterface } from 'readline';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { config } from '../config.js';
|
|
4
|
+
import { printWelcome, printCat } from './art.js';
|
|
5
|
+
import { handleError } from '../utils/errors.js';
|
|
6
|
+
// Import commands
|
|
7
|
+
import { createToken, displayCreateResult } from '../commands/create.js';
|
|
8
|
+
import { buyToken, displayBuyResult } from '../commands/buy.js';
|
|
9
|
+
import { sellToken, displaySellResult, parseTokenAmount } from '../commands/sell.js';
|
|
10
|
+
import { getTokenInfo, displayTokenInfo } from '../commands/info.js';
|
|
11
|
+
import { listTokens, displayTokenList } from '../commands/list.js';
|
|
12
|
+
import { checkHealth, displayHealthStatus } from '../commands/health.js';
|
|
13
|
+
export async function startInteractiveShell(client) {
|
|
14
|
+
// Display welcome message
|
|
15
|
+
console.clear();
|
|
16
|
+
const network = client.getNetwork();
|
|
17
|
+
printWelcome(undefined, network);
|
|
18
|
+
const rl = createInterface({
|
|
19
|
+
input: process.stdin,
|
|
20
|
+
output: process.stdout,
|
|
21
|
+
prompt: chalk.cyan('httpcat> '),
|
|
22
|
+
});
|
|
23
|
+
console.log();
|
|
24
|
+
console.log(chalk.dim('Type "help" for available commands or "exit" to quit'));
|
|
25
|
+
console.log();
|
|
26
|
+
rl.prompt();
|
|
27
|
+
rl.on('line', async (line) => {
|
|
28
|
+
const trimmed = line.trim();
|
|
29
|
+
if (!trimmed) {
|
|
30
|
+
rl.prompt();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const [command, ...args] = trimmed.split(/\s+/);
|
|
34
|
+
try {
|
|
35
|
+
await handleCommand(client, command.toLowerCase(), args);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
handleError(error, config.get('preferences')?.verboseLogging);
|
|
39
|
+
}
|
|
40
|
+
console.log();
|
|
41
|
+
rl.prompt();
|
|
42
|
+
});
|
|
43
|
+
rl.on('close', () => {
|
|
44
|
+
console.log();
|
|
45
|
+
printCat('sleeping');
|
|
46
|
+
console.log(chalk.cyan('Goodbye! š'));
|
|
47
|
+
process.exit(0);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async function handleCommand(client, command, args) {
|
|
51
|
+
switch (command) {
|
|
52
|
+
case 'help':
|
|
53
|
+
displayHelp();
|
|
54
|
+
break;
|
|
55
|
+
case 'create': {
|
|
56
|
+
if (args.length < 2) {
|
|
57
|
+
console.log(chalk.red('Usage: create <name> <symbol> [--photo URL] [--banner URL] [--website URL]'));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const [name, symbol] = args;
|
|
61
|
+
const photoUrl = extractFlag(args, '--photo');
|
|
62
|
+
const bannerUrl = extractFlag(args, '--banner');
|
|
63
|
+
const websiteUrl = extractFlag(args, '--website');
|
|
64
|
+
const result = await createToken(client, {
|
|
65
|
+
name,
|
|
66
|
+
symbol,
|
|
67
|
+
photoUrl,
|
|
68
|
+
bannerUrl,
|
|
69
|
+
websiteUrl,
|
|
70
|
+
});
|
|
71
|
+
displayCreateResult(result);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case 'buy': {
|
|
75
|
+
if (args.length < 2) {
|
|
76
|
+
console.log(chalk.red('Usage: buy <tokenId|name|symbol> <amount>'));
|
|
77
|
+
console.log(chalk.dim(' amount: 1, 2, or 5 (test mode) or 50, 100, 200 (production)'));
|
|
78
|
+
console.log(chalk.dim(' Examples: buy abc123-... 5, buy "My Token" 2, buy MTK 1'));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const [identifier, amount] = args;
|
|
82
|
+
const isTestMode = client.getNetwork().includes('sepolia');
|
|
83
|
+
const result = await buyToken(client, identifier, amount, isTestMode);
|
|
84
|
+
displayBuyResult(result);
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case 'sell': {
|
|
88
|
+
if (args.length < 2) {
|
|
89
|
+
console.log(chalk.red('Usage: sell <tokenId|name|symbol> <amount|percentage|all>'));
|
|
90
|
+
console.log(chalk.dim(' Examples: sell abc123 1000, sell "My Token" 50%, sell MTK all'));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const [identifier, amountInput] = args;
|
|
94
|
+
// Get current holdings first
|
|
95
|
+
const info = await getTokenInfo(client, identifier);
|
|
96
|
+
if (!info.userPosition || info.userPosition.tokensOwned === '0') {
|
|
97
|
+
console.log(chalk.yellow('You do not own any of this token.'));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const tokenAmount = parseTokenAmount(amountInput, info.userPosition.tokensOwned);
|
|
101
|
+
const result = await sellToken(client, identifier, tokenAmount);
|
|
102
|
+
displaySellResult(result);
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case 'info': {
|
|
106
|
+
if (args.length < 1) {
|
|
107
|
+
console.log(chalk.red('Usage: info <tokenId|name|symbol>'));
|
|
108
|
+
console.log(chalk.dim(' Examples: info abc123-..., info "My Token", info MTK'));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const [identifier] = args;
|
|
112
|
+
const info = await getTokenInfo(client, identifier);
|
|
113
|
+
displayTokenInfo(info);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case 'list': {
|
|
117
|
+
const page = parseInt(extractFlag(args, '--page') || '1');
|
|
118
|
+
const limit = parseInt(extractFlag(args, '--limit') || '20');
|
|
119
|
+
const sortBy = (extractFlag(args, '--sort') || 'mcap');
|
|
120
|
+
const result = await listTokens(client, page, limit, sortBy);
|
|
121
|
+
displayTokenList(result);
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case 'health': {
|
|
125
|
+
const health = await checkHealth(client);
|
|
126
|
+
displayHealthStatus(health);
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case 'config': {
|
|
130
|
+
if (args[0] === '--show') {
|
|
131
|
+
displayConfig();
|
|
132
|
+
}
|
|
133
|
+
else if (args[0] === '--set' && args[1]) {
|
|
134
|
+
const [key, value] = args[1].split('=');
|
|
135
|
+
config.set(key, value);
|
|
136
|
+
console.log(chalk.green(`ā
${key} set to ${value}`));
|
|
137
|
+
}
|
|
138
|
+
else if (args[0] === '--reset') {
|
|
139
|
+
await config.runSetupWizard();
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
console.log(chalk.red('Usage: config [--show|--set key=value|--reset]'));
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
case 'network': {
|
|
147
|
+
if (args.length < 1) {
|
|
148
|
+
console.log(chalk.yellow('Current network:'), chalk.cyan(config.get('network')));
|
|
149
|
+
console.log(chalk.dim('Usage: network <base-sepolia|base>'));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const network = args[0];
|
|
153
|
+
if (network !== 'base-sepolia' && network !== 'base') {
|
|
154
|
+
console.log(chalk.red('Invalid network. Must be "base-sepolia" or "base"'));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
config.set('network', network);
|
|
158
|
+
console.log(chalk.green(`ā
Network switched to ${network}`));
|
|
159
|
+
console.log(chalk.yellow('ā ļø Restart the shell for changes to take effect'));
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case 'exit':
|
|
163
|
+
case 'quit':
|
|
164
|
+
process.exit(0);
|
|
165
|
+
break;
|
|
166
|
+
default:
|
|
167
|
+
console.log(chalk.red(`Unknown command: ${command}`));
|
|
168
|
+
console.log(chalk.dim('Type "help" for available commands'));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function displayHelp() {
|
|
172
|
+
console.log();
|
|
173
|
+
console.log(chalk.cyan.bold('Available Commands:'));
|
|
174
|
+
console.log();
|
|
175
|
+
const commands = [
|
|
176
|
+
['create <name> <symbol>', 'Create a new token'],
|
|
177
|
+
['buy <id|name|symbol> <amount>', 'Buy tokens ($1, $2, or $5)'],
|
|
178
|
+
['sell <id|name|symbol> <amount|all>', 'Sell tokens'],
|
|
179
|
+
['info <id|name|symbol>', 'Get token information'],
|
|
180
|
+
['list [--sort mcap|created]', 'List all tokens'],
|
|
181
|
+
['health', 'Check agent health'],
|
|
182
|
+
['config [--show|--set|--reset]', 'Manage configuration'],
|
|
183
|
+
['network <name>', 'Switch network'],
|
|
184
|
+
['help', 'Show this help message'],
|
|
185
|
+
['exit', 'Exit the shell'],
|
|
186
|
+
];
|
|
187
|
+
for (const [cmd, desc] of commands) {
|
|
188
|
+
console.log(` ${chalk.cyan(cmd.padEnd(30))} ${chalk.dim(desc)}`);
|
|
189
|
+
}
|
|
190
|
+
console.log();
|
|
191
|
+
console.log(chalk.dim('Examples:'));
|
|
192
|
+
console.log(chalk.dim(' create "My Token" "MTK"'));
|
|
193
|
+
console.log(chalk.dim(' buy abc123-... 5'));
|
|
194
|
+
console.log(chalk.dim(' buy "My Token" 2'));
|
|
195
|
+
console.log(chalk.dim(' buy MTK 1'));
|
|
196
|
+
console.log(chalk.dim(' sell abc123-... 50%'));
|
|
197
|
+
console.log(chalk.dim(' info "My Token"'));
|
|
198
|
+
console.log(chalk.dim(' list --sort mcap --limit 10'));
|
|
199
|
+
console.log();
|
|
200
|
+
}
|
|
201
|
+
function displayConfig() {
|
|
202
|
+
const cfg = config.getAll();
|
|
203
|
+
console.log();
|
|
204
|
+
console.log(chalk.cyan.bold('Current Configuration:'));
|
|
205
|
+
console.log();
|
|
206
|
+
console.log(chalk.dim('Network:'), chalk.cyan(cfg.network));
|
|
207
|
+
console.log(chalk.dim('Agent URL:'), chalk.cyan(cfg.agentUrl));
|
|
208
|
+
console.log(chalk.dim('Facilitator:'), chalk.cyan(cfg.facilitatorUrl));
|
|
209
|
+
console.log(chalk.dim('Max Payment:'), chalk.cyan('$' + cfg.defaultMaxPayment));
|
|
210
|
+
console.log(chalk.dim('ASCII Art:'), chalk.cyan(cfg.preferences.enableAsciiArt ? 'enabled' : 'disabled'));
|
|
211
|
+
console.log(chalk.dim('Private Key:'), chalk.dim(cfg.privateKey ? 'configured' : 'not configured'));
|
|
212
|
+
console.log();
|
|
213
|
+
console.log(chalk.dim(`Config file: ${config.getConfigPath()}`));
|
|
214
|
+
console.log();
|
|
215
|
+
}
|
|
216
|
+
function extractFlag(args, flag) {
|
|
217
|
+
const index = args.findIndex(arg => arg === flag);
|
|
218
|
+
if (index >= 0 && index < args.length - 1) {
|
|
219
|
+
return args[index + 1];
|
|
220
|
+
}
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/interactive/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAqB;IAC/D,0BAA0B;IAC1B,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;KAChC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,EAAE,CAAC,MAAM,EAAE,CAAC;IAEZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAAqB,EACrB,OAAe,EACf,IAAc;IAEd,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,WAAW,EAAE,CAAC;YACd,MAAM;QAER,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC,CAAC;gBACrG,OAAO;YACT,CAAC;YAED,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;YAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAElD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE;gBACvC,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,SAAS;gBACT,UAAU;aACX,CAAC,CAAC;YAEH,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM;QACR,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;gBACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;gBACpF,OAAO;YACT,CAAC;YAED,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;YAClC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YACtE,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;gBAC1F,OAAO;YACT,CAAC;YAED,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;YAEvC,6BAA6B;YAC7B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,GAAG,EAAE,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YAChE,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACpD,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAgC,CAAC;YAEtF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7D,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACzB,aAAa,EAAE,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxC,MAAM,CAAC,GAAG,CAAC,GAAU,EAAE,KAAK,CAAC,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBAC5E,OAAO;YACT,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC9E,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM;QAER;YACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,QAAQ,GAAG;QACf,CAAC,wBAAwB,EAAE,oBAAoB,CAAC;QAChD,CAAC,+BAA+B,EAAE,4BAA4B,CAAC;QAC/D,CAAC,oCAAoC,EAAE,aAAa,CAAC;QACrD,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;QAClD,CAAC,4BAA4B,EAAE,iBAAiB,CAAC;QACjD,CAAC,QAAQ,EAAE,oBAAoB,CAAC;QAChC,CAAC,+BAA+B,EAAE,sBAAsB,CAAC;QACzD,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;QACpC,CAAC,MAAM,EAAE,wBAAwB,CAAC;QAClC,CAAC,MAAM,EAAE,gBAAgB,CAAC;KAC3B,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAE5B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAc,EAAE,IAAY;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IAClD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,UAAQ,GAAG,IAAI,CAgGjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAsBlD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { HttpcatError } from '../client.js';
|
|
3
|
+
export function handleError(error, verbose = false) {
|
|
4
|
+
if (error instanceof HttpcatError) {
|
|
5
|
+
console.error(chalk.red('ā Request failed'));
|
|
6
|
+
console.error(chalk.dim(` Status: ${error.status}`));
|
|
7
|
+
console.error(chalk.dim(` Message: ${error.message}`));
|
|
8
|
+
if (error.status === 402) {
|
|
9
|
+
console.error();
|
|
10
|
+
console.error(chalk.yellow('š” Payment Required'));
|
|
11
|
+
console.error(chalk.dim(' This operation requires payment via x402 protocol'));
|
|
12
|
+
console.error(chalk.dim(' Make sure you have sufficient USDC in your wallet'));
|
|
13
|
+
}
|
|
14
|
+
else if (error.status === 400) {
|
|
15
|
+
console.error();
|
|
16
|
+
console.error(chalk.yellow('š” Validation Error'));
|
|
17
|
+
console.error(chalk.dim(' Check your input parameters'));
|
|
18
|
+
}
|
|
19
|
+
else if (error.status === 404) {
|
|
20
|
+
console.error();
|
|
21
|
+
console.error(chalk.yellow('š” Not Found'));
|
|
22
|
+
console.error(chalk.dim(' The requested resource does not exist'));
|
|
23
|
+
}
|
|
24
|
+
else if (error.status >= 500) {
|
|
25
|
+
console.error();
|
|
26
|
+
console.error(chalk.yellow('š” Server Error'));
|
|
27
|
+
console.error(chalk.dim(' The agent encountered an internal error'));
|
|
28
|
+
// Show endpoint info if available
|
|
29
|
+
if (error.details?.endpoint) {
|
|
30
|
+
const fullUrl = error.details.endpoint;
|
|
31
|
+
const urlMatch = fullUrl.match(/^(https?:\/\/[^/]+)/);
|
|
32
|
+
const baseUrl = urlMatch ? urlMatch[1] : '';
|
|
33
|
+
const endpoint = fullUrl.replace(/^https?:\/\/[^/]+/, '');
|
|
34
|
+
console.error(chalk.dim(` Endpoint: ${endpoint}`));
|
|
35
|
+
console.error(chalk.dim(` Agent URL: ${baseUrl}`));
|
|
36
|
+
}
|
|
37
|
+
// Show more helpful message for common issues
|
|
38
|
+
if (error.details?.error && typeof error.details.error === 'object') {
|
|
39
|
+
const errorObj = error.details.error;
|
|
40
|
+
if (errorObj.code || errorObj.message) {
|
|
41
|
+
console.error(chalk.dim(` Error: ${errorObj.message || errorObj.code || 'Unknown error'}`));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.error(chalk.dim(' Try:'));
|
|
45
|
+
console.error(chalk.dim(' - Check if the agent is running: httpcat health'));
|
|
46
|
+
console.error(chalk.dim(' - Verify the endpoint exists and is working'));
|
|
47
|
+
console.error(chalk.dim(' - Check agent logs for more details'));
|
|
48
|
+
console.error(chalk.dim(' - Use --verbose for more details'));
|
|
49
|
+
}
|
|
50
|
+
if (verbose && error.details) {
|
|
51
|
+
console.error();
|
|
52
|
+
console.error(chalk.dim('Full Error Details:'));
|
|
53
|
+
console.error(chalk.dim(JSON.stringify(error.details, null, 2)));
|
|
54
|
+
}
|
|
55
|
+
else if (error.status >= 500 && error.details) {
|
|
56
|
+
// Always show some details for 500 errors, even without verbose
|
|
57
|
+
const details = error.details;
|
|
58
|
+
if (details.rawResponse && details.rawResponse !== details.error) {
|
|
59
|
+
console.error();
|
|
60
|
+
console.error(chalk.dim('Response:'));
|
|
61
|
+
console.error(chalk.dim(details.rawResponse.substring(0, 200)));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (error instanceof Error) {
|
|
66
|
+
console.error(chalk.red('ā Error: ' + error.message));
|
|
67
|
+
if (verbose && error.stack) {
|
|
68
|
+
console.error();
|
|
69
|
+
console.error(chalk.dim('Stack trace:'));
|
|
70
|
+
console.error(chalk.dim(error.stack));
|
|
71
|
+
}
|
|
72
|
+
// Specific error handling
|
|
73
|
+
if (error.message.includes('insufficient funds')) {
|
|
74
|
+
console.error();
|
|
75
|
+
console.error(chalk.yellow('š” Insufficient funds'));
|
|
76
|
+
console.error(chalk.dim(' Make sure you have enough USDC and ETH for gas'));
|
|
77
|
+
}
|
|
78
|
+
else if (error.message.includes('private key')) {
|
|
79
|
+
console.error();
|
|
80
|
+
console.error(chalk.yellow('š” Configuration Error'));
|
|
81
|
+
console.error(chalk.dim(' Run "httpcat config" to configure your wallet'));
|
|
82
|
+
}
|
|
83
|
+
else if (error.message.includes('network')) {
|
|
84
|
+
console.error();
|
|
85
|
+
console.error(chalk.yellow('š” Network Error'));
|
|
86
|
+
console.error(chalk.dim(' Check your internet connection'));
|
|
87
|
+
console.error(chalk.dim(' Verify the agent URL is correct'));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.error(chalk.red('ā Unknown error:'), error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export function getExitCode(error) {
|
|
95
|
+
if (error instanceof HttpcatError) {
|
|
96
|
+
if (error.status === 400)
|
|
97
|
+
return 5; // Validation error
|
|
98
|
+
if (error.status === 402)
|
|
99
|
+
return 4; // Insufficient funds
|
|
100
|
+
if (error.status === 404)
|
|
101
|
+
return 1; // Not found
|
|
102
|
+
if (error.status >= 500)
|
|
103
|
+
return 3; // Network/server error
|
|
104
|
+
return 1;
|
|
105
|
+
}
|
|
106
|
+
if (error instanceof Error) {
|
|
107
|
+
if (error.message.includes('private key') || error.message.includes('config')) {
|
|
108
|
+
return 2; // Configuration error
|
|
109
|
+
}
|
|
110
|
+
if (error.message.includes('network') || error.message.includes('connection')) {
|
|
111
|
+
return 3; // Network error
|
|
112
|
+
}
|
|
113
|
+
if (error.message.includes('insufficient funds')) {
|
|
114
|
+
return 4; // Insufficient funds
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return 1; // General error
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAY3E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAahE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAIjE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAQvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAmB7E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI9C"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import Table from 'cli-table3';
|
|
3
|
+
export function formatCurrency(value, decimals = 6) {
|
|
4
|
+
const num = typeof value === 'string' ? parseFloat(value) : value;
|
|
5
|
+
if (decimals === 6) {
|
|
6
|
+
// USDC
|
|
7
|
+
return `$${(num / 10 ** 6).toFixed(2)}`;
|
|
8
|
+
}
|
|
9
|
+
else if (decimals === 18) {
|
|
10
|
+
// Token amount
|
|
11
|
+
return (num / 10 ** 18).toLocaleString('en-US', {
|
|
12
|
+
maximumFractionDigits: 2,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
return num.toFixed(2);
|
|
16
|
+
}
|
|
17
|
+
export function formatTokenAmount(value) {
|
|
18
|
+
const amount = typeof value === 'string' ? BigInt(value) : value;
|
|
19
|
+
const divisor = BigInt(10 ** 18);
|
|
20
|
+
const whole = amount / divisor;
|
|
21
|
+
const fraction = amount % divisor;
|
|
22
|
+
if (fraction === 0n) {
|
|
23
|
+
return whole.toLocaleString('en-US');
|
|
24
|
+
}
|
|
25
|
+
// Show up to 4 decimal places
|
|
26
|
+
const fractionStr = fraction.toString().padStart(18, '0').slice(0, 4);
|
|
27
|
+
return `${whole.toLocaleString('en-US')}.${fractionStr}`;
|
|
28
|
+
}
|
|
29
|
+
export function formatAddress(address, length = 8) {
|
|
30
|
+
if (address.length <= length)
|
|
31
|
+
return address;
|
|
32
|
+
const half = Math.floor(length / 2);
|
|
33
|
+
return `${address.slice(0, half + 2)}...${address.slice(-half)}`;
|
|
34
|
+
}
|
|
35
|
+
export function formatPercent(value) {
|
|
36
|
+
return `${value.toFixed(2)}%`;
|
|
37
|
+
}
|
|
38
|
+
export function createTable(head) {
|
|
39
|
+
return new Table({
|
|
40
|
+
head: head.map((h) => chalk.cyan.bold(h)),
|
|
41
|
+
style: {
|
|
42
|
+
head: [],
|
|
43
|
+
border: ['dim'],
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export function printBox(title, content) {
|
|
48
|
+
const maxKeyLength = Math.max(...Object.keys(content).map((k) => k.length));
|
|
49
|
+
const maxValueLength = Math.max(...Object.values(content).map((v) => v.length));
|
|
50
|
+
const width = Math.max(maxKeyLength + maxValueLength + 5, title.length + 4);
|
|
51
|
+
console.log('ā' + 'ā'.repeat(width) + 'ā');
|
|
52
|
+
console.log('ā ' + chalk.bold(title) + ' '.repeat(width - title.length - 1) + 'ā');
|
|
53
|
+
console.log('ā' + 'ā'.repeat(width) + 'ā¤');
|
|
54
|
+
for (const [key, value] of Object.entries(content)) {
|
|
55
|
+
const padding = width - key.length - value.length - 3;
|
|
56
|
+
console.log(`ā ${chalk.dim(key + ':')} ${value}${' '.repeat(padding)}ā`);
|
|
57
|
+
}
|
|
58
|
+
console.log('ā' + 'ā'.repeat(width) + 'ā');
|
|
59
|
+
}
|
|
60
|
+
export function printSuccess(message) {
|
|
61
|
+
console.log(chalk.green('ā
' + message));
|
|
62
|
+
}
|
|
63
|
+
export function printError(message) {
|
|
64
|
+
console.log(chalk.red('ā ' + message));
|
|
65
|
+
}
|
|
66
|
+
export function printWarning(message) {
|
|
67
|
+
console.log(chalk.yellow('ā ļø ' + message));
|
|
68
|
+
}
|
|
69
|
+
export function printInfo(message) {
|
|
70
|
+
console.log(chalk.blue('ā¹ļø ' + message));
|
|
71
|
+
}
|
|
72
|
+
export function printHeader(text) {
|
|
73
|
+
console.log(chalk.cyan('='.repeat(80)));
|
|
74
|
+
console.log(chalk.cyan.bold(text));
|
|
75
|
+
console.log(chalk.cyan('='.repeat(80)));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/token-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,MAAM,UAAQ,GACb,OAAO,CAAC,MAAM,CAAC,CA4CjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { listTokens } from '../commands/list.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves a token identifier (ID, name, or symbol) to a token ID
|
|
5
|
+
*
|
|
6
|
+
* @param identifier - Token ID (UUID), name, or symbol
|
|
7
|
+
* @param client - HttpcatClient instance
|
|
8
|
+
* @param silent - If true, suppress output messages (for quiet/JSON mode)
|
|
9
|
+
* @returns Promise resolving to the token ID (UUID)
|
|
10
|
+
*/
|
|
11
|
+
export async function resolveTokenId(identifier, client, silent = false) {
|
|
12
|
+
// Check if it's a UUID (token ID)
|
|
13
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
14
|
+
if (uuidRegex.test(identifier)) {
|
|
15
|
+
return identifier;
|
|
16
|
+
}
|
|
17
|
+
// Otherwise, lookup by name or symbol
|
|
18
|
+
// Fetch tokens with a large limit to search through
|
|
19
|
+
const result = await listTokens(client, 1, 100, 'name');
|
|
20
|
+
// Case-insensitive search for matching name or symbol
|
|
21
|
+
const matches = result.tokens.filter((token) => token.name.toLowerCase() === identifier.toLowerCase() ||
|
|
22
|
+
token.symbol.toLowerCase() === identifier.toLowerCase());
|
|
23
|
+
if (matches.length === 0) {
|
|
24
|
+
throw new Error(`No token found with name or symbol: "${identifier}". ` +
|
|
25
|
+
`Please check the token name/symbol or use token ID (UUID format).`);
|
|
26
|
+
}
|
|
27
|
+
if (!silent) {
|
|
28
|
+
if (matches.length > 1) {
|
|
29
|
+
console.log(chalk.yellow(`ā ļø Multiple tokens found matching "${identifier}":`));
|
|
30
|
+
for (const token of matches) {
|
|
31
|
+
console.log(chalk.dim(` - ${token.name} (${token.symbol}) - ID: ${token.tokenId}`));
|
|
32
|
+
}
|
|
33
|
+
console.log(chalk.dim(`\nā
Using first match: ${matches[0].name} (${matches[0].symbol})`));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log(chalk.dim(`ā
Found token: ${matches[0].name} (${matches[0].symbol})`));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return matches[0].tokenId;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=token-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-resolver.js","sourceRoot":"","sources":["../../src/utils/token-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAsB,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAAqB,EACrB,MAAM,GAAG,KAAK;IAEd,kCAAkC;IAClC,MAAM,SAAS,GACb,iEAAiE,CAAC;IAEpE,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,sCAAsC;IACtC,oDAAoD;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAExD,sDAAsD;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAClC,CAAC,KAAoB,EAAE,EAAE,CACvB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE;QACrD,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAC1D,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,wCAAwC,UAAU,KAAK;YACvD,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,UAAU,IAAI,CAAC,CAAC,CAAC;YACjF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,0BAA0B,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAC9E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CACtE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAM7C;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,GACrB,IAAI,CAMN;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOrD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function validateTokenName(name) {
|
|
2
|
+
if (!name || name.length < 1 || name.length > 255) {
|
|
3
|
+
throw new Error('Token name must be between 1 and 255 characters');
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
export function validateTokenSymbol(symbol) {
|
|
7
|
+
if (!symbol || symbol.length < 1 || symbol.length > 10) {
|
|
8
|
+
throw new Error('Token symbol must be between 1 and 10 characters');
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function validateUrl(url) {
|
|
12
|
+
try {
|
|
13
|
+
new URL(url);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
throw new Error(`Invalid URL: ${url}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function validateAmount(amount, validAmounts) {
|
|
20
|
+
if (!validAmounts.includes(amount)) {
|
|
21
|
+
throw new Error(`Invalid amount: ${amount}. Must be one of: ${validAmounts.join(', ')}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function validateTokenId(tokenId) {
|
|
25
|
+
// Basic UUID validation
|
|
26
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
27
|
+
if (!uuidRegex.test(tokenId)) {
|
|
28
|
+
throw new Error(`Invalid token ID format: ${tokenId}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,YAAsB;IAEtB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,qBAAqB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,wBAAwB;IACxB,MAAM,SAAS,GACb,iEAAiE,CAAC;IACpE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "httpcat-cli",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "CLI tool for interacting with httpcat agent - create, buy, and sell tokens with x402 payments",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"httpcat": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"prepublishOnly": "yarn build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"httpcat",
|
|
18
|
+
"x402",
|
|
19
|
+
"tokens",
|
|
20
|
+
"cli",
|
|
21
|
+
"crypto"
|
|
22
|
+
],
|
|
23
|
+
"author": "",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://github.com/hathbanger/httpcat-cli"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/hathbanger/httpcat-cli#readme",
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/hathbanger/httpcat-cli/issues"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"chalk": "^5.3.0",
|
|
35
|
+
"cli-table3": "^0.6.3",
|
|
36
|
+
"commander": "^11.1.0",
|
|
37
|
+
"conf": "^12.0.0",
|
|
38
|
+
"global": "^4.4.0",
|
|
39
|
+
"inquirer": "^9.2.12",
|
|
40
|
+
"ora": "^7.0.1",
|
|
41
|
+
"viem": "^2.21.54",
|
|
42
|
+
"x402-fetch": "^0.1.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/inquirer": "^9.0.7",
|
|
46
|
+
"@types/node": "^20.10.0",
|
|
47
|
+
"typescript": "^5.3.3"
|
|
48
|
+
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=18.0.0"
|
|
51
|
+
}
|
|
52
|
+
}
|