@khang07/zing-mp3-api 1.3.6 → 1.4.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.
@@ -20,14 +20,18 @@ const isURL = (value) => {
20
20
  return false;
21
21
  }
22
22
  };
23
+ const ensureCookies = async (instance) => await instance.get('/');
23
24
  class Client {
24
25
  static BASE_URL = 'https://zingmp3.vn/';
25
26
  static VERSION_URL_V1 = '1.6.34';
26
- static VERSION_URL_V2 = '1.13.13';
27
+ static VERSION_URL_V2 = '1.10.49';
28
+ static VERSION_URL_V3 = '1.13.13';
27
29
  static SECRET_KEY_V1 = '2aa2d1c561e809b267f3638c4a307aab';
28
- static SECRET_KEY_V2 = '10a01dcf33762d3a204cb96429918ff6';
30
+ static SECRET_KEY_V2 = 'acOrvUS15XRW2o9JksiK1KgQ6Vbds8ZW';
31
+ static SECRET_KEY_V3 = '10a01dcf33762d3a204cb96429918ff6';
29
32
  static API_KEY_V1 = '88265e23d4284f25963e6eedac8fbfa3';
30
- static API_KEY_V2 = '38e8643fb0dc04e8d65b99994d3dafff';
33
+ static API_KEY_V2 = 'X5BM3w8N7MKozC0B85o4KMlzLZKhV00y';
34
+ static API_KEY_V3 = '38e8643fb0dc04e8d65b99994d3dafff';
31
35
  static API_VIDEO_PATH = '/api/v2/page/get/video';
32
36
  static API_MUSIC_PATH = '/api/v2/song/get/streaming';
33
37
  static EXTRA_API_MUSIC_PATH = '/api/song/get-song-info';
@@ -35,6 +39,7 @@ class Client {
35
39
  static API_PLAYLIST_PATH = '/api/v2/page/get/playlist';
36
40
  static API_MEDIA_DETAILS_PATH = '/api/v2/song/get/info';
37
41
  static API_ARTIST_PATH = '/api/v2/page/get/artist';
42
+ static API_ARTIST_MEDIA_LIST_PATH = '/api/v2/song/get/list';
38
43
  static getIDFromURL(url) {
39
44
  if (typeof url !== 'string' || !url.trim().length)
40
45
  throw new lapse.Lapse('URL must be a non-empty string', 'ERROR_INVALID_URL');
@@ -49,11 +54,18 @@ class Client {
49
54
  maxHighWaterMark;
50
55
  userAgent;
51
56
  jar;
52
- constructor(options = {}) {
53
- this.maxLoad = options.maxLoad ?? 1024 * 1024;
54
- this.maxHighWaterMark = options.maxHighWaterMark ?? 16 * 1024;
55
- this.userAgent = options?.userAgent ?? 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3';
56
- this.jar = options.jar instanceof cookies.Cookies ? options.jar : new cookies.Cookies();
57
+ constructor(options) {
58
+ const mergedOptions = {
59
+ maxLoad: 1024 * 1024,
60
+ maxHighWaterMark: 16 * 1024,
61
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
62
+ jar: new cookies.Cookies(),
63
+ ...options
64
+ };
65
+ this.maxLoad = mergedOptions.maxLoad;
66
+ this.maxHighWaterMark = mergedOptions.maxHighWaterMark;
67
+ this.userAgent = mergedOptions.userAgent;
68
+ this.jar = mergedOptions.jar;
57
69
  this.instance = axios.create({
58
70
  baseURL: Client.BASE_URL,
59
71
  params: {
@@ -61,30 +73,37 @@ class Client {
61
73
  apiKey: Client.API_KEY_V1,
62
74
  ctime: this.ctime
63
75
  },
64
- maxRate: this.maxLoad,
65
- headers: {
66
- 'User-Agent': this.userAgent
67
- }
76
+ maxRate: this.maxLoad
68
77
  });
69
- this.instance.interceptors.request.use(async (options) => {
70
- const base = options.baseURL ?? '';
71
- const url = new node_url.URL(options.url ?? '/', base).toString();
72
- const additionalHeaders = this.jar.applyToHeaders(url);
73
- for (const [key, value] of Object.entries(additionalHeaders))
74
- options.headers.set(key, value);
78
+ this.instance.interceptors.request.use((options) => {
79
+ const baseURL = options.baseURL ?? '';
80
+ const url = new node_url.URL(options.url ?? '/', baseURL).toString();
81
+ const cookie = this.jar.getCookieHeader(url);
82
+ options.headers.set('User-Agent', this.userAgent);
83
+ options.headers.set('Cookie', cookie);
75
84
  return options;
76
85
  });
77
86
  this.instance.interceptors.response.use((response) => {
78
87
  const setCookie = response.headers['set-cookie'];
79
- const requestUrl = response.request?.res?.responseUrl ?? response.config.url;
80
- if (requestUrl && Array.isArray(setCookie))
81
- this.jar.setCookies(setCookie, requestUrl);
88
+ const requestURL = response.request?.res?.responseUrl ?? response.config.url;
89
+ if (requestURL && Array.isArray(setCookie))
90
+ this.jar.setCookies(setCookie, requestURL);
82
91
  return response.data;
83
92
  });
84
93
  }
85
- async ensureCookies() {
86
- if (this.jar.getCookies(Client.BASE_URL).length === 0)
87
- void await this.instance.get('/');
94
+ setOptions(options) {
95
+ const mergedOptions = {
96
+ maxLoad: this.maxLoad,
97
+ maxHighWaterMark: this.maxHighWaterMark,
98
+ userAgent: this.userAgent,
99
+ jar: this.jar,
100
+ ...options
101
+ };
102
+ this.maxLoad = mergedOptions.maxLoad;
103
+ this.maxHighWaterMark = mergedOptions.maxHighWaterMark;
104
+ this.userAgent = mergedOptions.userAgent;
105
+ this.jar = mergedOptions.jar;
106
+ this.instance.defaults.maxRate = mergedOptions.maxLoad;
88
107
  }
89
108
  async video(videoID) {
90
109
  const value = videoID instanceof node_url.URL ? videoID.toString() : videoID;
@@ -92,7 +111,7 @@ class Client {
92
111
  throw new lapse.Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');
93
112
  try {
94
113
  videoID = isURL(value) ? Client.getIDFromURL(value) : value;
95
- void await this.ensureCookies();
114
+ void await ensureCookies(this.instance);
96
115
  const response = await this.instance.get(Client.API_VIDEO_PATH, {
97
116
  params: {
98
117
  id: videoID,
@@ -100,7 +119,7 @@ class Client {
100
119
  }
101
120
  });
102
121
  if (response.err !== 0)
103
- throw new lapse.Lapse('Video could not be found', 'ERROR_VIDEO_NOT_FOUND', response.err, response);
122
+ throw new lapse.Lapse('Video could not be found', 'ERROR_VIDEO_NOT_FOUND', response.err);
104
123
  const videoURL = response.data?.streaming?.hls?.['720p'] || response.data?.streaming?.hls?.['360p'];
105
124
  if (!videoURL || !videoURL.length)
106
125
  throw new lapse.Lapse('Streaming URL not found', 'ERROR_STREAM_URL_NOT_FOUND');
@@ -114,9 +133,8 @@ class Client {
114
133
  return source;
115
134
  }
116
135
  catch (error) {
117
- if (error instanceof lapse.Lapse)
118
- throw error;
119
- throw new lapse.Lapse('Failed to fetch video stream', 'ERROR_VIDEO_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
136
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Failed to fetch video stream', 'ERROR_VIDEO_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
137
+ throw lapse$1;
120
138
  }
121
139
  }
122
140
  videoSync(videoID) {
@@ -165,23 +183,23 @@ class Client {
165
183
  throw new lapse.Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');
166
184
  try {
167
185
  musicID = isURL(value) ? Client.getIDFromURL(value) : value;
168
- void await this.ensureCookies();
186
+ void await ensureCookies(this.instance);
169
187
  const response = await this.instance.get(Client.API_MUSIC_PATH, {
170
188
  params: {
171
189
  id: musicID,
172
190
  sig: encrypt.createSignature(Client.API_MUSIC_PATH, 'ctime=' + this.ctime + 'id=' + musicID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)
173
191
  }
174
192
  });
175
- let musicURL = response.data?.[320] && response.data[320] !== 'VIP' ? response.data[320] : response.data?.[128];
193
+ let musicURL = response.data[320] !== 'VIP' ? response.data[320] : response.data[128];
176
194
  if (response.err === -1150) {
177
195
  const retry = async (step, before) => {
178
196
  if (step > 3)
179
- throw new lapse.Lapse('Music requested by VIP, PRI', 'ERROR_MUSIC_VIP_ONLY', before ? before.err : void 0, before);
197
+ throw new lapse.Lapse('Music requested by VIP, PRI', 'ERROR_MUSIC_VIP_ONLY', before ? before.err : void 0);
180
198
  const retryData = await this.instance.get(Client.EXTRA_API_MUSIC_PATH, {
181
199
  params: {
182
200
  id: musicID,
183
- api_key: Client.API_KEY_V2,
184
- sig: encrypt.createSignature('/song/get-song-info', 'ctime=' + this.ctime + 'id=' + musicID, Client.SECRET_KEY_V2),
201
+ api_key: Client.API_KEY_V3,
202
+ sig: encrypt.createSignature('/song/get-song-info', 'ctime=' + this.ctime + 'id=' + musicID, Client.SECRET_KEY_V3),
185
203
  version: void 0,
186
204
  apiKey: void 0
187
205
  }
@@ -202,9 +220,8 @@ class Client {
202
220
  return source;
203
221
  }
204
222
  catch (error) {
205
- if (error instanceof lapse.Lapse)
206
- throw error;
207
- throw new lapse.Lapse('Failed to fetch music stream', 'ERROR_MUSIC_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
223
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Failed to fetch music stream', 'ERROR_MUSIC_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
224
+ throw lapse$1;
208
225
  }
209
226
  }
210
227
  musicSync(musicID) {
@@ -251,7 +268,7 @@ class Client {
251
268
  throw new lapse.Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');
252
269
  try {
253
270
  playlistID = isURL(value) ? Client.getIDFromURL(value) : value;
254
- void await this.ensureCookies();
271
+ void await ensureCookies(this.instance);
255
272
  const response = await this.instance.get(Client.API_PLAYLIST_PATH, {
256
273
  params: {
257
274
  id: playlistID,
@@ -263,9 +280,8 @@ class Client {
263
280
  return refined.createPlayList(response.data);
264
281
  }
265
282
  catch (error) {
266
- if (error instanceof lapse.Lapse)
267
- throw error;
268
- throw new lapse.Lapse('Failed to fetch playlist', 'ERROR_PLAYLIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
283
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Failed to fetch playlist', 'ERROR_PLAYLIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
284
+ throw lapse$1;
269
285
  }
270
286
  }
271
287
  async artist(aliasID) {
@@ -274,7 +290,7 @@ class Client {
274
290
  throw new lapse.Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');
275
291
  try {
276
292
  aliasID = isURL(value) ? Client.getIDFromURL(value) : value;
277
- void await this.ensureCookies();
293
+ void await ensureCookies(this.instance);
278
294
  const response = await this.instance.get(Client.API_ARTIST_PATH, {
279
295
  params: {
280
296
  alias: aliasID,
@@ -282,15 +298,27 @@ class Client {
282
298
  }
283
299
  });
284
300
  if (response.err === -108)
285
- throw new lapse.Lapse('Artist not found', 'ERROR_ARTIST_NOT_FOUND', response.err, response);
301
+ throw new lapse.Lapse('Artist not found', 'ERROR_ARTIST_NOT_FOUND', response.err);
286
302
  if (response.err !== 0)
287
- throw new lapse.Lapse('Could not fetch artist', 'ERROR_ARTIST_FETCH', response.err, response);
288
- return refined.createArtist(response.data);
303
+ throw new lapse.Lapse('Could not fetch artist', 'ERROR_ARTIST_FETCH', response.err);
304
+ const mediaList = await this.instance.get(Client.API_ARTIST_MEDIA_LIST_PATH, {
305
+ params: {
306
+ id: response.data.id,
307
+ type: 'artist',
308
+ page: 1,
309
+ count: 0,
310
+ sort: 'listen',
311
+ sectionId: 'aSong',
312
+ apiKey: Client.API_KEY_V2,
313
+ version: Client.VERSION_URL_V2,
314
+ sig: encrypt.createSignature(Client.API_ARTIST_MEDIA_LIST_PATH, 'count=0ctime=' + this.ctime + 'id=' + response.data.id + 'page=1type=artistversion=' + Client.VERSION_URL_V2, Client.SECRET_KEY_V2)
315
+ }
316
+ });
317
+ return refined.createArtist(response.data, mediaList.data);
289
318
  }
290
319
  catch (error) {
291
- if (error instanceof lapse.Lapse)
292
- throw error;
293
- throw new lapse.Lapse('Failed to fetch artist', 'ERROR_ARTIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
320
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Failed to fetch artist', 'ERROR_ARTIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
321
+ throw lapse$1;
294
322
  }
295
323
  }
296
324
  async mediaDetails(mediaID) {
@@ -299,7 +327,7 @@ class Client {
299
327
  throw new lapse.Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');
300
328
  try {
301
329
  mediaID = isURL(value) ? Client.getIDFromURL(value) : value;
302
- void await this.ensureCookies();
330
+ void await ensureCookies(this.instance);
303
331
  const response = await this.instance.get(Client.API_MEDIA_DETAILS_PATH, {
304
332
  params: {
305
333
  id: mediaID,
@@ -307,22 +335,21 @@ class Client {
307
335
  }
308
336
  });
309
337
  if (response.err === -1023)
310
- throw new lapse.Lapse('Media not found', 'ERROR_MEDIA_NOT_FOUND', response.err, response);
338
+ throw new lapse.Lapse('Media not found', 'ERROR_MEDIA_NOT_FOUND', response.err);
311
339
  if (response.err !== 0)
312
- throw new lapse.Lapse('Could not fetch media', 'ERROR_MEDIA_FETCH', response.err, response);
340
+ throw new lapse.Lapse('Could not fetch media', 'ERROR_MEDIA_FETCH', response.err);
313
341
  return refined.createMedia(response.data);
314
342
  }
315
343
  catch (error) {
316
- if (error instanceof lapse.Lapse)
317
- throw error;
318
- throw new lapse.Lapse('Failed to fetch media', 'ERROR_MEDIA_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
344
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Failed to fetch media', 'ERROR_MEDIA_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
345
+ throw lapse$1;
319
346
  }
320
347
  }
321
348
  async searchMusic(query) {
322
349
  if (typeof query !== 'string' || !query.trim().length)
323
350
  throw new lapse.Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');
324
351
  try {
325
- void await this.ensureCookies();
352
+ void await ensureCookies(this.instance);
326
353
  const response = await this.instance.get(Client.API_SEARCH_PATH, {
327
354
  params: {
328
355
  q: query,
@@ -333,20 +360,19 @@ class Client {
333
360
  }
334
361
  });
335
362
  if (response.err !== 0)
336
- throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);
337
- return response.data.items.map(refined.createSearchMedia);
363
+ throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);
364
+ return (response.data.items ?? []).map(refined.createSearchMedia);
338
365
  }
339
366
  catch (error) {
340
- if (error instanceof lapse.Lapse)
341
- throw error;
342
- throw new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
367
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
368
+ throw lapse$1;
343
369
  }
344
370
  }
345
371
  async searchVideo(query) {
346
372
  if (typeof query !== 'string' || !query.trim().length)
347
373
  throw new lapse.Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');
348
374
  try {
349
- void await this.ensureCookies();
375
+ void await ensureCookies(this.instance);
350
376
  const response = await this.instance.get(Client.API_SEARCH_PATH, {
351
377
  params: {
352
378
  q: query,
@@ -357,20 +383,19 @@ class Client {
357
383
  }
358
384
  });
359
385
  if (response.err !== 0)
360
- throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);
361
- return response.data.items.map(refined.createSearchMedia);
386
+ throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);
387
+ return (response.data.items ?? []).map(refined.createSearchMedia);
362
388
  }
363
389
  catch (error) {
364
- if (error instanceof lapse.Lapse)
365
- throw error;
366
- throw new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
390
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
391
+ throw lapse$1;
367
392
  }
368
393
  }
369
394
  async searchList(query) {
370
395
  if (typeof query !== 'string' || !query.trim().length)
371
396
  throw new lapse.Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');
372
397
  try {
373
- void await this.ensureCookies();
398
+ void await ensureCookies(this.instance);
374
399
  const response = await this.instance.get(Client.API_SEARCH_PATH, {
375
400
  params: {
376
401
  q: query,
@@ -381,20 +406,19 @@ class Client {
381
406
  }
382
407
  });
383
408
  if (response.err !== 0)
384
- throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);
409
+ throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);
385
410
  return response.data.items.map(refined.createSearchPlayList);
386
411
  }
387
412
  catch (error) {
388
- if (error instanceof lapse.Lapse)
389
- throw error;
390
- throw new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
413
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
414
+ throw lapse$1;
391
415
  }
392
416
  }
393
417
  async searchArtist(query) {
394
418
  if (typeof query !== 'string' || !query.trim().length)
395
419
  throw new lapse.Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');
396
420
  try {
397
- void await this.ensureCookies();
421
+ void await ensureCookies(this.instance);
398
422
  const response = await this.instance.get(Client.API_SEARCH_PATH, {
399
423
  params: {
400
424
  q: query,
@@ -405,18 +429,20 @@ class Client {
405
429
  }
406
430
  });
407
431
  if (response.err !== 0)
408
- throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);
432
+ throw new lapse.Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);
409
433
  return response.data.items.map(refined.createSearchArtist);
410
434
  }
411
435
  catch (error) {
412
- if (error instanceof lapse.Lapse)
413
- throw error;
414
- throw new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
436
+ const lapse$1 = error instanceof lapse.Lapse ? error : new lapse.Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);
437
+ throw lapse$1;
415
438
  }
416
439
  }
417
440
  }
418
441
  const client = new Client();
419
442
 
443
+ exports.Cookies = cookies.Cookies;
444
+ exports.createSignature = encrypt.createSignature;
445
+ exports.Lapse = lapse.Lapse;
420
446
  exports.Client = Client;
421
447
  exports.default = client;
422
448
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../esm/index.js"],"sourcesContent":["import axios from 'axios';\nimport m3u8stream from 'm3u8stream';\nimport { PassThrough } from 'node:stream';\nimport { URL } from 'node:url';\nimport { Cookies } from './utils/cookies.js';\nimport { createSignature } from './utils/encrypt.js';\nimport { Lapse } from './utils/lapse.js';\nimport { createArtist, createMedia, createSearchMedia, createPlayList, createSearchArtist, createSearchPlayList } from './utils/refined.js';\nimport { Readable } from 'node:stream';\nconst isURL = (value) => {\n try {\n new URL(value);\n return true;\n }\n catch {\n return false;\n }\n};\nclass Client {\n static BASE_URL = 'https://zingmp3.vn/';\n static VERSION_URL_V1 = '1.6.34';\n static VERSION_URL_V2 = '1.13.13';\n static SECRET_KEY_V1 = '2aa2d1c561e809b267f3638c4a307aab';\n static SECRET_KEY_V2 = '10a01dcf33762d3a204cb96429918ff6';\n static API_KEY_V1 = '88265e23d4284f25963e6eedac8fbfa3';\n static API_KEY_V2 = '38e8643fb0dc04e8d65b99994d3dafff';\n static API_VIDEO_PATH = '/api/v2/page/get/video';\n static API_MUSIC_PATH = '/api/v2/song/get/streaming';\n static EXTRA_API_MUSIC_PATH = '/api/song/get-song-info';\n static API_SEARCH_PATH = '/api/v2/search';\n static API_PLAYLIST_PATH = '/api/v2/page/get/playlist';\n static API_MEDIA_DETAILS_PATH = '/api/v2/song/get/info';\n static API_ARTIST_PATH = '/api/v2/page/get/artist';\n static getIDFromURL(url) {\n if (typeof url !== 'string' || !url.trim().length)\n throw new Lapse('URL must be a non-empty string', 'ERROR_INVALID_URL');\n const match = url.match(/\\/([A-Z0-9]{8})\\.html(?:\\?|#|$)/i) || url.match(/^https?:\\/\\/zingmp3\\.vn\\/([^/?#]+)\\/?(?:[?#].*)?$/i);\n if (!match)\n throw new Lapse('Could not extract ID from URL', 'ERROR_INVALID_URL');\n return match[1];\n }\n ctime = Math.floor(Date.now() / 1000).toString();\n instance;\n maxLoad;\n maxHighWaterMark;\n userAgent;\n jar;\n constructor(options = {}) {\n this.maxLoad = options.maxLoad ?? 1024 * 1024;\n this.maxHighWaterMark = options.maxHighWaterMark ?? 16 * 1024;\n this.userAgent = options?.userAgent ?? 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3';\n this.jar = options.jar instanceof Cookies ? options.jar : new Cookies();\n this.instance = axios.create({\n baseURL: Client.BASE_URL,\n params: {\n version: Client.VERSION_URL_V1,\n apiKey: Client.API_KEY_V1,\n ctime: this.ctime\n },\n maxRate: this.maxLoad,\n headers: {\n 'User-Agent': this.userAgent\n }\n });\n this.instance.interceptors.request.use(async (options) => {\n const base = options.baseURL ?? '';\n const url = new URL(options.url ?? '/', base).toString();\n const additionalHeaders = this.jar.applyToHeaders(url);\n for (const [key, value] of Object.entries(additionalHeaders))\n options.headers.set(key, value);\n return options;\n });\n this.instance.interceptors.response.use((response) => {\n const setCookie = response.headers['set-cookie'];\n const requestUrl = response.request?.res?.responseUrl ?? response.config.url;\n if (requestUrl && Array.isArray(setCookie))\n this.jar.setCookies(setCookie, requestUrl);\n return response.data;\n });\n }\n async ensureCookies() {\n if (this.jar.getCookies(Client.BASE_URL).length === 0)\n void await this.instance.get('/');\n }\n async video(videoID) {\n const value = videoID instanceof URL ? videoID.toString() : videoID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n videoID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_VIDEO_PATH, {\n params: {\n id: videoID,\n sig: createSignature(Client.API_VIDEO_PATH, 'ctime=' + this.ctime + 'id=' + videoID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Video could not be found', 'ERROR_VIDEO_NOT_FOUND', response.err, response);\n const videoURL = response.data?.streaming?.hls?.['720p'] || response.data?.streaming?.hls?.['360p'];\n if (!videoURL || !videoURL.length)\n throw new Lapse('Streaming URL not found', 'ERROR_STREAM_URL_NOT_FOUND');\n const source = m3u8stream(videoURL, {\n highWaterMark: this.maxHighWaterMark\n });\n source.once('error', (error) => {\n const lapse = new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n source.destroy(lapse);\n });\n return source;\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Failed to fetch video stream', 'ERROR_VIDEO_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n videoSync(videoID) {\n const video = new PassThrough({ highWaterMark: this.maxHighWaterMark });\n let copySource;\n let closed = false;\n let sourceDestroyed = false;\n const destroy = () => {\n if (!copySource || sourceDestroyed)\n return;\n sourceDestroyed = true;\n if (!copySource)\n return;\n copySource.unpipe(video);\n if (!copySource.destroyed)\n copySource.destroy();\n };\n const closer = () => {\n closed = true;\n destroy();\n };\n video.once('close', closer);\n video.once('error', closer);\n void this.video(videoID)\n .then((source) => {\n copySource = source;\n source.once('error', (error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n video.destroy(lapse);\n });\n if (closed || video.destroyed) {\n destroy();\n return;\n }\n source.pipe(video);\n })\n .catch((error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch video stream', 'ERROR_VIDEO_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n video.destroy(lapse);\n });\n return video;\n }\n async music(musicID) {\n const value = musicID instanceof URL ? musicID.toString() : musicID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n musicID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_MUSIC_PATH, {\n params: {\n id: musicID,\n sig: createSignature(Client.API_MUSIC_PATH, 'ctime=' + this.ctime + 'id=' + musicID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n let musicURL = response.data?.[320] && response.data[320] !== 'VIP' ? response.data[320] : response.data?.[128];\n if (response.err === -1150) {\n const retry = async (step, before) => {\n if (step > 3)\n throw new Lapse('Music requested by VIP, PRI', 'ERROR_MUSIC_VIP_ONLY', before ? before.err : void 0, before);\n const retryData = await this.instance.get(Client.EXTRA_API_MUSIC_PATH, {\n params: {\n id: musicID,\n api_key: Client.API_KEY_V2,\n sig: createSignature('/song/get-song-info', 'ctime=' + this.ctime + 'id=' + musicID, Client.SECRET_KEY_V2),\n version: void 0,\n apiKey: void 0\n }\n });\n if (retryData.err === 0)\n return retryData.data?.streaming?.default?.[128];\n return retry(step + 1, retryData);\n };\n musicURL = await retry(0);\n }\n if (!musicURL || !musicURL.length)\n throw new Lapse('Streaming URL not found', 'ERROR_STREAM_URL_NOT_FOUND');\n const source = await this.instance.get(musicURL, { responseType: 'stream' });\n source.once('error', (error) => {\n const lapse = new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n source.destroy(lapse);\n });\n return source;\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Failed to fetch music stream', 'ERROR_MUSIC_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n musicSync(musicID) {\n const music = new PassThrough({ highWaterMark: this.maxHighWaterMark });\n let copySource;\n let closed = false;\n let sourceDestroyed = false;\n const destroy = () => {\n if (!copySource || sourceDestroyed)\n return;\n sourceDestroyed = true;\n copySource.unpipe(music);\n if (!copySource.destroyed)\n copySource.destroy();\n };\n const closer = () => {\n closed = true;\n destroy();\n };\n music.once('close', closer);\n music.once('error', closer);\n void this.music(musicID)\n .then((source) => {\n copySource = source;\n source.once('error', (error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n music.destroy(lapse);\n });\n if (closed || music.destroyed) {\n destroy();\n return;\n }\n source.pipe(music);\n })\n .catch((error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch music stream', 'ERROR_MUSIC_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n music.destroy(lapse);\n });\n return music;\n }\n async playlist(playlistID) {\n const value = playlistID instanceof URL ? playlistID.toString() : playlistID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n playlistID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_PLAYLIST_PATH, {\n params: {\n id: playlistID,\n sig: createSignature(Client.API_PLAYLIST_PATH, 'ctime=' + this.ctime + 'id=' + playlistID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Could not find playlist', 'ERROR_PLAYLIST_NOT_FOUND', response.err, response);\n return createPlayList(response.data);\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Failed to fetch playlist', 'ERROR_PLAYLIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n async artist(aliasID) {\n const value = aliasID instanceof URL ? aliasID.toString() : aliasID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n aliasID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_ARTIST_PATH, {\n params: {\n alias: aliasID,\n sig: createSignature(Client.API_ARTIST_PATH, 'ctime=' + this.ctime + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err === -108)\n throw new Lapse('Artist not found', 'ERROR_ARTIST_NOT_FOUND', response.err, response);\n if (response.err !== 0)\n throw new Lapse('Could not fetch artist', 'ERROR_ARTIST_FETCH', response.err, response);\n return createArtist(response.data);\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Failed to fetch artist', 'ERROR_ARTIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n async mediaDetails(mediaID) {\n const value = mediaID instanceof URL ? mediaID.toString() : mediaID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n mediaID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_MEDIA_DETAILS_PATH, {\n params: {\n id: mediaID,\n sig: createSignature(Client.API_MEDIA_DETAILS_PATH, 'ctime=' + this.ctime + 'id=' + mediaID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err === -1023)\n throw new Lapse('Media not found', 'ERROR_MEDIA_NOT_FOUND', response.err, response);\n if (response.err !== 0)\n throw new Lapse('Could not fetch media', 'ERROR_MEDIA_FETCH', response.err, response);\n return createMedia(response.data);\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Failed to fetch media', 'ERROR_MEDIA_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n async searchMusic(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'song',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=songversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);\n return response.data.items.map(createSearchMedia);\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n async searchVideo(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'video',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=videoversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);\n return response.data.items.map(createSearchMedia);\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n async searchList(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'playlist',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=playlistversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);\n return response.data.items.map(createSearchPlayList);\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n async searchArtist(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await this.ensureCookies();\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'artist',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=artistversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err, response);\n return response.data.items.map(createSearchArtist);\n }\n catch (error) {\n if (error instanceof Lapse)\n throw error;\n throw new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n }\n }\n}\nconst client = new Client();\nexport { client as default, Client };\n//# sourceMappingURL=index.js.map"],"names":["URL","Lapse","Cookies","createSignature","lapse","PassThrough","createPlayList","createArtist","createMedia","createSearchMedia","createSearchPlayList","createSearchArtist"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../esm/index.js"],"sourcesContent":["import axios from 'axios';\nimport m3u8stream from 'm3u8stream';\nimport { PassThrough } from 'node:stream';\nimport { URL } from 'node:url';\nimport { Cookies } from './utils/cookies.js';\nimport { createSignature } from './utils/encrypt.js';\nimport { Lapse } from './utils/lapse.js';\nimport { createArtist, createMedia, createSearchMedia, createPlayList, createSearchArtist, createSearchPlayList } from './utils/refined.js';\nconst isURL = (value) => {\n try {\n new URL(value);\n return true;\n }\n catch {\n return false;\n }\n};\nconst ensureCookies = async (instance) => await instance.get('/');\nclass Client {\n static BASE_URL = 'https://zingmp3.vn/';\n static VERSION_URL_V1 = '1.6.34';\n static VERSION_URL_V2 = '1.10.49';\n static VERSION_URL_V3 = '1.13.13';\n static SECRET_KEY_V1 = '2aa2d1c561e809b267f3638c4a307aab';\n static SECRET_KEY_V2 = 'acOrvUS15XRW2o9JksiK1KgQ6Vbds8ZW';\n static SECRET_KEY_V3 = '10a01dcf33762d3a204cb96429918ff6';\n static API_KEY_V1 = '88265e23d4284f25963e6eedac8fbfa3';\n static API_KEY_V2 = 'X5BM3w8N7MKozC0B85o4KMlzLZKhV00y';\n static API_KEY_V3 = '38e8643fb0dc04e8d65b99994d3dafff';\n static API_VIDEO_PATH = '/api/v2/page/get/video';\n static API_MUSIC_PATH = '/api/v2/song/get/streaming';\n static EXTRA_API_MUSIC_PATH = '/api/song/get-song-info';\n static API_SEARCH_PATH = '/api/v2/search';\n static API_PLAYLIST_PATH = '/api/v2/page/get/playlist';\n static API_MEDIA_DETAILS_PATH = '/api/v2/song/get/info';\n static API_ARTIST_PATH = '/api/v2/page/get/artist';\n static API_ARTIST_MEDIA_LIST_PATH = '/api/v2/song/get/list';\n static getIDFromURL(url) {\n if (typeof url !== 'string' || !url.trim().length)\n throw new Lapse('URL must be a non-empty string', 'ERROR_INVALID_URL');\n const match = url.match(/\\/([A-Z0-9]{8})\\.html(?:\\?|#|$)/i) || url.match(/^https?:\\/\\/zingmp3\\.vn\\/([^/?#]+)\\/?(?:[?#].*)?$/i);\n if (!match)\n throw new Lapse('Could not extract ID from URL', 'ERROR_INVALID_URL');\n return match[1];\n }\n ctime = Math.floor(Date.now() / 1000).toString();\n instance;\n maxLoad;\n maxHighWaterMark;\n userAgent;\n jar;\n constructor(options) {\n const mergedOptions = {\n maxLoad: 1024 * 1024,\n maxHighWaterMark: 16 * 1024,\n userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',\n jar: new Cookies(),\n ...options\n };\n this.maxLoad = mergedOptions.maxLoad;\n this.maxHighWaterMark = mergedOptions.maxHighWaterMark;\n this.userAgent = mergedOptions.userAgent;\n this.jar = mergedOptions.jar;\n this.instance = axios.create({\n baseURL: Client.BASE_URL,\n params: {\n version: Client.VERSION_URL_V1,\n apiKey: Client.API_KEY_V1,\n ctime: this.ctime\n },\n maxRate: this.maxLoad\n });\n this.instance.interceptors.request.use((options) => {\n const baseURL = options.baseURL ?? '';\n const url = new URL(options.url ?? '/', baseURL).toString();\n const cookie = this.jar.getCookieHeader(url);\n options.headers.set('User-Agent', this.userAgent);\n options.headers.set('Cookie', cookie);\n return options;\n });\n this.instance.interceptors.response.use((response) => {\n const setCookie = response.headers['set-cookie'];\n const requestURL = response.request?.res?.responseUrl ?? response.config.url;\n if (requestURL && Array.isArray(setCookie))\n this.jar.setCookies(setCookie, requestURL);\n return response.data;\n });\n }\n setOptions(options) {\n const mergedOptions = {\n maxLoad: this.maxLoad,\n maxHighWaterMark: this.maxHighWaterMark,\n userAgent: this.userAgent,\n jar: this.jar,\n ...options\n };\n this.maxLoad = mergedOptions.maxLoad;\n this.maxHighWaterMark = mergedOptions.maxHighWaterMark;\n this.userAgent = mergedOptions.userAgent;\n this.jar = mergedOptions.jar;\n this.instance.defaults.maxRate = mergedOptions.maxLoad;\n }\n async video(videoID) {\n const value = videoID instanceof URL ? videoID.toString() : videoID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n videoID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_VIDEO_PATH, {\n params: {\n id: videoID,\n sig: createSignature(Client.API_VIDEO_PATH, 'ctime=' + this.ctime + 'id=' + videoID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Video could not be found', 'ERROR_VIDEO_NOT_FOUND', response.err);\n const videoURL = response.data?.streaming?.hls?.['720p'] || response.data?.streaming?.hls?.['360p'];\n if (!videoURL || !videoURL.length)\n throw new Lapse('Streaming URL not found', 'ERROR_STREAM_URL_NOT_FOUND');\n const source = m3u8stream(videoURL, {\n highWaterMark: this.maxHighWaterMark\n });\n source.once('error', (error) => {\n const lapse = new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n source.destroy(lapse);\n });\n return source;\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch video stream', 'ERROR_VIDEO_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n videoSync(videoID) {\n const video = new PassThrough({ highWaterMark: this.maxHighWaterMark });\n let copySource;\n let closed = false;\n let sourceDestroyed = false;\n const destroy = () => {\n if (!copySource || sourceDestroyed)\n return;\n sourceDestroyed = true;\n if (!copySource)\n return;\n copySource.unpipe(video);\n if (!copySource.destroyed)\n copySource.destroy();\n };\n const closer = () => {\n closed = true;\n destroy();\n };\n video.once('close', closer);\n video.once('error', closer);\n void this.video(videoID)\n .then((source) => {\n copySource = source;\n source.once('error', (error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n video.destroy(lapse);\n });\n if (closed || video.destroyed) {\n destroy();\n return;\n }\n source.pipe(video);\n })\n .catch((error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch video stream', 'ERROR_VIDEO_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n video.destroy(lapse);\n });\n return video;\n }\n async music(musicID) {\n const value = musicID instanceof URL ? musicID.toString() : musicID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n musicID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_MUSIC_PATH, {\n params: {\n id: musicID,\n sig: createSignature(Client.API_MUSIC_PATH, 'ctime=' + this.ctime + 'id=' + musicID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n let musicURL = response.data[320] !== 'VIP' ? response.data[320] : response.data[128];\n if (response.err === -1150) {\n const retry = async (step, before) => {\n if (step > 3)\n throw new Lapse('Music requested by VIP, PRI', 'ERROR_MUSIC_VIP_ONLY', before ? before.err : void 0);\n const retryData = await this.instance.get(Client.EXTRA_API_MUSIC_PATH, {\n params: {\n id: musicID,\n api_key: Client.API_KEY_V3,\n sig: createSignature('/song/get-song-info', 'ctime=' + this.ctime + 'id=' + musicID, Client.SECRET_KEY_V3),\n version: void 0,\n apiKey: void 0\n }\n });\n if (retryData.err === 0)\n return retryData.data?.streaming?.default?.[128];\n return retry(step + 1, retryData);\n };\n musicURL = await retry(0);\n }\n if (!musicURL || !musicURL.length)\n throw new Lapse('Streaming URL not found', 'ERROR_STREAM_URL_NOT_FOUND');\n const source = await this.instance.get(musicURL, { responseType: 'stream' });\n source.once('error', (error) => {\n const lapse = new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n source.destroy(lapse);\n });\n return source;\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch music stream', 'ERROR_MUSIC_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n musicSync(musicID) {\n const music = new PassThrough({ highWaterMark: this.maxHighWaterMark });\n let copySource;\n let closed = false;\n let sourceDestroyed = false;\n const destroy = () => {\n if (!copySource || sourceDestroyed)\n return;\n sourceDestroyed = true;\n copySource.unpipe(music);\n if (!copySource.destroyed)\n copySource.destroy();\n };\n const closer = () => {\n closed = true;\n destroy();\n };\n music.once('close', closer);\n music.once('error', closer);\n void this.music(musicID)\n .then((source) => {\n copySource = source;\n source.once('error', (error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Stream download failed', 'ERROR_STREAM_DOWNLOAD', void 0, error);\n music.destroy(lapse);\n });\n if (closed || music.destroyed) {\n destroy();\n return;\n }\n source.pipe(music);\n })\n .catch((error) => {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch music stream', 'ERROR_MUSIC_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n music.destroy(lapse);\n });\n return music;\n }\n async playlist(playlistID) {\n const value = playlistID instanceof URL ? playlistID.toString() : playlistID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n playlistID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_PLAYLIST_PATH, {\n params: {\n id: playlistID,\n sig: createSignature(Client.API_PLAYLIST_PATH, 'ctime=' + this.ctime + 'id=' + playlistID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Could not find playlist', 'ERROR_PLAYLIST_NOT_FOUND', response.err, response);\n return createPlayList(response.data);\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch playlist', 'ERROR_PLAYLIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n async artist(aliasID) {\n const value = aliasID instanceof URL ? aliasID.toString() : aliasID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n aliasID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_ARTIST_PATH, {\n params: {\n alias: aliasID,\n sig: createSignature(Client.API_ARTIST_PATH, 'ctime=' + this.ctime + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err === -108)\n throw new Lapse('Artist not found', 'ERROR_ARTIST_NOT_FOUND', response.err);\n if (response.err !== 0)\n throw new Lapse('Could not fetch artist', 'ERROR_ARTIST_FETCH', response.err);\n const mediaList = await this.instance.get(Client.API_ARTIST_MEDIA_LIST_PATH, {\n params: {\n id: response.data.id,\n type: 'artist',\n page: 1,\n count: 0,\n sort: 'listen',\n sectionId: 'aSong',\n apiKey: Client.API_KEY_V2,\n version: Client.VERSION_URL_V2,\n sig: createSignature(Client.API_ARTIST_MEDIA_LIST_PATH, 'count=0ctime=' + this.ctime + 'id=' + response.data.id + 'page=1type=artistversion=' + Client.VERSION_URL_V2, Client.SECRET_KEY_V2)\n }\n });\n return createArtist(response.data, mediaList.data);\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch artist', 'ERROR_ARTIST_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n async mediaDetails(mediaID) {\n const value = mediaID instanceof URL ? mediaID.toString() : mediaID;\n if (typeof value !== 'string' || !value.trim().length)\n throw new Lapse('ID must be a non-empty string', 'ERROR_INVALID_ID');\n try {\n mediaID = isURL(value) ? Client.getIDFromURL(value) : value;\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_MEDIA_DETAILS_PATH, {\n params: {\n id: mediaID,\n sig: createSignature(Client.API_MEDIA_DETAILS_PATH, 'ctime=' + this.ctime + 'id=' + mediaID + 'version=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err === -1023)\n throw new Lapse('Media not found', 'ERROR_MEDIA_NOT_FOUND', response.err);\n if (response.err !== 0)\n throw new Lapse('Could not fetch media', 'ERROR_MEDIA_FETCH', response.err);\n return createMedia(response.data);\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Failed to fetch media', 'ERROR_MEDIA_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n async searchMusic(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'song',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=songversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);\n return (response.data.items ?? []).map(createSearchMedia);\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n async searchVideo(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'video',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=videoversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);\n return (response.data.items ?? []).map(createSearchMedia);\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n async searchList(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'playlist',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=playlistversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);\n return response.data.items.map(createSearchPlayList);\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n async searchArtist(query) {\n if (typeof query !== 'string' || !query.trim().length)\n throw new Lapse('Query must be a non-empty string', 'ERROR_INVALID_QUERY');\n try {\n void await ensureCookies(this.instance);\n const response = await this.instance.get(Client.API_SEARCH_PATH, {\n params: {\n q: query,\n type: 'artist',\n page: 1,\n count: 20,\n sig: createSignature(Client.API_SEARCH_PATH, 'count=20ctime=' + this.ctime + 'page=1type=artistversion=' + Client.VERSION_URL_V1, Client.SECRET_KEY_V1)\n }\n });\n if (response.err !== 0)\n throw new Lapse('Search could not be fetched', 'ERROR_SEARCH_FAILED', response.err);\n return response.data.items.map(createSearchArtist);\n }\n catch (error) {\n const lapse = error instanceof Lapse ? error : new Lapse('Search could not be fetch', 'ERROR_SEARCH_FETCH', axios.isAxiosError(error) ? error.response?.status : void 0, error);\n throw lapse;\n }\n }\n}\nconst client = new Client();\nexport { client as default, Cookies, Client, Lapse, createSignature };\n//# sourceMappingURL=index.js.map"],"names":["URL","Lapse","Cookies","createSignature","lapse","PassThrough","createPlayList","createArtist","createMedia","createSearchMedia","createSearchPlayList","createSearchArtist"],"mappings":"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"}