@nasheedstation/soundcloud-downloader
Version:
Download Soundcloud audio with Node.js, this is a forked version, the original script was written by @zackradisic
40 lines (32 loc) • 1.38 kB
text/typescript
/** @internal @packageDocumentation */
import { URL } from 'url'
import { AxiosError } from 'axios'
/* eslint-disable camelcase */
export interface PaginatedQuery<T> {
collection: T[],
total_results?: number, // is omitted if limit parameter is supplied
next_href: string,
query_urn: string
}
export const resolveURL = 'https://api-v2.soundcloud.com/resolve'
export const handleRequestErrs = (err: AxiosError): AxiosError<unknown, unknown> => {
if (!err.response) return err
if (!err.response.status) return err
if (err.response.status === 401) err.message += ', is your Client ID correct?'
if (err.response.status === 404) err.message += ', could not find the song... it may be private - check the URL'
return err
}
export const appendURL = (url: string, ...params: string[]): string => {
const u = new URL(url)
params.forEach((val, idx) => {
if (idx % 2 === 0) u.searchParams.append(val, params[idx + 1])
})
return u.href
}
export const extractIDFromPersonalizedTrackURL = (url: string): string => {
if (!url.includes('https://soundcloud.com/discover/sets/personalized-tracks::')) return ''
const split = url.split(':')
if (split.length < 5) return ''
return split[4]
}
export const kindMismatchError = (expected: string, received: string): Error => new Error(`Expected resouce of kind: (${expected}), received: (${received})`)