httpcat-cli 0.0.15 → 0.0.17

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.
@@ -1,21 +1,37 @@
1
- import chalk from 'chalk';
2
- import Table from 'cli-table3';
1
+ import chalk from "chalk";
2
+ import Table from "cli-table3";
3
3
  export function formatCurrency(value, decimals = 6) {
4
- const num = typeof value === 'string' ? parseFloat(value) : value;
4
+ const num = typeof value === "string" ? parseFloat(value) : value;
5
5
  if (isNaN(num)) {
6
- return '$0.00';
6
+ return "$0.00";
7
7
  }
8
8
  if (decimals === 6) {
9
9
  // USDC - detect if value is already in decimal format or needs conversion
10
- // API responses are always strings in decimal format (e.g., "0.20", "5.00", "200000")
10
+ // API responses can be either:
11
+ // - Decimal strings: "0.20", "5.00", "0.002" (already in decimal format)
12
+ // - Micro-USDC integers: "200000", "2000" (need conversion: divide by 10^6)
11
13
  // Raw blockchain values are numbers in micro-USDC format (e.g., 200000 = $0.20)
12
14
  let formattedNum;
13
- // If the original value was a string, it's from the API and already in decimal format
14
- if (typeof value === 'string') {
15
- formattedNum = num;
15
+ if (typeof value === "string") {
16
+ // String from API - need to detect format
17
+ // If it contains a decimal point, it's already in decimal format
18
+ // If it's an integer without decimal point, it's in micro-USDC format (needs division by 10^6)
19
+ // Exception: "0" should be treated as decimal 0, not micro-USDC
20
+ if (value.includes(".")) {
21
+ // Has decimal point - already in decimal format
22
+ formattedNum = num;
23
+ }
24
+ else if (value === "0" || num === 0) {
25
+ // Explicit zero - treat as decimal 0
26
+ formattedNum = 0;
27
+ }
28
+ else {
29
+ // Integer without decimal point - in micro-USDC format
30
+ formattedNum = num / 10 ** 6;
31
+ }
16
32
  }
17
33
  else {
18
- // For numeric values (not from API), check if they look like micro-USDC
34
+ // Numeric value (not from API) - check if it looks like micro-USDC
19
35
  // Values >= 1,000,000 are likely in micro-USDC format and need conversion
20
36
  if (num >= 1000000) {
21
37
  // Likely in micro-USDC format, convert
@@ -29,13 +45,21 @@ export function formatCurrency(value, decimals = 6) {
29
45
  // Format with appropriate decimal places based on value size
30
46
  // For very small values (< 0.01), show up to 6 decimal places to avoid rounding to $0.00
31
47
  // For larger values, show 2 decimal places
32
- if (formattedNum === 0) {
33
- return '$0.00';
48
+ // Use a small epsilon to check for zero (accounting for floating point precision)
49
+ if (Math.abs(formattedNum) < 1e-10) {
50
+ return "$0.00";
34
51
  }
35
52
  else if (formattedNum < 0.01) {
36
- // Show up to 6 decimal places for small values, but remove trailing zeros
37
- const formatted = formattedNum.toFixed(6).replace(/0+$/, '').replace(/\.$/, '');
38
- return `$${formatted}`;
53
+ // Show up to 12 decimal places for very small values (like token prices)
54
+ // Use toFixed(12) to ensure we capture very small values, then trim trailing zeros
55
+ const formatted = formattedNum.toFixed(12);
56
+ // Remove trailing zeros and trailing decimal point
57
+ const trimmed = formatted.replace(/0+$/, "").replace(/\.$/, "");
58
+ // If after trimming we have nothing meaningful (just "0"), show $0.00
59
+ if (trimmed === "0" || trimmed === "") {
60
+ return "$0.00";
61
+ }
62
+ return `$${trimmed}`;
39
63
  }
40
64
  else {
41
65
  // Standard 2 decimal places for larger values
@@ -44,16 +68,20 @@ export function formatCurrency(value, decimals = 6) {
44
68
  }
45
69
  else if (decimals === 18) {
46
70
  // Token amount
47
- return (num / 10 ** 18).toLocaleString('en-US', {
71
+ return (num / 10 ** 18).toLocaleString("en-US", {
48
72
  maximumFractionDigits: 2,
49
73
  });
50
74
  }
51
75
  // Default: treat as already in decimal format
52
76
  if (num === 0) {
53
- return '$0.00';
77
+ return "$0.00";
54
78
  }
55
79
  else if (num < 0.01) {
56
- const formatted = num.toFixed(6).replace(/0+$/, '').replace(/\.$/, '');
80
+ // Show up to 12 decimal places for very small values
81
+ const formatted = num.toFixed(12).replace(/0+$/, "").replace(/\.$/, "");
82
+ if (formatted === "0" || formatted === "") {
83
+ return "$0.00";
84
+ }
57
85
  return `$${formatted}`;
58
86
  }
59
87
  else {
@@ -61,31 +89,31 @@ export function formatCurrency(value, decimals = 6) {
61
89
  }
62
90
  }
63
91
  export function formatEthBalance(wei) {
64
- const weiValue = typeof wei === 'string' ? BigInt(wei) : wei;
92
+ const weiValue = typeof wei === "string" ? BigInt(wei) : wei;
65
93
  const divisor = BigInt(10 ** 18);
66
94
  const eth = Number(weiValue) / Number(divisor);
67
95
  if (eth === 0)
68
- return '0 ETH';
96
+ return "0 ETH";
69
97
  if (eth < 0.0001)
70
- return '< 0.0001 ETH';
98
+ return "< 0.0001 ETH";
71
99
  return `${eth.toFixed(4)} ETH`;
72
100
  }
73
101
  export function formatUsdcBalance(amount) {
74
- const amountValue = typeof amount === 'string' ? BigInt(amount) : amount;
102
+ const amountValue = typeof amount === "string" ? BigInt(amount) : amount;
75
103
  const num = Number(amountValue) / 10 ** 6;
76
104
  return `$${num.toFixed(2)} USDC`;
77
105
  }
78
106
  export function formatTokenAmount(value) {
79
- const amount = typeof value === 'string' ? BigInt(value) : value;
107
+ const amount = typeof value === "string" ? BigInt(value) : value;
80
108
  const divisor = BigInt(10 ** 18);
81
109
  const whole = amount / divisor;
82
110
  const fraction = amount % divisor;
83
111
  if (fraction === 0n) {
84
- return whole.toLocaleString('en-US');
112
+ return whole.toLocaleString("en-US");
85
113
  }
86
114
  // Show up to 4 decimal places
87
- const fractionStr = fraction.toString().padStart(18, '0').slice(0, 4);
88
- return `${whole.toLocaleString('en-US')}.${fractionStr}`;
115
+ const fractionStr = fraction.toString().padStart(18, "0").slice(0, 4);
116
+ return `${whole.toLocaleString("en-US")}.${fractionStr}`;
89
117
  }
90
118
  export function formatAddress(address, length = 8) {
91
119
  if (address.length <= length)
@@ -101,7 +129,7 @@ export function createTable(head) {
101
129
  head: head.map((h) => chalk.cyan.bold(h)),
102
130
  style: {
103
131
  head: [],
104
- border: ['dim'],
132
+ border: ["dim"],
105
133
  },
106
134
  });
107
135
  }
@@ -109,30 +137,30 @@ export function printBox(title, content) {
109
137
  const maxKeyLength = Math.max(...Object.keys(content).map((k) => k.length));
110
138
  const maxValueLength = Math.max(...Object.values(content).map((v) => v.length));
111
139
  const width = Math.max(maxKeyLength + maxValueLength + 5, title.length + 4);
112
- console.log('ā”Œ' + '─'.repeat(width) + '┐');
113
- console.log('│ ' + chalk.bold(title) + ' '.repeat(width - title.length - 1) + '│');
114
- console.log('ā”œ' + '─'.repeat(width) + '┤');
140
+ console.log("ā”Œ" + "─".repeat(width) + "┐");
141
+ console.log("│ " + chalk.bold(title) + " ".repeat(width - title.length - 1) + "│");
142
+ console.log("ā”œ" + "─".repeat(width) + "┤");
115
143
  for (const [key, value] of Object.entries(content)) {
116
144
  const padding = width - key.length - value.length - 3;
117
- console.log(`│ ${chalk.dim(key + ':')} ${value}${' '.repeat(padding)}│`);
145
+ console.log(`│ ${chalk.dim(key + ":")} ${value}${" ".repeat(padding)}│`);
118
146
  }
119
- console.log('ā””' + '─'.repeat(width) + 'ā”˜');
147
+ console.log("ā””" + "─".repeat(width) + "ā”˜");
120
148
  }
121
149
  export function printSuccess(message) {
122
- console.log(chalk.green('āœ… ' + message));
150
+ console.log(chalk.green("āœ… " + message));
123
151
  }
124
152
  export function printError(message) {
125
- console.log(chalk.red('āŒ ' + message));
153
+ console.log(chalk.red("āŒ " + message));
126
154
  }
127
155
  export function printWarning(message) {
128
- console.log(chalk.yellow('āš ļø ' + message));
156
+ console.log(chalk.yellow("āš ļø " + message));
129
157
  }
130
158
  export function printInfo(message) {
131
- console.log(chalk.blue('ā„¹ļø ' + message));
159
+ console.log(chalk.blue("ā„¹ļø " + message));
132
160
  }
133
161
  export function printHeader(text) {
134
- console.log(chalk.cyan('='.repeat(80)));
162
+ console.log(chalk.cyan("=".repeat(80)));
135
163
  console.log(chalk.cyan.bold(text));
136
- console.log(chalk.cyan('='.repeat(80)));
164
+ console.log(chalk.cyan("=".repeat(80)));
137
165
  }
138
166
  //# sourceMappingURL=formatting.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  class Httpcat < Formula
2
2
  desc "CLI tool for interacting with httpcat agent - create, buy, and sell tokens with x402 payments"
3
3
  homepage "https://github.com/hathbanger/httpcat-cli"
4
- url "https://registry.npmjs.org/httpcat-cli/-/httpcat-cli-0.0.14.tgz"
5
- sha256 "6b8d90d0f8b0335b274b6d90ba15aed1d5d83bfa5ddfc8125fce71a868ddde4f"
4
+ url "https://registry.npmjs.org/httpcat-cli/-/httpcat-cli-0.0.17.tgz"
5
+ sha256 "PLACEHOLDER_SHA256"
6
6
  license "MIT"
7
7
 
8
8
  depends_on "node"
@@ -13,6 +13,6 @@ class Httpcat < Formula
13
13
  end
14
14
 
15
15
  test do
16
- assert_match "0.0.14", shell_output("#{bin}/httpcat --version")
16
+ assert_match "0.0.17", shell_output("#{bin}/httpcat --version")
17
17
  end
18
18
  end
@@ -1,8 +1,8 @@
1
1
  class Httpcat < Formula
2
2
  desc "CLI tool for interacting with httpcat agent - create, buy, and sell tokens with x402 payments"
3
3
  homepage "https://github.com/hathbanger/httpcat-cli"
4
- url "https://registry.npmjs.org/httpcat-cli/-/httpcat-cli-0.0.14.tgz"
5
- sha256 "6b8d90d0f8b0335b274b6d90ba15aed1d5d83bfa5ddfc8125fce71a868ddde4f"
4
+ url "https://registry.npmjs.org/httpcat-cli/-/httpcat-cli-0.0.16.tgz"
5
+ sha256 "36a1314faa8ab72aa7484bc8cbde5bb0e55286c9de7ec7a2522c354af0f11ef1"
6
6
  license "MIT"
7
7
 
8
8
  depends_on "node"
@@ -13,6 +13,6 @@ class Httpcat < Formula
13
13
  end
14
14
 
15
15
  test do
16
- assert_match "0.0.14", shell_output("#{bin}/httpcat --version")
16
+ assert_match "0.0.16", shell_output("#{bin}/httpcat --version")
17
17
  end
18
18
  end
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "httpcat": {
4
+ "command": "httpcat",
5
+ "args": ["mcp-server"],
6
+ "env": {
7
+ "HTTPCAT_PRIVATE_KEY": "0x692ff6bcda4d70a1c691faac6af9a9bab46a484ca8d33d1b101ce6f4dac8b25a"
8
+ }
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Monitor FRIDA chat for mentions of "foobar"
5
+ *
6
+ * Usage:
7
+ * node monitor-foobar.js
8
+ */
9
+
10
+ import { spawn } from 'child_process';
11
+ import { fileURLToPath } from 'url';
12
+ import { dirname } from 'path';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ const TOKEN = 'FRIDA';
18
+ const SEARCH_TERM = 'foobar';
19
+
20
+ console.error(`šŸ” Monitoring FRIDA chat for mentions of "${SEARCH_TERM}"...`);
21
+ console.error(`Press Ctrl+C to stop monitoring\n`);
22
+
23
+ // Spawn httpcat chat process
24
+ const chatProcess = spawn('httpcat', ['chat', '--json', TOKEN], {
25
+ stdio: ['pipe', 'pipe', 'inherit'],
26
+ shell: true,
27
+ });
28
+
29
+ let outputBuffer = '';
30
+ let seenMessageIds = new Set();
31
+
32
+ chatProcess.stdout.on('data', (data) => {
33
+ outputBuffer += data.toString();
34
+ const lines = outputBuffer.split('\n');
35
+ outputBuffer = lines.pop() || '';
36
+
37
+ for (const line of lines) {
38
+ if (!line.trim()) continue;
39
+
40
+ try {
41
+ const event = JSON.parse(line);
42
+
43
+ switch (event.type) {
44
+ case 'joined':
45
+ console.error(`āœ… Joined FRIDA chat. Lease ID: ${event.leaseId}`);
46
+ console.error(`šŸ“” Monitoring for "${SEARCH_TERM}" mentions...\n`);
47
+ break;
48
+
49
+ case 'message':
50
+ const msg = event.data;
51
+
52
+ // Skip if we've already seen this message
53
+ if (seenMessageIds.has(msg.messageId)) {
54
+ break;
55
+ }
56
+ seenMessageIds.add(msg.messageId);
57
+
58
+ // Check if message contains search term (case-insensitive)
59
+ if (msg.message.toLowerCase().includes(SEARCH_TERM.toLowerCase())) {
60
+ const author = msg.authorShort || msg.author?.slice(0, 10);
61
+ const time = new Date(msg.timestamp).toLocaleString();
62
+
63
+ console.error('\n' + '='.repeat(60));
64
+ console.error(`šŸŽÆ FOUND "${SEARCH_TERM}" MENTION!`);
65
+ console.error('='.repeat(60));
66
+ console.error(`Time: ${time}`);
67
+ console.error(`Author: ${author}`);
68
+ console.error(`Message: ${msg.message}`);
69
+ console.error('='.repeat(60) + '\n');
70
+ }
71
+ break;
72
+
73
+ case 'lease_expired':
74
+ console.error('ā±ļø Lease expired. Sending /renew...');
75
+ if (chatProcess.stdin && !chatProcess.stdin.destroyed) {
76
+ chatProcess.stdin.write('/renew\n');
77
+ }
78
+ break;
79
+
80
+ case 'error':
81
+ console.error(`āŒ Error: ${event.error}`);
82
+ break;
83
+
84
+ case 'exiting':
85
+ console.error('šŸ‘‹ Chat session ended');
86
+ process.exit(0);
87
+ break;
88
+ }
89
+ } catch (error) {
90
+ // Not JSON, ignore
91
+ }
92
+ }
93
+ });
94
+
95
+ chatProcess.on('error', (error) => {
96
+ console.error(`āŒ Failed to start chat process: ${error.message}`);
97
+ process.exit(1);
98
+ });
99
+
100
+ chatProcess.on('exit', (code) => {
101
+ if (code !== 0 && code !== null) {
102
+ console.error(`Chat process exited with code ${code}`);
103
+ }
104
+ process.exit(code || 0);
105
+ });
106
+
107
+ // Handle Ctrl+C
108
+ process.on('SIGINT', () => {
109
+ console.error('\nšŸ‘‹ Stopping monitor...');
110
+ if (chatProcess.stdin && !chatProcess.stdin.destroyed) {
111
+ chatProcess.stdin.write('/exit\n');
112
+ }
113
+ setTimeout(() => {
114
+ chatProcess.kill();
115
+ process.exit(0);
116
+ }, 1000);
117
+ });
118
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "httpcat-cli",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "description": "CLI tool for interacting with httpcat agent - create, buy, and sell tokens with x402 payments",
5
5
  "main": "dist/index.js",
6
6
  "bin": {