magmastream 2.10.3-alpha.7 → 2.10.3-alpha.9

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.
@@ -73,9 +73,18 @@ export declare enum SearchPlatform {
73
73
  YouTubeMusic = "ytmsearch"
74
74
  }
75
75
  /**
76
- * NodeLink-only Search Platform Enum
76
+ * NodeLink Search Platform Enum
77
77
  */
78
78
  export declare enum NodeLinkSearchPlatform {
79
+ Unified = "search",
80
+ YouTube = "ytsearch",
81
+ YouTubeMusic = "ytmsearch",
82
+ SoundCloud = "scsearch",
83
+ Spotify = "spsearch",
84
+ AppleMusic = "amsearch",
85
+ Deezer = "dzsearch",
86
+ Tidal = "tdsearch",
87
+ Bandcamp = "bcsearch",
79
88
  AmazonMusic = "amazonmusic",
80
89
  AmazonMusicSearch = "azsearch",
81
90
  Anghami = "agsearch",
@@ -85,14 +94,19 @@ export declare enum NodeLinkSearchPlatform {
85
94
  Bilibili = "bilibili",
86
95
  BilibiliSearch = "bilisearch",
87
96
  Bluesky = "bksearch",
97
+ EternalBoxDirect = "eternalbox",
98
+ EternalBox = "ebox",
99
+ EternalBoxJukebox = "jukebox",
88
100
  Flowery = "flowery",
89
101
  FloweryTTS = "ftts",
90
102
  Gaana = "gaanasearch",
91
103
  GaanaSearch = "gnsearch",
92
104
  GoogleDrive = "gdsearch",
93
105
  GoogleTTS = "gtts",
106
+ GoogleTTSSpeak = "speak",
94
107
  IHeartRadio = "iheartradio",
95
108
  IHeartRadioSearch = "ihsearch",
109
+ Jiosaavn = "jssearch",
96
110
  LastFM = "lfsearch",
97
111
  LazyTTS = "lazypytts",
98
112
  LazyTTSAlt = "lazytts",
@@ -104,9 +118,35 @@ export declare enum NodeLinkSearchPlatform {
104
118
  NicoVideoSearch = "ncsearch",
105
119
  Pandora = "pdsearch",
106
120
  PiperTTS = "pipertts",
121
+ Qobuz = "qbsearch",
107
122
  Shazam = "shsearch",
108
123
  ShazamAlt = "szsearch",
109
- SongLink = "slsearch"
124
+ SongLink = "slsearch",
125
+ VKMusic = "vksearch",
126
+ Yandex = "ymsearch"
127
+ }
128
+ /**
129
+ * NodeLink Search Type Modifier Enum
130
+ */
131
+ export declare enum NodeLinkSearchType {
132
+ Track = "track",
133
+ Playlist = "playlist",
134
+ Album = "album",
135
+ Artist = "artist",
136
+ Channel = "channel",
137
+ User = "user",
138
+ Users = "users",
139
+ People = "people",
140
+ Tracks = "tracks",
141
+ Sounds = "sounds",
142
+ Sound = "sound",
143
+ Albums = "albums",
144
+ Playlists = "playlists",
145
+ Set = "set",
146
+ Sets = "sets",
147
+ All = "all",
148
+ Everything = "everything",
149
+ Video = "video"
110
150
  }
111
151
  /**
112
152
  * Player State Event Types Enum
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MagmaStreamErrorNumbers = exports.MagmaStreamErrorCode = exports.AvailableFilters = exports.SponsorBlockSegment = exports.SeverityTypes = exports.TrackEndReasonTypes = exports.ManagerEventTypes = exports.TrackPartial = exports.UseNodeOptions = exports.TrackSourceTypes = exports.PlayerStateEventTypes = exports.NodeLinkSearchPlatform = exports.SearchPlatform = exports.LoadTypes = exports.StateTypes = exports.AutoPlayPlatform = exports.StateStorageType = void 0;
3
+ exports.MagmaStreamErrorNumbers = exports.MagmaStreamErrorCode = exports.AvailableFilters = exports.SponsorBlockSegment = exports.SeverityTypes = exports.TrackEndReasonTypes = exports.ManagerEventTypes = exports.TrackPartial = exports.UseNodeOptions = exports.TrackSourceTypes = exports.PlayerStateEventTypes = exports.NodeLinkSearchType = exports.NodeLinkSearchPlatform = exports.SearchPlatform = exports.LoadTypes = exports.StateTypes = exports.AutoPlayPlatform = exports.StateStorageType = void 0;
4
4
  /**
5
5
  * State Storage Enum
6
6
  */
@@ -81,10 +81,19 @@ var SearchPlatform;
81
81
  SearchPlatform["YouTubeMusic"] = "ytmsearch";
82
82
  })(SearchPlatform || (exports.SearchPlatform = SearchPlatform = {}));
