ziplayer 0.2.6 → 0.2.7-dev.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 (57) hide show
  1. package/AI-Guide.md +607 -0
  2. package/README.md +513 -196
  3. package/dist/extensions/BaseExtension.d.ts +1 -0
  4. package/dist/extensions/BaseExtension.d.ts.map +1 -1
  5. package/dist/extensions/BaseExtension.js.map +1 -1
  6. package/dist/extensions/index.d.ts +38 -3
  7. package/dist/extensions/index.d.ts.map +1 -1
  8. package/dist/extensions/index.js +259 -41
  9. package/dist/extensions/index.js.map +1 -1
  10. package/dist/persistence/PersistenceManager.d.ts +61 -0
  11. package/dist/persistence/PersistenceManager.d.ts.map +1 -0
  12. package/dist/persistence/PersistenceManager.js +551 -0
  13. package/dist/persistence/PersistenceManager.js.map +1 -0
  14. package/dist/plugins/BasePlugin.js +1 -1
  15. package/dist/plugins/BasePlugin.js.map +1 -1
  16. package/dist/plugins/index.d.ts +19 -4
  17. package/dist/plugins/index.d.ts.map +1 -1
  18. package/dist/plugins/index.js +273 -146
  19. package/dist/plugins/index.js.map +1 -1
  20. package/dist/structures/FilterManager.js +3 -3
  21. package/dist/structures/FilterManager.js.map +1 -1
  22. package/dist/structures/Player.d.ts +64 -14
  23. package/dist/structures/Player.d.ts.map +1 -1
  24. package/dist/structures/Player.js +344 -91
  25. package/dist/structures/Player.js.map +1 -1
  26. package/dist/structures/PlayerManager.d.ts +125 -91
  27. package/dist/structures/PlayerManager.d.ts.map +1 -1
  28. package/dist/structures/PlayerManager.js +406 -111
  29. package/dist/structures/PlayerManager.js.map +1 -1
  30. package/dist/structures/Queue.d.ts +136 -31
  31. package/dist/structures/Queue.d.ts.map +1 -1
  32. package/dist/structures/Queue.js +265 -46
  33. package/dist/structures/Queue.js.map +1 -1
  34. package/dist/types/index.d.ts +39 -6
  35. package/dist/types/index.d.ts.map +1 -1
  36. package/dist/types/index.js +1 -0
  37. package/dist/types/index.js.map +1 -1
  38. package/dist/types/persistence.d.ts +55 -0
  39. package/dist/types/persistence.d.ts.map +1 -0
  40. package/dist/types/persistence.js +3 -0
  41. package/dist/types/persistence.js.map +1 -0
  42. package/package.json +47 -46
  43. package/src/extensions/BaseExtension.ts +36 -35
  44. package/src/extensions/index.ts +473 -190
  45. package/src/index.ts +16 -16
  46. package/src/persistence/PersistenceManager.ts +572 -0
  47. package/src/plugins/BasePlugin.ts +27 -27
  48. package/src/plugins/index.ts +403 -236
  49. package/src/structures/FilterManager.ts +303 -303
  50. package/src/structures/Player.ts +1962 -1689
  51. package/src/structures/PlayerManager.ts +788 -416
  52. package/src/structures/Queue.ts +599 -354
  53. package/src/types/index.ts +406 -373
  54. package/src/types/persistence.ts +65 -0
  55. package/src/types/plugin.ts +1 -1
  56. package/src/utils/timeout.ts +10 -10
  57. package/tsconfig.json +22 -23
