diff --git a/docs/guides/usage.md b/docs/guides/usage.md index 273fa68..09fd1bd 100644 --- a/docs/guides/usage.md +++ b/docs/guides/usage.md @@ -17,3 +17,12 @@ In an async context, you can initialize the API in one line const ytmusic = await new YTMusic().initialize() // Use API here ``` + +## Custom Cookies + +If you want to use your own cookies for all requests, you can do so like this + +```ts +const ytmusic = await new YTMusic() + .initialize("COOKIES=here; COOKIES=here; COOKIES=here") +``` \ No newline at end of file diff --git a/src/YTMusic.ts b/src/YTMusic.ts index 5e0de9f..68f8d0b 100644 --- a/src/YTMusic.ts +++ b/src/YTMusic.ts @@ -57,15 +57,7 @@ export default class YTMusic { if (!res.config.baseURL) return const setCookie = res.headers["set-cookie"] as Array | string - const cookieStrings: string[] = [] - - if (setCookie instanceof Array) { - cookieStrings.push(...setCookie) - } else { - cookieStrings.push(setCookie) - } - - for (const cookieString of cookieStrings) { + for (const cookieString of [setCookie].flat()) { const cookie = Cookie.parse(`${cookieString}`) if (!cookie) return @@ -79,7 +71,16 @@ export default class YTMusic { /** * Initializes the API */ - public async initialize() { + public async initialize(cookies?: string) { + if (cookies) { + for (const cookieString of cookies.split("; ")) { + const cookie = Cookie.parse(`${cookieString}`) + if (!cookie) return + + this.cookiejar.setCookieSync(cookie, "https://music.youtube.com/") + } + } + const html = (await this.client.get("/")).data as string const setConfigs = html.match(/ytcfg\.set\(.*\)/) || []