{"version":3,"file":"cookies-utils.mjs","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.\n * @deprecated Use getTrackingValues instead.\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"],"names":[],"mappings":";;AAIA,MAAM,YAAY;AAEX,SAAS,YAAoB;AAClC,MAAI,OAAO;AAEX,MAAI;AACF,UAAM,SAAiB,OAAO;AAC9B,UAAM,oBAAoB,IAAI,YAAY,EAAE;AAC5C,WAAO,gBAAgB,iBAAiB;AAGxC,QAAI,IAAI;AACR,WAAO,UACJ,QAAQ,QAAQ,CAAC,MAAsB;AACtC,YAAM,IAAI,kBAAkB,CAAC,IAAI;AACjC,YAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC;AACA,aAAO,EAAE,SAAS,EAAE;AAAA,IACtB,CAAC,EACA,YAAA;AAAA,EACL,SAAS,KAAK;AAEZ,WAAO,UACJ,QAAQ,QAAQ,CAAC,MAAsB;AACtC,YAAM,IAAK,KAAK,OAAA,IAAW,KAAM;AACjC,YAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC,aAAO,EAAE,SAAS,EAAE;AAAA,IACtB,CAAC,EACA,YAAA;AAAA,EACL;AAEA,SAAO,GAAG,QAAA,CAAS,IAAI,IAAI;AAC7B;AAEO,SAAS,UAAkB;AAEhC,MAAI,aAAa;AACjB,MAAI,aAAa;AAGjB,gBAAa,oBAAI,QAAO,QAAA,MAAc;AAEtC,MAAI;AACF,iBAAa,YAAY,UAAU;AAAA,EACrC,SAAS,KAAK;AACZ,iBAAa;AAAA,EACf;AAEA,QAAM,SAAS,KAAK,IAAI,aAAa,UAAU,EAC5C,SAAS,EAAE,EACX,YAAA;AAGH,SAAO,OAAO,SAAS,GAAG,GAAG;AAC/B;AAMO,SAAS,kBAAkB,SAAiC;AAEjE,QAAM,iBAAiB,kBAAkB,OAAO;AAEhD,SAAO;AAAA,IACL,CAAC,SAAS,GAAG,eAAe;AAAA,IAC5B,CAAC,SAAS,GAAG,eAAe;AAAA,EAAA;AAEhC;"}