{"version":3,"file":"web-api.mjs","names":[],"sources":["../../src/utils/web-api.ts"],"sourcesContent":["import {\n  split,\n  concat,\n  bufferToHex,\n  arrayBufferToBase64,\n  base64ToArrayBuffer,\n} from './base64-buffer';\nimport { deriveAsyncKey, encoder, decoder } from './pbkdf2';\n\nimport type { AsyncEncryptation, EncryptAlgorithms } from '@/@types';\n\nconst algorithms = {\n  'AES-GCM': {\n    ivLength: 12,\n\n    create(iv: Uint8Array): AesGcmParams {\n      return {\n        name: 'AES-GCM',\n        // @ts-expect-error\n        iv,\n      };\n    },\n  },\n\n  'AES-CBC': {\n    ivLength: 16,\n\n    create(iv: Uint8Array): AesCbcParams {\n      return {\n        name: 'AES-CBC',\n        // @ts-expect-error\n        iv,\n      };\n    },\n  },\n\n  'AES-CTR': {\n    ivLength: 16,\n\n    create(counter: Uint8Array): AesCtrParams {\n      return {\n        name: 'AES-CTR',\n        // @ts-expect-error\n        counter,\n        length: 64,\n      };\n    },\n  },\n} satisfies Record<\n  EncryptAlgorithms,\n  {\n    ivLength: number;\n    create(iv: Uint8Array): AesGcmParams | AesCbcParams | AesCtrParams;\n  }\n>;\n\nexport async function getAsyncEncryptation(\n  encryptationAlgorithm: EncryptAlgorithms,\n  secretKey: string,\n): Promise<AsyncEncryptation> {\n  const key = await deriveAsyncKey(secretKey, encryptationAlgorithm);\n\n  const algorithm = algorithms[encryptationAlgorithm];\n\n  return {\n    async encrypt(value: string): Promise<string> {\n      const iv = crypto.getRandomValues(new Uint8Array(algorithm.ivLength));\n\n      const encrypted = await crypto.subtle.encrypt(\n        algorithm.create(iv),\n        key,\n        encoder.encode(value),\n      );\n\n      return arrayBufferToBase64(concat(iv, encrypted));\n    },\n\n    async decrypt(value: string): Promise<string> {\n      const payload = base64ToArrayBuffer(value);\n\n      const { iv, cipher } = split(payload, algorithm.ivLength);\n\n      const decrypted = await crypto.subtle.decrypt(\n        algorithm.create(iv),\n        key,\n        cipher,\n      );\n\n      return decoder.decode(decrypted);\n    },\n  };\n}\n\nexport async function hashAsyncSHA256(value: string): Promise<string> {\n  const buffer = await crypto.subtle.digest('SHA-256', encoder.encode(value));\n\n  return bufferToHex(buffer);\n}\n"],"mappings":"mMAWA,MAAM,EAAa,CACjB,UAAW,CACT,SAAU,GAEV,OAAO,EAA8B,CACnC,MAAO,CACL,KAAM,UAEN,IACF,CACF,CACF,EAEA,UAAW,CACT,SAAU,GAEV,OAAO,EAA8B,CACnC,MAAO,CACL,KAAM,UAEN,IACF,CACF,CACF,EAEA,UAAW,CACT,SAAU,GAEV,OAAO,EAAmC,CACxC,MAAO,CACL,KAAM,UAEN,UACA,OAAQ,EACV,CACF,CACF,CACF,EAQA,eAAsB,EACpB,EACA,EAC4B,CAC5B,IAAM,EAAM,MAAM,EAAe,EAAW,CAAqB,EAE3D,EAAY,EAAW,GAE7B,MAAO,CACL,MAAM,QAAQ,EAAgC,CAC5C,IAAM,EAAK,OAAO,gBAAgB,IAAI,WAAW,EAAU,QAAQ,CAAC,EAQpE,OAAO,EAAoB,EAAO,EAAI,MANd,OAAO,OAAO,QACpC,EAAU,OAAO,CAAE,EACnB,EACA,EAAQ,OAAO,CAAK,CACtB,CAE+C,CAAC,CAClD,EAEA,MAAM,QAAQ,EAAgC,CAG5C,GAAM,CAAE,KAAI,UAAW,EAFP,EAAoB,CAED,EAAG,EAAU,QAAQ,EAElD,EAAY,MAAM,OAAO,OAAO,QACpC,EAAU,OAAO,CAAE,EACnB,EACA,CACF,EAEA,OAAO,EAAQ,OAAO,CAAS,CACjC,CACF,CACF,CAEA,eAAsB,EAAgB,EAAgC,CAGpE,OAAO,EAAY,MAFE,OAAO,OAAO,OAAO,UAAW,EAAQ,OAAO,CAAK,CAAC,CAEjD,CAC3B"}