83
83
  /**
84
- * NodeLink-only Search Platform Enum
84
+ * NodeLink Search Platform Enum
85
85
  */
86
86
  var NodeLinkSearchPlatform;
87
87
  (function (NodeLinkSearchPlatform) {
88
+ NodeLinkSearchPlatform["Unified"] = "search";
89
+ NodeLinkSearchPlatform["YouTube"] = "ytsearch";
90
+ NodeLinkSearchPlatform["YouTubeMusic"] = "ytmsearch";
91
+ NodeLinkSearchPlatform["SoundCloud"] = "scsearch";
92
+ NodeLinkSearchPlatform["Spotify"] = "spsearch";
93
+ NodeLinkSearchPlatform["AppleMusic"] = "amsearch";
94
+ NodeLinkSearchPlatform["Deezer"] = "dzsearch";
95
+ NodeLinkSearchPlatform["Tidal"] = "tdsearch";
96
+ NodeLinkSearchPlatform["Bandcamp"] = "bcsearch";
88
97
  NodeLinkSearchPlatform["AmazonMusic"] = "amazonmusic";
89
98
  NodeLinkSearchPlatform["AmazonMusicSearch"] = "azsearch";
90
99
  NodeLinkSearchPlatform["Anghami"] = "agsearch";
@@ -94,14 +103,19 @@ var NodeLinkSearchPlatform;
94
103
  NodeLinkSearchPlatform["Bilibili"] = "bilibili";
95
104
  NodeLinkSearchPlatform["BilibiliSearch"] = "bilisearch";
96
105
  NodeLinkSearchPlatform["Bluesky"] = "bksearch";
106
+ NodeLinkSearchPlatform["EternalBoxDirect"] = "eternalbox";
107
+ NodeLinkSearchPlatform["EternalBox"] = "ebox";
108
+ NodeLinkSearchPlatform["EternalBoxJukebox"] = "jukebox";
97
109
  NodeLinkSearchPlatform["Flowery"] = "flowery";
98
110
  NodeLinkSearchPlatform["FloweryTTS"] = "ftts";
99
111
  NodeLinkSearchPlatform["Gaana"] = "gaanasearch";
100
112
  NodeLinkSearchPlatform["GaanaSearch"] = "gnsearch";
101
113
  NodeLinkSearchPlatform["GoogleDrive"] = "gdsearch";
102
114
  NodeLinkSearchPlatform["GoogleTTS"] = "gtts";
115
+ NodeLinkSearchPlatform["GoogleTTSSpeak"] = "speak";
103
116
  NodeLinkSearchPlatform["IHeartRadio"] = "iheartradio";
104
117
  NodeLinkSearchPlatform["IHeartRadioSearch"] = "ihsearch";
118
+ NodeLinkSearchPlatform["Jiosaavn"] = "jssearch";
105
119
  NodeLinkSearchPlatform["LastFM"] = "lfsearch";
106
120
  NodeLinkSearchPlatform["LazyTTS"] = "lazypytts";
107
121
  NodeLinkSearchPlatform["LazyTTSAlt"] = "lazytts";
@@ -113,10 +127,37 @@ var NodeLinkSearchPlatform;
113
127
  NodeLinkSearchPlatform["NicoVideoSearch"] = "ncsearch";
114
128
  NodeLinkSearchPlatform["Pandora"] = "pdsearch";
115
129
  NodeLinkSearchPlatform["PiperTTS"] = "pipertts";
130
+ NodeLinkSearchPlatform["Qobuz"] = "qbsearch";
116
131
  NodeLinkSearchPlatform["Shazam"] = "shsearch";
117
132
  NodeLinkSearchPlatform["ShazamAlt"] = "szsearch";
118
133
  NodeLinkSearchPlatform["SongLink"] = "slsearch";
134
+ NodeLinkSearchPlatform["VKMusic"] = "vksearch";
135
+ NodeLinkSearchPlatform["Yandex"] = "ymsearch";
119
136
  })(NodeLinkSearchPlatform || (exports.NodeLinkSearchPlatform = NodeLinkSearchPlatform = {}));
