@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,21 +1,51 @@
1
- export function scoreRisk(pair, holders) {
1
+ /**
2
+ * Score risk from 0 (safe) to 100 (extremely risky).
3
+ *
4
+ * Dimensions and max weights:
5
+ * 1. Liquidity — 22 pts
6
+ * 2. Token age — 10 pts
7
+ * 3. Volume anomalies — 8 pts
8
+ * 4. Holder concentration — 18 pts
9
+ * 5. Dev wallet — 15 pts
10
+ * 6. Fresh wallets — 12 pts
11
+ * 7. Sniper activity — 10 pts
12
+ * 8. Contract security — 5 pts
13
+ * --------
14
+ * Max: 100 pts
15
+ */
16
+ export function scoreRisk(pairOrOptions, holders) {
17
+ // Support both old signature (pair, holders) and new options object
18
+ let pair;
19
+ let security;
20
+ if (pairOrOptions && typeof pairOrOptions === 'object' && 'pair' in pairOrOptions) {
21
+ pair = pairOrOptions.pair;
22
+ holders = pairOrOptions.holders;
23
+ security = pairOrOptions.security;
24
+ }
25
+ else {
26
+ pair = pairOrOptions;
27
+ }
2
28
  const flags = [];
3
29
  let totalScore = 0;
4
- // 1. Liquidity risk (25% weight)
5
- const liquidity = pair?.liquidity?.usd || 0;
6
- if (liquidity < 5000) {
30
+ // ── 1. Liquidity risk (max 22 pts) ──
31
+ const liquidity = pair?.liquidity?.usd ?? 0;
32
+ if (liquidity < 1_000) {
33
+ flags.push({ type: 'liquidity', severity: 'critical', message: `Dangerously low liquidity: $${liquidity.toFixed(0)} (high slippage, possible rug)` });
34
+ totalScore += 22;
35
+ }
36
+ else if (liquidity < 5_000) {
7
37
  flags.push({ type: 'liquidity', severity: 'critical', message: `Extremely low liquidity: $${liquidity.toFixed(0)}` });
8
- totalScore += 25;
38
+ totalScore += 18;
9
39
  }
10
- else if (liquidity < 25000) {
40
+ else if (liquidity < 25_000) {
11
41
  flags.push({ type: 'liquidity', severity: 'high', message: `Low liquidity: $${liquidity.toFixed(0)}` });
12
- totalScore += 18;
42
+ totalScore += 12;
13
43
  }
14
- else if (liquidity < 100000) {
44
+ else if (liquidity < 100_000) {
15
45
  flags.push({ type: 'liquidity', severity: 'medium', message: `Moderate liquidity: $${liquidity.toFixed(0)}` });
16
- totalScore += 8;
46
+ totalScore += 5;
17
47
  }
18
- // 2. Token age (10% weight)
48
+ // ── 2. Token age (max 10 pts) ──
19
49
  if (pair?.pairCreatedAt) {
20
50
  const ageMs = Date.now() - pair.pairCreatedAt;
21
51
  const ageHours = ageMs / (1000 * 60 * 60);
@@ -23,53 +53,88 @@ export function scoreRisk(pair, holders) {
23
53
  flags.push({ type: 'age', severity: 'critical', message: `Token launched ${Math.round(ageHours * 60)}m ago` });
24
54
  totalScore += 10;
25
55
  }
26
- else if (ageHours < 24) {
56
+ else if (ageHours < 6) {
27
57
  flags.push({ type: 'age', severity: 'high', message: `Token is ${Math.round(ageHours)}h old` });
28
- totalScore += 6;
58
+ totalScore += 7;
59
+ }
60
+ else if (ageHours < 24) {
61
+ flags.push({ type: 'age', severity: 'medium', message: `Token is ${Math.round(ageHours)}h old` });
62
+ totalScore += 4;
63
+ }
64
+ }
65
+ // ── 3. Volume anomalies (max 8 pts) ──
66
+ const volume24h = pair?.volume?.h24 ?? 0;
67
+ const volume1h = pair?.volume?.h1 ?? 0;
68
+ const mcap = pair?.marketCap ?? 0;
69
+ if (volume24h > 0 && mcap > 0) {
70
+ const volMcapRatio = volume24h / mcap;
71
+ if (volMcapRatio > 5) {
72
+ flags.push({ type: 'volume_anomaly', severity: 'high', message: `Suspicious volume: ${volMcapRatio.toFixed(1)}x market cap (possible wash trading)` });
73
+ totalScore += 8;
74
+ }
75
+ else if (volMcapRatio > 2) {
76
+ flags.push({ type: 'volume_anomaly', severity: 'medium', message: `High volume relative to mcap: ${volMcapRatio.toFixed(1)}x` });
77
+ totalScore += 3;
29
78
  }
30
79
  }
31
- // Holder-based risks (only if we have GMGN data)
80
+ if (volume24h === 0 && volume1h === 0) {
81
+ flags.push({ type: 'no_volume', severity: 'medium', message: 'Zero trading volume, token may be dead' });
82
+ totalScore += 5;
83
+ }
84
+ // ── Holder-based risks (only if we have GMGN data) ──
32
85
  if (holders && holders.length > 0) {
33
- // 3. Top holder concentration (20% weight)
86
+ // ── 4. Top holder concentration (max 18 pts) ──
34
87
  const sorted = [...holders].sort((a, b) => b.supplyPercent - a.supplyPercent);
35
88
  const top10Pct = sorted.slice(0, 10).reduce((s, h) => s + h.supplyPercent, 0);
36
- if (top10Pct > 60) {
89
+ if (top10Pct > 0.60) {
37
90
  flags.push({ type: 'concentration', severity: 'critical', message: `Top 10 holders own ${(top10Pct * 100).toFixed(1)}%` });
38
- totalScore += 20;
91
+ totalScore += 18;
39
92
  }
40
- else if (top10Pct > 40) {
93
+ else if (top10Pct > 0.40) {
41
94
  flags.push({ type: 'concentration', severity: 'high', message: `Top 10 holders own ${(top10Pct * 100).toFixed(1)}%` });
42
- totalScore += 12;
95
+ totalScore += 10;
43
96
  }
44
- else if (top10Pct > 25) {
97
+ else if (top10Pct > 0.25) {
45
98
  flags.push({ type: 'concentration', severity: 'medium', message: `Top 10 holders own ${(top10Pct * 100).toFixed(1)}%` });
46
- totalScore += 5;
99
+ totalScore += 4;
47
100
  }
48
- // 4. Dev wallet (20% weight)
101
+ // ── 5. Dev wallet (max 15 pts) ──
49
102
  const dev = holders.find(h => h.isDeployer);
50
103
  if (dev) {
51
- if (dev.supplyPercent > 0.10) {
52
- flags.push({ type: 'dev_wallet', severity: 'high', message: `Dev holds ${(dev.supplyPercent * 100).toFixed(1)}%` });
104
+ if (dev.supplyPercent > 0.20) {
105
+ flags.push({ type: 'dev_wallet', severity: 'critical', message: `Dev holds ${(dev.supplyPercent * 100).toFixed(1)}% (rug risk)` });
53
106
  totalScore += 15;
54
107
  }
55
- else if (dev.sellAmount > dev.buyAmount * 0.5) {
56
- flags.push({ type: 'dev_selling', severity: 'medium', message: 'Dev has been selling' });
57
- totalScore += 8;
108
+ else if (dev.supplyPercent > 0.10) {
109
+ flags.push({ type: 'dev_wallet', severity: 'high', message: `Dev holds ${(dev.supplyPercent * 100).toFixed(1)}%` });
110
+ totalScore += 10;
111
+ }
112
+ else if (dev.supplyPercent > 0.05) {
113
+ flags.push({ type: 'dev_wallet', severity: 'medium', message: `Dev holds ${(dev.supplyPercent * 100).toFixed(1)}%` });
114
+ totalScore += 5;
115
+ }
116
+ if (dev.sellAmount > dev.buyAmount * 0.5 && dev.sellAmount > 0) {
117
+ flags.push({ type: 'dev_selling', severity: 'high', message: 'Dev has been selling significantly' });
118
+ totalScore += 5;
58
119
  }
59
120
  }
60
- // 5. Fresh wallets (15% weight)
121
+ // ── 6. Fresh wallets (max 12 pts) ──
61
122
  const freshCount = holders.filter(h => h.isFreshWallet).length;
62
123
  const freshPct = freshCount / holders.length;
63
- if (freshPct > 0.30) {
124
+ if (freshPct > 0.40) {
125
+ flags.push({ type: 'fresh_wallets', severity: 'critical', message: `${(freshPct * 100).toFixed(0)}% fresh wallets (likely bundled/wash)` });
126
+ totalScore += 12;
127
+ }
128
+ else if (freshPct > 0.25) {
64
129
  flags.push({ type: 'fresh_wallets', severity: 'high', message: `${(freshPct * 100).toFixed(0)}% fresh wallets (possible bundle/wash)` });
65
- totalScore += 15;
130
+ totalScore += 8;
66
131
  }
67
132
  else if (freshPct > 0.15) {
68
133
  flags.push({ type: 'fresh_wallets', severity: 'medium', message: `${(freshPct * 100).toFixed(0)}% fresh wallets` });
69
- totalScore += 7;
134
+ totalScore += 4;
70
135
  }
71
- // 6. Sniper activity (10% weight)
72
- const sniperCount = holders.filter(h => h.tags.some(t => t.toLowerCase().includes('sniper') || t.toLowerCase().includes('bot'))).length;
136
+ // ── 7. Sniper activity (max 10 pts) ──
137
+ const sniperCount = holders.filter(h => h.tags.some(t => /sniper|bot|sandwich/i.test(t))).length;
73
138
  if (sniperCount > 5) {
74
139
  flags.push({ type: 'snipers', severity: 'high', message: `${sniperCount} sniper/bot wallets detected` });
75
140
  totalScore += 10;
@@ -80,25 +145,58 @@ export function scoreRisk(pair, holders) {
80
145
  }
81
146
  }
82
147
  else {
83
- // No holder data — add uncertainty
84
- totalScore += 15;
85
- flags.push({ type: 'no_holder_data', severity: 'medium', message: 'Holder analysis unavailable (install Playwright for full analysis)' });
148
+ // No holder data — add uncertainty penalty
149
+ totalScore += 12;
150
+ flags.push({ type: 'no_holder_data', severity: 'medium', message: 'Holder analysis unavailable (limited risk assessment)' });
151
+ }
152
+ // ── 8. Contract security (max 5 pts) ──
153
+ if (security) {
154
+ if (security.mintAuthority === 'active') {
155
+ flags.push({ type: 'mint_authority', severity: 'high', message: 'Mint authority active (dev can print tokens)' });
156
+ totalScore += 3;
157
+ }
158
+ if (security.freezeAuthority === 'active') {
159
+ flags.push({ type: 'freeze_authority', severity: 'high', message: 'Freeze authority active (dev can freeze wallets)' });
160
+ totalScore += 2;
161
+ }
86
162
  }
87
163
  // Clamp to 0-100
88
164
  totalScore = Math.min(100, Math.max(0, totalScore));
89
- const level = totalScore >= 70 ? 'CRITICAL' : totalScore >= 45 ? 'HIGH' : totalScore >= 20 ? 'MEDIUM' : 'LOW';
90
- const summaryParts = [];
91
- if (level === 'CRITICAL')
92
- summaryParts.push('Extreme risk');
93
- else if (level === 'HIGH')
94
- summaryParts.push('High risk');
95
- else if (level === 'MEDIUM')
96
- summaryParts.push('Moderate risk');
97
- else
98
- summaryParts.push('Lower risk');
99
- if (flags.length > 0) {
100
- summaryParts.push(flags.slice(0, 3).map(f => f.message).join('; '));
165
+ const level = totalScore >= 70 ? 'CRITICAL' :
166
+ totalScore >= 45 ? 'HIGH' :
167
+ totalScore >= 20 ? 'MEDIUM' : 'LOW';
168
+ // Build smart summary
169
+ const summary = buildRiskSummary(level, flags, totalScore);
170
+ return { score: totalScore, level, flags, summary };
171
+ }
172
+ /** Build a concise, actionable risk summary from flags */
173
+ function buildRiskSummary(level, flags, score) {
174
+ const parts = [];
175
+ // Headline
176
+ switch (level) {
177
+ case 'CRITICAL':
178
+ parts.push(`Extreme risk (${score}/100)`);
179
+ break;
180
+ case 'HIGH':
181
+ parts.push(`High risk (${score}/100)`);
182
+ break;
183
+ case 'MEDIUM':
184
+ parts.push(`Moderate risk (${score}/100)`);
185
+ break;
186
+ case 'LOW':
187
+ parts.push(`Lower risk (${score}/100)`);
188
+ break;
189
+ }
190
+ // Top 3 most severe flags as supporting details
191
+ const criticalFlags = flags.filter(f => f.severity === 'critical');
192
+ const highFlags = flags.filter(f => f.severity === 'high');
193
+ const topFlags = [...criticalFlags, ...highFlags].slice(0, 3);
194
+ if (topFlags.length > 0) {
195
+ parts.push(topFlags.map(f => f.message).join('; '));
196
+ }
197
+ else if (flags.length > 0) {
198
+ parts.push(flags.slice(0, 2).map(f => f.message).join('; '));
101
199
  }
102
- return { score: totalScore, level, flags, summary: summaryParts.join('. ') + '.' };
200
+ return parts.join('. ') + '.';
103
201
  }
104
202
  //# sourceMappingURL=riskScorer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"riskScorer.js","sourceRoot":"","sources":["../../src/analysis/riskScorer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"riskScorer.js","sourceRoot":"","sources":["../../src/analysis/riskScorer.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * AI-like Summary Generator — code-generated, no API calls
3
- * Produces human-readable analysis from raw data
2
+ * Summary Generator — produces human-readable token analysis from raw data.
3
+ * No API calls needed; all logic is rule-based.
4
4
  */
5
5
  interface SummaryInput {
6
6
  token: {
@@ -19,6 +19,7 @@ interface SummaryInput {
19
19
  marketCap: number;
20
20
  volume24h: number;
21
21
  volume1h: number;
22
+ volume5m?: number;
22
23
  liquidity: number;
23
24
  volumeLiquidityRatio: number;
24
25
  dex: string;