diff --git a/__tests__/api.ts b/__tests__/api.ts index cad5193..802ea16 100644 --- a/__tests__/api.ts +++ b/__tests__/api.ts @@ -147,6 +147,7 @@ if (process.env.CI) { test('DOWNLOAD TRACK128 & ADD METADATA', async (t) => { const track = await api.getTrackInfo(SNG_ID); const trackData = await getTrackDownloadUrl(track, 1); + if (!trackData) throw new Error("Selected track+quality are unavailable"); const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); t.truthy(data); @@ -165,6 +166,7 @@ if (process.env.CI) { // test('TRACK128 WITHOUT ALBUM INFO', async (t) => { // const track = await api.getTrackInfo('912254892'); // const trackData = await getTrackDownloadUrl(track, 1); + // if (!trackData) throw new Error("Selected track+quality are unavailable"); // const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); // t.truthy(data); @@ -185,6 +187,7 @@ if (process.env.CI) { test('DOWNLOAD TRACK320 & ADD METADATA', async (t) => { const track = await api.getTrackInfo(SNG_ID); const trackData = await getTrackDownloadUrl(track, 3); + if (!trackData) throw new Error("Selected track+quality are unavailable"); const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); t.truthy(data); @@ -203,6 +206,7 @@ if (process.env.CI) { test('DOWNLOAD TRACK1411 & ADD METADATA', async (t) => { const track = await api.getTrackInfo(SNG_ID); const trackData = await getTrackDownloadUrl(track, 9); + if (!trackData) throw new Error("Selected track+quality are unavailable"); const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); t.truthy(data); diff --git a/src/lib/get-url.ts b/src/lib/get-url.ts index e4ac1fe..48237dc 100644 --- a/src/lib/get-url.ts +++ b/src/lib/get-url.ts @@ -65,7 +65,7 @@ const getTrackUrlFromServer = async (track_token: string, format: string): Promi * @param track Track info json returned from `getTrackInfo` * @param quality 1 = 128kbps, 3 = 320kbps and 9 = flac (around 1411kbps) */ -export const getTrackDownloadUrl = async (track: trackType, quality: number): Promise<{trackUrl: string, isEncrypted: boolean, fileSize: number}> => { +export const getTrackDownloadUrl = async (track: trackType, quality: number): Promise<{trackUrl: string, isEncrypted: boolean, fileSize: number} | null> => { let formatName: string; switch (quality) { case 9: @@ -113,7 +113,7 @@ export const getTrackDownloadUrl = async (track: trackType, quality: number): Pr fileSize: fileSize, }; } - throw new Error(`Forbidden to access ${url}`); + return null; }; const testUrl = async (url: string): Promise => {