import {Request} from "../lifecycle/Request"; import {infer} from "@extollo/util"; /** * Base type representing a parsed cookie. */ export interface HTTPCookie { key: string, originalValue: string, value: any, exists: boolean, } export type MaybeHTTPCookie = HTTPCookie | undefined; export class HTTPCookieJar { protected parsed: {[key: string]: HTTPCookie} = {} constructor( protected request: Request, ) { this.parseCookies() } get(name: string): MaybeHTTPCookie { if ( name in this.parsed ) { return this.parsed[name] } } private parseCookies() { const cookies = String(this.request.getHeader('cookie')) cookies.split(';').forEach(cookie => { const parts = cookie.split('=') const key = parts.shift()?.trim() if ( !key ) return; const value = decodeURI(parts.join('=')) this.parsed[key] = { key, originalValue: value, value: infer(value), exists: true, } }) } }