Files
kaiser-natron/dist/assets/api-CJ2exAVU.js
2026-05-26 13:34:48 -05:00

1 line
5.2 KiB
JavaScript

import{n as e}from"./pinia-D94NEbtV.js";import{r as t}from"./products-BqW5PUnm.js";import"./kaiserhacks-B4r9oXf7.js";var n=`kn-cart-v1`;function r(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(n);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>e&&typeof e.productId==`string`&&Number.isInteger(e.quantity)&&e.quantity>0):[]}catch{return[]}}function i(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(n,JSON.stringify(e))}catch{}}function a(e){let n=t.find(t=>t.id===e.productId);return n?{productId:e.productId,quantity:e.quantity,unitPrice:n.price,lineTotal:+(n.price*e.quantity).toFixed(2),product:{id:n.id,title:n.title,brand:n.brand,size:n.size,image:n.image,href:n.href}}:null}var o=e(`cart`,{state:()=>({lines:r()}),getters:{items:e=>e.lines.map(a).filter(Boolean),count:e=>e.lines.reduce((e,t)=>e+t.quantity,0),subtotal(){return+this.items.reduce((e,t)=>e+t.lineTotal,0).toFixed(2)},isEmpty:e=>e.lines.length===0},actions:{add(e,t=1){let n=this.lines.find(t=>t.productId===e);n?n.quantity+=t:this.lines.push({productId:e,quantity:t}),i(this.lines)},update(e,t){if(Number.isInteger(t)){if(t<=0)this.lines=this.lines.filter(t=>t.productId!==e);else{let n=this.lines.find(t=>t.productId===e);n&&(n.quantity=t)}i(this.lines)}},remove(e){this.lines=this.lines.filter(t=>t.productId!==e),i(this.lines)},clear(){this.lines=[],i(this.lines)}}});function s(e){return{items:e.items,count:e.count,subtotal:e.subtotal,updatedAt:new Date().toISOString()}}async function c(){return s(o())}async function l(e,t=1){if(typeof e!=`string`||!e)throw Error(`cart.productIdRequired`);let n=Number.isInteger(t)?t:1;if(n<1)throw Error(`cart.quantityInvalid`);let r=o();return r.add(e,n),s(r)}async function u(e,t){let n=o();return n.update(e,Number.isInteger(t)?t:0),s(n)}async function d(e){let t=o();return t.remove(e),s(t)}async function f(){let e=o();return e.clear(),s(e)}var p=`pk_test_stub_replace_with_real`,m=4.9,h=.19;function g(e){return Math.round(e*100)/100}async function _(e){let t=o();if(!t.items.length){let e=Error(`Cart is empty.`);throw e.code=`checkout.cartEmpty`,e}b(e.shippingAddress,`shipping`),e.billingAddress&&b(e.billingAddress,`billing`);let n=g(t.subtotal),r=g(m),i=g((n+r)*h),a=g(n+r+i),s=`ord_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`;return{orderId:s,clientSecret:`pi_stub_${s}_secret_stub`,publishableKey:p,amount:a,currency:`eur`,breakdown:{subtotal:n,shipping:r,tax:i,total:a}}}async function v({wallet:e}){let t=o();if(!t.items.length){let e=Error(`Cart is empty.`);throw e.code=`checkout.cartEmpty`,e}if(e!==`apple`&&e!==`google`){let e=Error(`Unsupported wallet.`);throw e.code=`checkout.invalidRequest`,e}let n=g(t.subtotal),r=g(m),i=g((n+r)*h),a=g(n+r+i),s=`ord_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`;return{orderId:s,clientSecret:`pi_stub_express_${s}_secret_stub`,publishableKey:p,amount:a,currency:`eur`,wallet:e,breakdown:{subtotal:n,shipping:r,tax:i,total:a}}}async function y({orderId:e}){if(!e){let e=Error(`Missing orderId.`);throw e.code=`checkout.invalidRequest`,e}return{id:e,status:`paid`,items:[],subtotal:0,shipping:0,tax:0,total:0,currency:`eur`,customer:{email:``},shippingAddress:null,billingAddress:null,createdAt:new Date().toISOString(),paidAt:new Date().toISOString()}}function b(e,t){if(!e)throw x(t,`missing`);for(let n of[`name`,`street`,`postalCode`,`city`,`country`])if(!e[n]||!String(e[n]).trim())throw x(t,`${n} is required`);if(!/^[A-Z]{2}$/.test(e.country))throw x(t,`country must be ISO-3166 alpha-2`)}function x(e,t){let n=Error(`${e} address invalid: ${t}`);return n.code=`checkout.addressInvalid`,n}var S=`kn-auth-stub-v1`;function C(){if(typeof localStorage>`u`)return null;try{let e=localStorage.getItem(S);if(!e)return null;let t=JSON.parse(e);return t?.user?.email?t:null}catch{return null}}function w(e){if(!(typeof localStorage>`u`))try{e?localStorage.setItem(S,JSON.stringify(e)):localStorage.removeItem(S)}catch{}}var T=C();function E(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(e||``).trim())}function D(e){return typeof e==`string`&&e.length>=8}function O(e,t){let n=Error(t);return n.code=e,n}async function k(){return T}async function A({email:e,password:t}){if(!E(e))throw O(`auth.invalidEmail`,`Please enter a valid email.`);if(!D(t))throw O(`auth.invalidPassword`,`Password must be at least 8 characters.`);let n={user:{id:`usr_${btoa(String(e).toLowerCase()).replace(/=+$/,``).slice(0,12)}`,email:String(e).toLowerCase().trim(),firstName:``,lastName:``,acceptsMarketing:!1},csrfToken:`csrf_stub_${Date.now().toString(36)}`};return T=n,w(n),n}async function j(e){if(!E(e?.email))throw O(`auth.invalidEmail`,`Please enter a valid email.`);if(!D(e?.password))throw O(`auth.invalidPassword`,`Password must be at least 8 characters.`);let t={user:{id:`usr_${Date.now().toString(36)}`,email:String(e.email).toLowerCase().trim(),firstName:String(e.firstName||``).trim(),lastName:String(e.lastName||``).trim(),acceptsMarketing:!!e.acceptsMarketing},csrfToken:`csrf_stub_${Date.now().toString(36)}`};return T=t,w(t),t}async function M({email:e}){if(!E(e))throw O(`auth.invalidEmail`,`Please enter a valid email.`);return{ok:!0}}export{y as a,l as c,d,u as f,A as i,f as l,j as n,_ as o,o as p,M as r,v as s,k as t,c as u};