yukimu 1.2.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 -2
  6. package/dist/ConnectionPool.d.ts.map +1 -1
  7. package/dist/ConnectionPool.js +123 -44
  8. package/dist/ConnectionPool.js.map +1 -1
  9. package/dist/Constants.d.ts +26 -47
  10. package/dist/Constants.d.ts.map +1 -1
  11. package/dist/Constants.js +134 -67
  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 +217 -79
  20. package/dist/Node.js.map +1 -1
  21. package/dist/Player.d.ts +77 -6
  22. package/dist/Player.d.ts.map +1 -1
  23. package/dist/Player.js +319 -75
  24. package/dist/Player.js.map +1 -1
  25. package/dist/Plugin.d.ts +16 -12
  26. package/dist/Plugin.d.ts.map +1 -1
  27. package/dist/Plugin.js +5 -9
  28. package/dist/Plugin.js.map +1 -1
  29. package/dist/Queue.d.ts +69 -3
  30. package/dist/Queue.d.ts.map +1 -1
  31. package/dist/Queue.js +123 -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 +233 -27
  36. package/dist/Resolver.js.map +1 -1
  37. package/dist/Rest.d.ts +25 -3
  38. package/dist/Rest.d.ts.map +1 -1
  39. package/dist/Rest.js +165 -23
  40. package/dist/Rest.js.map +1 -1
  41. package/dist/TrackCache.d.ts +28 -8
  42. package/dist/TrackCache.d.ts.map +1 -1
  43. package/dist/TrackCache.js +111 -24
  44. package/dist/TrackCache.js.map +1 -1
  45. package/dist/WsQueue.d.ts +30 -9
  46. package/dist/WsQueue.d.ts.map +1 -1
  47. package/dist/WsQueue.js +66 -24
  48. package/dist/WsQueue.js.map +1 -1
  49. package/dist/Yukimu.d.ts +37 -13
  50. package/dist/Yukimu.d.ts.map +1 -1
  51. package/dist/Yukimu.js +146 -59
  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 +21 -19
  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 +13 -17
  62. package/dist/connector/Eris.d.ts.map +1 -1
  63. package/dist/connector/Eris.js +36 -4
  64. package/dist/connector/Eris.js.map +1 -1
  65. package/dist/connector/Oceanic.d.ts +13 -14
  66. package/dist/connector/Oceanic.d.ts.map +1 -1
  67. package/dist/connector/Oceanic.js +35 -2
  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 -9
  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 -21
  76. package/dist/index.js.map +1 -1
  77. package/dist/plugins/AutoResume.d.ts +18 -14
  78. package/dist/plugins/AutoResume.d.ts.map +1 -1
  79. package/dist/plugins/AutoResume.js +101 -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 +196 -78
  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 -131
  116. package/src/Constants.ts +0 -101
  117. package/src/Node.ts +0 -309
  118. package/src/Player.ts +0 -337
  119. package/src/Plugin.ts +0 -23
  120. package/src/Queue.ts +0 -91
  121. package/src/Resolver.ts +0 -79
  122. package/src/Rest.ts +0 -121
  123. package/src/TrackCache.ts +0 -69
  124. package/src/WsQueue.ts +0 -78
  125. package/src/Yukimu.ts +0 -248
  126. package/src/connector/Connector.ts +0 -13
  127. package/src/connector/DiscordJS.ts +0 -33
  128. package/src/connector/Eris.ts +0 -35
  129. package/src/connector/Oceanic.ts +0 -32
  130. package/src/errors/YukimuError.ts +0 -33
  131. package/src/index.ts +0 -46
  132. package/src/plugins/AutoResume.ts +0 -61
  133. package/src/plugins/PlayerMoved.ts +0 -26
  134. package/src/types.ts +0 -145
  135. package/tsconfig.json +0 -20
package/dist/Plugin.d.ts CHANGED
@@ -1,21 +1,25 @@
1
+ /** Yukimu v2.0.0 — Plugin Base Class */
1
2
  import type { Yukimu } from "./Yukimu";
2
3
  /**
3
- * Base Plugin class extend this to create Yukimu plugins.
4
- * Similar to Kazagumo's plugin system.
4
+ * Base class for Yukimu plugins.
5
5
  *
6
- * Example:
7
- * class MyPlugin extends Plugin {
8
- * public name = "MyPlugin";
9
- * public load(manager: Yukimu) {
10
- * manager.on("trackStart", (player, track) => { ... });
11
- * }
12
- * }
6
+ * Plugins extend Yukimu's functionality by hooking into events.
7
+ * Every plugin must implement `name` and `load()`.
8
+ * Plugins should also implement `unload()` to clean up listeners/timers.
13
9
  */
