@madeonsol/plugin-madeonsol 1.2.0 → 1.3.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/README.md +27 -0
- package/dist/client.d.ts +55 -0
- package/dist/client.js +25 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -87,6 +87,33 @@ const res = await client.coordinationAlertsCreate({
|
|
|
87
87
|
|
|
88
88
|
PRO=5 rules, ULTRA=20. Also available: `coordinationAlertsList()`, `coordinationAlertsGet(id)`, `coordinationAlertsUpdate(id, updates)`, `coordinationAlertsDelete(id)`.
|
|
89
89
|
|
|
90
|
+
### First-touch signal *(new in 1.3)*
|
|
91
|
+
|
|
92
|
+
Every "first KOL buy on a token mint" event — when a tracked KOL is the first of the cohort to touch a token. Filterable by **scout tier** (S/A/B/C from `mv_kol_scout_score`), KOL winrate, token age, mint suffix.
|
|
93
|
+
|
|
94
|
+
**Backtest:** S-tier scouts attract ≥3 follow-on KOLs within 4h ~50% of the time vs ~14% baseline (38d / 491k buys).
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
import { MadeOnSolClient } from "@madeonsol/plugin-madeonsol";
|
|
98
|
+
const client = new MadeOnSolClient({ apiKey: process.env.MADEONSOL_API_KEY });
|
|
99
|
+
|
|
100
|
+
// REST query
|
|
101
|
+
const { events } = await client.firstTouches({ preset: "scout", min_scout_tier: "S", limit: 20 });
|
|
102
|
+
|
|
103
|
+
// Webhook subscription (Ultra) — push delivery, HMAC-signed
|
|
104
|
+
const { subscription, webhook_secret } = await client.firstTouchSubscriptionsCreate({
|
|
105
|
+
name: "S-tier scouts on pump tokens",
|
|
106
|
+
filters: { min_scout_tier: "S", mint_suffix: "pump" },
|
|
107
|
+
delivery_mode: "webhook",
|
|
108
|
+
webhook_url: "https://you.com/hooks/scout",
|
|
109
|
+
});
|
|
110
|
+
// store webhook_secret — shown ONCE
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
ULTRA only for subscriptions — up to 10 active. CRUD: `firstTouchSubscriptionsList()`, `firstTouchSubscriptionsGet(id)`, `firstTouchSubscriptionsUpdate(id, updates)`, `firstTouchSubscriptionsDelete(id)`.
|
|
114
|
+
|
|
115
|
+
> **Don't poll — push.** Median lead time before the second KOL is 12 seconds. WebSocket channel: `kol:first_touches`.
|
|
116
|
+
|
|
90
117
|
Your agent can then respond to queries like:
|
|
91
118
|
- "What are KOLs buying right now?"
|
|
92
119
|
- "Show me the KOL leaderboard this week"
|
package/dist/client.d.ts
CHANGED
|
@@ -337,6 +337,61 @@ export declare class MadeOnSolClient {
|
|
|
337
337
|
error?: string;
|
|
338
338
|
status: number;
|
|
339
339
|
}>;
|
|
340
|
+
firstTouches(params?: {
|
|
341
|
+
since?: string;
|
|
342
|
+
before?: string;
|
|
343
|
+
limit?: number;
|
|
344
|
+
kol?: string;
|
|
345
|
+
min_kol_winrate_7d?: number;
|
|
346
|
+
min_scout_tier?: "S" | "A" | "B" | "C";
|
|
347
|
+
min_n_touches?: number;
|
|
348
|
+
strategy?: "scalper" | "day_trader" | "swing_trader" | "hodler" | "mixed";
|
|
349
|
+
token_age_max_min?: number;
|
|
350
|
+
min_first_buy_sol?: number;
|
|
351
|
+
mint_suffix?: string;
|
|
352
|
+
preset?: "scout" | "fresh_launch";
|
|
353
|
+
include?: string;
|
|
354
|
+
}): Promise<{
|
|
355
|
+
data?: unknown;
|
|
356
|
+
error?: string;
|
|
357
|
+
status: number;
|
|
358
|
+
}>;
|
|
359
|
+
firstTouchSubscriptionsList(): Promise<{
|
|
360
|
+
data?: unknown;
|
|
361
|
+
error?: string;
|
|
362
|
+
status: number;
|
|
363
|
+
}>;
|
|
364
|
+
firstTouchSubscriptionsCreate(params: {
|
|
365
|
+
name?: string;
|
|
366
|
+
filters?: {
|
|
367
|
+
kol?: string;
|
|
368
|
+
mint_suffix?: string;
|
|
369
|
+
min_first_buy_sol?: number;
|
|
370
|
+
min_scout_tier?: "S" | "A" | "B" | "C";
|
|
371
|
+
min_n_touches?: number;
|
|
372
|
+
};
|
|
373
|
+
delivery_mode?: "websocket" | "webhook" | "both";
|
|
374
|
+
webhook_url?: string;
|
|
375
|
+
}): Promise<{
|
|
376
|
+
data?: unknown;
|
|
377
|
+
error?: string;
|
|
378
|
+
status: number;
|
|
379
|
+
}>;
|
|
380
|
+
firstTouchSubscriptionsGet(id: string): Promise<{
|
|
381
|
+
data?: unknown;
|
|
382
|
+
error?: string;
|
|
383
|
+
status: number;
|
|
384
|
+
}>;
|
|
385
|
+
firstTouchSubscriptionsUpdate(id: string, updates: Record<string, unknown>): Promise<{
|
|
386
|
+
data?: unknown;
|
|
387
|
+
error?: string;
|
|
388
|
+
status: number;
|
|
389
|
+
}>;
|
|
390
|
+
firstTouchSubscriptionsDelete(id: string): Promise<{
|
|
391
|
+
data?: unknown;
|
|
392
|
+
error?: string;
|
|
393
|
+
status: number;
|
|
394
|
+
}>;
|
|
340
395
|
copyTradeSignals(params?: {
|
|
341
396
|
rule_id?: string;
|
|
342
397
|
limit?: string;
|
package/dist/client.js
CHANGED
|
@@ -245,6 +245,31 @@ export class MadeOnSolClient {
|
|
|
245
245
|
coordinationAlertsDelete(ruleId) {
|
|
246
246
|
return this.restRequest("DELETE", `/kol/coordination/alerts/${encodeURIComponent(ruleId)}`);
|
|
247
247
|
}
|
|
248
|
+
// ── First-touch signal ──
|
|
249
|
+
firstTouches(params) {
|
|
250
|
+
const qs = new URLSearchParams();
|
|
251
|
+
if (params)
|
|
252
|
+
for (const [k, v] of Object.entries(params))
|
|
253
|
+
if (v !== undefined)
|
|
254
|
+
qs.set(k, String(v));
|
|
255
|
+
const query = qs.toString() ? `?${qs.toString()}` : "";
|
|
256
|
+
return this.restRequest("GET", `/kol/first-touches${query}`);
|
|
257
|
+
}
|
|
258
|
+
firstTouchSubscriptionsList() {
|
|
259
|
+
return this.restRequest("GET", "/kol/first-touches/subscriptions");
|
|
260
|
+
}
|
|
261
|
+
firstTouchSubscriptionsCreate(params) {
|
|
262
|
+
return this.restRequest("POST", "/kol/first-touches/subscriptions", params);
|
|
263
|
+
}
|
|
264
|
+
firstTouchSubscriptionsGet(id) {
|
|
265
|
+
return this.restRequest("GET", `/kol/first-touches/subscriptions/${encodeURIComponent(id)}`);
|
|
266
|
+
}
|
|
267
|
+
firstTouchSubscriptionsUpdate(id, updates) {
|
|
268
|
+
return this.restRequest("PATCH", `/kol/first-touches/subscriptions/${encodeURIComponent(id)}`, updates);
|
|
269
|
+
}
|
|
270
|
+
firstTouchSubscriptionsDelete(id) {
|
|
271
|
+
return this.restRequest("DELETE", `/kol/first-touches/subscriptions/${encodeURIComponent(id)}`);
|
|
272
|
+
}
|
|
248
273
|
copyTradeSignals(params) {
|
|
249
274
|
const qs = new URLSearchParams();
|
|
250
275
|
if (params)
|
package/package.json
CHANGED