UNPKG

puppeteer-tough-cookie-store

Version:

Puppeteer cookie store implementation for tough-cookie

87 lines (76 loc) 2.75 kB
import { Cookie, canonicalDomain } from 'tough-cookie' import type { Protocol } from 'puppeteer' export const PuppeteerInfinityExpires = -1; export const ToughInfinityExpires = "Infinity"; export type SameSite = 'lax' | 'strict' | 'none'; /** * convert puppeteer's sameSite to tough-cookie's sameSite */ export const p2tSameSite = (sameSite?: Protocol.Network.CookieSameSite): SameSite => { switch (sameSite) { case 'Lax': return 'lax'; case 'Strict': return 'strict'; case 'None': default: return 'none'; } } /** * convert tough-cookie's sameSite to puppeteer's sameSite */ export const t2pSameSite = (sameSite?: string): Protocol.Network.CookieSameSite => { sameSite = sameSite ? sameSite.toLocaleLowerCase() : 'none' switch (sameSite) { case 'lax': return 'Lax'; case 'strict': return 'Strict'; case 'none': default: return 'Lax'; } } /** * convert puppeteer's cookie to tough-cookie's cookie */ export const serializeForTough = (puppetCookie: Protocol.Network.Cookie): Cookie => { const toughCookie: Cookie = new Cookie({ key: puppetCookie.name, value: puppetCookie.value, expires: (!puppetCookie.expires || puppetCookie.expires === PuppeteerInfinityExpires) ? ToughInfinityExpires : new Date(puppetCookie.expires * 1000), domain: canonicalDomain(puppetCookie.domain), path: puppetCookie.path, secure: puppetCookie.secure, httpOnly: puppetCookie.httpOnly, sameSite: p2tSameSite(puppetCookie.sameSite), hostOnly: !puppetCookie.domain.startsWith("."), // can we really skip them? // creation: currentDate, // lastAccessed: currentDate, }); return toughCookie; } /** * convert tough-cookie's cookie to puppeteer's cookie */ export const serializeForPuppeteer = (toughCookie: Cookie): Protocol.Network.SetCookieRequest => { if (!toughCookie.domain) throw new Error("Unknown domain"); const puppetCookie: Protocol.Network.SetCookieRequest = { name: toughCookie.key, value: toughCookie.value, // domain: !cookie.hostOnly ? '.' + cookie.domain : cookie.domain, domain: toughCookie.domain, path: toughCookie.path || '/', expires: !toughCookie.expires || toughCookie.expires === ToughInfinityExpires ? PuppeteerInfinityExpires : toughCookie.expires.getTime(), secure: toughCookie.secure, httpOnly: toughCookie.hostOnly === null ? undefined : toughCookie.hostOnly, sameSite: t2pSameSite(toughCookie.sameSite), } return puppetCookie; }