14
10
  export declare abstract class Plugin {
15
- abstract name: string;
16
- /** Called when plugin is loaded into Yukimu */
11
+ /** Unique name identifying this plugin */
12
+ abstract readonly name: string;
13
+ /**
14
+ * Called when the plugin is loaded into the Yukimu manager.
15
+ * Use this to register event listeners and initialize state.
16
+ */
17
17
  abstract load(manager: Yukimu): void;
18
- /** Called when plugin is unloaded */
18
+ /**
19
+ * Called when the plugin is unloaded.
20
+ * Clean up all event listeners, timers, and state here.
21
+ * Failure to implement this will cause memory leaks.
22
+ */
19
23
  unload?(manager: Yukimu): void;
20
24
  }
21
25
  //# sourceMappingURL=Plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../src/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,8BAAsB,MAAM;IAC1B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,+CAA+C;aAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAE3C,qCAAqC;IAC9B,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CACtC"}
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../src/Plugin.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;GAMG;AACH,8BAAsB,MAAM;IAC1B,0CAA0C;IAC1C,kBAAyB,IAAI,EAAE,MAAM,CAAC;IAEtC;;;OAGG;aACa,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAE3C;;;;OAIG;IACI,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CACtC"}
package/dist/Plugin.js CHANGED
@@ -1,17 +1,13 @@
1
1
  "use strict";
2
+ /** Yukimu v2.0.0 — Plugin Base Class */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.Plugin = void 0;
4
5
  /**
5
- * Base Plugin class extend this to create Yukimu plugins.
6
- * Similar to Kazagumo's plugin system.
6
+ * Base class for Yukimu plugins.
7
7
  *
8
- * Example:
9
- * class MyPlugin extends Plugin {
10
- * public name = "MyPlugin";
11
- * public load(manager: Yukimu) {
12
- * manager.on("trackStart", (player, track) => { ... });
13
- * }
14
- * }
8
+ * Plugins extend Yukimu's functionality by hooking into events.
9
+ * Every plugin must implement `name` and `load()`.
10
+ * Plugins should also implement `unload()` to clean up listeners/timers.
15
11
  */
16
12
  class Plugin {
17
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../src/Plugin.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;GAWG;AACH,MAAsB,MAAM;CAQ3B;AARD,wBAQC"}
1
+ {"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../src/Plugin.ts"],"names":[],"mappings":";AAAA,wCAAwC;;;AAIxC;;;;;;GAMG;AACH,MAAsB,MAAM;CAgB3B;AAhBD,wBAgBC"}
package/dist/Queue.d.ts CHANGED
@@ -1,23 +1,89 @@
1
+ /** Yukimu v2.0.0 — Track Queue with Enhanced Operations */
1
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
+ */
2
13
  export declare class Queue {
3
14
  current: Track | null;
4
15
  previous: Track[];
5
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
+ */
6
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
+ */
7
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
+ */
8
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
+ */
9
40
  removeRange(start: number, end: number): Track[];
41
+ /** Clear the entire queue, current track, and history */
10
42
  clear(): void;
43
+ /** Clear only the queue (keep current track and history) */
44
+ clearQueue(): void;
45
+ /** Shuffle the queue using Fisher-Yates algorithm */
11
46
  shuffle(): void;
12
- move(from: number, to: number): void;
13
- /** Skip to a specific position in queue */
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
+ */
14
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 */
15
64
  peek(count?: number): Track[];
65
+ /** Find the first track matching a predicate */
16
66
  find(predicate: (track: Track) => boolean): Track | undefined;
67
+ /** Filter tracks by a predicate */
17
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;
18
83
  get size(): number;
19
84
  get isEmpty(): boolean;
20
85
  get totalDuration(): number;
21
- get list(): ReadonlyArray<Track>;
86
+ /** Readonly access to the underlying track array */
87
+ get list(): readonly Track[];
22
88
  }
