{"version":3,"file":"async-encrypt-cookie.cjs","names":["#doNotEncryptValues","#doNotParseValues","#getKey","#encryptValue","#decryptValue","#notifier","IsNotBrowserEnvironmentError","#documentVerification"],"sources":["../../src/classes/async-encrypt-cookie.ts"],"sourcesContent":["import { IsNotBrowserEnvironmentError } from '@/errors';\n\nimport type {\n  AsyncCookieInterface,\n  CookieOptions,\n  RemoveCookieOptions,\n  AsyncEncryptCookieOptions,\n} from '@/@types';\n\nexport class AsyncEncryptCookie implements AsyncCookieInterface {\n  readonly #doNotEncryptValues?: boolean;\n\n  readonly #doNotParseValues?: boolean;\n\n  readonly #getKey: AsyncEncryptCookieOptions['getKey'];\n\n  readonly #encryptValue: AsyncEncryptCookieOptions['encryptValue'];\n\n  readonly #decryptValue: AsyncEncryptCookieOptions['decryptValue'];\n\n  readonly #notifier: AsyncEncryptCookieOptions['notifier'];\n\n  constructor({\n    decryptValue,\n    encryptValue,\n    getKey,\n    notifier,\n    doNotEncryptValues,\n    doNotParseValues,\n  }: AsyncEncryptCookieOptions) {\n    this.#decryptValue = decryptValue;\n    this.#encryptValue = encryptValue;\n    this.#getKey = getKey;\n    this.#notifier = notifier;\n    this.#doNotEncryptValues = doNotEncryptValues;\n    this.#doNotParseValues = doNotParseValues;\n  }\n\n  #documentVerification() {\n    if (\n      typeof document === 'undefined' ||\n      typeof document.cookie === 'undefined' ||\n      typeof window === 'undefined'\n    ) {\n      throw new IsNotBrowserEnvironmentError();\n    }\n  }\n\n  public async set(\n    key: string,\n    value: any,\n    options?: CookieOptions,\n  ): Promise<void> {\n    this.#documentVerification();\n\n    let interntValue = this.#doNotParseValues ? value : JSON.stringify(value);\n\n    if (!this.#doNotEncryptValues) {\n      interntValue = await this.#encryptValue(interntValue);\n    }\n\n    let cookieString = `${encodeURIComponent(this.#getKey(key))}=${encodeURIComponent(interntValue)}`;\n\n    if (options?.expires) {\n      const expires =\n        options.expires instanceof Date\n          ? options.expires.toUTCString()\n          : new Date(Date.now() + options.expires * 1000).toUTCString();\n      cookieString += `; expires=${expires}`;\n    }\n\n    if (options?.path) {\n      cookieString += `; path=${options.path}`;\n    }\n\n    if (options?.domain) {\n      cookieString += `; domain=${options.domain}`;\n    }\n\n    if (options?.secure) {\n      cookieString += `; secure`;\n    }\n    if (options?.sameSite) {\n      cookieString += `; samesite=${options.sameSite}`;\n    }\n\n    document.cookie = cookieString;\n\n    this.#notifier({\n      type: 'set:cookie',\n      key,\n      value: undefined,\n    });\n  }\n\n  public async get<DataType = any>(key: string): Promise<DataType | null> {\n    this.#documentVerification();\n\n    const match = document.cookie.match(\n      new RegExp(`(?:^|; )${encodeURIComponent(this.#getKey(key))}=([^;]*)`),\n    );\n\n    let internValue = match ? match[1] : null;\n\n    if (!this.#doNotEncryptValues && internValue) {\n      internValue = await this.#decryptValue(decodeURIComponent(internValue));\n    }\n\n    if (this.#doNotParseValues) {\n      return internValue as unknown as DataType;\n    }\n\n    this.#notifier({\n      type: 'get:cookie',\n      key,\n      value: undefined,\n    });\n\n    return internValue ? (JSON.parse(internValue) as DataType) : null;\n  }\n\n  public async remove(\n    key: string,\n    options: RemoveCookieOptions = {},\n  ): Promise<void> {\n    this.#documentVerification();\n\n    await this.set(key, '', { ...options, expires: -1 });\n\n    this.#notifier({\n      type: 'remove:cookie',\n      key,\n      value: undefined,\n    });\n  }\n}\n"],"mappings":"kEASA,IAAa,EAAb,KAAgE,CAC9D,GAEA,GAEA,GAEA,GAEA,GAEA,GAEA,YAAY,CACV,eACA,eACA,SACA,WACA,qBACA,oBAC4B,CAC5B,KAAKI,GAAgB,EACrB,KAAKD,GAAgB,EACrB,KAAKD,GAAU,EACf,KAAKG,GAAY,EACjB,KAAKL,GAAsB,EAC3B,KAAKC,GAAoB,CAC3B,CAEA,IAAwB,CACtB,GACE,OAAO,SAAa,KACb,SAAS,SAAW,QAC3B,OAAO,OAAW,IAElB,MAAM,IAAIK,EAAAA,4BAEd,CAEA,MAAa,IACX,EACA,EACA,EACe,CACf,KAAKC,GAAsB,EAE3B,IAAI,EAAe,KAAKN,GAAoB,EAAQ,KAAK,UAAU,CAAK,EAEnE,KAAKD,KACR,EAAe,MAAM,KAAKG,GAAc,CAAY,GAGtD,IAAI,EAAe,GAAG,mBAAmB,KAAKD,GAAQ,CAAG,CAAC,EAAE,GAAG,mBAAmB,CAAY,IAE9F,GAAI,GAAS,QAAS,CACpB,IAAM,EACJ,EAAQ,mBAAmB,KACvB,EAAQ,QAAQ,YAAY,EAC5B,IAAI,KAAK,KAAK,IAAI,EAAI,EAAQ,QAAU,GAAI,CAAC,CAAC,YAAY,EAChE,GAAgB,aAAa,GAC/B,CAEI,GAAS,OACX,GAAgB,UAAU,EAAQ,QAGhC,GAAS,SACX,GAAgB,YAAY,EAAQ,UAGlC,GAAS,SACX,GAAgB,YAEd,GAAS,WACX,GAAgB,cAAc,EAAQ,YAGxC,SAAS,OAAS,EAElB,KAAKG,GAAU,CACb,KAAM,aACN,MACA,MAAO,IAAA,EACT,CAAC,CACH,CAEA,MAAa,IAAoB,EAAuC,CACtE,KAAKE,GAAsB,EAE3B,IAAM,EAAQ,SAAS,OAAO,MACxB,OAAO,WAAW,mBAAmB,KAAKL,GAAQ,CAAG,CAAC,EAAE,SAAS,CACvE,EAEI,EAAc,EAAQ,EAAM,GAAK,KAgBrC,MAdI,CAAC,KAAKF,IAAuB,IAC/B,EAAc,MAAM,KAAKI,GAAc,mBAAmB,CAAW,CAAC,GAGpE,KAAKH,GACA,GAGT,KAAKI,GAAU,CACb,KAAM,aACN,MACA,MAAO,IAAA,EACT,CAAC,EAEM,EAAe,KAAK,MAAM,CAAW,EAAiB,KAC/D,CAEA,MAAa,OACX,EACA,EAA+B,CAAC,EACjB,CACf,KAAKE,GAAsB,EAE3B,MAAM,KAAK,IAAI,EAAK,GAAI,CAAE,GAAG,EAAS,QAAS,EAAG,CAAC,EAEnD,KAAKF,GAAU,CACb,KAAM,gBACN,MACA,MAAO,IAAA,EACT,CAAC,CACH,CACF"}