@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.
- package/README.md +379 -328
- package/dist/cjs/index.cjs +102 -76
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/utils/refined.cjs +13 -8
- package/dist/cjs/utils/refined.cjs.map +1 -1
- package/dist/esm/index.js +100 -78
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/cookies.js.map +1 -1
- package/dist/esm/utils/refined.js +13 -8
- package/dist/esm/utils/refined.js.map +1 -1
- package/dist/types/index.d.ts +16 -10
- package/dist/types/types/client.d.ts +8 -0
- package/dist/types/types/index.d.ts +4 -8
- package/dist/types/types/raw.d.ts +2 -1
- package/dist/types/types/response.d.ts +9 -8
- package/dist/types/utils/refined.d.ts +4 -3
- package/package.json +5 -19
package/dist/cjs/index.cjs
CHANGED
|
@@ -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.
|
|
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 = '
|
|
30
|
+
static SECRET_KEY_V2 = 'acOrvUS15XRW2o9JksiK1KgQ6Vbds8ZW';
|
|
31
|
+
static SECRET_KEY_V3 = '10a01dcf33762d3a204cb96429918ff6';
|
|
29
32
|
static API_KEY_V1 = '88265e23d4284f25963e6eedac8fbfa3';
|
|
30
|
-
static API_KEY_V2 = '
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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(
|
|
70
|
-
const
|
|
71
|
-
const url = new node_url.URL(options.url ?? '/',
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
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
|
|
80
|
-
if (
|
|
81
|
-
this.jar.setCookies(setCookie,
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
118
|
-
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
184
|
-
sig: encrypt.createSignature('/song/get-song-info', 'ctime=' + this.ctime + 'id=' + musicID, Client.
|
|
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
|
-
|
|
206
|
-
|
|
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.
|
|
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
|
-
|
|
267
|
-
|
|
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.
|
|
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
|
|
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
|
|
288
|
-
|
|
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
|
-
|
|
292
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
317
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
341
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
365
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
389
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
413
|
-
|
|
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
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -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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"}
|