{"version":3,"file":"cookies-utils.mjs","names":[],"sources":["../../src/cookies-utils.tsx"],"sourcesContent":["import {ShopifyCookies} from './analytics-types.js';\nimport {SHOPIFY_Y, SHOPIFY_S} from './cart-constants.js';\nimport {getTrackingValues} from './tracking-utils.js';\n\nconst tokenHash = 'xxxx-4xxx-xxxx-xxxxxxxxxxxx';\n\nexport function buildUUID(): string {\n  let hash = '';\n\n  try {\n    const crypto: Crypto = window.crypto;\n    const randomValuesArray = new Uint16Array(31);\n    crypto.getRandomValues(randomValuesArray);\n\n    // Generate a strong UUID\n    let i = 0;\n    hash = tokenHash\n      .replace(/[x]/g, (c: string): string => {\n        const r = randomValuesArray[i] % 16;\n        const v = c === 'x' ? r : (r & 0x3) | 0x8;\n        i++;\n        return v.toString(16);\n      })\n      .toUpperCase();\n  } catch (err) {\n    // crypto not available, generate weak UUID\n    hash = tokenHash\n      .replace(/[x]/g, (c: string): string => {\n        const r = (Math.random() * 16) | 0;\n        const v = c === 'x' ? r : (r & 0x3) | 0x8;\n        return v.toString(16);\n      })\n      .toUpperCase();\n  }\n\n  return `${hexTime()}-${hash}`;\n}\n\nexport function hexTime(): string {\n  // 32 bit representations of new Date().getTime() and performance.now()\n  let dateNumber = 0;\n  let perfNumber = 0;\n\n  // Result of zero-fill right shift is always positive\n  dateNumber = new Date().getTime() >>> 0;\n\n  try {\n    perfNumber = performance.now() >>> 0;\n  } catch (err) {\n    perfNumber = 0;\n  }\n\n  const output = Math.abs(dateNumber + perfNumber)\n    .toString(16)\n    .toLowerCase();\n\n  // Ensure the output is exactly 8 characters\n  return output.padStart(8, '0');\n}\n\n/**\n * Gets the values of _shopify_y and _shopify_s cookies from the provided cookie string. If the Shopify cookies doesn't exist, this method will return an empty string for each missing cookie.\n * @deprecated Use getTrackingValues instead.\n * @publicDocs\n */\nexport function getShopifyCookies(cookies: string): ShopifyCookies {\n  // @ts-expect-error - Undeclared argument type\n  const trackingValues = getTrackingValues(cookies);\n\n  return {\n    [SHOPIFY_Y]: trackingValues.uniqueToken,\n    [SHOPIFY_S]: trackingValues.visitToken,\n  };\n}\n"],"mappings":";;;AAIA,IAAM,YAAY;AAElB,SAAgB,YAAoB;CAClC,IAAI,OAAO;AAEX,KAAI;EACF,MAAM,SAAiB,OAAO;EAC9B,MAAM,oBAAoB,IAAI,YAAY,GAAG;AAC7C,SAAO,gBAAgB,kBAAkB;EAGzC,IAAI,IAAI;AACR,SAAO,UACJ,QAAQ,SAAS,MAAsB;GACtC,MAAM,IAAI,kBAAkB,KAAK;GACjC,MAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC;AACA,UAAO,EAAE,SAAS,GAAG;IACrB,CACD,aAAa;UACT,KAAK;AAEZ,SAAO,UACJ,QAAQ,SAAS,MAAsB;GACtC,MAAM,IAAK,KAAK,QAAQ,GAAG,KAAM;AAEjC,WADU,MAAM,MAAM,IAAK,IAAI,IAAO,GAC7B,SAAS,GAAG;IACrB,CACD,aAAa;;AAGlB,QAAO,GAAG,SAAS,CAAC,GAAG;;AAGzB,SAAgB,UAAkB;CAEhC,IAAI,aAAa;CACjB,IAAI,aAAa;AAGjB,+BAAa,IAAI,MAAM,EAAC,SAAS,KAAK;AAEtC,KAAI;AACF,eAAa,YAAY,KAAK,KAAK;UAC5B,KAAK;AACZ,eAAa;;AAQf,QALe,KAAK,IAAI,aAAa,WAAW,CAC7C,SAAS,GAAG,CACZ,aAAa,CAGF,SAAS,GAAG,IAAI;;;;;;;AAQhC,SAAgB,kBAAkB,SAAiC;CAEjE,MAAM,iBAAiB,kBAAkB,QAAQ;AAEjD,QAAO;GACJ,YAAY,eAAe;GAC3B,YAAY,eAAe;EAC7B"}