UNPKG

rsshub

Version:
59 lines (58 loc) 2.27 kB
//#region lib/utils/puppeteer-utils.ts /** * Get Cookie-header-style cookie string from a puppeteer-style cookie array * * @param {import('puppeteer').Protocol.Network.CookieParam[]} cookies Puppeteer-style cookie array * @param {RegExp | string} domainFilter Filter cookies by domain or RegExp * @return {string} Cookie-header-style cookie string (e.g. "foobar; foo=bar; baz=qux") */ const parseCookieArray = (cookies, domainFilter) => { if (typeof domainFilter === "string") { const dotDomain = "." + domainFilter; cookies = cookies.filter(({ domain }) => domain === domainFilter || domain.endsWith(dotDomain)); } else if (domainFilter && domainFilter.test !== void 0) cookies = cookies.filter(({ domain }) => domainFilter.test(domain)); return cookies.map(({ name, value }) => name ? `${name}=${value}` : value).join("; "); }; /** * Construct a puppeteer-style cookie array from a Cookie-header-style cookie string * * @param {string} cookieStr Cookie-header-style cookie string (e.g. "foobar; foo=bar; baz=qux") * @param {string} domain Domain to set for each cookie * @return {import('puppeteer').Protocol.Network.CookieParam[]} Puppeteer-style cookie array */ const constructCookieArray = (cookieStr, domain) => cookieStr.split("; ").map((item) => { const [name, value] = item.split("="); return value === void 0 ? { name: "", value: name, domain } : { name, value, domain }; }); /** * Set cookies for a page * * @param {import('puppeteer').Page} page Puppeteer Page object * @param {string} cookieStr Cookie-header-style cookie string (e.g. "foobar; foo=bar; baz=qux") * @param {string} domain Domain to set for each cookie * @return {Promise<void>} */ const setCookies = async (page, cookieStr, domain) => { const cookies = constructCookieArray(cookieStr, domain); await page.setCookie(...cookies); }; /** * Get Cookie-header-style cookie string from a page * * @param {import('puppeteer').Page} page Puppeteer Page object * @param {RegExp | string} domainFilter Filter cookies by domain or RegExp * @return {Promise<string>} Cookie-header-style cookie string */ const getCookies = async (page, domainFilter) => { return parseCookieArray(await page.cookies(), domainFilter); }; //#endregion export { setCookies as n, getCookies as t };