From df173dfe47e2168959341c6ed69793f171d813d5 Mon Sep 17 00:00:00 2001 From: zS1L3NT Windows Date: Sat, 29 Jul 2023 23:55:56 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20allow=20injecting=20custom=20cookie?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guides/usage.md | 9 +++++++++ src/YTMusic.ts | 21 +++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) 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\(.*\)/) || []