{"version":3,"file":"utils.mjs","sources":["../../../../../../runtime/crypto/utils.ts"],"sourcesContent":["import {ShopifyError} from '../../lib/error';\n\nimport {HashFormat} from './types';\n\nexport async function createSHA256HMAC(\n  secret: string,\n  payload: string,\n  returnFormat: HashFormat = HashFormat.Base64,\n): Promise<string> {\n  const cryptoLib =\n    typeof (crypto as any)?.webcrypto === 'undefined'\n      ? crypto\n      : (crypto as any).webcrypto;\n\n  const enc = new TextEncoder();\n  const key = await cryptoLib.subtle.importKey(\n    'raw',\n    enc.encode(secret),\n    {\n      name: 'HMAC',\n      hash: {name: 'SHA-256'},\n    },\n    false,\n    ['sign'],\n  );\n\n  const signature = await cryptoLib.subtle.sign(\n    'HMAC',\n    key,\n    enc.encode(payload),\n  );\n  return returnFormat === HashFormat.Base64\n    ? asBase64(signature)\n    : asHex(signature);\n}\n\nexport function asHex(buffer: ArrayBuffer): string {\n  return [...new Uint8Array(buffer)]\n    .map((byte) => byte.toString(16).padStart(2, '0'))\n    .join('');\n}\n\nconst LookupTable =\n  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nexport function asBase64(buffer: ArrayBuffer): string {\n  let output = '';\n\n  const input = new Uint8Array(buffer);\n  for (let i = 0; i < input.length; ) {\n    const byte1 = input[i++];\n    const byte2 = input[i++];\n    const byte3 = input[i++];\n\n    const enc1 = byte1 >> 2;\n    const enc2 = ((byte1 & 0b00000011) << 4) | (byte2 >> 4);\n    let enc3 = ((byte2 & 0b00001111) << 2) | (byte3 >> 6);\n    let enc4 = byte3 & 0b00111111;\n\n    if (isNaN(byte2)) {\n      enc3 = 64;\n    }\n    if (isNaN(byte3)) {\n      enc4 = 64;\n    }\n\n    output +=\n      LookupTable[enc1] +\n      LookupTable[enc2] +\n      LookupTable[enc3] +\n      LookupTable[enc4];\n  }\n  return output;\n}\n\nexport function hashString(str: string, returnFormat: HashFormat): string {\n  const buffer = new TextEncoder().encode(str);\n\n  switch (returnFormat) {\n    case HashFormat.Base64:\n      return asBase64(buffer);\n    case HashFormat.Hex:\n      return asHex(buffer);\n    default:\n      throw new ShopifyError(`Unrecognized hash format '${returnFormat}'`);\n  }\n}\n"],"names":[],"mappings":"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"}