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.
Files changed (135) hide show
  1. package/dist/BitrateOptimizer.d.ts +52 -0
  2. package/dist/BitrateOptimizer.d.ts.map +1 -0
  3. package/dist/BitrateOptimizer.js +115 -0
  4. package/dist/BitrateOptimizer.js.map +1 -0
  5. package/dist/ConnectionPool.d.ts +52 -3
  6. package/dist/ConnectionPool.d.ts.map +1 -1
  7. package/dist/ConnectionPool.js +124 -32
  8. package/dist/ConnectionPool.js.map +1 -1
  9. package/dist/Constants.d.ts +27 -2
  10. package/dist/Constants.d.ts.map +1 -1
  11. package/dist/Constants.js +133 -11
  12. package/dist/Constants.js.map +1 -1
  13. package/dist/Logger.d.ts +22 -0
  14. package/dist/Logger.d.ts.map +1 -0
  15. package/dist/Logger.js +74 -0
  16. package/dist/Logger.js.map +1 -0
  17. package/dist/Node.d.ts +17 -4
  18. package/dist/Node.d.ts.map +1 -1
  19. package/dist/Node.js +226 -88
  20. package/dist/Node.js.map +1 -1
  21. package/dist/Player.d.ts +74 -7
  22. package/dist/Player.d.ts.map +1 -1
  23. package/dist/Player.js +317 -92
  24. package/dist/Player.js.map +1 -1
  25. package/dist/Plugin.d.ts +19 -1
  26. package/dist/Plugin.d.ts.map +1 -1
  27. package/dist/Plugin.js +8 -0
  28. package/dist/Plugin.js.map +1 -1
  29. package/dist/Queue.d.ts +69 -2
  30. package/dist/Queue.d.ts.map +1 -1
  31. package/dist/Queue.js +138 -17
  32. package/dist/Queue.js.map +1 -1
  33. package/dist/Resolver.d.ts +33 -2
  34. package/dist/Resolver.d.ts.map +1 -1
  35. package/dist/Resolver.js +225 -33
  36. package/dist/Resolver.js.map +1 -1
  37. package/dist/Rest.d.ts +27 -4
  38. package/dist/Rest.d.ts.map +1 -1
  39. package/dist/Rest.js +157 -25
  40. package/dist/Rest.js.map +1 -1
  41. package/dist/TrackCache.d.ts +30 -5
  42. package/dist/TrackCache.d.ts.map +1 -1
  43. package/dist/TrackCache.js +119 -15
  44. package/dist/TrackCache.js.map +1 -1
  45. package/dist/WsQueue.d.ts +31 -1
  46. package/dist/WsQueue.d.ts.map +1 -1
  47. package/dist/WsQueue.js +70 -12
  48. package/dist/WsQueue.js.map +1 -1
  49. package/dist/Yukimu.d.ts +38 -5
  50. package/dist/Yukimu.d.ts.map +1 -1
  51. package/dist/Yukimu.js +150 -57
  52. package/dist/Yukimu.js.map +1 -1
  53. package/dist/connector/Connector.d.ts +26 -0
  54. package/dist/connector/Connector.d.ts.map +1 -1
  55. package/dist/connector/Connector.js +28 -0
  56. package/dist/connector/Connector.js.map +1 -1
  57. package/dist/connector/DiscordJS.d.ts +20 -1
  58. package/dist/connector/DiscordJS.d.ts.map +1 -1
  59. package/dist/connector/DiscordJS.js +44 -2
  60. package/dist/connector/DiscordJS.js.map +1 -1
  61. package/dist/connector/Eris.d.ts +12 -1
  62. package/dist/connector/Eris.d.ts.map +1 -1
  63. package/dist/connector/Eris.js +40 -6
  64. package/dist/connector/Eris.js.map +1 -1
  65. package/dist/connector/Oceanic.d.ts +12 -1
  66. package/dist/connector/Oceanic.d.ts.map +1 -1
  67. package/dist/connector/Oceanic.js +39 -4
  68. package/dist/connector/Oceanic.js.map +1 -1
  69. package/dist/errors/YukimuError.d.ts +40 -4
  70. package/dist/errors/YukimuError.d.ts.map +1 -1
  71. package/dist/errors/YukimuError.js +79 -8
  72. package/dist/errors/YukimuError.js.map +1 -1
  73. package/dist/index.d.ts +13 -4
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +30 -16
  76. package/dist/index.js.map +1 -1
  77. package/dist/plugins/AutoResume.d.ts +18 -1
  78. package/dist/plugins/AutoResume.d.ts.map +1 -1
  79. package/dist/plugins/AutoResume.js +109 -21
  80. package/dist/plugins/AutoResume.js.map +1 -1
  81. package/dist/plugins/AutoplayPlugin.d.ts +35 -0
  82. package/dist/plugins/AutoplayPlugin.d.ts.map +1 -0
  83. package/dist/plugins/AutoplayPlugin.js +111 -0
  84. package/dist/plugins/AutoplayPlugin.js.map +1 -0
  85. package/dist/plugins/InactivityPlugin.d.ts +30 -0
  86. package/dist/plugins/InactivityPlugin.d.ts.map +1 -0
  87. package/dist/plugins/InactivityPlugin.js +86 -0
  88. package/dist/plugins/InactivityPlugin.js.map +1 -0
  89. package/dist/plugins/PlayerMoved.d.ts +23 -1
  90. package/dist/plugins/PlayerMoved.d.ts.map +1 -1
  91. package/dist/plugins/PlayerMoved.js +57 -12
  92. package/dist/plugins/PlayerMoved.js.map +1 -1
  93. package/dist/types.d.ts +198 -71
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/types.js +1 -0
  96. package/dist/types.js.map +1 -1
  97. package/package.json +49 -5
  98. package/.cache/replit/env/latest +0 -88
  99. package/.cache/replit/env/latest.json +0 -1
  100. package/.cache/replit/modules/nodejs-20.res +0 -1
  101. package/.cache/replit/modules/python-3.11.res +0 -1
  102. package/.cache/replit/modules/replit.res +0 -1
  103. package/.cache/replit/modules.stamp +0 -0
  104. package/.cache/replit/nix/dotreplitenv.json +0 -1
  105. package/.cache/replit/toolchain.json +0 -1
  106. package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.packager.installForAll.0 +0 -9
  107. package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.shell.exec.1 +0 -1
  108. package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.packager.installForAll.0 +0 -1
  109. package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.shell.exec.1 +0 -1
  110. package/.local/state/workflow-logs/U0AinJQVHonnwGjj0RXLn/configure_your_app.packager.installForAll.0 +0 -2
  111. package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.packager.installForAll.0 +0 -1
  112. package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.shell.exec.1 +0 -1
  113. package/.replit +0 -7
  114. package/.upm/store.json +0 -1
  115. package/src/ConnectionPool.ts +0 -114
  116. package/src/Constants.ts +0 -45
  117. package/src/Node.ts +0 -302
  118. package/src/Player.ts +0 -332
  119. package/src/Plugin.ts +0 -7
  120. package/src/Queue.ts +0 -66
  121. package/src/Resolver.ts +0 -90
  122. package/src/Rest.ts +0 -127
  123. package/src/TrackCache.ts +0 -46
  124. package/src/WsQueue.ts +0 -58
  125. package/src/Yukimu.ts +0 -213
  126. package/src/connector/Connector.ts +0 -13
  127. package/src/connector/DiscordJS.ts +0 -26
  128. package/src/connector/Eris.ts +0 -24
  129. package/src/connector/Oceanic.ts +0 -22
  130. package/src/errors/YukimuError.ts +0 -31
  131. package/src/index.ts +0 -24
  132. package/src/plugins/AutoResume.ts +0 -37
  133. package/src/plugins/PlayerMoved.ts +0 -26
  134. package/src/types.ts +0 -145
  135. 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
