@occluze/tether 0.6.5 → 0.6.7

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
- (()=>{var le=Object.defineProperty;var pe=(e,t)=>{for(var s in t)le(e,s,{get:t[s],enumerable:!0})};var M={};pe(M,{addresses:()=>re,deleteAddress:()=>ne,order:()=>te,renderPages:()=>De,requestReturn:()=>ae,saveAddress:()=>V,setup:()=>Ae,subscriptionAction:()=>oe,subscriptions:()=>ie,updateProfile:()=>se});var fe=window.Tether.__core["config.js"],{DEFAULTS:xe,cfg:Q,configure:ke,isConfigured:qe,log:Pe,reportError:q,warn:Re}=fe;var me=window.Tether.__core["client.js"],{TetherError:F,endpoint:Ue,gql:Le,request:Ne,unwrap:Be,withContext:je}=me;var he=window.Tether.__core["dom.js"],{attr:A,busy:Fe,cdnUrl:Ge,dataKey:Ve,emit:W,formatDate:ze,formatMoney:b,formatPercent:Me,get:y,has:Ke,hasTemplate:Je,imageUrl:Qe,notifyLayoutChanged:We,parseJSONAttr:Xe,productUrl:Ye,qsa:u,readText:Ze,repeat:v,repeatKeyed:He,sameImage:et,scoped:tt,sel:d,setImage:G,setSelected:st,setText:I,setTextTracked:rt,show:X,toAttributes:nt,watchImages:it}=he;var w="amount currencyCode",R="id firstName lastName company address1 address2 city province zoneCode zip country countryCode phoneNumber formatted",L={order:`query TetherOrder($id:ID!){order(id:$id){id name number processedAt cancelledAt financialStatus fulfillmentStatus statusPageUrl requiresShipping totalPrice{${w}}subtotal{${w}}totalShipping{${w}}totalTax{${w}}shippingAddress{${R}}billingAddress{${R}}lineItems(first:50){nodes{id name title variantTitle quantity sku image{url altText}price{${w}}totalPrice{${w}}suggestedReturnReasonDefinitions(first:10){nodes{id name handle}}}}fulfillments(first:10){nodes{id status createdAt estimatedDeliveryAt latestShipmentStatus trackingInformation{company number url}}}returnInformation{returnableLineItems(first:50){nodes{quantity lineItem{id}}}}returns(first:10){nodes{id status}}}}`,addresses:`query TetherAddresses{customer{defaultAddress{id}addresses(first:20){nodes{${R}}}}}`,subscriptions:`query TetherSubscriptions{customer{subscriptionContracts(first:20,reverse:true){nodes{id status nextBillingDate currencyCode deliveryPrice{${w}}deliveryPolicy{interval intervalCount{count}}lines(first:20){nodes{id name title variantTitle quantity sku currentPrice{${w}}lineDiscountedPrice{${w}}image{url altText}}}upcomingBillingCycles(first:3){nodes{cycleIndex skipped billingAttemptExpectedDate}}}}}}`,contract:"query TetherContract($id:ID!){customer{subscriptionContract(id:$id){id status upcomingBillingCycles(first:3){nodes{cycleIndex skipped}}}}}"},S={profile:"mutation TetherProfile($input: CustomerUpdateInput!) { customerUpdate(input: $input) { customer { firstName lastName } userErrors { field message } } }",addressCreate:`mutation TetherAddressCreate($address:CustomerAddressInput!,$default:Boolean){customerAddressCreate(address:$address,defaultAddress:$default){customerAddress{${R}}userErrors{field message}}}`,addressUpdate:`mutation TetherAddressUpdate($id:ID!,$address:CustomerAddressInput,$default:Boolean){customerAddressUpdate(addressId:$id,address:$address,defaultAddress:$default){customerAddress{${R}}userErrors{field message}}}`,addressDelete:"mutation TetherAddressDelete($id: ID!) { customerAddressDelete(addressId: $id) { deletedAddressId userErrors { field message } } }",pause:"mutation TetherPause($id: ID!) { subscriptionContractPause(subscriptionContractId: $id) { contract { id status } userErrors { field message } } }",resume:"mutation TetherResume($id: ID!) { subscriptionContractActivate(subscriptionContractId: $id) { contract { id status } userErrors { field message } } }",cancel:"mutation TetherCancel($id: ID!) { subscriptionContractCancel(subscriptionContractId: $id) { contract { id status } userErrors { field message } } }",skip:"mutation TetherSkip($input: SubscriptionBillingCycleInput!) { subscriptionBillingCycleSkip(billingCycleInput: $input) { billingCycle { cycleIndex skipped } userErrors { field message } } }",unskip:"mutation TetherUnskip($input: SubscriptionBillingCycleInput!) { subscriptionBillingCycleUnskip(billingCycleInput: $input) { billingCycle { cycleIndex skipped } userErrors { field message } } }",returnRequest:"mutation TetherReturn($orderId: ID!, $lines: [RequestedLineItemInput!]!) { orderRequestReturn(orderId: $orderId, requestedLineItems: $lines) { return { id status } userErrors { field message } } }"},p=class extends Error{},P=e=>new RegExp(`^gid://shopify/${e}/\\d+(\\?[\\w=&.-]{1,80})?$`),ge={Order:P("Order"),CustomerAddress:P("CustomerAddress"),SubscriptionContract:P("SubscriptionContract"),LineItem:P("LineItem"),ReturnReasonDefinition:P("ReturnReasonDefinition")};function T(e,t){let s=/^\d{1,20}$/.test(String(t??""))?`gid://shopify/${e}/${t}`:String(t??"");if(!ge[e].test(s))throw new p(`${e} id`);return s}var N=(e,t=255)=>{if(e==null||e==="")return;if(typeof e!="string"&&typeof e!="number")throw new p("text");let s=String(e).replace(/[\u0000-\u001f\u007f]/g,"").trim();if(s.length>t)throw new p("too long");return s},ye=["firstName","lastName","company","address1","address2","city","zip","zoneCode","phoneNumber"];function be(e={}){if(!e||typeof e!="object"||Array.isArray(e))throw new p("address");let t={};if(ye.forEach(s=>{let i=N(e[s]);i!==void 0&&(t[s]=i)}),e.countryCode!=null&&e.countryCode!==""){let s=String(e.countryCode).toUpperCase();if(!/^[A-Z]{2}$/.test(s))throw new p("countryCode");t.countryCode=s}return t}var D=e=>{let t=e?.userErrors||[];if(t.length){let s=new p(t.map(i=>i.message).join(" | "));throw s.userErrors=t,s}return e},Y={async order(e,{id:t}){return{order:(await e(L.order,{id:T("Order",t)}))?.order||null}},async profile(e,{firstName:t,lastName:s}){let i={};if(t!==void 0&&(i.firstName=N(t,100)??""),s!==void 0&&(i.lastName=N(s,100)??""),!Object.keys(i).length)throw new p("nothing to change");return{customer:D((await e(S.profile,{input:i}))?.customerUpdate).customer}},async addresses(e){let t=(await e(L.addresses,{}))?.customer,s=t?.defaultAddress?.id||null;return{addresses:(t?.addresses?.nodes||[]).map(i=>({...i,isDefault:i.id===s}))}},async saveAddress(e,{id:t,address:s,isDefault:i}){let r=be(s||{}),n=i===!0?!0:void 0;return{address:D(t?(await e(S.addressUpdate,{id:T("CustomerAddress",t),address:Object.keys(r).length?r:null,default:n??null}))?.customerAddressUpdate:(await e(S.addressCreate,{address:r,default:n??!1}))?.customerAddressCreate).customerAddress}},async deleteAddress(e,{id:t}){return{deleted:D((await e(S.addressDelete,{id:T("CustomerAddress",t)}))?.customerAddressDelete).deletedAddressId}},async subscriptions(e){return{subscriptions:(await e(L.subscriptions,{}))?.customer?.subscriptionContracts?.nodes||[]}},async subscription(e,{id:t,action:s}){if(!["pause","resume","skip","unskip","cancel"].includes(s))throw new p("action");let i=T("SubscriptionContract",t),r=(await e(L.contract,{id:i}))?.customer?.subscriptionContract;if(!r){let o=new p("not found");throw o.status=404,o}if(s==="skip"||s==="unskip"){let o=r.upcomingBillingCycles?.nodes||[],c=s==="skip"?o.find(m=>!m.skipped):o.find(m=>m.skipped);if(!c)throw new p(s==="skip"?"no upcoming delivery to skip":"nothing skipped");return{billingCycle:D((await e(S[s],{input:{contractId:i,selector:{index:c.cycleIndex}}}))?.[s==="skip"?"subscriptionBillingCycleSkip":"subscriptionBillingCycleUnskip"]).billingCycle}}let n={pause:"subscriptionContractPause",resume:"subscriptionContractActivate",cancel:"subscriptionContractCancel"}[s];return{contract:D((await e(S[s],{id:i}))?.[n]).contract}},async requestReturn(e,{orderId:t,lines:s}){let i=T("Order",t);if(!Array.isArray(s)||!s.length||s.length>50)throw new p("lines");let r=s.map(a=>{let o=Number(a?.quantity);if(!Number.isInteger(o)||o<1||o>1e3)throw new p("quantity");let c={lineItemId:T("LineItem",a.lineItemId),quantity:o};a.reasonId&&(c.returnReasonDefinitionId=T("ReturnReasonDefinition",a.reasonId));let f=N(a.note,300);return f&&(c.customerNote=f),c});return{return:D((await e(S.returnRequest,{orderId:i,lines:r}))?.orderRequestReturn).return}}};var _=null,Z=!1;function Ae(e){_=e}var H=e=>{try{return new URL(e).protocol==="https:"}catch{return!1}},O=e=>{try{return new Date(e).toLocaleDateString(Q.locale||void 0)}catch{return e}},Ie={order:e=>["GET",`/order?id=${encodeURIComponent(e.id)}`],addresses:()=>["GET","/addresses"],subscriptions:()=>["GET","/subscriptions"],profile:()=>["POST","/profile"],saveAddress:()=>["POST","/address"],deleteAddress:()=>["POST","/address/delete"],subscription:()=>["POST","/subscription"],requestReturn:()=>["POST","/return"]};async function E(e,t={}){let{server:s,serverFetch:i,query:r}=_;if(s()){let[n,a]=Ie[e](t),o=await i(a,n==="POST"?{method:n,body:t}:{});if(o.loggedIn===!1)throw new F("Not logged in",{code:"NOT_LOGGED_IN",status:401});return o}try{return await Y[e]((n,a)=>r(n,a),t)}catch(n){throw n instanceof p?new F(n.message,{code:"INVALID",userErrors:n.userErrors}):n}}var U=e=>{_.reset(),W("account-updated",{what:e})},te=e=>E("order",{id:e}).then(t=>t.order),se=({firstName:e,lastName:t}={})=>E("profile",{firstName:e,lastName:t}).then(s=>(U("profile"),s.customer)),re=()=>E("addresses").then(e=>e.addresses),V=(e,{id:t,isDefault:s}={})=>E("saveAddress",{id:t,address:e,isDefault:s}).then(i=>(U("addresses"),i.address)),ne=e=>E("deleteAddress",{id:e}).then(t=>(U("addresses"),t.deleted)),ie=()=>E("subscriptions").then(e=>e.subscriptions),oe=(e,t)=>E("subscription",{id:e,action:t}).then(s=>(U("subscriptions"),s)),ae=(e,t)=>E("requestReturn",{orderId:e,lines:t}).then(s=>(U("orders"),s.return));var k=e=>e?String(e).toLowerCase().replace(/_/g," "):"",z=e=>(e?.formatted||[]).join(", "),C=(e,t,s)=>u(e,d(t)).forEach(i=>{let r=y(i,t);r in s&&X(i,!!s[r])}),j=(e,t)=>C(e,"show",t);function we(e,t,s=null){v(e,t,(i,r)=>{let n=s&&s.get(r.id)||0;i.dataset.tetherLine=r.id,u(i,d("order-line")).concat(i.matches(d("order-line"))?[i]:[]).forEach(a=>{let o=y(a,"order-line");if(o==="image"){r.image&&G(a,r.image.url,r.image.altText||r.title);return}let c={title:r.title||r.name,"variant-title":r.variantTitle||"",quantity:String(r.quantity),price:r.price?b(r.price):"",total:r.totalPrice?b(r.totalPrice):"",sku:r.sku||"",returnable:String(n)}[o];c!=null&&I(a,c)}),C(i,"order-line-show",{returnable:n>0}),u(i,d("return-quantity")).forEach(a=>{a.max=String(n),a.min="0",a.value||(a.value="0"),a.disabled=n<1}),u(i,`select${d("return-reason")}`).forEach(a=>{let o=r.suggestedReturnReasonDefinitions?.nodes||[];a.dataset.tetherFilled!==r.id&&(a.dataset.tetherFilled=r.id,o.forEach(c=>a.appendChild(new Option(c.name,c.id))))})})}var Ce={order:d("order")};async function de(e){let t=y(e,"order")||"",s=t.startsWith("url:")?new URL(window.location.href).searchParams.get(t.slice(4)||"id"):t,i=o=>e.setAttribute(A("order-state"),o);if(!s){i("not-found"),C(e,"order-show",{"not-found":!0});return}i("loading"),C(e,"order-show",{loading:!0,ready:!1,"not-found":!1,error:!1});let r;try{r=await te(s)}catch(o){q(o,"order"),i("error"),C(e,"order-show",{loading:!1,error:!0});return}if(!r){i("not-found"),C(e,"order-show",{loading:!1,"not-found":!0});return}e.dataset.tetherOrderId=r.id;let n=new Map((r.returnInformation?.returnableLineItems?.nodes||[]).map(o=>[o.lineItem?.id,o.quantity])),a=r.fulfillments?.nodes||[];u(e,d("order-bind")).forEach(o=>{let c=y(o,"order-bind");if(c==="url"){H(r.statusPageUrl)&&o.setAttribute("href",r.statusPageUrl);return}let f={name:r.name,date:O(r.processedAt),total:b(r.totalPrice),subtotal:r.subtotal?b(r.subtotal):"",shipping:r.totalShipping?b(r.totalShipping):"",tax:r.totalTax?b(r.totalTax):"",status:k(r.financialStatus),fulfillment:k(r.fulfillmentStatus),"shipping-address":z(r.shippingAddress),"billing-address":z(r.billingAddress),items:(r.lineItems?.nodes||[]).map(m=>`${m.quantity}\xD7 ${m.title||m.name}`).join(", "),cancelled:r.cancelledAt?O(r.cancelledAt):""}[c];f!=null&&I(o,f)}),u(e,d("order-lines")).forEach(o=>we(o,r.lineItems?.nodes||[],n)),u(e,d("order-fulfillments")).forEach(o=>v(o,a,(c,f)=>{let m=f.trackingInformation?.[0]||{};u(c,d("fulfillment-bind")).concat(c.matches(d("fulfillment-bind"))?[c]:[]).forEach(h=>{let g=y(h,"fulfillment-bind");if(g==="url"){H(m.url)&&h.setAttribute("href",m.url);return}let l={status:k(f.latestShipmentStatus||f.status),date:O(f.createdAt),eta:f.estimatedDeliveryAt?O(f.estimatedDeliveryAt):"",company:m.company||"",number:m.number||""}[g];l!=null&&I(h,l)})})),C(e,"order-show",{loading:!1,ready:!0,error:!1,"not-found":!1,cancelled:!!r.cancelledAt,shipped:a.length>0,returnable:[...n.values()].some(o=>o>0),"has-returns":(r.returns?.nodes||[]).length>0,"return-requested":e.dataset.tetherReturned==="1"}),i("ready")}async function Ee(e){let t=await _.customer().catch(()=>null);t&&["firstName","lastName"].forEach(s=>{let i=e.elements?.[s];i&&!i.dataset.tetherTouched&&(i.value=t[s]||"")})}var ce=null;async function B(e){let t=u(e,d("addresses"));if(!t.length)return;j(e,{"addresses-loading":!0,"addresses-empty":!1});let s=[];try{s=ce=await re()}catch(i){q(i,"addresses")}j(e,{"addresses-loading":!1,"addresses-empty":s.length===0}),t.forEach(i=>v(i,s,(r,n)=>{r.dataset.tetherAddress=n.id,u(r,d("address-bind")).concat(r.matches(d("address-bind"))?[r]:[]).forEach(a=>{let o={formatted:z(n),name:[n.firstName,n.lastName].filter(Boolean).join(" "),company:n.company||"",address1:n.address1||"",address2:n.address2||"",city:n.city||"",zip:n.zip||"",province:n.province||"",country:n.country||"",phone:n.phoneNumber||""}[y(a,"address-bind")];o!=null&&I(a,o)}),C(r,"address-show",{default:n.isDefault,"not-default":!n.isDefault})}))}var Se=["pause","resume","skip","unskip","cancel"];function Te(e){let t=e.upcomingBillingCycles?.nodes?.[0],s=e.status;return{active:s==="ACTIVE",paused:s==="PAUSED",cancelled:s==="CANCELLED",expired:s==="EXPIRED",failed:s==="FAILED",skipped:!!t?.skipped,"can-pause":s==="ACTIVE","can-resume":s==="PAUSED"||s==="FAILED","can-skip":s==="ACTIVE"&&!!t&&!t.skipped,"can-unskip":s==="ACTIVE"&&!!t?.skipped,"can-cancel":s==="ACTIVE"||s==="PAUSED"||s==="FAILED"}}async function ue(e){let t=u(e,d("subscriptions"));if(!t.length)return;j(e,{"subscriptions-loading":!0,"subscriptions-empty":!1});let s=[];try{s=await ie()}catch(i){q(i,"subscriptions")}j(e,{"subscriptions-loading":!1,"subscriptions-empty":s.length===0}),t.forEach(i=>v(i,s,(r,n)=>{r.dataset.tetherSubscription=n.id,r.setAttribute(A("subscription-status"),k(n.status));let a=n.lines?.nodes||[],o=n.deliveryPolicy?.intervalCount?.count||1,c=k(n.deliveryPolicy?.interval),f=a.reduce((h,g)=>h+parseFloat(g.lineDiscountedPrice?.amount||0),0);u(r,d("subscription-bind")).forEach(h=>{let g=y(h,"subscription-bind"),l={status:k(n.status),next:n.nextBillingDate?O(n.nextBillingDate):"",interval:c?o===1?c:`${o} ${c}s`:"",products:a.map($=>`${$.quantity}\xD7 ${$.title}`).join(", "),total:a.length?b({amount:String(f),currencyCode:n.currencyCode}):"",delivery:n.deliveryPrice?b(n.deliveryPrice):""}[g];l!=null&&I(h,l)}),u(r,d("subscription-lines")).forEach(h=>v(h,a,(g,l)=>{u(g,d("subscription-line")).concat(g.matches(d("subscription-line"))?[g]:[]).forEach($=>{let K=y($,"subscription-line");if(K==="image"){l.image&&G($,l.image.url,l.image.altText||l.title);return}let J={title:l.title,"variant-title":l.variantTitle||"",quantity:String(l.quantity),price:b(l.currentPrice)}[K];J!=null&&I($,J)})}));let m=Te(n);C(r,"subscription-show",m),u(r,d("subscription-action")).forEach(h=>{let g=y(h,"subscription-action"),l=m[`can-${g}`];h.disabled=!l,h.classList.toggle("is-disabled",!l)})}))}async function De(e=document){Z||(Z=!0,$e()),await Promise.all([...u(e,d("order")).map(t=>de(t)),...u(e,d("profile-form")).map(t=>Ee(t)),B(e),ue(e)])}var ee=e=>Object.fromEntries([...e.elements].filter(t=>t.name&&t.type!=="submit"&&t.type!=="button"&&t.type!=="checkbox").map(t=>[t.name,t.value]));async function x(e,t,{error:s}={}){e.classList.add("is-busy"),e.setAttribute("aria-busy","true"),e.setAttribute(A("form-state"),"pending"),u(e,d("form-error")).forEach(i=>I(i,""));try{let i=await t();return e.setAttribute(A("form-state"),"saved"),i}catch(i){e.setAttribute(A("form-state"),"error");let r=i?.userErrors?.map(n=>n.message).join(" ")||i?.message||"Something went wrong";u(e,d("form-error")).forEach(n=>I(n,r.replace(/^Customer accounts: /,""))),s&&q(i,s);return}finally{e.classList.remove("is-busy"),e.removeAttribute("aria-busy")}}function $e(){document.addEventListener("submit",e=>{let t=e.target;if(t.matches?.(d("profile-form")))e.preventDefault(),x(t,()=>se(ee(t)));else if(t.matches?.(d("address-form"))){e.preventDefault();let s=t.dataset.tetherAddressId||void 0,i=!!t.elements?.isDefault?.checked;x(t,async()=>{await V(ee(t),{id:s,isDefault:i}),t.reset(),delete t.dataset.tetherAddressId,await B(document)})}}),document.addEventListener("input",e=>{e.target.closest?.(d("profile-form"))&&(e.target.dataset.tetherTouched="1")}),document.addEventListener("click",e=>{let t=e.target,s=t.closest?.("[data-tether-address]"),i=n=>{let a=y(n,"confirm");return!a||window.confirm(a)},r;if((r=t.closest?.(d("address-delete")))&&s)e.preventDefault(),i(r)&&x(s,async()=>{await ne(s.dataset.tetherAddress),await B(document)});else if((r=t.closest?.(d("address-default")))&&s)e.preventDefault(),x(s,async()=>{await V(null,{id:s.dataset.tetherAddress,isDefault:!0}),await B(document)});else if((r=t.closest?.(d("address-edit")))&&s){e.preventDefault();let n=(ce||[]).find(o=>o.id===s.dataset.tetherAddress),a=document.querySelector(d("address-form"));n&&a&&(a.dataset.tetherAddressId=n.id,[...a.elements].forEach(o=>{o.name&&o.name in n&&(o.value=n[o.name]??""),o.name==="isDefault"&&(o.checked=n.isDefault)}),a.scrollIntoView?.({block:"nearest"}))}else if(r=t.closest?.(d("address-new"))){let n=document.querySelector(d("address-form"));n&&(n.reset(),delete n.dataset.tetherAddressId)}else if(r=t.closest?.(d("subscription-action"))){e.preventDefault();let n=r.closest("[data-tether-subscription]"),a=y(r,"subscription-action");if(!n||!Se.includes(a)||r.disabled||!i(r))return;n.setAttribute(A("subscription-state"),"pending"),x(n,async()=>{await oe(n.dataset.tetherSubscription,a),await ue(document)}).then(()=>{n.setAttribute(A("subscription-state"),n.getAttribute(A("form-state"))==="error"?"error":"done")})}else if(r=t.closest?.(d("order-return"))){e.preventDefault();let n=r.closest(Ce.order);if(!n?.dataset.tetherOrderId)return;let a=u(n,"[data-tether-line]").map(o=>({lineItemId:o.dataset.tetherLine,quantity:parseInt(o.querySelector(d("return-quantity"))?.value||"0",10),reasonId:o.querySelector(d("return-reason"))?.value||void 0,note:o.querySelector(d("return-note"))?.value||void 0})).filter(o=>o.quantity>0);if(!a.length||!i(r))return;x(n,async()=>{await ae(n.dataset.tetherOrderId,a),n.dataset.tetherReturned="1",await de(n)})}})}window.Tether.__parts["account-pages"]=M;})();
1
+ (()=>{var le=Object.defineProperty;var pe=(e,t)=>{for(var s in t)le(e,s,{get:t[s],enumerable:!0})};var K={};pe(K,{addresses:()=>re,deleteAddress:()=>ne,order:()=>te,renderPages:()=>De,requestReturn:()=>ae,saveAddress:()=>z,setup:()=>Ae,subscriptionAction:()=>oe,subscriptions:()=>ie,updateProfile:()=>se});var fe=window.Tether.__core["config.js"],{DEFAULTS:xe,cfg:W,configure:qe,isConfigured:Pe,log:ke,reportError:k,warn:Re}=fe;var me=window.Tether.__core["client.js"],{TetherError:F,endpoint:Ue,gql:Le,request:Ne,unwrap:Be,withContext:je}=me;var he=window.Tether.__core["dom.js"],{attr:I,busy:Fe,cdnUrl:Ge,dataKey:Ve,emit:X,formatDate:ze,formatMoney:b,formatPercent:Me,get:y,has:Ke,hasTemplate:Je,imageUrl:Qe,notifyLayoutChanged:We,parseJSONAttr:Xe,productUrl:Ye,qsa:u,readText:Ze,repeat:v,repeatKeyed:He,sameImage:et,scoped:tt,sel:d,setImage:G,setSelected:st,setText:w,setTextTracked:rt,show:V,toAttributes:nt,watchImages:it}=he;var C="amount currencyCode",O="id firstName lastName company address1 address2 city province zoneCode zip country countryCode phoneNumber formatted",B={order:`query TetherOrder($id:ID!){order(id:$id){id name number processedAt cancelledAt financialStatus fulfillmentStatus statusPageUrl requiresShipping totalPrice{${C}}subtotal{${C}}totalShipping{${C}}totalTax{${C}}shippingAddress{${O}}billingAddress{${O}}lineItems(first:50){nodes{id name title variantTitle quantity sku image{url altText}price{${C}}totalPrice{${C}}suggestedReturnReasonDefinitions(first:10){nodes{id name handle}}}}fulfillments(first:10){nodes{id status createdAt estimatedDeliveryAt latestShipmentStatus trackingInformation{company number url}}}returnInformation{returnableLineItems(first:50){nodes{quantity lineItem{id}}}}returns(first:10){nodes{id status}}}}`,addresses:`query TetherAddresses{customer{defaultAddress{id}addresses(first:20){nodes{${O}}}}}`,subscriptions:`query TetherSubscriptions{customer{subscriptionContracts(first:20,reverse:true){nodes{id status nextBillingDate currencyCode deliveryPrice{${C}}deliveryPolicy{interval intervalCount{count}}lines(first:20){nodes{id name title variantTitle quantity sku currentPrice{${C}}lineDiscountedPrice{${C}}image{url altText}}}upcomingBillingCycles(first:3){nodes{cycleIndex skipped billingAttemptExpectedDate}}}}}}`,contract:"query TetherContract($id:ID!){customer{subscriptionContract(id:$id){id status upcomingBillingCycles(first:3){nodes{cycleIndex skipped}}}}}"},T={profile:"mutation TetherProfile($input: CustomerUpdateInput!) { customerUpdate(input: $input) { customer { firstName lastName } userErrors { field message } } }",addressCreate:`mutation TetherAddressCreate($address:CustomerAddressInput!,$default:Boolean){customerAddressCreate(address:$address,defaultAddress:$default){customerAddress{${O}}userErrors{field message}}}`,addressUpdate:`mutation TetherAddressUpdate($id:ID!,$address:CustomerAddressInput,$default:Boolean){customerAddressUpdate(addressId:$id,address:$address,defaultAddress:$default){customerAddress{${O}}userErrors{field message}}}`,addressDelete:"mutation TetherAddressDelete($id: ID!) { customerAddressDelete(addressId: $id) { deletedAddressId userErrors { field message } } }",pause:"mutation TetherPause($id: ID!) { subscriptionContractPause(subscriptionContractId: $id) { contract { id status } userErrors { field message } } }",resume:"mutation TetherResume($id: ID!) { subscriptionContractActivate(subscriptionContractId: $id) { contract { id status } userErrors { field message } } }",cancel:"mutation TetherCancel($id: ID!) { subscriptionContractCancel(subscriptionContractId: $id) { contract { id status } userErrors { field message } } }",skip:"mutation TetherSkip($input: SubscriptionBillingCycleInput!) { subscriptionBillingCycleSkip(billingCycleInput: $input) { billingCycle { cycleIndex skipped } userErrors { field message } } }",unskip:"mutation TetherUnskip($input: SubscriptionBillingCycleInput!) { subscriptionBillingCycleUnskip(billingCycleInput: $input) { billingCycle { cycleIndex skipped } userErrors { field message } } }",returnRequest:"mutation TetherReturn($orderId: ID!, $lines: [RequestedLineItemInput!]!) { orderRequestReturn(orderId: $orderId, requestedLineItems: $lines) { return { id status } userErrors { field message } } }"},f=class extends Error{},R=e=>new RegExp(`^gid://shopify/${e}/\\d+(\\?[\\w=&.-]{1,80})?$`),ge={Order:R("Order"),CustomerAddress:R("CustomerAddress"),SubscriptionContract:R("SubscriptionContract"),LineItem:R("LineItem"),ReturnReasonDefinition:R("ReturnReasonDefinition")};function D(e,t){let s=/^\d{1,20}$/.test(String(t??""))?`gid://shopify/${e}/${t}`:String(t??"");if(!ge[e].test(s))throw new f(`${e} id`);return s}var j=(e,t=255)=>{if(e==null||e==="")return;if(typeof e!="string"&&typeof e!="number")throw new f("text");let s=String(e).replace(/[\u0000-\u001f\u007f]/g,"").trim();if(s.length>t)throw new f("too long");return s},ye=["firstName","lastName","company","address1","address2","city","zip","zoneCode","phoneNumber"];function be(e={},{clear:t=!1}={}){if(!e||typeof e!="object"||Array.isArray(e))throw new f("address");let s={};if(ye.forEach(i=>{let r=j(e[i]);r!==void 0?s[i]=r:t&&i in e&&(e[i]===""||e[i]===null)&&(s[i]="")}),e.countryCode!=null&&e.countryCode!==""){let i=String(e.countryCode).toUpperCase();if(!/^[A-Z]{2}$/.test(i))throw new f("countryCode");s.countryCode=i}return s}var $=e=>{let t=e?.userErrors||[];if(t.length){let s=new f(t.map(i=>i.message).join(" | "));throw s.userErrors=t,s}return e},Y={async order(e,{id:t}){return{order:(await e(B.order,{id:D("Order",t)}))?.order||null}},async profile(e,{firstName:t,lastName:s}){let i={};if(t!==void 0&&(i.firstName=j(t,100)??""),s!==void 0&&(i.lastName=j(s,100)??""),!Object.keys(i).length)throw new f("nothing to change");return{customer:$((await e(T.profile,{input:i}))?.customerUpdate).customer}},async addresses(e){let t=(await e(B.addresses,{}))?.customer,s=t?.defaultAddress?.id||null;return{addresses:(t?.addresses?.nodes||[]).map(i=>({...i,isDefault:i.id===s}))}},async saveAddress(e,{id:t,address:s,isDefault:i}){let r=be(s||{},{clear:!!t}),n=i===!0?!0:void 0;return{address:$(t?(await e(T.addressUpdate,{id:D("CustomerAddress",t),address:Object.keys(r).length?r:null,default:n??null}))?.customerAddressUpdate:(await e(T.addressCreate,{address:r,default:n??!1}))?.customerAddressCreate).customerAddress}},async deleteAddress(e,{id:t}){return{deleted:$((await e(T.addressDelete,{id:D("CustomerAddress",t)}))?.customerAddressDelete).deletedAddressId}},async subscriptions(e){return{subscriptions:(await e(B.subscriptions,{}))?.customer?.subscriptionContracts?.nodes||[]}},async subscription(e,{id:t,action:s}){if(!["pause","resume","skip","unskip","cancel"].includes(s))throw new f("action");let i=D("SubscriptionContract",t),r=(await e(B.contract,{id:i}))?.customer?.subscriptionContract;if(!r){let o=new f("not found");throw o.status=404,o}if(s==="skip"||s==="unskip"){let o=r.upcomingBillingCycles?.nodes||[],c=s==="skip"?o.find(m=>!m.skipped):o.find(m=>m.skipped);if(!c)throw new f(s==="skip"?"no upcoming delivery to skip":"nothing skipped");return{billingCycle:$((await e(T[s],{input:{contractId:i,selector:{index:c.cycleIndex}}}))?.[s==="skip"?"subscriptionBillingCycleSkip":"subscriptionBillingCycleUnskip"]).billingCycle}}let n={pause:"subscriptionContractPause",resume:"subscriptionContractActivate",cancel:"subscriptionContractCancel"}[s];return{contract:$((await e(T[s],{id:i}))?.[n]).contract}},async requestReturn(e,{orderId:t,lines:s}){let i=D("Order",t);if(!Array.isArray(s)||!s.length||s.length>50)throw new f("lines");let r=s.map(a=>{let o=Number(a?.quantity);if(!Number.isInteger(o)||o<1||o>1e3)throw new f("quantity");let c={lineItemId:D("LineItem",a.lineItemId),quantity:o};a.reasonId&&(c.returnReasonDefinitionId=D("ReturnReasonDefinition",a.reasonId));let l=j(a.note,300);return l&&(c.customerNote=l),c});return{return:$((await e(T.returnRequest,{orderId:i,lines:r}))?.orderRequestReturn).return}}};var L=null,Z=!1;function Ae(e){L=e}var H=e=>{try{return new URL(e).protocol==="https:"}catch{return!1}},U=e=>{try{return new Date(e).toLocaleDateString(W.locale||void 0)}catch{return e}},Ie={order:e=>["GET",`/order?id=${encodeURIComponent(e.id)}`],addresses:()=>["GET","/addresses"],subscriptions:()=>["GET","/subscriptions"],profile:()=>["POST","/profile"],saveAddress:()=>["POST","/address"],deleteAddress:()=>["POST","/address/delete"],subscription:()=>["POST","/subscription"],requestReturn:()=>["POST","/return"]};async function S(e,t={}){let{server:s,serverFetch:i,query:r}=L;if(s()){let[n,a]=Ie[e](t),o=await i(a,n==="POST"?{method:n,body:t}:{});if(o.loggedIn===!1)throw new F("Not logged in",{code:"NOT_LOGGED_IN",status:401});return o}try{return await Y[e]((n,a)=>r(n,a),t)}catch(n){throw n instanceof f?new F(n.message,{code:"INVALID",userErrors:n.userErrors}):n}}var N=e=>{L.reset(),X("account-updated",{what:e})},te=e=>S("order",{id:e}).then(t=>t.order),se=({firstName:e,lastName:t}={})=>S("profile",{firstName:e,lastName:t}).then(s=>(N("profile"),s.customer)),re=()=>S("addresses").then(e=>e.addresses),z=(e,{id:t,isDefault:s}={})=>S("saveAddress",{id:t,address:e,isDefault:s}).then(i=>(N("addresses"),i.address)),ne=e=>S("deleteAddress",{id:e}).then(t=>(N("addresses"),t.deleted)),ie=()=>S("subscriptions").then(e=>e.subscriptions),oe=(e,t)=>S("subscription",{id:e,action:t}).then(s=>(N("subscriptions"),s)),ae=(e,t)=>S("requestReturn",{orderId:e,lines:t}).then(s=>(N("orders"),s.return));var q=e=>e?String(e).toLowerCase().replace(/_/g," "):"",M=e=>(e?.formatted||[]).join(", "),E=(e,t,s)=>u(e,d(t)).forEach(i=>{let r=y(i,t);r in s&&V(i,!!s[r])}),P=(e,t)=>E(e,"show",t);function we(e,t,s=null){v(e,t,(i,r)=>{let n=s&&s.get(r.id)||0;i.dataset.tetherLine=r.id,u(i,d("order-line")).concat(i.matches(d("order-line"))?[i]:[]).forEach(a=>{let o=y(a,"order-line");if(o==="image"){r.image&&G(a,r.image.url,r.image.altText||r.title);return}let c={title:r.title||r.name,"variant-title":r.variantTitle||"",quantity:String(r.quantity),price:r.price?b(r.price):"",total:r.totalPrice?b(r.totalPrice):"",sku:r.sku||"",returnable:String(n)}[o];c!=null&&w(a,c)}),E(i,"order-line-show",{returnable:n>0}),u(i,d("return-quantity")).forEach(a=>{a.max=String(n),a.min="0",a.value||(a.value="0"),a.disabled=n<1}),u(i,`select${d("return-reason")}`).forEach(a=>{let o=r.suggestedReturnReasonDefinitions?.nodes||[];a.dataset.tetherFilled!==r.id&&(a.dataset.tetherFilled=r.id,o.forEach(c=>a.appendChild(new Option(c.name,c.id))))})})}var Ce={order:d("order")};async function de(e){let t=y(e,"order")||"",s=t.startsWith("url:")?new URL(window.location.href).searchParams.get(t.slice(4)||"id"):t,i=o=>e.setAttribute(I("order-state"),o);if(!s){i("not-found"),E(e,"order-show",{"not-found":!0});return}i("loading"),E(e,"order-show",{loading:!0,ready:!1,"not-found":!1,error:!1});let r;try{r=await te(s)}catch(o){k(o,"order"),i("error"),E(e,"order-show",{loading:!1,error:!0});return}if(!r){i("not-found"),E(e,"order-show",{loading:!1,"not-found":!0});return}e.dataset.tetherOrderId=r.id;let n=new Map((r.returnInformation?.returnableLineItems?.nodes||[]).map(o=>[o.lineItem?.id,o.quantity])),a=r.fulfillments?.nodes||[];u(e,d("order-bind")).forEach(o=>{let c=y(o,"order-bind");if(c==="url"){H(r.statusPageUrl)&&o.setAttribute("href",r.statusPageUrl);return}let l={name:r.name,date:U(r.processedAt),total:b(r.totalPrice),subtotal:r.subtotal?b(r.subtotal):"",shipping:r.totalShipping?b(r.totalShipping):"",tax:r.totalTax?b(r.totalTax):"",status:q(r.financialStatus),fulfillment:q(r.fulfillmentStatus),"shipping-address":M(r.shippingAddress),"billing-address":M(r.billingAddress),items:(r.lineItems?.nodes||[]).map(m=>`${m.quantity}\xD7 ${m.title||m.name}`).join(", "),cancelled:r.cancelledAt?U(r.cancelledAt):""}[c];l!=null&&w(o,l)}),u(e,d("order-lines")).forEach(o=>we(o,r.lineItems?.nodes||[],n)),u(e,d("order-fulfillments")).forEach(o=>v(o,a,(c,l)=>{let m=l.trackingInformation?.[0]||{};u(c,d("fulfillment-bind")).concat(c.matches(d("fulfillment-bind"))?[c]:[]).forEach(h=>{let g=y(h,"fulfillment-bind");if(g==="url"){let A=H(m.url);A&&h.setAttribute("href",m.url),V(h,A);return}let p={status:q(l.latestShipmentStatus||l.status),date:U(l.createdAt),eta:l.estimatedDeliveryAt?U(l.estimatedDeliveryAt):"",company:m.company||"",number:m.number||""}[g];p!=null&&w(h,p)})})),E(e,"order-show",{loading:!1,ready:!0,error:!1,"not-found":!1,cancelled:!!r.cancelledAt,shipped:a.length>0,returnable:[...n.values()].some(o=>o>0),"has-returns":e.dataset.tetherReturned!=="1"&&(r.returns?.nodes||[]).length>0,"return-requested":e.dataset.tetherReturned==="1"}),i("ready")}async function Ee(e){let t=await L.customer().catch(()=>null);t&&["firstName","lastName"].forEach(s=>{let i=e.elements?.[s];i&&!i.dataset.tetherTouched&&(i.value=t[s]||"")})}var ce=null;async function _(e){let t=u(e,d("addresses"));if(!t.length)return;P(e,{"addresses-loading":!0,"addresses-empty":!1});let s;try{s=ce=await re()}catch(i){k(i,"addresses"),P(e,{"addresses-loading":!1,"addresses-error":!0});return}P(e,{"addresses-loading":!1,"addresses-empty":s.length===0,"addresses-error":!1}),t.forEach(i=>v(i,s,(r,n)=>{r.dataset.tetherAddress=n.id,u(r,d("address-bind")).concat(r.matches(d("address-bind"))?[r]:[]).forEach(a=>{let o={formatted:M(n),name:[n.firstName,n.lastName].filter(Boolean).join(" "),company:n.company||"",address1:n.address1||"",address2:n.address2||"",city:n.city||"",zip:n.zip||"",province:n.province||"",country:n.country||"",phone:n.phoneNumber||""}[y(a,"address-bind")];o!=null&&w(a,o)}),E(r,"address-show",{default:n.isDefault,"not-default":!n.isDefault})}))}var Se=["pause","resume","skip","unskip","cancel"];function Te(e){let t=e.upcomingBillingCycles?.nodes?.[0],s=e.status;return{active:s==="ACTIVE",paused:s==="PAUSED",cancelled:s==="CANCELLED",expired:s==="EXPIRED",failed:s==="FAILED",skipped:!!t?.skipped,"can-pause":s==="ACTIVE","can-resume":s==="PAUSED"||s==="FAILED","can-skip":s==="ACTIVE"&&!!t&&!t.skipped,"can-unskip":s==="ACTIVE"&&!!t?.skipped,"can-cancel":s==="ACTIVE"||s==="PAUSED"||s==="FAILED"}}async function ue(e){let t=u(e,d("subscriptions"));if(!t.length)return;P(e,{"subscriptions-loading":!0,"subscriptions-empty":!1});let s;try{s=await ie()}catch(i){k(i,"subscriptions"),P(e,{"subscriptions-loading":!1,"subscriptions-error":!0});return}P(e,{"subscriptions-loading":!1,"subscriptions-empty":s.length===0,"subscriptions-error":!1}),t.forEach(i=>v(i,s,(r,n)=>{r.dataset.tetherSubscription=n.id,r.setAttribute(I("subscription-status"),q(n.status));let a=n.lines?.nodes||[],o=n.deliveryPolicy?.intervalCount?.count||1,c=q(n.deliveryPolicy?.interval),l=a.reduce((h,g)=>h+parseFloat(g.lineDiscountedPrice?.amount||0),0);u(r,d("subscription-bind")).forEach(h=>{let g=y(h,"subscription-bind"),p={status:q(n.status),next:n.nextBillingDate?U(n.nextBillingDate):"",interval:c?o===1?c:`${o} ${c}s`:"",products:a.map(A=>`${A.quantity}\xD7 ${A.title}`).join(", "),total:a.length?b({amount:String(l),currencyCode:n.currencyCode}):"",delivery:n.deliveryPrice?b(n.deliveryPrice):""}[g];p!=null&&w(h,p)}),u(r,d("subscription-lines")).forEach(h=>v(h,a,(g,p)=>{u(g,d("subscription-line")).concat(g.matches(d("subscription-line"))?[g]:[]).forEach(A=>{let J=y(A,"subscription-line");if(J==="image"){p.image&&G(A,p.image.url,p.image.altText||p.title);return}let Q={title:p.title,"variant-title":p.variantTitle||"",quantity:String(p.quantity),price:b(p.currentPrice)}[J];Q!=null&&w(A,Q)})}));let m=Te(n);E(r,"subscription-show",m),u(r,d("subscription-action")).forEach(h=>{let g=y(h,"subscription-action"),p=m[`can-${g}`];h.disabled=!p,h.classList.toggle("is-disabled",!p)})}))}async function De(e=document){Z||(Z=!0,$e()),await Promise.all([...u(e,d("order")).map(t=>de(t)),...u(e,d("profile-form")).map(t=>Ee(t)),_(e),ue(e)])}var ee=e=>Object.fromEntries([...e.elements].filter(t=>t.name&&t.type!=="submit"&&t.type!=="button"&&t.type!=="checkbox").map(t=>[t.name,t.value]));async function x(e,t,{error:s}={}){if(e.getAttribute("aria-busy")!=="true"){e.classList.add("is-busy"),e.setAttribute("aria-busy","true"),e.setAttribute(I("form-state"),"pending"),u(e,d("form-error")).forEach(i=>w(i,""));try{let i=await t();return e.setAttribute(I("form-state"),"saved"),i}catch(i){e.setAttribute(I("form-state"),"error");let r=i?.userErrors?.map(n=>n.message).join(" ")||i?.message||"Something went wrong";u(e,d("form-error")).forEach(n=>w(n,r.replace(/^Customer accounts: /,""))),s&&k(i,s);return}finally{e.classList.remove("is-busy"),e.removeAttribute("aria-busy")}}}function $e(){document.addEventListener("submit",e=>{let t=e.target;if(t.matches?.(d("profile-form")))e.preventDefault(),x(t,async()=>{await se(ee(t)),await L.bindCustomer?.(document)});else if(t.matches?.(d("address-form"))){e.preventDefault();let s=t.dataset.tetherAddressId||void 0,i=!!t.elements?.isDefault?.checked;x(t,async()=>{await z(ee(t),{id:s,isDefault:i}),t.reset(),delete t.dataset.tetherAddressId,await _(document)})}},!0),document.addEventListener("input",e=>{e.target.closest?.(d("profile-form"))&&(e.target.dataset.tetherTouched="1")}),document.addEventListener("click",e=>{let t=e.target,s=t.closest?.("[data-tether-address]"),i=n=>{let a=y(n,"confirm");return!a||window.confirm(a)},r;if((r=t.closest?.(d("address-delete")))&&s)e.preventDefault(),i(r)&&x(s,async()=>{await ne(s.dataset.tetherAddress),await _(document)});else if((r=t.closest?.(d("address-default")))&&s)e.preventDefault(),x(s,async()=>{await z(null,{id:s.dataset.tetherAddress,isDefault:!0}),await _(document)});else if((r=t.closest?.(d("address-edit")))&&s){e.preventDefault();let n=(ce||[]).find(o=>o.id===s.dataset.tetherAddress),a=document.querySelector(d("address-form"));n&&a&&(a.dataset.tetherAddressId=n.id,[...a.elements].forEach(o=>{o.name&&o.name in n&&(o.value=n[o.name]??""),o.name==="isDefault"&&(o.checked=n.isDefault)}),a.scrollIntoView?.({block:"nearest"}))}else if(r=t.closest?.(d("address-new"))){let n=document.querySelector(d("address-form"));n&&(n.reset(),delete n.dataset.tetherAddressId)}else if(r=t.closest?.(d("subscription-action"))){e.preventDefault();let n=r.closest("[data-tether-subscription]"),a=y(r,"subscription-action");if(!n||!Se.includes(a)||r.disabled||!i(r))return;let o=n.dataset.tetherSubscription;n.setAttribute(I("subscription-state"),"pending"),x(n,async()=>{await oe(o,a),await ue(document)}).then(()=>{let c=n.getAttribute(I("form-state"))==="error"?"error":"done";u(document,"[data-tether-subscription]").filter(l=>l===n||l.dataset.tetherSubscription===o).forEach(l=>l.setAttribute(I("subscription-state"),c))})}else if(r=t.closest?.(d("order-return"))){e.preventDefault();let n=r.closest(Ce.order);if(!n?.dataset.tetherOrderId)return;let a=u(n,"[data-tether-line]").map(o=>({lineItemId:o.dataset.tetherLine,quantity:parseInt(o.querySelector(d("return-quantity"))?.value||"0",10),reasonId:o.querySelector(d("return-reason"))?.value||void 0,note:o.querySelector(d("return-note"))?.value||void 0})).filter(o=>o.quantity>0);if(!a.length||!i(r))return;x(n,async()=>{await ae(n.dataset.tetherOrderId,a),n.dataset.tetherReturned="1",await de(n)})}})}window.Tether.__parts["account-pages"]=K;})();
@@ -322,17 +322,10 @@
322
322
  a.setAttribute("href", u || `https://${cfg.domain}/account`);