@@ -0,0 +1,551 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PersistenceManager = exports.FileProvider = void 0;
37
+ const events_1 = require("events");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const zlib = __importStar(require("zlib"));
41
+ const util_1 = require("util");
42
+ const gzip = (0, util_1.promisify)(zlib.gzip);
43
+ const gunzip = (0, util_1.promisify)(zlib.gunzip);
44
+ // File provider implementation
45
+ class FileProvider {
46
+ constructor(basePath, maxBackups = 5) {
47
+ this.basePath = basePath;
48
+ this.maxBackups = maxBackups;
49
+ if (!fs.existsSync(basePath)) {
50
+ fs.mkdirSync(basePath, { recursive: true });
51
+ }
52
+ }
53
+ getFilePath(key) {
54
+ return path.join(this.basePath, `${key}.json`);
55
+ }
56
+ getBackupPath(key, timestamp) {
57
+ return path.join(this.basePath, `${key}_backup_${timestamp}.json`);
58
+ }
59
+ cleanOldBackups(key) {
60
+ const backups = fs
61
+ .readdirSync(this.basePath)
62
+ .filter((f) => f.startsWith(key) && f.includes("backup"))
63
+ .sort()
64
+ .reverse();
65
+ // Keep only maxBackups most recent
66
+ for (let i = this.maxBackups; i < backups.length; i++) {
67
+ const backupPath = path.join(this.basePath, backups[i]);
68
+ fs.unlinkSync(backupPath);
69
+ }
70
+ }
71
+ async save(key, data, compress = false) {
72
+ const filePath = this.getFilePath(key);
73
+ let content = JSON.stringify(data, null, 2);
74
+ if (compress) {
75
+ const compressed = await gzip(content);
76
+ content = compressed.toString("base64");
77
+ fs.writeFileSync(filePath + ".gz", content);
78
+ return;
79
+ }
80
+ // Create backup before overwriting
81
+ if (fs.existsSync(filePath)) {
82
+ const backupPath = this.getBackupPath(key, Date.now());
83
+ fs.copyFileSync(filePath, backupPath);
84
+ this.cleanOldBackups(key);
85
+ }
86
+ fs.writeFileSync(filePath, content);
87
+ }
88
+ async load(key) {
89
+ const filePath = this.getFilePath(key);
90
+ const gzPath = filePath + ".gz";
91
+ if (fs.existsSync(gzPath)) {
92
+ const compressed = fs.readFileSync(gzPath, "utf8");
93
+ const buffer = Buffer.from(compressed, "base64");
94
+ const decompressed = await gunzip(buffer);
95
+ return JSON.parse(decompressed.toString());
96
+ }
97
+ if (fs.existsSync(filePath)) {
98
+ const content = fs.readFileSync(filePath, "utf8");
99
+ return JSON.parse(content);
100
+ }
101
+ return null;
102
+ }
103
+ async delete(key) {
104
+ const filePath = this.getFilePath(key);
105
+ const gzPath = filePath + ".gz";
106
+ if (fs.existsSync(filePath))
107
+ fs.unlinkSync(filePath);
108
+ if (fs.existsSync(gzPath))
109
+ fs.unlinkSync(gzPath);
110
+ }
111
+ async list() {
112
+ const files = fs.readdirSync(this.basePath);
113
+ return files.filter((f) => f.endsWith(".json") || f.endsWith(".json.gz")).map((f) => f.replace(/\.json(\.gz)?$/, ""));
114
+ }
115
+ async restoreBackup(key, backupTimestamp) {
116
+ let backupFile = null;
117
+ if (backupTimestamp) {
118
+ const specific = this.getBackupPath(key, backupTimestamp);
119
+ if (fs.existsSync(specific)) {
120
+ backupFile = specific;
121
+ }
122
+ }
123
+ else {
124
+ // Get latest backup
125
+ const backups = fs
126
+ .readdirSync(this.basePath)
127
+ .filter((f) => f.startsWith(key) && f.includes("backup"))
128
+ .sort()
129
+ .reverse();
130
+ if (backups.length > 0) {
131
+ backupFile = path.join(this.basePath, backups[0]);
132
+ }
133
+ }
134
+ if (backupFile && fs.existsSync(backupFile)) {
135
+ const content = fs.readFileSync(backupFile, "utf8");
136
+ const data = JSON.parse(content);
137
+ await this.save(key, data);
138
+ return true;
139
+ }
140
+ return false;
141
+ }
142
+ }
143
+ exports.FileProvider = FileProvider;
144
+ // Custom provider for database integration
145
+ class CustomProvider {
146
+ constructor(saveFn, loadFn, deleteFn, listFn) {
147
+ this.saveFn = saveFn;
148
+ this.loadFn = loadFn;
149
+ this.deleteFn = deleteFn;
150
+ this.listFn = listFn;
151
+ }
152
+ async save(key, data) {
153
+ await this.saveFn(key, data);
154
+ }
155
+ async load(key) {
156
+ return await this.loadFn(key);
157
+ }
158
+ async delete(key) {
159
+ if (this.deleteFn) {
160
+ await this.deleteFn(key);
161
+ }
162
+ }
163
+ async list() {
164
+ if (this.listFn) {
165
+ return await this.listFn();
166
+ }
167
+ return [];
168
+ }
169
+ }
170
+ class PersistenceManager extends events_1.EventEmitter {
171
+ constructor(manager, options) {
172
+ super();
173
+ this.saveInterval = null;
174
+ this.isSaving = false;
175
+ this.manager = manager;
176
+ // Fix: Don't use spread that causes duplicate 'enabled'
177
+ this.options = {
178
+ enabled: true,
179
+ provider: "file",
180
+ saveInterval: 60000,
181
+ autoLoad: true,
182
+ maxBackups: 5,
183
+ compress: false,
184
+ filePath: "./players_data",
185
+ };
186
+ // Merge options manually to avoid spread duplication
187
+ if (options.enabled !== undefined)
188
+ this.options.enabled = options.enabled;
189
+ if (options.provider !== undefined)
190
+ this.options.provider = options.provider;
191
+ if (options.saveInterval !== undefined)
192
+ this.options.saveInterval = options.saveInterval;
193
+ if (options.autoLoad !== undefined)
194
+ this.options.autoLoad = options.autoLoad;
195
+ if (options.maxBackups !== undefined)
196
+ this.options.maxBackups = options.maxBackups;
197
+ if (options.compress !== undefined)
198
+ this.options.compress = options.compress;
199
+ if (options.filePath !== undefined)
200
+ this.options.filePath = options.filePath;
201
+ if (options.redisUrl !== undefined)
202
+ this.options.redisUrl = options.redisUrl;
203
+ if (options.redisPrefix !== undefined)
204
+ this.options.redisPrefix = options.redisPrefix;
205
+ if (options.save !== undefined)
206
+ this.options.save = options.save;
207
+ if (options.load !== undefined)
208
+ this.options.load = options.load;
209
+ if (options.delete !== undefined)
210
+ this.options.delete = options.delete;
211
+ if (options.list !== undefined)
212
+ this.options.list = options.list;
213
+ this.provider = this.createProvider();
214
+ if (this.options.enabled) {
215
+ this.startAutoSave();
216
+ if (this.options.autoLoad) {
217
+ this.loadAll().catch((err) => {
218
+ this.debug("Auto-load error:", err);
219
+ });
220
+ }
221
+ }
222
+ }
223
+ createProvider() {
224
+ switch (this.options.provider) {
225
+ case "file":
226
+ return new FileProvider(this.options.filePath, this.options.maxBackups);
227
+ case "redis":
228
+ // Implement Redis provider if needed
229
+ throw new Error("Redis provider not implemented yet");
230
+ case "database":
231
+ if (!this.options.save || !this.options.load) {
232
+ throw new Error("Database provider requires save/load functions");
233
+ }
234
+ // Fix: Pass the save and load functions with correct signatures
235
+ return new CustomProvider(async (key, data) => {
236
+ if (this.options.save) {
237
+ // Call with single object argument if that's expected
238
+ const saveFn = this.options.save;
239
+ if (saveFn.length === 1) {
240
+ // Save function expects { key, data }
241
+ await saveFn({ key, data });
242
+ }
243
+ else {
244
+ // Save function expects (key, data)
245
+ await saveFn(key, data);
246
+ }
247
+ }
248
+ }, async (key) => {
249
+ if (this.options.load) {
250
+ const loadFn = this.options.load;
251
+ if (loadFn.length === 0) {
252
+ // Load function expects no args, returns all data
253
+ const allData = await loadFn();
254
+ return allData?.get?.(key) || allData?.[key] || null;
255
+ }
256
+ else {
257
+ // Load function expects key
258
+ return await loadFn(key);
259
+ }
260
+ }
261
+ return null;
262
+ }, this.options.delete, this.options.list);
263
+ default:
264
+ return new FileProvider(this.options.filePath, this.options.maxBackups);
265
+ }
266
+ }
267
+ debug(message, ...params) {
268
+ if (this.manager.debugEnabled) {
269
+ this.manager.emit("debug", `[Persistence] ${message}`, ...params);
270
+ }
271
+ }
272
+ startAutoSave() {
273
+ if (this.saveInterval) {
274
+ clearInterval(this.saveInterval);
275
+ }
276
+ this.saveInterval = setInterval(() => {
277
+ this.saveAll().catch((err) => {
278
+ this.debug("Auto-save error:", err);
279
+ this.emit("error", err);
280
+ });
281
+ }, this.options.saveInterval);
282
+ this.debug(`Auto-save started (interval: ${this.options.saveInterval}ms)`);
283
+ }
284
+ serializeTrack(track) {
285
+ // Create base object with required fields only (avoid duplication)
286
+ const serialized = {
287
+ id: track.id,
288
+ title: track.title,
289
+ url: track.url,
290
+ source: track.source,
291
+ duration: track.duration,
292
+ thumbnail: track.thumbnail,
293
+ requestedBy: track.requestedBy,
294
+ isLive: track.isLive || false,
295
+ };
296
+ // Add optional fields if they exist on the track
297
+ const trackAny = track;
298
+ if (trackAny.author)
299
+ serialized.author = trackAny.author;
300
+ if (trackAny.artwork)
301
+ serialized.artwork = trackAny.artwork;
302
+ // Add any extra metadata (excluding fields we already set)
303
+ const excludedFields = new Set([
304
+ "id",
305
+ "title",
306
+ "url",
307
+ "source",
308
+ "duration",
309
+ "thumbnail",
310
+ "requestedBy",
311
+ "isLive",
312
+ "author",
313
+ "artwork",
314
+ ]);
315
+ for (const key of Object.keys(trackAny)) {
316
+ if (!excludedFields.has(key) && trackAny[key] !== undefined) {
317
+ serialized[key] = trackAny[key];
318
+ }
319
+ }
320
+ return serialized;
321
+ }
322
+ serializeQueue(player) {
323
+ return {
324
+ tracks: player.upcomingTracks.map((t) => this.serializeTrack(t)),
325
+ current: player.currentTrack ? this.serializeTrack(player.currentTrack) : null,
326
+ history: player.previousTracks.map((t) => this.serializeTrack(t)),
327
+ loopMode: player.queue.loop(),
328
+ autoPlay: player.queue.autoPlay(),
329
+ position: player.getTime().current,
330
+ };
331
+ }
332
+ serializePlayer(player) {
333
+ // Get filters safely - access through public method
334
+ let filters = [];
335
+ try {
336
+ const filterString = player.filter?.getFilterString();
337
+ if (filterString) {
338
+ filters = filterString.split(",").filter(Boolean);
339
+ }
340
+ }
341
+ catch (e) {
342
+ // Filter may not be accessible
343
+ }
344
+ return {
345
+ guildId: player.guildId,
346
+ queue: this.serializeQueue(player),
347
+ volume: player.volume,
348
+ isPlaying: player.isPlaying,
349
+ isPaused: player.isPaused,
350
+ options: player.options,
351
+ filters: filters.length > 0 ? filters : undefined,
352
+ lastUpdate: Date.now(),
353
+ version: "1.0.0",
354
+ };
355
+ }
356
+ deserializeTrack(data) {
357
+ // Create base track object
358
+ const track = {
359
+ id: data.id,
360
+ title: data.title,
361
+ url: data.url,
362
+ source: data.source,
363
+ duration: data.duration,
364
+ thumbnail: data.thumbnail,
365
+ requestedBy: data.requestedBy,
366
+ isLive: data.isLive || false,
367
+ };
368
+ // Add optional fields if they exist
369
+ if (data.author)
370
+ track.author = data.author;
371
+ if (data.artwork)
372
+ track.artwork = data.artwork;
373
+ // Add any extra metadata from serialized data
374
+ for (const key of Object.keys(data)) {
375
+ if (!["id", "title", "url", "source", "duration", "thumbnail", "requestedBy", "isLive", "author", "artwork"].includes(key)) {
376
+ track[key] = data[key];
377
+ }
378
+ }
379
+ return track;
380
+ }
381
+ /**
382
+ * Save a single player
383
+ */
384
+ async savePlayer(player) {
385
+ if (!this.options.enabled)
386
+ return false;
387
+ try {
388
+ const data = this.serializePlayer(player);
389
+ await this.provider.save(player.guildId, data);
390
+ this.debug(`Saved player: ${player.guildId}`);
391
+ this.emit("playerSaved", player.guildId);
392
+ return true;
393
+ }
394
+ catch (error) {
395
+ this.debug(`Failed to save player ${player.guildId}:`, error);
396
+ this.emit("error", error);
397
+ return false;
398
+ }
399
+ }
400
+ /**
401
+ * Save all players
402
+ */
403
+ async saveAll() {
404
+ if (!this.options.enabled || this.isSaving)
405
+ return new Map();
406
+ this.isSaving = true;
407
+ const results = new Map();
408
+ try {
409
+ const players = this.manager.getAll();
410
+ this.debug(`Saving ${players.length} players...`);
411
+ // Save in parallel with limit
412
+ const batchSize = 5;
413
+ for (let i = 0; i < players.length; i += batchSize) {
414
+ const batch = players.slice(i, i + batchSize);
415
+ const promises = batch.map((p) => this.savePlayer(p));
416
+ const batchResults = await Promise.all(promises);
417
+ batch.forEach((p, idx) => results.set(p.guildId, batchResults[idx]));
418
+ }
419
+ this.debug(`Saved ${results.size} players`);
420
+ this.emit("savedAll", results);
421
+ }
422
+ finally {
423
+ this.isSaving = false;
424
+ }
425
+ return results;
426
+ }
427
+ /**
428
+ * Load a single player
429
+ */
430
+ async loadPlayer(guildId, restorePosition = true) {
431
+ if (!this.options.enabled)
432
+ return false;
433
+ try {
434
+ const data = await this.provider.load(guildId);
435
+ if (!data)
436
+ return false;
437
+ // Check if player already exists
438
+ let player = this.manager.get(guildId);
439
+ if (!player) {
440
+ player = await this.manager.create(guildId, data.options);
441
+ }
442
+ // Restore queue
443
+ const queue = data.queue;
444
+ // Clear current queue
445
+ player.queue.clear();
446
+ player.queue.loop(queue.loopMode);
447
+ player.queue.autoPlay(queue.autoPlay);
448
+ // Restore tracks
449
+ if (queue.tracks.length > 0) {
450
+ const tracks = queue.tracks.map((t) => this.deserializeTrack(t));
451
+ player.queue.addMultiple(tracks);
452
+ }
453
+ // Restore current track if exists
454
+ if (queue.current && player.connection) {
455
+ const currentTrack = this.deserializeTrack(queue.current);
456
+ player.queue.willNextTrack(currentTrack);
457
+ // Restore playback position if requested
458
+ if (restorePosition && queue.position && queue.position > 0) {
459
+ await player.refreshPlayerResource(true, queue.position);
460
+ }
461
+ else {
462
+ await player.play(currentTrack);
463
+ }
464
+ }
465
+ // Restore volume
466
+ player.setVolume(data.volume);
467
+ // Restore filters - safely access through public method
468
+ if (data.filters && data.filters.length > 0) {
469
+ try {
470
+ const filterManager = player.filter;
471
+ if (filterManager && typeof filterManager.applyFilters === "function") {
472
+ await filterManager.applyFilters(data.filters);
473
+ }
474
+ }
475
+ catch (e) {
476
+ this.debug(`Failed to restore filters for ${guildId}:`, e);
477
+ }
478
+ }
479
+ this.debug(`Loaded player: ${guildId}`);
480
+ this.emit("playerLoaded", guildId, data);
481
+ return true;
482
+ }
483
+ catch (error) {
484
+ this.debug(`Failed to load player ${guildId}:`, error);
485
+ this.emit("error", error);
486
+ return false;
487
+ }
488
+ }
489
+ /**
490
+ * Load all saved players
491
+ */
492
+ async loadAll(restorePosition = true) {
493
+ if (!this.options.enabled)
494
+ return new Map();
495
+ const results = new Map();
496
+ try {
497
+ const keys = await this.provider.list();
498
+ this.debug(`Found ${keys.length} saved players`);
499
+ for (const guildId of keys) {
500
+ const success = await this.loadPlayer(guildId, restorePosition);
501
+ results.set(guildId, success);
502
+ }
503
+ this.emit("loadedAll", results);
504
+ }
505
+ catch (error) {
506
+ this.debug("Failed to load players:", error);
507
+ this.emit("error", error);
508
+ }
509
+ return results;
510
+ }
511
+ /**
512
+ * Delete a player's saved data
513
+ */
514
+ async deletePlayer(guildId) {
515
+ if (!this.options.enabled)
516
+ return false;
517
+ try {
518
+ await this.provider.delete(guildId);
519
+ this.debug(`Deleted saved data for: ${guildId}`);
520
+ this.emit("playerDeleted", guildId);
521
+ return true;
522
+ }
523
+ catch (error) {
524
+ this.debug(`Failed to delete player ${guildId}:`, error);
525
+ return false;
526
+ }
527
+ }
528
+ /**
529
+ * Restore from backup
530
+ */
531
+ async restoreBackup(guildId, timestamp) {
532
+ if (!(this.provider instanceof FileProvider)) {
533
+ this.debug("Restore from backup only supported for file provider");
534
+ return false;
535
+ }
536
+ return await this.provider.restoreBackup(guildId, timestamp);
537
+ }
538
+ /**
539
+ * Stop auto-save and clean up
540
+ */
541
+ async shutdown() {
542
+ if (this.saveInterval) {
543
+ clearInterval(this.saveInterval);
544
+ this.saveInterval = null;
545
+ }
546
+ await this.saveAll();
547
+ this.debug("Persistence manager shut down");
548
+ }
549
+ }
550
+ exports.PersistenceManager = PersistenceManager;
551
+ //# sourceMappingURL=PersistenceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistenceManager.js","sourceRoot":"","sources":["../../src/persistence/PersistenceManager.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BasePlugin = void 0;
4
4
  class BasePlugin {
5
5
  constructor() {
6
- this.priority = 0;
6
+ this.priority = 0; // Higher = run first
7
7
  }
8
8
  getFallback(track, signal) {
9
9
  throw new Error("getFallback not implemented");
@@ -1 +1 @@
1
- {"version":3,"file":"BasePlugin.js","sourceRoot":"","sources":["../../src/plugins/BasePlugin.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;IAAhC;QAGC,aAAQ,GAAY,CAAC,CAAC;IAqBvB,CAAC;IAfA,WAAW,CAAE,KAAY,EAAE,MAAoB;QAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAE,QAAe,EAAE,IAA6D;QAC/F,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAE,GAAW;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe,CAAE,GAAW,EAAE,WAAmB;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;CACD;AAxBD,gCAwBC"}
1
+ {"version":3,"file":"BasePlugin.js","sourceRoot":"","sources":["../../src/plugins/BasePlugin.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;IAAhC;QAGC,aAAQ,GAAY,CAAC,CAAC,CAAC,qBAAqB;IAqB7C,CAAC;IAfA,WAAW,CAAE,KAAY,EAAE,MAAoB;QAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAE,QAAe,EAAE,IAA6D;QAC/F,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAE,GAAW;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe,CAAE,GAAW,EAAE,WAAmB;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;CACD;AAxBD,gCAwBC"}
@@ -4,6 +4,8 @@ import type { PlayerManager } from "../structures/PlayerManager";
4
4
  import type { Player } from "../structures/Player";
5
5
  type PluginManagerOptions = {
6
6
  extractorTimeout: number | undefined;
7
+ maxFallbackAttempts?: number;
8
+ enableCache?: boolean;
7
9
  };
8
10
  export { BasePlugin } from "./BasePlugin";
9
11
  export declare class PluginManager {
@@ -11,6 +13,9 @@ export declare class PluginManager {
11
13
  private player;
12
14
  private manager;
13
15
  private plugins;
16
+ private streamCache;
17
+ private readonly STREAM_CACHE_TTL;
18
+ private pendingStreams;
14
19
  constructor(player: Player, manager: PlayerManager, options: PluginManagerOptions);
15
20
  debug(message?: any, ...optionalParams: any[]): void;
16
21
  register(plugin: BasePlugin): void;
@@ -19,15 +24,25 @@ export declare class PluginManager {
19
24
  getAll(): BasePlugin[];
20
25
  findPlugin(query: string): BasePlugin | undefined;
21
26
  clear(): void;
27
+ private getStreamCacheKey;
28
+ private getCachedStream;
29
+ private setCachedStream;
30
+ private getStreamWithDedupe;
31
+ private getStreamInternal;
22
32
  getStream(track: Track): Promise<StreamInfo | null>;
23
33
  /**
24
34
  * Get related tracks for a given track
25
35
  * @param {Track} track Track to find related tracks for
26
- * @returns {Track[]} Related tracks or empty array
27
- * @example
28
- * const related = await player.getRelatedTracks(track);
29
- * console.log(`Found ${related.length} related tracks`);
36
+ * @returns {Promise<Track[]>} Related tracks or empty array
30
37
  */
31
38
  getRelatedTracks(track: Track): Promise<Track[]>;
39
+ /**
40
+ * Clear stream cache
41
+ */
42
+ clearStreamCache(): void;
43
+ /**
44
+ * Get plugin statistics
45
+ */
46
+ getStats(): object;
32
47
  }
33
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,KAAK,oBAAoB,GAAG;IAC3B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,qBAAa,aAAa;IACzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAsC;gBAEzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB;IAMjF,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAMpD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIlC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC,MAAM,IAAI,UAAU,EAAE;IAItB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIjD,KAAK,IAAI,IAAI;IAIP,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAqFzD;;;;;;;OAOG;IACG,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAuFtD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,KAAK,oBAAoB,GAAG;IAC3B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAsE1C,qBAAa,aAAa;IACzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,OAAO,CAAC,cAAc,CAAsD;gBAEhE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB;IAUjF,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAMpD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IASlC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC,MAAM,IAAI,UAAU,EAAE;IAItB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAYjD,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,eAAe;YAYT,mBAAmB;YAqBnB,iBAAiB;IA+EzB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAmBzD;;;;OAIG;IACG,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA2EtD;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAMxB;;OAEG;IACH,QAAQ,IAAI,MAAM;CAQlB"}