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
package/dist/config.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
import { createInterface } from 'readline';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
const DEFAULT_ENVIRONMENTS = {
|
|
5
|
+
local: {
|
|
6
|
+
name: 'local',
|
|
7
|
+
agentUrl: 'http://localhost:8787',
|
|
8
|
+
network: 'base-sepolia',
|
|
9
|
+
},
|
|
10
|
+
sepolia: {
|
|
11
|
+
name: 'sepolia',
|
|
12
|
+
agentUrl: 'http://209.97.152.182:8787',
|
|
13
|
+
network: 'base-sepolia',
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
const DEFAULT_CONFIG = {
|
|
17
|
+
network: 'base-sepolia',
|
|
18
|
+
agentUrl: 'http://209.97.152.182:8787',
|
|
19
|
+
facilitatorUrl: 'https://facilitators.x402scan.com',
|
|
20
|
+
defaultMaxPayment: '10.00',
|
|
21
|
+
environment: 'sepolia',
|
|
22
|
+
environments: DEFAULT_ENVIRONMENTS,
|
|
23
|
+
preferences: {
|
|
24
|
+
enableAsciiArt: true,
|
|
25
|
+
colorOutput: true,
|
|
26
|
+
verboseLogging: false,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
export class ConfigManager {
|
|
30
|
+
store;
|
|
31
|
+
constructor() {
|
|
32
|
+
this.store = new Conf({
|
|
33
|
+
projectName: 'httpcat',
|
|
34
|
+
defaults: DEFAULT_CONFIG,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
get(key) {
|
|
38
|
+
return this.store.get(key);
|
|
39
|
+
}
|
|
40
|
+
set(key, value) {
|
|
41
|
+
this.store.set(key, value);
|
|
42
|
+
}
|
|
43
|
+
getAll() {
|
|
44
|
+
return this.store.store;
|
|
45
|
+
}
|
|
46
|
+
has(key) {
|
|
47
|
+
return this.store.has(key);
|
|
48
|
+
}
|
|
49
|
+
delete(key) {
|
|
50
|
+
this.store.delete(key);
|
|
51
|
+
}
|
|
52
|
+
clear() {
|
|
53
|
+
this.store.clear();
|
|
54
|
+
}
|
|
55
|
+
getConfigPath() {
|
|
56
|
+
return this.store.path;
|
|
57
|
+
}
|
|
58
|
+
isConfigured() {
|
|
59
|
+
return this.has('privateKey') && !!this.get('privateKey');
|
|
60
|
+
}
|
|
61
|
+
async runSetupWizard(options = {}) {
|
|
62
|
+
console.log(chalk.cyan('='.repeat(80)));
|
|
63
|
+
console.log(chalk.cyan.bold('🐱 httpcat Configuration Setup'));
|
|
64
|
+
console.log(chalk.cyan('='.repeat(80)));
|
|
65
|
+
console.log();
|
|
66
|
+
if (!options.skipPrivateKey) {
|
|
67
|
+
// Private key
|
|
68
|
+
console.log(chalk.yellow('⚠️ WARNING: Your private key will be stored locally'));
|
|
69
|
+
console.log(chalk.dim(` Config location: ${this.getConfigPath()}`));
|
|
70
|
+
console.log(chalk.dim(' Alternative: Use HTTPCAT_PRIVATE_KEY environment variable'));
|
|
71
|
+
console.log();
|
|
72
|
+
const privateKey = await this.prompt('Enter your private key (with 0x prefix): ');
|
|
73
|
+
if (!privateKey || !privateKey.startsWith('0x') || privateKey.length !== 66) {
|
|
74
|
+
throw new Error('Invalid private key format. Must start with 0x and be 66 characters long.');
|
|
75
|
+
}
|
|
76
|
+
this.set('privateKey', privateKey);
|
|
77
|
+
console.log(chalk.green('✅ Private key saved\n'));
|
|
78
|
+
}
|
|
79
|
+
// Network selection
|
|
80
|
+
console.log(chalk.bold('Select network:'));
|
|
81
|
+
console.log(' 1. base-sepolia (testnet)');
|
|
82
|
+
console.log(' 2. base (mainnet)');
|
|
83
|
+
const networkChoice = await this.prompt('Choice [1]: ', '1');
|
|
84
|
+
const network = networkChoice === '2' ? 'base' : 'base-sepolia';
|
|
85
|
+
this.set('network', network);
|
|
86
|
+
console.log(chalk.green(`✅ Network set to: ${network}\n`));
|
|
87
|
+
// Agent URL
|
|
88
|
+
const defaultUrl = network === 'base-sepolia'
|
|
89
|
+
? 'http://209.97.152.182:8787'
|
|
90
|
+
: 'http://209.97.152.182:8787';
|
|
91
|
+
const agentUrl = await this.prompt(`Agent URL [${defaultUrl}]: `, defaultUrl);
|
|
92
|
+
this.set('agentUrl', agentUrl);
|
|
93
|
+
console.log(chalk.green(`✅ Agent URL set to: ${agentUrl}\n`));
|
|
94
|
+
// ASCII art preference
|
|
95
|
+
const asciiArt = await this.prompt('Enable ASCII art? [Y/n]: ', 'y');
|
|
96
|
+
this.set('preferences', {
|
|
97
|
+
...this.get('preferences'),
|
|
98
|
+
enableAsciiArt: asciiArt.toLowerCase() !== 'n',
|
|
99
|
+
});
|
|
100
|
+
console.log();
|
|
101
|
+
console.log(chalk.cyan('='.repeat(80)));
|
|
102
|
+
console.log(chalk.green.bold('✅ Configuration complete!'));
|
|
103
|
+
console.log(chalk.cyan('='.repeat(80)));
|
|
104
|
+
console.log();
|
|
105
|
+
console.log(chalk.dim(`Config saved to: ${this.getConfigPath()}`));
|
|
106
|
+
console.log();
|
|
107
|
+
}
|
|
108
|
+
prompt(question, defaultValue) {
|
|
109
|
+
return new Promise((resolve) => {
|
|
110
|
+
const rl = createInterface({
|
|
111
|
+
input: process.stdin,
|
|
112
|
+
output: process.stdout,
|
|
113
|
+
});
|
|
114
|
+
rl.question(question, (answer) => {
|
|
115
|
+
rl.close();
|
|
116
|
+
resolve(answer.trim() || defaultValue || '');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
getPrivateKey() {
|
|
121
|
+
// Check environment variable first
|
|
122
|
+
const envKey = process.env.HTTPCAT_PRIVATE_KEY;
|
|
123
|
+
if (envKey) {
|
|
124
|
+
if (!envKey.startsWith('0x') || envKey.length !== 66) {
|
|
125
|
+
throw new Error('Invalid HTTPCAT_PRIVATE_KEY format in environment variable');
|
|
126
|
+
}
|
|
127
|
+
return envKey;
|
|
128
|
+
}
|
|
129
|
+
// Fall back to config
|
|
130
|
+
const configKey = this.get('privateKey');
|
|
131
|
+
if (!configKey) {
|
|
132
|
+
throw new Error('No private key configured. Run "httpcat config" or set HTTPCAT_PRIVATE_KEY environment variable.');
|
|
133
|
+
}
|
|
134
|
+
return configKey;
|
|
135
|
+
}
|
|
136
|
+
// Environment management methods
|
|
137
|
+
getEnvironments() {
|
|
138
|
+
const envs = this.get('environments');
|
|
139
|
+
if (!envs) {
|
|
140
|
+
// Initialize with defaults if not set
|
|
141
|
+
this.set('environments', DEFAULT_ENVIRONMENTS);
|
|
142
|
+
return DEFAULT_ENVIRONMENTS;
|
|
143
|
+
}
|
|
144
|
+
return envs;
|
|
145
|
+
}
|
|
146
|
+
getCurrentEnvironment() {
|
|
147
|
+
return this.get('environment');
|
|
148
|
+
}
|
|
149
|
+
getEnvironmentConfig(name) {
|
|
150
|
+
const envs = this.getEnvironments();
|
|
151
|
+
return envs[name];
|
|
152
|
+
}
|
|
153
|
+
setEnvironment(name) {
|
|
154
|
+
const envs = this.getEnvironments();
|
|
155
|
+
const env = envs[name];
|
|
156
|
+
if (!env) {
|
|
157
|
+
throw new Error(`Environment "${name}" not found. Use "httpcat env list" to see available environments.`);
|
|
158
|
+
}
|
|
159
|
+
// Update current environment
|
|
160
|
+
this.set('environment', name);
|
|
161
|
+
// Update agentUrl and network from environment
|
|
162
|
+
this.set('agentUrl', env.agentUrl);
|
|
163
|
+
this.set('network', env.network);
|
|
164
|
+
}
|
|
165
|
+
addEnvironment(name, agentUrl, network = 'base-sepolia') {
|
|
166
|
+
const envs = this.getEnvironments();
|
|
167
|
+
if (envs[name]) {
|
|
168
|
+
throw new Error(`Environment "${name}" already exists. Use a different name.`);
|
|
169
|
+
}
|
|
170
|
+
envs[name] = {
|
|
171
|
+
name,
|
|
172
|
+
agentUrl,
|
|
173
|
+
network,
|
|
174
|
+
};
|
|
175
|
+
this.set('environments', envs);
|
|
176
|
+
}
|
|
177
|
+
getAgentUrl() {
|
|
178
|
+
// Priority: Env var > Current environment > Config default
|
|
179
|
+
const envUrl = process.env.HTTPCAT_AGENT_URL;
|
|
180
|
+
if (envUrl) {
|
|
181
|
+
return envUrl;
|
|
182
|
+
}
|
|
183
|
+
const currentEnv = this.getCurrentEnvironment();
|
|
184
|
+
if (currentEnv) {
|
|
185
|
+
const envConfig = this.getEnvironmentConfig(currentEnv);
|
|
186
|
+
if (envConfig) {
|
|
187
|
+
return envConfig.agentUrl;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return this.get('agentUrl');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export const config = new ConfigManager();
|
|
194
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/headless/json-output.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,CAAC,EAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,IAAI,CASN;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,IAAI,SAAI,GACP,IAAI,CA+DN"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function outputJson(operation, data, payment) {
|
|
2
|
+
const output = {
|
|
3
|
+
success: true,
|
|
4
|
+
operation,
|
|
5
|
+
data,
|
|
6
|
+
payment,
|
|
7
|
+
};
|
|
8
|
+
console.log(JSON.stringify(output, null, 2));
|
|
9
|
+
}
|
|
10
|
+
export function outputError(operation, error, code = 1) {
|
|
11
|
+
// Extract error message, handling cases where message might be an object
|
|
12
|
+
let errorMessage = error.message;
|
|
13
|
+
let errorDetails = error.details;
|
|
14
|
+
// If message is "[object Object]", try to extract from details or stringify the error
|
|
15
|
+
if (errorMessage === '[object Object]' || !errorMessage) {
|
|
16
|
+
if (errorDetails) {
|
|
17
|
+
// Try to extract a meaningful message from details
|
|
18
|
+
if (typeof errorDetails === 'object') {
|
|
19
|
+
errorMessage = errorDetails.message || errorDetails.error?.message || JSON.stringify(errorDetails);
|
|
20
|
+
// If we used details as message, don't duplicate it
|
|
21
|
+
if (errorDetails.message || errorDetails.error?.message) {
|
|
22
|
+
errorDetails = errorDetails.error || errorDetails;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
errorMessage = String(errorDetails);
|
|
27
|
+
errorDetails = undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Last resort: stringify the error object
|
|
32
|
+
try {
|
|
33
|
+
const errorObj = { ...error };
|
|
34
|
+
errorMessage = JSON.stringify(errorObj);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
errorMessage = 'Unknown error occurred';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Ensure details is serializable
|
|
42
|
+
if (errorDetails && typeof errorDetails === 'object') {
|
|
43
|
+
try {
|
|
44
|
+
// Test if it's serializable
|
|
45
|
+
JSON.stringify(errorDetails);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// If not serializable, convert to string
|
|
49
|
+
errorDetails = String(errorDetails);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// For 500 errors, include endpoint info in JSON output
|
|
53
|
+
const output = {
|
|
54
|
+
success: false,
|
|
55
|
+
operation,
|
|
56
|
+
error: {
|
|
57
|
+
message: errorMessage,
|
|
58
|
+
code,
|
|
59
|
+
details: errorDetails,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
// Add helpful context for server errors
|
|
63
|
+
if (code === 3 && errorDetails?.endpoint) {
|
|
64
|
+
output.error.endpoint = errorDetails.endpoint;
|
|
65
|
+
output.error.suggestions = [
|
|
66
|
+
'Check if the agent is running: httpcat health',
|
|
67
|
+
'Verify your network configuration: httpcat config --show',
|
|
68
|
+
'Use --verbose for more details'
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
console.log(JSON.stringify(output, null, 2));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=json-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/headless/json-output.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,UAAU,CACxB,SAAiB,EACjB,IAAO,EACP,OAA6B;IAE7B,MAAM,MAAM,GAAkB;QAC5B,OAAO,EAAE,IAAI;QACb,SAAS;QACT,IAAI;QACJ,OAAO;KACR,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,KAAY,EACZ,IAAI,GAAG,CAAC;IAER,yEAAyE;IACzE,IAAI,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;IACjC,IAAI,YAAY,GAAS,KAAa,CAAC,OAAO,CAAC;IAE/C,sFAAsF;IACtF,IAAI,YAAY,KAAK,iBAAiB,IAAI,CAAC,YAAY,EAAE,CAAC;QACxD,IAAI,YAAY,EAAE,CAAC;YACjB,mDAAmD;YACnD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACrC,YAAY,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACnG,oDAAoD;gBACpD,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;oBACxD,YAAY,GAAG,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC;gBACpD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;gBACpC,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,0CAA0C;YAC1C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;gBAC9B,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY,GAAG,wBAAwB,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,4BAA4B;YAC5B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;YACzC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAe;QACzB,OAAO,EAAE,KAAK;QACd,SAAS;QACT,KAAK,EAAE;YACL,OAAO,EAAE,YAAY;YACrB,IAAI;YACJ,OAAO,EAAE,YAAY;SACtB;KACF,CAAC;IAEF,wCAAwC;IACxC,IAAI,IAAI,KAAK,CAAC,IAAI,YAAY,EAAE,QAAQ,EAAE,CAAC;QACxC,MAAM,CAAC,KAAa,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACtD,MAAM,CAAC,KAAa,CAAC,WAAW,GAAG;YAClC,+CAA+C;YAC/C,0DAA0D;YAC1D,gCAAgC;SACjC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|