yukimu 2.0.0 → 2.0.8

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 (97) hide show
  1. package/package.json +1 -1
  2. package/dist/BitrateOptimizer.d.ts +0 -52
  3. package/dist/BitrateOptimizer.d.ts.map +0 -1
  4. package/dist/BitrateOptimizer.js +0 -115
  5. package/dist/BitrateOptimizer.js.map +0 -1
  6. package/dist/ConnectionPool.d.ts +0 -84
  7. package/dist/ConnectionPool.d.ts.map +0 -1
  8. package/dist/ConnectionPool.js +0 -203
  9. package/dist/ConnectionPool.js.map +0 -1
  10. package/dist/Constants.d.ts +0 -45
  11. package/dist/Constants.d.ts.map +0 -1
  12. package/dist/Constants.js +0 -168
  13. package/dist/Constants.js.map +0 -1
  14. package/dist/Logger.d.ts +0 -22
  15. package/dist/Logger.d.ts.map +0 -1
  16. package/dist/Logger.js +0 -74
  17. package/dist/Logger.js.map +0 -1
  18. package/dist/Node.d.ts +0 -61
  19. package/dist/Node.d.ts.map +0 -1
  20. package/dist/Node.js +0 -446
  21. package/dist/Node.js.map +0 -1
  22. package/dist/Player.d.ts +0 -135
  23. package/dist/Player.d.ts.map +0 -1
  24. package/dist/Player.js +0 -530
  25. package/dist/Player.js.map +0 -1
  26. package/dist/Plugin.d.ts +0 -25
  27. package/dist/Plugin.d.ts.map +0 -1
  28. package/dist/Plugin.js +0 -15
  29. package/dist/Plugin.js.map +0 -1
  30. package/dist/Queue.d.ts +0 -89
  31. package/dist/Queue.d.ts.map +0 -1
  32. package/dist/Queue.js +0 -188
  33. package/dist/Queue.js.map +0 -1
  34. package/dist/Resolver.d.ts +0 -44
  35. package/dist/Resolver.d.ts.map +0 -1
  36. package/dist/Resolver.js +0 -289
  37. package/dist/Resolver.js.map +0 -1
  38. package/dist/Rest.d.ts +0 -46
  39. package/dist/Rest.d.ts.map +0 -1
  40. package/dist/Rest.js +0 -246
  41. package/dist/Rest.js.map +0 -1
  42. package/dist/TrackCache.d.ts +0 -41
  43. package/dist/TrackCache.d.ts.map +0 -1
  44. package/dist/TrackCache.js +0 -144
  45. package/dist/TrackCache.js.map +0 -1
  46. package/dist/WsQueue.d.ts +0 -41
  47. package/dist/WsQueue.d.ts.map +0 -1
  48. package/dist/WsQueue.js +0 -116
  49. package/dist/WsQueue.js.map +0 -1
  50. package/dist/Yukimu.d.ts +0 -84
  51. package/dist/Yukimu.d.ts.map +0 -1
  52. package/dist/Yukimu.js +0 -290
  53. package/dist/Yukimu.js.map +0 -1
  54. package/dist/connector/Connector.d.ts +0 -34
  55. package/dist/connector/Connector.d.ts.map +0 -1
  56. package/dist/connector/Connector.js +0 -39
  57. package/dist/connector/Connector.js.map +0 -1
  58. package/dist/connector/DiscordJS.d.ts +0 -27
  59. package/dist/connector/DiscordJS.d.ts.map +0 -1
  60. package/dist/connector/DiscordJS.js +0 -69
  61. package/dist/connector/DiscordJS.js.map +0 -1
  62. package/dist/connector/Eris.d.ts +0 -19
  63. package/dist/connector/Eris.d.ts.map +0 -1
  64. package/dist/connector/Eris.js +0 -62
  65. package/dist/connector/Eris.js.map +0 -1
  66. package/dist/connector/Oceanic.d.ts +0 -19
  67. package/dist/connector/Oceanic.d.ts.map +0 -1
  68. package/dist/connector/Oceanic.js +0 -60
  69. package/dist/connector/Oceanic.js.map +0 -1
  70. package/dist/errors/YukimuError.d.ts +0 -51
  71. package/dist/errors/YukimuError.d.ts.map +0 -1
  72. package/dist/errors/YukimuError.js +0 -105
  73. package/dist/errors/YukimuError.js.map +0 -1
  74. package/dist/index.d.ts +0 -29
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -70
  77. package/dist/index.js.map +0 -1
  78. package/dist/plugins/AutoResume.d.ts +0 -25
  79. package/dist/plugins/AutoResume.d.ts.map +0 -1
  80. package/dist/plugins/AutoResume.js +0 -132
  81. package/dist/plugins/AutoResume.js.map +0 -1
  82. package/dist/plugins/AutoplayPlugin.d.ts +0 -35
  83. package/dist/plugins/AutoplayPlugin.d.ts.map +0 -1
  84. package/dist/plugins/AutoplayPlugin.js +0 -111
  85. package/dist/plugins/AutoplayPlugin.js.map +0 -1
  86. package/dist/plugins/InactivityPlugin.d.ts +0 -30
  87. package/dist/plugins/InactivityPlugin.d.ts.map +0 -1
  88. package/dist/plugins/InactivityPlugin.js +0 -86
  89. package/dist/plugins/InactivityPlugin.js.map +0 -1
  90. package/dist/plugins/PlayerMoved.d.ts +0 -29
  91. package/dist/plugins/PlayerMoved.d.ts.map +0 -1
  92. package/dist/plugins/PlayerMoved.js +0 -75
  93. package/dist/plugins/PlayerMoved.js.map +0 -1
  94. package/dist/types.d.ts +0 -309
  95. package/dist/types.d.ts.map +0 -1
  96. package/dist/types.js +0 -4
  97. package/dist/types.js.map +0 -1