323
323
  });
324
324
  if (!logged) return;
325
- const binds = qsa(root, sel("account-bind"));
326
- if (binds.length) {
327
- const c = await customer().catch((err) => {
328
- reportError(err, "account");
329
- return null;
330
- });
331
- binds.forEach((el) => {
332
- const v = { "first-name": c?.firstName, "last-name": c?.lastName, name: c?.displayName, email: c?.emailAddress?.emailAddress, address: c?.defaultAddress?.formatted?.join(", ") }[get(el, "account-bind")];
333
- if (v != null) setText(el, v);
334
- });
335
- }
325
+ await bindCustomer(root);
326
+ await Promise.all([renderOrderList(root), PAGE_ATTRS.some((n) => qsa(root, sel(n)).length) ? pages().then((m6) => m6.renderPages(root)) : null]);
327
+ }
328
+ async function renderOrderList(root) {
336
329
  const lists = qsa(root, sel("orders"));
337
330
  if (lists.length) {
338
331
  const ordersShow = (loading, empty) => qsa(root, sel("show")).forEach((el) => {
@@ -369,7 +362,6 @@
369
362
  if (get(node, "order-bind") === "url" && orderUrl(o)) node.setAttribute("href", orderUrl(o));
370
363
  }));
371
364
  }
372
- if (PAGE_ATTRS.some((n) => qsa(root, sel(n)).length)) await (await pages()).renderPages(root);
373
365
  }
