ryanlink 1.0.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.
Files changed (60) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +455 -0
  3. package/dist/index.d.mts +1335 -0
  4. package/dist/index.d.ts +1335 -0
  5. package/dist/index.js +4694 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +4604 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/package.json +82 -0
  10. package/src/audio/AudioFilters.ts +316 -0
  11. package/src/audio/AudioQueue.ts +782 -0
  12. package/src/audio/AudioTrack.ts +242 -0
  13. package/src/audio/QueueController.ts +252 -0
  14. package/src/audio/TrackCollection.ts +138 -0
  15. package/src/audio/index.ts +9 -0
  16. package/src/config/defaults.ts +223 -0
  17. package/src/config/endpoints.ts +99 -0
  18. package/src/config/index.ts +9 -0
  19. package/src/config/patterns.ts +55 -0
  20. package/src/config/presets.ts +400 -0
  21. package/src/config/symbols.ts +31 -0
  22. package/src/core/PluginSystem.ts +50 -0
  23. package/src/core/RyanlinkPlayer.ts +403 -0
  24. package/src/core/index.ts +6 -0
  25. package/src/extensions/AutoplayExtension.ts +283 -0
  26. package/src/extensions/FairPlayExtension.ts +154 -0
  27. package/src/extensions/LyricsExtension.ts +187 -0
  28. package/src/extensions/PersistenceExtension.ts +182 -0
  29. package/src/extensions/SponsorBlockExtension.ts +81 -0
  30. package/src/extensions/index.ts +9 -0
  31. package/src/index.ts +19 -0
  32. package/src/lavalink/ConnectionPool.ts +326 -0
  33. package/src/lavalink/HttpClient.ts +316 -0
  34. package/src/lavalink/LavalinkConnection.ts +409 -0
  35. package/src/lavalink/index.ts +7 -0
  36. package/src/metadata.ts +88 -0
  37. package/src/types/api/Rest.ts +949 -0
  38. package/src/types/api/Websocket.ts +463 -0
  39. package/src/types/api/index.ts +6 -0
  40. package/src/types/audio/FilterManager.ts +29 -0
  41. package/src/types/audio/Queue.ts +4 -0
  42. package/src/types/audio/QueueManager.ts +30 -0
  43. package/src/types/audio/index.ts +7 -0
  44. package/src/types/common.ts +63 -0
  45. package/src/types/core/Player.ts +322 -0
  46. package/src/types/core/index.ts +5 -0
  47. package/src/types/index.ts +6 -0
  48. package/src/types/lavalink/Node.ts +173 -0
  49. package/src/types/lavalink/NodeManager.ts +34 -0
  50. package/src/types/lavalink/REST.ts +144 -0
  51. package/src/types/lavalink/index.ts +32 -0
  52. package/src/types/voice/VoiceManager.ts +176 -0
  53. package/src/types/voice/index.ts +5 -0
  54. package/src/utils/helpers.ts +169 -0
  55. package/src/utils/index.ts +6 -0
  56. package/src/utils/validators.ts +184 -0
  57. package/src/voice/RegionSelector.ts +184 -0
  58. package/src/voice/VoiceConnection.ts +451 -0
  59. package/src/voice/VoiceSession.ts +297 -0
  60. package/src/voice/index.ts +7 -0