package/dist/Queue.d.ts DELETED
@@ -1,89 +0,0 @@
1
- /** Yukimu v2.0.0 — Track Queue with Enhanced Operations */
2
- import type { Track } from "./types";
3
- /**
4
- * Manages the track queue for a player.
5
- *
6
- * Improvements from v1:
7
- * - Configurable previous history size
8
- * - New methods: reverse(), removeDuplicates(), swap(), insertAt()
9
- * - Serialization/deserialization for persistence
10
- * - Bounds checking with meaningful errors
11
- * - Proper readonly access
12
- */
13
- export declare class Queue {
14
- current: Track | null;
15
- previous: Track[];
16
- private tracks;
17
- private readonly maxPreviousSize;
18
- constructor(maxPreviousSize?: 25);
19
- /**
20
- * Add one or more tracks to the queue.
21
- * @param tracks - Track or array of tracks to add
22
- * @param position - Optional position to insert at (default: end of queue)
23
- */
24
- add(tracks: Track | Track[], position?: number): void;
25
- /**
26
- * Advance the queue: move current to previous, shift next track to current.
27
- * @returns The new current track, or null if the queue is empty
28
- */
29
- next(): Track | null;
30
- /**
31
- * Remove a track at a specific index.
32
- * @returns The removed track, or null if index is out of bounds
33
- */
34
- remove(index: number): Track | null;
35
- /**
36
- * Remove a range of tracks.
37
- * @param start - Start index (inclusive)
38
- * @param end - End index (exclusive)
39
- */
40
- removeRange(start: number, end: number): Track[];
41
- /** Clear the entire queue, current track, and history */
42
- clear(): void;
43
- /** Clear only the queue (keep current track and history) */
44
- clearQueue(): void;
45
- /** Shuffle the queue using Fisher-Yates algorithm */
46
- shuffle(): void;
47
- /** Move a track from one position to another */
48
- move(from: number, to: number): boolean;
49
- /** Swap two tracks in the queue */
50
- swap(i: number, j: number): boolean;
51
- /**
52
- * Skip to a specific index in the queue, removing everything before it.
53
- * @returns The track at the given index, or null if out of bounds
54
- */
55
- skipto(index: number): Track | null;
56
- /** Reverse the queue order */
57
- reverse(): void;
58
- /**
59
- * Remove duplicate tracks based on their encoded data.
60
- * Keeps the first occurrence.
61
- */
62
- removeDuplicates(): number;
63
- /** Peek at the next N tracks without modifying the queue */
64
- peek(count?: number): Track[];
65
- /** Find the first track matching a predicate */
66
- find(predicate: (track: Track) => boolean): Track | undefined;
67
- /** Filter tracks by a predicate */
68
- filter(predicate: (track: Track) => boolean): Track[];
69
- /** Get the index of a track by its encoded data */
70
- indexOf(encoded: string): number;
71
- /** Serialize the queue state for persistence */
72
- toJSON(): {
73
- current: Track | null;
74
- tracks: Track[];
75
- previous: Track[];
76
- };
77
- /** Restore queue state from serialized data */
78
- fromJSON(data: {
79
- current?: Track | null;
80
- tracks?: Track[];
81
- previous?: Track[];
82
- }): void;
83
- get size(): number;
84
- get isEmpty(): boolean;
85
- get totalDuration(): number;
86
- /** Readonly access to the underlying track array */
87
- get list(): readonly Track[];
88
- }
89
- //# sourceMappingURL=Queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAG3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC;;;;;;;;;GASG;AACH,qBAAa,KAAK;IACT,OAAO,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC7B,QAAQ,EAAE,KAAK,EAAE,CAAM;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,eAAe,KAAiC;IAI5D;;;;OAIG;IACI,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAW5D;;;OAGG;IACI,IAAI,IAAI,KAAK,GAAG,IAAI;IAW3B;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAM1C;;;;OAIG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE;IAOvD,yDAAyD;IAClD,KAAK,IAAI,IAAI;IAMpB,4DAA4D;IACrD,UAAU,IAAI,IAAI;IAIzB,qDAAqD;IAC9C,OAAO,IAAI,IAAI;IAOtB,gDAAgD;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ9C,mCAAmC;IAC5B,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAM1C;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAM1C,8BAA8B;IACvB,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACI,gBAAgB,IAAI,MAAM;IAWjC,4DAA4D;IACrD,IAAI,CAAC,KAAK,SAAK,GAAG,KAAK,EAAE;IAIhC,gDAAgD;IACzC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,SAAS;IAIpE,mCAAmC;IAC5B,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,EAAE;IAI5D,mDAAmD;IAC5C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMvC,gDAAgD;IACzC,MAAM,IAAI;QACf,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,QAAQ,EAAE,KAAK,EAAE,CAAC;KACnB;IAQD,+CAA+C;IACxC,QAAQ,CAAC,IAAI,EAAE;QACpB,OAAO,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;KACpB,GAAG,IAAI;IAQR,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,oDAAoD;IACpD,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,CAE3B;CACF"}
package/dist/Queue.js DELETED
@@ -1,188 +0,0 @@
1
- "use strict";
2
- /** Yukimu v2.0.0 — Track Queue with Enhanced Operations */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Queue = void 0;
5
- const Constants_1 = require("./Constants");
6
- /**
7
- * Manages the track queue for a player.
8
- *
9
- * Improvements from v1:
10
- * - Configurable previous history size
11
- * - New methods: reverse(), removeDuplicates(), swap(), insertAt()
12
- * - Serialization/deserialization for persistence
13
- * - Bounds checking with meaningful errors
14
- * - Proper readonly access
15
- */
16
- class Queue {
17
- current = null;
18
- previous = [];
19
- tracks = [];
20
- maxPreviousSize;
21
- constructor(maxPreviousSize = Constants_1.DEFAULTS.PREVIOUS_HISTORY_SIZE) {
22
- this.maxPreviousSize = maxPreviousSize;
23
- }
24
- /**
25
- * Add one or more tracks to the queue.
26
- * @param tracks - Track or array of tracks to add
27
- * @param position - Optional position to insert at (default: end of queue)
28
- */
29
- add(tracks, position) {
30
- const arr = Array.isArray(tracks) ? tracks : [tracks];
31
- if (arr.length === 0)
32
- return;
33
- if (position !== undefined && position >= 0 && position <= this.tracks.length) {
34
- this.tracks.splice(position, 0, ...arr);
35
- }
36
- else {
37
- this.tracks.push(...arr);
38
- }
39
- }
40
- /**
41
- * Advance the queue: move current to previous, shift next track to current.
42
- * @returns The new current track, or null if the queue is empty
43
- */
44
- next() {
45
- if (this.current) {
46
- this.previous.unshift(this.current);
47
- if (this.previous.length > this.maxPreviousSize) {
48
- this.previous.length = this.maxPreviousSize;
49
- }
50
- }
51
- this.current = this.tracks.shift() ?? null;
52
- return this.current;
53
- }
54
- /**
55
- * Remove a track at a specific index.
56
- * @returns The removed track, or null if index is out of bounds
57
- */
58
- remove(index) {
59
- if (index < 0 || index >= this.tracks.length)
60
- return null;
61
- const [removed] = this.tracks.splice(index, 1);
62
- return removed ?? null;
63
- }
64
- /**
65
- * Remove a range of tracks.
66
- * @param start - Start index (inclusive)
67
- * @param end - End index (exclusive)
68
- */
69
- removeRange(start, end) {
70
- if (start < 0)
71
- start = 0;
72
- if (end > this.tracks.length)
73
- end = this.tracks.length;
74
- if (start >= end)
75
- return [];
76
- return this.tracks.splice(start, end - start);
77
- }
78
- /** Clear the entire queue, current track, and history */
79
- clear() {
80
- this.tracks = [];
81
- this.current = null;
82
- this.previous = [];
83
- }
84
- /** Clear only the queue (keep current track and history) */
85
- clearQueue() {
86
- this.tracks = [];
87
- }
88
- /** Shuffle the queue using Fisher-Yates algorithm */
89
- shuffle() {
90
- for (let i = this.tracks.length - 1; i > 0; i--) {
91
- const j = Math.floor(Math.random() * (i + 1));
92
- [this.tracks[i], this.tracks[j]] = [this.tracks[j], this.tracks[i]];
93
- }
94
- }
95
- /** Move a track from one position to another */
96
- move(from, to) {
97
- if (from < 0 || to < 0 || from >= this.tracks.length || to >= this.tracks.length)
98
- return false;
99
- const [track] = this.tracks.splice(from, 1);
100
- if (!track)
101
- return false;
102
- this.tracks.splice(to, 0, track);
103
- return true;
104
- }
105
- /** Swap two tracks in the queue */
106
- swap(i, j) {
107
- if (i < 0 || j < 0 || i >= this.tracks.length || j >= this.tracks.length)
108
- return false;
109
- [this.tracks[i], this.tracks[j]] = [this.tracks[j], this.tracks[i]];
110
- return true;
111
- }
112
- /**
113
- * Skip to a specific index in the queue, removing everything before it.
114
- * @returns The track at the given index, or null if out of bounds
115
- */
116
- skipto(index) {
117
- if (index < 0 || index >= this.tracks.length)
118
- return null;
119
- this.tracks.splice(0, index);
120
- return this.next();
121
- }
122
- /** Reverse the queue order */
123
- reverse() {
124
- this.tracks.reverse();
125
- }
126
- /**
127
- * Remove duplicate tracks based on their encoded data.
128
- * Keeps the first occurrence.
129
- */
130
- removeDuplicates() {
131
- const seen = new Set();
132
- const before = this.tracks.length;
133
- this.tracks = this.tracks.filter((track) => {
134
- if (seen.has(track.encoded))
135
- return false;
136
- seen.add(track.encoded);
137
- return true;
138
- });
139
- return before - this.tracks.length;
140
- }
141
- /** Peek at the next N tracks without modifying the queue */
142
- peek(count = 10) {
143
- return this.tracks.slice(0, count);
144
- }
145
- /** Find the first track matching a predicate */
146
- find(predicate) {
147
- return this.tracks.find(predicate);
148
- }
149
- /** Filter tracks by a predicate */
150
- filter(predicate) {
151
- return this.tracks.filter(predicate);
152
- }
153
- /** Get the index of a track by its encoded data */
154
- indexOf(encoded) {
155
- return this.tracks.findIndex((t) => t.encoded === encoded);
156
- }
157
- // ─── Serialization ────────────────────────────────────────────────────
158
- /** Serialize the queue state for persistence */
159
- toJSON() {
160
- return {
161
- current: this.current,
162
- tracks: [...this.tracks],
163
- previous: [...this.previous],
164
- };
165
- }
166
- /** Restore queue state from serialized data */
167
- fromJSON(data) {
168
- this.current = data.current ?? null;
169
- this.tracks = data.tracks ? [...data.tracks] : [];
170
- this.previous = data.previous ? [...data.previous] : [];
171
- }
172
- // ─── Getters ──────────────────────────────────────────────────────────
173
- get size() {
174
- return this.tracks.length;
175
- }
176
- get isEmpty() {
177
- return this.tracks.length === 0;
178
- }
179
- get totalDuration() {
180
- return this.tracks.reduce((acc, t) => acc + (t.info?.length ?? 0), 0);
181
- }
182
- /** Readonly access to the underlying track array */
183
- get list() {
184
- return this.tracks;
185
- }
186
- }
187
- exports.Queue = Queue;
188
- //# sourceMappingURL=Queue.js.map
package/dist/Queue.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /** Yukimu v2.0.0 — Track Resolver with Retry, Caching & Fallback */
2
- import type { Yukimu } from "./Yukimu";
3
- import type { Node } from "./Node";
4
- import type { SearchResult, SearchSource } from "./types";
5
- /**
6
- * Resolves search queries and URLs into playable tracks.
7
- *
8
- * Improvements from v1:
9
- * - Accepts optional `node` parameter (loads on the correct node for a player)
10
- * - Search retry with fallback sources
11
- * - Search result caching
12
- * - Spotify playlist/album resolution
13
- * - Spotify token refresh with retry and timeout
14
- * - Rate limit handling for Spotify API
15
- */
16
- export declare class Resolver {
17
- private readonly manager;
18
- private spotifyToken;
19
- private spotifyExpiry;
20
- private spotifyRefreshing;
21
- constructor(manager: Yukimu);
22
- /**
23
- * Resolve a query (URL or search term) into tracks.
24
- *
25
- * @param query - A URL or search query string
26
- * @param source - The search source to use (ignored for URLs)
27
- * @param requester - Optional requester metadata to attach to tracks
28
- * @param node - Optional specific node to use for loading
29
- */
30
- resolve(query: string, source: SearchSource, requester?: unknown, node?: Node): Promise<SearchResult>;
31
- /**
32
- * Detect the source platform from a URL.
33
- */
34
- detectSource(url: string): SearchSource | null;
35
- private trySpotifyFallback;
36
- private getSpotifyToken;
37
- private resolveSpotifyMeta;
38
- private resolveSpotifyPlaylist;
39
- private resolveSpotifyAlbum;
40
- private getLoadNode;
41
- private attachRequester;
42
- private sleep;
43
- }
44
- //# sourceMappingURL=Resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Resolver.d.ts","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAS,MAAM,SAAS,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,OAAO,EAAE,MAAM;IAI3B;;;;;;;OAOG;IACU,OAAO,CAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,SAAS,CAAC,EAAE,OAAO,EACnB,IAAI,CAAC,EAAE,IAAI,GACV,OAAO,CAAC,YAAY,CAAC;IAiExB;;OAEG;IACI,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;YASvC,kBAAkB;YA4DlB,eAAe;YAiDf,kBAAkB;YA6BlB,sBAAsB;YAqCtB,mBAAmB;IAqCjC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,KAAK;CAGd"}
package/dist/Resolver.js DELETED
@@ -1,289 +0,0 @@
1
- "use strict";
2
- /** Yukimu v2.0.0 — Track Resolver with Retry, Caching & Fallback */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Resolver = void 0;
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
- */
17
- class Resolver {
18
- manager;
19
- spotifyToken = null;
20
- spotifyExpiry = 0;
21
- spotifyRefreshing = false;
22
- constructor(manager) {
23
- this.manager = manager;
24
- }
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();
35
- const isUrl = /^https?:\/\//.test(query);
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;
47
- }
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) } };
66
- }
67
- if (!result.tracks)
68
- result.tracks = [];
69
- // Attach requester
70
- if (requester && result.tracks.length > 0) {
71
- this.attachRequester(result.tracks, requester);
72
- }
73
- // Spotify fallback — if LavaSrc is not installed, try to resolve via metadata
74
- if ((result.loadType === "error" || result.loadType === "empty") && isUrl) {
75
- const spotifyFallback = await this.trySpotifyFallback(query, source, requester);
76
- if (spotifyFallback)
77
- return spotifyFallback;
78
- }
79
- // Cache successful results
80
- if (result.tracks.length > 0) {
81
- this.manager.trackCache.setSearch(identifier, result);
82
- // Also cache individual tracks
83
- for (const track of result.tracks) {
84
- if (track?.encoded) {
85
- this.manager.trackCache.set(track.encoded, track);
86
- }
87
- }
88
- }
89
- return result;
90
- }
91
- /**
92
- * Detect the source platform from a URL.
93
- */
94
- detectSource(url) {
95
- for (const [source, patterns] of Object.entries(Constants_1.URL_PATTERNS)) {
96
- if (patterns.some((p) => p.test(url)))
97
- return source;
98
- }
99
- return null;
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 ──────────────────────────────────────────────────────
157
- async getSpotifyToken() {
158
- const opts = this.manager.options.spotify;
159
- if (!opts)
160
- return null;
161
- // Return cached token if still valid
162
- if (this.spotifyToken && Date.now() < this.spotifyExpiry) {
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;
171
- try {
172
- const controller = new AbortController();
173
- const timeout = setTimeout(() => controller.abort(), 10_000);
174
- const res = await fetch("https://accounts.spotify.com/api/token", {
175
- method: "POST",
176
- headers: {
177
- "Content-Type": "application/x-www-form-urlencoded",
178
- Authorization: `Basic ${Buffer.from(`${opts.clientId}:${opts.clientSecret}`).toString("base64")}`,
179
- },
180
- body: "grant_type=client_credentials",
181
- signal: controller.signal,
182
- });
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());
189
- this.spotifyToken = data.access_token;
190
- this.spotifyExpiry = Date.now() + data.expires_in * 1000 - Constants_1.DEFAULTS.SPOTIFY_TOKEN_REFRESH_BUFFER;
191
- return this.spotifyToken;
192
- }
193
- catch (err) {
194
- this.manager.logger.warn(`Spotify token refresh failed: ${err}`);
195
- return null;
196
- }
197
- finally {
198
- this.spotifyRefreshing = false;
199
- }
200
- }
201
- async resolveSpotifyMeta(trackId) {
202
- const token = await this.getSpotifyToken();
203
- if (!token)
204
- return null;
205
- try {
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)}`, {
209
- headers: { Authorization: `Bearer ${token}` },
210
- signal: controller.signal,
211
- });
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
- };
220
- }
221
- catch {
222
- return null;
223
- }
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
- }
287
- }
288
- exports.Resolver = Resolver;
289
- //# sourceMappingURL=Resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"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"}