374
366
  var nid = (g) => String(g || "").split("/").pop().split("?")[0];
375
367
  function orderUrl(o) {
@@ -392,9 +384,21 @@
392
384
  }
393
385
  var PAGE_ATTRS = ["order", "addresses", "subscriptions", "profile-form", "address-form"];
394
386
  var pagesPart = null;
387
+ async function bindCustomer(root) {
388
+ const binds = qsa(root, sel("account-bind"));
389
+ if (!binds.length) return;
390
+ const c = await customer().catch((err) => {
391
+ reportError(err, "account");
392
+ return null;
393
+ });
394
+ binds.forEach((el) => {
395
+ const v = { "first-name": c?.firstName, "last-name": c?.lastName, name: c?.displayName, email: c?.emailAddress?.emailAddress, address: c?.defaultAddress?.formatted?.join(", ") }[get(el, "account-bind")];
396
+ if (v != null) setText(el, v);
397
+ });
398
+ }
395
399
  function pages() {
396
400
  pagesPart || (pagesPart = loadPart("account-pages").then((m6) => {
397
- m6.setup({ server, serverFetch, query, customer, reset: () => {
401
+ m6.setup({ server, serverFetch, query, customer, bindCustomer, reset: () => {
398
402
  customerCache = null;
399
403
  serverState = null;
400
404
  } });
@@ -1 +1 @@
1
- (()=>{var wt=Object.defineProperty;var ht=(t,e)=>{for(var o in e)wt(t,o,{get:e[o],enumerable:!0})};var Y={};ht(Y,{addresses:()=>$t,customer:()=>X,deleteAddress:()=>Nt,getToken:()=>E,handleCallback:()=>it,isLoggedIn:()=>W,login:()=>st,logout:()=>dt,mountAccount:()=>qt,order:()=>Pt,orders:()=>lt,query:()=>q,render:()=>N,requestReturn:()=>Ot,saveAddress:()=>vt,subscriptionAction:()=>Lt,subscriptions:()=>Dt,updateProfile:()=>Ct});var gt=window.Tether.__core["config.js"],{DEFAULTS:jt,cfg:a,configure:Jt,isConfigured:Bt,log:Z,reportError:k,warn:Gt}=gt;var pt=window.Tether.__core["client.js"],{TetherError:p,endpoint:Mt,gql:zt,request:Ft,unwrap:Ht,withContext:Vt}=pt;var yt=window.Tether.__core["dom.js"],{attr:Xt,busy:Yt,cdnUrl:Qt,dataKey:Zt,emit:A,formatDate:te,formatMoney:tt,formatPercent:ee,get:S,has:oe,hasTemplate:ne,imageUrl:re,notifyLayoutChanged:se,parseJSONAttr:ae,productUrl:ce,qsa:y,readText:ie,repeat:j,repeatKeyed:ue,sameImage:le,scoped:de,sel:f,setImage:J,setSelected:fe,setText:$,setTextTracked:me,show:b,toAttributes:we,watchImages:he}=yt;var _t=window.Tether.__core["cart.js"],{Cart:m,focusables:pe,toLineInput:ye}=_t;var St=window.Tether.__core["lazy.js"],{coreModules:Se,loadPart:et}=St;var D=()=>`${a.prefix}:account:${a.domain}`,M=()=>`${a.prefix}:account-login:${a.domain}`,L=()=>a.account?.remember?window.localStorage:window.sessionStorage,rt=t=>btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),B=()=>rt(crypto.getRandomValues(new Uint8Array(32))),Tt=async t=>rt(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))),U=t=>(a.account?.navigate||(e=>window.location.assign(e)))(t),H=(t,e)=>{try{return JSON.parse(t.getItem(e)||"null")}catch{return null}},O=(t,e,o)=>{try{o?t.setItem(e,JSON.stringify(o)):t.removeItem(e)}catch{}},v=null,c=null,G=null,x=null,h=()=>a.account?.server?new URL(String(a.account.server),window.location.href).href.replace(/\/$/,""):"",z=()=>`${a.prefix}:account-hint:${a.domain}`,I=null;async function P(t,{method:e="GET",body:o}={}){let n=await fetch(`${h()}${t}`,{method:e,credentials:"include",headers:e==="POST"?{"Content-Type":"application/json","X-Tether-Account":"1"}:{},body:o?JSON.stringify(o):void 0}),r=await n.json().catch(()=>({}));if(!n.ok&&n.status!==401)throw new p(`Customer accounts: ${r.error||n.status}`,{status:n.status,userErrors:r.userErrors});return r}async function V(){I||(I=await P("/me"));try{I.loggedIn?window.localStorage.setItem(z(),"1"):window.localStorage.removeItem(z())}catch{}return I}async function C(){if(v)return v;let t=a.account?.shopDomain||a.domain,e=r=>fetch(`https://${t}/.well-known/${r}`).then(s=>{if(!s.ok)throw new p(`Customer accounts: ${r} answered ${s.status}`,{status:s.status});return s.json()}),[o,n]=await Promise.all([e("openid-configuration"),e("customer-account-api")]);return v={...o,graphql:n.graphql_api},v}var kt=()=>a.account?.callbackUrl||`${window.location.origin}${window.location.pathname}`;function W(){return h()?!!I?.loggedIn:!!(c?.refresh||c?.access&&c.expiresAt>Date.now())}async function st({returnTo:t=window.location.href,locale:e}={}){if(h()){let d=new URL(`${h()}/login`);d.searchParams.set("returnTo",t);let g=e||a.account.locale||(a.locale||"").split("-")[0];g&&d.searchParams.set("locale",g),a.country&&d.searchParams.set("country",String(a.country).toUpperCase()),U(d.toString());return}if(!a.account?.clientId)throw new p("Customer accounts: set account.clientId",{code:"NOT_CONFIGURED"});let o=await C(),n=B(),r=B(),s=B(),i=kt();O(window.sessionStorage,M(),{state:n,nonce:r,verifier:s,redirect:i,returnTo:t,at:Date.now()});let u=new URL(o.authorization_endpoint),w={client_id:a.account.clientId,scope:"openid email customer-account-api:full",response_type:"code",redirect_uri:i,state:n,nonce:r,code_challenge:await Tt(s),code_challenge_method:"S256"},l=e||a.account.locale||(a.locale||"").split("-")[0];l&&(w.locale=l),a.country&&(w.region_country=String(a.country).toUpperCase()),Object.entries(w).forEach(([d,g])=>u.searchParams.set(d,g)),U(u.toString())}async function at(t){let e=await C(),o=await fetch(a.account.tokenUrl||e.token_endpoint,{method:"POST",body:new URLSearchParams(t)}),n=await o.json().catch(()=>({}));if(!o.ok||!n.access_token)throw new p(`Customer accounts: token ${o.status} ${n.error||""}`.trim(),{status:o.status,code:o.status===400||o.status===401?"SESSION_ENDED":"TOKEN_FAILED"});return n}function At(t){try{return JSON.parse(atob(t.split(".")[1].replace(/-/g,"+").replace(/_/g,"/")))}catch{return null}}function ct(t,e=c){c={access:t.access_token,expiresAt:Date.now()+Math.max(0,(Number(t.expires_in)||3600)-120)*1e3,refresh:t.refresh_token||e?.refresh,idToken:t.id_token||e?.idToken},O(L(),D(),c)}async function it(){let t=new URLSearchParams(window.location.search),e=H(window.sessionStorage,M());if(!e||!t.has("code")&&!t.has("error")||t.get("state")!==e.state)return!1;O(window.sessionStorage,M(),null);let o=new URL(window.location.href);if(["code","state","iss","error","error_description"].forEach(w=>o.searchParams.delete(w)),window.history.replaceState(window.history.state,"",o),t.has("error"))return A("account-error",{error:t.get("error")}),!1;if(Date.now()-e.at>10*6e4)throw new p("Customer accounts: the login took too long, please try again");let n=await at({grant_type:"authorization_code",client_id:a.account.clientId,redirect_uri:e.redirect,code:t.get("code"),code_verifier:e.verifier}),r=await C(),s=At(n.id_token||""),i=[].concat(s?.aud||[]);if(!s||s.nonce!==e.nonce||s.iss!==r.issuer||!i.includes(a.account.clientId)||s.exp*1e3<Date.now())throw new p("Customer accounts: the login answer did not check out (nonce/issuer/audience)");ct(n,null),await ut(),A("account-login",{});let u=e.returnTo&&new URL(e.returnTo,window.location.href);return u&&u.origin===window.location.origin&&u.href!==o.href&&U(u.href),!0}async function E(){return h()||(c||(c=H(L(),D())),!c)?null:c.access&&c.expiresAt>Date.now()?c.access:c.refresh?(G||(G=(async()=>{try{ct(await at({grant_type:"refresh_token",client_id:a.account.clientId,refresh_token:c.refresh})),await ut()}catch(t){if(t.code==="SESSION_ENDED")F();else throw t}finally{G=null}})()),await G,c?.access||null):(F(),null)}function F(){c=null,x=null,O(L(),D(),null),m.customerAccessToken=null}async function ut(){m.customerAccessToken=c?.access||null,m.id()&&c?.access&&await m.setBuyerIdentity({customerAccessToken:c.access},{create:!1}).catch(t=>k(t,"account cart"))}async function q(t,e={}){if(h())throw new p("Customer accounts in server mode only answer customer() and orders()",{code:"NOT_ALLOWED"});let o=await E();if(!o)throw new p("Not logged in",{code:"NOT_LOGGED_IN"});let n=await C(),r=u=>fetch(n.graphql,{method:"POST",headers:{"Content-Type":"application/json",Authorization:u},body:JSON.stringify({query:t,variables:e})}),s=await r(o);s.status===401&&c?.refresh&&(c.expiresAt=0,s=await r(await E()));let i=await s.json().catch(()=>({}));if(!s.ok||i.errors?.length)throw new p(i.errors?.map(u=>u.message).join(" | ")||`Customer accounts: ${s.status}`,{status:s.status});return i.data}async function X(){if(h()){let e=await V();return e.loggedIn?{...e.customer,emailAddress:{emailAddress:e.customer.email},defaultAddress:{formatted:e.customer.address}}:null}return x||(x=(await q("query TetherCustomer{customer{id firstName lastName displayName emailAddress{emailAddress}defaultAddress{formatted}}}")).customer,x)}async function lt({first:t=10}={}){return h()?(await P(`/orders?first=${t}`)).orders||[]:(await q("query TetherOrders($first:Int!){customer{orders(first:$first,sortKey:PROCESSED_AT,reverse:true){nodes{id name processedAt financialStatus fulfillmentStatus statusPageUrl totalPrice{amount currencyCode}lineItems(first:20){nodes{title variantTitle quantity image{url altText}}}}}}}",{first:t})).customer?.orders?.nodes||[]}async function dt({returnTo:t=a.account?.logoutUrl||`${window.location.origin}/`}={}){if(h()){let r=await P("/logout",{method:"POST",body:{returnTo:t,cartId:m.id()}});I={loggedIn:!1};try{window.localStorage.removeItem(z())}catch{}A("account-logout",{}),r.logoutUrl?U(r.logoutUrl):N(document);return}let e=c?.idToken||H(L(),D())?.idToken;if(m.id()&&await m.setBuyerIdentity({customerAccessToken:null},{create:!1}).catch(()=>{}),F(),A("account-logout",{}),!e){N(document);return}let o=await C(),n=new URL(o.end_session_endpoint);n.searchParams.set("id_token_hint",e),n.searchParams.set("post_logout_redirect_uri",t),U(n.toString())}var xt=t=>{try{return new URL(t).protocol==="https:"}catch{return!1}},It=t=>{try{return new Date(t).toLocaleDateString(a.locale||void 0)}catch{return t}};async function N(t=document){let e=h()?!!(await V().catch(()=>({loggedIn:!1}))).loggedIn:W()||!!await E().catch(()=>null);if(y(t,f("show")).forEach(r=>{let s=S(r,"show");s==="logged-in"&&b(r,e),s==="logged-out"&&b(r,!e)}),y(t,f("account-link")).forEach(r=>{let s=S(r,"account-link"),i=s==="payment"&&(a.account?.paymentUrl||a.account?.subscriptionsUrl)||s==="subscriptions"&&a.account?.subscriptionsUrl;r.setAttribute("href",i||`https://${a.domain}/account`)}),!e)return;let o=y(t,f("account-bind"));if(o.length){let r=await X().catch(s=>(k(s,"account"),null));o.forEach(s=>{let i={"first-name":r?.firstName,"last-name":r?.lastName,name:r?.displayName,email:r?.emailAddress?.emailAddress,address:r?.defaultAddress?.formatted?.join(", ")}[S(s,"account-bind")];i!=null&&$(s,i)})}let n=y(t,f("orders"));if(n.length){let r=(u,w)=>y(t,f("show")).forEach(l=>{let d=S(l,"show");d==="orders-loading"&&b(l,u),d==="orders-empty"&&b(l,w)});r(!0,!1);let s=!1,i=await lt({first:parseInt(S(n[0],"limit")||"10",10)}).catch(u=>(k(u,"orders"),s=!0,[]));r(!1,!s&&i.length===0),n.forEach(u=>j(u,i,(w,l)=>{let d=l.lineItems?.nodes||[];y(w,f("order-bind")).forEach(g=>{let R=S(g,"order-bind");if(R==="url"){let _=K(l);_&&g.setAttribute("href",_);return}if(R==="image"){let _=d.find(mt=>mt.image)?.image;_&&J(g,_.url,_.altText||d[0]?.title||"");return}let Q={name:l.name,date:It(l.processedAt),total:tt(l.totalPrice),status:l.financialStatus?.toLowerCase(),fulfillment:l.fulfillmentStatus?.toLowerCase(),items:d.map(_=>`${_.quantity}\xD7 ${_.title}`).join(", ")}[R];Q!=null&&$(g,Q)}),y(w,f("order-lines")).forEach(g=>Ut(g,d)),S(w,"order-bind")==="url"&&K(l)&&w.setAttribute("href",K(l))}))}Et.some(r=>y(t,f(r)).length)&&await(await ft()).renderPages(t)}var bt=t=>String(t||"").split("/").pop().split("?")[0];function K(t){let e=a.account?.orderUrl;return e?String(e).replace("{id}",encodeURIComponent(bt(t.id))):xt(t.statusPageUrl)?t.statusPageUrl:null}function Ut(t,e){j(t,e,(o,n)=>{y(o,f("order-line")).concat(o.matches(f("order-line"))?[o]:[]).forEach(r=>{let s=S(r,"order-line");if(s==="image"){n.image&&J(r,n.image.url,n.image.altText||n.title);return}let i={title:n.title,"variant-title":n.variantTitle||"",quantity:String(n.quantity)}[s];i!=null&&$(r,i)})})}var Et=["order","addresses","subscriptions","profile-form","address-form"],ot=null;function ft(){return ot||(ot=et("account-pages").then(t=>(t.setup({server:h,serverFetch:P,query:q,customer:X,reset:()=>{x=null,I=null}}),t))),ot}var T=t=>(...e)=>ft().then(o=>o[t](...e)),Pt=T("order"),Ct=T("updateProfile"),$t=T("addresses"),vt=T("saveAddress"),Nt=T("deleteAddress"),Dt=T("subscriptions"),Lt=T("subscriptionAction"),Ot=T("requestReturn"),nt=!1;async function qt(t=document){if(!nt){if(nt=!0,document.addEventListener("click",e=>{let o=e.target;o.closest?.(f("account-login"))?(e.preventDefault(),st().catch(n=>k(n,"login"))):o.closest?.(f("account-logout"))&&(e.preventDefault(),dt().catch(n=>k(n,"logout")))}),h()){let e=new URL(window.location.href);e.searchParams.get("account")&&(e.searchParams.delete("account"),window.history.replaceState(window.history.state,"",e),A("account-login",{})),m.beforeCheckout=async()=>{if(!(await V()).loggedIn||!m.id())return null;let o=await P("/cart",{method:"POST",body:{cartId:m.id()}}).catch(()=>null);return o?.checkoutUrl?`${o.checkoutUrl}${o.checkoutUrl.includes("?")?"&":"?"}logged_in=true`:null}}else{try{await it()}catch(e){k(e,"login")}!m.customerAccessToken&&await E().catch(()=>null)&&(m.customerAccessToken=c.access)}Z("account",W()?"logged in":"logged out")}await N(t)}window.Tether.__parts.account=Y;})();
1
+ (()=>{var mt=Object.defineProperty;var ht=(t,e)=>{for(var n in e)mt(t,n,{get:e[n],enumerable:!0})};var X={};ht(X,{addresses:()=>$t,customer:()=>W,deleteAddress:()=>Nt,getToken:()=>E,handleCallback:()=>at,isLoggedIn:()=>V,login:()=>ot,logout:()=>ut,mountAccount:()=>qt,order:()=>Pt,orders:()=>it,query:()=>q,render:()=>N,requestReturn:()=>Dt,saveAddress:()=>vt,subscriptionAction:()=>Ot,subscriptions:()=>Lt,updateProfile:()=>Ct});var wt=window.Tether.__core["config.js"],{DEFAULTS:jt,cfg:r,configure:Jt,isConfigured:Bt,log:Y,reportError:k,warn:Gt}=wt;var gt=window.Tether.__core["client.js"],{TetherError:w,endpoint:Mt,gql:zt,request:Ft,unwrap:Ht,withContext:Vt}=gt;var pt=window.Tether.__core["dom.js"],{attr:Xt,busy:Yt,cdnUrl:Qt,dataKey:Zt,emit:A,formatDate:te,formatMoney:Q,formatPercent:ee,get:_,has:ne,hasTemplate:oe,imageUrl:re,notifyLayoutChanged:se,parseJSONAttr:ae,productUrl:ce,qsa:g,readText:ie,repeat:R,repeatKeyed:ue,sameImage:le,scoped:de,sel:d,setImage:j,setSelected:fe,setText:$,setTextTracked:me,show:b,toAttributes:he,watchImages:we}=pt;var yt=window.Tether.__core["cart.js"],{Cart:f,focusables:pe,toLineInput:ye}=yt;var _t=window.Tether.__core["lazy.js"],{coreModules:Se,loadPart:Z}=_t;var L=()=>`${r.prefix}:account:${r.domain}`,K=()=>`${r.prefix}:account-login:${r.domain}`,O=()=>r.account?.remember?window.localStorage:window.sessionStorage,nt=t=>btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),J=()=>nt(crypto.getRandomValues(new Uint8Array(32))),St=async t=>nt(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))),U=t=>(r.account?.navigate||(e=>window.location.assign(e)))(t),F=(t,e)=>{try{return JSON.parse(t.getItem(e)||"null")}catch{return null}},D=(t,e,n)=>{try{n?t.setItem(e,JSON.stringify(n)):t.removeItem(e)}catch{}},v=null,i=null,B=null,x=null,m=()=>r.account?.server?new URL(String(r.account.server),window.location.href).href.replace(/\/$/,""):"",M=()=>`${r.prefix}:account-hint:${r.domain}`,I=null;async function P(t,{method:e="GET",body:n}={}){let o=await fetch(`${m()}${t}`,{method:e,credentials:"include",headers:e==="POST"?{"Content-Type":"application/json","X-Tether-Account":"1"}:{},body:n?JSON.stringify(n):void 0}),s=await o.json().catch(()=>({}));if(!o.ok&&o.status!==401)throw new w(`Customer accounts: ${s.error||o.status}`,{status:o.status,userErrors:s.userErrors});return s}async function H(){I||(I=await P("/me"));try{I.loggedIn?window.localStorage.setItem(M(),"1"):window.localStorage.removeItem(M())}catch{}return I}async function C(){if(v)return v;let t=r.account?.shopDomain||r.domain,e=s=>fetch(`https://${t}/.well-known/${s}`).then(a=>{if(!a.ok)throw new w(`Customer accounts: ${s} answered ${a.status}`,{status:a.status});return a.json()}),[n,o]=await Promise.all([e("openid-configuration"),e("customer-account-api")]);return v={...n,graphql:o.graphql_api},v}var Tt=()=>r.account?.callbackUrl||`${window.location.origin}${window.location.pathname}`;function V(){return m()?!!I?.loggedIn:!!(i?.refresh||i?.access&&i.expiresAt>Date.now())}async function ot({returnTo:t=window.location.href,locale:e}={}){if(m()){let h=new URL(`${m()}/login`);h.searchParams.set("returnTo",t);let T=e||r.account.locale||(r.locale||"").split("-")[0];T&&h.searchParams.set("locale",T),r.country&&h.searchParams.set("country",String(r.country).toUpperCase()),U(h.toString());return}if(!r.account?.clientId)throw new w("Customer accounts: set account.clientId",{code:"NOT_CONFIGURED"});let n=await C(),o=J(),s=J(),a=J(),u=Tt();D(window.sessionStorage,K(),{state:o,nonce:s,verifier:a,redirect:u,returnTo:t,at:Date.now()});let c=new URL(n.authorization_endpoint),l={client_id:r.account.clientId,scope:"openid email customer-account-api:full",response_type:"code",redirect_uri:u,state:o,nonce:s,code_challenge:await St(a),code_challenge_method:"S256"},p=e||r.account.locale||(r.locale||"").split("-")[0];p&&(l.locale=p),r.country&&(l.region_country=String(r.country).toUpperCase()),Object.entries(l).forEach(([h,T])=>c.searchParams.set(h,T)),U(c.toString())}async function rt(t){let e=await C(),n=await fetch(r.account.tokenUrl||e.token_endpoint,{method:"POST",body:new URLSearchParams(t)}),o=await n.json().catch(()=>({}));if(!n.ok||!o.access_token)throw new w(`Customer accounts: token ${n.status} ${o.error||""}`.trim(),{status:n.status,code:n.status===400||n.status===401?"SESSION_ENDED":"TOKEN_FAILED"});return o}function kt(t){try{return JSON.parse(atob(t.split(".")[1].replace(/-/g,"+").replace(/_/g,"/")))}catch{return null}}function st(t,e=i){i={access:t.access_token,expiresAt:Date.now()+Math.max(0,(Number(t.expires_in)||3600)-120)*1e3,refresh:t.refresh_token||e?.refresh,idToken:t.id_token||e?.idToken},D(O(),L(),i)}async function at(){let t=new URLSearchParams(window.location.search),e=F(window.sessionStorage,K());if(!e||!t.has("code")&&!t.has("error")||t.get("state")!==e.state)return!1;D(window.sessionStorage,K(),null);let n=new URL(window.location.href);if(["code","state","iss","error","error_description"].forEach(l=>n.searchParams.delete(l)),window.history.replaceState(window.history.state,"",n),t.has("error"))return A("account-error",{error:t.get("error")}),!1;if(Date.now()-e.at>10*6e4)throw new w("Customer accounts: the login took too long, please try again");let o=await rt({grant_type:"authorization_code",client_id:r.account.clientId,redirect_uri:e.redirect,code:t.get("code"),code_verifier:e.verifier}),s=await C(),a=kt(o.id_token||""),u=[].concat(a?.aud||[]);if(!a||a.nonce!==e.nonce||a.iss!==s.issuer||!u.includes(r.account.clientId)||a.exp*1e3<Date.now())throw new w("Customer accounts: the login answer did not check out (nonce/issuer/audience)");st(o,null),await ct(),A("account-login",{});let c=e.returnTo&&new URL(e.returnTo,window.location.href);return c&&c.origin===window.location.origin&&c.href!==n.href&&U(c.href),!0}async function E(){return m()||(i||(i=F(O(),L())),!i)?null:i.access&&i.expiresAt>Date.now()?i.access:i.refresh?(B||(B=(async()=>{try{st(await rt({grant_type:"refresh_token",client_id:r.account.clientId,refresh_token:i.refresh})),await ct()}catch(t){if(t.code==="SESSION_ENDED")z();else throw t}finally{B=null}})()),await B,i?.access||null):(z(),null)}function z(){i=null,x=null,D(O(),L(),null),f.customerAccessToken=null}async function ct(){f.customerAccessToken=i?.access||null,f.id()&&i?.access&&await f.setBuyerIdentity({customerAccessToken:i.access},{create:!1}).catch(t=>k(t,"account cart"))}async function q(t,e={}){if(m())throw new w("Customer accounts in server mode only answer customer() and orders()",{code:"NOT_ALLOWED"});let n=await E();if(!n)throw new w("Not logged in",{code:"NOT_LOGGED_IN"});let o=await C(),s=c=>fetch(o.graphql,{method:"POST",headers:{"Content-Type":"application/json",Authorization:c},body:JSON.stringify({query:t,variables:e})}),a=await s(n);a.status===401&&i?.refresh&&(i.expiresAt=0,a=await s(await E()));let u=await a.json().catch(()=>({}));if(!a.ok||u.errors?.length)throw new w(u.errors?.map(c=>c.message).join(" | ")||`Customer accounts: ${a.status}`,{status:a.status});return u.data}async function W(){if(m()){let e=await H();return e.loggedIn?{...e.customer,emailAddress:{emailAddress:e.customer.email},defaultAddress:{formatted:e.customer.address}}:null}return x||(x=(await q("query TetherCustomer{customer{id firstName lastName displayName emailAddress{emailAddress}defaultAddress{formatted}}}")).customer,x)}async function it({first:t=10}={}){return m()?(await P(`/orders?first=${t}`)).orders||[]:(await q("query TetherOrders($first:Int!){customer{orders(first:$first,sortKey:PROCESSED_AT,reverse:true){nodes{id name processedAt financialStatus fulfillmentStatus statusPageUrl totalPrice{amount currencyCode}lineItems(first:20){nodes{title variantTitle quantity image{url altText}}}}}}}",{first:t})).customer?.orders?.nodes||[]}async function ut({returnTo:t=r.account?.logoutUrl||`${window.location.origin}/`}={}){if(m()){let s=await P("/logout",{method:"POST",body:{returnTo:t,cartId:f.id()}});I={loggedIn:!1};try{window.localStorage.removeItem(M())}catch{}A("account-logout",{}),s.logoutUrl?U(s.logoutUrl):N(document);return}let e=i?.idToken||F(O(),L())?.idToken;if(f.id()&&await f.setBuyerIdentity({customerAccessToken:null},{create:!1}).catch(()=>{}),z(),A("account-logout",{}),!e){N(document);return}let n=await C(),o=new URL(n.end_session_endpoint);o.searchParams.set("id_token_hint",e),o.searchParams.set("post_logout_redirect_uri",t),U(o.toString())}var At=t=>{try{return new URL(t).protocol==="https:"}catch{return!1}},xt=t=>{try{return new Date(t).toLocaleDateString(r.locale||void 0)}catch{return t}};async function N(t=document){let e=m()?!!(await H().catch(()=>({loggedIn:!1}))).loggedIn:V()||!!await E().catch(()=>null);g(t,d("show")).forEach(n=>{let o=_(n,"show");o==="logged-in"&&b(n,e),o==="logged-out"&&b(n,!e)}),g(t,d("account-link")).forEach(n=>{let o=_(n,"account-link"),s=o==="payment"&&(r.account?.paymentUrl||r.account?.subscriptionsUrl)||o==="subscriptions"&&r.account?.subscriptionsUrl;n.setAttribute("href",s||`https://${r.domain}/account`)}),e&&(await lt(t),await Promise.all([It(t),Et.some(n=>g(t,d(n)).length)?dt().then(n=>n.renderPages(t)):null]))}async function It(t){let e=g(t,d("orders"));if(e.length){let n=(a,u)=>g(t,d("show")).forEach(c=>{let l=_(c,"show");l==="orders-loading"&&b(c,a),l==="orders-empty"&&b(c,u)});n(!0,!1);let o=!1,s=await it({first:parseInt(_(e[0],"limit")||"10",10)}).catch(a=>(k(a,"orders"),o=!0,[]));n(!1,!o&&s.length===0),e.forEach(a=>R(a,s,(u,c)=>{let l=c.lineItems?.nodes||[];g(u,d("order-bind")).forEach(p=>{let h=_(p,"order-bind");if(h==="url"){let y=G(c);y&&p.setAttribute("href",y);return}if(h==="image"){let y=l.find(ft=>ft.image)?.image;y&&j(p,y.url,y.altText||l[0]?.title||"");return}let T={name:c.name,date:xt(c.processedAt),total:Q(c.totalPrice),status:c.financialStatus?.toLowerCase(),fulfillment:c.fulfillmentStatus?.toLowerCase(),items:l.map(y=>`${y.quantity}\xD7 ${y.title}`).join(", ")}[h];T!=null&&$(p,T)}),g(u,d("order-lines")).forEach(p=>Ut(p,l)),_(u,"order-bind")==="url"&&G(c)&&u.setAttribute("href",G(c))}))}}var bt=t=>String(t||"").split("/").pop().split("?")[0];function G(t){let e=r.account?.orderUrl;return e?String(e).replace("{id}",encodeURIComponent(bt(t.id))):At(t.statusPageUrl)?t.statusPageUrl:null}function Ut(t,e){R(t,e,(n,o)=>{g(n,d("order-line")).concat(n.matches(d("order-line"))?[n]:[]).forEach(s=>{let a=_(s,"order-line");if(a==="image"){o.image&&j(s,o.image.url,o.image.altText||o.title);return}let u={title:o.title,"variant-title":o.variantTitle||"",quantity:String(o.quantity)}[a];u!=null&&$(s,u)})})}var Et=["order","addresses","subscriptions","profile-form","address-form"],tt=null;async function lt(t){let e=g(t,d("account-bind"));if(!e.length)return;let n=await W().catch(o=>(k(o,"account"),null));e.forEach(o=>{let s={"first-name":n?.firstName,"last-name":n?.lastName,name:n?.displayName,email:n?.emailAddress?.emailAddress,address:n?.defaultAddress?.formatted?.join(", ")}[_(o,"account-bind")];s!=null&&$(o,s)})}function dt(){return tt||(tt=Z("account-pages").then(t=>(t.setup({server:m,serverFetch:P,query:q,customer:W,bindCustomer:lt,reset:()=>{x=null,I=null}}),t))),tt}var S=t=>(...e)=>dt().then(n=>n[t](...e)),Pt=S("order"),Ct=S("updateProfile"),$t=S("addresses"),vt=S("saveAddress"),Nt=S("deleteAddress"),Lt=S("subscriptions"),Ot=S("subscriptionAction"),Dt=S("requestReturn"),et=!1;async function qt(t=document){if(!et){if(et=!0,document.addEventListener("click",e=>{let n=e.target;n.closest?.(d("account-login"))?(e.preventDefault(),ot().catch(o=>k(o,"login"))):n.closest?.(d("account-logout"))&&(e.preventDefault(),ut().catch(o=>k(o,"logout")))}),m()){let e=new URL(window.location.href);e.searchParams.get("account")&&(e.searchParams.delete("account"),window.history.replaceState(window.history.state,"",e),A("account-login",{})),f.beforeCheckout=async()=>{if(!(await H()).loggedIn||!f.id())return null;let n=await P("/cart",{method:"POST",body:{cartId:f.id()}}).catch(()=>null);return n?.checkoutUrl?`${n.checkoutUrl}${n.checkoutUrl.includes("?")?"&":"?"}logged_in=true`:null}}else{try{await at()}catch(e){k(e,"login")}!f.customerAccessToken&&await E().catch(()=>null)&&(f.customerAccessToken=i.access)}Y("account",V()?"logged in":"logged out")}await N(t)}window.Tether.__parts.account=X;})();
@@ -189,8 +189,10 @@
189
189
  "orders-loading",
190
190
  "addresses-loading",
191
191
  "addresses-empty",
192
+ "addresses-error",
192
193
  "subscriptions-loading",
193
- "subscriptions-empty"
194
+ "subscriptions-empty",
195
+ "subscriptions-error"
194
196
  ]);