23
89
  //# sourceMappingURL=Queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,KAAK;IACT,OAAO,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC7B,QAAQ,EAAE,KAAK,EAAE,CAAM;IAC9B,OAAO,CAAC,MAAM,CAAe;IAItB,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IASrD,IAAI,IAAI,KAAK,GAAG,IAAI;IASpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAMnC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE;IAIhD,KAAK,IAAI,IAAI;IAQb,OAAO,IAAI,IAAI;IAOf,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM3C,2CAA2C;IACpC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAQnC,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,KAAK,EAAE;IAIjC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,SAAS;IAI7D,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,EAAE;IAM5D,IAAI,IAAI,IAAI,MAAM,CAA+B;IAEjD,IAAI,OAAO,IAAI,OAAO,CAAqC;IAE3D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAwB;CACzD"}
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 CHANGED
@@ -1,82 +1,188 @@
1
1
  "use strict";
2
+ /** Yukimu v2.0.0 — Track Queue with Enhanced Operations */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
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
+ */
4
16
  class Queue {
5
- constructor() {
6
- this.current = null;
7
- this.previous = [];
8
- this.tracks = [];
17
+ current = null;
18
+ previous = [];
19
+ tracks = [];
20
+ maxPreviousSize;
21
+ constructor(maxPreviousSize = Constants_1.DEFAULTS.PREVIOUS_HISTORY_SIZE) {
22
+ this.maxPreviousSize = maxPreviousSize;
9
23
  }
10
- // ─── Add / Remove ─────────────────────────────────────────────────
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
+ */
11
29
  add(tracks, position) {
12
30
  const arr = Array.isArray(tracks) ? tracks : [tracks];
13
- if (position !== undefined) {
31
+ if (arr.length === 0)
32
+ return;
33
+ if (position !== undefined && position >= 0 && position <= this.tracks.length) {
14
34
  this.tracks.splice(position, 0, ...arr);
15
35
  }
16
36
  else {
17
37
  this.tracks.push(...arr);
18
38
  }
19
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
+ */
20
44
  next() {
21
45
  if (this.current) {
22
46
  this.previous.unshift(this.current);
23
- if (this.previous.length > 10)
24
- this.previous.pop(); // keep last 10
47
+ if (this.previous.length > this.maxPreviousSize) {
48
+ this.previous.length = this.maxPreviousSize;
49
+ }
25
50
  }
26
51
  this.current = this.tracks.shift() ?? null;
27
52
  return this.current;
28
53
  }
54
+ /**
55
+ * Remove a track at a specific index.
56
+ * @returns The removed track, or null if index is out of bounds
57
+ */
29
58
  remove(index) {
30
59
  if (index < 0 || index >= this.tracks.length)
31
60
  return null;
32
61
  const [removed] = this.tracks.splice(index, 1);
33
- return removed;
62
+ return removed ?? null;
34
63
  }
64
+ /**
65
+ * Remove a range of tracks.
66
+ * @param start - Start index (inclusive)
67
+ * @param end - End index (exclusive)
68
+ */
35
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 [];
36
76
  return this.tracks.splice(start, end - start);
37
77
  }
78
+ /** Clear the entire queue, current track, and history */
38
79
  clear() {
39
80
  this.tracks = [];
40
81
  this.current = null;
41
82
  this.previous = [];
42
83
  }
43
- // ─── Reorder ──────────────────────────────────────────────────────
84
+ /** Clear only the queue (keep current track and history) */
85
+ clearQueue() {
86
+ this.tracks = [];
87
+ }
88
+ /** Shuffle the queue using Fisher-Yates algorithm */
44
89
  shuffle() {
45
90
  for (let i = this.tracks.length - 1; i > 0; i--) {
46
91
  const j = Math.floor(Math.random() * (i + 1));
47
92
  [this.tracks[i], this.tracks[j]] = [this.tracks[j], this.tracks[i]];
48
93
  }
49
94
  }
95
+ /** Move a track from one position to another */
50
96
  move(from, to) {
51
97
  if (from < 0 || to < 0 || from >= this.tracks.length || to >= this.tracks.length)
52
- return;
98
+ return false;
53
99
  const [track] = this.tracks.splice(from, 1);
100
+ if (!track)
101
+ return false;
54
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;
55
111
  }
56
- /** Skip to a specific position in queue */
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
+ */
57
116
  skipto(index) {
58
117
  if (index < 0 || index >= this.tracks.length)
59
118
  return null;
60
119
  this.tracks.splice(0, index);
61
120
  return this.next();
62
121
  }
63
- // ─── Peek / Find ──────────────────────────────────────────────────
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 */
64
142
  peek(count = 10) {
65
143
  return this.tracks.slice(0, count);
66
144
  }
145
+ /** Find the first track matching a predicate */
67
146
  find(predicate) {
68
147
  return this.tracks.find(predicate);
69
148
  }
149
+ /** Filter tracks by a predicate */
70
150
  filter(predicate) {
71
151
  return this.tracks.filter(predicate);
72
152
  }
73
- // ─── Getters ──────────────────────────────────────────────────────
74
- get size() { return this.tracks.length; }
75
- get isEmpty() { return this.tracks.length === 0; }
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
+ }
76
179
  get totalDuration() {
77
180
  return this.tracks.reduce((acc, t) => acc + (t.info?.length ?? 0), 0);
78
181
  }
79
- get list() { return this.tracks; }
182
+ /** Readonly access to the underlying track array */
183
+ get list() {
184
+ return this.tracks;
185
+ }
80
186
  }
81
187
  exports.Queue = Queue;
82
188
  //# sourceMappingURL=Queue.js.map
package/dist/Queue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":";AAAA,2DAA2D;;;AAE3D,2CAAuC;AAGvC;;;;;;;;;GASG;AACH,MAAa,KAAK;IACT,OAAO,GAAiB,IAAI,CAAC;IAC7B,QAAQ,GAAY,EAAE,CAAC;IACtB,MAAM,GAAY,EAAE,CAAC;IACZ,eAAe,CAAS;IAEzC,YAAY,eAAe,GAAG,oBAAQ,CAAC,qBAAqB;QAC1D,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,MAAuB,EAAE,QAAiB;QACnD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE7B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,IAAI;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAa;QACzB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,OAAO,IAAI,IAAI,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,KAAa,EAAE,GAAW;QAC3C,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACvD,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,yDAAyD;IAClD,KAAK;QACV,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,4DAA4D;IACrD,UAAU;QACf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,qDAAqD;IAC9C,OAAO;QACZ,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,gDAAgD;IACzC,IAAI,CAAC,IAAY,EAAE,EAAU;QAClC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/F,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IAC5B,IAAI,CAAC,CAAS,EAAE,CAAS;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACvF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAa;QACzB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,8BAA8B;IACvB,OAAO;QACZ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,gBAAgB;QACrB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACzC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,4DAA4D;IACrD,IAAI,CAAC,KAAK,GAAG,EAAE;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,gDAAgD;IACzC,IAAI,CAAC,SAAoC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,mCAAmC;IAC5B,MAAM,CAAC,SAAoC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,mDAAmD;IAC5C,OAAO,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,yEAAyE;IAEzE,gDAAgD;IACzC,MAAM;QAKX,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC7B,CAAC;IACJ,CAAC;IAED,+CAA+C;IACxC,QAAQ,CAAC,IAIf;QACC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED,yEAAyE;IAEzE,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,oDAAoD;IACpD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAjMD,sBAiMC"}
@@ -1,13 +1,44 @@
1
+ /** Yukimu v2.0.0 — Track Resolver with Retry, Caching & Fallback */
1
2
  import type { Yukimu } from "./Yukimu";
3
+ import type { Node } from "./Node";
2
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
+ */
3
16
  export declare class Resolver {
4
- private manager;
17
+ private readonly manager;
5
18
  private spotifyToken;
6
19
  private spotifyExpiry;
20
+ private spotifyRefreshing;
7
21
  constructor(manager: Yukimu);
8
- resolve(query: string, source: SearchSource, requester?: unknown): Promise<SearchResult>;
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
+ */
9
34
  detectSource(url: string): SearchSource | null;
35
+ private trySpotifyFallback;
10
36
  private getSpotifyToken;
11
37
  private resolveSpotifyMeta;
38
+ private resolveSpotifyPlaylist;
39
+ private resolveSpotifyAlbum;
40
+ private getLoadNode;
41
+ private attachRequester;
42
+ private sleep;
12
43
  }
13
44
  //# sourceMappingURL=Resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Resolver.d.ts","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAS,MAAM,SAAS,CAAC;AAEjE,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,aAAa,CAAa;gBAEtB,OAAO,EAAE,MAAM;IAId,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IA2B9F,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;YAOvC,eAAe;YAoBf,kBAAkB;CAWjC"}
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"}