import CookieSameSiteEnum from '../enums/CookieSameSiteEnum.js'; import type URL from '../../url/URL.js'; import type ICookie from '../ICookie.js'; /** * Cookie string. */ export default class CookieURLUtility { /** * Returns "true" if cookie matches URL. * * @param cookie Cookie. * @param url URL. * @returns "true" if cookie matches URL. */ public static cookieMatchesURL(cookie: ICookie, url: URL): boolean { const isLocalhost = url.hostname === 'localhost' || url.hostname?.endsWith('.localhost'); return ( (!cookie.secure || url.protocol === 'https:' || isLocalhost) && (!cookie.domain || url.hostname?.endsWith(cookie.domain)) && (!cookie.path || url.pathname?.startsWith(cookie.path)) && // @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value ((cookie.sameSite === CookieSameSiteEnum.none && cookie.secure) || cookie.originURL?.hostname === url.hostname) ); } }