195
197
  var BIND = /* @__PURE__ */ new Set([
196
198
  "title",
@@ -1,4 +1,4 @@
1
- (()=>{var j=Object.defineProperty;var R=(e,t)=>{for(var o in t)j(e,o,{get:t[o],enumerable:!0})};var P={};R(P,{apiVersionStatus:()=>E,checkMarkup:()=>O,diagnose:()=>se,didYouMean:()=>w});var B=window.Tether.__core["config.js"],{DEFAULTS:ce,cfg:l,configure:ue,isConfigured:T,log:de,reportError:pe,warn:me}=B;var z=window.Tether.__core["client.js"],{TetherError:he,endpoint:C,gql:v,request:ge,unwrap:ye,withContext:be}=z;var G=window.Tether.__core["dom.js"],{attr:f,busy:$e,cdnUrl:ke,dataKey:Se,emit:ve,formatDate:Ee,formatMoney:xe,formatPercent:Pe,get:g,has:Te,hasTemplate:_,imageUrl:Ce,notifyLayoutChanged:_e,parseJSONAttr:Ae,productUrl:qe,qsa:d,readText:Ue,repeat:Me,repeatKeyed:De,sameImage:Ne,scoped:Ve,sel:c,setImage:Ie,setSelected:Le,setText:Oe,setTextTracked:je,show:Re,toAttributes:Be,watchImages:ze}=G;var Y=window.Tether.__core["loader.js"],{clearProductCache:Ye,getProduct:A,getProducts:He,getRecommendations:Ke,hydrateProducts:We,normalizeProductKey:Fe,primeProduct:Je,refreshProducts:Ze,takeStale:Xe}=Y;var H=window.Tether.__core["selling-plans.js"],{GID:et,allPlans:q,allocationFor:tt,findPlan:ot,hasPlans:nt,planAdjustment:rt,planCheckoutCharge:at,planPrice:st,planSavings:it,plansForVariant:lt,toGid:ct}=H;var K=window.Tether.__core["status.js"],{STATUS_KEYS:dt,boundary:U,isNotFound:pt,ownedBy:mt,resolveProductKey:$,setScopeStatus:ft}=K;var D=e=>{let t=/^(\d{4})-(01|04|07|10)$/.exec(String(e||""));return t?{y:+t[1],m:+t[2]}:null},W=(e,t)=>`${e}-${String(t).padStart(2,"0")}`;function M(e,t=1){let o=D(e);if(!o)throw new Error(`not a quarterly Shopify API version: ${e}`);let a=o.y*4+(o.m-1)/3+t;return W(Math.floor(a/4),a%4*3+1)}function E(e,t=new Date){if(e==="unstable")return{version:e,ok:!1,note:'"unstable" changes without notice: pin a dated version such as 2026-07'};let o=D(e);if(!o)return{version:e,ok:!1,note:"not a quarterly version (YYYY-01, -04, -07 or -10)"};let a=new Date(Date.UTC(o.y,o.m-1,1)),n=new Date(Date.UTC(o.y+1,o.m-1,1)),p=(n-t)/(30.44*24*3600*1e3),i=`supported until about ${n.toISOString().slice(0,7)}`;return a>t?i="not released yet (release candidate at best)":p<=0?i="no longer supported: Shopify falls back to the oldest supported version. Upgrade (see README)":p<3&&(i=`${i}: plan the upgrade to ${M(e)} or later (see README)`),{version:e,ok:a<=t&&p>0,monthsLeft:Math.round(p),next:M(e),note:i}}var F=/^[A-Z]{2}$/,J=new Set(["PT_BR","PT_PT","ZH_CN","ZH_TW"]),Z=()=>`${l.prefix}:market:${l.domain}`,X=()=>({document:typeof document<"u"?document:null,location:typeof window<"u"?window.location:null,storage:(()=>{try{return window.localStorage}catch{return null}})(),global:typeof window<"u"?window:{}});function Q(e){let t=String(e||"").trim().toUpperCase();return F.test(t)&&t!=="XX"&&t!=="T1"?t:null}function ee(e){let t=String(e||"").trim().replace("-","_").toUpperCase();if(!t)return null;if(J.has(t))return t;let o=t.split("_")[0];return/^[A-Z]{2,3}$/.test(o)?o:null}function te(e,t){if(!e||!t)return null;let o=String(e.cookie||"").split(";").map(a=>a.trim()).find(a=>a.startsWith(`${t}=`));return o?decodeURIComponent(o.slice(t.length+1)):null}var x=(e,t)=>{if(!e||!t)return null;let o=String(t).toLowerCase(),a=Object.keys(e).find(n=>n.toLowerCase()===o);return a?e[a]:null},oe={saved(e,t){if(e.remember===!1||!t.storage)return null;try{return JSON.parse(t.storage.getItem(Z())||"null")}catch{return null}},server(e,t){let o=p=>t.document?.querySelector?.(`meta[name="${p}"]`)?.getAttribute("content"),a=t.global.TETHER_COUNTRY||o("tether-country")||te(t.document,e.cookie||"tether_country"),n=t.global.TETHER_LANGUAGE||o("tether-language");return{country:a,language:n}},webflow(e,t){let o=(t.location?.pathname||"/").split("/").filter(Boolean)[0],a=x(e.locales,o);if(a)return a;let n=t.document?.documentElement?.getAttribute("lang");if(!n)return null;let p=x(e.locales,n)||x(e.locales,n.split("-")[0]);if(p)return{locale:n,...p};if(e.locales&&e.strict)return null;let i=n.split("-")[1];return{language:n,country:i&&i.length===2?i:null,locale:n}}};function N(e=l.markets,t=X()){let o=e||{};if(o.detect===!1)return{};let a=o.detect?o.detect===!0?["saved","server","webflow"]:[].concat(o.detect):["saved"];e=o;let n={sources:{}};return a.forEach(p=>{let i=oe[p]?.(e,t);if(!i)return;let b={country:Q(i.country),language:ee(i.language),locale:i.locale||null};Object.entries(b).forEach(([r,s])=>{s&&!n[r]&&(n[r]=s,n.sources[r]=p)})}),n}var V=new Set(["in-stock","out-of-stock","backorder","low-stock","plenty-in-stock","on-sale","not-on-sale","has-variants","single-variant","subscription-available","subscription-unavailable","subscription-only","one-time-available","subscription-selected","one-time-selected","has-savings","loading","ready","error","not-found","cart-empty","cart-filled","cart-has-subscription","cart-no-subscription","cart-has-discount","cart-error","cart-warning","list-empty","list-filled","search-empty","search-results","logged-in","logged-out","orders-empty","orders-loading","addresses-loading","addresses-empty","subscriptions-loading","subscriptions-empty"]),I=new Set(["title","description","description-text","vendor","type","handle","published-at","price","total-price","compare-at-price","unit-price","min-price","max-price","discount-percentage","discount-amount","variant-title","variant-id","sku","barcode","stock","quantity","featured-image","variant-image","images","tags","link","url","one-time-price","subscription-price","subscription-savings","subscription-savings-amount","checkout-charge","plan-name","plan-description","plan-group","option-value","swatch","image"]),L=new Set(`account account-bind account-link account-login account-logout add-label add-to-cart adding-text
1
+ (()=>{var j=Object.defineProperty;var R=(e,t)=>{for(var o in t)j(e,o,{get:t[o],enumerable:!0})};var P={};R(P,{apiVersionStatus:()=>E,checkMarkup:()=>O,diagnose:()=>se,didYouMean:()=>w});var B=window.Tether.__core["config.js"],{DEFAULTS:ce,cfg:l,configure:ue,isConfigured:T,log:de,reportError:pe,warn:me}=B;var z=window.Tether.__core["client.js"],{TetherError:he,endpoint:C,gql:v,request:ge,unwrap:ye,withContext:be}=z;var G=window.Tether.__core["dom.js"],{attr:f,busy:$e,cdnUrl:ke,dataKey:Se,emit:ve,formatDate:Ee,formatMoney:xe,formatPercent:Pe,get:g,has:Te,hasTemplate:_,imageUrl:Ce,notifyLayoutChanged:_e,parseJSONAttr:Ae,productUrl:qe,qsa:d,readText:Ue,repeat:Me,repeatKeyed:De,sameImage:Ne,scoped:Ve,sel:c,setImage:Ie,setSelected:Le,setText:Oe,setTextTracked:je,show:Re,toAttributes:Be,watchImages:ze}=G;var Y=window.Tether.__core["loader.js"],{clearProductCache:Ye,getProduct:A,getProducts:He,getRecommendations:Ke,hydrateProducts:We,normalizeProductKey:Fe,primeProduct:Je,refreshProducts:Ze,takeStale:Xe}=Y;var H=window.Tether.__core["selling-plans.js"],{GID:et,allPlans:q,allocationFor:tt,findPlan:ot,hasPlans:nt,planAdjustment:rt,planCheckoutCharge:at,planPrice:st,planSavings:it,plansForVariant:lt,toGid:ct}=H;var K=window.Tether.__core["status.js"],{STATUS_KEYS:dt,boundary:U,isNotFound:pt,ownedBy:mt,resolveProductKey:$,setScopeStatus:ft}=K;var D=e=>{let t=/^(\d{4})-(01|04|07|10)$/.exec(String(e||""));return t?{y:+t[1],m:+t[2]}:null},W=(e,t)=>`${e}-${String(t).padStart(2,"0")}`;function M(e,t=1){let o=D(e);if(!o)throw new Error(`not a quarterly Shopify API version: ${e}`);let a=o.y*4+(o.m-1)/3+t;return W(Math.floor(a/4),a%4*3+1)}function E(e,t=new Date){if(e==="unstable")return{version:e,ok:!1,note:'"unstable" changes without notice: pin a dated version such as 2026-07'};let o=D(e);if(!o)return{version:e,ok:!1,note:"not a quarterly version (YYYY-01, -04, -07 or -10)"};let a=new Date(Date.UTC(o.y,o.m-1,1)),n=new Date(Date.UTC(o.y+1,o.m-1,1)),p=(n-t)/(30.44*24*3600*1e3),i=`supported until about ${n.toISOString().slice(0,7)}`;return a>t?i="not released yet (release candidate at best)":p<=0?i="no longer supported: Shopify falls back to the oldest supported version. Upgrade (see README)":p<3&&(i=`${i}: plan the upgrade to ${M(e)} or later (see README)`),{version:e,ok:a<=t&&p>0,monthsLeft:Math.round(p),next:M(e),note:i}}var F=/^[A-Z]{2}$/,J=new Set(["PT_BR","PT_PT","ZH_CN","ZH_TW"]),Z=()=>`${l.prefix}:market:${l.domain}`,X=()=>({document:typeof document<"u"?document:null,location:typeof window<"u"?window.location:null,storage:(()=>{try{return window.localStorage}catch{return null}})(),global:typeof window<"u"?window:{}});function Q(e){let t=String(e||"").trim().toUpperCase();return F.test(t)&&t!=="XX"&&t!=="T1"?t:null}function ee(e){let t=String(e||"").trim().replace("-","_").toUpperCase();if(!t)return null;if(J.has(t))return t;let o=t.split("_")[0];return/^[A-Z]{2,3}$/.test(o)?o:null}function te(e,t){if(!e||!t)return null;let o=String(e.cookie||"").split(";").map(a=>a.trim()).find(a=>a.startsWith(`${t}=`));return o?decodeURIComponent(o.slice(t.length+1)):null}var x=(e,t)=>{if(!e||!t)return null;let o=String(t).toLowerCase(),a=Object.keys(e).find(n=>n.toLowerCase()===o);return a?e[a]:null},oe={saved(e,t){if(e.remember===!1||!t.storage)return null;try{return JSON.parse(t.storage.getItem(Z())||"null")}catch{return null}},server(e,t){let o=p=>t.document?.querySelector?.(`meta[name="${p}"]`)?.getAttribute("content"),a=t.global.TETHER_COUNTRY||o("tether-country")||te(t.document,e.cookie||"tether_country"),n=t.global.TETHER_LANGUAGE||o("tether-language");return{country:a,language:n}},webflow(e,t){let o=(t.location?.pathname||"/").split("/").filter(Boolean)[0],a=x(e.locales,o);if(a)return a;let n=t.document?.documentElement?.getAttribute("lang");if(!n)return null;let p=x(e.locales,n)||x(e.locales,n.split("-")[0]);if(p)return{locale:n,...p};if(e.locales&&e.strict)return null;let i=n.split("-")[1];return{language:n,country:i&&i.length===2?i:null,locale:n}}};function N(e=l.markets,t=X()){let o=e||{};if(o.detect===!1)return{};let a=o.detect?o.detect===!0?["saved","server","webflow"]:[].concat(o.detect):["saved"];e=o;let n={sources:{}};return a.forEach(p=>{let i=oe[p]?.(e,t);if(!i)return;let b={country:Q(i.country),language:ee(i.language),locale:i.locale||null};Object.entries(b).forEach(([r,s])=>{s&&!n[r]&&(n[r]=s,n.sources[r]=p)})}),n}var V=new Set(["in-stock","out-of-stock","backorder","low-stock","plenty-in-stock","on-sale","not-on-sale","has-variants","single-variant","subscription-available","subscription-unavailable","subscription-only","one-time-available","subscription-selected","one-time-selected","has-savings","loading","ready","error","not-found","cart-empty","cart-filled","cart-has-subscription","cart-no-subscription","cart-has-discount","cart-error","cart-warning","list-empty","list-filled","search-empty","search-results","logged-in","logged-out","orders-empty","orders-loading","addresses-loading","addresses-empty","addresses-error","subscriptions-loading","subscriptions-empty","subscriptions-error"]),I=new Set(["title","description","description-text","vendor","type","handle","published-at","price","total-price","compare-at-price","unit-price","min-price","max-price","discount-percentage","discount-amount","variant-title","variant-id","sku","barcode","stock","quantity","featured-image","variant-image","images","tags","link","url","one-time-price","subscription-price","subscription-savings","subscription-savings-amount","checkout-charge","plan-name","plan-description","plan-group","option-value","swatch","image"]),L=new Set(`account account-bind account-link account-login account-logout add-label add-to-cart adding-text
2
2
  always-enabled bind cart-checkout-charge cart-clear cart-close cart-count cart-discounts cart-drawer cart-label cart-lines
3
3
  cart-note cart-open cart-subtotal cart-total cart-warning checkout code collection collection-bind countries country
4
4
  country-bind country-label country-select default-plan default-purchase discount discount-code discount-form discount-input
package/dist/tether.js CHANGED
@@ -1077,29 +1077,34 @@
1077
1077
  },
1078
1078
  /** Cart-level attributes, merged with existing ones. Value '' removes a key. */
1079
1079
  setAttributes(obj) {
1080
- const merged = new Map((this.state?.attributes || []).map((a) => [a.key, a.value]));
1081
- toAttributes(obj).forEach((a) => merged.set(a.key, a.value));
1082
- const attributes = [...merged].filter(([, v]) => v !== "").map(([key, value]) => ({ key, value }));
1083
- return this._queue(async () => this._commit(
1084
- await this._mutate("cartAttributesUpdate", "$attributes: [AttributeInput!]!", "attributes: $attributes", { attributes }, { attributes }),
1085
- "attributes"
1086
- ));
1080
+ const add = toAttributes(obj);
1081
+ return this._queue(async () => {
1082
+ const merged = new Map((this.state?.attributes || []).map((a) => [a.key, a.value]));
1083
+ add.forEach((a) => merged.set(a.key, a.value));
1084
+ const attributes = [...merged].filter(([, v]) => v !== "").map(([key, value]) => ({ key, value }));
1085
+ return this._commit(
1086
+ await this._mutate("cartAttributesUpdate", "$attributes: [AttributeInput!]!", "attributes: $attributes", { attributes }, { attributes }),
1087
+ "attributes"
1088
+ );
1089
+ });
1087
1090
  },
1088
1091
  /** Replaces the discount codes. Pass [] to remove all. */
1089
1092
  setDiscountCodes(codes) {
1090
- const discountCodes = (Array.isArray(codes) ? codes : [codes]).map((c) => String(c).trim()).filter(Boolean);
1091
- return this._queue(async () => this._commit(
1092
- await this._mutate("cartDiscountCodesUpdate", "$discountCodes: [String!]!", "discountCodes: $discountCodes", { discountCodes }, { discountCodes }),
1093
- "discount"
1094
- ));
1093
+ return this._queue(async () => {
1094
+ const list = typeof codes === "function" ? codes((this.state?.discountCodes || []).map((d) => d.code)) : codes;
1095
+ const discountCodes = (Array.isArray(list) ? list : [list]).map((c) => String(c).trim()).filter(Boolean);
1096
+ return this._commit(
1097
+ await this._mutate("cartDiscountCodesUpdate", "$discountCodes: [String!]!", "discountCodes: $discountCodes", { discountCodes }, { discountCodes }),
1098
+ "discount"
1099
+ );
1100
+ });
1095
1101
  },
1096
1102
  /**
1097
1103
  * Adds a code. A code Shopify doesn't accept isn't kept in the cart (it would warn on every change):
1098
1104
  * it's removed again and the promise rejects with code INVALID_DISCOUNT.
1099
1105
  */
1100
1106
  async applyDiscount(code) {
1101
- const current = (this.state?.discountCodes || []).map((d) => d.code);
1102
- const cart = await this.setDiscountCodes([.../* @__PURE__ */ new Set([...current, code])]);
1107
+ const cart = await this.setDiscountCodes((current) => [.../* @__PURE__ */ new Set([...current, code])]);
1103
1108
  const hit = (cart?.discountCodes || []).find((d) => d.code.toLowerCase() === String(code).toLowerCase());
1104
1109
  if (hit?.applicable) return cart;
1105
1110
  await this.removeDiscount(code).catch(() => {
@@ -1108,7 +1113,7 @@
1108
1113
  },
1109
1114
  removeDiscount(code) {
1110
1115
  const k = String(code).toLowerCase();
1111
- return this.setDiscountCodes((this.state?.discountCodes || []).map((d) => d.code).filter((c) => c.toLowerCase() !== k));
1116
+ return this.setDiscountCodes((current) => current.filter((c) => c.toLowerCase() !== k));
1112
1117
  },
1113
1118
  /** { countryCode, email, phone } — changes currency/prices for that market. */
1114
1119
  setBuyerIdentity(buyerIdentity, { create = true } = {}) {
@@ -1137,8 +1142,10 @@
1137
1142
  }
1138
1143
  }
1139
1144
  try {
1140
- const data = await gql("query TetherCheckout($id: ID!) { cart(id: $id) { checkoutUrl } }", { id });
1141
- let url = this.beforeCheckout && await this.beforeCheckout().catch(() => null) || data.cart?.checkoutUrl;
1145
+ const fresh = gql("query TetherCheckout($id: ID!) { cart(id: $id) { checkoutUrl } }", { id }).then((d) => d.cart?.checkoutUrl);
1146
+ fresh.catch(() => {
1147
+ });
1148
+ let url = this.beforeCheckout && await this.beforeCheckout().catch(() => null) || await fresh;
1142
1149
  if (url && this.customerAccessToken) url += `${url.includes("?") ? "&" : "?"}logged_in=true`;
1143
1150
  if (!url) throw new TetherError("No checkoutUrl (cart empty or expired)");
1144
1151
  emit("checkout", { url, cart: this.state });
@@ -2256,11 +2263,13 @@
2256
2263
  coreModules["lazy.js"] = { loadPart, coreModules };
2257
2264
 
2258
2265
  // src/index.js
2259
- var VERSION = "0.6.5";
2266
+ var VERSION = "0.6.7";
2260
2267
  var initPromise = null;
2261
2268
  var observer = null;
2269
+ var mountedBody = null;
2262
2270
  function mount(root = document) {
2263
2271
  if (!isConfigured()) return 0;
2272
+ if (root === document) mountedBody = document.body;
2264
2273
  let count = 0;
2265
2274
  pruneLive();
2266
2275
  hydrateFromPage(root);
@@ -2431,9 +2440,12 @@
2431
2440
  onPageMarket = Boolean(pageMarket());
2432
2441
  const differs = target?.country && (String(target.country).toUpperCase() !== String(cfg.country || "").toUpperCase() || String(target.language || "").toUpperCase() !== String(cfg.language || "").toUpperCase());
2433
2442
  if (differs) setCountry(target.country, { language: target.language ?? null, locale: target.locale, remember: false }).then(() => mount(document), () => mount(document));
2434
- else mount(document);
2443
+ else if (mountedBody !== document.body) mount(document);
2435
2444
  }));
2436
- document.addEventListener("astro:before-swap", () => unmount());
2445
+ document.addEventListener("astro:before-swap", () => {
2446
+ mountedBody = null;
2447
+ unmount();
2448
+ });
2437
2449
  }
2438
2450
  window.addEventListener("online", () => {
2439
2451
  retryFailed();