- async resolve(query, source, requester) {
12
- const node = this.manager.getBestNode();
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 identifier = isUrl ? query : `${Constants_1.SOURCE_PREFIXES[source] ?? "ytsearch"}:${query}`;
15
- let result;
16
- try {
17
- result = await node.loadTracks(identifier);
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
- catch (err) {
20
- console.error("[Resolver] loadTracks error:", err.message);
21
- return { loadType: "error", tracks: [] };
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 to all tracks
69
+ // Attach requester
28
70
  if (requester && result.tracks.length > 0) {
29
- result.tracks.forEach((t) => { t.requester = requester; });
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 spotifyMatch = query.match(/spotify\.com\/track\/([a-zA-Z0-9]+)/);
34
- if (spotifyMatch) {
35
- const meta = await this.resolveSpotifyMeta(spotifyMatch[1]);
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 tracks
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
- if (this.spotifyToken && Date.now() < this.spotifyExpiry)
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 res = await globalThis.fetch("https://accounts.spotify.com/api/token", {
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
- const data = await res.json();
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 - 5000;
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 res = await globalThis.fetch(`https://api.spotify.com/v1/tracks/${trackId}`, {
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
- const data = await res.json();
89
- return { title: data.name, artist: data.artists[0]?.name ?? "Unknown" };
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
@@ -1 +1 @@
1
- {"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"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"}
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 = any>(method: string, path: string, body?: any): Promise<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: any, noReplace?: boolean): Promise<any>;
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<any>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"Rest.d.ts","sourceRoot":"","sources":["../src/Rest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxE,qBAAa,IAAI;IACf,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,EAAE,IAAI;IAEtB,IAAI,OAAO,IAAI,MAAM,CAGpB;IAED,IAAI,MAAM,IAAI,MAAM,CAAiD;IAErE,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpC;IAEY,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAuCtE,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAMrD,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,GAAG,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAOzE,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,GAAG,CAAC;IAKxF,OAAO,CAAC,WAAW;CAkBpB"}
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"}