diff --git a/lib/nrk.ts b/lib/nrk.ts index 55ff674..b087086 100644 --- a/lib/nrk.ts +++ b/lib/nrk.ts @@ -47,75 +47,81 @@ async function withDownloadLink( } } -export const nrkRadio = { - search: async (query: string): Promise => { - if (query === "") { - console.error("Empty search query."); - return null; - } - const { status, body } = await get< - searchComponents["schemas"]["searchresult"] - >(`${nrkAPI}/radio/search/search?q=${query}`); - if (status === STATUS_CODE.OK && body) { - return body.results.series?.results; - } - - console.error(`Something went wrong with ${query} - got status ${status}`); +async function search(query: string): Promise { + if (query === "") { + console.error("Empty search query."); return null; - }, - getSerieData: async ( - seriesId: string, - ): Promise<{ episodes: OriginalEpisode[] } & (RadioSeries["series"] | Podcast["series"]) | null> => { - let [ + } + const { status, body } = await get< + searchComponents["schemas"]["searchresult"] + >(`${nrkAPI}/radio/search/search?q=${query}`); + if (status === STATUS_CODE.OK && body) { + return body.results.series?.results; + } + + console.error(`Something went wrong with ${query} - got status ${status}`); + return null; +} + +async function getSerieData( + seriesId: string, +): Promise<{ episodes: OriginalEpisode[] } & (RadioSeries["series"] | Podcast["series"]) | null> { + let [ + { status: episodeStatus, body: episodeResponse }, + { status: seriesStatus, body: serieResponse }, + ] = await Promise.all([ + get( + `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes`, + ), + get( + `${nrkAPI}/radio/catalog/podcast/${seriesId}`, + ), + ]); + + if (episodeStatus !== STATUS_CODE.OK || seriesStatus !== STATUS_CODE.OK) { + [ { status: episodeStatus, body: episodeResponse }, { status: seriesStatus, body: serieResponse }, ] = await Promise.all([ - get( - `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes`, + get( + `https://psapi.nrk.no/radio/catalog/series/${seriesId}/episodes`, ), - get( - `${nrkAPI}/radio/catalog/podcast/${seriesId}`, + get( + `https://psapi.nrk.no/radio/catalog/series/${seriesId}`, ), ]); + } - if (episodeStatus !== STATUS_CODE.OK || seriesStatus !== STATUS_CODE.OK) { - [ - { status: episodeStatus, body: episodeResponse }, - { status: seriesStatus, body: serieResponse }, - ] = await Promise.all([ - get( - `https://psapi.nrk.no/radio/catalog/series/${seriesId}/episodes`, - ), - get( - `https://psapi.nrk.no/radio/catalog/series/${seriesId}`, - ), - ]); - } - - if ( - episodeStatus === STATUS_CODE.OK && seriesStatus === STATUS_CODE.OK && - serieResponse?.series && episodeResponse?._embedded.episodes?.length - ) { - const episodes = await Promise.all( - episodeResponse._embedded.episodes.map((episode) => withDownloadLink(episode, serieResponse.type)), - ); - return { - ...serieResponse.series, - episodes, - }; - } - console.error( - `Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`, + if ( + episodeStatus === STATUS_CODE.OK && seriesStatus === STATUS_CODE.OK && + serieResponse?.series && episodeResponse?._embedded.episodes?.length + ) { + const episodes = await Promise.all( + episodeResponse._embedded.episodes.map((episode) => withDownloadLink(episode, serieResponse.type)), ); - return null; - }, - getEpisode: async (seriesId: string, episodeId: string): Promise => { - const url = `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`; - const { status, body: episode } = await get(url); - if (status === STATUS_CODE.OK && episode) { - return episode; - } - console.error(`Error getting episode ${episodeId}. Status: ${status}. Series: ${seriesId}`); - return null; - }, + return { + ...serieResponse.series, + episodes, + }; + } + console.error( + `Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`, + ); + return null; +} + +async function getEpisode(seriesId: string, episodeId: string): Promise { + const url = `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`; + const { status, body: episode } = await get(url); + if (status === STATUS_CODE.OK && episode) { + return episode; + } + console.error(`Error getting episode ${episodeId}. Status: ${status}. Series: ${seriesId}`); + return null; +} + +export const nrkRadio = { + search, + getSerieData, + getEpisode, };