@0xprotovox/deficlaw 0.1.1 → 0.3.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.
Files changed (48) hide show
  1. package/README.md +115 -41
  2. package/dist/analysis/formatOutput.d.ts +113 -2
  3. package/dist/analysis/formatOutput.js +135 -100
  4. package/dist/analysis/formatOutput.js.map +1 -1
  5. package/dist/analysis/riskScorer.d.ts +24 -2
  6. package/dist/analysis/riskScorer.js +146 -48
  7. package/dist/analysis/riskScorer.js.map +1 -1
  8. package/dist/analysis/summaryGenerator.d.ts +3 -2
  9. package/dist/analysis/summaryGenerator.js +204 -42
  10. package/dist/analysis/summaryGenerator.js.map +1 -1
  11. package/dist/cache/memoryCache.d.ts +12 -3
  12. package/dist/cache/memoryCache.js +43 -2
  13. package/dist/cache/memoryCache.js.map +1 -1
  14. package/dist/server.d.ts +3 -2
  15. package/dist/server.js +66 -16
  16. package/dist/server.js.map +1 -1
  17. package/dist/sources/dexscreener.d.ts +8 -17
  18. package/dist/sources/dexscreener.js +123 -29
  19. package/dist/sources/dexscreener.js.map +1 -1
  20. package/dist/sources/gmgn.d.ts +11 -4
  21. package/dist/sources/gmgn.js +207 -115
  22. package/dist/sources/gmgn.js.map +1 -1
  23. package/dist/sources/solanaRpc.d.ts +4 -4
  24. package/dist/sources/solanaRpc.js +60 -29
  25. package/dist/sources/solanaRpc.js.map +1 -1
  26. package/dist/tools/analyzeToken.d.ts +1 -2
  27. package/dist/tools/analyzeToken.js +114 -100
  28. package/dist/tools/analyzeToken.js.map +1 -1
  29. package/dist/tools/getNewLaunches.d.ts +30 -0
  30. package/dist/tools/getNewLaunches.js +63 -0
  31. package/dist/tools/getNewLaunches.js.map +1 -0
  32. package/dist/tools/getPrice.d.ts +2 -12
  33. package/dist/tools/getPrice.js +23 -4
  34. package/dist/tools/getPrice.js.map +1 -1
  35. package/dist/tools/getTopTraders.d.ts +30 -24
  36. package/dist/tools/getTopTraders.js +36 -21
  37. package/dist/tools/getTopTraders.js.map +1 -1
  38. package/dist/tools/getTrending.d.ts +8 -1
  39. package/dist/tools/getTrending.js +12 -2
  40. package/dist/tools/getTrending.js.map +1 -1
  41. package/dist/tools/searchToken.d.ts +24 -0
  42. package/dist/tools/searchToken.js +43 -0
  43. package/dist/tools/searchToken.js.map +1 -0
  44. package/dist/types/index.d.ts +34 -0
  45. package/dist/utils/debug.d.ts +7 -0
  46. package/dist/utils/debug.js +27 -0
  47. package/dist/utils/debug.js.map +1 -0
  48. package/package.json +18 -2
@@ -1,90 +1,146 @@
1
1
  /**
2
2
  * GMGN Data Source
3
- * Strategy: try direct VAS API first (fast), fall back to Playwright (slower but reliable)
4
- * GMGN uses Cloudflare which blocks Node.js fetch but allows curl and Playwright
3
+ * Strategy: try direct API via curl first (fast), fall back to Playwright (slower but reliable).
4
+ * GMGN uses Cloudflare which blocks Node.js fetch but allows curl and real browsers.
5
5
  */
6
6
  import { MemoryCache } from '../cache/memoryCache.js';
7
- import { execSync } from 'child_process';
8
- const CACHE_TTL = 2 * 60 * 1000;
7
+ import { exec } from 'child_process';
8
+ import { debug } from '../utils/debug.js';
9
+ const CACHE_TTL = parseInt(process.env.DEFICLAW_CACHE_TTL ?? '', 10) || 2 * 60 * 1000;
9
10
  const BASE_URL = 'https://gmgn.ai/vas/api/v1';
10
11
  const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36';