137
+ /**
138
+ * NodeLink Search Type Modifier Enum
139
+ */
140
+ var NodeLinkSearchType;
141
+ (function (NodeLinkSearchType) {
142
+ NodeLinkSearchType["Track"] = "track";
143
+ NodeLinkSearchType["Playlist"] = "playlist";
144
+ NodeLinkSearchType["Album"] = "album";
145
+ NodeLinkSearchType["Artist"] = "artist";
146
+ NodeLinkSearchType["Channel"] = "channel";
147
+ NodeLinkSearchType["User"] = "user";
148
+ NodeLinkSearchType["Users"] = "users";
149
+ NodeLinkSearchType["People"] = "people";
150
+ NodeLinkSearchType["Tracks"] = "tracks";
151
+ NodeLinkSearchType["Sounds"] = "sounds";
152
+ NodeLinkSearchType["Sound"] = "sound";
153
+ NodeLinkSearchType["Albums"] = "albums";
154
+ NodeLinkSearchType["Playlists"] = "playlists";
155
+ NodeLinkSearchType["Set"] = "set";
156
+ NodeLinkSearchType["Sets"] = "sets";
157
+ NodeLinkSearchType["All"] = "all";
158
+ NodeLinkSearchType["Everything"] = "everything";
159
+ NodeLinkSearchType["Video"] = "video";
160
+ })(NodeLinkSearchType || (exports.NodeLinkSearchType = NodeLinkSearchType = {}));
120
161
  /**
121
162
  * Player State Event Types Enum
122
163
  */
@@ -80,7 +80,6 @@ class Filters {
80
80
  distortion,
81
81
  equalizer,
82
82
  karaoke,
83
- lowPass,
84
83
  pluginFilters,
85
84
  rotation,
86
85
  timescale,
@@ -94,6 +93,7 @@ class Filters {
94
93
  compressor,
95
94
  echo,
96
95
  flanger,
96
+ lowpass: lowPass,
97
97
  highpass,
98
98
  phaser,
99
99
  phonograph,
@@ -101,7 +101,9 @@ class Filters {
101
101
  spatial,
102
102
  tape,
103
103
  }
104
- : {}),
104
+ : {
105
+ lowPass,
106
+ }),
105
107
  };
