Files
2026-02-10 01:14:19 +00:00

1 line
7.2 KiB
JavaScript

"use strict";(()=>{var e={};e.id=9220,e.ids=[9220],e.modules={72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},27790:e=>{e.exports=require("assert")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},86624:e=>{e.exports=require("querystring")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},16517:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>I,patchFetch:()=>f,requestAsyncStorage:()=>y,routeModule:()=>h,serverHooks:()=>_,staticGenerationAsyncStorage:()=>w});var i={};r.r(i),r.d(i,{POST:()=>m});var s=r(49303),a=r(88716),n=r(60670),o=r(87070),u=r(83493),d=r(73141),c=r(71615),p=r(75571),l=r(90455);async function m(e){try{let t=await e.json(),r=t.slug,i=t.shipping,s=t.shippingAddress;if(!r)return o.NextResponse.json({error:"slug is required."},{status:400});let a="https://www.ShiftedOffRoad.ca";if(!a)return o.NextResponse.json({error:"Missing NEXT_PUBLIC_BASE_URL."},{status:500});let n=await u._.store.findUnique({where:{slug:r}});if(!n)return o.NextResponse.json({error:"Store not found."},{status:404});let m=await (0,p.getServerSession)(l.L),h=(0,c.cookies)(),y=h.get("sf_session")?.value,w=!y;if(!y&&!m?.user?.email)return o.NextResponse.json({error:"Missing cart session."},{status:400});if(!n.stripeAccountId)return o.NextResponse.json({error:"Store is not connected to Stripe yet."},{status:400});let _=y?await u._.cart.findUnique({where:{storeId_sessionId:{storeId:n.id,sessionId:y}},include:{items:!0}}):null,I=null;if(m?.user?.email){let e=await u._.user.findUnique({where:{email:m.user.email}});if(!e)return o.NextResponse.json({error:"User not found."},{status:404});let t=await u._.cart.findUnique({where:{storeId_userId:{storeId:n.id,userId:e.id}},include:{items:!0}});if(t){if(_&&_.id!==t.id){for(let e of _.items){let r=await u._.cartItem.findFirst({where:{cartId:t.id,priceId:e.priceId}});r?await u._.cartItem.update({where:{id:r.id},data:{quantity:r.quantity+e.quantity}}):await u._.cartItem.create({data:{cartId:t.id,productId:e.productId,priceId:e.priceId,name:e.name,unitAmount:e.unitAmount,currency:e.currency,quantity:e.quantity}})}await u._.cart.delete({where:{id:_.id}}),I=await u._.cart.update({where:{id:t.id},data:{sessionId:y||""},include:{items:!0}})}else I=t.sessionId!==y?await u._.cart.update({where:{id:t.id},data:{sessionId:y||""},include:{items:!0}}):t}else I=_?await u._.cart.update({where:{id:_.id},data:{userId:e.id},include:{items:!0}}):await u._.cart.create({data:{storeId:n.id,userId:e.id,sessionId:y||""},include:{items:!0}})}else y&&(I=_??await u._.cart.create({data:{storeId:n.id,sessionId:y},include:{items:!0}}));if(!I||0===I.items.length)return o.NextResponse.json({error:"Cart is empty."},{status:400});let f=I.items.reduce((e,t)=>e+t.unitAmount*t.quantity,0),x=i?.amount&&i.amount>0?Math.round(100*i.amount):0,q=f+x,g=Math.max(0,q),v=I.items.map(e=>({price_data:{currency:e.currency,product_data:{name:e.name},unit_amount:e.unitAmount},quantity:e.quantity}));x>0&&v.push({price_data:{currency:(i?.currency||I.items[0]?.currency||"usd").toLowerCase(),product_data:{name:"Shipping",description:i?.servicelevel?`${i.provider||"Carrier"} - ${i.servicelevel}`:"Shipping"},unit_amount:x},quantity:1});let S=await d.G.checkout.sessions.create({line_items:v,payment_intent_data:{application_fee_amount:Math.max(50,Math.floor(.1*g))},mode:"payment",success_url:`${a}/success?session_id={CHECKOUT_SESSION_ID}`,cancel_url:`${a}/cancel`,metadata:{storeSlug:r}},{stripeAccount:n.stripeAccountId}),A=I.items.map(e=>({name:e.name,productId:e.productId,priceId:e.priceId,unitAmount:e.unitAmount,currency:e.currency,quantity:e.quantity})),R=m?.user?.email?(await u._.user.findUnique({where:{email:m.user.email}}))?.id:void 0;R&&s&&await u._.userAddress.upsert({where:{userId:R},update:{name:s.name||"",street1:s.street1||"",city:s.city||"",state:s.state||"",zip:s.zip||"",country:s.country||"",phone:s.phone||""},create:{userId:R,name:s.name||"",street1:s.street1||"",city:s.city||"",state:s.state||"",zip:s.zip||"",country:s.country||"",phone:s.phone||""}}),await u._.order.create({data:{storeId:n.id,userId:R||null,sessionId:y||null,stripeCheckoutSessionId:S.id,shippingRateId:i?.rateId||null,shippingRateSnapshot:i||null,shippingAddress:s||null,items:A,status:"pending"}});try{let e=process.env.KLAVIYO_PRIVATE_API_KEY,t=m?.user?.email;e&&t&&await fetch("https://a.klaviyo.com/api/events/",{method:"POST",headers:{Authorization:`Klaviyo-API-Key ${e}`,"Content-Type":"application/json",Accept:"application/json",Revision:"2024-02-15"},body:JSON.stringify({data:{type:"event",attributes:{profile:{data:{type:"profile",attributes:{email:t}}},metric:{data:{type:"metric",attributes:{name:"Checkout Started"}}},properties:{cart_total:g/100,items:I.items.map(e=>({name:e.name,quantity:e.quantity,unit_amount:e.unitAmount/100}))}}}})})}catch{}let j=o.NextResponse.json({url:S.url});return w&&y&&j.cookies.set("sf_session",y,{httpOnly:!0,sameSite:"lax",path:"/"}),j}catch(e){return o.NextResponse.json({error:e?.message||"Failed to create checkout session."},{status:500})}}let h=new s.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/cart/checkout/route",pathname:"/api/cart/checkout",filename:"route",bundlePath:"app/api/cart/checkout/route"},resolvedPagePath:"/root/ShiftedOffRoad/app/api/cart/checkout/route.ts",nextConfigOutput:"",userland:i}),{requestAsyncStorage:y,staticGenerationAsyncStorage:w,serverHooks:_}=h,I="/api/cart/checkout/route";function f(){return(0,n.patchFetch)({serverHooks:_,staticGenerationAsyncStorage:w})}},90455:(e,t,r)=>{r.d(t,{L:()=>u});var i=r(13539),s=r(53797),a=r(42023),n=r.n(a),o=r(83493);let u={adapter:(0,i.N)(o._),session:{strategy:"jwt"},pages:{signIn:"/login"},callbacks:{jwt:async({token:e,user:t})=>(t&&(e.id=t.id),e.id||(e.id=e.sub??""),e),session:async({session:e,token:t})=>(e.user&&(e.user.id=t.id||""),e)},providers:[(0,s.Z)({name:"Credentials",credentials:{email:{label:"Email",type:"email"},password:{label:"Password",type:"password"}},async authorize(e){let t=e?.email?.toLowerCase().trim(),r=e?.password;if(!t||!r)return null;let i=await o._.user.findUnique({where:{email:t}});return i&&i.passwordHash&&await n().compare(r,i.passwordHash)?{id:i.id,name:i.name,email:i.email}:null}})]}},83493:(e,t,r)=>{r.d(t,{_:()=>s});let i=require("@prisma/client"),s=globalThis.prisma??new i.PrismaClient({log:["warn","error"]})},73141:(e,t,r)=>{r.d(t,{G:()=>a});var i=r(89777);let s=process.env.STRIPE_SECRET_KEY,a=s?new i.Z(s,{}):new Proxy({},{get(){throw Error("Missing STRIPE_SECRET_KEY. Add it to your environment before starting the server.")}})}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),i=t.X(0,[9276,5972,9777,2023,9637],()=>r(16517));module.exports=i})();