@madeonsol/plugin-madeonsol 1.7.3 → 1.8.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 +5 -1
- package/dist/actions/wallet.d.ts +5 -0
- package/dist/actions/wallet.js +233 -0
- package/dist/client.d.ts +27 -0
- package/dist/client.js +27 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -0
- package/package.json +69 -69
package/README.md
CHANGED
|
@@ -48,6 +48,10 @@ Gives your ElizaOS agent access to MadeOnSol's Solana intelligence API.
|
|
|
48
48
|
| `WALLET_TRACKER_TRADES` | Recent swaps and transfers from your watchlist |
|
|
49
49
|
| `GET_MADEONSOL_ACCOUNT` | Your tier, daily quota, burst limit, and slot usage *(new in 1.7.0)* |
|
|
50
50
|
| `LIST_MADEONSOL_TOKENS` | Scan tokens by MC, liquidity, 1h momentum, primary DEX *(new in 1.7.0)* |
|
|
51
|
+
| `WALLET_STATS` | **New 1.8** · Stats + cross-product flags (is_kol, is_alpha_tracked + bot_confidence, is_deployer) for any wallet (PRO+) |
|
|
52
|
+
| `WALLET_PNL` | **New 1.8** · Full FIFO PnL — realized + unrealized, profit factor, drawdown, hold times, top winners (PRO+) |
|
|
53
|
+
| `WALLET_POSITIONS` | **New 1.8** · Open positions with live unrealized SOL from market-cap tracker (PRO+) |
|
|
54
|
+
| `WALLET_TRADES` | **New 1.8** · Recent trades for any wallet, filtered by action (PRO+) |
|
|
51
55
|
|
|
52
56
|
## Install
|
|
53
57
|
|
|
@@ -150,7 +154,7 @@ Free tier returns the full REST response shape on every endpoint — real wallet
|
|
|
150
154
|
| TypeScript SDK | [`madeonsol`](https://www.npmjs.com/package/madeonsol) on npm |
|
|
151
155
|
| Rust SDK | [`madeonsol`](https://crates.io/crates/madeonsol) on crates.io |
|
|
152
156
|
| Python (LangChain, CrewAI) | [`madeonsol-x402`](https://pypi.org/project/madeonsol-x402/) on PyPI |
|
|
153
|
-
| MCP Server (Claude, Cursor) | [`mcp-server-madeonsol`](https://www.npmjs.com/package/mcp-server-madeonsol) |
|
|
157
|
+
| MCP Server (Claude, Cursor) | [`mcp-server-madeonsol`](https://www.npmjs.com/package/mcp-server-madeonsol) · [Smithery](https://smithery.ai/servers/madeonsol/solana-kol-intelligence) · [Glama](https://glama.ai/mcp/servers/LamboPoewert/mcp-server-madeonsol) |
|
|
154
158
|
| Solana Agent Kit | [`solana-agent-kit-plugin-madeonsol`](https://www.npmjs.com/package/solana-agent-kit-plugin-madeonsol) |
|
|
155
159
|
|
|
156
160
|
## License
|
|
@@ -0,0 +1,233 @@
|
|
|
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
|
+
// Base58 wallet matcher — pulls a 32-44 char base58 string out of natural language.
|
|
7
|
+
const WALLET_RE = /[1-9A-HJ-NP-Za-km-z]{32,44}/;
|
|
8
|
+
function extractWallet(text) {
|
|
9
|
+
const m = text.match(WALLET_RE);
|
|
10
|
+
return m ? m[0] : null;
|
|
11
|
+
}
|
|
12
|
+
export const walletStatsAction = {
|
|
13
|
+
name: "WALLET_STATS",
|
|
14
|
+
description: "Get aggregate stats + cross-product flags (is_kol, is_alpha_tracked with bot_confidence, is_deployer) for any Solana wallet over the last 90 days. Works on any wallet — not just curated KOLs.",
|
|
15
|
+
similes: [
|
|
16
|
+
"wallet stats",
|
|
17
|
+
"wallet info",
|
|
18
|
+
"wallet profile",
|
|
19
|
+
"check wallet",
|
|
20
|
+
"is this wallet a kol",
|
|
21
|
+
"is this wallet a deployer",
|
|
22
|
+
"how many trades has this wallet made",
|
|
23
|
+
],
|
|
24
|
+
validate: async (_runtime, message) => {
|
|
25
|
+
const text = message.content?.text || "";
|
|
26
|
+
if (!extractWallet(text))
|
|
27
|
+
return false;
|
|
28
|
+
return /\b(wallet|address)\b/i.test(text) && /\b(stat|info|profile|check|details|about)\b/i.test(text);
|
|
29
|
+
},
|
|
30
|
+
handler: async (runtime, message, _state, _options, callback) => {
|
|
31
|
+
const wallet = extractWallet(message.content?.text || "");
|
|
32
|
+
if (!wallet) {
|
|
33
|
+
callback?.({ text: "Couldn't find a Solana wallet address in your message." });
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const client = getClient(runtime);
|
|
37
|
+
const result = await client.getWalletStats(wallet);
|
|
38
|
+
if (result.error) {
|
|
39
|
+
callback?.({ text: `Error: ${result.error}` });
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const data = result.data;
|
|
43
|
+
const flagSummary = [];
|
|
44
|
+
if (data.flags.is_kol)
|
|
45
|
+
flagSummary.push(`KOL${data.flags.kol_name ? ` (${data.flags.kol_name})` : ""}`);
|
|
46
|
+
if (data.flags.is_alpha_tracked && data.flags.alpha_win_rate != null) {
|
|
47
|
+
flagSummary.push(`alpha (${(data.flags.alpha_win_rate * 100).toFixed(0)}% wr)`);
|
|
48
|
+
}
|
|
49
|
+
if (data.flags.bot_confidence != null && data.flags.bot_confidence > 0.5) {
|
|
50
|
+
flagSummary.push(`likely bot (${(data.flags.bot_confidence * 100).toFixed(0)}% conf)`);
|
|
51
|
+
}
|
|
52
|
+
if (data.flags.is_deployer)
|
|
53
|
+
flagSummary.push("deployer");
|
|
54
|
+
const tradeSummary = data.stats
|
|
55
|
+
? `${data.stats.total_trades} trades across ${data.stats.unique_tokens} tokens · ${data.stats.bought_sol.toFixed(1)} SOL in / ${data.stats.sold_sol.toFixed(1)} SOL out (90d)`
|
|
56
|
+
: "no recorded trades in the 90d window";
|
|
57
|
+
const flagsText = flagSummary.length ? `Flags: ${flagSummary.join(" · ")}\n` : "";
|
|
58
|
+
callback?.({
|
|
59
|
+
text: `${data.address.slice(0, 8)}…${data.address.slice(-4)}\n${flagsText}${tradeSummary}`,
|
|
60
|
+
content: data,
|
|
61
|
+
});
|
|
62
|
+
return undefined;
|
|
63
|
+
},
|
|
64
|
+
examples: [
|
|
65
|
+
[
|
|
66
|
+
{ name: "user1", content: { text: "Get stats for wallet ASVzakePP6GNg9r95d4LPZHJDMXun6L6E4um4pu5ybJk" } },
|
|
67
|
+
{ name: "assistant", content: { text: "Here's the wallet profile..." } },
|
|
68
|
+
],
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
export const walletPnlAction = {
|
|
72
|
+
name: "WALLET_PNL",
|
|
73
|
+
description: "Get full FIFO cost-basis PnL for any Solana wallet — realized + unrealized SOL, profit factor, max drawdown, hold time stats, closed positions sorted by pnl desc, and open positions with live unrealized P&L. Works on any wallet, not just curated KOLs.",
|
|
74
|
+
similes: [
|
|
75
|
+
"wallet pnl",
|
|
76
|
+
"wallet profit",
|
|
77
|
+
"wallet loss",
|
|
78
|
+
"is this wallet profitable",
|
|
79
|
+
"how much did this wallet make",
|
|
80
|
+
"wallet performance",
|
|
81
|
+
"win rate of this wallet",
|
|
82
|
+
"best trades of this wallet",
|
|
83
|
+
],
|
|
84
|
+
validate: async (_runtime, message) => {
|
|
85
|
+
const text = message.content?.text || "";
|
|
86
|
+
if (!extractWallet(text))
|
|
87
|
+
return false;
|
|
88
|
+
return /\b(pnl|profit|loss|winrate|win.rate|performance|best.trade)\b/i.test(text);
|
|
89
|
+
},
|
|
90
|
+
handler: async (runtime, message, _state, _options, callback) => {
|
|
91
|
+
const wallet = extractWallet(message.content?.text || "");
|
|
92
|
+
if (!wallet) {
|
|
93
|
+
callback?.({ text: "Couldn't find a Solana wallet address in your message." });
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const client = getClient(runtime);
|
|
97
|
+
const result = await client.getWalletPnl(wallet);
|
|
98
|
+
if (result.error) {
|
|
99
|
+
callback?.({ text: `Error: ${result.error}` });
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const data = result.data;
|
|
103
|
+
const s = data.summary;
|
|
104
|
+
const winRateStr = s.win_rate != null ? `${(s.win_rate * 100).toFixed(0)}%` : "—";
|
|
105
|
+
const pfStr = s.profit_factor != null ? s.profit_factor.toFixed(2) : "—";
|
|
106
|
+
const holdStr = s.avg_hold_minutes != null ? `${s.avg_hold_minutes}m` : "—";
|
|
107
|
+
const topWinners = data.closed_positions.slice(0, 3).filter((p) => p.pnl_sol > 0);
|
|
108
|
+
const winnerLines = topWinners.map((p) => ` ${p.token_mint.slice(0, 6)}… +${p.pnl_sol.toFixed(2)} SOL (${p.roi_pct?.toFixed(0) ?? "?"}% ROI, ${p.hold_minutes ?? "?"}m hold)`);
|
|
109
|
+
const lines = [
|
|
110
|
+
`${data.address.slice(0, 8)}…${data.address.slice(-4)} — 90d PnL`,
|
|
111
|
+
`Realized: ${s.realized_sol >= 0 ? "+" : ""}${s.realized_sol.toFixed(2)} SOL · Unrealized: ${s.unrealized_sol >= 0 ? "+" : ""}${s.unrealized_sol.toFixed(2)} SOL`,
|
|
112
|
+
`Win rate: ${winRateStr} (${s.wins}W / ${s.losses}L) · Profit factor: ${pfStr} · Avg hold: ${holdStr}`,
|
|
113
|
+
`Max drawdown: ${s.max_drawdown_sol.toFixed(2)} SOL · Open: ${s.open_positions_count} · Closed: ${s.closed_positions_count}`,
|
|
114
|
+
];
|
|
115
|
+
if (winnerLines.length)
|
|
116
|
+
lines.push("Top winners:", ...winnerLines);
|
|
117
|
+
callback?.({ text: lines.join("\n"), content: data });
|
|
118
|
+
return undefined;
|
|
119
|
+
},
|
|
120
|
+
examples: [
|
|
121
|
+
[
|
|
122
|
+
{ name: "user1", content: { text: "What's the PnL for ASVzakePP6GNg9r95d4LPZHJDMXun6L6E4um4pu5ybJk?" } },
|
|
123
|
+
{ name: "assistant", content: { text: "Here's the wallet's 90-day PnL..." } },
|
|
124
|
+
],
|
|
125
|
+
],
|
|
126
|
+
};
|
|
127
|
+
export const walletPositionsAction = {
|
|
128
|
+
name: "WALLET_POSITIONS",
|
|
129
|
+
description: "List open positions for any Solana wallet with live unrealized P&L from the market-cap tracker. Lighter slice of WALLET_PNL — use when you only need the bags, not the full performance summary.",
|
|
130
|
+
similes: [
|
|
131
|
+
"wallet positions",
|
|
132
|
+
"what is this wallet holding",
|
|
133
|
+
"open bags",
|
|
134
|
+
"current positions",
|
|
135
|
+
"what tokens does this wallet own",
|
|
136
|
+
"wallet bags",
|
|
137
|
+
],
|
|
138
|
+
validate: async (_runtime, message) => {
|
|
139
|
+
const text = message.content?.text || "";
|
|
140
|
+
if (!extractWallet(text))
|
|
141
|
+
return false;
|
|
142
|
+
return /\b(position|bag|holding|holds|owns|hold)\b/i.test(text);
|
|
143
|
+
},
|
|
144
|
+
handler: async (runtime, message, _state, _options, callback) => {
|
|
145
|
+
const wallet = extractWallet(message.content?.text || "");
|
|
146
|
+
if (!wallet) {
|
|
147
|
+
callback?.({ text: "Couldn't find a Solana wallet address in your message." });
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
const client = getClient(runtime);
|
|
151
|
+
const result = await client.getWalletPositions(wallet);
|
|
152
|
+
if (result.error) {
|
|
153
|
+
callback?.({ text: `Error: ${result.error}` });
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
const data = result.data;
|
|
157
|
+
if (!data.positions || data.positions.length === 0) {
|
|
158
|
+
callback?.({ text: `${data.address.slice(0, 8)}… has no open positions in the 90-day window.`, content: data });
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
// Top 10 by absolute cost basis
|
|
162
|
+
const top = [...data.positions]
|
|
163
|
+
.sort((a, b) => b.cost_basis_sol - a.cost_basis_sol)
|
|
164
|
+
.slice(0, 10);
|
|
165
|
+
const lines = top.map((p) => {
|
|
166
|
+
const u = p.unrealized_sol;
|
|
167
|
+
const tag = u == null ? "?" : u > 0 ? `+${u.toFixed(2)} (${p.unrealized_pct?.toFixed(0)}%)` : `${u.toFixed(2)} (${p.unrealized_pct?.toFixed(0)}%)`;
|
|
168
|
+
return ` ${p.token_mint.slice(0, 8)}… cost ${p.cost_basis_sol.toFixed(2)} SOL · unrealized ${tag} SOL`;
|
|
169
|
+
});
|
|
170
|
+
callback?.({
|
|
171
|
+
text: `${data.address.slice(0, 8)}… — ${data.positions.length} open position(s)\nTop ${top.length}:\n${lines.join("\n")}`,
|
|
172
|
+
content: data,
|
|
173
|
+
});
|
|
174
|
+
return undefined;
|
|
175
|
+
},
|
|
176
|
+
examples: [
|
|
177
|
+
[
|
|
178
|
+
{ name: "user1", content: { text: "What is wallet ASVzakePP6GNg9r95d4LPZHJDMXun6L6E4um4pu5ybJk holding?" } },
|
|
179
|
+
{ name: "assistant", content: { text: "Open positions..." } },
|
|
180
|
+
],
|
|
181
|
+
],
|
|
182
|
+
};
|
|
183
|
+
export const walletTradesAction = {
|
|
184
|
+
name: "WALLET_TRADES",
|
|
185
|
+
description: "Get recent raw trades for any Solana wallet over the last 90 days. Filterable by action (buy/sell). Returns up to 50 most recent trades; use cursor pagination for more.",
|
|
186
|
+
similes: [
|
|
187
|
+
"wallet trades",
|
|
188
|
+
"wallet history",
|
|
189
|
+
"wallet activity",
|
|
190
|
+
"recent trades",
|
|
191
|
+
"what did this wallet trade",
|
|
192
|
+
"wallet swaps",
|
|
193
|
+
],
|
|
194
|
+
validate: async (_runtime, message) => {
|
|
195
|
+
const text = message.content?.text || "";
|
|
196
|
+
if (!extractWallet(text))
|
|
197
|
+
return false;
|
|
198
|
+
return /\b(trade|swap|activity|history|recent)\b/i.test(text);
|
|
199
|
+
},
|
|
200
|
+
handler: async (runtime, message, _state, _options, callback) => {
|
|
201
|
+
const text = message.content?.text || "";
|
|
202
|
+
const wallet = extractWallet(text);
|
|
203
|
+
if (!wallet) {
|
|
204
|
+
callback?.({ text: "Couldn't find a Solana wallet address in your message." });
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
const client = getClient(runtime);
|
|
208
|
+
const lc = text.toLowerCase();
|
|
209
|
+
const action = lc.includes("buy") && !lc.includes("buys and sells") ? "buy" : lc.includes("sell") ? "sell" : undefined;
|
|
210
|
+
const result = await client.getWalletTrades(wallet, { limit: 50, ...(action ? { action } : {}) });
|
|
211
|
+
if (result.error) {
|
|
212
|
+
callback?.({ text: `Error: ${result.error}` });
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
const data = result.data;
|
|
216
|
+
if (!data.trades || data.trades.length === 0) {
|
|
217
|
+
callback?.({ text: `No trades found for ${data.address.slice(0, 8)}… (90-day window).`, content: data });
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
const lines = data.trades.slice(0, 15).map((t) => ` ${t.traded_at.slice(0, 16).replace("T", " ")} ${t.action.toUpperCase()} ${t.sol_amount.toFixed(2)} SOL → ${t.token_mint.slice(0, 8)}…`);
|
|
221
|
+
callback?.({
|
|
222
|
+
text: `${data.address.slice(0, 8)}… — ${data.trades.length} recent ${action ?? "trade"}(s)${data.has_more ? " (more available)" : ""}:\n${lines.join("\n")}`,
|
|
223
|
+
content: data,
|
|
224
|
+
});
|
|
225
|
+
return undefined;
|
|
226
|
+
},
|
|
227
|
+
examples: [
|
|
228
|
+
[
|
|
229
|
+
{ name: "user1", content: { text: "Show recent buys for ASVzakePP6GNg9r95d4LPZHJDMXun6L6E4um4pu5ybJk" } },
|
|
230
|
+
{ name: "assistant", content: { text: "Here are the recent buys..." } },
|
|
231
|
+
],
|
|
232
|
+
],
|
|
233
|
+
};
|
package/dist/client.d.ts
CHANGED
|
@@ -215,6 +215,33 @@ export declare class MadeOnSolClient {
|
|
|
215
215
|
error?: string;
|
|
216
216
|
status: number;
|
|
217
217
|
}>;
|
|
218
|
+
getWalletStats(address: string): Promise<{
|
|
219
|
+
data?: unknown;
|
|
220
|
+
error?: string;
|
|
221
|
+
status: number;
|
|
222
|
+
}>;
|
|
223
|
+
getWalletPnl(address: string): Promise<{
|
|
224
|
+
data?: unknown;
|
|
225
|
+
error?: string;
|
|
226
|
+
status: number;
|
|
227
|
+
}>;
|
|
228
|
+
getWalletPositions(address: string): Promise<{
|
|
229
|
+
data?: unknown;
|
|
230
|
+
error?: string;
|
|
231
|
+
status: number;
|
|
232
|
+
}>;
|
|
233
|
+
getWalletTrades(address: string, params?: {
|
|
234
|
+
limit?: number;
|
|
235
|
+
cursor?: string;
|
|
236
|
+
action?: "buy" | "sell";
|
|
237
|
+
token_mint?: string;
|
|
238
|
+
since?: number;
|
|
239
|
+
until?: number;
|
|
240
|
+
}): Promise<{
|
|
241
|
+
data?: unknown;
|
|
242
|
+
error?: string;
|
|
243
|
+
status: number;
|
|
244
|
+
}>;
|
|
218
245
|
getWalletTrackerSummary(params?: {
|
|
219
246
|
period?: string;
|
|
220
247
|
wallet?: string;
|
package/dist/client.js
CHANGED
|
@@ -168,6 +168,33 @@ export class MadeOnSolClient {
|
|
|
168
168
|
const query = qs.toString() ? `?${qs.toString()}` : "";
|
|
169
169
|
return this.restRequest("GET", `/wallet-tracker/trades${query}`);
|
|
170
170
|
}
|
|
171
|
+
// ── Universal wallet endpoints (PRO+, any wallet — not just curated KOLs) ──
|
|
172
|
+
getWalletStats(address) {
|
|
173
|
+
return this.restRequest("GET", `/wallet/${encodeURIComponent(address)}`);
|
|
174
|
+
}
|
|
175
|
+
getWalletPnl(address) {
|
|
176
|
+
return this.restRequest("GET", `/wallet/${encodeURIComponent(address)}/pnl`);
|
|
177
|
+
}
|
|
178
|
+
getWalletPositions(address) {
|
|
179
|
+
return this.restRequest("GET", `/wallet/${encodeURIComponent(address)}/positions`);
|
|
180
|
+
}
|
|
181
|
+
getWalletTrades(address, params) {
|
|
182
|
+
const qs = new URLSearchParams();
|
|
183
|
+
if (params?.limit !== undefined)
|
|
184
|
+
qs.set("limit", String(params.limit));
|
|
185
|
+
if (params?.cursor)
|
|
186
|
+
qs.set("cursor", params.cursor);
|
|
187
|
+
if (params?.action)
|
|
188
|
+
qs.set("action", params.action);
|
|
189
|
+
if (params?.token_mint)
|
|
190
|
+
qs.set("token_mint", params.token_mint);
|
|
191
|
+
if (params?.since !== undefined)
|
|
192
|
+
qs.set("since", String(params.since));
|
|
193
|
+
if (params?.until !== undefined)
|
|
194
|
+
qs.set("until", String(params.until));
|
|
195
|
+
const query = qs.toString() ? `?${qs.toString()}` : "";
|
|
196
|
+
return this.restRequest("GET", `/wallet/${encodeURIComponent(address)}/trades${query}`);
|
|
197
|
+
}
|
|
171
198
|
getWalletTrackerSummary(params) {
|
|
172
199
|
const qs = new URLSearchParams();
|
|
173
200
|
if (params?.period)
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { kolCompareAction } from "./actions/kol-compare.js";
|
|
|
9
9
|
import { kolAlertsRecentAction } from "./actions/kol-alerts-recent.js";
|
|
10
10
|
import { meAction } from "./actions/me.js";
|
|
11
11
|
import { tokensListAction } from "./actions/tokens-list.js";
|
|
12
|
+
import { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction } from "./actions/wallet.js";
|
|
12
13
|
/** Key used to store the initialized client on the runtime */
|
|
13
14
|
export declare const MADEONSOL_CLIENT_KEY = "madeonsol:client";
|
|
14
15
|
export declare const madeOnSolPlugin: Plugin;
|
|
@@ -18,3 +19,4 @@ export { kolFeedAction, kolCoordinationAction, kolLeaderboardAction, deployerAle
|
|
|
18
19
|
export { walletTrackerWatchlistAction, walletTrackerTradesAction };
|
|
19
20
|
export { kolTokenEntryOrderAction, kolCompareAction, kolAlertsRecentAction };
|
|
20
21
|
export { meAction, tokensListAction };
|
|
22
|
+
export { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction };
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { kolCompareAction } from "./actions/kol-compare.js";
|
|
|
8
8
|
import { kolAlertsRecentAction } from "./actions/kol-alerts-recent.js";
|
|
9
9
|
import { meAction } from "./actions/me.js";
|
|
10
10
|
import { tokensListAction } from "./actions/tokens-list.js";
|
|
11
|
+
import { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction } from "./actions/wallet.js";
|
|
11
12
|
import { MadeOnSolClient } from "./client.js";
|
|
12
13
|
/** Key used to store the initialized client on the runtime */
|
|
13
14
|
export const MADEONSOL_CLIENT_KEY = "madeonsol:client";
|
|
@@ -26,6 +27,10 @@ export const madeOnSolPlugin = {
|
|
|
26
27
|
kolAlertsRecentAction,
|
|
27
28
|
meAction,
|
|
28
29
|
tokensListAction,
|
|
30
|
+
walletStatsAction,
|
|
31
|
+
walletPnlAction,
|
|
32
|
+
walletPositionsAction,
|
|
33
|
+
walletTradesAction,
|
|
29
34
|
],
|
|
30
35
|
/**
|
|
31
36
|
* Initialize the MadeOnSol client.
|
|
@@ -75,3 +80,4 @@ export { kolFeedAction, kolCoordinationAction, kolLeaderboardAction, deployerAle
|
|
|
75
80
|
export { walletTrackerWatchlistAction, walletTrackerTradesAction };
|
|
76
81
|
export { kolTokenEntryOrderAction, kolCompareAction, kolAlertsRecentAction };
|
|
77
82
|
export { meAction, tokensListAction };
|
|
83
|
+
export { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction };
|
package/package.json
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@madeonsol/plugin-madeonsol",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "ElizaOS plugin for MadeOnSol — Solana KOL intelligence and deployer analytics via x402 micropayments",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"files": [
|
|
9
|
-
"dist",
|
|
10
|
-
"README.md",
|
|
11
|
-
"LICENSE"
|
|
12
|
-
],
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "tsc",
|
|
15
|
-
"dev": "tsc --watch",
|
|
16
|
-
"preflight": "bash ../../scripts/preflight-publish.sh",
|
|
17
|
-
"prepublishOnly": "npm run preflight && npm run build"
|
|
18
|
-
},
|
|
19
|
-
"peerDependencies": {
|
|
20
|
-
"@elizaos/core": ">=1.0.0",
|
|
21
|
-
"@scure/base": ">=1.0.0",
|
|
22
|
-
"@solana/kit": ">=2.0.0",
|
|
23
|
-
"@x402/core": ">=0.1.0",
|
|
24
|
-
"@x402/fetch": ">=0.1.0",
|
|
25
|
-
"@x402/svm": ">=0.1.0"
|
|
26
|
-
},
|
|
27
|
-
"agentConfig": {
|
|
28
|
-
"pluginType": "elizaos:plugin:1.0.0",
|
|
29
|
-
"pluginParameters": {
|
|
30
|
-
"MADEONSOL_API_URL": {
|
|
31
|
-
"type": "string",
|
|
32
|
-
"description": "MadeOnSol API base URL",
|
|
33
|
-
"required": false,
|
|
34
|
-
"default": "https://madeonsol.com"
|
|
35
|
-
},
|
|
36
|
-
"SVM_PRIVATE_KEY": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"description": "Solana private key (base58) for automatic x402 USDC payments",
|
|
39
|
-
"required": true,
|
|
40
|
-
"sensitive": true
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
"keywords": [
|
|
45
|
-
"elizaos",
|
|
46
|
-
"eliza",
|
|
47
|
-
"plugin",
|
|
48
|
-
"elizaos-plugin",
|
|
49
|
-
"ai-agent",
|
|
50
|
-
"solana",
|
|
51
|
-
"kol",
|
|
52
|
-
"kol-tracker",
|
|
53
|
-
"x402",
|
|
54
|
-
"memecoin",
|
|
55
|
-
"memecoin-tracker",
|
|
56
|
-
"pumpfun",
|
|
57
|
-
"deployer-hunter",
|
|
58
|
-
"alpha",
|
|
59
|
-
"alpha-bot",
|
|
60
|
-
"smart-money",
|
|
61
|
-
"copy-trading",
|
|
62
|
-
"trading",
|
|
63
|
-
"madeonsol"
|
|
64
|
-
],
|
|
65
|
-
"license": "MIT",
|
|
66
|
-
"devDependencies": {
|
|
67
|
-
"@elizaos/core": "^2.0.0-alpha.77"
|
|
68
|
-
}
|
|
69
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@madeonsol/plugin-madeonsol",
|
|
3
|
+
"version": "1.8.1",
|
|
4
|
+
"description": "ElizaOS plugin for MadeOnSol — Solana KOL intelligence and deployer analytics via x402 micropayments",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md",
|
|
11
|
+
"LICENSE"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"preflight": "bash ../../scripts/preflight-publish.sh",
|
|
17
|
+
"prepublishOnly": "npm run preflight && npm run build"
|
|
18
|
+
},
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"@elizaos/core": ">=1.0.0",
|
|
21
|
+
"@scure/base": ">=1.0.0",
|
|
22
|
+
"@solana/kit": ">=2.0.0",
|
|
23
|
+
"@x402/core": ">=0.1.0",
|
|
24
|
+
"@x402/fetch": ">=0.1.0",
|
|
25
|
+
"@x402/svm": ">=0.1.0"
|
|
26
|
+
},
|
|
27
|
+
"agentConfig": {
|
|
28
|
+
"pluginType": "elizaos:plugin:1.0.0",
|
|
29
|
+
"pluginParameters": {
|
|
30
|
+
"MADEONSOL_API_URL": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "MadeOnSol API base URL",
|
|
33
|
+
"required": false,
|
|
34
|
+
"default": "https://madeonsol.com"
|
|
35
|
+
},
|
|
36
|
+
"SVM_PRIVATE_KEY": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"description": "Solana private key (base58) for automatic x402 USDC payments",
|
|
39
|
+
"required": true,
|
|
40
|
+
"sensitive": true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"elizaos",
|
|
46
|
+
"eliza",
|
|
47
|
+
"plugin",
|
|
48
|
+
"elizaos-plugin",
|
|
49
|
+
"ai-agent",
|
|
50
|
+
"solana",
|
|
51
|
+
"kol",
|
|
52
|
+
"kol-tracker",
|
|
53
|
+
"x402",
|
|
54
|
+
"memecoin",
|
|
55
|
+
"memecoin-tracker",
|
|
56
|
+
"pumpfun",
|
|
57
|
+
"deployer-hunter",
|
|
58
|
+
"alpha",
|
|
59
|
+
"alpha-bot",
|
|
60
|
+
"smart-money",
|
|
61
|
+
"copy-trading",
|
|
62
|
+
"trading",
|
|
63
|
+
"madeonsol"
|
|
64
|
+
],
|
|
65
|
+
"license": "MIT",
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@elizaos/core": "^2.0.0-alpha.77"
|
|
68
|
+
}
|
|
69
|
+
}
|