{"version":3,"sources":["../src/library/CookieHandler.ts"],"sourcesContent":["import { serialize, parse, CookieSerializeOptions } from \"cookie\";\nimport {\n\tServerOptions,\n\tTmpCookiesObj,\n\tCookieValueTypes,\n} from \"../types/cookieHandling\";\nimport { CookieManager } from \"../types/cookieHandling/CookieManager\";\n\nexport class CookieHandler implements CookieManager {\n\tisClientSide(): boolean {\n\t\treturn typeof window !== \"undefined\";\n\t}\n\n\tstringify(value: string = \"\"): string {\n\t\ttry {\n\t\t\tconst result = JSON.stringify(value);\n\t\t\treturn /^[\\{\\[]/.test(result) ? result : value;\n\t\t} catch (e) {\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tdecode(str: string): string {\n\t\treturn str ? str.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent) : str;\n\t}\n\n\tprocessValue(value: string): CookieValueTypes {\n\t\tswitch (value) {\n\t\t\tcase \"true\":\n\t\t\t\treturn true;\n\t\t\tcase \"false\":\n\t\t\t\treturn false;\n\t\t\tcase \"undefined\":\n\t\t\t\treturn undefined;\n\t\t\tcase \"null\":\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n\n\tasync getCookies(options?: ServerOptions): Promise<TmpCookiesObj> {\n\t\tlet req;\n\t\tif (options) {\n\t\t\treq = options.req;\n\t\t}\n\t\tif (!this.isClientSide()) {\n\t\t\t// if cookie-parser is used in project, get cookies from ctx.req.cookies\n\t\t\t// if cookie-parser isn't used in project, get cookies from ctx.req.headers.cookie\n\t\t\tif (req?.cookies) {\n\t\t\t\treturn req.cookies;\n\t\t\t}\n\t\t\tif (req?.headers?.cookie) {\n\t\t\t\treturn parse(req.headers.cookie);\n\t\t\t}\n\t\t\treturn {};\n\t\t}\n\n\t\tconst _cookies: TmpCookiesObj = {};\n\t\tconst documentCookies = document.cookie\n\t\t\t? document.cookie.split(\"; \")\n\t\t\t: [];\n\n\t\tfor (let i = 0, len = documentCookies.length; i < len; i++) {\n\t\t\tconst cookieParts = documentCookies[i].split(\"=\");\n\n\t\t\tconst _cookie = cookieParts.slice(1).join(\"=\");\n\t\t\tconst name = cookieParts[0];\n\n\t\t\t_cookies[name] = _cookie;\n\t\t}\n\n\t\treturn _cookies;\n\t}\n\n\tasync hasCookie(key: string, options?: ServerOptions): Promise<boolean> {\n\t\tif (!key) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst cookie = await this.getCookies(options);\n\t\treturn cookie.hasOwnProperty(key);\n\t}\n\n\tasync setCookie(\n\t\tkey: string,\n\t\tdata: any,\n\t\toptions?: ServerOptions\n\t): Promise<void> {\n\t\tlet _cookieOptions: CookieSerializeOptions = {\n\t\t\tsecure: true,\n\t\t};\n\t\tlet _req;\n\t\tlet _res;\n\t\tif (options) {\n\t\t\tconst { req, res, ..._options } = options;\n\t\t\t_req = req;\n\t\t\t_res = res;\n\t\t\t_cookieOptions = Object.assign({}, _options, _cookieOptions);\n\t\t}\n\n\t\tconst cookieStr = serialize(key, this.stringify(data), {\n\t\t\tpath: \"/\",\n\t\t\t..._cookieOptions,\n\t\t});\n\t\tif (!this.isClientSide()) {\n\t\t\tif (_res && _req) {\n\t\t\t\tlet currentCookies = _res.getHeader(\"Set-Cookie\");\n\n\t\t\t\tif (!Array.isArray(currentCookies)) {\n\t\t\t\t\tcurrentCookies = !currentCookies\n\t\t\t\t\t\t? []\n\t\t\t\t\t\t: [String(currentCookies)];\n\t\t\t\t}\n\t\t\t\t_res.setHeader(\"Set-Cookie\", currentCookies.concat(cookieStr));\n\n\t\t\t\tif (_req && _req.cookies) {\n\t\t\t\t\tconst _cookies = _req.cookies;\n\t\t\t\t\tdata === \"\"\n\t\t\t\t\t\t? delete _cookies[key]\n\t\t\t\t\t\t: (_cookies[key] = this.stringify(data));\n\t\t\t\t}\n\n\t\t\t\tif (_req && _req.headers && _req.headers.cookie) {\n\t\t\t\t\tconst _cookies = parse(_req.headers.cookie);\n\n\t\t\t\t\tdata === \"\"\n\t\t\t\t\t\t? delete _cookies[key]\n\t\t\t\t\t\t: (_cookies[key] = this.stringify(data));\n\n\t\t\t\t\t_req.headers.cookie = Object.entries(_cookies).reduce(\n\t\t\t\t\t\t(accum, item) => {\n\t\t\t\t\t\t\treturn accum.concat(`${item[0]}=${item[1]};`);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tdocument.cookie = cookieStr;\n\t\t}\n\t}\n\n\tasync getCookie(\n\t\tkey: string,\n\t\toptions?: ServerOptions\n\t): Promise<CookieValueTypes> {\n\t\tconst _cookies = await this.getCookies(options);\n\t\tconst value = _cookies[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.processValue(this.decode(value));\n\t}\n\n\tasync deleteCookie(key: string, options?: ServerOptions): Promise<void> {\n\t\tthis.setCookie(key, \"\", { ...options, maxAge: -1 });\n\t}\n}\n"],"mappings":"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","names":[]}