11
- const SCRAPE_TIMEOUT = 40000;
12
+ const SCRAPE_TIMEOUT = 40_000;
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
14
  let browser = null;
13
15
  let initializing = false;
14
16
  const holderCache = new MemoryCache(CACHE_TTL);
15
- /** Try fetching via curl (bypasses Node.js TLS fingerprint detection) */
17
+ /**
18
+ * Try fetching via curl (bypasses Node.js TLS fingerprint detection).
19
+ * Returns parsed data on success, null on any failure.
20
+ * Uses async exec to avoid blocking the event loop.
21
+ */
16
22
  function curlFetch(path) {
17
- try {
23
+ return new Promise((resolve) => {
18
24
  const url = `${BASE_URL}${path}`;
19
25
  const cmd = `curl -s --max-time 10 "${url}" -H "User-Agent: ${UA}"`;
20
- const out = execSync(cmd, { timeout: 12000 }).toString();
21
- if (out.startsWith('<!'))
22
- return null; // Cloudflare HTML
23
- const json = JSON.parse(out);
24
- if (json.code !== 0)
25
- return null;
26
- return json.data;
26
+ const start = Date.now();
27
+ exec(cmd, { timeout: 12_000 }, (error, stdout) => {
28
+ if (error) {
29
+ debug(`curl failed for ${path}: ${error.message}`);
30
+ resolve(null);
31
+ return;
32
+ }
33
+ const out = stdout.toString();
34
+ debug(`curl ${path} completed in ${Date.now() - start}ms (${out.length} bytes)`);
35
+ // Cloudflare sometimes returns HTML instead of JSON
36
+ if (!out || out.startsWith('<!') || out.startsWith('<html')) {
37
+ debug(`curl ${path} returned HTML (Cloudflare block)`);
38
+ resolve(null);
39
+ return;
40
+ }
41
+ let json;
42
+ try {
43
+ json = JSON.parse(out);
44
+ }
45
+ catch {
46
+ debug(`curl ${path} returned malformed JSON`);
47
+ resolve(null);
48
+ return;
49
+ }
50
+ if (json.code !== 0 || !json.data) {
51
+ debug(`curl ${path} returned error code: ${json.code}`);
52
+ resolve(null);
53
+ return;
54
+ }
55
+ resolve(json.data);
56
+ });
57
+ });
58
+ }
59
+ /** Safely extract a string array of tags from raw GMGN holder data */
60
+ function extractTags(h) {
61
+ const raw = [];
62
+ if (Array.isArray(h.tags))
63
+ raw.push(...h.tags);
64
+ if (h.wallet_tag_v2) {
65
+ const wt = Array.isArray(h.wallet_tag_v2) ? h.wallet_tag_v2 : [h.wallet_tag_v2];
66
+ raw.push(...wt);
27
67
  }
28
- catch {
29
- return null;
68
+ if (h.maker_token_tags) {
69
+ const mt = Array.isArray(h.maker_token_tags) ? h.maker_token_tags : [h.maker_token_tags];
70
+ raw.push(...mt);
30
71
  }
72
+ const normalized = raw.map(t => {
73
+ if (typeof t === 'string')
74
+ return t.trim();
75
+ if (typeof t === 'object' && t !== null) {
76
+ const obj = t;
77
+ return String(obj.name ?? obj.label ?? '').trim();
78
+ }
79
+ return '';
80
+ }).filter(Boolean);
81
+ return [...new Set(normalized)];
31
82
  }
32
- /** Normalize GMGN holder data */
83
+ /** Normalize raw GMGN holder array into typed Holder objects */
33
84
  function normalizeHolders(rawList) {
34
85
  if (!Array.isArray(rawList))
35
86
  return [];
36
- return rawList.map(h => {
37
- let tags = [];
38
- if (Array.isArray(h.tags))
39
- tags.push(...h.tags);
40
- if (h.wallet_tag_v2) {
41
- const wt = Array.isArray(h.wallet_tag_v2) ? h.wallet_tag_v2 : [h.wallet_tag_v2];
42
- tags.push(...wt);
43
- }
44
- if (h.maker_token_tags) {
45
- const mt = Array.isArray(h.maker_token_tags) ? h.maker_token_tags : [h.maker_token_tags];
46
- tags.push(...mt);
47
- }
48
- tags = [...new Set(tags.map(t => {
49
- if (typeof t === 'object' && t !== null)
50
- return t.name || t.label || '';
51
- return String(t).trim();
52
- }).filter(Boolean))];
87
+ return rawList
88
+ .filter((item) => typeof item === 'object' && item !== null)
89
+ .map(h => {
90
+ const num = (key) => {
91
+ const v = h[key];
92
+ return typeof v === 'number' ? v : 0;
93
+ };
94
+ const str = (key) => {
95
+ const v = h[key];
96
+ return typeof v === 'string' && v.length > 0 ? v : null;
97
+ };
98
+ const unrealizedPnl = num('unrealized_profit') || num('unrealized_pnl');
99
+ const realizedPnl = num('realized_profit') || num('realized_pnl');
100
+ const lastTs = h.last_active_timestamp;
53
101
  return {
54
- address: h.address || '',
55
- tags,
56
- twitterHandle: h.twitter_username || null,
57
- twitterName: h.twitter_name || null,
58
- name: h.name || null,
59
- balance: h.balance || h.amount_cur || 0,
60
- supplyPercent: h.amount_percentage || 0,
61
- valueUsd: h.usd_value || 0,
62
- avgBuyPrice: h.avg_cost || 0,
63
- cost: h.cost_cur || h.cost || h.total_cost || 0,
64
- unrealizedPnl: h.unrealized_profit || h.unrealized_pnl || 0,
65
- realizedPnl: h.realized_profit || h.realized_pnl || 0,
66
- totalPnl: (h.unrealized_profit || 0) + (h.realized_profit || 0),
67
- profitMultiple: h.profit_change || 0,
68
- buyAmount: h.buy_amount_cur || h.accu_amount || 0,
69
- sellAmount: h.sell_amount_cur || h.current_sell_amount || 0,
70
- buyTxCount: h.buy_tx_count_cur || 0,
71
- sellTxCount: h.sell_tx_count_cur || 0,
72
- isDeployer: h.is_deployer || false,
73
- isFreshWallet: h.is_new || h.is_fresh_wallet || false,
74
- lastActiveAt: h.last_active_timestamp ? new Date(h.last_active_timestamp * 1000).toISOString() : null,
102
+ address: String(h.address ?? ''),
103
+ tags: extractTags(h),
104
+ twitterHandle: str('twitter_username'),
105
+ twitterName: str('twitter_name'),
106
+ name: str('name'),
107
+ balance: num('balance') || num('amount_cur'),
108
+ supplyPercent: num('amount_percentage'),
109
+ valueUsd: num('usd_value'),
110
+ avgBuyPrice: num('avg_cost'),
111
+ cost: num('cost_cur') || num('cost') || num('total_cost'),
112
+ unrealizedPnl,
113
+ realizedPnl,
114
+ totalPnl: unrealizedPnl + realizedPnl,
115
+ profitMultiple: num('profit_change'),
116
+ buyAmount: num('buy_amount_cur') || num('accu_amount'),
117
+ sellAmount: num('sell_amount_cur') || num('current_sell_amount'),
118
+ buyTxCount: num('buy_tx_count_cur'),
119
+ sellTxCount: num('sell_tx_count_cur'),
120
+ isDeployer: h.is_deployer === true,
121
+ isFreshWallet: h.is_new === true || h.is_fresh_wallet === true,
122
+ lastActiveAt: typeof lastTs === 'number' && lastTs > 0
123
+ ? new Date(lastTs * 1000).toISOString()
124
+ : null,
75
125
  };
76
- }).filter(h => h.address && h.address.length > 10);
126
+ })
127
+ .filter(h => h.address.length > 10);
77
128
  }
78
- /** Playwright fallback intercept GMGN API via browser */
129
+ /** Launch or reconnect the Playwright browser instance */
79
130
  async function ensureBrowser() {
80
131
  if (browser?.isConnected?.())
81
132
  return;
82
133
  browser = null;
83
134
  if (initializing) {
84
- await new Promise(r => { const iv = setInterval(() => { if (!initializing) {
85
- clearInterval(iv);
86
- r();
87
- } }, 200); });
135
+ // Wait for another caller to finish initializing
136
+ await new Promise(resolve => {
137
+ const iv = setInterval(() => {
138
+ if (!initializing) {
139
+ clearInterval(iv);
140
+ resolve();
141
+ }
142
+ }, 200);
143
+ });
88
144
  return;
89
145
  }
90
146
  initializing = true;
@@ -95,74 +151,99 @@ async function ensureBrowser() {
95
151
  args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-gpu'],
96
152
  });
97
153
  }
154
+ catch (err) {
155
+ throw new Error(`Failed to launch Playwright browser: ${err instanceof Error ? err.message : String(err)}. ` +
156
+ 'Install with: npm install playwright && npx playwright install chromium');
157
+ }
98
158
  finally {
99
159
  initializing = false;
100
160
  }
101
161
  }
