@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@madeonsol/plugin-madeonsol",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "description": "ElizaOS plugin for MadeOnSol — Solana KOL intelligence and deployer analytics via x402 micropayments",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",