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 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,MAAM,EAAE,CAAC,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;WAUM,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BvD,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EACtC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IAiF9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAsCrC,WAAW,IAAI,MAAM;IAIrB,UAAU,IAAI,MAAM;CAGrB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACD,MAAM,EAAE,MAAM;IAAS,OAAO,CAAC,EAAE,GAAG;gBAA5D,OAAO,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM,EAAS,OAAO,CAAC,EAAE,GAAG,YAAA;CAIzE"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { wrapFetchWithPayment } from "x402-fetch";
|
|
2
|
+
import { evm } from "x402/types";
|
|
3
|
+
import { config } from "./config.js";
|
|
4
|
+
export class HttpcatClient {
|
|
5
|
+
fetchWithPayment;
|
|
6
|
+
agentUrl;
|
|
7
|
+
network;
|
|
8
|
+
constructor(fetchWithPayment, agentUrl, network) {
|
|
9
|
+
this.fetchWithPayment = fetchWithPayment;
|
|
10
|
+
this.agentUrl = agentUrl;
|
|
11
|
+
this.network = network;
|
|
12
|
+
}
|
|
13
|
+
static async create(privateKey) {
|
|
14
|
+
const pk = privateKey || config.getPrivateKey();
|
|
15
|
+
const network = config.get("network");
|
|
16
|
+
const agentUrl = config.getAgentUrl(); // Use getAgentUrl() to respect environment
|
|
17
|
+
const maxPayment = config.get("defaultMaxPayment");
|
|
18
|
+
// Create signer based on network
|
|
19
|
+
let signer;
|
|
20
|
+
if (network === "base-sepolia") {
|
|
21
|
+
signer = evm.createSignerSepolia(pk);
|
|
22
|
+
}
|
|
23
|
+
else if (network === "base") {
|
|
24
|
+
// For base mainnet, we'll need to check if there's a createSignerBase function
|
|
25
|
+
// For now, using sepolia as fallback - this may need to be updated
|
|
26
|
+
signer = evm.createSignerSepolia(pk);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error(`Unsupported network: ${network}. Supported networks: base-sepolia, base`);
|
|
30
|
+
}
|
|
31
|
+
// Wrap fetch with payment handling
|
|
32
|
+
const maxValue = BigInt(parseFloat(maxPayment) * 10 ** 6); // Convert to USDC units (6 decimals)
|
|
33
|
+
const fetchWithPayment = wrapFetchWithPayment(fetch, signer, maxValue);
|
|
34
|
+
return new HttpcatClient(fetchWithPayment, agentUrl, network);
|
|
35
|
+
}
|
|
36
|
+
async invoke(entrypoint, input) {
|
|
37
|
+
const endpoint = `${this.agentUrl}/entrypoints/${entrypoint}/invoke`;
|
|
38
|
+
const response = await this.fetchWithPayment(endpoint, {
|
|
39
|
+
method: "POST",
|
|
40
|
+
headers: {
|
|
41
|
+
"Content-Type": "application/json",
|
|
42
|
+
},
|
|
43
|
+
body: JSON.stringify({ input }),
|
|
44
|
+
});
|
|
45
|
+
// Extract payment info from headers
|
|
46
|
+
const paymentHeader = response.headers.get("x-payment-response");
|
|
47
|
+
const payment = paymentHeader
|
|
48
|
+
? { txHash: paymentHeader }
|
|
49
|
+
: undefined;
|
|
50
|
+
// Parse response
|
|
51
|
+
const responseText = await response.text();
|
|
52
|
+
// Check if response is OK first
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
// Try to parse as JSON for structured error, otherwise use plain text
|
|
55
|
+
let errorDetails;
|
|
56
|
+
let errorMessage;
|
|
57
|
+
try {
|
|
58
|
+
errorDetails = JSON.parse(responseText);
|
|
59
|
+
// Extract message from nested error structures
|
|
60
|
+
errorMessage =
|
|
61
|
+
errorDetails.error?.message ||
|
|
62
|
+
errorDetails.error ||
|
|
63
|
+
errorDetails.message ||
|
|
64
|
+
errorDetails.details?.message ||
|
|
65
|
+
`Request failed with status ${response.status}`;
|
|
66
|
+
// For 500 errors, try to extract more context
|
|
67
|
+
if (response.status >= 500 && errorDetails.error) {
|
|
68
|
+
// If error is an object, try to stringify it for more info
|
|
69
|
+
if (typeof errorDetails.error === "object") {
|
|
70
|
+
const errorStr = JSON.stringify(errorDetails.error, null, 2);
|
|
71
|
+
if (errorStr !== "{}" &&
|
|
72
|
+
errorStr !== '{"error":"Internal Server Error"}') {
|
|
73
|
+
errorMessage = errorMessage + "\n" + errorStr;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// If not JSON, use the plain text as the error message
|
|
80
|
+
errorMessage =
|
|
81
|
+
responseText || `Request failed with status ${response.status}`;
|
|
82
|
+
errorDetails = { error: errorMessage, rawResponse: responseText };
|
|
83
|
+
}
|
|
84
|
+
// Add endpoint context to error details
|
|
85
|
+
errorDetails.endpoint = endpoint;
|
|
86
|
+
errorDetails.method = "POST";
|
|
87
|
+
throw new HttpcatError(errorMessage, response.status, errorDetails);
|
|
88
|
+
}
|
|
89
|
+
// Response is OK, parse as JSON
|
|
90
|
+
let result;
|
|
91
|
+
try {
|
|
92
|
+
result = JSON.parse(responseText);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
throw new HttpcatError(`Failed to parse response as JSON: ${responseText}`, response.status, responseText);
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
data: result.output,
|
|
99
|
+
payment,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
async get(path) {
|
|
103
|
+
const url = path.startsWith("http") ? path : `${this.agentUrl}${path}`;
|
|
104
|
+
const response = await this.fetchWithPayment(url, {
|
|
105
|
+
method: "GET",
|
|
106
|
+
});
|
|
107
|
+
const text = await response.text();
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
// Try to parse as JSON for structured error, otherwise use plain text
|
|
110
|
+
let errorDetails;
|
|
111
|
+
try {
|
|
112
|
+
errorDetails = JSON.parse(text);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
errorDetails = {
|
|
116
|
+
error: text || `GET ${path} failed with status ${response.status}`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
throw new HttpcatError(errorDetails.error ||
|
|
120
|
+
errorDetails.message ||
|
|
121
|
+
`GET ${path} failed: ${response.status}`, response.status, errorDetails);
|
|
122
|
+
}
|
|
123
|
+
// Response is OK, try to parse as JSON
|
|
124
|
+
try {
|
|
125
|
+
return JSON.parse(text);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// If not JSON, return plain text
|
|
129
|
+
return text;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
getAgentUrl() {
|
|
133
|
+
return this.agentUrl;
|
|
134
|
+
}
|
|
135
|
+
getNetwork() {
|
|
136
|
+
return this.network;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export class HttpcatError extends Error {
|
|
140
|
+
status;
|
|
141
|
+
details;
|
|
142
|
+
constructor(message, status, details) {
|
|
143
|
+
super(message);
|
|
144
|
+
this.status = status;
|
|
145
|
+
this.details = details;
|
|
146
|
+
this.name = "HttpcatError";
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buy.d.ts","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAKD,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAAE,mCAAmC;AACvD,MAAM,EAAE,MAAM,EACd,UAAU,UAAO,EACjB,MAAM,UAAQ,GACb,OAAO,CAAC,cAAc,CAAC,CAkBzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAkB7D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { validateTokenId, validateAmount } from '../utils/validation.js';
|
|
2
|
+
import { printBox, formatTokenAmount, formatCurrency } from '../utils/formatting.js';
|
|
3
|
+
import { printSuccess, printGraduationProgress } from '../interactive/art.js';
|
|
4
|
+
import { resolveTokenId } from '../utils/token-resolver.js';
|
|
5
|
+
const TEST_AMOUNTS = ['1', '2', '5'];
|
|
6
|
+
const PROD_AMOUNTS = ['50', '100', '200'];
|
|
7
|
+
export async function buyToken(client, identifier, // Can be token ID, name, or symbol
|
|
8
|
+
amount, isTestMode = true, silent = false // Suppress resolver output for quiet/JSON mode
|
|
9
|
+
) {
|
|
10
|
+
// Resolve identifier to token ID
|
|
11
|
+
const tokenId = await resolveTokenId(identifier, client, silent);
|
|
12
|
+
// Validate input
|
|
13
|
+
validateTokenId(tokenId);
|
|
14
|
+
const validAmounts = isTestMode ? TEST_AMOUNTS : PROD_AMOUNTS;
|
|
15
|
+
validateAmount(amount, validAmounts);
|
|
16
|
+
const input = { tokenId, amount };
|
|
17
|
+
// Make request
|
|
18
|
+
const { data } = await client.invoke('token_buy', input);
|
|
19
|
+
return data;
|
|
20
|
+
}
|
|
21
|
+
export function displayBuyResult(result) {
|
|
22
|
+
printSuccess('Tokens purchased successfully!', 'money');
|
|
23
|
+
const graduationStatus = result.graduationReached
|
|
24
|
+
? '✅ GRADUATED!'
|
|
25
|
+
: `${result.graduationProgress.toFixed(2)}%`;
|
|
26
|
+
printBox('💰 Purchase Summary', {
|
|
27
|
+
'Tokens Received': formatTokenAmount(result.tokensReceived),
|
|
28
|
+
'Amount Spent': formatCurrency(result.amountSpent),
|
|
29
|
+
'Fee (1%)': formatCurrency(result.fee),
|
|
30
|
+
'New Price': formatCurrency(result.newPrice),
|
|
31
|
+
'New Market Cap': formatCurrency(result.newMcap),
|
|
32
|
+
'Graduation': graduationStatus,
|
|
33
|
+
});
|
|
34
|
+
console.log();
|
|
35
|
+
printGraduationProgress(result.graduationProgress);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=buy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buy.js","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAkB5D,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACrC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAqB,EACrB,UAAkB,EAAE,mCAAmC;AACvD,MAAc,EACd,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,KAAK,CAAC,+CAA+C;;IAE9D,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE,iBAAiB;IACjB,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAC9D,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErC,MAAM,KAAK,GAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAEjD,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAClC,WAAW,EACX,KAAK,CACN,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,YAAY,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;IAExD,MAAM,gBAAgB,GAAG,MAAM,CAAC,iBAAiB;QAC/C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAE/C,QAAQ,CAAC,qBAAqB,EAAE;QAC9B,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC;QAC3D,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;QAClD,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;QACtC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC5C,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,uBAAuB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAgB5B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAUnE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { validateTokenName, validateTokenSymbol, validateUrl } from '../utils/validation.js';
|
|
2
|
+
import { printBox, formatAddress } from '../utils/formatting.js';
|
|
3
|
+
import { printSuccess } from '../interactive/art.js';
|
|
4
|
+
export async function createToken(client, input) {
|
|
5
|
+
// Validate input
|
|
6
|
+
validateTokenName(input.name);
|
|
7
|
+
validateTokenSymbol(input.symbol);
|
|
8
|
+
if (input.photoUrl)
|
|
9
|
+
validateUrl(input.photoUrl);
|
|
10
|
+
if (input.bannerUrl)
|
|
11
|
+
validateUrl(input.bannerUrl);
|
|
12
|
+
if (input.websiteUrl)
|
|
13
|
+
validateUrl(input.websiteUrl);
|
|
14
|
+
// Make request
|
|
15
|
+
const { data, payment } = await client.invoke('create_token', input);
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
export function displayCreateResult(result) {
|
|
19
|
+
printSuccess(`Token created successfully!`, 'party');
|
|
20
|
+
printBox(`🎉 ${result.name} (${result.symbol})`, {
|
|
21
|
+
'Token ID': result.tokenId,
|
|
22
|
+
'Address': formatAddress(result.tokenAddress, 12),
|
|
23
|
+
'Supply': '1,000,000,000 ' + result.symbol,
|
|
24
|
+
'Status': result.status,
|
|
25
|
+
'Created': new Date(result.createdAt).toLocaleString(),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAqBrD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAqB,EACrB,KAAuB;IAEvB,iBAAiB;IACjB,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,KAAK,CAAC,QAAQ;QAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,SAAS;QAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,UAAU;QAAE,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEpD,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAC3C,cAAc,EACd,KAAK,CACN,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IAC3D,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;IAErD,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG,EAAE;QAC/C,UAAU,EAAE,MAAM,CAAC,OAAO;QAC1B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QACjD,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM;QAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;KACvD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAU9E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAuB9D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { printBox } from '../utils/formatting.js';
|
|
3
|
+
export async function checkHealth(client) {
|
|
4
|
+
// Try GET /health first (will return 402 or 200)
|
|
5
|
+
try {
|
|
6
|
+
const data = await client.get('/health');
|
|
7
|
+
return data;
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
// If GET fails, try POST invoke
|
|
11
|
+
const { data } = await client.invoke('health', {});
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function displayHealthStatus(health) {
|
|
16
|
+
console.log();
|
|
17
|
+
const status = health.status || 'unknown';
|
|
18
|
+
const isHealthy = status === 'ok';
|
|
19
|
+
const statusIcon = isHealthy ? '✅' : '❌';
|
|
20
|
+
const statusColor = isHealthy ? chalk.green : chalk.red;
|
|
21
|
+
const boxData = {
|
|
22
|
+
'Status': statusColor(status.toUpperCase()),
|
|
23
|
+
};
|
|
24
|
+
if (health.message) {
|
|
25
|
+
boxData['Message'] = health.message;
|
|
26
|
+
}
|
|
27
|
+
if (health.timestamp) {
|
|
28
|
+
boxData['Timestamp'] = new Date(health.timestamp).toLocaleString();
|
|
29
|
+
}
|
|
30
|
+
printBox(`${statusIcon} Health Check`, boxData);
|
|
31
|
+
console.log();
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAQlD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAqB;IACrD,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gCAAgC;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAmB,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACzC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAExD,MAAM,OAAO,GAA2B;QACtC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;KAC5C,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;IACrE,CAAC;IAED,QAAQ,CAAC,GAAG,UAAU,eAAe,EAAE,OAAO,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAAE,mCAAmC;AACvD,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,UAAQ,GACb,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA6B5D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { validateTokenId } from '../utils/validation.js';
|
|
2
|
+
import { printBox, formatAddress, formatTokenAmount, formatCurrency } from '../utils/formatting.js';
|
|
3
|
+
import { printGraduationProgress } from '../interactive/art.js';
|
|
4
|
+
import { resolveTokenId } from '../utils/token-resolver.js';
|
|
5
|
+
export async function getTokenInfo(client, identifier, // Can be token ID, name, or symbol
|
|
6
|
+
userAddress, silent = false // Suppress resolver output for quiet/JSON mode
|
|
7
|
+
) {
|
|
8
|
+
// Resolve identifier to token ID
|
|
9
|
+
const tokenId = await resolveTokenId(identifier, client, silent);
|
|
10
|
+
// Validate input
|
|
11
|
+
validateTokenId(tokenId);
|
|
12
|
+
const input = { tokenId, userAddress };
|
|
13
|
+
// Make request
|
|
14
|
+
const { data } = await client.invoke('token_info', input);
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
export function displayTokenInfo(info) {
|
|
18
|
+
console.log();
|
|
19
|
+
printBox(`📊 ${info.name} (${info.symbol})`, {
|
|
20
|
+
'Token ID': info.tokenId,
|
|
21
|
+
'Address': formatAddress(info.address, 12),
|
|
22
|
+
'Status': info.status,
|
|
23
|
+
'Price': formatCurrency(info.price),
|
|
24
|
+
'Market Cap': formatCurrency(info.mcap),
|
|
25
|
+
'Total Supply': formatTokenAmount(info.totalSupply),
|
|
26
|
+
'Created': new Date(info.createdAt).toLocaleString(),
|
|
27
|
+
});
|
|
28
|
+
console.log();
|
|
29
|
+
printGraduationProgress(info.graduationProgress);
|
|
30
|
+
if (info.userPosition) {
|
|
31
|
+
console.log();
|
|
32
|
+
const pnl = parseFloat(info.userPosition.pnl);
|
|
33
|
+
const pnlColor = pnl >= 0 ? '🟢' : '🔴';
|
|
34
|
+
const pnlSign = pnl >= 0 ? '+' : '';
|
|
35
|
+
printBox('💼 Your Position', {
|
|
36
|
+
'Tokens Owned': formatTokenAmount(info.userPosition.tokensOwned),
|
|
37
|
+
'Invested': formatCurrency(info.userPosition.usdcInvested),
|
|
38
|
+
'Current Value': formatCurrency(info.userPosition.currentValue),
|
|
39
|
+
'P&L': `${pnlColor} ${pnlSign}${formatCurrency(info.userPosition.pnl)}`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AA4B5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAqB,EACrB,UAAkB,EAAE,mCAAmC;AACvD,WAAoB,EACpB,MAAM,GAAG,KAAK,CAAC,+CAA+C;;IAE9D,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE,iBAAiB;IACjB,eAAe,CAAC,OAAO,CAAC,CAAC;IAEzB,MAAM,KAAK,GAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAEvD,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAClC,YAAY,EACZ,KAAK,CACN,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,EAAE;QAC3C,UAAU,EAAE,IAAI,CAAC,OAAO;QACxB,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,cAAc,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QACnD,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;KACrD,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEjD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpC,QAAQ,CAAC,kBAAkB,EAAE;YAC3B,cAAc,EAAE,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;YAChE,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC1D,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC/D,KAAK,EAAE,GAAG,QAAQ,IAAI,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;SACxE,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,IAAI,SAAI,EACR,KAAK,SAAK,EACV,MAAM,GAAE,MAAM,GAAG,SAAS,GAAG,MAAe,GAC3C,OAAO,CAAC,gBAAgB,CAAC,CAU3B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAgD/D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createTable, formatCurrency } from '../utils/formatting.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export async function listTokens(client, page = 1, limit = 20, sortBy = 'mcap') {
|
|
4
|
+
const input = { page, limit, sortBy };
|
|
5
|
+
// Make request
|
|
6
|
+
const { data } = await client.invoke('list_tokens', input);
|
|
7
|
+
return data;
|
|
8
|
+
}
|
|
9
|
+
export function displayTokenList(result) {
|
|
10
|
+
console.log();
|
|
11
|
+
console.log(chalk.cyan.bold(`📋 Tokens (${result.total} total)`));
|
|
12
|
+
console.log(chalk.dim(`Page ${result.page} of ${result.pages}`));
|
|
13
|
+
console.log();
|
|
14
|
+
if (result.tokens.length === 0) {
|
|
15
|
+
console.log(chalk.yellow('No tokens found.'));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const table = createTable([
|
|
19
|
+
'Name',
|
|
20
|
+
'Symbol',
|
|
21
|
+
'Market Cap',
|
|
22
|
+
'Price',
|
|
23
|
+
'Graduation',
|
|
24
|
+
'Status',
|
|
25
|
+
]);
|
|
26
|
+
for (const token of result.tokens) {
|
|
27
|
+
const graduationIcon = token.status === 'graduated'
|
|
28
|
+
? '🎓'
|
|
29
|
+
: token.graduationProgress >= 90
|
|
30
|
+
? '🔥'
|
|
31
|
+
: token.graduationProgress >= 50
|
|
32
|
+
? '📈'
|
|
33
|
+
: '🌱';
|
|
34
|
+
table.push([
|
|
35
|
+
chalk.bold(token.name),
|
|
36
|
+
token.symbol,
|
|
37
|
+
formatCurrency(token.mcap),
|
|
38
|
+
formatCurrency(token.price),
|
|
39
|
+
`${graduationIcon} ${token.graduationProgress.toFixed(1)}%`,
|
|
40
|
+
token.status === 'graduated' ? chalk.green('✓ Graduated') : chalk.yellow('Active'),
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
43
|
+
console.log(table.toString());
|
|
44
|
+
console.log();
|
|
45
|
+
if (result.page < result.pages) {
|
|
46
|
+
console.log(chalk.dim(`Use --page ${result.page + 1} to see more tokens`));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAiB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,MAAM,OAAO,CAAC;AA6B1B,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAqB,EACrB,IAAI,GAAG,CAAC,EACR,KAAK,GAAG,EAAE,EACV,SAAsC,MAAM;IAE5C,MAAM,KAAK,GAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEvD,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAClC,aAAa,EACb,KAAK,CACN,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC;QACxB,MAAM;QACN,QAAQ;QACR,YAAY;QACZ,OAAO;QACP,YAAY;QACZ,QAAQ;KACT,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,cAAc,GAClB,KAAK,CAAC,MAAM,KAAK,WAAW;YAC1B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE;gBAChC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE;oBAChC,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,IAAI,CAAC;QAEX,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,KAAK,CAAC,MAAM;YACZ,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1B,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;YAC3B,GAAG,cAAc,IAAI,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YAC3D,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;SACnF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sell.d.ts","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAAE,mCAAmC;AACvD,WAAW,EAAE,MAAM,EACnB,MAAM,UAAQ,GACb,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAmB/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,MAAM,CA6BR"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { validateTokenId } from '../utils/validation.js';
|
|
2
|
+
import { printBox, formatTokenAmount, formatCurrency } from '../utils/formatting.js';
|
|
3
|
+
import { printSuccess, printGraduationProgress } from '../interactive/art.js';
|
|
4
|
+
import { resolveTokenId } from '../utils/token-resolver.js';
|
|
5
|
+
export async function sellToken(client, identifier, // Can be token ID, name, or symbol
|
|
6
|
+
tokenAmount, silent = false // Suppress resolver output for quiet/JSON mode
|
|
7
|
+
) {
|
|
8
|
+
// Resolve identifier to token ID
|
|
9
|
+
const tokenId = await resolveTokenId(identifier, client, silent);
|
|
10
|
+
// Validate input
|
|
11
|
+
validateTokenId(tokenId);
|
|
12
|
+
const input = { tokenId, tokenAmount };
|
|
13
|
+
// Make request
|
|
14
|
+
const { data } = await client.invoke('token_sell', input);
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
export function displaySellResult(result) {
|
|
18
|
+
printSuccess('Tokens sold successfully!', 'money');
|
|
19
|
+
printBox('💸 Sale Summary', {
|
|
20
|
+
'Tokens Sold': formatTokenAmount(result.tokensSold),
|
|
21
|
+
'USDC Received': formatCurrency(result.usdcReceived),
|
|
22
|
+
'Fee (1%)': formatCurrency(result.fee),
|
|
23
|
+
'New Price': formatCurrency(result.newPrice),
|
|
24
|
+
'New Market Cap': formatCurrency(result.newMcap),
|
|
25
|
+
'Graduation': `${result.graduationProgress.toFixed(2)}%`,
|
|
26
|
+
});
|
|
27
|
+
if (result.usdcTransferTx) {
|
|
28
|
+
console.log();
|
|
29
|
+
console.log('Transaction:', result.usdcTransferTx);
|
|
30
|
+
}
|
|
31
|
+
console.log();
|
|
32
|
+
printGraduationProgress(result.graduationProgress);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse token amount from various formats:
|
|
36
|
+
* - "all" or "100%" - sell all tokens
|
|
37
|
+
* - "50%" - sell 50% of tokens
|
|
38
|
+
* - "1000" - sell 1000 tokens (will be converted to 18 decimals)
|
|
39
|
+
*/
|
|
40
|
+
export function parseTokenAmount(input, currentBalance) {
|
|
41
|
+
const balance = BigInt(currentBalance);
|
|
42
|
+
if (input.toLowerCase() === 'all' || input === '100%') {
|
|
43
|
+
return balance.toString();
|
|
44
|
+
}
|
|
45
|
+
if (input.endsWith('%')) {
|
|
46
|
+
const percentage = parseFloat(input.slice(0, -1));
|
|
47
|
+
if (isNaN(percentage) || percentage < 0 || percentage > 100) {
|
|
48
|
+
throw new Error('Invalid percentage. Must be between 0 and 100.');
|
|
49
|
+
}
|
|
50
|
+
return ((balance * BigInt(Math.floor(percentage * 100))) / 10000n).toString();
|
|
51
|
+
}
|
|
52
|
+
// Parse as decimal number and convert to 18 decimals
|
|
53
|
+
const amount = parseFloat(input);
|
|
54
|
+
if (isNaN(amount) || amount <= 0) {
|
|
55
|
+
throw new Error('Invalid token amount');
|
|
56
|
+
}
|
|
57
|
+
// Convert to 18 decimals
|
|
58
|
+
const amountWithDecimals = BigInt(Math.floor(amount * 10 ** 18));
|
|
59
|
+
if (amountWithDecimals > balance) {
|
|
60
|
+
throw new Error(`Insufficient balance. You have ${formatTokenAmount(balance)} tokens.`);
|
|
61
|
+
}
|
|
62
|
+
return amountWithDecimals.toString();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=sell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sell.js","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAClD,WAAW,EAAE;QACX,cAAc,EAAE,OAAO,CAAC;QACxB,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AA6BD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAsB;;IASnC,GAAG,CAAC,GAAG,EAAE,MAAM,aAAa,GAAG,GAAG;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAI/C,MAAM,IAAI,aAAa;IAIvB,GAAG,CAAC,GAAG,EAAE,MAAM,aAAa,GAAG,OAAO;IAItC,MAAM,CAAC,GAAG,EAAE,MAAM,aAAa,GAAG,IAAI;IAItC,KAAK,IAAI,IAAI;IAIb,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,OAAO;IAIjB,cAAc,CAAC,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA0D/E,OAAO,CAAC,MAAM;IAcd,aAAa,IAAI,GAAG;IAsBpB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAUrD,qBAAqB,IAAI,MAAM,GAAG,SAAS;IAI3C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAKlE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgBlC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAuB,GAAG,IAAI;IAgBtF,WAAW,IAAI,MAAM;CAiBtB;AAED,eAAO,MAAM,MAAM,eAAsB,CAAC"}
|