@revley/sandbox-checkout-package 0.2.28 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";var A=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var v=(r,s,u,R)=>{if(s&&typeof s=="object"||typeof s=="function")for(let l of w(s))!N.call(r,l)&&l!==u&&A(r,l,{get:()=>s[l],enumerable:!(R=X(s,l))||R.enumerable});return r};var L=r=>v(A({},"__esModule",{value:!0}),r);var U={};module.exports=L(U);var P=(r,s)=>{var y,S;if(console.log("SANDBOX-REDIRECT: Initializing checkout intercept",{storeId:r,checkoutHost:s}),window.__checkoutInterceptInstalled){console.log("SANDBOX-REDIRECT: Already installed, skipping");return}window.__checkoutInterceptInstalled=!0,console.log("SANDBOX-REDIRECT: Installation complete");let u=[/^\/(?:cart\/)?checkout(?:[?#]|$)/i,/^\/checkouts(?:\/|$|\?|#)/i],R=!1,l=(...e)=>R?console.debug("[checkout-intercept]",...e):void 0,k=e=>e.replace(/\/+$/,""),O=e=>e.endsWith(".myshopify.com")||e===location.hostname;function D(e,o=location.origin){try{return e instanceof URL?e:new URL(String(e),o)}catch{return null}}function d(e){let o=D(e);if(!o)return console.log("SANDBOX-REDIRECT: isCheckoutLike - invalid URL",e),!1;if(!O(o.hostname))return console.log("SANDBOX-REDIRECT: isCheckoutLike - not Shopify host",o.hostname),!1;let t=k(o.pathname),n=u.some(i=>i.test(t));return n?(console.log("SANDBOX-REDIRECT: \u2705 Detected checkout-like URL:",String(o)),l("detected checkout-like URL:",String(o))):console.log("SANDBOX-REDIRECT: isCheckoutLike - path doesn't match patterns",t),n}async function h(){console.log("SANDBOX-REDIRECT: \u{1F680} jumpToCustomCheckout started"),console.log("SANDBOX-REDIRECT: Fetching /cart.js");let o=await(await fetch("/cart.js")).json();console.log("SANDBOX-REDIRECT: Cart data received",{token:o.token,itemCount:o.item_count,totalPrice:o.total_price});let t={},n=["_fbp","_fbc","_fbq","_ig_","_igbp","_igshid","_igsh","_ig_visitor_id","_gclid","_gcl_au","_gcl_aw","_gcl_dc","_gcl_gb","_ttp","_tt_enable_cookie","_scid","_sctr","_pin_unauth","_pin_id","_twitter_ads_id","_li_ss","_uetsid","_uetvid","_amzn","_amzn_ads_","_yclid","_ycl_","_rdt_uid","_quora_","_tb_","_ob_","_criteo_","_adobe_","_ttd_","_dv360_","_fbcv","_shopify_pixel_"],i=p=>n.some(g=>p===g||p.startsWith(g)||p.includes(g));document.cookie&&document.cookie.split(";").forEach(p=>{let g=p.trim();if(g){let[_,...B]=g.split("="),C=B.join("=");_&&C&&i(_)&&(t[_]=C)}}),console.log("SANDBOX-REDIRECT: Pixel cookies collected",{count:Object.keys(t).length});let c=`gid://shopify/Cart/${o.token}`;console.log("SANDBOX-REDIRECT: Sending checkout request to backend",{endpoint:`${s}/checkout`,cartId:c,storeId:r});let m=await(await fetch(`${s}/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({storeId:r,cartId:c,cookies:t})})).text();if(console.log("SANDBOX-REDIRECT: Checkout URL received from backend",m),!m){console.error("SANDBOX-REDIRECT: \u274C No checkout ID received from backend");return}let f=D(m);if(!f){console.error("SANDBOX-REDIRECT: \u274C Invalid checkout URL received from backend:",m);return}console.log("SANDBOX-REDIRECT: \u2705 Redirecting to:",f.href),location.assign(f.href)}let E=!1;function a(e){return console.log("SANDBOX-REDIRECT: maybeRedirect called",{targetUrl:String(e),redirected:E}),E?(console.log("SANDBOX-REDIRECT: Already redirected, skipping"),!1):d(e)?(console.log("SANDBOX-REDIRECT: \u{1F3AF} Triggering redirect"),E=!0,h(),!0):(console.log("SANDBOX-REDIRECT: URL is not checkout-like, skipping"),!1)}if(window.__isCheckoutLike=d,window.__maybeRedirect=a,(y=window.Shopify)!=null&&y.designMode){console.log("SANDBOX-REDIRECT: In Shopify design mode, interceptors disabled");return}console.log("SANDBOX-REDIRECT: Setting up interceptors");{let e=window.location,o=e.assign.bind(e),t=e.replace.bind(e);try{Object.defineProperty(e,"assign",{value:n=>{console.log("SANDBOX-REDIRECT: location.assign intercepted",n),a(n)||o(n)},writable:!0,configurable:!0}),Object.defineProperty(e,"replace",{value:n=>{console.log("SANDBOX-REDIRECT: location.replace intercepted",n),a(n)||t(n)},writable:!0,configurable:!0}),console.log("SANDBOX-REDIRECT: \u2705 location.assign/replace interceptors installed")}catch(n){console.error("SANDBOX-REDIRECT: \u274C Failed to override location methods:",n),l("Could not override location methods, relying on Service Worker:",n)}}{let e=window.open;window.open=function(o,t,n){return console.log("SANDBOX-REDIRECT: window.open intercepted",{url:o,target:t}),o&&a(o)?null:e.call(window,o,t,n)},console.log("SANDBOX-REDIRECT: \u2705 window.open interceptor installed")}{let e=history.pushState.bind(history),o=history.replaceState.bind(history);history.pushState=function(t,n,i){if(console.log("SANDBOX-REDIRECT: history.pushState intercepted",i),!(i!=null&&a(i)))return e(t,n,i)},history.replaceState=function(t,n,i){if(console.log("SANDBOX-REDIRECT: history.replaceState intercepted",i),!(i!=null&&a(i)))return o(t,n,i)},addEventListener("popstate",()=>{console.log("SANDBOX-REDIRECT: popstate event fired",location.href),a(location.href)},!0),console.log("SANDBOX-REDIRECT: \u2705 History API interceptors installed")}{let e=o=>o.metaKey||o.ctrlKey||o.shiftKey||o.altKey||o.button!==0;addEventListener("click",o=>{let t=o;if(t.defaultPrevented||e(t))return;let n=o.target;for(;n&&n.nodeType===1&&n.tagName!=="A";)n=n.parentElement;let i=n;!i||!i.href||(console.log("SANDBOX-REDIRECT: Link click intercepted",i.href),d(i.href)&&(console.log("SANDBOX-REDIRECT: \u{1F517} Checkout link clicked, preventing default"),t.preventDefault(),t.stopPropagation(),h()))},!0),console.log("SANDBOX-REDIRECT: \u2705 Link click interceptor installed")}{let e=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){try{if(console.log("SANDBOX-REDIRECT: Form.submit() intercepted",this.action),b(this))return console.log("SANDBOX-REDIRECT: Kaching form detected, skipping"),e.call(this);let t=this.getAttribute("action")||"";if(a(t)||Array.from(this.elements).some(i=>(i==null?void 0:i.name)==="checkout")&&(console.log("SANDBOX-REDIRECT: Form has checkout input, intercepting"),a("/checkout")))return}catch{}return e.call(this)},addEventListener("submit",o=>{try{let t=o.target;if(console.log("SANDBOX-REDIRECT: Form submit event intercepted",t==null?void 0:t.action),b(t)){console.log("SANDBOX-REDIRECT: Kaching form detected in submit event, skipping");return}let n=(t==null?void 0:t.getAttribute("action"))||"",i=Array.from((t==null?void 0:t.elements)||[]);(d(n)||i.some(c=>(c==null?void 0:c.name)==="checkout"))&&(console.log("SANDBOX-REDIRECT: \u{1F4DD} Checkout form submitted, preventing default"),o.preventDefault(),o.stopPropagation(),h())}catch{}},!0),console.log("SANDBOX-REDIRECT: \u2705 Form submit interceptors installed")}{let e=location.href;setInterval(()=>{location.href!==e&&(console.log("SANDBOX-REDIRECT: URL change detected by watchdog",{from:e,to:location.href}),e=location.href,a(e))},250),console.log("SANDBOX-REDIRECT: \u2705 URL watchdog installed")}{let e=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(t,n,i,c,T){try{console.log("SANDBOX-REDIRECT: XHR.open intercepted",{method:t,url:n}),typeof n=="string"&&d(n)&&(console.log("SANDBOX-REDIRECT: \u{1F310} XHR to checkout URL detected"),a(n))}catch{}return e.call(this,t,n,!!i,c,T)},console.log("SANDBOX-REDIRECT: \u2705 XHR interceptor installed")}{let e=window.fetch.bind(window);window.fetch=function(t,n){try{let i=typeof t=="string"||t instanceof URL?String(t):t.url;console.log("SANDBOX-REDIRECT: fetch() intercepted",i),i&&d(i)&&(console.log("SANDBOX-REDIRECT: \u{1F310} fetch() to checkout URL detected"),a(i))}catch{}return e(t,n)},console.log("SANDBOX-REDIRECT: \u2705 fetch() interceptor installed")}let b=e=>{if(!e)return!1;let o=Array.from(e.elements).some(t=>{var i,c;let n=t;return((i=n.name)==null?void 0:i.includes("__kaching_bundles"))||((c=n.name)==null?void 0:c.includes("kaching"))||e.classList.contains("kaching-form")});return o&&console.log("SANDBOX-REDIRECT: Form identified as Kaching form"),o};{console.log("SANDBOX-REDIRECT: Setting up Kaching API proxy");let e={},o;(S=window.kachingCartApi)!=null&&S.updateTieredPromotionsBar&&(console.log("SANDBOX-REDIRECT: Existing kachingCartApi found, capturing original"),o=window.kachingCartApi.updateTieredPromotionsBar,Object.assign(e,window.kachingCartApi)),window.kachingCartApi=new Proxy(e,{get(t,n){return n==="updateTieredPromotionsBar"?async function(...i){for(console.log("SANDBOX-REDIRECT: \u{1F6D2} Kaching updateTieredPromotionsBar called",i),o&&(console.log("SANDBOX-REDIRECT: Calling original Kaching function"),await o.apply(this,i)),console.log("SANDBOX-REDIRECT: Starting Kaching checkout redirect with 10s timeout"),await Promise.all([new Promise(c=>setTimeout(c,1e4)),h()]);;)await new Promise(c=>setTimeout(c,500)),window.location.reload()}:t[n]},set(t,n,i){return n==="updateTieredPromotionsBar"&&(console.log("SANDBOX-REDIRECT: Kaching updateTieredPromotionsBar being set, capturing it"),o=i,l("Kaching updateTieredPromotionsBar captured")),t[n]=i,!0}}),console.log("SANDBOX-REDIRECT: \u2705 Kaching API proxy installed")}},I=()=>{console.log("SANDBOX-REDIRECT: init() called");let r=document.currentScript;if(!r){console.error("SANDBOX-REDIRECT: \u274C No currentScript found");return}let s=r.dataset.revleyStoreId,u=r.dataset.revleyCheckoutHost;console.log("SANDBOX-REDIRECT: Script data attributes",{storeId:s,host:u}),s&&u?P(s,u):console.error("SANDBOX-REDIRECT: \u274C Missing storeId or host",{storeId:s,host:u})};I();addEventListener("pageshow",r=>{r.persisted&&(console.log("SANDBOX-REDIRECT: Page restored from bfcache, resetting state and re-initializing"),window.__checkoutInterceptInstalled=!1,I())});
1
+ "use strict";var T=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var H=(c,l,p,y)=>{if(l&&typeof l=="object"||typeof l=="function")for(let d of U(l))!x.call(c,d)&&d!==p&&T(c,d,{get:()=>l[d],enumerable:!(y=O(l,d))||y.enumerable});return c};var M=c=>H(T({},"__esModule",{value:!0}),c);var B={};module.exports=M(B);var j=(c,l)=>{var L,R;if(window.__checkoutInterceptInstalled)return;window.__checkoutInterceptInstalled=!0;let p=[/^\/(?:cart\/)?checkout(?:[?#]|$)/i,/^\/checkouts(?:\/|$|\?|#)/i],y=!1,d=(...t)=>y?console.debug("[checkout-intercept]",...t):void 0,E=t=>t.replace(/\/+$/,""),A=t=>t.endsWith(".myshopify.com")||t===location.hostname;function w(t,e=location.origin){try{return t instanceof URL?t:new URL(String(t),e)}catch{return null}}function m(t){let e=w(t);if(!e||!A(e.hostname))return!1;let n=E(e.pathname),i=p.some(r=>r.test(n));return i&&d("detected checkout-like URL:",String(e)),i}function S(t){let e=t==null?void 0:t.getAttribute("variant-params");if(!e)return null;let n=e.includes(""")?e.replace(/"/g,'"'):e;try{let i=JSON.parse(n);return Array.isArray(i)?i:null}catch{return null}}async function C(t,e=1){let n=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({items:[{id:Number(t),quantity:e}]}),credentials:"same-origin"});if(!n.ok){let i=await n.text().catch(()=>"");throw new Error(`cart/add.js failed (${n.status}): ${i}`)}return n.json()}async function f(){let e=await(await fetch("/cart.js")).json(),n={},i=["_fbp","_fbc","_fbq","_ig_","_igbp","_igshid","_igsh","_ig_visitor_id","_gclid","_gcl_au","_gcl_aw","_gcl_dc","_gcl_gb","_ttp","_tt_enable_cookie","_scid","_sctr","_pin_unauth","_pin_id","_twitter_ads_id","_li_ss","_uetsid","_uetvid","_amzn","_amzn_ads_","_yclid","_ycl_","_rdt_uid","_quora_","_tb_","_ob_","_criteo_","_adobe_","_ttd_","_dv360_","_fbcv","_shopify_pixel_"],r=g=>i.some(_=>g===_||g.startsWith(_)||g.includes(_));document.cookie&&document.cookie.split(";").forEach(g=>{let _=g.trim();if(_){let[b,...I]=_.split("="),P=I.join("=");b&&P&&r(b)&&(n[b]=P)}});let o=`gid://shopify/Cart/${e.token}`,a=await(await fetch(`${l}/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({storeId:c,cartId:o,cookies:n})})).text();if(console.log("checkoutUrl",a),!a){console.error("No checkout ID received from backend");return}let h=w(a);if(!h){console.error("Invalid checkout URL received from backend:",a);return}sessionStorage.setItem("__revley_checkout_redirect","1"),location.assign(h.href)}let v=!1;function s(t){return v||!m(t)?!1:(v=!0,f(),!0)}if(window.__isCheckoutLike=m,window.__maybeRedirect=s,(L=window.Shopify)!=null&&L.designMode)return;window.addEventListener("pageshow",t=>{t.persisted&&sessionStorage.getItem("__revley_checkout_redirect")&&(sessionStorage.removeItem("__revley_checkout_redirect"),location.reload())});{let t=window.location,e=t.assign.bind(t),n=t.replace.bind(t);try{Object.defineProperty(t,"assign",{value:i=>{s(i)||e(i)},writable:!0,configurable:!0}),Object.defineProperty(t,"replace",{value:i=>{s(i)||n(i)},writable:!0,configurable:!0})}catch(i){d("Could not override location methods, relying on Service Worker:",i)}}{let t=window.open;window.open=function(e,n,i){return e&&s(e)?null:t.call(window,e,n,i)}}{let t=history.pushState.bind(history),e=history.replaceState.bind(history);history.pushState=function(n,i,r){if(!(r!=null&&s(r)))return t(n,i,r)},history.replaceState=function(n,i,r){if(!(r!=null&&s(r)))return e(n,i,r)},addEventListener("popstate",()=>void s(location.href),!0)}{let t=e=>e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0;addEventListener("click",e=>{let n=e;if(n.defaultPrevented||t(n))return;let i=e.target;for(;i&&i.nodeType===1&&i.tagName!=="A";)i=i.parentElement;let r=i;!r||!r.href||m(r.href)&&(n.preventDefault(),n.stopPropagation(),f())},!0)}{let t=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){try{if(k(this))return t.call(this);let n=this.getAttribute("action")||"";if(s(n)||Array.from(this.elements).some(r=>(r==null?void 0:r.name)==="checkout")&&s("/checkout"))return}catch{}return t.call(this)},addEventListener("submit",e=>{try{let n=e.target;if(k(n))return;let i=(n==null?void 0:n.getAttribute("action"))||"",r=Array.from((n==null?void 0:n.elements)||[]);(m(i)||r.some(o=>(o==null?void 0:o.name)==="checkout"))&&(e.preventDefault(),e.stopPropagation(),f())}catch{}},!0)}{let t=location.href;setInterval(()=>{location.href!==t&&(t=location.href,s(t))},250)}{let t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(n,i,r,o,u){try{typeof i=="string"&&m(i)&&s(i)}catch{}return t.call(this,n,i,!!r,o,u)}}{let t=window.fetch.bind(window);window.fetch=function(n,i){try{let r=typeof n=="string"||n instanceof URL?String(n):n.url;r&&m(r)&&s(r)}catch{}return t(n,i)}}let k=t=>t?Array.from(t.elements).some(e=>{var i,r;let n=e;return((i=n.name)==null?void 0:i.includes("__kaching_bundles"))||((r=n.name)==null?void 0:r.includes("kaching"))||t.classList.contains("kaching-form")}):!1;document.addEventListener("click",async t=>{var r,o,u;let e=t.target,n=(r=e==null?void 0:e.closest)==null?void 0:r.call(e,"button.shopify-payment-button__button");if(!n)return;let i=n.closest("shopify-accelerated-checkout");if(i){t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation();try{let a=S(i),h=(u=(o=a==null?void 0:a[0])==null?void 0:o.id)!=null?u:51504147202335;if(!h)throw new Error("Could not determine variant id");try{window.upcartOpenOnAddToCartOverride=!1,window.upcartShouldOpenOnAddToCartBackgroundNetworkCall=!1}catch{console.log("Failed to prevent upcart from opening")}await C(h,1),await f()}catch(a){console.error("Intercepted Buy It Now failed; falling back:",a),window.location.assign("/checkout")}}},!0);{let t={},e;(R=window.kachingCartApi)!=null&&R.updateTieredPromotionsBar&&(e=window.kachingCartApi.updateTieredPromotionsBar,Object.assign(t,window.kachingCartApi)),window.kachingCartApi=new Proxy(t,{get(n,i){return i==="updateTieredPromotionsBar"?async function(...r){throw document.querySelectorAll(".shop-add-to-cart-button.product-form_submit").forEach(o=>{var a;o.disabled=!0,o.style.pointerEvents="none",o.style.opacity="0.5";let u=o.cloneNode(!0);u.disabled=!0,u.style.pointerEvents="none",u.style.opacity="0.5",(a=o.parentNode)==null||a.replaceChild(u,o)}),e&&await e.apply(this,r),await Promise.all([new Promise(o=>setTimeout(o,1e4)),f()]),new Error("STOP")}:n[i]},set(n,i,r){return i==="updateTieredPromotionsBar"&&(e=r,d("Kaching updateTieredPromotionsBar captured")),n[i]=r,!0}})}},q=()=>{let c=document.currentScript;if(!c)return;let l=c.dataset.revleyStoreId,p=c.dataset.revleyCheckoutHost;l&&p&&j(l,p)};q();
@@ -3,6 +3,8 @@ declare global {
3
3
  kachingCartApi: {
4
4
  updateTieredPromotionsBar: () => void;
5
5
  };
6
+ upcartOpenOnAddToCartOverride?: boolean;
7
+ upcartShouldOpenOnAddToCartBackgroundNetworkCall?: boolean;
6
8
  }
7
9
  }
8
10
 
package/dist/esm/index.js CHANGED
@@ -1 +1 @@
1
- var k=(c,a)=>{if(console.log("SANDBOX-REDIRECT: Initializing checkout intercept",{storeId:c,checkoutHost:a}),window.__checkoutInterceptInstalled){console.log("SANDBOX-REDIRECT: Already installed, skipping");return}window.__checkoutInterceptInstalled=!0,console.log("SANDBOX-REDIRECT: Installation complete");let l=[/^\/(?:cart\/)?checkout(?:[?#]|$)/i,/^\/checkouts(?:\/|$|\?|#)/i],T=!1,m=(...e)=>T?console.debug("[checkout-intercept]",...e):void 0,C=e=>e.replace(/\/+$/,""),A=e=>e.endsWith(".myshopify.com")||e===location.hostname;function _(e,n=location.origin){try{return e instanceof URL?e:new URL(String(e),n)}catch{return null}}function u(e){let n=_(e);if(!n)return console.log("SANDBOX-REDIRECT: isCheckoutLike - invalid URL",e),!1;if(!A(n.hostname))return console.log("SANDBOX-REDIRECT: isCheckoutLike - not Shopify host",n.hostname),!1;let o=C(n.pathname),t=l.some(i=>i.test(o));return t?(console.log("SANDBOX-REDIRECT: \u2705 Detected checkout-like URL:",String(n)),m("detected checkout-like URL:",String(n))):console.log("SANDBOX-REDIRECT: isCheckoutLike - path doesn't match patterns",o),t}async function p(){console.log("SANDBOX-REDIRECT: \u{1F680} jumpToCustomCheckout started"),console.log("SANDBOX-REDIRECT: Fetching /cart.js");let n=await(await fetch("/cart.js")).json();console.log("SANDBOX-REDIRECT: Cart data received",{token:n.token,itemCount:n.item_count,totalPrice:n.total_price});let o={},t=["_fbp","_fbc","_fbq","_ig_","_igbp","_igshid","_igsh","_ig_visitor_id","_gclid","_gcl_au","_gcl_aw","_gcl_dc","_gcl_gb","_ttp","_tt_enable_cookie","_scid","_sctr","_pin_unauth","_pin_id","_twitter_ads_id","_li_ss","_uetsid","_uetvid","_amzn","_amzn_ads_","_yclid","_ycl_","_rdt_uid","_quora_","_tb_","_ob_","_criteo_","_adobe_","_ttd_","_dv360_","_fbcv","_shopify_pixel_"],i=g=>t.some(d=>g===d||g.startsWith(d)||g.includes(d));document.cookie&&document.cookie.split(";").forEach(g=>{let d=g.trim();if(d){let[f,...I]=d.split("="),y=I.join("=");f&&y&&i(f)&&(o[f]=y)}}),console.log("SANDBOX-REDIRECT: Pixel cookies collected",{count:Object.keys(o).length});let s=`gid://shopify/Cart/${n.token}`;console.log("SANDBOX-REDIRECT: Sending checkout request to backend",{endpoint:`${a}/checkout`,cartId:s,storeId:c});let R=await(await fetch(`${a}/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({storeId:c,cartId:s,cookies:o})})).text();if(console.log("SANDBOX-REDIRECT: Checkout URL received from backend",R),!R){console.error("SANDBOX-REDIRECT: \u274C No checkout ID received from backend");return}let E=_(R);if(!E){console.error("SANDBOX-REDIRECT: \u274C Invalid checkout URL received from backend:",R);return}console.log("SANDBOX-REDIRECT: \u2705 Redirecting to:",E.href),location.assign(E.href)}let h=!1;function r(e){return console.log("SANDBOX-REDIRECT: maybeRedirect called",{targetUrl:String(e),redirected:h}),h?(console.log("SANDBOX-REDIRECT: Already redirected, skipping"),!1):u(e)?(console.log("SANDBOX-REDIRECT: \u{1F3AF} Triggering redirect"),h=!0,p(),!0):(console.log("SANDBOX-REDIRECT: URL is not checkout-like, skipping"),!1)}if(window.__isCheckoutLike=u,window.__maybeRedirect=r,window.Shopify?.designMode){console.log("SANDBOX-REDIRECT: In Shopify design mode, interceptors disabled");return}console.log("SANDBOX-REDIRECT: Setting up interceptors");{let e=window.location,n=e.assign.bind(e),o=e.replace.bind(e);try{Object.defineProperty(e,"assign",{value:t=>{console.log("SANDBOX-REDIRECT: location.assign intercepted",t),r(t)||n(t)},writable:!0,configurable:!0}),Object.defineProperty(e,"replace",{value:t=>{console.log("SANDBOX-REDIRECT: location.replace intercepted",t),r(t)||o(t)},writable:!0,configurable:!0}),console.log("SANDBOX-REDIRECT: \u2705 location.assign/replace interceptors installed")}catch(t){console.error("SANDBOX-REDIRECT: \u274C Failed to override location methods:",t),m("Could not override location methods, relying on Service Worker:",t)}}{let e=window.open;window.open=function(n,o,t){return console.log("SANDBOX-REDIRECT: window.open intercepted",{url:n,target:o}),n&&r(n)?null:e.call(window,n,o,t)},console.log("SANDBOX-REDIRECT: \u2705 window.open interceptor installed")}{let e=history.pushState.bind(history),n=history.replaceState.bind(history);history.pushState=function(o,t,i){if(console.log("SANDBOX-REDIRECT: history.pushState intercepted",i),!(i!=null&&r(i)))return e(o,t,i)},history.replaceState=function(o,t,i){if(console.log("SANDBOX-REDIRECT: history.replaceState intercepted",i),!(i!=null&&r(i)))return n(o,t,i)},addEventListener("popstate",()=>{console.log("SANDBOX-REDIRECT: popstate event fired",location.href),r(location.href)},!0),console.log("SANDBOX-REDIRECT: \u2705 History API interceptors installed")}{let e=n=>n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.button!==0;addEventListener("click",n=>{let o=n;if(o.defaultPrevented||e(o))return;let t=n.target;for(;t&&t.nodeType===1&&t.tagName!=="A";)t=t.parentElement;let i=t;!i||!i.href||(console.log("SANDBOX-REDIRECT: Link click intercepted",i.href),u(i.href)&&(console.log("SANDBOX-REDIRECT: \u{1F517} Checkout link clicked, preventing default"),o.preventDefault(),o.stopPropagation(),p()))},!0),console.log("SANDBOX-REDIRECT: \u2705 Link click interceptor installed")}{let e=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){try{if(console.log("SANDBOX-REDIRECT: Form.submit() intercepted",this.action),D(this))return console.log("SANDBOX-REDIRECT: Kaching form detected, skipping"),e.call(this);let o=this.getAttribute("action")||"";if(r(o)||Array.from(this.elements).some(i=>i?.name==="checkout")&&(console.log("SANDBOX-REDIRECT: Form has checkout input, intercepting"),r("/checkout")))return}catch{}return e.call(this)},addEventListener("submit",n=>{try{let o=n.target;if(console.log("SANDBOX-REDIRECT: Form submit event intercepted",o?.action),D(o)){console.log("SANDBOX-REDIRECT: Kaching form detected in submit event, skipping");return}let t=o?.getAttribute("action")||"",i=Array.from(o?.elements||[]);(u(t)||i.some(s=>s?.name==="checkout"))&&(console.log("SANDBOX-REDIRECT: \u{1F4DD} Checkout form submitted, preventing default"),n.preventDefault(),n.stopPropagation(),p())}catch{}},!0),console.log("SANDBOX-REDIRECT: \u2705 Form submit interceptors installed")}{let e=location.href;setInterval(()=>{location.href!==e&&(console.log("SANDBOX-REDIRECT: URL change detected by watchdog",{from:e,to:location.href}),e=location.href,r(e))},250),console.log("SANDBOX-REDIRECT: \u2705 URL watchdog installed")}{let e=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(o,t,i,s,b){try{console.log("SANDBOX-REDIRECT: XHR.open intercepted",{method:o,url:t}),typeof t=="string"&&u(t)&&(console.log("SANDBOX-REDIRECT: \u{1F310} XHR to checkout URL detected"),r(t))}catch{}return e.call(this,o,t,!!i,s,b)},console.log("SANDBOX-REDIRECT: \u2705 XHR interceptor installed")}{let e=window.fetch.bind(window);window.fetch=function(o,t){try{let i=typeof o=="string"||o instanceof URL?String(o):o.url;console.log("SANDBOX-REDIRECT: fetch() intercepted",i),i&&u(i)&&(console.log("SANDBOX-REDIRECT: \u{1F310} fetch() to checkout URL detected"),r(i))}catch{}return e(o,t)},console.log("SANDBOX-REDIRECT: \u2705 fetch() interceptor installed")}let D=e=>{if(!e)return!1;let n=Array.from(e.elements).some(o=>{let t=o;return t.name?.includes("__kaching_bundles")||t.name?.includes("kaching")||e.classList.contains("kaching-form")});return n&&console.log("SANDBOX-REDIRECT: Form identified as Kaching form"),n};{console.log("SANDBOX-REDIRECT: Setting up Kaching API proxy");let e={},n;window.kachingCartApi?.updateTieredPromotionsBar&&(console.log("SANDBOX-REDIRECT: Existing kachingCartApi found, capturing original"),n=window.kachingCartApi.updateTieredPromotionsBar,Object.assign(e,window.kachingCartApi)),window.kachingCartApi=new Proxy(e,{get(o,t){return t==="updateTieredPromotionsBar"?async function(...i){for(console.log("SANDBOX-REDIRECT: \u{1F6D2} Kaching updateTieredPromotionsBar called",i),n&&(console.log("SANDBOX-REDIRECT: Calling original Kaching function"),await n.apply(this,i)),console.log("SANDBOX-REDIRECT: Starting Kaching checkout redirect with 10s timeout"),await Promise.all([new Promise(s=>setTimeout(s,1e4)),p()]);;)await new Promise(s=>setTimeout(s,500)),window.location.reload()}:o[t]},set(o,t,i){return t==="updateTieredPromotionsBar"&&(console.log("SANDBOX-REDIRECT: Kaching updateTieredPromotionsBar being set, capturing it"),n=i,m("Kaching updateTieredPromotionsBar captured")),o[t]=i,!0}}),console.log("SANDBOX-REDIRECT: \u2705 Kaching API proxy installed")}},S=()=>{console.log("SANDBOX-REDIRECT: init() called");let c=document.currentScript;if(!c){console.error("SANDBOX-REDIRECT: \u274C No currentScript found");return}let a=c.dataset.revleyStoreId,l=c.dataset.revleyCheckoutHost;console.log("SANDBOX-REDIRECT: Script data attributes",{storeId:a,host:l}),a&&l?k(a,l):console.error("SANDBOX-REDIRECT: \u274C Missing storeId or host",{storeId:a,host:l})};S();addEventListener("pageshow",c=>{c.persisted&&(console.log("SANDBOX-REDIRECT: Page restored from bfcache, resetting state and re-initializing"),window.__checkoutInterceptInstalled=!1,S())});
1
+ var S=(u,m)=>{if(window.__checkoutInterceptInstalled)return;window.__checkoutInterceptInstalled=!0;let g=[/^\/(?:cart\/)?checkout(?:[?#]|$)/i,/^\/checkouts(?:\/|$|\?|#)/i],L=!1,f=(...t)=>L?console.debug("[checkout-intercept]",...t):void 0,P=t=>t.replace(/\/+$/,""),R=t=>t.endsWith(".myshopify.com")||t===location.hostname;function y(t,r=location.origin){try{return t instanceof URL?t:new URL(String(t),r)}catch{return null}}function c(t){let r=y(t);if(!r||!R(r.hostname))return!1;let n=P(r.pathname),e=g.some(i=>i.test(n));return e&&f("detected checkout-like URL:",String(r)),e}function T(t){let r=t?.getAttribute("variant-params");if(!r)return null;let n=r.includes(""")?r.replace(/"/g,'"'):r;try{let e=JSON.parse(n);return Array.isArray(e)?e:null}catch{return null}}async function E(t,r=1){let n=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({items:[{id:Number(t),quantity:r}]}),credentials:"same-origin"});if(!n.ok){let e=await n.text().catch(()=>"");throw new Error(`cart/add.js failed (${n.status}): ${e}`)}return n.json()}async function d(){let r=await(await fetch("/cart.js")).json(),n={},e=["_fbp","_fbc","_fbq","_ig_","_igbp","_igshid","_igsh","_ig_visitor_id","_gclid","_gcl_au","_gcl_aw","_gcl_dc","_gcl_gb","_ttp","_tt_enable_cookie","_scid","_sctr","_pin_unauth","_pin_id","_twitter_ads_id","_li_ss","_uetsid","_uetvid","_amzn","_amzn_ads_","_yclid","_ycl_","_rdt_uid","_quora_","_tb_","_ob_","_criteo_","_adobe_","_ttd_","_dv360_","_fbcv","_shopify_pixel_"],i=p=>e.some(l=>p===l||p.startsWith(l)||p.includes(l));document.cookie&&document.cookie.split(";").forEach(p=>{let l=p.trim();if(l){let[h,...A]=l.split("="),k=A.join("=");h&&k&&i(h)&&(n[h]=k)}});let o=`gid://shopify/Cart/${r.token}`,_=await(await fetch(`${m}/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({storeId:u,cartId:o,cookies:n})})).text();if(console.log("checkoutUrl",_),!_){console.error("No checkout ID received from backend");return}let v=y(_);if(!v){console.error("Invalid checkout URL received from backend:",_);return}sessionStorage.setItem("__revley_checkout_redirect","1"),location.assign(v.href)}let b=!1;function a(t){return b||!c(t)?!1:(b=!0,d(),!0)}if(window.__isCheckoutLike=c,window.__maybeRedirect=a,window.Shopify?.designMode)return;window.addEventListener("pageshow",t=>{t.persisted&&sessionStorage.getItem("__revley_checkout_redirect")&&(sessionStorage.removeItem("__revley_checkout_redirect"),location.reload())});{let t=window.location,r=t.assign.bind(t),n=t.replace.bind(t);try{Object.defineProperty(t,"assign",{value:e=>{a(e)||r(e)},writable:!0,configurable:!0}),Object.defineProperty(t,"replace",{value:e=>{a(e)||n(e)},writable:!0,configurable:!0})}catch(e){f("Could not override location methods, relying on Service Worker:",e)}}{let t=window.open;window.open=function(r,n,e){return r&&a(r)?null:t.call(window,r,n,e)}}{let t=history.pushState.bind(history),r=history.replaceState.bind(history);history.pushState=function(n,e,i){if(!(i!=null&&a(i)))return t(n,e,i)},history.replaceState=function(n,e,i){if(!(i!=null&&a(i)))return r(n,e,i)},addEventListener("popstate",()=>void a(location.href),!0)}{let t=r=>r.metaKey||r.ctrlKey||r.shiftKey||r.altKey||r.button!==0;addEventListener("click",r=>{let n=r;if(n.defaultPrevented||t(n))return;let e=r.target;for(;e&&e.nodeType===1&&e.tagName!=="A";)e=e.parentElement;let i=e;!i||!i.href||c(i.href)&&(n.preventDefault(),n.stopPropagation(),d())},!0)}{let t=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){try{if(w(this))return t.call(this);let n=this.getAttribute("action")||"";if(a(n)||Array.from(this.elements).some(i=>i?.name==="checkout")&&a("/checkout"))return}catch{}return t.call(this)},addEventListener("submit",r=>{try{let n=r.target;if(w(n))return;let e=n?.getAttribute("action")||"",i=Array.from(n?.elements||[]);(c(e)||i.some(o=>o?.name==="checkout"))&&(r.preventDefault(),r.stopPropagation(),d())}catch{}},!0)}{let t=location.href;setInterval(()=>{location.href!==t&&(t=location.href,a(t))},250)}{let t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(n,e,i,o,s){try{typeof e=="string"&&c(e)&&a(e)}catch{}return t.call(this,n,e,!!i,o,s)}}{let t=window.fetch.bind(window);window.fetch=function(n,e){try{let i=typeof n=="string"||n instanceof URL?String(n):n.url;i&&c(i)&&a(i)}catch{}return t(n,e)}}let w=t=>t?Array.from(t.elements).some(r=>{let n=r;return n.name?.includes("__kaching_bundles")||n.name?.includes("kaching")||t.classList.contains("kaching-form")}):!1;document.addEventListener("click",async t=>{let n=t.target?.closest?.("button.shopify-payment-button__button");if(!n)return;let e=n.closest("shopify-accelerated-checkout");if(e){t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation();try{let o=T(e)?.[0]?.id??51504147202335;if(!o)throw new Error("Could not determine variant id");try{window.upcartOpenOnAddToCartOverride=!1,window.upcartShouldOpenOnAddToCartBackgroundNetworkCall=!1}catch{console.log("Failed to prevent upcart from opening")}await E(o,1),await d()}catch(i){console.error("Intercepted Buy It Now failed; falling back:",i),window.location.assign("/checkout")}}},!0);{let t={},r;window.kachingCartApi?.updateTieredPromotionsBar&&(r=window.kachingCartApi.updateTieredPromotionsBar,Object.assign(t,window.kachingCartApi)),window.kachingCartApi=new Proxy(t,{get(n,e){return e==="updateTieredPromotionsBar"?async function(...i){throw document.querySelectorAll(".shop-add-to-cart-button.product-form_submit").forEach(o=>{o.disabled=!0,o.style.pointerEvents="none",o.style.opacity="0.5";let s=o.cloneNode(!0);s.disabled=!0,s.style.pointerEvents="none",s.style.opacity="0.5",o.parentNode?.replaceChild(s,o)}),r&&await r.apply(this,i),await Promise.all([new Promise(o=>setTimeout(o,1e4)),d()]),new Error("STOP")}:n[e]},set(n,e,i){return e==="updateTieredPromotionsBar"&&(r=i,f("Kaching updateTieredPromotionsBar captured")),n[e]=i,!0}})}},C=()=>{let u=document.currentScript;if(!u)return;let m=u.dataset.revleyStoreId,g=u.dataset.revleyCheckoutHost;m&&g&&S(m,g)};C();
@@ -1 +1 @@
1
- "use strict";var SandboxCheckoutPkg=(()=>{var A=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var v=(r,s,u,h)=>{if(s&&typeof s=="object"||typeof s=="function")for(let l of w(s))!N.call(r,l)&&l!==u&&A(r,l,{get:()=>s[l],enumerable:!(h=X(s,l))||h.enumerable});return r};var L=r=>v(A({},"__esModule",{value:!0}),r);var U={};var P=(r,s)=>{var y,S;if(console.log("SANDBOX-REDIRECT: Initializing checkout intercept",{storeId:r,checkoutHost:s}),window.__checkoutInterceptInstalled){console.log("SANDBOX-REDIRECT: Already installed, skipping");return}window.__checkoutInterceptInstalled=!0,console.log("SANDBOX-REDIRECT: Installation complete");let u=[/^\/(?:cart\/)?checkout(?:[?#]|$)/i,/^\/checkouts(?:\/|$|\?|#)/i],h=!1,l=(...t)=>h?console.debug("[checkout-intercept]",...t):void 0,k=t=>t.replace(/\/+$/,""),O=t=>t.endsWith(".myshopify.com")||t===location.hostname;function D(t,o=location.origin){try{return t instanceof URL?t:new URL(String(t),o)}catch(e){return null}}function d(t){let o=D(t);if(!o)return console.log("SANDBOX-REDIRECT: isCheckoutLike - invalid URL",t),!1;if(!O(o.hostname))return console.log("SANDBOX-REDIRECT: isCheckoutLike - not Shopify host",o.hostname),!1;let e=k(o.pathname),n=u.some(i=>i.test(e));return n?(console.log("SANDBOX-REDIRECT: \u2705 Detected checkout-like URL:",String(o)),l("detected checkout-like URL:",String(o))):console.log("SANDBOX-REDIRECT: isCheckoutLike - path doesn't match patterns",e),n}async function m(){console.log("SANDBOX-REDIRECT: \u{1F680} jumpToCustomCheckout started"),console.log("SANDBOX-REDIRECT: Fetching /cart.js");let o=await(await fetch("/cart.js")).json();console.log("SANDBOX-REDIRECT: Cart data received",{token:o.token,itemCount:o.item_count,totalPrice:o.total_price});let e={},n=["_fbp","_fbc","_fbq","_ig_","_igbp","_igshid","_igsh","_ig_visitor_id","_gclid","_gcl_au","_gcl_aw","_gcl_dc","_gcl_gb","_ttp","_tt_enable_cookie","_scid","_sctr","_pin_unauth","_pin_id","_twitter_ads_id","_li_ss","_uetsid","_uetvid","_amzn","_amzn_ads_","_yclid","_ycl_","_rdt_uid","_quora_","_tb_","_ob_","_criteo_","_adobe_","_ttd_","_dv360_","_fbcv","_shopify_pixel_"],i=R=>n.some(g=>R===g||R.startsWith(g)||R.includes(g));document.cookie&&document.cookie.split(";").forEach(R=>{let g=R.trim();if(g){let[_,...B]=g.split("="),C=B.join("=");_&&C&&i(_)&&(e[_]=C)}}),console.log("SANDBOX-REDIRECT: Pixel cookies collected",{count:Object.keys(e).length});let c=`gid://shopify/Cart/${o.token}`;console.log("SANDBOX-REDIRECT: Sending checkout request to backend",{endpoint:`${s}/checkout`,cartId:c,storeId:r});let p=await(await fetch(`${s}/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({storeId:r,cartId:c,cookies:e})})).text();if(console.log("SANDBOX-REDIRECT: Checkout URL received from backend",p),!p){console.error("SANDBOX-REDIRECT: \u274C No checkout ID received from backend");return}let f=D(p);if(!f){console.error("SANDBOX-REDIRECT: \u274C Invalid checkout URL received from backend:",p);return}console.log("SANDBOX-REDIRECT: \u2705 Redirecting to:",f.href),location.assign(f.href)}let E=!1;function a(t){return console.log("SANDBOX-REDIRECT: maybeRedirect called",{targetUrl:String(t),redirected:E}),E?(console.log("SANDBOX-REDIRECT: Already redirected, skipping"),!1):d(t)?(console.log("SANDBOX-REDIRECT: \u{1F3AF} Triggering redirect"),E=!0,m(),!0):(console.log("SANDBOX-REDIRECT: URL is not checkout-like, skipping"),!1)}if(window.__isCheckoutLike=d,window.__maybeRedirect=a,(y=window.Shopify)!=null&&y.designMode){console.log("SANDBOX-REDIRECT: In Shopify design mode, interceptors disabled");return}console.log("SANDBOX-REDIRECT: Setting up interceptors");{let t=window.location,o=t.assign.bind(t),e=t.replace.bind(t);try{Object.defineProperty(t,"assign",{value:n=>{console.log("SANDBOX-REDIRECT: location.assign intercepted",n),a(n)||o(n)},writable:!0,configurable:!0}),Object.defineProperty(t,"replace",{value:n=>{console.log("SANDBOX-REDIRECT: location.replace intercepted",n),a(n)||e(n)},writable:!0,configurable:!0}),console.log("SANDBOX-REDIRECT: \u2705 location.assign/replace interceptors installed")}catch(n){console.error("SANDBOX-REDIRECT: \u274C Failed to override location methods:",n),l("Could not override location methods, relying on Service Worker:",n)}}{let t=window.open;window.open=function(o,e,n){return console.log("SANDBOX-REDIRECT: window.open intercepted",{url:o,target:e}),o&&a(o)?null:t.call(window,o,e,n)},console.log("SANDBOX-REDIRECT: \u2705 window.open interceptor installed")}{let t=history.pushState.bind(history),o=history.replaceState.bind(history);history.pushState=function(e,n,i){if(console.log("SANDBOX-REDIRECT: history.pushState intercepted",i),!(i!=null&&a(i)))return t(e,n,i)},history.replaceState=function(e,n,i){if(console.log("SANDBOX-REDIRECT: history.replaceState intercepted",i),!(i!=null&&a(i)))return o(e,n,i)},addEventListener("popstate",()=>{console.log("SANDBOX-REDIRECT: popstate event fired",location.href),a(location.href)},!0),console.log("SANDBOX-REDIRECT: \u2705 History API interceptors installed")}{let t=o=>o.metaKey||o.ctrlKey||o.shiftKey||o.altKey||o.button!==0;addEventListener("click",o=>{let e=o;if(e.defaultPrevented||t(e))return;let n=o.target;for(;n&&n.nodeType===1&&n.tagName!=="A";)n=n.parentElement;let i=n;!i||!i.href||(console.log("SANDBOX-REDIRECT: Link click intercepted",i.href),d(i.href)&&(console.log("SANDBOX-REDIRECT: \u{1F517} Checkout link clicked, preventing default"),e.preventDefault(),e.stopPropagation(),m()))},!0),console.log("SANDBOX-REDIRECT: \u2705 Link click interceptor installed")}{let t=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){try{if(console.log("SANDBOX-REDIRECT: Form.submit() intercepted",this.action),b(this))return console.log("SANDBOX-REDIRECT: Kaching form detected, skipping"),t.call(this);let e=this.getAttribute("action")||"";if(a(e)||Array.from(this.elements).some(i=>(i==null?void 0:i.name)==="checkout")&&(console.log("SANDBOX-REDIRECT: Form has checkout input, intercepting"),a("/checkout")))return}catch(e){}return t.call(this)},addEventListener("submit",o=>{try{let e=o.target;if(console.log("SANDBOX-REDIRECT: Form submit event intercepted",e==null?void 0:e.action),b(e)){console.log("SANDBOX-REDIRECT: Kaching form detected in submit event, skipping");return}let n=(e==null?void 0:e.getAttribute("action"))||"",i=Array.from((e==null?void 0:e.elements)||[]);(d(n)||i.some(c=>(c==null?void 0:c.name)==="checkout"))&&(console.log("SANDBOX-REDIRECT: \u{1F4DD} Checkout form submitted, preventing default"),o.preventDefault(),o.stopPropagation(),m())}catch(e){}},!0),console.log("SANDBOX-REDIRECT: \u2705 Form submit interceptors installed")}{let t=location.href;setInterval(()=>{location.href!==t&&(console.log("SANDBOX-REDIRECT: URL change detected by watchdog",{from:t,to:location.href}),t=location.href,a(t))},250),console.log("SANDBOX-REDIRECT: \u2705 URL watchdog installed")}{let t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(e,n,i,c,T){try{console.log("SANDBOX-REDIRECT: XHR.open intercepted",{method:e,url:n}),typeof n=="string"&&d(n)&&(console.log("SANDBOX-REDIRECT: \u{1F310} XHR to checkout URL detected"),a(n))}catch(p){}return t.call(this,e,n,!!i,c,T)},console.log("SANDBOX-REDIRECT: \u2705 XHR interceptor installed")}{let t=window.fetch.bind(window);window.fetch=function(e,n){try{let i=typeof e=="string"||e instanceof URL?String(e):e.url;console.log("SANDBOX-REDIRECT: fetch() intercepted",i),i&&d(i)&&(console.log("SANDBOX-REDIRECT: \u{1F310} fetch() to checkout URL detected"),a(i))}catch(i){}return t(e,n)},console.log("SANDBOX-REDIRECT: \u2705 fetch() interceptor installed")}let b=t=>{if(!t)return!1;let o=Array.from(t.elements).some(e=>{var i,c;let n=e;return((i=n.name)==null?void 0:i.includes("__kaching_bundles"))||((c=n.name)==null?void 0:c.includes("kaching"))||t.classList.contains("kaching-form")});return o&&console.log("SANDBOX-REDIRECT: Form identified as Kaching form"),o};{console.log("SANDBOX-REDIRECT: Setting up Kaching API proxy");let t={},o;(S=window.kachingCartApi)!=null&&S.updateTieredPromotionsBar&&(console.log("SANDBOX-REDIRECT: Existing kachingCartApi found, capturing original"),o=window.kachingCartApi.updateTieredPromotionsBar,Object.assign(t,window.kachingCartApi)),window.kachingCartApi=new Proxy(t,{get(e,n){return n==="updateTieredPromotionsBar"?async function(...i){for(console.log("SANDBOX-REDIRECT: \u{1F6D2} Kaching updateTieredPromotionsBar called",i),o&&(console.log("SANDBOX-REDIRECT: Calling original Kaching function"),await o.apply(this,i)),console.log("SANDBOX-REDIRECT: Starting Kaching checkout redirect with 10s timeout"),await Promise.all([new Promise(c=>setTimeout(c,1e4)),m()]);;)await new Promise(c=>setTimeout(c,500)),window.location.reload()}:e[n]},set(e,n,i){return n==="updateTieredPromotionsBar"&&(console.log("SANDBOX-REDIRECT: Kaching updateTieredPromotionsBar being set, capturing it"),o=i,l("Kaching updateTieredPromotionsBar captured")),e[n]=i,!0}}),console.log("SANDBOX-REDIRECT: \u2705 Kaching API proxy installed")}},I=()=>{console.log("SANDBOX-REDIRECT: init() called");let r=document.currentScript;if(!r){console.error("SANDBOX-REDIRECT: \u274C No currentScript found");return}let s=r.dataset.revleyStoreId,u=r.dataset.revleyCheckoutHost;console.log("SANDBOX-REDIRECT: Script data attributes",{storeId:s,host:u}),s&&u?P(s,u):console.error("SANDBOX-REDIRECT: \u274C Missing storeId or host",{storeId:s,host:u})};I();addEventListener("pageshow",r=>{r.persisted&&(console.log("SANDBOX-REDIRECT: Page restored from bfcache, resetting state and re-initializing"),window.__checkoutInterceptInstalled=!1,I())});return L(U);})();
1
+ "use strict";var SandboxCheckoutPkg=(()=>{var T=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var H=(c,l,p,y)=>{if(l&&typeof l=="object"||typeof l=="function")for(let d of U(l))!x.call(c,d)&&d!==p&&T(c,d,{get:()=>l[d],enumerable:!(y=O(l,d))||y.enumerable});return c};var M=c=>H(T({},"__esModule",{value:!0}),c);var B={};var j=(c,l)=>{var L,R;if(window.__checkoutInterceptInstalled)return;window.__checkoutInterceptInstalled=!0;let p=[/^\/(?:cart\/)?checkout(?:[?#]|$)/i,/^\/checkouts(?:\/|$|\?|#)/i],y=!1,d=(...t)=>y?console.debug("[checkout-intercept]",...t):void 0,E=t=>t.replace(/\/+$/,""),A=t=>t.endsWith(".myshopify.com")||t===location.hostname;function w(t,i=location.origin){try{return t instanceof URL?t:new URL(String(t),i)}catch(e){return null}}function m(t){let i=w(t);if(!i||!A(i.hostname))return!1;let e=E(i.pathname),n=p.some(r=>r.test(e));return n&&d("detected checkout-like URL:",String(i)),n}function S(t){let i=t==null?void 0:t.getAttribute("variant-params");if(!i)return null;let e=i.includes(""")?i.replace(/"/g,'"'):i;try{let n=JSON.parse(e);return Array.isArray(n)?n:null}catch(n){return null}}async function C(t,i=1){let e=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({items:[{id:Number(t),quantity:i}]}),credentials:"same-origin"});if(!e.ok){let n=await e.text().catch(()=>"");throw new Error(`cart/add.js failed (${e.status}): ${n}`)}return e.json()}async function f(){let i=await(await fetch("/cart.js")).json(),e={},n=["_fbp","_fbc","_fbq","_ig_","_igbp","_igshid","_igsh","_ig_visitor_id","_gclid","_gcl_au","_gcl_aw","_gcl_dc","_gcl_gb","_ttp","_tt_enable_cookie","_scid","_sctr","_pin_unauth","_pin_id","_twitter_ads_id","_li_ss","_uetsid","_uetvid","_amzn","_amzn_ads_","_yclid","_ycl_","_rdt_uid","_quora_","_tb_","_ob_","_criteo_","_adobe_","_ttd_","_dv360_","_fbcv","_shopify_pixel_"],r=g=>n.some(_=>g===_||g.startsWith(_)||g.includes(_));document.cookie&&document.cookie.split(";").forEach(g=>{let _=g.trim();if(_){let[b,...I]=_.split("="),P=I.join("=");b&&P&&r(b)&&(e[b]=P)}});let o=`gid://shopify/Cart/${i.token}`,a=await(await fetch(`${l}/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({storeId:c,cartId:o,cookies:e})})).text();if(console.log("checkoutUrl",a),!a){console.error("No checkout ID received from backend");return}let h=w(a);if(!h){console.error("Invalid checkout URL received from backend:",a);return}sessionStorage.setItem("__revley_checkout_redirect","1"),location.assign(h.href)}let v=!1;function s(t){return v||!m(t)?!1:(v=!0,f(),!0)}if(window.__isCheckoutLike=m,window.__maybeRedirect=s,(L=window.Shopify)!=null&&L.designMode)return;window.addEventListener("pageshow",t=>{t.persisted&&sessionStorage.getItem("__revley_checkout_redirect")&&(sessionStorage.removeItem("__revley_checkout_redirect"),location.reload())});{let t=window.location,i=t.assign.bind(t),e=t.replace.bind(t);try{Object.defineProperty(t,"assign",{value:n=>{s(n)||i(n)},writable:!0,configurable:!0}),Object.defineProperty(t,"replace",{value:n=>{s(n)||e(n)},writable:!0,configurable:!0})}catch(n){d("Could not override location methods, relying on Service Worker:",n)}}{let t=window.open;window.open=function(i,e,n){return i&&s(i)?null:t.call(window,i,e,n)}}{let t=history.pushState.bind(history),i=history.replaceState.bind(history);history.pushState=function(e,n,r){if(!(r!=null&&s(r)))return t(e,n,r)},history.replaceState=function(e,n,r){if(!(r!=null&&s(r)))return i(e,n,r)},addEventListener("popstate",()=>void s(location.href),!0)}{let t=i=>i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||i.button!==0;addEventListener("click",i=>{let e=i;if(e.defaultPrevented||t(e))return;let n=i.target;for(;n&&n.nodeType===1&&n.tagName!=="A";)n=n.parentElement;let r=n;!r||!r.href||m(r.href)&&(e.preventDefault(),e.stopPropagation(),f())},!0)}{let t=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){try{if(k(this))return t.call(this);let e=this.getAttribute("action")||"";if(s(e)||Array.from(this.elements).some(r=>(r==null?void 0:r.name)==="checkout")&&s("/checkout"))return}catch(e){}return t.call(this)},addEventListener("submit",i=>{try{let e=i.target;if(k(e))return;let n=(e==null?void 0:e.getAttribute("action"))||"",r=Array.from((e==null?void 0:e.elements)||[]);(m(n)||r.some(o=>(o==null?void 0:o.name)==="checkout"))&&(i.preventDefault(),i.stopPropagation(),f())}catch(e){}},!0)}{let t=location.href;setInterval(()=>{location.href!==t&&(t=location.href,s(t))},250)}{let t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(e,n,r,o,u){try{typeof n=="string"&&m(n)&&s(n)}catch(a){}return t.call(this,e,n,!!r,o,u)}}{let t=window.fetch.bind(window);window.fetch=function(e,n){try{let r=typeof e=="string"||e instanceof URL?String(e):e.url;r&&m(r)&&s(r)}catch(r){}return t(e,n)}}let k=t=>t?Array.from(t.elements).some(i=>{var n,r;let e=i;return((n=e.name)==null?void 0:n.includes("__kaching_bundles"))||((r=e.name)==null?void 0:r.includes("kaching"))||t.classList.contains("kaching-form")}):!1;document.addEventListener("click",async t=>{var r,o,u;let i=t.target,e=(r=i==null?void 0:i.closest)==null?void 0:r.call(i,"button.shopify-payment-button__button");if(!e)return;let n=e.closest("shopify-accelerated-checkout");if(n){t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation();try{let a=S(n),h=(u=(o=a==null?void 0:a[0])==null?void 0:o.id)!=null?u:51504147202335;if(!h)throw new Error("Could not determine variant id");try{window.upcartOpenOnAddToCartOverride=!1,window.upcartShouldOpenOnAddToCartBackgroundNetworkCall=!1}catch(g){console.log("Failed to prevent upcart from opening")}await C(h,1),await f()}catch(a){console.error("Intercepted Buy It Now failed; falling back:",a),window.location.assign("/checkout")}}},!0);{let t={},i;(R=window.kachingCartApi)!=null&&R.updateTieredPromotionsBar&&(i=window.kachingCartApi.updateTieredPromotionsBar,Object.assign(t,window.kachingCartApi)),window.kachingCartApi=new Proxy(t,{get(e,n){return n==="updateTieredPromotionsBar"?async function(...r){throw document.querySelectorAll(".shop-add-to-cart-button.product-form_submit").forEach(o=>{var a;o.disabled=!0,o.style.pointerEvents="none",o.style.opacity="0.5";let u=o.cloneNode(!0);u.disabled=!0,u.style.pointerEvents="none",u.style.opacity="0.5",(a=o.parentNode)==null||a.replaceChild(u,o)}),i&&await i.apply(this,r),await Promise.all([new Promise(o=>setTimeout(o,1e4)),f()]),new Error("STOP")}:e[n]},set(e,n,r){return n==="updateTieredPromotionsBar"&&(i=r,d("Kaching updateTieredPromotionsBar captured")),e[n]=r,!0}})}},q=()=>{let c=document.currentScript;if(!c)return;let l=c.dataset.revleyStoreId,p=c.dataset.revleyCheckoutHost;l&&p&&j(l,p)};q();return M(B);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revley/sandbox-checkout-package",
3
- "version": "0.2.28",
3
+ "version": "0.3.01",
4
4
  "description": "Tiny TS package optimized for browsers with modern & legacy outputs",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.cjs",