@madeonsol/plugin-madeonsol 1.13.0 → 1.14.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.
- package/README.md +4 -1
- package/dist/actions/almost-bonded.d.ts +7 -0
- package/dist/actions/almost-bonded.js +69 -0
- package/dist/client.d.ts +22 -0
- package/dist/client.js +18 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,6 +11,8 @@ ElizaOS plugin for [MadeOnSol](https://madeonsol.com) — Solana KOL trading int
|
|
|
11
11
|
|
|
12
12
|
> Real-time Solana trading intelligence: track 1,069 KOL wallets with <3s latency, score 23,000+ Pump.fun deployers, surface deshred deploy signals ~500ms before on-chain confirmation, detect multi-KOL coordination, and stream every DEX trade. Free tier: 200 requests/day at [madeonsol.com/pricing](https://madeonsol.com/pricing) — no credit card required.
|
|
13
13
|
|
|
14
|
+
> **New in 1.14.0** — **Almost-bonded discovery + trending sorts.** New action `MADEONSOL_ALMOST_BONDED` + `client.getAlmostBonded(params)` — pre-bond pump.fun tokens near graduation, ranked by velocity (Δprogress/min): "95% and accelerating" beats "92% stalled". Each token carries `progress_pct`, `velocity_pct_per_min`, `eta_minutes`, `stalled`, `real_sol_reserves`, `market_cap_usd`, `liquidity_usd`, `authorities_revoked`, `deployer_tier`, and `age_minutes`. Params: `min_progress`, `max_progress`, `min_velocity_pct_per_min`, `max_age_minutes`, `deployer_tier`, `authority_revoked`, `min_liq`, `sort` (velocity_desc / progress_desc / eta_asc), `limit`. PRO/ULTRA only. Plus `client.getTokensList({ sort })` gains four momentum sorts — `mc_change_5m_desc`, `mc_change_1h_desc`, `volume_1h_desc`, and `trending` (composite recent-volume × positive-momentum rank).
|
|
15
|
+
>
|
|
14
16
|
> **New in 1.13.0** — **Token net flow.** New action `GET_TOKEN_FLOW` + `client.getTokenFlow(mint, { window })` — net buy/sell flow over a rolling window (`1h` default, or `24h`): `unique_wallets`, `unique_buyers`, `unique_sellers`, `buy_count`, `sell_count`, `total_trades`, `buy_sol`, `sell_sol`, `net_sol`, `trades_per_wallet`. PRO+. Deployer alerts now also surface `deployer_sol_balance` — the deployer wallet's SOL balance at alert time (`null` for historical rows).
|
|
15
17
|
>
|
|
16
18
|
> **New in 1.12.0** — **Token OHLCV candles.** New action `GET_TOKEN_CANDLES` + `client.getTokenCandles(mint, { tf, limit, from, to })` — historical price candles (1m/5m/15m/1h/4h/1d) aggregated from the on-chain trade firehose. Each candle has `t/open/high/low/close/volume_usd/trades/market_cap_usd`. PRO returns OHLCV for the last 30 days; ULTRA adds buy/sell volume + count splits, net flow, MEV volume, open/close liquidity, high/low MC, and full history. PRO/ULTRA only.
|
|
@@ -63,7 +65,8 @@ Gives your ElizaOS agent access to MadeOnSol's Solana intelligence API.
|
|
|
63
65
|
| `WALLET_TRACKER_WATCHLIST` | List your tracked wallets and remaining capacity |
|
|
64
66
|
| `WALLET_TRACKER_TRADES` | Recent swaps and transfers from your watchlist |
|
|
65
67
|
| `GET_MADEONSOL_ACCOUNT` | Your tier, daily quota, burst limit, and slot usage *(new in 1.7.0)* |
|
|
66
|
-
| `LIST_MADEONSOL_TOKENS` | Scan tokens by MC, liquidity, 1h momentum, primary DEX *(new in 1.7.0)* |
|
|
68
|
+
| `LIST_MADEONSOL_TOKENS` | Scan tokens by MC, liquidity, 1h momentum, primary DEX, plus momentum sorts (`mc_change_5m_desc`/`mc_change_1h_desc`/`volume_1h_desc`/`trending`) *(new in 1.7.0)* |
|
|
69
|
+
| `MADEONSOL_ALMOST_BONDED` | **New 1.14** · Pre-bond pump.fun tokens near graduation, ranked by velocity — `progress_pct`, `velocity_pct_per_min`, `eta_minutes`, `stalled`, `deployer_tier` (PRO+) |
|
|
67
70
|
| `WALLET_STATS` | **New 1.8** · Stats + cross-product flags (is_kol, is_alpha_tracked + bot_confidence, is_deployer) for any wallet (PRO+) |
|
|
68
71
|
| `WALLET_PNL` | **New 1.8** · Full FIFO PnL — realized + unrealized, profit factor, drawdown, hold times, top winners (PRO+) |
|
|
69
72
|
| `WALLET_POSITIONS` | **New 1.8** · Open positions with live unrealized SOL from market-cap tracker (PRO+) |
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Action } from "@elizaos/core";
|
|
2
|
+
/**
|
|
3
|
+
* Scan pre-bond pump.fun tokens approaching graduation, ranked by velocity.
|
|
4
|
+
* Heuristics pulled from the user prompt: "fast"/"accelerating" → sort by
|
|
5
|
+
* velocity, "soon"/"closest" → sort by ETA, "elite deployer" → deployer_tier.
|
|
6
|
+
*/
|
|
7
|
+
export declare const almostBondedAction: Action;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { MadeOnSolClient } from "../client.js";
|
|
2
|
+
import { MADEONSOL_CLIENT_KEY } from "../index.js";
|
|
3
|
+
function getClient(runtime) {
|
|
4
|
+
return runtime[MADEONSOL_CLIENT_KEY] ?? new MadeOnSolClient();
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Scan pre-bond pump.fun tokens approaching graduation, ranked by velocity.
|
|
8
|
+
* Heuristics pulled from the user prompt: "fast"/"accelerating" → sort by
|
|
9
|
+
* velocity, "soon"/"closest" → sort by ETA, "elite deployer" → deployer_tier.
|
|
10
|
+
*/
|
|
11
|
+
export const almostBondedAction = {
|
|
12
|
+
name: "MADEONSOL_ALMOST_BONDED",
|
|
13
|
+
description: "Find pre-bond pump.fun tokens near graduation, ranked by velocity (Δprogress/min). Returns mint, symbol, bonding progress %, velocity, ETA-to-bond, stalled flag, and deployer tier. PRO/ULTRA only.",
|
|
14
|
+
similes: [
|
|
15
|
+
"almost bonded",
|
|
16
|
+
"about to graduate",
|
|
17
|
+
"near graduation",
|
|
18
|
+
"tokens about to bond",
|
|
19
|
+
"almost graduated",
|
|
20
|
+
"pre-bond tokens",
|
|
21
|
+
],
|
|
22
|
+
validate: async (_runtime, message) => {
|
|
23
|
+
const text = (message.content?.text || "").toLowerCase();
|
|
24
|
+
return /\b(almost bonded|about to graduate|near graduation|about to bond|pre-?bond|almost graduated)\b/.test(text);
|
|
25
|
+
},
|
|
26
|
+
handler: async (runtime, message, _state, _options, callback) => {
|
|
27
|
+
const client = getClient(runtime);
|
|
28
|
+
const text = (message.content?.text || "").toLowerCase();
|
|
29
|
+
const params = { limit: "10" };
|
|
30
|
+
if (/soon|closest|fastest to bond|eta/.test(text))
|
|
31
|
+
params.sort = "eta_asc";
|
|
32
|
+
else if (/accelerat|fast|velocity|momentum/.test(text))
|
|
33
|
+
params.sort = "velocity_desc";
|
|
34
|
+
if (/elite/.test(text))
|
|
35
|
+
params.deployer_tier = "elite";
|
|
36
|
+
const result = await client.getAlmostBonded(params);
|
|
37
|
+
if (result.error) {
|
|
38
|
+
callback?.({ text: result.status === 402
|
|
39
|
+
? "Authentication required. Set MADEONSOL_API_KEY — free at https://madeonsol.com/pricing — or SVM_PRIVATE_KEY."
|
|
40
|
+
: `Error: ${result.error}` });
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const data = result.data;
|
|
44
|
+
const tokens = (data.tokens || []).slice(0, 10);
|
|
45
|
+
const lines = tokens.map((t, i) => {
|
|
46
|
+
const label = t.symbol || t.name || "?";
|
|
47
|
+
const prog = t.progress_pct != null && isFinite(t.progress_pct) ? `${t.progress_pct.toFixed(1)}%` : "?";
|
|
48
|
+
const vel = t.velocity_pct_per_min != null && isFinite(t.velocity_pct_per_min)
|
|
49
|
+
? ` @ ${t.velocity_pct_per_min >= 0 ? "+" : ""}${t.velocity_pct_per_min.toFixed(2)}%/min`
|
|
50
|
+
: "";
|
|
51
|
+
const eta = t.eta_minutes != null && isFinite(t.eta_minutes) ? ` (ETA ~${t.eta_minutes}m)` : "";
|
|
52
|
+
const tier = t.deployer_tier ? ` [${t.deployer_tier}]` : "";
|
|
53
|
+
return `${i + 1}. ${label} ${t.mint.slice(0, 8)}… — ${prog} bonded${vel}${eta}${tier}`;
|
|
54
|
+
});
|
|
55
|
+
callback?.({
|
|
56
|
+
text: tokens.length
|
|
57
|
+
? `Almost-bonded pump.fun tokens:\n${lines.join("\n")}`
|
|
58
|
+
: "No pre-bond tokens matched those filters.",
|
|
59
|
+
content: data,
|
|
60
|
+
});
|
|
61
|
+
return undefined;
|
|
62
|
+
},
|
|
63
|
+
examples: [
|
|
64
|
+
[
|
|
65
|
+
{ name: "user1", content: { text: "Show me pump.fun tokens about to graduate, fastest first" } },
|
|
66
|
+
{ name: "assistant", content: { text: "Here are the almost-bonded tokens ranked by velocity..." } },
|
|
67
|
+
],
|
|
68
|
+
],
|
|
69
|
+
};
|
package/dist/client.d.ts
CHANGED
|
@@ -503,6 +503,28 @@ export declare class MadeOnSolClient {
|
|
|
503
503
|
error?: string;
|
|
504
504
|
status: number;
|
|
505
505
|
}>;
|
|
506
|
+
/**
|
|
507
|
+
* v1.14 — Pre-bond pump.fun tokens approaching graduation, ranked by velocity
|
|
508
|
+
* (Δprogress/min): "95% and accelerating" beats "92% stalled". Each token is
|
|
509
|
+
* enriched with its deployer's reputation tier. `progress_pct` is from on-chain
|
|
510
|
+
* real_token_reserves; `velocity_pct_per_min` is null until a 5m snapshot exists;
|
|
511
|
+
* `eta_minutes` is a linear projection. PRO/ULTRA only.
|
|
512
|
+
*/
|
|
513
|
+
getAlmostBonded(params?: {
|
|
514
|
+
min_progress?: string;
|
|
515
|
+
max_progress?: string;
|
|
516
|
+
min_velocity_pct_per_min?: string;
|
|
517
|
+
max_age_minutes?: string;
|
|
518
|
+
deployer_tier?: string;
|
|
519
|
+
authority_revoked?: string;
|
|
520
|
+
min_liq?: string;
|
|
521
|
+
sort?: string;
|
|
522
|
+
limit?: string;
|
|
523
|
+
}): Promise<{
|
|
524
|
+
data?: unknown;
|
|
525
|
+
error?: string;
|
|
526
|
+
status: number;
|
|
527
|
+
}>;
|
|
506
528
|
copyTradeSignals(params?: {
|
|
507
529
|
rule_id?: string;
|
|
508
530
|
limit?: string;
|
package/dist/client.js
CHANGED
|
@@ -345,6 +345,24 @@ export class MadeOnSolClient {
|
|
|
345
345
|
const query = qs.toString() ? `?${qs.toString()}` : "";
|
|
346
346
|
return this.restRequest("GET", `/tokens${query}`);
|
|
347
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* v1.14 — Pre-bond pump.fun tokens approaching graduation, ranked by velocity
|
|
350
|
+
* (Δprogress/min): "95% and accelerating" beats "92% stalled". Each token is
|
|
351
|
+
* enriched with its deployer's reputation tier. `progress_pct` is from on-chain
|
|
352
|
+
* real_token_reserves; `velocity_pct_per_min` is null until a 5m snapshot exists;
|
|
353
|
+
* `eta_minutes` is a linear projection. PRO/ULTRA only.
|
|
354
|
+
*/
|
|
355
|
+
getAlmostBonded(params) {
|
|
356
|
+
const qs = new URLSearchParams();
|
|
357
|
+
if (params) {
|
|
358
|
+
for (const [k, v] of Object.entries(params)) {
|
|
359
|
+
if (v !== undefined)
|
|
360
|
+
qs.set(k, v);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
const query = qs.toString() ? `?${qs.toString()}` : "";
|
|
364
|
+
return this.restRequest("GET", `/tokens/almost-bonded${query}`);
|
|
365
|
+
}
|
|
348
366
|
copyTradeSignals(params) {
|
|
349
367
|
const qs = new URLSearchParams();
|
|
350
368
|
if (params)
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { tokenCandlesAction } from "./actions/token-candles.js";
|
|
|
12
12
|
import { tokenFlowAction } from "./actions/token-flow.js";
|
|
13
13
|
import { meAction } from "./actions/me.js";
|
|
14
14
|
import { tokensListAction } from "./actions/tokens-list.js";
|
|
15
|
+
import { almostBondedAction } from "./actions/almost-bonded.js";
|
|
15
16
|
import { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction } from "./actions/wallet.js";
|
|
16
17
|
/** Key used to store the initialized client on the runtime */
|
|
17
18
|
export declare const MADEONSOL_CLIENT_KEY = "madeonsol:client";
|
|
@@ -21,5 +22,5 @@ export { MadeOnSolClient } from "./client.js";
|
|
|
21
22
|
export { kolFeedAction, kolCoordinationAction, kolLeaderboardAction, deployerAlertsAction };
|
|
22
23
|
export { walletTrackerWatchlistAction, walletTrackerTradesAction };
|
|
23
24
|
export { kolTokenEntryOrderAction, kolCompareAction, kolAlertsRecentAction, tokenRiskAction, tokenCandlesAction, tokenFlowAction };
|
|
24
|
-
export { meAction, tokensListAction };
|
|
25
|
+
export { meAction, tokensListAction, almostBondedAction };
|
|
25
26
|
export { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction };
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { tokenCandlesAction } from "./actions/token-candles.js";
|
|
|
11
11
|
import { tokenFlowAction } from "./actions/token-flow.js";
|
|
12
12
|
import { meAction } from "./actions/me.js";
|
|
13
13
|
import { tokensListAction } from "./actions/tokens-list.js";
|
|
14
|
+
import { almostBondedAction } from "./actions/almost-bonded.js";
|
|
14
15
|
import { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction } from "./actions/wallet.js";
|
|
15
16
|
import { MadeOnSolClient } from "./client.js";
|
|
16
17
|
/** Key used to store the initialized client on the runtime */
|
|
@@ -33,6 +34,7 @@ export const madeOnSolPlugin = {
|
|
|
33
34
|
tokenFlowAction,
|
|
34
35
|
meAction,
|
|
35
36
|
tokensListAction,
|
|
37
|
+
almostBondedAction,
|
|
36
38
|
walletStatsAction,
|
|
37
39
|
walletPnlAction,
|
|
38
40
|
walletPositionsAction,
|
|
@@ -85,5 +87,5 @@ export { MadeOnSolClient } from "./client.js";
|
|
|
85
87
|
export { kolFeedAction, kolCoordinationAction, kolLeaderboardAction, deployerAlertsAction };
|
|
86
88
|
export { walletTrackerWatchlistAction, walletTrackerTradesAction };
|
|
87
89
|
export { kolTokenEntryOrderAction, kolCompareAction, kolAlertsRecentAction, tokenRiskAction, tokenCandlesAction, tokenFlowAction };
|
|
88
|
-
export { meAction, tokensListAction };
|
|
90
|
+
export { meAction, tokensListAction, almostBondedAction };
|
|
89
91
|
export { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction };
|
package/package.json
CHANGED