madeonsol 2.8.0 → 2.10.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/dist/stream.js ADDED
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Real-time WebSocket streaming client.
3
+ *
4
+ * Wraps the connect → token → subscribe → event loop with auto-reconnect,
5
+ * 24h-token auto-refresh, heartbeat liveness, and typed events, so consumers
6
+ * never hand-roll connection management. Obtain one via `client.stream.connect()`.
7
+ *
8
+ * Works in Node (global `WebSocket` on Node 22+, else lazily imports the
9
+ * optional `ws` package) and the browser (native WebSocket). Zero required deps.
10
+ */
11
+ async function resolveWebSocket(override) {
12
+ if (override)
13
+ return override;
14
+ const g = globalThis.WebSocket;
15
+ if (g)
16
+ return g;
17
+ try {
18
+ const mod = (await import("ws"));
19
+ const impl = mod.default ?? mod.WebSocket;
20
+ if (impl)
21
+ return impl;
22
+ }
23
+ catch {
24
+ /* fall through */
25
+ }
26
+ throw new Error("No WebSocket implementation available. On Node < 22, install `ws` (npm i ws) or pass { WebSocketImpl }.");
27
+ }
28
+ const OPEN = 1;
29
+ export class MadeOnSolStream {
30
+ constructor(opts) {
31
+ this.ws = null;
32
+ this.listeners = new Map();
33
+ this.desired = { channels: new Set(), filters: {} };
34
+ this.closedByUser = false;
35
+ this.attempt = 0;
36
+ this.hbTimer = null;
37
+ this.reconnectTimer = null;
38
+ this.connecting = false;
39
+ this.opts = {
40
+ getToken: opts.getToken,
41
+ autoReconnect: opts.autoReconnect ?? true,
42
+ maxBackoffMs: opts.maxBackoffMs ?? 30000,
43
+ heartbeatTimeoutMs: opts.heartbeatTimeoutMs ?? 90000,
44
+ WebSocketImpl: opts.WebSocketImpl,
45
+ };
46
+ }
47
+ /** Register a handler. Use an event name, `"*"` for every event, or a lifecycle event. */
48
+ on(event, fn) {
49
+ if (!this.listeners.has(event))
50
+ this.listeners.set(event, new Set());
51
+ this.listeners.get(event).add(fn);
52
+ return this;
53
+ }
54
+ /** Remove a handler (or all handlers for an event when `fn` is omitted). */
55
+ off(event, fn) {
56
+ if (!fn)
57
+ this.listeners.delete(event);
58
+ else
59
+ this.listeners.get(event)?.delete(fn);
60
+ return this;
61
+ }
62
+ emit(event, data, evt) {
63
+ const set = this.listeners.get(event);
64
+ if (set)
65
+ for (const fn of set) {
66
+ try {
67
+ fn(data, evt);
68
+ }
69
+ catch { /* user handler */ }
70
+ }
71
+ }
72
+ /** Subscribe to one or more channels (connects on first call). Optional server-side filters. */
73
+ subscribe(channels, filters) {
74
+ for (const c of channels)
75
+ this.desired.channels.add(c);
76
+ if (filters)
77
+ this.desired.filters = { ...this.desired.filters, ...filters };
78
+ if (this.ws && this.ws.readyState === OPEN)
79
+ this.sendSubscribe();
80
+ else
81
+ void this.connect();
82
+ return this;
83
+ }
84
+ /** Stop receiving the given channels. */
85
+ unsubscribe(channels) {
86
+ for (const c of channels)
87
+ this.desired.channels.delete(c);
88
+ if (this.ws && this.ws.readyState === OPEN) {
89
+ this.ws.send(JSON.stringify({ type: "unsubscribe", channels }));
90
+ }
91
+ return this;
92
+ }
93
+ /** Open the connection (also called implicitly by subscribe). */
94
+ async connect() {
95
+ if (this.connecting || (this.ws && this.ws.readyState === OPEN))
96
+ return;
97
+ this.closedByUser = false;
98
+ this.connecting = true;
99
+ try {
100
+ const [WS, token] = await Promise.all([
101
+ resolveWebSocket(this.opts.WebSocketImpl),
102
+ this.opts.getToken(),
103
+ ]);
104
+ const url = `${token.ws_url}?token=${encodeURIComponent(token.token)}`;
105
+ const ws = new WS(url);
106
+ this.ws = ws;
107
+ ws.onopen = () => {
108
+ this.attempt = 0;
109
+ this.resetHeartbeat();
110
+ if (this.desired.channels.size > 0)
111
+ this.sendSubscribe();
112
+ this.emit("open", undefined);
113
+ };
114
+ ws.onmessage = (ev) => this.handleMessage(ev.data);
115
+ ws.onerror = (err) => this.emit("error", err instanceof Error ? err : new Error("WebSocket error"));
116
+ ws.onclose = (ev) => {
117
+ this.clearHeartbeat();
118
+ this.ws = null;
119
+ this.emit("close", { code: ev?.code, reason: ev?.reason });
120
+ if (!this.closedByUser && this.opts.autoReconnect)
121
+ this.scheduleReconnect();
122
+ };
123
+ }
124
+ catch (err) {
125
+ this.emit("error", err);
126
+ if (!this.closedByUser && this.opts.autoReconnect)
127
+ this.scheduleReconnect();
128
+ }
129
+ finally {
130
+ this.connecting = false;
131
+ }
132
+ }
133
+ /** Close the connection and stop reconnecting. */
134
+ close() {
135
+ this.closedByUser = true;
136
+ if (this.reconnectTimer) {
137
+ clearTimeout(this.reconnectTimer);
138
+ this.reconnectTimer = null;
139
+ }
140
+ this.clearHeartbeat();
141
+ try {
142
+ this.ws?.close(1000, "client closed");
143
+ }
144
+ catch { /* ignore */ }
145
+ this.ws = null;
146
+ }
147
+ sendSubscribe() {
148
+ const channels = Array.from(this.desired.channels);
149
+ if (channels.length === 0)
150
+ return;
151
+ const msg = { type: "subscribe", channels };
152
+ if (Object.keys(this.desired.filters).length > 0)
153
+ msg.filters = this.desired.filters;
154
+ this.ws?.send(JSON.stringify(msg));
155
+ }
156
+ handleMessage(raw) {
157
+ let msg;
158
+ try {
159
+ const text = typeof raw === "string" ? raw : String(raw);
160
+ msg = JSON.parse(text);
161
+ }
162
+ catch {
163
+ this.emit("error", new Error("Failed to parse stream message"));
164
+ return;
165
+ }
166
+ if (msg.type === "heartbeat") {
167
+ this.resetHeartbeat();
168
+ this.emit("heartbeat", msg.ts);
169
+ return;
170
+ }
171
+ if (msg.type === "connected") {
172
+ return;
173
+ }
174
+ if (msg.type === "subscribed") {
175
+ this.emit("subscribed", msg.channels);
176
+ return;
177
+ }
178
+ if (msg.channel && msg.event) {
179
+ const evt = msg;
180
+ this.emit(evt.event, evt.data, evt);
181
+ this.emit("*", evt.data, evt);
182
+ }
183
+ }
184
+ scheduleReconnect() {
185
+ if (this.reconnectTimer)
186
+ return;
187
+ const base = Math.min(1000 * 2 ** this.attempt, this.opts.maxBackoffMs);
188
+ const delay = base / 2 + Math.floor((base / 2) * Math.random());
189
+ this.attempt++;
190
+ this.emit("reconnect", { attempt: this.attempt, delayMs: delay });
191
+ this.reconnectTimer = setTimeout(() => {
192
+ this.reconnectTimer = null;
193
+ void this.connect();
194
+ }, delay);
195
+ }
196
+ resetHeartbeat() {
197
+ this.clearHeartbeat();
198
+ this.hbTimer = setTimeout(() => {
199
+ try {
200
+ this.ws?.close(4000, "heartbeat timeout");
201
+ }
202
+ catch { /* ignore */ }
203
+ }, this.opts.heartbeatTimeoutMs);
204
+ }
205
+ clearHeartbeat() {
206
+ if (this.hbTimer) {
207
+ clearTimeout(this.hbTimer);
208
+ this.hbTimer = null;
209
+ }
210
+ }
211
+ }
212
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,70 +1,70 @@
1
- {
2
- "name": "madeonsol",
3
- "version": "2.8.0",
4
- "description": "Official SDK for the MadeOnSol Solana API — KOL wallet tracking, Pump.fun deployer intelligence, and tool directory",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "default": "./dist/index.js"
12
- }
13
- },
14
- "files": [
15
- "dist",
16
- "llms.txt"
17
- ],
18
- "scripts": {
19
- "build": "tsc",
20
- "preflight": "bash ./scripts/preflight-publish.sh",
21
- "prepublishOnly": "npm run preflight && npm run build"
22
- },
23
- "keywords": [
24
- "solana",
25
- "api",
26
- "sdk",
27
- "kol",
28
- "kol-tracker",
29
- "trading",
30
- "pump.fun",
31
- "pumpfun",
32
- "pumpfun-sniper",
33
- "deployer",
34
- "deployer-hunter",
35
- "wallet-tracking",
36
- "defi",
37
- "web3",
38
- "blockchain",
39
- "solana-tools",
40
- "token",
41
- "madeonsol",
42
- "bonding-curve",
43
- "smart-money",
44
- "memecoin",
45
- "memecoin-tracker",
46
- "alpha",
47
- "alpha-bot",
48
- "copy-trading",
49
- "copy-trade",
50
- "solana-trading-bot",
51
- "trade-stream",
52
- "dex"
53
- ],
54
- "license": "MIT",
55
- "repository": {
56
- "type": "git",
57
- "url": "https://github.com/LamboPoewert/madeonsol-sdk.git"
58
- },
59
- "homepage": "https://madeonsol.com/solana-api",
60
- "bugs": {
61
- "url": "https://github.com/LamboPoewert/madeonsol-sdk/issues"
62
- },
63
- "engines": {
64
- "node": ">=18"
65
- },
66
- "devDependencies": {
67
- "typescript": "^5.4.0"
68
- },
69
- "funding": "https://madeonsol.com"
70
- }
1
+ {
2
+ "name": "madeonsol",
3
+ "version": "2.10.0",
4
+ "description": "Official SDK for the MadeOnSol Solana API — KOL wallet tracking, Pump.fun deployer intelligence, and tool directory",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "llms.txt"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "preflight": "bash ./scripts/preflight-publish.sh",
21
+ "prepublishOnly": "npm run preflight && npm run build"
22
+ },
23
+ "keywords": [
24
+ "solana",
25
+ "api",
26
+ "sdk",
27
+ "kol",
28
+ "kol-tracker",
29
+ "trading",
30
+ "pump.fun",
31
+ "pumpfun",
32
+ "pumpfun-sniper",
33
+ "deployer",
34
+ "deployer-hunter",
35
+ "wallet-tracking",
36
+ "defi",
37
+ "web3",
38
+ "blockchain",
39
+ "solana-tools",
40
+ "token",
41
+ "madeonsol",
42
+ "bonding-curve",
43
+ "smart-money",
44
+ "memecoin",
45
+ "memecoin-tracker",
46
+ "alpha",
47
+ "alpha-bot",
48
+ "copy-trading",
49
+ "copy-trade",
50
+ "solana-trading-bot",
51
+ "trade-stream",
52
+ "dex"
53
+ ],
54
+ "license": "MIT",
55
+ "repository": {
56
+ "type": "git",
57
+ "url": "https://github.com/LamboPoewert/madeonsol-sdk.git"
58
+ },
59
+ "homepage": "https://madeonsol.com/solana-api",
60
+ "bugs": {
61
+ "url": "https://github.com/LamboPoewert/madeonsol-sdk/issues"
62
+ },
63
+ "engines": {
64
+ "node": ">=18"
65
+ },
66
+ "devDependencies": {
67
+ "typescript": "^5.4.0"
68
+ },
69
+ "funding": "https://madeonsol.com"
70
+ }