@obolos_tech/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # Obolos CLI
2
+
3
+ **Search, browse, and call x402 APIs from the terminal.**
4
+
5
+ ```bash
6
+ npx @obolos/cli search "token price"
7
+ npx @obolos/cli info ext-abc123
8
+ npx @obolos/cli call ext-abc123 --body '{"symbol":"ETH"}'
9
+ ```
10
+
11
+ ## Commands
12
+
13
+ | Command | Description |
14
+ |---------|-------------|
15
+ | `obolos search [query]` | Search APIs by keyword |
16
+ | `obolos categories` | List all API categories |
17
+ | `obolos info <id>` | Get full API details with input fields |
18
+ | `obolos call <id> [opts]` | Call an API with automatic x402 payment |
19
+ | `obolos balance` | Check wallet USDC balance |
20
+ | `obolos setup-mcp` | Show MCP server setup instructions |
21
+
22
+ ## Environment Variables
23
+
24
+ | Variable | Required | Description |
25
+ |----------|----------|-------------|
26
+ | `OBOLOS_PRIVATE_KEY` | For payments | Base wallet private key with USDC |
27
+ | `OBOLOS_API_URL` | No | Marketplace URL (default: `https://obolos.tech`) |
28
+
29
+ ## Build
30
+
31
+ ```bash
32
+ npm install
33
+ npm run build
34
+ ```
35
+
36
+ ## License
37
+
38
+ MIT
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Obolos CLI
4
+ *
5
+ * Search, browse, and call x402 APIs from the terminal.
6
+ *
7
+ * npx @obolos_tech/cli search "token price"
8
+ * npx @obolos_tech/cli info ext-abc123
9
+ * npx @obolos_tech/cli call ext-abc123 --body '{"symbol":"ETH"}'
10
+ * npx @obolos_tech/cli categories
11
+ * npx @obolos_tech/cli balance
12
+ * npx @obolos_tech/cli setup-mcp
13
+ */
14
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,391 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Obolos CLI
4
+ *
5
+ * Search, browse, and call x402 APIs from the terminal.
6
+ *
7
+ * npx @obolos_tech/cli search "token price"
8
+ * npx @obolos_tech/cli info ext-abc123
9
+ * npx @obolos_tech/cli call ext-abc123 --body '{"symbol":"ETH"}'
10
+ * npx @obolos_tech/cli categories
11
+ * npx @obolos_tech/cli balance
12
+ * npx @obolos_tech/cli setup-mcp
13
+ */
14
+ const OBOLOS_API_URL = process.env.OBOLOS_API_URL || 'https://obolos.tech';
15
+ const OBOLOS_PRIVATE_KEY = process.env.OBOLOS_PRIVATE_KEY || '';
16
+ // ─── Colors (no deps) ──────────────────────────────────────────────────────
17
+ const c = {
18
+ reset: '\x1b[0m',
19
+ bold: '\x1b[1m',
20
+ dim: '\x1b[2m',
21
+ green: '\x1b[32m',
22
+ yellow: '\x1b[33m',
23
+ blue: '\x1b[34m',
24
+ magenta: '\x1b[35m',
25
+ cyan: '\x1b[36m',
26
+ red: '\x1b[31m',
27
+ white: '\x1b[37m',
28
+ gray: '\x1b[90m',
29
+ };
30
+ function formatPrice(price) {
31
+ return `${c.green}$${price.toFixed(4)}${c.reset} USDC`;
32
+ }
33
+ // ─── API Client ─────────────────────────────────────────────────────────────
34
+ async function apiGet(path) {
35
+ const res = await fetch(`${OBOLOS_API_URL}${path}`);
36
+ if (!res.ok)
37
+ throw new Error(`${res.status} ${res.statusText}`);
38
+ return res.json();
39
+ }
40
+ // ─── Commands ───────────────────────────────────────────────────────────────
41
+ async function cmdSearch(args) {
42
+ const query = args.join(' ');
43
+ const params = new URLSearchParams();
44
+ if (query)
45
+ params.set('q', query);
46
+ params.set('limit', '25');
47
+ params.set('type', 'native');
48
+ const data = await apiGet(`/api/marketplace/apis/search?${params}`);
49
+ const apis = data.apis;
50
+ if (apis.length === 0) {
51
+ console.log(`${c.yellow}No APIs found${query ? ` for "${query}"` : ''}.${c.reset}`);
52
+ return;
53
+ }
54
+ console.log(`\n${c.bold}${c.cyan}Obolos Marketplace${c.reset} ${c.dim}— ${data.pagination.total} APIs found${c.reset}\n`);
55
+ const maxName = Math.min(40, Math.max(...apis.map((a) => (a.name || '').length)));
56
+ for (const api of apis) {
57
+ const name = (api.name || 'Unnamed').slice(0, 40).padEnd(maxName);
58
+ const price = `$${api.price_per_call.toFixed(4)}`.padStart(8);
59
+ const cat = api.category.slice(0, 15).padEnd(15);
60
+ const id = `${c.dim}${api.id.slice(0, 20)}${c.reset}`;
61
+ console.log(` ${c.bold}${name}${c.reset} ${c.green}${price}${c.reset} ${cat} ${id}`);
62
+ }
63
+ console.log(`\n${c.dim}Use: obolos info <id> for details${c.reset}\n`);
64
+ }
65
+ async function cmdCategories() {
66
+ const data = await apiGet('/api/marketplace/categories');
67
+ console.log(`\n${c.bold}${c.cyan}API Categories${c.reset}\n`);
68
+ for (const cat of data.categories) {
69
+ const bar = '█'.repeat(Math.min(50, Math.ceil(cat.count / 5)));
70
+ console.log(` ${cat.name.padEnd(25)} ${c.green}${String(cat.count).padStart(4)}${c.reset} ${c.dim}${bar}${c.reset}`);
71
+ }
72
+ console.log(`\n ${c.bold}Total:${c.reset} ${data.nativeCount} native + ${data.externalCount} external\n`);
73
+ }
74
+ async function cmdInfo(args) {
75
+ const id = args[0];
76
+ if (!id) {
77
+ console.error(`${c.red}Usage: obolos info <api-id>${c.reset}`);
78
+ process.exit(1);
79
+ }
80
+ const api = await apiGet(`/api/marketplace/apis/${encodeURIComponent(id)}`);
81
+ console.log(`\n${c.bold}${c.cyan}${api.name}${c.reset}`);
82
+ console.log(`${c.dim}${'─'.repeat(60)}${c.reset}`);
83
+ console.log(` ${c.bold}ID:${c.reset} ${api.id}`);
84
+ console.log(` ${c.bold}Type:${c.reset} ${api.api_type}`);
85
+ console.log(` ${c.bold}Price:${c.reset} ${formatPrice(api.price_per_call)}`);
86
+ console.log(` ${c.bold}Method:${c.reset} ${api.http_method}`);
87
+ console.log(` ${c.bold}Category:${c.reset} ${api.category}`);
88
+ console.log(` ${c.bold}Seller:${c.reset} ${api.seller_name}`);
89
+ console.log(` ${c.bold}Calls:${c.reset} ${api.total_calls}`);
90
+ if (api.average_rating) {
91
+ console.log(` ${c.bold}Rating:${c.reset} ${api.average_rating.toFixed(1)}/5 (${api.review_count} reviews)`);
92
+ }
93
+ if (api.description) {
94
+ console.log(`\n ${c.bold}Description:${c.reset}`);
95
+ console.log(` ${api.description}`);
96
+ }
97
+ if (api.input_schema?.fields && Object.keys(api.input_schema.fields).length > 0) {
98
+ console.log(`\n ${c.bold}Input Fields:${c.reset}`);
99
+ for (const [name, field] of Object.entries(api.input_schema.fields)) {
100
+ const req = field.required ? `${c.red}*${c.reset}` : ' ';
101
+ const ex = field.example ? `${c.dim}(e.g. ${JSON.stringify(field.example)})${c.reset}` : '';
102
+ console.log(` ${req} ${c.cyan}${name}${c.reset}: ${field.type} ${ex}`);
103
+ }
104
+ }
105
+ if (api.example_request) {
106
+ console.log(`\n ${c.bold}Example Request:${c.reset}`);
107
+ try {
108
+ console.log(` ${c.dim}${JSON.stringify(JSON.parse(api.example_request), null, 2).replace(/\n/g, '\n ')}${c.reset}`);
109
+ }
110
+ catch {
111
+ console.log(` ${c.dim}${api.example_request}${c.reset}`);
112
+ }
113
+ }
114
+ if (api.example_response) {
115
+ console.log(`\n ${c.bold}Example Response:${c.reset}`);
116
+ try {
117
+ const parsed = JSON.parse(api.example_response);
118
+ const formatted = JSON.stringify(parsed, null, 2);
119
+ // Truncate long responses
120
+ const lines = formatted.split('\n');
121
+ if (lines.length > 20) {
122
+ console.log(` ${c.dim}${lines.slice(0, 20).join('\n ')}\n ... (${lines.length - 20} more lines)${c.reset}`);
123
+ }
124
+ else {
125
+ console.log(` ${c.dim}${formatted.replace(/\n/g, '\n ')}${c.reset}`);
126
+ }
127
+ }
128
+ catch {
129
+ console.log(` ${c.dim}${api.example_response.slice(0, 500)}${c.reset}`);
130
+ }
131
+ }
132
+ console.log(`\n ${c.bold}Call:${c.reset} obolos call ${api.id}${api.http_method === 'POST' ? " --body '{...}'" : ''}`);
133
+ console.log(` ${c.bold}Proxy:${c.reset} ${OBOLOS_API_URL}/api/proxy/${api.id}\n`);
134
+ }
135
+ async function cmdCall(args) {
136
+ const id = args[0];
137
+ if (!id) {
138
+ console.error(`${c.red}Usage: obolos call <api-id> [--body '{"key":"value"}'] [--method POST]${c.reset}`);
139
+ process.exit(1);
140
+ }
141
+ // Parse flags
142
+ let method = 'GET';
143
+ let body = undefined;
144
+ for (let i = 1; i < args.length; i++) {
145
+ if (args[i] === '--method' && args[i + 1]) {
146
+ method = args[++i].toUpperCase();
147
+ }
148
+ else if (args[i] === '--body' && args[i + 1]) {
149
+ try {
150
+ body = JSON.parse(args[++i]);
151
+ }
152
+ catch {
153
+ console.error(`${c.red}Invalid JSON body${c.reset}`);
154
+ process.exit(1);
155
+ }
156
+ }
157
+ }
158
+ if (!OBOLOS_PRIVATE_KEY) {
159
+ // Free call attempt (for free APIs or to see the 402 response)
160
+ console.log(`${c.yellow}No OBOLOS_PRIVATE_KEY set — attempting without payment${c.reset}`);
161
+ }
162
+ const url = `${OBOLOS_API_URL}/api/proxy/${encodeURIComponent(id)}`;
163
+ const fetchOpts = { method };
164
+ if (body && method !== 'GET') {
165
+ fetchOpts.headers = { 'Content-Type': 'application/json' };
166
+ fetchOpts.body = JSON.stringify(body);
167
+ }
168
+ console.log(`\n${c.dim}${method} ${url}${c.reset}`);
169
+ let res = await fetch(url, fetchOpts);
170
+ if (res.status === 402 && OBOLOS_PRIVATE_KEY) {
171
+ console.log(`${c.yellow}402 Payment Required — signing payment...${c.reset}`);
172
+ let paymentInfo;
173
+ try {
174
+ paymentInfo = await res.json();
175
+ }
176
+ catch {
177
+ console.error(`${c.red}Could not parse 402 response${c.reset}`);
178
+ process.exit(1);
179
+ }
180
+ // Dynamic import viem for signing
181
+ const { createWalletClient, http: viemHttp } = await import('viem');
182
+ const { privateKeyToAccount } = await import('viem/accounts');
183
+ const { base } = await import('viem/chains');
184
+ const key = OBOLOS_PRIVATE_KEY.startsWith('0x')
185
+ ? OBOLOS_PRIVATE_KEY
186
+ : `0x${OBOLOS_PRIVATE_KEY}`;
187
+ const account = privateKeyToAccount(key);
188
+ const client = createWalletClient({ account, chain: base, transport: viemHttp() });
189
+ const accepts = paymentInfo.accepts?.[0];
190
+ if (!accepts) {
191
+ console.error(`${c.red}No payment options in 402 response${c.reset}`);
192
+ process.exit(1);
193
+ }
194
+ const amount = BigInt(accepts.maxAmountRequired || accepts.amount || '0');
195
+ const payTo = accepts.payTo;
196
+ const asset = accepts.asset || '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
197
+ const deadline = BigInt(Math.floor(Date.now() / 1000) + 300);
198
+ const nonceBytes = new Uint8Array(32);
199
+ crypto.getRandomValues(nonceBytes);
200
+ const nonce = `0x${Array.from(nonceBytes).map(b => b.toString(16).padStart(2, '0')).join('')}`;
201
+ const signature = await client.signTypedData({
202
+ account,
203
+ domain: {
204
+ name: 'x402',
205
+ version: '1',
206
+ chainId: 8453n,
207
+ verifyingContract: asset,
208
+ },
209
+ types: {
210
+ TransferWithAuthorization: [
211
+ { name: 'from', type: 'address' },
212
+ { name: 'to', type: 'address' },
213
+ { name: 'value', type: 'uint256' },
214
+ { name: 'validAfter', type: 'uint256' },
215
+ { name: 'validBefore', type: 'uint256' },
216
+ { name: 'nonce', type: 'bytes32' },
217
+ ],
218
+ },
219
+ primaryType: 'TransferWithAuthorization',
220
+ message: {
221
+ from: account.address,
222
+ to: payTo,
223
+ value: amount,
224
+ validAfter: 0n,
225
+ validBefore: deadline,
226
+ nonce,
227
+ },
228
+ });
229
+ const payload = {
230
+ x402Version: paymentInfo.x402Version || 1,
231
+ scheme: accepts.scheme || 'exact',
232
+ network: accepts.network || 'base',
233
+ payload: {
234
+ signature,
235
+ authorization: {
236
+ from: account.address,
237
+ to: payTo,
238
+ value: amount.toString(),
239
+ validAfter: '0',
240
+ validBefore: deadline.toString(),
241
+ nonce,
242
+ },
243
+ },
244
+ };
245
+ const encoded = Buffer.from(JSON.stringify(payload)).toString('base64');
246
+ const headerName = paymentInfo.x402Version === 2 ? 'payment-signature' : 'x-payment';
247
+ console.log(`${c.green}Payment signed. Retrying...${c.reset}`);
248
+ res = await fetch(url, {
249
+ ...fetchOpts,
250
+ headers: {
251
+ ...(fetchOpts.headers || {}),
252
+ [headerName]: encoded,
253
+ },
254
+ });
255
+ }
256
+ // Display response
257
+ const status = res.status;
258
+ const statusColor = status < 300 ? c.green : status < 400 ? c.yellow : c.red;
259
+ console.log(`${statusColor}${status} ${res.statusText}${c.reset}\n`);
260
+ const contentType = res.headers.get('content-type') || '';
261
+ if (contentType.includes('json')) {
262
+ const data = await res.json();
263
+ console.log(JSON.stringify(data, null, 2));
264
+ }
265
+ else {
266
+ const text = await res.text();
267
+ console.log(text.slice(0, 2000));
268
+ }
269
+ console.log();
270
+ }
271
+ async function cmdBalance() {
272
+ if (!OBOLOS_PRIVATE_KEY) {
273
+ console.error(`${c.red}Set OBOLOS_PRIVATE_KEY env var to check balance${c.reset}`);
274
+ process.exit(1);
275
+ }
276
+ const { createPublicClient, http: viemHttp, formatUnits } = await import('viem');
277
+ const { privateKeyToAccount } = await import('viem/accounts');
278
+ const { base } = await import('viem/chains');
279
+ const key = OBOLOS_PRIVATE_KEY.startsWith('0x') ? OBOLOS_PRIVATE_KEY : `0x${OBOLOS_PRIVATE_KEY}`;
280
+ const account = privateKeyToAccount(key);
281
+ const client = createPublicClient({ chain: base, transport: viemHttp() });
282
+ const balance = await client.readContract({
283
+ address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
284
+ abi: [{ inputs: [{ name: 'account', type: 'address' }], name: 'balanceOf', outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view', type: 'function' }],
285
+ functionName: 'balanceOf',
286
+ args: [account.address],
287
+ });
288
+ console.log(`\n${c.bold}Wallet:${c.reset} ${account.address}`);
289
+ console.log(`${c.bold}Balance:${c.reset} ${c.green}${formatUnits(balance, 6)} USDC${c.reset}`);
290
+ console.log(`${c.bold}Network:${c.reset} Base (Chain ID: 8453)\n`);
291
+ }
292
+ async function cmdSetupMcp() {
293
+ console.log(`\n${c.bold}${c.cyan}Obolos MCP Server Setup${c.reset}\n`);
294
+ console.log(`${c.bold}Install:${c.reset}`);
295
+ console.log(` npm install -g @obolos_tech/mcp-server\n`);
296
+ console.log(`${c.bold}For Claude Code:${c.reset}`);
297
+ console.log(` claude mcp add obolos -- obolos-mcp\n`);
298
+ console.log(`${c.bold}With payment wallet:${c.reset}`);
299
+ console.log(` claude mcp add obolos -e OBOLOS_PRIVATE_KEY=0xyour_key -- obolos-mcp\n`);
300
+ console.log(`${c.bold}Or use npx (no install):${c.reset}`);
301
+ console.log(` claude mcp add obolos -e OBOLOS_PRIVATE_KEY=0xyour_key -- npx @obolos_tech/mcp-server\n`);
302
+ console.log(`${c.bold}For Claude Desktop / Cursor / Windsurf:${c.reset}`);
303
+ console.log(` Add to your MCP config:\n`);
304
+ console.log(` ${c.dim}{`);
305
+ console.log(` "mcpServers": {`);
306
+ console.log(` "obolos": {`);
307
+ console.log(` "command": "npx",`);
308
+ console.log(` "args": ["@obolos_tech/mcp-server"],`);
309
+ console.log(` "env": {`);
310
+ console.log(` "OBOLOS_PRIVATE_KEY": "0xyour_private_key"`);
311
+ console.log(` }`);
312
+ console.log(` }`);
313
+ console.log(` }`);
314
+ console.log(` }${c.reset}\n`);
315
+ }
316
+ function showHelp() {
317
+ console.log(`
318
+ ${c.bold}${c.cyan}obolos${c.reset} — CLI for the Obolos x402 API Marketplace
319
+
320
+ ${c.bold}Usage:${c.reset}
321
+ obolos search [query] Search APIs by keyword
322
+ obolos categories List all API categories
323
+ obolos info <id> Get full API details
324
+ obolos call <id> [options] Call an API with payment
325
+ obolos balance Check wallet USDC balance
326
+ obolos setup-mcp Show MCP server setup instructions
327
+
328
+ ${c.bold}Call Options:${c.reset}
329
+ --method POST|GET|PUT HTTP method (default: GET)
330
+ --body '{"key":"value"}' Request body (JSON)
331
+
332
+ ${c.bold}Environment:${c.reset}
333
+ OBOLOS_PRIVATE_KEY Wallet private key for payments
334
+ OBOLOS_API_URL Marketplace URL (default: https://obolos.tech)
335
+
336
+ ${c.bold}Examples:${c.reset}
337
+ obolos search "token price"
338
+ obolos search --category blockchain
339
+ obolos info ext-a1b2c3d4e5f6
340
+ obolos call ext-a1b2c3d4e5f6 --body '{"symbol":"ETH"}'
341
+ OBOLOS_PRIVATE_KEY=0x... obolos call ext-abc123
342
+ `);
343
+ }
344
+ // ─── Main ───────────────────────────────────────────────────────────────────
345
+ const args = process.argv.slice(2);
346
+ const command = args[0];
347
+ const commandArgs = args.slice(1);
348
+ async function main() {
349
+ switch (command) {
350
+ case 'search':
351
+ case 's':
352
+ await cmdSearch(commandArgs);
353
+ break;
354
+ case 'categories':
355
+ case 'cats':
356
+ await cmdCategories();
357
+ break;
358
+ case 'info':
359
+ case 'i':
360
+ await cmdInfo(commandArgs);
361
+ break;
362
+ case 'call':
363
+ case 'c':
364
+ await cmdCall(commandArgs);
365
+ break;
366
+ case 'balance':
367
+ case 'bal':
368
+ await cmdBalance();
369
+ break;
370
+ case 'setup-mcp':
371
+ case 'mcp':
372
+ await cmdSetupMcp();
373
+ break;
374
+ case 'help':
375
+ case '--help':
376
+ case '-h':
377
+ case undefined:
378
+ showHelp();
379
+ break;
380
+ default:
381
+ console.error(`${c.red}Unknown command: ${command}${c.reset}`);
382
+ showHelp();
383
+ process.exit(1);
384
+ }
385
+ }
386
+ main().catch((err) => {
387
+ console.error(`${c.red}Error: ${err.message}${c.reset}`);
388
+ process.exit(1);
389
+ });
390
+ export {};
391
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@obolos_tech/cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI for the Obolos x402 API marketplace — search, test, and call pay-per-use APIs",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "files": ["dist", "README.md"],
8
+ "bin": {
9
+ "obolos": "dist/index.js"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsx src/index.ts",
14
+ "start": "node dist/index.js"
15
+ },
16
+ "keywords": [
17
+ "x402",
18
+ "obolos",
19
+ "cli",
20
+ "marketplace",
21
+ "micropayments",
22
+ "api"
23
+ ],
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "viem": "^2.45.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^22.0.0",
30
+ "tsx": "^4.21.0",
31
+ "typescript": "^5.9.3"
32
+ }
33
+ }