yukimu 1.3.0 → 2.0.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/BitrateOptimizer.d.ts +52 -0
- package/dist/BitrateOptimizer.d.ts.map +1 -0
- package/dist/BitrateOptimizer.js +115 -0
- package/dist/BitrateOptimizer.js.map +1 -0
- package/dist/ConnectionPool.d.ts +52 -3
- package/dist/ConnectionPool.d.ts.map +1 -1
- package/dist/ConnectionPool.js +124 -32
- package/dist/ConnectionPool.js.map +1 -1
- package/dist/Constants.d.ts +27 -2
- package/dist/Constants.d.ts.map +1 -1
- package/dist/Constants.js +133 -11
- package/dist/Constants.js.map +1 -1
- package/dist/Logger.d.ts +22 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +74 -0
- package/dist/Logger.js.map +1 -0
- package/dist/Node.d.ts +17 -4
- package/dist/Node.d.ts.map +1 -1
- package/dist/Node.js +226 -88
- package/dist/Node.js.map +1 -1
- package/dist/Player.d.ts +74 -7
- package/dist/Player.d.ts.map +1 -1
- package/dist/Player.js +317 -92
- package/dist/Player.js.map +1 -1
- package/dist/Plugin.d.ts +19 -1
- package/dist/Plugin.d.ts.map +1 -1
- package/dist/Plugin.js +8 -0
- package/dist/Plugin.js.map +1 -1
- package/dist/Queue.d.ts +69 -2
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +138 -17
- package/dist/Queue.js.map +1 -1
- package/dist/Resolver.d.ts +33 -2
- package/dist/Resolver.d.ts.map +1 -1
- package/dist/Resolver.js +225 -33
- package/dist/Resolver.js.map +1 -1
- package/dist/Rest.d.ts +27 -4
- package/dist/Rest.d.ts.map +1 -1
- package/dist/Rest.js +157 -25
- package/dist/Rest.js.map +1 -1
- package/dist/TrackCache.d.ts +30 -5
- package/dist/TrackCache.d.ts.map +1 -1
- package/dist/TrackCache.js +119 -15
- package/dist/TrackCache.js.map +1 -1
- package/dist/WsQueue.d.ts +31 -1
- package/dist/WsQueue.d.ts.map +1 -1
- package/dist/WsQueue.js +70 -12
- package/dist/WsQueue.js.map +1 -1
- package/dist/Yukimu.d.ts +38 -5
- package/dist/Yukimu.d.ts.map +1 -1
- package/dist/Yukimu.js +150 -57
- package/dist/Yukimu.js.map +1 -1
- package/dist/connector/Connector.d.ts +26 -0
- package/dist/connector/Connector.d.ts.map +1 -1
- package/dist/connector/Connector.js +28 -0
- package/dist/connector/Connector.js.map +1 -1
- package/dist/connector/DiscordJS.d.ts +20 -1
- package/dist/connector/DiscordJS.d.ts.map +1 -1
- package/dist/connector/DiscordJS.js +44 -2
- package/dist/connector/DiscordJS.js.map +1 -1
- package/dist/connector/Eris.d.ts +12 -1
- package/dist/connector/Eris.d.ts.map +1 -1
- package/dist/connector/Eris.js +40 -6
- package/dist/connector/Eris.js.map +1 -1
- package/dist/connector/Oceanic.d.ts +12 -1
- package/dist/connector/Oceanic.d.ts.map +1 -1
- package/dist/connector/Oceanic.js +39 -4
- package/dist/connector/Oceanic.js.map +1 -1
- package/dist/errors/YukimuError.d.ts +40 -4
- package/dist/errors/YukimuError.d.ts.map +1 -1
- package/dist/errors/YukimuError.js +79 -8
- package/dist/errors/YukimuError.js.map +1 -1
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -16
- package/dist/index.js.map +1 -1
- package/dist/plugins/AutoResume.d.ts +18 -1
- package/dist/plugins/AutoResume.d.ts.map +1 -1
- package/dist/plugins/AutoResume.js +109 -21
- package/dist/plugins/AutoResume.js.map +1 -1
- package/dist/plugins/AutoplayPlugin.d.ts +35 -0
- package/dist/plugins/AutoplayPlugin.d.ts.map +1 -0
- package/dist/plugins/AutoplayPlugin.js +111 -0
- package/dist/plugins/AutoplayPlugin.js.map +1 -0
- package/dist/plugins/InactivityPlugin.d.ts +30 -0
- package/dist/plugins/InactivityPlugin.d.ts.map +1 -0
- package/dist/plugins/InactivityPlugin.js +86 -0
- package/dist/plugins/InactivityPlugin.js.map +1 -0
- package/dist/plugins/PlayerMoved.d.ts +23 -1
- package/dist/plugins/PlayerMoved.d.ts.map +1 -1
- package/dist/plugins/PlayerMoved.js +57 -12
- package/dist/plugins/PlayerMoved.js.map +1 -1
- package/dist/types.d.ts +198 -71
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +49 -5
- package/.cache/replit/env/latest +0 -88
- package/.cache/replit/env/latest.json +0 -1
- package/.cache/replit/modules/nodejs-20.res +0 -1
- package/.cache/replit/modules/python-3.11.res +0 -1
- package/.cache/replit/modules/replit.res +0 -1
- package/.cache/replit/modules.stamp +0 -0
- package/.cache/replit/nix/dotreplitenv.json +0 -1
- package/.cache/replit/toolchain.json +0 -1
- package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.packager.installForAll.0 +0 -9
- package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.shell.exec.1 +0 -1
- package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.packager.installForAll.0 +0 -1
- package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.shell.exec.1 +0 -1
- package/.local/state/workflow-logs/U0AinJQVHonnwGjj0RXLn/configure_your_app.packager.installForAll.0 +0 -2
- package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.packager.installForAll.0 +0 -1
- package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.shell.exec.1 +0 -1
- package/.replit +0 -7
- package/.upm/store.json +0 -1
- package/src/ConnectionPool.ts +0 -114
- package/src/Constants.ts +0 -45
- package/src/Node.ts +0 -302
- package/src/Player.ts +0 -332
- package/src/Plugin.ts +0 -7
- package/src/Queue.ts +0 -66
- package/src/Resolver.ts +0 -90
- package/src/Rest.ts +0 -127
- package/src/TrackCache.ts +0 -46
- package/src/WsQueue.ts +0 -58
- package/src/Yukimu.ts +0 -213
- package/src/connector/Connector.ts +0 -13
- package/src/connector/DiscordJS.ts +0 -26
- package/src/connector/Eris.ts +0 -24
- package/src/connector/Oceanic.ts +0 -22
- package/src/errors/YukimuError.ts +0 -31
- package/src/index.ts +0 -24
- package/src/plugins/AutoResume.ts +0 -37
- package/src/plugins/PlayerMoved.ts +0 -26
- package/src/types.ts +0 -145
- package/tsconfig.json +0 -22
package/dist/Resolver.js
CHANGED
|
@@ -1,97 +1,289 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/** Yukimu v2.0.0 — Track Resolver with Retry, Caching & Fallback */
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.Resolver = void 0;
|
|
4
5
|
const Constants_1 = require("./Constants");
|
|
6
|
+
/**
|
|
7
|
+
* Resolves search queries and URLs into playable tracks.
|
|
8
|
+
*
|
|
9
|
+
* Improvements from v1:
|
|
10
|
+
* - Accepts optional `node` parameter (loads on the correct node for a player)
|
|
11
|
+
* - Search retry with fallback sources
|
|
12
|
+
* - Search result caching
|
|
13
|
+
* - Spotify playlist/album resolution
|
|
14
|
+
* - Spotify token refresh with retry and timeout
|
|
15
|
+
* - Rate limit handling for Spotify API
|
|
16
|
+
*/
|
|
5
17
|
class Resolver {
|
|
18
|
+
manager;
|
|
19
|
+
spotifyToken = null;
|
|
20
|
+
spotifyExpiry = 0;
|
|
21
|
+
spotifyRefreshing = false;
|
|
6
22
|
constructor(manager) {
|
|
7
|
-
this.spotifyToken = null;
|
|
8
|
-
this.spotifyExpiry = 0;
|
|
9
23
|
this.manager = manager;
|
|
10
24
|
}
|
|
11
|
-
|
|
12
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a query (URL or search term) into tracks.
|
|
27
|
+
*
|
|
28
|
+
* @param query - A URL or search query string
|
|
29
|
+
* @param source - The search source to use (ignored for URLs)
|
|
30
|
+
* @param requester - Optional requester metadata to attach to tracks
|
|
31
|
+
* @param node - Optional specific node to use for loading
|
|
32
|
+
*/
|
|
33
|
+
async resolve(query, source, requester, node) {
|
|
34
|
+
const targetNode = node ?? this.getLoadNode();
|
|
13
35
|
const isUrl = /^https?:\/\//.test(query);
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
36
|
+
const prefix = Constants_1.SOURCE_PREFIXES[source];
|
|
37
|
+
const identifier = isUrl ? query : `${prefix ?? "ytsearch"}:${query}`;
|
|
38
|
+
// Check search cache first
|
|
39
|
+
const cached = this.manager.trackCache.getSearch(identifier);
|
|
40
|
+
if (cached) {
|
|
41
|
+
this.manager.logger.debug(`Search cache hit for: ${identifier.slice(0, 80)}`);
|
|
42
|
+
// Clone and attach requester
|
|
43
|
+
const result = { ...cached, tracks: [...cached.tracks] };
|
|
44
|
+
if (requester)
|
|
45
|
+
this.attachRequester(result.tracks, requester);
|
|
46
|
+
return result;
|
|
18
47
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
48
|
+
// Try loading tracks with retry
|
|
49
|
+
let result = null;
|
|
50
|
+
let lastError = null;
|
|
51
|
+
for (let attempt = 0; attempt <= Constants_1.DEFAULTS.MAX_SEARCH_RETRIES; attempt++) {
|
|
52
|
+
try {
|
|
53
|
+
result = await targetNode.loadTracks(identifier);
|
|
54
|
+
if (result && result.loadType !== "error")
|
|
55
|
+
break;
|
|
56
|
+
lastError = result?.exception;
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
lastError = err;
|
|
60
|
+
this.manager.logger.debug(`loadTracks attempt ${attempt + 1} failed for "${identifier.slice(0, 80)}": ${err}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!result) {
|
|
64
|
+
this.manager.logger.warn(`All loadTracks attempts failed for: ${identifier.slice(0, 80)}`);
|
|
65
|
+
return { loadType: "error", tracks: [], exception: { severity: "common", cause: String(lastError), message: String(lastError) } };
|
|
22
66
|
}
|
|
23
|
-
if (!result)
|
|
24
|
-
return { loadType: "empty", tracks: [] };
|
|
25
67
|
if (!result.tracks)
|
|
26
68
|
result.tracks = [];
|
|
27
|
-
// Attach requester
|
|
69
|
+
// Attach requester
|
|
28
70
|
if (requester && result.tracks.length > 0) {
|
|
29
|
-
result.tracks
|
|
71
|
+
this.attachRequester(result.tracks, requester);
|
|
30
72
|
}
|
|
31
|
-
// Spotify fallback — if LavaSrc not installed
|
|
73
|
+
// Spotify fallback — if LavaSrc is not installed, try to resolve via metadata
|
|
32
74
|
if ((result.loadType === "error" || result.loadType === "empty") && isUrl) {
|
|
33
|
-
const
|
|
34
|
-
if (
|
|
35
|
-
|
|
36
|
-
if (meta)
|
|
37
|
-
return this.resolve(`${meta.title} ${meta.artist}`, "youtube", requester);
|
|
38
|
-
}
|
|
75
|
+
const spotifyFallback = await this.trySpotifyFallback(query, source, requester);
|
|
76
|
+
if (spotifyFallback)
|
|
77
|
+
return spotifyFallback;
|
|
39
78
|
}
|
|
40
|
-
// Cache
|
|
79
|
+
// Cache successful results
|
|
41
80
|
if (result.tracks.length > 0) {
|
|
81
|
+
this.manager.trackCache.setSearch(identifier, result);
|
|
82
|
+
// Also cache individual tracks
|
|
42
83
|
for (const track of result.tracks) {
|
|
43
|
-
if (track?.encoded)
|
|
84
|
+
if (track?.encoded) {
|
|
44
85
|
this.manager.trackCache.set(track.encoded, track);
|
|
86
|
+
}
|
|
45
87
|
}
|
|
46
88
|
}
|
|
47
89
|
return result;
|
|
48
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Detect the source platform from a URL.
|
|
93
|
+
*/
|
|
49
94
|
detectSource(url) {
|
|
50
95
|
for (const [source, patterns] of Object.entries(Constants_1.URL_PATTERNS)) {
|
|
51
|
-
if (patterns.some(p => p.test(url)))
|
|
96
|
+
if (patterns.some((p) => p.test(url)))
|
|
52
97
|
return source;
|
|
53
98
|
}
|
|
54
99
|
return null;
|
|
55
100
|
}
|
|
101
|
+
// ─── Spotify Fallback ─────────────────────────────────────────────────
|
|
102
|
+
async trySpotifyFallback(query, _source, requester) {
|
|
103
|
+
// Single track
|
|
104
|
+
const trackMatch = query.match(/spotify\.com\/track\/([a-zA-Z0-9]+)/);
|
|
105
|
+
if (trackMatch?.[1]) {
|
|
106
|
+
const meta = await this.resolveSpotifyMeta(trackMatch[1]);
|
|
107
|
+
if (meta) {
|
|
108
|
+
return this.resolve(`${meta.title} ${meta.artist}`, "youtube", requester);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Playlist
|
|
112
|
+
const playlistMatch = query.match(/spotify\.com\/playlist\/([a-zA-Z0-9]+)/);
|
|
113
|
+
if (playlistMatch?.[1]) {
|
|
114
|
+
const tracks = await this.resolveSpotifyPlaylist(playlistMatch[1]);
|
|
115
|
+
if (tracks.length > 0) {
|
|
116
|
+
// Resolve first 50 tracks via YouTube search
|
|
117
|
+
const resolved = [];
|
|
118
|
+
for (const meta of tracks.slice(0, 50)) {
|
|
119
|
+
try {
|
|
120
|
+
const result = await this.resolve(`${meta.title} ${meta.artist}`, "youtube", requester);
|
|
121
|
+
if (result.tracks[0])
|
|
122
|
+
resolved.push(result.tracks[0]);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Skip failed tracks
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (resolved.length > 0) {
|
|
129
|
+
return { loadType: "playlist", tracks: resolved, playlistInfo: { name: "Spotify Playlist", selectedTrack: 0 } };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Album
|
|
134
|
+
const albumMatch = query.match(/spotify\.com\/album\/([a-zA-Z0-9]+)/);
|
|
135
|
+
if (albumMatch?.[1]) {
|
|
136
|
+
const tracks = await this.resolveSpotifyAlbum(albumMatch[1]);
|
|
137
|
+
if (tracks.length > 0) {
|
|
138
|
+
const resolved = [];
|
|
139
|
+
for (const meta of tracks.slice(0, 50)) {
|
|
140
|
+
try {
|
|
141
|
+
const result = await this.resolve(`${meta.title} ${meta.artist}`, "youtube", requester);
|
|
142
|
+
if (result.tracks[0])
|
|
143
|
+
resolved.push(result.tracks[0]);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Skip failed tracks
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (resolved.length > 0) {
|
|
150
|
+
return { loadType: "playlist", tracks: resolved, playlistInfo: { name: "Spotify Album", selectedTrack: 0 } };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
// ─── Spotify API ──────────────────────────────────────────────────────
|
|
56
157
|
async getSpotifyToken() {
|
|
57
158
|
const opts = this.manager.options.spotify;
|
|
58
159
|
if (!opts)
|
|
59
160
|
return null;
|
|
60
|
-
|
|
161
|
+
// Return cached token if still valid
|
|
162
|
+
if (this.spotifyToken && Date.now() < this.spotifyExpiry) {
|
|
61
163
|
return this.spotifyToken;
|
|
164
|
+
}
|
|
165
|
+
// Prevent concurrent refresh
|
|
166
|
+
if (this.spotifyRefreshing) {
|
|
167
|
+
await this.sleep(1000);
|
|
168
|
+
return this.spotifyToken;
|
|
169
|
+
}
|
|
170
|
+
this.spotifyRefreshing = true;
|
|
62
171
|
try {
|
|
63
|
-
const
|
|
172
|
+
const controller = new AbortController();
|
|
173
|
+
const timeout = setTimeout(() => controller.abort(), 10_000);
|
|
174
|
+
const res = await fetch("https://accounts.spotify.com/api/token", {
|
|
64
175
|
method: "POST",
|
|
65
176
|
headers: {
|
|
66
177
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
67
178
|
Authorization: `Basic ${Buffer.from(`${opts.clientId}:${opts.clientSecret}`).toString("base64")}`,
|
|
68
179
|
},
|
|
69
180
|
body: "grant_type=client_credentials",
|
|
181
|
+
signal: controller.signal,
|
|
70
182
|
});
|
|
71
|
-
|
|
183
|
+
clearTimeout(timeout);
|
|
184
|
+
if (!res.ok) {
|
|
185
|
+
this.manager.logger.warn(`Spotify token request failed: ${res.status}`);
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
const data = (await res.json());
|
|
72
189
|
this.spotifyToken = data.access_token;
|
|
73
|
-
this.spotifyExpiry = Date.now() + data.expires_in * 1000 -
|
|
190
|
+
this.spotifyExpiry = Date.now() + data.expires_in * 1000 - Constants_1.DEFAULTS.SPOTIFY_TOKEN_REFRESH_BUFFER;
|
|
74
191
|
return this.spotifyToken;
|
|
75
192
|
}
|
|
76
|
-
catch {
|
|
193
|
+
catch (err) {
|
|
194
|
+
this.manager.logger.warn(`Spotify token refresh failed: ${err}`);
|
|
77
195
|
return null;
|
|
78
196
|
}
|
|
197
|
+
finally {
|
|
198
|
+
this.spotifyRefreshing = false;
|
|
199
|
+
}
|
|
79
200
|
}
|
|
80
201
|
async resolveSpotifyMeta(trackId) {
|
|
81
202
|
const token = await this.getSpotifyToken();
|
|
82
203
|
if (!token)
|
|
83
204
|
return null;
|
|
84
205
|
try {
|
|
85
|
-
const
|
|
206
|
+
const controller = new AbortController();
|
|
207
|
+
const timeout = setTimeout(() => controller.abort(), 10_000);
|
|
208
|
+
const res = await fetch(`https://api.spotify.com/v1/tracks/${encodeURIComponent(trackId)}`, {
|
|
86
209
|
headers: { Authorization: `Bearer ${token}` },
|
|
210
|
+
signal: controller.signal,
|
|
87
211
|
});
|
|
88
|
-
|
|
89
|
-
|
|
212
|
+
clearTimeout(timeout);
|
|
213
|
+
if (!res.ok)
|
|
214
|
+
return null;
|
|
215
|
+
const data = (await res.json());
|
|
216
|
+
return {
|
|
217
|
+
title: data.name,
|
|
218
|
+
artist: data.artists?.[0]?.name ?? "Unknown",
|
|
219
|
+
};
|
|
90
220
|
}
|
|
91
221
|
catch {
|
|
92
222
|
return null;
|
|
93
223
|
}
|
|
94
224
|
}
|
|
225
|
+
async resolveSpotifyPlaylist(playlistId) {
|
|
226
|
+
const token = await this.getSpotifyToken();
|
|
227
|
+
if (!token)
|
|
228
|
+
return [];
|
|
229
|
+
try {
|
|
230
|
+
const controller = new AbortController();
|
|
231
|
+
const timeout = setTimeout(() => controller.abort(), 15_000);
|
|
232
|
+
const res = await fetch(`https://api.spotify.com/v1/playlists/${encodeURIComponent(playlistId)}/tracks?limit=50`, {
|
|
233
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
234
|
+
signal: controller.signal,
|
|
235
|
+
});
|
|
236
|
+
clearTimeout(timeout);
|
|
237
|
+
if (!res.ok)
|
|
238
|
+
return [];
|
|
239
|
+
const data = (await res.json());
|
|
240
|
+
return data.items
|
|
241
|
+
.filter((item) => item.track)
|
|
242
|
+
.map((item) => ({
|
|
243
|
+
title: item.track.name,
|
|
244
|
+
artist: item.track.artists?.[0]?.name ?? "Unknown",
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
return [];
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async resolveSpotifyAlbum(albumId) {
|
|
252
|
+
const token = await this.getSpotifyToken();
|
|
253
|
+
if (!token)
|
|
254
|
+
return [];
|
|
255
|
+
try {
|
|
256
|
+
const controller = new AbortController();
|
|
257
|
+
const timeout = setTimeout(() => controller.abort(), 15_000);
|
|
258
|
+
const res = await fetch(`https://api.spotify.com/v1/albums/${encodeURIComponent(albumId)}/tracks?limit=50`, {
|
|
259
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
260
|
+
signal: controller.signal,
|
|
261
|
+
});
|
|
262
|
+
clearTimeout(timeout);
|
|
263
|
+
if (!res.ok)
|
|
264
|
+
return [];
|
|
265
|
+
const data = (await res.json());
|
|
266
|
+
return data.items.map((item) => ({
|
|
267
|
+
title: item.name,
|
|
268
|
+
artist: item.artists?.[0]?.name ?? "Unknown",
|
|
269
|
+
}));
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return [];
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// ─── Helpers ──────────────────────────────────────────────────────────
|
|
276
|
+
getLoadNode() {
|
|
277
|
+
return this.manager.getBestNode();
|
|
278
|
+
}
|
|
279
|
+
attachRequester(tracks, requester) {
|
|
280
|
+
for (const t of tracks) {
|
|
281
|
+
t["requester"] = requester;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
sleep(ms) {
|
|
285
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
286
|
+
}
|
|
95
287
|
}
|
|
96
288
|
exports.Resolver = Resolver;
|
|
97
289
|
//# sourceMappingURL=Resolver.js.map
|
package/dist/Resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/Rest.d.ts
CHANGED
|
@@ -1,23 +1,46 @@
|
|
|
1
|
+
/** Yukimu v2.0.0 — REST Client with Retry, Rate Limiting & Circuit Breaker */
|
|
1
2
|
import type { Node } from "./Node";
|
|
2
3
|
import type { SearchResult, Track, NodeStats, NodeInfo } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* REST client for communicating with a Lavalink node's HTTP API.
|
|
6
|
+
*
|
|
7
|
+
* Improvements from v1:
|
|
8
|
+
* - Automatic retry with exponential backoff for 429/5xx errors
|
|
9
|
+
* - Rate limit tracking (respects Retry-After headers)
|
|
10
|
+
* - Request timeout with proper AbortController cleanup
|
|
11
|
+
* - Uses VERSION constant for Client-Name header
|
|
12
|
+
* - Fixed v4.2+ data normalization bug (single track vs array)
|
|
13
|
+
* - Per-path rate limit awareness
|
|
14
|
+
* - Circuit breaker: after N consecutive failures, stop sending requests temporarily
|
|
15
|
+
*/
|
|
3
16
|
export declare class Rest {
|
|
4
|
-
private node;
|
|
17
|
+
private readonly node;
|
|
18
|
+
private rateLimit;
|
|
19
|
+
private consecutiveFailures;
|
|
20
|
+
private circuitOpenUntil;
|
|
21
|
+
private static readonly MAX_CONSECUTIVE_FAILURES;
|
|
22
|
+
private static readonly CIRCUIT_OPEN_DURATION;
|
|
5
23
|
constructor(node: Node);
|
|
6
24
|
get baseUrl(): string;
|
|
7
25
|
get prefix(): string;
|
|
8
26
|
get headers(): Record<string, string>;
|
|
9
|
-
request<T =
|
|
27
|
+
request<T = unknown>(method: string, path: string, body?: unknown, retries?: number): Promise<T>;
|
|
10
28
|
loadTracks(identifier: string): Promise<SearchResult>;
|
|
11
29
|
decodeTrack(encoded: string): Promise<Track>;
|
|
12
30
|
decodeTracks(encoded: string[]): Promise<Track[]>;
|
|
13
31
|
getInfo(): Promise<NodeInfo>;
|
|
14
32
|
getStats(): Promise<NodeStats>;
|
|
15
|
-
updatePlayer(guildId: string, body:
|
|
33
|
+
updatePlayer(guildId: string, body: unknown, noReplace?: boolean): Promise<unknown>;
|
|
16
34
|
destroyPlayer(guildId: string): Promise<void>;
|
|
17
35
|
updateSession(body: {
|
|
18
36
|
resuming?: boolean;
|
|
19
37
|
timeout?: number;
|
|
20
|
-
}): Promise<
|
|
38
|
+
}): Promise<unknown>;
|
|
39
|
+
private normalizeV4;
|
|
21
40
|
private normalizeV3;
|
|
41
|
+
private updateRateLimit;
|
|
42
|
+
private parseRetryAfter;
|
|
43
|
+
private getRetryDelay;
|
|
44
|
+
private sleep;
|
|
22
45
|
}
|
|
23
46
|
//# sourceMappingURL=Rest.d.ts.map
|
package/dist/Rest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rest.d.ts","sourceRoot":"","sources":["../src/Rest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Rest.d.ts","sourceRoot":"","sources":["../src/Rest.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAI9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAY,MAAM,SAAS,CAAC;AASlF;;;;;;;;;;;GAWG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAK;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAU;gBAE3C,IAAI,EAAE,IAAI;IAItB,IAAI,OAAO,IAAI,MAAM,CAGpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpC;IAIY,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,GAAE,MAAkC,GAC1C,OAAO,CAAC,CAAC,CAAC;IA4GA,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAUrD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5C,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIjD,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAI5B,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAI9B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjF,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,aAAa,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5F,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;IAyCnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,KAAK;CAGd"}
|