162
+ /** Playwright fallback: navigate to GMGN token page and intercept holder API responses */
102
163
  async function playwrightFetch(address) {
103
164
  await ensureBrowser();
104
- const ctx = await browser.newContext({ userAgent: UA, viewport: { width: 1280, height: 720 } });
165
+ if (!browser)
166
+ throw new Error('Playwright browser not available');
167
+ const ctx = await browser.newContext({
168
+ userAgent: UA,
169
+ viewport: { width: 1280, height: 720 },
170
+ });
105
171
  const page = await ctx.newPage();
106
172
  try {
107
- return await new Promise(async (resolve, reject) => {
108
- const timeout = setTimeout(() => reject(new Error('GMGN scrape timeout')), SCRAPE_TIMEOUT);
109
- let collected = [];
173
+ return await new Promise((resolve, reject) => {
174
+ const timeout = setTimeout(() => reject(new Error('GMGN scrape timeout (40s)')), SCRAPE_TIMEOUT);
175
+ const collected = [];
110
176
  let resolved = false;
177
+ const finish = (items) => {
178
+ if (resolved)
179
+ return;
180
+ clearTimeout(timeout);
181
+ resolved = true;
182
+ resolve(items);
183
+ };
111
184
  page.on('response', async (response) => {
112
185
  if (resolved)
113
186
  return;
114
187
  const url = response.url();
115
- if (url.includes('/token_holders/sol/') || url.includes('/top_holders/sol/')) {
116
- try {
117
- const json = await response.json();
118
- const items = Array.isArray(json.data) ? json.data : (json.data?.holders || json.data?.list || []);
119
- if (items.length > 0) {
120
- collected.push(...items);
121
- if (collected.length >= 10) {
122
- clearTimeout(timeout);
123
- resolved = true;
124
- resolve(collected.slice(0, 150));
125
- }
126
- }
188
+ if (!url.includes('/token_holders/sol/') && !url.includes('/top_holders/sol/'))
189
+ return;
190
+ try {
191
+ const json = await response.json();
192
+ const data = json.data;
193
+ const items = Array.isArray(data) ? data
194
+ : (data && typeof data === 'object'
195
+ ? (Array.isArray(data.holders) ? data.holders
196
+ : Array.isArray(data.list) ? data.list
197
+ : [])
198
+ : []);
199
+ if (Array.isArray(items) && items.length > 0) {
200
+ collected.push(...items);
201
+ if (collected.length >= 10)
202
+ finish(collected.slice(0, 150));
127
203
  }
128
- catch { }
204
+ }
205
+ catch {
206
+ // Response wasn't valid JSON, skip
129
207
  }
130
208
  });
131
- try {
132
- await page.goto(`https://gmgn.ai/sol/token/${address}`, { waitUntil: 'domcontentloaded', timeout: 20000 });
133
- await page.waitForTimeout(3000);
134
- for (const sel of ['button:has-text("Holder")', '[role="tab"]:has-text("Holder")', 'text=Holders']) {
135
- try {
136
- const t = await page.$(sel);
137
- if (t) {
138
- await t.click();
139
- break;
209
+ (async () => {
210
+ try {
211
+ await page.goto(`https://gmgn.ai/sol/token/${address}`, {
212
+ waitUntil: 'domcontentloaded',
213
+ timeout: 20_000,
214
+ });
215
+ await page.waitForTimeout(3000);
216
+ // Try clicking the Holders tab
217
+ for (const sel of ['button:has-text("Holder")', '[role="tab"]:has-text("Holder")', 'text=Holders']) {
218
+ try {
219
+ const tab = await page.$(sel);
220
+ if (tab) {
221
+ await tab.click();
222
+ break;
223
+ }
224
+ }
225
+ catch {
226
+ continue;
140
227
  }
141
228
  }
142
- catch {
143
- continue;
229
+ await page.waitForTimeout(5000);
230
+ if (!resolved && collected.length > 0)
231
+ finish(collected.slice(0, 150));
232
+ if (!resolved) {
233
+ await page.waitForTimeout(5000);
234
+ if (collected.length > 0)
235
+ finish(collected.slice(0, 150));
144
236
  }
237
+ if (!resolved)
238
+ reject(new Error('GMGN returned no holder data via Playwright'));
145
239
  }
146
- await page.waitForTimeout(5000);
147
- if (!resolved && collected.length > 0) {
148
- clearTimeout(timeout);
149
- resolved = true;
150
- resolve(collected.slice(0, 150));
151
- }
152
- if (!resolved) {
153
- await page.waitForTimeout(5000);
154
- if (collected.length > 0) {
240
+ catch (e) {
241
+ if (!resolved) {
155
242
  clearTimeout(timeout);
156
- resolve(collected.slice(0, 150));
243
+ reject(e instanceof Error ? e : new Error(String(e)));
157
244
  }
158
245
  }
159
- }
160
- catch (e) {
161
- if (!resolved) {
162
- clearTimeout(timeout);
163
- reject(e);
164
- }
165
- }
246
+ })();
166
247
  });
167
248
  }
168
249
  finally {
@@ -170,37 +251,48 @@ async function playwrightFetch(address) {
170
251
  await ctx.close().catch(() => { });
171
252
  }
172
253
  }
254
+ /** Returns true — curl fallback is always available, Playwright is optional */
173
255
  export async function isPlaywrightAvailable() {
174
- return true; // curl fallback always available, Playwright optional
256
+ return true;
175
257
  }
176
- /** Get holders — try curl first, then Playwright */
258
+ /**
259
+ * Get holders for a Solana token.
260
+ * Strategy: try curl first (fast, ~1s), fall back to Playwright (~11s).
261
+ */
177
262
  export async function getHolders(address) {
263
+ if (!address || address.trim().length === 0) {
264
+ throw new Error('Token address is required for holder analysis');
265
+ }
178
266
  const cached = holderCache.get(address);
179
267
  if (cached)
180
268
  return cached;
181
- // Strategy 1: curl (fast, ~1s)
182
- const curlData = curlFetch(`/token_holders/sol/${address}?limit=100`);
183
- if (curlData?.list?.length > 0) {
184
- const kolData = curlFetch(`/token_holders/sol/${address}?tag=renowned&limit=50`);
269
+ // Strategy 1: curl (fast, ~1s, async to avoid blocking event loop)
270
+ debug(`Fetching holders for ${address} via curl`);
271
+ const curlData = await curlFetch(`/token_holders/sol/${address}?limit=100`);
272
+ if (curlData && Array.isArray(curlData.list) &&
273
+ curlData.list.length > 0) {
274
+ // Fetch KOL holders in parallel (now truly async)
275
+ const kolData = await curlFetch(`/token_holders/sol/${address}?tag=renowned&limit=50`);
185
276
  const holders = normalizeHolders(curlData.list);
186
- const kolHolders = normalizeHolders(kolData?.list || []);
277
+ const kolHolders = normalizeHolders(kolData ? kolData.list : []);
187
278
  const result = { holders, kolHolders };
188
279
  holderCache.set(address, result);
280
+ debug(`Holders for ${address}: ${holders.length} holders, ${kolHolders.length} KOLs (via curl)`);
189
281
  return result;
190
282
  }
191
283
  // Strategy 2: Playwright (slower ~11s, but bypasses Cloudflare)
192
284
  try {
193
285
  const rawHolders = await playwrightFetch(address);
194
286
  const holders = normalizeHolders(rawHolders);
195
- // KOL fetch via page.evaluate inside Playwright context
196
287
  const result = { holders, kolHolders: [] };
197
288
  holderCache.set(address, result);
198
289
  return result;
199
290
  }
200
291
  catch (err) {
201
- throw new Error(`GMGN fetch failed: ${err.message}`);
292
+ throw new Error(`GMGN fetch failed for ${address}: ${err instanceof Error ? err.message : String(err)}`);
202
293
  }
203
294
  }
295
+ /** Gracefully shut down the Playwright browser */
204
296
  export async function shutdown() {
205
297
  if (browser) {
206
298
  await browser.close().catch(() => { });
@@ -1 +1 @@
1
- {"version":3,"file":"gmgn.js","sourceRoot":"","sources":["../../src/sources/gmgn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gmgn.js","sourceRoot":"","sources":["../../src/sources/gmgn.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Solana RPC — Token security checks (FREE, no auth)
3
- * Checks mint authority, freeze authority, supply
2
+ * Solana RPC — Token security checks (FREE, no auth needed).
3
+ * Checks mint authority, freeze authority, supply via getAccountInfo.
4
4
  */
5
5
  export interface TokenSecurity {
6
6
  mintAuthority: 'revoked' | 'active';
@@ -8,7 +8,7 @@ export interface TokenSecurity {
8
8
  supply: number;
9
9
  decimals: number;
10
10
  }
11
- /** Check token mint/freeze authority */
11
+ /** Check token mint/freeze authority. Returns null if account not found or not a token mint. */
12
12
  export declare function getTokenSecurity(mintAddress: string): Promise<TokenSecurity | null>;
13
- /** Check if an address is likely an LP pool (has program owner like Raydium/Orca) */
13
+ /** Check if an address is likely an LP pool (owned by a known AMM program) */
14
14
  export declare function isLikelyLpPool(address: string): Promise<boolean>;
@@ -1,57 +1,88 @@
1
1
  /**
2
- * Solana RPC — Token security checks (FREE, no auth)
3
- * Checks mint authority, freeze authority, supply
2
+ * Solana RPC — Token security checks (FREE, no auth needed).
3
+ * Checks mint authority, freeze authority, supply via getAccountInfo.
4
4
  */
5
5
  const RPC_URL = process.env.SOLANA_RPC_URL || 'https://api.mainnet-beta.solana.com';
6
+ /** Make a JSON-RPC call to the Solana cluster with timeout */
6
7
  async function rpcCall(method, params) {
7
- const res = await fetch(RPC_URL, {
8
- method: 'POST',
9
- headers: { 'Content-Type': 'application/json' },
10
- body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),
11
- signal: AbortSignal.timeout(10000),
12
- });
13
- const json = await res.json();
14
- if (json.error)
15
- throw new Error(json.error.message);
16
- return json.result;
8
+ let res;
9
+ try {
10
+ res = await fetch(RPC_URL, {
11
+ method: 'POST',
12
+ headers: { 'Content-Type': 'application/json' },
13
+ body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),
14
+ signal: AbortSignal.timeout(10_000),
15
+ });
16
+ }
17
+ catch (err) {
18
+ const msg = err instanceof Error ? err.message : String(err);
19
+ throw new Error(`Solana RPC request failed (${method}): ${msg}`);
20
+ }
21
+ if (!res.ok) {
22
+ throw new Error(`Solana RPC HTTP ${res.status}: ${res.statusText}`);
23
+ }
24
+ let json;
25
+ try {
26
+ json = await res.json();
27
+ }
28
+ catch {
29
+ throw new Error(`Solana RPC returned invalid JSON for ${method}`);
30
+ }
31
+ if (json.error) {
32
+ throw new Error(`Solana RPC error (${json.error.code}): ${json.error.message}`);
33
+ }
34
+ return json.result ?? null;
17
35
  }
18
- /** Check token mint/freeze authority */
36
+ /** Check token mint/freeze authority. Returns null if account not found or not a token mint. */
19
37
  export async function getTokenSecurity(mintAddress) {
38
+ if (!mintAddress || mintAddress.trim().length === 0)
39
+ return null;
20
40
  try {
21
41
  const result = await rpcCall('getAccountInfo', [
22
42
  mintAddress,
23
43
  { encoding: 'jsonParsed' },
24
44
  ]);
25
- if (!result?.value?.data?.parsed?.info)
45
+ // Navigate the nested structure safely
46
+ const value = result?.value;
47
+ const data = value?.data;
48
+ const parsed = data?.parsed;
49
+ const info = parsed?.info;
50
+ if (!info)
26
51
  return null;
27
- const info = result.value.data.parsed.info;
52
+ const decimals = typeof info.decimals === 'number' ? info.decimals : 0;
53
+ const supplyStr = typeof info.supply === 'string' ? info.supply : '0';
28
54
  return {
29
55
  mintAuthority: info.mintAuthority ? 'active' : 'revoked',
30
56
  freezeAuthority: info.freezeAuthority ? 'active' : 'revoked',
31
- supply: parseFloat(info.supply) / Math.pow(10, info.decimals),
32
- decimals: info.decimals,
57
+ supply: parseFloat(supplyStr) / Math.pow(10, decimals),
58
+ decimals,
33
59
  };
34
60
  }
35
61
  catch {
62
+ // Security check is non-critical; return null on failure
36
63
  return null;
37
64
  }
38
65
  }
39
- /** Check if an address is likely an LP pool (has program owner like Raydium/Orca) */
66
+ /** Known LP/AMM program IDs on Solana */
67
+ const LP_PROGRAMS = new Set([
68
+ '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', // Raydium AMM
69
+ 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK', // Raydium CLMM
70
+ 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc', // Orca Whirlpool
71
+ 'LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo', // Meteora DLMM
72
+ '6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P', // PumpFun
73
+ 'PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP', // PumpSwap
74
+ ]);
75
+ /** Check if an address is likely an LP pool (owned by a known AMM program) */
40
76
  export async function isLikelyLpPool(address) {
77
+ if (!address || address.trim().length === 0)
78
+ return false;
41
79
  try {
42
80
  const result = await rpcCall('getAccountInfo', [address, { encoding: 'base64' }]);
43
- if (!result?.value)
81
+ const value = result?.value;
82
+ if (!value)
44
83
  return false;
45
- const owner = result.value.owner;
46
- const LP_PROGRAMS = [
47
- '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', // Raydium AMM
48
- 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK', // Raydium CLMM
49
- 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc', // Orca Whirlpool
50
- 'LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo', // Meteora DLMM
51
- '6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P', // PumpFun
52
- 'PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP', // PumpSwap
53
- ];
54
- return LP_PROGRAMS.includes(owner);
84
+ const owner = value.owner;
85
+ return typeof owner === 'string' && LP_PROGRAMS.has(owner);
55
86
  }
56
87
  catch {
57
88
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"solanaRpc.js","sourceRoot":"","sources":["../../src/sources/solanaRpc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,qCAAqC,CAAC;AAEpF,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,MAAa;IAClD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;QAC/B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AASD,wCAAwC;AACxC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE;YAC7C,WAAW;YACX,EAAE,QAAQ,EAAE,YAAY,EAAE;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;YAAE,OAAO,IAAI,CAAC;QAEpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3C,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC5D,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC7D,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE,OAAO,KAAK,CAAC;QAEjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,WAAW,GAAG;YAClB,8CAA8C,EAAE,cAAc;YAC9D,8CAA8C,EAAE,eAAe;YAC/D,6CAA6C,EAAG,iBAAiB;YACjE,6CAA6C,EAAG,eAAe;YAC/D,6CAA6C,EAAG,UAAU;YAC1D,6CAA6C,EAAG,WAAW;SAC5D,CAAC;QACF,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"solanaRpc.js","sourceRoot":"","sources":["../../src/sources/solanaRpc.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import type { TokenAnalysis } from '../types/index.js';
2
1
  export declare function handleAnalyzeToken(args: {
3
2
  address: string;
4
3
  chain?: string;
5
4
  include_holders?: boolean;
6
- }): Promise<TokenAnalysis | {
5
+ }): Promise<Record<string, unknown> | {
7
6
  error: string;
8
7
  }>;