@@ -0,0 +1,400 @@
1
+ /**
2
+ * Professional Equalizer Presets for Ryanlink v2
3
+ * All presets use 15-band equalizer configuration
4
+ */
5
+
6
+ export interface EQBand {
7
+ band: number;
8
+ gain: number;
9
+ }
10
+
11
+ export const EQPresets = {
12
+ /** A Bassboost Equalizer, so high it distorts the audio */
13
+ BassboostEarrape: [
14
+ { band: 0, gain: 0.6 * 0.375 },
15
+ { band: 1, gain: 0.67 * 0.375 },
16
+ { band: 2, gain: 0.67 * 0.375 },
17
+ { band: 3, gain: 0.4 * 0.375 },
18
+ { band: 4, gain: -0.5 * 0.375 },
19
+ { band: 5, gain: 0.15 * 0.375 },
20
+ { band: 6, gain: -0.45 * 0.375 },
21
+ { band: 7, gain: 0.23 * 0.375 },
22
+ { band: 8, gain: 0.35 * 0.375 },
23
+ { band: 9, gain: 0.45 * 0.375 },
24
+ { band: 10, gain: 0.55 * 0.375 },
25
+ { band: 11, gain: -0.6 * 0.375 },
26
+ { band: 12, gain: 0.55 * 0.375 },
27
+ { band: 13, gain: -0.5 * 0.375 },
28
+ { band: 14, gain: -0.75 * 0.375 },
29
+ ] as EQBand[],
30
+
31
+ /** A High and decent Bassboost Equalizer */
32
+ BassboostHigh: [
33
+ { band: 0, gain: 0.6 * 0.25 },
34
+ { band: 1, gain: 0.67 * 0.25 },
35
+ { band: 2, gain: 0.67 * 0.25 },
36
+ { band: 3, gain: 0.4 * 0.25 },
37
+ { band: 4, gain: -0.5 * 0.25 },
38
+ { band: 5, gain: 0.15 * 0.25 },
39
+ { band: 6, gain: -0.45 * 0.25 },
40
+ { band: 7, gain: 0.23 * 0.25 },
41
+ { band: 8, gain: 0.35 * 0.25 },
42
+ { band: 9, gain: 0.45 * 0.25 },
43
+ { band: 10, gain: 0.55 * 0.25 },
44
+ { band: 11, gain: -0.6 * 0.25 },
45
+ { band: 12, gain: 0.55 * 0.25 },
46
+ { band: 13, gain: -0.5 * 0.25 },
47
+ { band: 14, gain: -0.75 * 0.25 },
48
+ ] as EQBand[],
49
+
50
+ /** A decent Bassboost Equalizer */
51
+ BassboostMedium: [
52
+ { band: 0, gain: 0.6 * 0.1875 },
53
+ { band: 1, gain: 0.67 * 0.1875 },
54
+ { band: 2, gain: 0.67 * 0.1875 },
55
+ { band: 3, gain: 0.4 * 0.1875 },
56
+ { band: 4, gain: -0.5 * 0.1875 },
57
+ { band: 5, gain: 0.15 * 0.1875 },
58
+ { band: 6, gain: -0.45 * 0.1875 },
59
+ { band: 7, gain: 0.23 * 0.1875 },
60
+ { band: 8, gain: 0.35 * 0.1875 },
61
+ { band: 9, gain: 0.45 * 0.1875 },
62
+ { band: 10, gain: 0.55 * 0.1875 },
63
+ { band: 11, gain: -0.6 * 0.1875 },
64
+ { band: 12, gain: 0.55 * 0.1875 },
65
+ { band: 13, gain: -0.5 * 0.1875 },
66
+ { band: 14, gain: -0.75 * 0.1875 },
67
+ ] as EQBand[],
68
+
69
+ /** A slight Bassboost Equalizer */
70
+ BassboostLow: [
71
+ { band: 0, gain: 0.6 * 0.125 },
72
+ { band: 1, gain: 0.67 * 0.125 },
73
+ { band: 2, gain: 0.67 * 0.125 },
74
+ { band: 3, gain: 0.4 * 0.125 },
75
+ { band: 4, gain: -0.5 * 0.125 },
76
+ { band: 5, gain: 0.15 * 0.125 },
77
+ { band: 6, gain: -0.45 * 0.125 },
78
+ { band: 7, gain: 0.23 * 0.125 },
79
+ { band: 8, gain: 0.35 * 0.125 },
80
+ { band: 9, gain: 0.45 * 0.125 },
81
+ { band: 10, gain: 0.55 * 0.125 },
82
+ { band: 11, gain: -0.6 * 0.125 },
83
+ { band: 12, gain: 0.55 * 0.125 },
84
+ { band: 13, gain: -0.5 * 0.125 },
85
+ { band: 14, gain: -0.75 * 0.125 },
86
+ ] as EQBand[],
87
+
88
+ /** Professional high-fidelity audio preset for clear vocals and deep bass */
89
+ HighQuality: [
90
+ { band: 0, gain: 0.15 },
91
+ { band: 1, gain: 0.1 },
92
+ { band: 2, gain: 0.05 },
93
+ { band: 3, gain: 0 },
94
+ { band: 4, gain: 0 },
95
+ { band: 5, gain: 0 },
96
+ { band: 6, gain: 0 },
97
+ { band: 7, gain: 0 },
98
+ { band: 8, gain: 0 },
99
+ { band: 9, gain: 0 },
100
+ { band: 10, gain: 0.05 },
101
+ { band: 11, gain: 0.1 },
102
+ { band: 12, gain: 0.15 },
103
+ { band: 13, gain: 0.15 },
104
+ { band: 14, gain: 0.15 },
105
+ ] as EQBand[],
106
+
107
+ /** Makes the Music slightly "better" */
108
+ BetterMusic: [
109
+ { band: 0, gain: 0.25 },
110
+ { band: 1, gain: 0.025 },
111
+ { band: 2, gain: 0.0125 },
112
+ { band: 3, gain: 0 },
113
+ { band: 4, gain: 0 },
114
+ { band: 5, gain: -0.0125 },
115
+ { band: 6, gain: -0.025 },
116
+ { band: 7, gain: -0.0175 },
117
+ { band: 8, gain: 0 },
118
+ { band: 9, gain: 0 },
119
+ { band: 10, gain: 0.0125 },
120
+ { band: 11, gain: 0.025 },
121
+ { band: 12, gain: 0.25 },
122
+ { band: 13, gain: 0.125 },
123
+ { band: 14, gain: 0.125 },
124
+ ] as EQBand[],
125
+
126
+ /** Makes the Music sound like rock music / sound rock music better */
127
+ Rock: [
128
+ { band: 0, gain: 0.3 },
129
+ { band: 1, gain: 0.25 },
130
+ { band: 2, gain: 0.2 },
131
+ { band: 3, gain: 0.1 },
132
+ { band: 4, gain: 0.05 },
133
+ { band: 5, gain: -0.05 },
134
+ { band: 6, gain: -0.15 },
135
+ { band: 7, gain: -0.2 },
136
+ { band: 8, gain: -0.1 },
137
+ { band: 9, gain: -0.05 },
138
+ { band: 10, gain: 0.05 },
139
+ { band: 11, gain: 0.1 },
140
+ { band: 12, gain: 0.2 },
141
+ { band: 13, gain: 0.25 },
142
+ { band: 14, gain: 0.3 },
143
+ ] as EQBand[],
144
+
145
+ /** Makes the Music sound like Classic music / sound Classic music better */
146
+ Classic: [
147
+ { band: 0, gain: 0.375 },
148
+ { band: 1, gain: 0.35 },
149
+ { band: 2, gain: 0.125 },
150
+ { band: 3, gain: 0 },
151
+ { band: 4, gain: 0 },
152
+ { band: 5, gain: 0.125 },
153
+ { band: 6, gain: 0.55 },
154
+ { band: 7, gain: 0.05 },
155
+ { band: 8, gain: 0.125 },
156
+ { band: 9, gain: 0.25 },
157
+ { band: 10, gain: 0.2 },
158
+ { band: 11, gain: 0.25 },
159
+ { band: 12, gain: 0.3 },
160
+ { band: 13, gain: 0.25 },
161
+ { band: 14, gain: 0.3 },
162
+ ] as EQBand[],
163
+
164
+ /** Makes the Music sound like Pop music / sound Pop music better */
165
+ Pop: [
166
+ { band: 0, gain: 0.26 },
167
+ { band: 1, gain: 0.22 },
168
+ { band: 2, gain: 0.18 },
169
+ { band: 3, gain: 0.12 },
170
+ { band: 4, gain: 0.1 },
171
+ { band: 5, gain: 0.03 },
172
+ { band: 6, gain: -0.005 },
173
+ { band: 7, gain: -0.01 },
174
+ { band: 8, gain: -0.015 },
175
+ { band: 9, gain: -0.015 },
176
+ { band: 10, gain: -0.01 },
177
+ { band: 11, gain: -0.005 },
178
+ { band: 12, gain: 0.08 },
179
+ { band: 13, gain: 0.15 },
180
+ { band: 14, gain: 0.2 },
181
+ ] as EQBand[],
182
+
183
+ /** Makes the Music sound like Electronic music / sound Electronic music better */
184
+ Electronic: [
185
+ { band: 0, gain: 0.375 },
186
+ { band: 1, gain: 0.35 },
187
+ { band: 2, gain: 0.125 },
188
+ { band: 3, gain: 0 },
189
+ { band: 4, gain: 0 },
190
+ { band: 5, gain: -0.125 },
191
+ { band: 6, gain: -0.125 },
192
+ { band: 7, gain: 0 },
193
+ { band: 8, gain: 0.25 },
194
+ { band: 9, gain: 0.125 },
195
+ { band: 10, gain: 0.15 },
196
+ { band: 11, gain: 0.2 },
197
+ { band: 12, gain: 0.25 },
198
+ { band: 13, gain: 0.35 },
199
+ { band: 14, gain: 0.4 },
200
+ ] as EQBand[],
201
+
202
+ /** Boosts all Bands slightly for louder and fuller sound */
203
+ FullSound: [
204
+ { band: 0, gain: 0.25 },
205
+ { band: 1, gain: 0.25 },
206
+ { band: 2, gain: 0.25 },
207
+ { band: 3, gain: 0.25 },
208
+ { band: 4, gain: 0.25 },
209
+ { band: 5, gain: 0.25 },
210
+ { band: 6, gain: 0.25 },
211
+ { band: 7, gain: 0.25 },
212
+ { band: 8, gain: 0.25 },
213
+ { band: 9, gain: 0.25 },
214
+ { band: 10, gain: 0.25 },
215
+ { band: 11, gain: 0.25 },
216
+ { band: 12, gain: 0.25 },
217
+ { band: 13, gain: 0.25 },
218
+ { band: 14, gain: 0.25 },
219
+ ] as EQBand[],
220
+
221
+ /** Makes the Music sound like being in a Gaming environment / sound Gaming music better */
222
+ Gaming: [
223
+ { band: 0, gain: 0.35 },
224
+ { band: 1, gain: 0.3 },
225
+ { band: 2, gain: 0.25 },
226
+ { band: 3, gain: 0.2 },
227
+ { band: 4, gain: 0.15 },
228
+ { band: 5, gain: 0.1 },
229
+ { band: 6, gain: 0.075 },
230
+ { band: 7, gain: 0 },
231
+ { band: 8, gain: -0.05 },
232
+ { band: 9, gain: 0.05 },
233
+ { band: 10, gain: 0.1 },
234
+ { band: 11, gain: 0.15 },
235
+ { band: 12, gain: 0.25 },
236
+ { band: 13, gain: 0.3 },
237
+ { band: 14, gain: 0.35 },
238
+ ] as EQBand[],
239
+
240
+ /** Nightcore preset with speed and pitch adjustments */
241
+ Nightcore: [
242
+ { band: 0, gain: 0.2 },
243
+ { band: 1, gain: 0.15 },
244
+ { band: 2, gain: 0.1 },
245
+ { band: 3, gain: 0.05 },
246
+ { band: 4, gain: 0 },
247
+ { band: 5, gain: -0.05 },
248
+ { band: 6, gain: -0.1 },
249
+ { band: 7, gain: -0.05 },
250
+ { band: 8, gain: 0 },
251
+ { band: 9, gain: 0.05 },
252
+ { band: 10, gain: 0.1 },
253
+ { band: 11, gain: 0.15 },
254
+ { band: 12, gain: 0.2 },
255
+ { band: 13, gain: 0.25 },
256
+ { band: 14, gain: 0.3 },
257
+ ] as EQBand[],
258
+
259
+ /** Vaporwave preset */
260
+ Vaporwave: [
261
+ { band: 0, gain: 0.35 },
262
+ { band: 1, gain: 0.3 },
263
+ { band: 2, gain: 0.2 },
264
+ { band: 3, gain: 0.1 },
265
+ { band: 4, gain: 0 },
266
+ { band: 5, gain: -0.05 },
267
+ { band: 6, gain: -0.1 },
268
+ { band: 7, gain: -0.15 },
269
+ { band: 8, gain: -0.1 },
270
+ { band: 9, gain: 0 },
271
+ { band: 10, gain: 0.1 },
272
+ { band: 11, gain: 0.15 },
273
+ { band: 12, gain: 0.2 },
274
+ { band: 13, gain: 0.25 },
275
+ { band: 14, gain: 0.3 },
276
+ ] as EQBand[],
277
+
278
+ /** Treble and Bass boost */
279
+ TrebleBass: [
280
+ { band: 0, gain: 0.3 },
281
+ { band: 1, gain: 0.25 },
282
+ { band: 2, gain: 0.2 },
283
+ { band: 3, gain: 0.1 },
284
+ { band: 4, gain: 0 },
285
+ { band: 5, gain: -0.05 },
286
+ { band: 6, gain: -0.1 },
287
+ { band: 7, gain: -0.05 },
288
+ { band: 8, gain: 0 },
289
+ { band: 9, gain: 0.05 },
290
+ { band: 10, gain: 0.1 },
291
+ { band: 11, gain: 0.15 },
292
+ { band: 12, gain: 0.2 },
293
+ { band: 13, gain: 0.25 },
294
+ { band: 14, gain: 0.3 },
295
+ ] as EQBand[],
296
+
297
+ /** Soft preset */
298
+ Soft: [
299
+ { band: 0, gain: 0.1 },
300
+ { band: 1, gain: 0.08 },
301
+ { band: 2, gain: 0.06 },
302
+ { band: 3, gain: 0.04 },
303
+ { band: 4, gain: 0.02 },
304
+ { band: 5, gain: 0 },
305
+ { band: 6, gain: 0 },
306
+ { band: 7, gain: 0 },
307
+ { band: 8, gain: 0 },
308
+ { band: 9, gain: 0 },
309
+ { band: 10, gain: 0.02 },
310
+ { band: 11, gain: 0.04 },
311
+ { band: 12, gain: 0.06 },
312
+ { band: 13, gain: 0.08 },
313
+ { band: 14, gain: 0.1 },
314
+ ] as EQBand[],
315
+
316
+ /** TV preset */
317
+ TV: [
318
+ { band: 0, gain: 0.2 },
319
+ { band: 1, gain: 0.25 },
320
+ { band: 2, gain: 0.3 },
321
+ { band: 3, gain: 0.25 },
322
+ { band: 4, gain: 0.2 },
323
+ { band: 5, gain: 0.1 },
324
+ { band: 6, gain: 0 },
325
+ { band: 7, gain: 0 },
326
+ { band: 8, gain: 0.1 },
327
+ { band: 9, gain: 0.15 },
328
+ { band: 10, gain: 0.2 },
329
+ { band: 11, gain: 0.15 },
330
+ { band: 12, gain: 0.1 },
331
+ { band: 13, gain: 0.05 },
332
+ { band: 14, gain: 0 },
333
+ ] as EQBand[],
334
+
335
+ /** Radio preset */
336
+ Radio: [
337
+ { band: 0, gain: 0.15 },
338
+ { band: 1, gain: 0.2 },
339
+ { band: 2, gain: 0.25 },
340
+ { band: 3, gain: 0.2 },
341
+ { band: 4, gain: 0.15 },
342
+ { band: 5, gain: 0.1 },
343
+ { band: 6, gain: 0 },
344
+ { band: 7, gain: 0 },
345
+ { band: 8, gain: 0 },
346
+ { band: 9, gain: 0.1 },
347
+ { band: 10, gain: 0.15 },
348
+ { band: 11, gain: 0.2 },
349
+ { band: 12, gain: 0.15 },
350
+ { band: 13, gain: 0.1 },
351
+ { band: 14, gain: 0.05 },
352
+ ] as EQBand[],
353
+
354
+ /** Normalization preset (all bands at 0) */
355
+ Normalization: [
356
+ { band: 0, gain: 0 },
357
+ { band: 1, gain: 0 },
358
+ { band: 2, gain: 0 },
359
+ { band: 3, gain: 0 },
360
+ { band: 4, gain: 0 },
361
+ { band: 5, gain: 0 },
362
+ { band: 6, gain: 0 },
363
+ { band: 7, gain: 0 },
364
+ { band: 8, gain: 0 },
365
+ { band: 9, gain: 0 },
366
+ { band: 10, gain: 0 },
367
+ { band: 11, gain: 0 },
368
+ { band: 12, gain: 0 },
369
+ { band: 13, gain: 0 },
370
+ { band: 14, gain: 0 },
371
+ ] as EQBand[],
372
+ } as const;
373
+
374
+ export type EQPresetName = keyof typeof EQPresets;
375
+
376
+ /**
377
+ * Get an EQ preset by name
378
+ * @param name The preset name
379
+ * @returns The EQ bands for the preset
380
+ */
381
+ export function getEQPreset(name: EQPresetName): readonly EQBand[] {
382
+ return EQPresets[name];
383
+ }
384
+
385
+ /**
386
+ * Get all available EQ preset names
387
+ * @returns Array of preset names
388
+ */
389
+ export function getEQPresetNames(): EQPresetName[] {
390
+ return Object.keys(EQPresets) as EQPresetName[];
391
+ }
392
+
393
+ /**
394
+ * Check if a preset name is valid
395
+ * @param name The preset name to check
396
+ * @returns True if the preset exists
397
+ */
398
+ export function isValidEQPreset(name: string): name is EQPresetName {
399
+ return name in EQPresets;
400
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Symbol for internal lookup operations
3
+ * Used to access internal state without exposing public methods
4
+ */
5
+ export const LookupSymbol = Symbol.for("lookup");
6
+
7
+ /**
8
+ * Symbol for internal update operations
9
+ * Used to update internal state without exposing public methods
10
+ */
11
+ export const UpdateSymbol = Symbol.for("update");
12
+
13
+ /**
14
+ * Symbol for ping update handling in VoiceRegion
15
+ */
16
+ export const OnPingUpdateSymbol = Symbol("onPingUpdate");
17
+
18
+ /**
19
+ * Symbol for voice close handling
20
+ */
21
+ export const OnVoiceCloseSymbol = Symbol("onVoiceClose");
22
+
23
+ /**
24
+ * Symbol for player state update handling
25
+ */
26
+ export const OnStateUpdateSymbol = Symbol("onStateUpdate");
27
+
28
+ /**
29
+ * Symbol for event update handling
30
+ */
31
+ export const OnEventUpdateSymbol = Symbol("onEventUpdate");
@@ -0,0 +1,50 @@
1
+ import type { Player } from "./RyanlinkPlayer";
2
+
3
+ /**
4
+ * Abstract base class for Player plugins
5
+ * Plugins can extend the player functionality and add custom events
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * class MyPlugin extends PlayerPlugin<{
10
+ * customEvent: [data: string];
11
+ * }> {
12
+ * readonly name = "my-plugin";
13
+ *
14
+ * init(player: Player) {
15
+ * player.on("trackStart", () => {
16
+ * this.emit("customEvent", "track started");
17
+ * });
18
+ * }
19
+ *
20
+ * // Example of a toJSON method, assuming it's meant to be part of the plugin class
21
+ * // and not inside the player.on callback.
22
+ * // The instruction "Improving toJSON return type" suggests this method might exist elsewhere
23
+ * // or is being added.
24
+ * toJSON(): Record<string, unknown> {
25
+ * return {
26
+ * name: this.name,
27
+ * // ... other plugin properties
28
+ * };
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ export abstract class PlayerPlugin<EventMap extends Record<string, unknown[]> = Record<string, unknown[]>> {
34
+ /** Type helper for event map - not used at runtime */
35
+ declare protected _: EventMap;
36
+
37
+ /**
38
+ * Unique name for the plugin - must be readonly
39
+ * Used to identify and access the plugin from player.plugins
40
+ */
41
+ abstract readonly name: string;
42
+
43
+ /**
44
+ * Initialize the plugin with the player instance
45
+ * Called once when the player is initialized
46
+ *
47
+ * @param player - The player instance to attach to
48
+ */
49
+ abstract init(player: Player): void;
50
+ }