{"version":3,"file":"utils.Cf3wctUm.mjs","names":[],"sources":["https:/framerusercontent.com/modules/X8c4ZoloiZ51fgXYaDxD/lF4K59KXIvW7k3AtwbuN/paywalls.js","https:/framerusercontent.com/modules/lxbPuYdTMILYoZskXgQN/bvr2VBLTfq3WdmAkyJA9/utils.js"],"sourcesContent":["// Single source of truth for currency routing & symbols\nexport const PAYWALLS={USD:{url:\"https://centocare.com/heart-check/pricing?cur=usd\",symbol:\"$\"},EUR:{url:\"https://centocare.com/heart-check/pricing?cur=eur\",symbol:\"€\"},GBP:{url:\"https://centocare.com/heart-check/pricing?cur=gbp\",symbol:\"\\xa3\"},AUD:{url:\"https://centocare.com/heart-check/pricing?cur=aud\",symbol:\"A$\"}};\nexport const __FramerMetadata__ = {\"exports\":{\"PAYWALLS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Currency\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./paywalls.map","// utils.ts\nimport{PAYWALLS}from\"https://framerusercontent.com/modules/X8c4ZoloiZ51fgXYaDxD/lF4K59KXIvW7k3AtwbuN/paywalls.js\";/**\n * Read a query parameter from the current URL.\n */export const qp=name=>new URLSearchParams(location.search).get(name);/**\n * Normalise a string: trim and return null if empty.\n */export const val=x=>x&&x.trim().length?x.trim():null;// -----------------------------------------------------\n// Safe storage helpers (exported so components can use)\n// -----------------------------------------------------\nexport function safeLocalGet(key){try{if(typeof window===\"undefined\"||!window.localStorage)return\"\";return window.localStorage.getItem(key)||\"\";}catch{return\"\";}}export function safeLocalSet(key,value){try{if(typeof window===\"undefined\"||!window.localStorage)return;window.localStorage.setItem(key,value);}catch{// ignore\n}}export function safeSessionGet(key){try{if(typeof window===\"undefined\"||!window.sessionStorage)return\"\";return window.sessionStorage.getItem(key)||\"\";}catch{return\"\";}}export function safeSessionSet(key,value){try{if(typeof window===\"undefined\"||!window.sessionStorage)return;window.sessionStorage.setItem(key,value);}catch{// ignore\n}}/**\n * Broad \"Europe\" set (used to infer EUR as default currency).\n */const EURO_COUNTRIES=new Set([\"AT\",\"BE\",\"BG\",\"HR\",\"CY\",\"CZ\",\"DK\",\"EE\",\"FI\",\"FR\",\"DE\",\"GR\",\"HU\",\"IE\",\"IT\",\"LV\",\"LT\",\"LU\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SK\",\"SI\",\"ES\",\"SE\",\"AD\",\"AL\",\"AM\",\"AX\",\"BA\",\"BY\",\"CH\",\"FO\",\"GG\",\"GI\",\"IM\",\"IS\",\"JE\",\"LI\",\"MC\",\"MD\",\"ME\",\"MK\",\"NO\",\"RS\",\"RU\",\"SJ\",\"SM\",\"UA\",\"VA\"]);/**\n * Best-effort detection of the browser's country (ISO2) from language/locale.\n */export function getBrowserCountry(){try{const lang=(navigator.language||\"\").toUpperCase();const m=lang.match(/[-_](\\w{2})$/);if(m&&m[1])return m[1];const loc=(Intl.DateTimeFormat().resolvedOptions().locale||\"\").toUpperCase();const m2=loc.match(/[-_](\\w{2})$/);if(m2&&m2[1])return m2[1];}catch{}return\"\";}/**\n * Map ISO2 → one of USD/EUR/GBP/AUD (fallback USD).\n */export function inferCurrencyFromCountry(ctryISO2){const c=(ctryISO2||\"\").toUpperCase();if(!c)return\"USD\";if(c===\"GB\"||c===\"UK\")return\"GBP\";if(c===\"AU\")return\"AUD\";if(EURO_COUNTRIES.has(c)&&c!==\"GB\")return\"EUR\";return\"USD\";}/**\n * Resolve the best currency to use for the user.\n */export function resolveCurrency(){const urlCur=(val(qp(\"cur\"))||val(qp(\"currency\"))||\"\").toUpperCase();const lsCur=safeLocalGet(\"cc_currency\").toUpperCase();let ctry=(val(qp(\"ctry\"))||val(qp(\"country\"))||safeLocalGet(\"cc_country\")||\"\").toUpperCase();if(ctry===\"UK\")ctry=\"GB\";const allowed=[\"USD\",\"EUR\",\"GBP\",\"AUD\"];let cur=urlCur||lsCur;if(!allowed.includes(cur)){cur=inferCurrencyFromCountry(ctry||getBrowserCountry());}// Persist best-known values\nsafeLocalSet(\"cc_currency\",cur);if(ctry)safeLocalSet(\"cc_country\",ctry);return cur;}/**\n * Resolve coupon code for Circle paywalls.\n * Case-insensitive for users → returns UPPERCASE, no currency suffix.\n */export function resolveCoupon(cur){const urlCoupon=val(qp(\"coupon\"))||val(qp(\"coupon_code\"))||val(qp(\"couponCode\"));const ssCoupon=val(safeSessionGet(\"cc_coupon\"));const coupon=urlCoupon||ssCoupon||\"\";if(!coupon)return null;// Normalise to UPPERCASE, but do not append currency codes.\nreturn coupon.toUpperCase();}/**\n * Get Cento client id (cid) from localStorage.\n */export function getCid(){try{return val(safeLocalGet(\"cc_cid\"))||null;}catch{return null;}}/**\n * Build Circle paywall URL with coupon and cid added as query params.\n */export function buildPaywallUrl(cur,coupon,cid){const base=PAYWALLS[cur].url;const url=new URL(base,location.origin);if(coupon)url.searchParams.set(\"coupon_code\",coupon);if(cid)url.searchParams.set(\"cid\",cid);return url.toString();}/**\n * Copy UTM parameters from current page into a destination URL.\n */export function withUtmParams(dest){const url=new URL(dest);const src=new URLSearchParams(location.search);[\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_content\",\"utm_term\"].forEach(k=>{const v=src.get(k);if(v)url.searchParams.set(k,v);});return url.toString();}/**\n * Read coupon raw (URL first, then sessionStorage),\n * normalised to UPPERCASE for consistent handling.\n */export const readRawCoupon=()=>{const url=val(qp(\"coupon\"))||val(qp(\"coupon_code\"))||val(qp(\"couponCode\"))||\"\";const ss=val(safeSessionGet(\"cc_coupon\"))||\"\";const raw=url||ss||\"\";if(!raw)return null;return raw.toUpperCase();};/**\n * Resolve funnel version from URL / session.\n * - URL ?version= wins\n * - falls back to sessionStorage \"version\"\n * - defaults to \"standard\"\n */export const resolveVersion=()=>{if(typeof window===\"undefined\")return\"standard\";const urlVersion=val(qp(\"version\"));const ssVersion=val(safeSessionGet(\"version\"));const raw=(urlVersion||ssVersion||\"\").toLowerCase().trim();// Persist URL version into session for later steps\nif(urlVersion){safeSessionSet(\"version\",urlVersion);}return raw||\"standard\";};/**\n * Return true if coupon should use a TRIAL pricing page.\n * Any coupon that ends with \"TRIAL\" (case-insensitive).\n */export const isTrialCoupon=c=>{if(!c)return false;return c.toUpperCase().trim().endsWith(\"TRIAL\");};/**\n * Return true if coupon should use a BETA pricing page.\n * Any coupon that ends with \"BETA\" (case-insensitive).\n */export const isBetaCoupon=c=>{if(!c)return false;return c.toUpperCase().trim().endsWith(\"BETA\");};/**\n * Internal helper to build pricing URLs (/heart-check/pricing-…)\n * preserving coupon, cur, ctry, cid, r, and UTMs.\n */function buildPricingUrlForPath(path){const u=new URL(path,location.origin);// Use the actual coupon the user entered\nconst rawCoupon=readRawCoupon();if(rawCoupon){u.searchParams.set(\"coupon_code\",rawCoupon);}// Currency: URL first, else resolve()\nconst urlCurRaw=val(qp(\"cur\"))||val(qp(\"currency\"))||\"\";const cur=urlCurRaw?urlCurRaw.toUpperCase().trim():resolveCurrency();if(cur)u.searchParams.set(\"cur\",cur);// Country: URL → LS (if available)\nconst ctry=(val(qp(\"ctry\"))||val(qp(\"country\"))||safeLocalGet(\"cc_country\")||\"\").toUpperCase();if(ctry)u.searchParams.set(\"ctry\",ctry);// cid: URL first, else LS\nconst urlCidRaw=val(qp(\"cid\"))||\"\";const cid=urlCidRaw||getCid();if(cid)u.searchParams.set(\"cid\",cid);// r: pass through if present\nconst rRaw=val(qp(\"r\"))||\"\";if(rRaw)u.searchParams.set(\"r\",rRaw);// UTMs passthrough from current page\nconst src=new URLSearchParams(location.search);[\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_content\",\"utm_term\"].forEach(k=>{const v=src.get(k);if(v)u.searchParams.set(k,v);});return u.toString();}/**\n * Build TRIAL pricing page URL: /heart-check/pricing-trial\n */export const buildTrialUrl=()=>buildPricingUrlForPath(\"/heart-check/pricing-trial\");/**\n * Build BETA pricing page URL: /heart-check/pricing-beta\n */export const buildBetaUrl=()=>buildPricingUrlForPath(\"/heart-check/pricing-beta\");/**\n * Build DEFAULT pricing page URL: /heart-check/pricing\n */export const buildDefaultPricingUrl=()=>buildPricingUrlForPath(\"/heart-check/pricing\");/**\n * Build CONSULTATION page URL: /heart-check/consultation\n */export const buildConsultationUrl=()=>buildPricingUrlForPath(\"/heart-check/consultation\");/* ------------------------------------------------------------------\n   RESULT / SESSION HELPERS FOR HEART-CHECK\n   ------------------------------------------------------------------ */function safeParseJSON(raw){if(!raw)return null;try{return JSON.parse(raw);}catch{return null;}}/**\n * Read the full Heart-Check result object from localStorage (cc_result_hc).\n */export function getResultMeta(){if(typeof window===\"undefined\")return null;const raw=safeLocalGet(\"cc_result_hc\");return safeParseJSON(raw);}/**\n * Convenience helper: get cid from cc_result_hc.\n */export function getCidFromResult(){const meta=getResultMeta();return meta&&typeof meta.cid===\"string\"?meta.cid:null;}/**\n * Helper for Stripe checkout: determine which coupon code should be applied.\n * Returns the canonical UPPERCASE coupon code (or null).\n */export function getCouponCodeForCheckout(){if(typeof window===\"undefined\")return null;return readRawCoupon();}/* ------------------------------------------------------------------\n   STRIPE CHECKOUT INTEGRATION (via n8n webhook)\n   ------------------------------------------------------------------ */const N8N_CHECKOUT_WEBHOOK=\"https://dev.jonaswilbert.com/webhook/1787bd37-b8af-40a1-968b-099d702f06c8\";export async function createStripeCheckoutSession(currency,variant,couponOverride,isTest){if(typeof window===\"undefined\")return null;const resultMeta=getResultMeta();const couponCode=typeof couponOverride===\"string\"?couponOverride||null:getCouponCodeForCheckout();const payload={currency,couponCode,variant,result:resultMeta||null,isTest:!!isTest};try{const res=await fetch(N8N_CHECKOUT_WEBHOOK,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify(payload)});if(!res.ok){console.error(\"Stripe checkout error\",await res.text());return null;}const data=await res.json();const session=Array.isArray(data)?data[0]:data;if(session&&typeof session.url===\"string\"){return session.url;}console.error(\"No URL returned from Stripe checkout endpoint\",data);return null;}catch(err){console.error(\"Checkout request failed\",err);return null;}}\nexport const __FramerMetadata__ = {\"exports\":{\"createStripeCheckoutSession\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCid\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCidFromResult\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getBrowserCountry\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"resolveVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildDefaultPricingUrl\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"safeSessionSet\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"qp\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"resolveCoupon\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildBetaUrl\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildConsultationUrl\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withUtmParams\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"safeLocalSet\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCouponCodeForCheckout\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"readRawCoupon\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildPaywallUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"inferCurrencyFromCountry\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isTrialCoupon\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildTrialUrl\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"resolveCurrency\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isBetaCoupon\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"val\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getResultMeta\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"safeLocalGet\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"safeSessionGet\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./utils.map"],"mappings":"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"}