106
108
  try {
107
109
  await this.player.node.rest.updatePlayer({
@@ -135,8 +135,11 @@ export declare class Manager extends EventEmitter {
135
135
  * @returns A promise that resolves when the player states have been loaded.
136
136
  */
137
137
  loadPlayerStates(nodeId: string): Promise<void>;
138
+ private normalizeSearchType;
139
+ private buildLoadTracksIdentifier;
138
140
  private isNodeLinkSearchSource;
139
141
  private isPrefixedLoadTracksIdentifier;
142
+ private hasNodeLinkSearchTypeModifier;
140
143
  private requiresNodeLinkSearchNode;
141
144
  private requiresLavalinkSearchNode;
142
145
  private getSearchNode;
@@ -21,7 +21,10 @@ function escapeRegExp(value) {
21
21
  }
22
22
  const YOUTUBE_URL_PATTERN = /(youtube\.com|youtu\.be)/;
23
23
  const BLOCKED_WORDS_PATTERN = new RegExp(`\\b(${blockedWords_1.blockedWords.map(escapeRegExp).join("|")})\\b`, "gi");
24
+ const PORTABLE_SEARCH_PREFIXES = new Set(Object.values(Enums_1.SearchPlatform).map((source) => source.toLowerCase()));
24
25
  const NODELINK_SEARCH_PREFIXES = new Set(Object.values(Enums_1.NodeLinkSearchPlatform).map((source) => source.toLowerCase()));
26
+ const NODELINK_ONLY_SEARCH_PREFIXES = new Set([...NODELINK_SEARCH_PREFIXES].filter((source) => !PORTABLE_SEARCH_PREFIXES.has(source)));
27
+ const NODELINK_SEARCH_TYPE_MODIFIERS = new Set(Object.values(Enums_1.NodeLinkSearchType).map((type) => type.toLowerCase()));
25
28
  const KNOWN_LOADTRACKS_PREFIXES = new Set([
26
29
  ...Object.values(Enums_1.SearchPlatform).map((source) => source.toLowerCase()),
27
30
  ...NODELINK_SEARCH_PREFIXES,
@@ -38,10 +41,15 @@ const KNOWN_LOADTRACKS_PREFIXES = new Set([
38
41
  "lmrec",
39
42
  ]);
40
43
  const NODELINK_ONLY_LOADTRACKS_PREFIXES = new Set(["ytrec", "jsrec", "lmrec"]);
44
+ const SEARCH_TYPE_PATTERN = /^[A-Za-z0-9]+$/;
41
45
  function getIdentifierPrefix(identifier) {
42
46
  const match = /^([A-Za-z0-9]+):/.exec(identifier);
43
47
  return match?.[1]?.toLowerCase() ?? null;
44
48
  }
49
+ function getIdentifierSearchType(identifier) {
50
+ const match = /^[A-Za-z0-9]+:([A-Za-z0-9]+):/.exec(identifier);
51
+ return match?.[1]?.toLowerCase() ?? null;
52
+ }
45
53
  /**
46
54
  * The main hub for interacting with Lavalink and using Magmastream.
47
55
  */
@@ -224,15 +232,16 @@ class Manager extends events_1.EventEmitter {
224
232
  */
225
233
  async search(query, requester) {
226
234
  const _query = typeof query === "string" ? { query } : query;
227
- const _source = _query.source ?? this.options.defaultSearchPlatform;
235
+ const _source = _query.source ?? this.options.defaultSearchPlatform ?? Enums_1.SearchPlatform.YouTube;
228
236
  const isUrl = /^https?:\/\//.test(_query.query);
229
237
  const isPrefixedIdentifier = this.isPrefixedLoadTracksIdentifier(_query.query);
230
- const search = isUrl || isPrefixedIdentifier ? _query.query : `${_source}:${_query.query}`;
231
- const node = this.getSearchNode(_source, search);
238
+ const searchType = this.normalizeSearchType(_query.searchType);
239
+ const search = this.buildLoadTracksIdentifier(_source, _query.query, searchType, isUrl, isPrefixedIdentifier);
240
+ const node = this.getSearchNode(_source, search, searchType);
232
241
  if (!node) {
233
242
  throw new MagmastreamError_1.MagmaStreamError({
234
243
  code: Enums_1.MagmaStreamErrorCode.MANAGER_NO_NODES,
235
- message: this.requiresNodeLinkSearchNode(_source, search)
244
+ message: this.requiresNodeLinkSearchNode(_source, search, searchType)
236
245
  ? "No available NodeLink nodes to perform the NodeLink-specific search."
237
246
  : this.requiresLavalinkSearchNode(search)
238
247
  ? "No available Lavalink nodes to perform the Lavalink-specific search."
@@ -241,8 +250,8 @@ class Manager extends events_1.EventEmitter {
241
250
  });
242
251
  }
243
252
  this.emit(Enums_1.ManagerEventTypes.Debug, isUrl || isPrefixedIdentifier
244
- ? `[MANAGER] Performing search on ${node.options.identifier} for: ${_query.query}`
245
- : `[MANAGER] Performing ${_source} search on ${node.options.identifier} for: ${_query.query}`);
253
+ ? `[MANAGER] Performing search on ${node.options.identifier} for: ${search}`
254
+ : `[MANAGER] Performing ${_source}${searchType ? `:${searchType}` : ""} search on ${node.options.identifier} for: ${_query.query}`);
246
255
  try {
247
256
  const lavalinkResponse = (await node.rest.get(`/v4/loadtracks?identifier=${encodeURIComponent(search)}`));
248
257
  if (!lavalinkResponse) {
@@ -759,20 +768,54 @@ class Manager extends events_1.EventEmitter {
759
768
  this.emit(Enums_1.ManagerEventTypes.Debug, "[MANAGER] Finished loading saved players.");
760
769
  this.emit(Enums_1.ManagerEventTypes.RestoreComplete, node);
761
770
  }
771
+ normalizeSearchType(searchType) {
772
+ if (searchType === undefined || searchType === null)
773
+ return null;
774
+ if (typeof searchType !== "string" || !SEARCH_TYPE_PATTERN.test(searchType)) {
775
+ throw new MagmastreamError_1.MagmaStreamError({
776
+ code: Enums_1.MagmaStreamErrorCode.MANAGER_SEARCH_FAILED,
777
+ message: 'Search option "searchType" must be an alphanumeric NodeLink search type modifier.',
778
+ context: { searchType },
779
+ });
780
+ }
781
+ return searchType.toLowerCase();
782
+ }
783
+ buildLoadTracksIdentifier(source, query, searchType, isUrl, isPrefixedIdentifier) {
784
+ if (isUrl)
785
+ return query;
786
+ if (isPrefixedIdentifier) {
787
+ if (!searchType || this.hasNodeLinkSearchTypeModifier(query))
788
+ return query;
789
+ const prefix = getIdentifierPrefix(query);
790
+ if (!prefix)
791
+ return query;
792
+ return `${prefix}:${searchType}:${query.slice(prefix.length + 1)}`;
793
+ }
794
+ return searchType ? `${source}:${searchType}:${query}` : `${source}:${query}`;
795
+ }
762
796
  isNodeLinkSearchSource(source) {
763
- return typeof source === "string" && NODELINK_SEARCH_PREFIXES.has(source.toLowerCase());
797
+ return typeof source === "string" && NODELINK_ONLY_SEARCH_PREFIXES.has(source.toLowerCase());
764
798
  }
765
799
  isPrefixedLoadTracksIdentifier(identifier) {
766
800
  const prefix = getIdentifierPrefix(identifier);
767
801
  return prefix !== null && KNOWN_LOADTRACKS_PREFIXES.has(prefix);
768
802
  }
769
- requiresNodeLinkSearchNode(source, identifier) {
803
+ hasNodeLinkSearchTypeModifier(identifier) {
804
+ const prefix = getIdentifierPrefix(identifier);
805
+ const searchType = getIdentifierSearchType(identifier);
806
+ return prefix !== null && searchType !== null && KNOWN_LOADTRACKS_PREFIXES.has(prefix) && NODELINK_SEARCH_TYPE_MODIFIERS.has(searchType);
807
+ }
808
+ requiresNodeLinkSearchNode(source, identifier, searchType) {
809
+ if (searchType)
810
+ return true;
770
811
  if (this.isNodeLinkSearchSource(source))
771
812
  return true;
772
813
  const prefix = getIdentifierPrefix(identifier);
773
814
  if (prefix === null)
774
815
  return false;
775
- if (NODELINK_SEARCH_PREFIXES.has(prefix) || NODELINK_ONLY_LOADTRACKS_PREFIXES.has(prefix))
816
+ if (NODELINK_ONLY_SEARCH_PREFIXES.has(prefix) || NODELINK_ONLY_LOADTRACKS_PREFIXES.has(prefix))
817
+ return true;
818
+ if (this.hasNodeLinkSearchTypeModifier(identifier))
776
819
  return true;
777
820
  const normalizedIdentifier = identifier.toLowerCase();
778
821
  return prefix === "sprec" && !normalizedIdentifier.startsWith("sprec:mix:");
@@ -780,13 +823,13 @@ class Manager extends events_1.EventEmitter {
780
823
  requiresLavalinkSearchNode(identifier) {
781
824
  return identifier.toLowerCase().startsWith("sprec:mix:");
782
825
  }
783
- getSearchNode(source, identifier) {
784
- if (this.requiresNodeLinkSearchNode(source, identifier)) {
785
- return this.getPreferredNode((node) => node.isNodeLink);
786
- }
826
+ getSearchNode(source, identifier, searchType) {
787
827
  if (this.requiresLavalinkSearchNode(identifier)) {
788
828
  return this.getPreferredNode((node) => !node.isNodeLink);
789
829
  }
830
+ if (this.requiresNodeLinkSearchNode(source, identifier, searchType)) {
831
+ return this.getPreferredNode((node) => node.isNodeLink);
832
+ }
790
833
  return this.useableNode ?? null;
791
834
  }
792
835
  getPreferredNode(predicate) {
@@ -569,9 +569,11 @@ class Node {
569
569
  this.socketClosed(player, payload);
570
570
  break;
571
571
  case "SegmentsLoaded":
572
+ case "SponsorBlockSegmentsLoadedEvent":
572
573
  this.sponsorBlockSegmentLoaded(player, track, payload);
573
574
  break;
574
575
  case "SegmentSkipped":
576
+ case "SponsorBlockSegmentSkippedEvent":
575
577
  this.sponsorBlockSegmentSkipped(player, track, payload);
576
578
  break;
577
579
  case "ChaptersLoaded":
@@ -6,7 +6,7 @@ import type { User as SeyfertUser, ClientUser as SeyfertClientUser, Message as S
6
6
  import { JsonQueue } from "../statestorage/JsonQueue";
7
7
  import { MemoryQueue } from "../statestorage/MemoryQueue";
8
8
  import { RedisQueue } from "../statestorage/RedisQueue";
9
- import { AutoPlayPlatform, LoadTypes, ManagerEventTypes, NodeLinkSearchPlatform, PlayerStateEventTypes, SearchPlatform, SeverityTypes, StateStorageType, TrackEndReasonTypes, TrackPartial, TrackSourceTypes, UseNodeOptions } from "./Enums";
9
+ import { AutoPlayPlatform, LoadTypes, ManagerEventTypes, NodeLinkSearchPlatform, NodeLinkSearchType, PlayerStateEventTypes, SearchPlatform, SeverityTypes, StateStorageType, TrackEndReasonTypes, TrackPartial, TrackSourceTypes, UseNodeOptions } from "./Enums";
10
10
  import { Node } from "./Node";
11
11
  import { Player } from "./Player";
12
12
  import { Plugin } from "./Plugin";
@@ -426,6 +426,12 @@ export interface TrackPluginInfo {
426
426
  export interface SearchQuery {
427
427
  /** The source to search from. */
428
428
  source?: SearchSource;
429
+ /**
430
+ * NodeLink search type modifier.
431
+ *
432
+ * Builds identifiers like `ytsearch:playlist:query` and routes the search to a NodeLink node.
433
+ */
434
+ searchType?: NodeLinkSearchType | string;
429
435
  /** The query to search for. */
430
436
  query: string;
431
437
  }
@@ -798,7 +804,7 @@ export interface WebSocketClosedEvent extends PlayerEvent {
798
804
  * SponsorBlockSegmentsLoaded interface
799
805
  */
800
806
  export interface SponsorBlockSegmentsLoaded extends PlayerEvent {
801
- type: "SegmentsLoaded";
807
+ type: "SegmentsLoaded" | "SponsorBlockSegmentsLoadedEvent";
802
808
  segments: {
803
809
  category: string;
804
810
  start: number;
@@ -809,7 +815,7 @@ export interface SponsorBlockSegmentsLoaded extends PlayerEvent {
809
815
  * SponsorBlockSegmentSkipped interface
810
816
  */
811
817
  export interface SponsorBlockSegmentSkipped extends PlayerEvent {
812
- type: "SegmentSkipped";
818
+ type: "SegmentSkipped" | "SponsorBlockSegmentSkippedEvent";
813
819
  segment: {
814
820
  category: string;
815
821
  start: number;
@@ -1554,6 +1560,7 @@ export interface LavalinkFilters {
1554
1560
  rotation?: RotationOptions | null;
1555
1561
  channelMix?: ChannelMixOptions | null;
1556
1562
  lowPass?: LowPassOptions | null;
1563
+ lowpass?: LowPassOptions | null;
1557
1564
  highpass?: HighPassOptions | null;
1558
1565
  echo?: EchoOptions | null;
1559
1566
  reverb?: ReverbOptions | null;
@@ -1644,7 +1651,7 @@ export type TrackEndReason = keyof typeof TrackEndReasonTypes;
1644
1651
  /**
1645
1652
  * Player Event Type Enum type
1646
1653
  */
1647
- export type PlayerEventType = "TrackStartEvent" | "TrackEndEvent" | "TrackExceptionEvent" | "TrackStuckEvent" | "MixStartedEvent" | "MixEndedEvent" | "WebSocketClosedEvent" | "SegmentSkipped" | "SegmentsLoaded" | "ChaptersLoaded" | "ChapterStarted" | "LyricsFoundEvent" | "LyricsNotFoundEvent" | "LyricsLineEvent";
1654
+ export type PlayerEventType = "TrackStartEvent" | "TrackEndEvent" | "TrackExceptionEvent" | "TrackStuckEvent" | "MixStartedEvent" | "MixEndedEvent" | "WebSocketClosedEvent" | "SegmentSkipped" | "SegmentsLoaded" | "SponsorBlockSegmentSkippedEvent" | "SponsorBlockSegmentsLoadedEvent" | "ChaptersLoaded" | "ChapterStarted" | "LyricsFoundEvent" | "LyricsNotFoundEvent" | "LyricsLineEvent";
1648
1655
  /**
1649
1656
  * Severity Types Enum type
1650
1657
  */
@@ -1656,7 +1663,7 @@ export type SponsorBlockSegmentEvents = SponsorBlockSegmentSkipped | SponsorBloc
1656
1663
  /**
1657
1664
  * SponsorBlock Segment Event Type Enum type
1658
1665
  */
1659
- export type SponsorBlockSegmentEventType = "SegmentSkipped" | "SegmentsLoaded" | "ChapterStarted" | "ChaptersLoaded";
1666
+ export type SponsorBlockSegmentEventType = "SegmentSkipped" | "SegmentsLoaded" | "SponsorBlockSegmentSkippedEvent" | "SponsorBlockSegmentsLoadedEvent" | "ChapterStarted" | "ChaptersLoaded";
1660
1667
  /**
1661
1668
  * Player Events Enum type
1662
1669
  */
@@ -105,12 +105,15 @@ class TrackUtils {
105
105
  bandcamp: "Bandcamp",
106
106
  bilibili: "Bilibili",
107
107
  deezer: "Deezer",
108
+ eternalbox: "EternalBox",
108
109
  flowery: "Flowery",
109
110
  gaana: "Gaana",
110
111
  googledrive: "GoogleDrive",
111
112
  googletts: "GoogleTTS",
113
+ iheartradio: "IHeartRadio",
112
114
  jiosaavn: "Jiosaavn",
113
115
  lastfm: "LastFM",
116
+ netease: "Netease",
114
117
  soundcloud: "SoundCloud",
115
118
  spotify: "Spotify",
116
119
  tidal: "Tidal",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "magmastream",
3
- "version": "2.10.3-alpha.7",
3
+ "version": "2.10.3-alpha.9",
4
4
  "description": "A user-friendly Lavalink client designed for NodeJS.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",