@lockerverse/sdk 0.2.59 → 0.2.61

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.
package/dist/checkout.js CHANGED
@@ -1,2 +1,2 @@
1
- import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,_ as u,b as d,c as f,d as p,g as m,h,i as g,j as _,k as v,l as y,m as b,n as ee,o as x,p as S,r as C,s as w,t as T,u as E,v as D,w as O,x as k,y as A}from"./transport.js";import{n as j,t as te}from"./types.js";function ne(e){let t=p(e.apiBaseUrl!==void 0&&e.environment===void 0?{...e,environment:`production`}:e,`widgetSlug`);return{...t,widgetSlug:t.resourceSlug,widgetSlugValue:t.resourceSlugValue}}const re=l(O(e({email:O(_()),includeServiceFee:O(b()),promoCode:O(_()),tipCents:O(E(0))}),{})),M=l(e({confirmationToken:O(f),customFieldAnswers:O(S(x)),email:_(),memberId:O(_()),merchSize:O(r([`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`])),metadata:O(o(_(),_())),phone:O(_()),shipping:O(e({address:e({city:_(),country:_(),line1:_(),line2:O(_()),postal_code:_(),state:_()}),name:_()}))})),N=a([e({amountCents:E(1),productId:f}),e({productId:f,quantity:E(1)}),e({productId:f})]),P=a([e({amountCents:E(1),productSlug:f}),e({productSlug:f,quantity:E(1)}),e({productSlug:f})]),F=l(n(S(N),A(1))),ie=l(n(S(P),A(1))),I=r([`one-time`,`monthly`,`annually`]),L=k(E(0)),ae=n(_(),v(/^pk_(?:test|live)_\S+$/,`Invalid publishable key.`)),R={description:y,id:f,inventoryQuantity:L,maxQuantity:L,minimumAmountCents:L,minQuantity:L,name:f,paymentOption:I},z=n(s(`pricingMode`,[t({...R,amountCents:E(0),pricingMode:u(`fixed`)}),t({...R,amountCents:L,pricingMode:u(`custom`)})]),h(({maxQuantity:e,minQuantity:t})=>e===null||t===null||t<=e)),B=t({acceptsDiscounts:O(b(),!1),id:f,product:z,productId:f,slug:f}),V=O(t({memberId:O(b(),!1),merchSize:O(b(),!1),phone:O(b(),!1),promoCode:O(b(),!1),serviceFee:O(b(),!1),shipping:O(b(),!1),tipping:O(b(),!1)}),{}),H=n(t({community:O(t({color:_(),name:f,thumbnail:_()})),config:O(t({customFields:w,fields:V})),description:y,id:O(_(),``),name:O(_(),`Lockerverse widget`),payment:t({currency:u(`usd`),publishableKey:ae}),pricingPolicy:O(t({currency:O(u(`usd`),`usd`),serviceFeeRateBasisPoints:O(E(0),0)})),products:O(S(B),[]),showCommunityBranding:O(b(),!0),title:y}),i(e=>({...e,config:{customFields:e.config?.customFields??[],fields:{memberId:e.config?.fields?.memberId??!1,merchSize:e.config?.fields?.merchSize??!1,phone:e.config?.fields?.phone??!1,promoCode:e.config?.fields?.promoCode??!1,serviceFee:e.config?.fields?.serviceFee??!1,shipping:e.config?.fields?.shipping??!1,tipping:e.config?.fields?.tipping??!1}},pricingPolicy:e.pricingPolicy??{currency:`usd`,serviceFeeRateBasisPoints:0}}))),U=k(t({percentageOff:n(c(),m(),d(0),D(100)),source:r([`email_list`,`promo_code`])})),W=t({acceptsDiscounts:b(),listingId:f,listingSlug:f,paymentOption:I,pricingMode:r([`fixed`,`custom`]),productId:f,productName:f,quantity:E(1),subtotalCents:E(0),unitAmountCents:E(0)}),G=n(t({amountCents:E(0),appliedDiscount:U,connectedAccountId:k(f),discountableSubtotalCents:E(0),discountCents:E(0),lineItems:S(W),paymentOption:I,serviceFeeCents:E(0),subtotalCents:E(0),tipCents:E(0),totalCents:E(0)}),h(({lineItems:e,paymentOption:t})=>e.length===0||e.some(e=>e.paymentOption!==t)?!1:t===`one-time`||e.length===1&&e[0]?.pricingMode===`fixed`&&e[0].quantity===1,`Invalid checkout cadence composition.`)),K=n(g,h(e=>e.checkoutId.trim()&&e.paymentReference.trim()?e.checkoutStatus===`action_required`?e.requiresAction&&e.paymentRequired&&!!e.clientSecret?.trim():!e.requiresAction&&e.clientSecret===null:!1,`Invalid payment result state.`)),q=t({catalog:H,quote:G}),J=l(G),oe=l(q),Y=l(K),se=l(H);function ce(e){let{product:t}=e;return{acceptsDiscounts:e.acceptsDiscounts??!1,amountCents:t.amountCents,description:t.description??null,id:t.id,inventoryQuantity:t.inventoryQuantity,listingId:e.id,maximumQuantity:t.maxQuantity,minimumAmountCents:t.minimumAmountCents,minimumQuantity:t.minQuantity,name:t.name,paymentOption:t.paymentOption,pricingMode:t.pricingMode,slug:e.slug}}function X(e){let t=e.config?.fields??{};return{community:e.community?{accentColor:e.community.color,imageUrl:e.community.thumbnail,name:e.community.name}:null,payment:{currency:e.payment.currency,publishableKey:e.payment.publishableKey},pricingPolicy:{currency:`usd`,serviceFeeRateBasisPoints:e.pricingPolicy?.serviceFeeRateBasisPoints??0},products:(e.products??[]).map(ce),widget:{customFields:e.config?.customFields??[],description:e.description??null,fields:{memberId:t.memberId??!1,merchSize:t.merchSize??!1,phone:t.phone??!1,promoCode:t.promoCode??!1,serviceFee:t.serviceFee??!1,shipping:t.shipping??!1,tipping:t.tipping??!1},id:e.id??``,name:e.name??`Lockerverse widget`,showCommunityBranding:e.showCommunityBranding??!0,title:e.title??null}}}function Z(e){return $(e)}function le(e){return $(e)}function Q(e){return $(e)}function $(e){return C(structuredClone(e))}function ue(e){let{apiBaseUrl:t,communitySlug:n,communitySlugValue:r,environment:i,fetchImplementation:a,onError:o,requestTimeoutMs:s,sentryDsn:c,widgetSlug:l,widgetSlugValue:u}=ne(e),d,f=ee({communitySlug:r,environment:i,getContext:()=>({widgetSlug:u}),onError:o,resourceContextName:`lockerverse_widget`,sentryDsn:c}),{requestJson:p}=T(a,f,s),m=`${t}/v2/community/${n}/payment-widgets/${l}/checkout`;function h(e,t,n=`invalid_selection`){throw f(new j({code:n,message:e,operation:t,reportable:!1}))}function g(e,t){return e instanceof j?e:new j({...t,reportable:!0})}function _(e,t,n=!1){let r=g(e,t),i=n&&(r.status===void 0||r.status>=500);throw f(i?new j({code:r.code,message:r.message,operation:r.operation,recoveryRecommended:!0,reportable:r.reportable,...r.status===void 0?{}:{status:r.status}}):r)}function v(e,t){let n;try{n=re(e)}catch{h(`Checkout pricing input is invalid.`,t)}let r=n.email?.trim().toLowerCase(),i=n.promoCode?.trim();return{...r?{email:r}:{},...n.includeServiceFee===void 0?{}:{includeServiceFee:n.includeServiceFee},...i?{promoCode:i}:{},...n.tipCents===void 0?{}:{tipCents:n.tipCents}}}function y(e){(!(e&&typeof e==`object`)||Array.isArray(e))&&h(`Checkout selection is invalid.`,`bootstrap_checkout`);let{items:t,...n}=e;try{return{pricing:v(n,`bootstrap_checkout`),selection:ie(t)}}catch(e){if(e instanceof j)throw e;h(`Checkout selection is invalid.`,`bootstrap_checkout`)}}function b(e,t){return(e.pricingMode!==`custom`||e.minimumAmountCents!==null&&t<e.minimumAmountCents)&&h(`Selected Product amount is invalid.`,`bootstrap_checkout`),{amountCents:t,productId:e.id}}function x(e,t){return e.paymentOption===`one-time`?((e.pricingMode!==`fixed`||!(`quantity`in t)||e.minimumQuantity!==null&&t.quantity<e.minimumQuantity||e.maximumQuantity!==null&&t.quantity>e.maximumQuantity||e.inventoryQuantity!==null&&t.quantity>e.inventoryQuantity)&&h(`Selected Product quantity is invalid.`,`bootstrap_checkout`),{productId:e.id,quantity:t.quantity}):((e.pricingMode!==`fixed`||`quantity`in t)&&h(`Selected recurring Product is invalid.`,`bootstrap_checkout`),{productId:e.id})}function S(e,t){return t.map(t=>{let n=e.products.find(e=>e.slug===t.productSlug);return n||h(`Selected Product is unavailable.`,`bootstrap_checkout`),`amountCents`in t?b(n,t.amountCents):x(n,t)})}function w(e,t,n,r){if(!d)throw new j({...r,message:`Load the Lockerverse widget before calculating a checkout.`,reportable:!1});let{connectedAccountId:i,...a}=e;return le(C({...a,authoritative:!0,items:t,payment:{connectedAccountId:i,currency:`usd`,publishableKey:d},paymentOption:e.paymentOption,paymentReference:globalThis.crypto.randomUUID(),pricing:n}))}function E(e){(!(e&&typeof e==`object`)||Array.isArray(e))&&h(`Checkout selection is invalid.`,`calculate_total`);let{items:t,...n}=e;try{return{items:F(t),pricing:v(n,`calculate_total`)}}catch(e){if(e instanceof j)throw e;h(`Checkout selection is invalid.`,`calculate_total`)}}function D(e){try{if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`Invalid quote.`);let t=e;if(t.authoritative!==!0||typeof t.paymentReference!=`string`||t.paymentReference.length===0||t.payment.currency!==`usd`||t.payment.publishableKey!==d)throw TypeError(`Invalid quote.`);let n=J({...t,connectedAccountId:t.payment.connectedAccountId}),{connectedAccountId:r,...i}=n;return C({...i,authoritative:!0,payment:{connectedAccountId:r,currency:`usd`,publishableKey:d},paymentOption:n.paymentOption,paymentReference:t.paymentReference})}catch{h(`Lockerverse payment submission is invalid.`,`submit_payment`,`payment_submit_failed`)}}function O(e){try{if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`Invalid payment input.`);let{checkout:t,submission:n}=e;if(!(t&&typeof t==`object`)||Array.isArray(t))throw TypeError(`Invalid prepared checkout.`);let r=t,i=F(r.items),a=v(r.pricing,`submit_payment`),o=D(r),s=M(n);o.totalCents>0&&!s.confirmationToken&&h(`Stripe confirmation is required for a paid checkout.`,`submit_payment`,`payment_submit_failed`);let c=s.email.trim().toLowerCase();return(!c||c!==a.email)&&h(`Payment email must match the current checkout quote.`,`submit_payment`),{items:i,pricing:a,quote:o,submission:{...s,email:c}}}catch(e){if(e instanceof j)throw e;h(`Lockerverse payment submission is invalid.`,`submit_payment`,`payment_submit_failed`)}}return{async bootstrapCheckout(e){let{pricing:t,selection:n}=y(e),r={code:`checkout_bootstrap_failed`,message:`Lockerverse returned an invalid checkout bootstrap.`,operation:`bootstrap_checkout`};try{let e=await p(`${m}/bootstrap`,{body:JSON.stringify({...t,items:n}),headers:{"Content-Type":`application/json`},method:`POST`},oe,{...r,message:`Unable to bootstrap the Lockerverse checkout because the request failed.`,report:!1},{...r,report:!1});if(!e.ok)throw new j({...r,message:`Unable to bootstrap the Lockerverse checkout (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});let i=C(X(e.value.catalog));d=i.payment.publishableKey;let a=S(i,n),o={...t,includeServiceFee:t.includeServiceFee??i.widget.fields.serviceFee};return C({catalog:Z(i),checkout:w(e.value.quote,a,o,r)})}catch(e){_(e,r)}},async calculateTotal(e){let{items:t,pricing:n}=E(e),r={code:`total_calculation_failed`,message:`Lockerverse returned an invalid checkout total.`,operation:`calculate_total`};try{let e=await p(`${m}/quote`,{body:JSON.stringify({...n,items:t}),headers:{"Content-Type":`application/json`},method:`POST`},J,{...r,message:`Unable to calculate the Lockerverse checkout total because the request failed.`,report:!1},{...r,report:!1});if(!e.ok)throw new j({...r,message:`Unable to calculate the Lockerverse checkout total (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});return w(e.value,t,n,r)}catch(e){_(e,r)}},async getPaymentStatus(e){(typeof e!=`string`||!e.trim())&&h(`Provide a payment reference to recover its status.`,`get_payment_status`);let t=e.trim(),n={code:`payment_status_failed`,message:`Lockerverse returned an invalid payment status.`,operation:`get_payment_status`};try{let e=await p(`${m}/${encodeURIComponent(t)}/status`,void 0,Y,{...n,message:`Unable to recover the Lockerverse payment status because the request failed.`,report:!1},{...n,report:!1});if(!e.ok)throw new j({...n,message:`Unable to recover the Lockerverse payment status (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});if(e.value.paymentReference!==t)throw new j({...n,reportable:!0});return Q(e.value)}catch(e){_(e,n)}},async load(){let e={code:`widget_load_failed`,message:`Lockerverse returned an invalid widget catalog.`,operation:`load_widget`};try{let r=await p(`${t}/v2/community/${n}/payment-widgets/${l}`,void 0,se,{...e,message:`Unable to load Lockerverse widget because the request failed.`,report:!1},{...e,report:!1});if(!r.ok)throw new j({...e,message:`Unable to load Lockerverse widget (${r.response.status}).`,reportable:r.response.status>=500,status:r.response.status});let i=C(X(r.value));return d=i.payment.publishableKey,Z(i)}catch(t){_(t,e)}},async submitPayment(e){let{items:t,pricing:n,quote:r,submission:i}=O(e),a={code:`payment_submit_failed`,message:`Lockerverse returned an invalid payment confirmation.`,operation:`submit_payment`};try{let e=await p(`${m}/confirm`,{body:JSON.stringify({...i.confirmationToken?{confirmationToken:i.confirmationToken}:{},customFieldAnswers:i.customFieldAnswers,email:i.email,expectedAmountCents:r.amountCents,expectedAppliedDiscount:r.appliedDiscount,expectedConnectedAccountId:r.payment.connectedAccountId,expectedDiscountableSubtotalCents:r.discountableSubtotalCents,expectedDiscountCents:r.discountCents,expectedServiceFeeCents:r.serviceFeeCents,expectedSubtotalCents:r.subtotalCents,expectedTipCents:r.tipCents,expectedTotalCents:r.totalCents,...n,items:t,memberId:i.memberId,merchSize:i.merchSize,metadata:i.metadata,paymentReference:r.paymentReference,phone:i.phone,quoteContractVersion:1,shipping:i.shipping}),headers:{"Content-Type":`application/json`},method:`POST`},Y,{...a,message:`Unable to submit the Lockerverse payment because the request failed.`,report:!1},{...a,report:!1});if(!e.ok)throw new j({...a,message:`Unable to submit the Lockerverse payment (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});if(e.value.paymentReference!==r.paymentReference)throw new j({...a,reportable:!0});return Q(e.value)}catch(e){_(e,a,!0)}}}}export{te as LOCKERVERSE_SDK_VERSION,j as LockerverseSdkError,ue as createLockerverseCheckoutClient};
1
+ import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,_ as u,b as d,c as f,d as p,g as m,h,i as g,j as _,k as v,l as y,m as b,n as ee,o as x,p as S,r as C,s as w,t as T,u as E,v as D,w as O,x as k,y as A}from"./transport.js";import{n as j,t as te}from"./types.js";function ne(e){let t=p(e.apiBaseUrl!==void 0&&e.environment===void 0?{...e,environment:`production`}:e,`widgetSlug`);return{...t,widgetSlug:t.resourceSlug,widgetSlugValue:t.resourceSlugValue}}const re=l(O(e({email:O(_()),includeServiceFee:O(b()),promoCode:O(_()),tipCents:O(E(0))}),{})),M=l(e({confirmationToken:O(f),customFieldAnswers:O(S(x)),email:_(),memberId:O(_()),merchSize:O(r([`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`])),metadata:O(o(_(),_())),phone:O(_()),shipping:O(e({address:e({city:_(),country:_(),line1:_(),line2:O(_()),postal_code:_(),state:_()}),name:_()}))})),N=a([e({amountCents:E(1),productId:f}),e({productId:f,quantity:E(1)}),e({productId:f})]),P=a([e({amountCents:E(1),productSlug:f}),e({productSlug:f,quantity:E(1)}),e({productSlug:f})]),F=l(n(S(N),A(1))),ie=l(n(S(P),A(1))),I=r([`one-time`,`monthly`,`annually`]),L=k(E(0)),ae=n(_(),v(/^pk_(?:test|live)_\S+$/,`Invalid publishable key.`)),R={description:y,id:f,inventoryQuantity:L,maxQuantity:L,minimumAmountCents:L,minQuantity:L,name:f,paymentOption:I},z=n(s(`pricingMode`,[t({...R,amountCents:E(0),pricingMode:u(`fixed`)}),t({...R,amountCents:L,pricingMode:u(`custom`)})]),h(({maxQuantity:e,minQuantity:t})=>e===null||t===null||t<=e)),B=t({acceptsDiscounts:O(b(),!1),id:f,product:z,productId:f,slug:f}),V=O(t({memberId:O(b(),!1),merchSize:O(b(),!1),phone:O(b(),!1),promoCode:O(b(),!1),serviceFee:O(b(),!1),shipping:O(b(),!1),tipping:O(b(),!1)}),{}),H=n(t({community:O(t({color:_(),name:f,thumbnail:k(_())})),config:O(t({customFields:w,fields:V})),description:y,id:O(_(),``),name:O(_(),`Lockerverse widget`),payment:t({currency:u(`usd`),publishableKey:ae}),pricingPolicy:O(t({currency:O(u(`usd`),`usd`),serviceFeeRateBasisPoints:O(E(0),0)})),products:O(S(B),[]),showCommunityBranding:O(b(),!0),title:y}),i(e=>({...e,config:{customFields:e.config?.customFields??[],fields:{memberId:e.config?.fields?.memberId??!1,merchSize:e.config?.fields?.merchSize??!1,phone:e.config?.fields?.phone??!1,promoCode:e.config?.fields?.promoCode??!1,serviceFee:e.config?.fields?.serviceFee??!1,shipping:e.config?.fields?.shipping??!1,tipping:e.config?.fields?.tipping??!1}},pricingPolicy:e.pricingPolicy??{currency:`usd`,serviceFeeRateBasisPoints:0}}))),U=k(t({percentageOff:n(c(),m(),d(0),D(100)),source:r([`email_list`,`promo_code`])})),W=t({acceptsDiscounts:b(),listingId:f,listingSlug:f,paymentOption:I,pricingMode:r([`fixed`,`custom`]),productId:f,productName:f,quantity:E(1),subtotalCents:E(0),unitAmountCents:E(0)}),G=n(t({amountCents:E(0),appliedDiscount:U,connectedAccountId:k(f),discountableSubtotalCents:E(0),discountCents:E(0),lineItems:S(W),paymentOption:I,serviceFeeCents:E(0),subtotalCents:E(0),tipCents:E(0),totalCents:E(0)}),h(({lineItems:e,paymentOption:t})=>e.length===0||e.some(e=>e.paymentOption!==t)?!1:t===`one-time`||e.length===1&&e[0]?.pricingMode===`fixed`&&e[0].quantity===1,`Invalid checkout cadence composition.`)),K=n(g,h(e=>e.checkoutId.trim()&&e.paymentReference.trim()?e.checkoutStatus===`action_required`?e.requiresAction&&e.paymentRequired&&!!e.clientSecret?.trim():!e.requiresAction&&e.clientSecret===null:!1,`Invalid payment result state.`)),q=t({catalog:H,quote:G}),J=l(G),oe=l(q),Y=l(K),se=l(H);function ce(e){let{product:t}=e;return{acceptsDiscounts:e.acceptsDiscounts??!1,amountCents:t.amountCents,description:t.description??null,id:t.id,inventoryQuantity:t.inventoryQuantity,listingId:e.id,maximumQuantity:t.maxQuantity,minimumAmountCents:t.minimumAmountCents,minimumQuantity:t.minQuantity,name:t.name,paymentOption:t.paymentOption,pricingMode:t.pricingMode,slug:e.slug}}function X(e){let t=e.config?.fields??{};return{community:e.community?{accentColor:e.community.color,imageUrl:e.community.thumbnail,name:e.community.name}:null,payment:{currency:e.payment.currency,publishableKey:e.payment.publishableKey},pricingPolicy:{currency:`usd`,serviceFeeRateBasisPoints:e.pricingPolicy?.serviceFeeRateBasisPoints??0},products:(e.products??[]).map(ce),widget:{customFields:e.config?.customFields??[],description:e.description??null,fields:{memberId:t.memberId??!1,merchSize:t.merchSize??!1,phone:t.phone??!1,promoCode:t.promoCode??!1,serviceFee:t.serviceFee??!1,shipping:t.shipping??!1,tipping:t.tipping??!1},id:e.id??``,name:e.name??`Lockerverse widget`,showCommunityBranding:e.showCommunityBranding??!0,title:e.title??null}}}function Z(e){return $(e)}function le(e){return $(e)}function Q(e){return $(e)}function $(e){return C(structuredClone(e))}function ue(e){let{apiBaseUrl:t,communitySlug:n,communitySlugValue:r,environment:i,fetchImplementation:a,onError:o,requestTimeoutMs:s,sentryDsn:c,widgetSlug:l,widgetSlugValue:u}=ne(e),d,f=ee({communitySlug:r,environment:i,getContext:()=>({widgetSlug:u}),onError:o,resourceContextName:`lockerverse_widget`,sentryDsn:c}),{requestJson:p}=T(a,f,s),m=`${t}/v2/community/${n}/payment-widgets/${l}/checkout`;function h(e,t,n=`invalid_selection`){throw f(new j({code:n,message:e,operation:t,reportable:!1}))}function g(e,t){return e instanceof j?e:new j({...t,reportable:!0})}function _(e,t,n=!1){let r=g(e,t),i=n&&(r.status===void 0||r.status>=500);throw f(i?new j({code:r.code,message:r.message,operation:r.operation,recoveryRecommended:!0,reportable:r.reportable,...r.status===void 0?{}:{status:r.status}}):r)}function v(e,t){let n;try{n=re(e)}catch{h(`Checkout pricing input is invalid.`,t)}let r=n.email?.trim().toLowerCase(),i=n.promoCode?.trim();return{...r?{email:r}:{},...n.includeServiceFee===void 0?{}:{includeServiceFee:n.includeServiceFee},...i?{promoCode:i}:{},...n.tipCents===void 0?{}:{tipCents:n.tipCents}}}function y(e){(!(e&&typeof e==`object`)||Array.isArray(e))&&h(`Checkout selection is invalid.`,`bootstrap_checkout`);let{items:t,...n}=e;try{return{pricing:v(n,`bootstrap_checkout`),selection:ie(t)}}catch(e){if(e instanceof j)throw e;h(`Checkout selection is invalid.`,`bootstrap_checkout`)}}function b(e,t){return(e.pricingMode!==`custom`||e.minimumAmountCents!==null&&t<e.minimumAmountCents)&&h(`Selected Product amount is invalid.`,`bootstrap_checkout`),{amountCents:t,productId:e.id}}function x(e,t){return e.paymentOption===`one-time`?((e.pricingMode!==`fixed`||!(`quantity`in t)||e.minimumQuantity!==null&&t.quantity<e.minimumQuantity||e.maximumQuantity!==null&&t.quantity>e.maximumQuantity||e.inventoryQuantity!==null&&t.quantity>e.inventoryQuantity)&&h(`Selected Product quantity is invalid.`,`bootstrap_checkout`),{productId:e.id,quantity:t.quantity}):((e.pricingMode!==`fixed`||`quantity`in t&&t.quantity!==1)&&h(`Selected recurring Product is invalid.`,`bootstrap_checkout`),{productId:e.id})}function S(e,t){return t.map(t=>{let n=e.products.find(e=>e.slug===t.productSlug);return n||h(`Selected Product is unavailable.`,`bootstrap_checkout`),`amountCents`in t?b(n,t.amountCents):x(n,t)})}function w(e,t,n,r){if(!d)throw new j({...r,message:`Load the Lockerverse widget before calculating a checkout.`,reportable:!1});let{connectedAccountId:i,...a}=e;return le(C({...a,authoritative:!0,items:t,payment:{connectedAccountId:i,currency:`usd`,publishableKey:d},paymentOption:e.paymentOption,paymentReference:globalThis.crypto.randomUUID(),pricing:n}))}function E(e){(!(e&&typeof e==`object`)||Array.isArray(e))&&h(`Checkout selection is invalid.`,`calculate_total`);let{items:t,...n}=e;try{return{items:F(t),pricing:v(n,`calculate_total`)}}catch(e){if(e instanceof j)throw e;h(`Checkout selection is invalid.`,`calculate_total`)}}function D(e){try{if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`Invalid quote.`);let t=e;if(t.authoritative!==!0||typeof t.paymentReference!=`string`||t.paymentReference.length===0||t.payment.currency!==`usd`||t.payment.publishableKey!==d)throw TypeError(`Invalid quote.`);let n=J({...t,connectedAccountId:t.payment.connectedAccountId}),{connectedAccountId:r,...i}=n;return C({...i,authoritative:!0,payment:{connectedAccountId:r,currency:`usd`,publishableKey:d},paymentOption:n.paymentOption,paymentReference:t.paymentReference})}catch{h(`Lockerverse payment submission is invalid.`,`submit_payment`,`payment_submit_failed`)}}function O(e){try{if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`Invalid payment input.`);let{checkout:t,submission:n}=e;if(!(t&&typeof t==`object`)||Array.isArray(t))throw TypeError(`Invalid prepared checkout.`);let r=t,i=F(r.items),a=v(r.pricing,`submit_payment`),o=D(r),s=M(n);o.totalCents>0&&!s.confirmationToken&&h(`Stripe confirmation is required for a paid checkout.`,`submit_payment`,`payment_submit_failed`);let c=s.email.trim().toLowerCase();return(!c||c!==a.email)&&h(`Payment email must match the current checkout quote.`,`submit_payment`),{items:i,pricing:a,quote:o,submission:{...s,email:c}}}catch(e){if(e instanceof j)throw e;h(`Lockerverse payment submission is invalid.`,`submit_payment`,`payment_submit_failed`)}}return{async bootstrapCheckout(e){let{pricing:t,selection:n}=y(e),r={code:`checkout_bootstrap_failed`,message:`Lockerverse returned an invalid checkout bootstrap.`,operation:`bootstrap_checkout`};try{let e=await p(`${m}/bootstrap`,{body:JSON.stringify({...t,items:n}),headers:{"Content-Type":`application/json`},method:`POST`},oe,{...r,message:`Unable to bootstrap the Lockerverse checkout because the request failed.`,report:!1},{...r,report:!1});if(!e.ok)throw new j({...r,message:`Unable to bootstrap the Lockerverse checkout (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});let i=C(X(e.value.catalog));d=i.payment.publishableKey;let a=S(i,n),o={...t,includeServiceFee:t.includeServiceFee??i.widget.fields.serviceFee};return C({catalog:Z(i),checkout:w(e.value.quote,a,o,r)})}catch(e){_(e,r)}},async calculateTotal(e){let{items:t,pricing:n}=E(e),r={code:`total_calculation_failed`,message:`Lockerverse returned an invalid checkout total.`,operation:`calculate_total`};try{let e=await p(`${m}/quote`,{body:JSON.stringify({...n,items:t}),headers:{"Content-Type":`application/json`},method:`POST`},J,{...r,message:`Unable to calculate the Lockerverse checkout total because the request failed.`,report:!1},{...r,report:!1});if(!e.ok)throw new j({...r,message:`Unable to calculate the Lockerverse checkout total (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});return w(e.value,t,n,r)}catch(e){_(e,r)}},async getPaymentStatus(e){(typeof e!=`string`||!e.trim())&&h(`Provide a payment reference to recover its status.`,`get_payment_status`);let t=e.trim(),n={code:`payment_status_failed`,message:`Lockerverse returned an invalid payment status.`,operation:`get_payment_status`};try{let e=await p(`${m}/${encodeURIComponent(t)}/status`,void 0,Y,{...n,message:`Unable to recover the Lockerverse payment status because the request failed.`,report:!1},{...n,report:!1});if(!e.ok)throw new j({...n,message:`Unable to recover the Lockerverse payment status (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});if(e.value.paymentReference!==t)throw new j({...n,reportable:!0});return Q(e.value)}catch(e){_(e,n)}},async load(){let e={code:`widget_load_failed`,message:`Lockerverse returned an invalid widget catalog.`,operation:`load_widget`};try{let r=await p(`${t}/v2/community/${n}/payment-widgets/${l}`,void 0,se,{...e,message:`Unable to load Lockerverse widget because the request failed.`,report:!1},{...e,report:!1});if(!r.ok)throw new j({...e,message:`Unable to load Lockerverse widget (${r.response.status}).`,reportable:r.response.status>=500,status:r.response.status});let i=C(X(r.value));return d=i.payment.publishableKey,Z(i)}catch(t){_(t,e)}},async submitPayment(e){let{items:t,pricing:n,quote:r,submission:i}=O(e),a={code:`payment_submit_failed`,message:`Lockerverse returned an invalid payment confirmation.`,operation:`submit_payment`};try{let e=await p(`${m}/confirm`,{body:JSON.stringify({...i.confirmationToken?{confirmationToken:i.confirmationToken}:{},customFieldAnswers:i.customFieldAnswers,email:i.email,expectedAmountCents:r.amountCents,expectedAppliedDiscount:r.appliedDiscount,expectedConnectedAccountId:r.payment.connectedAccountId,expectedDiscountableSubtotalCents:r.discountableSubtotalCents,expectedDiscountCents:r.discountCents,expectedServiceFeeCents:r.serviceFeeCents,expectedSubtotalCents:r.subtotalCents,expectedTipCents:r.tipCents,expectedTotalCents:r.totalCents,...n,items:t,memberId:i.memberId,merchSize:i.merchSize,metadata:i.metadata,paymentReference:r.paymentReference,phone:i.phone,quoteContractVersion:1,shipping:i.shipping}),headers:{"Content-Type":`application/json`},method:`POST`},Y,{...a,message:`Unable to submit the Lockerverse payment because the request failed.`,report:!1},{...a,report:!1});if(!e.ok)throw new j({...a,message:`Unable to submit the Lockerverse payment (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});if(e.value.paymentReference!==r.paymentReference)throw new j({...a,reportable:!0});return Q(e.value)}catch(e){_(e,a,!0)}}}}export{te as LOCKERVERSE_SDK_VERSION,j as LockerverseSdkError,ue as createLockerverseCheckoutClient};
2
2
  //# sourceMappingURL=checkout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.js","names":[],"sources":["../src/checkout-environment.ts","../src/checkout-input-schemas.ts","../src/checkout-schemas.ts","../src/snapshots.ts","../src/checkout-client.ts"],"sourcesContent":["import { resolveResourceEnvironment } from \"./environment.ts\";\nimport type { CreateLockerverseWidgetOptions } from \"./types.ts\";\n\nexport function resolveWidgetEnvironment(\n options: CreateLockerverseWidgetOptions\n) {\n const runtime = resolveResourceEnvironment(\n options.apiBaseUrl !== undefined && options.environment === undefined\n ? { ...options, environment: \"production\" }\n : options,\n \"widgetSlug\"\n );\n return {\n ...runtime,\n widgetSlug: runtime.resourceSlug,\n widgetSlugValue: runtime.resourceSlugValue,\n };\n}\n","import {\n array,\n boolean,\n minLength,\n optional,\n parser,\n picklist,\n pipe,\n record,\n strictObject,\n string,\n union,\n} from \"valibot\";\n\nimport {\n customFieldAnswerSchema,\n nonEmptyStringSchema,\n safeIntegerSchema,\n} from \"./schema-helpers.ts\";\n\nexport const parseCheckoutPricingInput = parser(\n optional(\n strictObject({\n email: optional(string()),\n includeServiceFee: optional(boolean()),\n promoCode: optional(string()),\n tipCents: optional(safeIntegerSchema(0)),\n }),\n {}\n )\n);\n\nexport const parsePaymentSubmission = parser(\n strictObject({\n confirmationToken: optional(nonEmptyStringSchema),\n customFieldAnswers: optional(array(customFieldAnswerSchema)),\n email: string(),\n memberId: optional(string()),\n merchSize: optional(picklist([\"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\", \"XXXL\"])),\n metadata: optional(record(string(), string())),\n phone: optional(string()),\n shipping: optional(\n strictObject({\n address: strictObject({\n city: string(),\n country: string(),\n line1: string(),\n line2: optional(string()),\n postal_code: string(),\n state: string(),\n }),\n name: string(),\n })\n ),\n })\n);\n\nconst checkoutItemSchema = union([\n strictObject({\n amountCents: safeIntegerSchema(1),\n productId: nonEmptyStringSchema,\n }),\n strictObject({\n productId: nonEmptyStringSchema,\n quantity: safeIntegerSchema(1),\n }),\n strictObject({\n productId: nonEmptyStringSchema,\n }),\n]);\n\nconst checkoutSelectionItemSchema = union([\n strictObject({\n amountCents: safeIntegerSchema(1),\n productSlug: nonEmptyStringSchema,\n }),\n strictObject({\n productSlug: nonEmptyStringSchema,\n quantity: safeIntegerSchema(1),\n }),\n strictObject({\n productSlug: nonEmptyStringSchema,\n }),\n]);\n\nexport const parseCheckoutItems = parser(\n pipe(array(checkoutItemSchema), minLength(1))\n);\n\nexport const parseCheckoutSelectionItems = parser(\n pipe(array(checkoutSelectionItemSchema), minLength(1))\n);\n","import {\n array,\n boolean,\n check,\n finite,\n type InferOutput,\n literal,\n maxValue,\n minValue,\n nullable,\n number,\n object,\n optional,\n parser,\n picklist,\n pipe,\n regex,\n string,\n transform,\n variant,\n} from \"valibot\";\n\nimport { vPaymentWidgetPaymentResultResponseDto } from \"./generated/public-api/valibot.gen.ts\";\nimport {\n customFieldsSchema,\n nonEmptyStringSchema,\n optionalNullableStringSchema,\n safeIntegerSchema,\n} from \"./schema-helpers.ts\";\n\nconst paymentOptionSchema = picklist([\"one-time\", \"monthly\", \"annually\"]);\nconst nullableNonNegativeIntegerSchema = nullable(safeIntegerSchema(0));\nconst publishableKeySchema = pipe(\n string(),\n regex(/^pk_(?:test|live)_\\S+$/, \"Invalid publishable key.\")\n);\n\nconst productBaseEntries = {\n description: optionalNullableStringSchema,\n id: nonEmptyStringSchema,\n inventoryQuantity: nullableNonNegativeIntegerSchema,\n maxQuantity: nullableNonNegativeIntegerSchema,\n minimumAmountCents: nullableNonNegativeIntegerSchema,\n minQuantity: nullableNonNegativeIntegerSchema,\n name: nonEmptyStringSchema,\n paymentOption: paymentOptionSchema,\n};\n\nconst publicProductSchema = pipe(\n variant(\"pricingMode\", [\n object({\n ...productBaseEntries,\n amountCents: safeIntegerSchema(0),\n pricingMode: literal(\"fixed\"),\n }),\n object({\n ...productBaseEntries,\n amountCents: nullableNonNegativeIntegerSchema,\n pricingMode: literal(\"custom\"),\n }),\n ]),\n check(\n ({ maxQuantity, minQuantity }) =>\n maxQuantity === null || minQuantity === null || minQuantity <= maxQuantity\n )\n);\n\nconst productListingSchema = object({\n acceptsDiscounts: optional(boolean(), false),\n id: nonEmptyStringSchema,\n product: publicProductSchema,\n productId: nonEmptyStringSchema,\n slug: nonEmptyStringSchema,\n});\n\nconst widgetFieldsSchema = optional(\n object({\n memberId: optional(boolean(), false),\n merchSize: optional(boolean(), false),\n phone: optional(boolean(), false),\n promoCode: optional(boolean(), false),\n serviceFee: optional(boolean(), false),\n shipping: optional(boolean(), false),\n tipping: optional(boolean(), false),\n }),\n {}\n);\n\nexport const publicWidgetSchema = pipe(\n object({\n community: optional(\n object({\n color: string(),\n name: nonEmptyStringSchema,\n thumbnail: string(),\n })\n ),\n config: optional(\n object({\n customFields: customFieldsSchema,\n fields: widgetFieldsSchema,\n })\n ),\n description: optionalNullableStringSchema,\n id: optional(string(), \"\"),\n name: optional(string(), \"Lockerverse widget\"),\n payment: object({\n currency: literal(\"usd\"),\n publishableKey: publishableKeySchema,\n }),\n pricingPolicy: optional(\n object({\n currency: optional(literal(\"usd\"), \"usd\"),\n serviceFeeRateBasisPoints: optional(safeIntegerSchema(0), 0),\n })\n ),\n products: optional(array(productListingSchema), []),\n showCommunityBranding: optional(boolean(), true),\n title: optionalNullableStringSchema,\n }),\n transform((widget) => ({\n ...widget,\n config: {\n customFields: widget.config?.customFields ?? [],\n fields: {\n memberId: widget.config?.fields?.memberId ?? false,\n merchSize: widget.config?.fields?.merchSize ?? false,\n phone: widget.config?.fields?.phone ?? false,\n promoCode: widget.config?.fields?.promoCode ?? false,\n serviceFee: widget.config?.fields?.serviceFee ?? false,\n shipping: widget.config?.fields?.shipping ?? false,\n tipping: widget.config?.fields?.tipping ?? false,\n },\n },\n pricingPolicy: widget.pricingPolicy ?? {\n currency: \"usd\" as const,\n serviceFeeRateBasisPoints: 0,\n },\n }))\n);\n\nconst appliedDiscountSchema = nullable(\n object({\n percentageOff: pipe(number(), finite(), minValue(0), maxValue(100)),\n source: picklist([\"email_list\", \"promo_code\"]),\n })\n);\n\nconst checkoutLineItemSchema = object({\n acceptsDiscounts: boolean(),\n listingId: nonEmptyStringSchema,\n listingSlug: nonEmptyStringSchema,\n paymentOption: paymentOptionSchema,\n pricingMode: picklist([\"fixed\", \"custom\"]),\n productId: nonEmptyStringSchema,\n productName: nonEmptyStringSchema,\n quantity: safeIntegerSchema(1),\n subtotalCents: safeIntegerSchema(0),\n unitAmountCents: safeIntegerSchema(0),\n});\n\nexport const checkoutQuoteSchema = pipe(\n object({\n amountCents: safeIntegerSchema(0),\n appliedDiscount: appliedDiscountSchema,\n connectedAccountId: nullable(nonEmptyStringSchema),\n discountableSubtotalCents: safeIntegerSchema(0),\n discountCents: safeIntegerSchema(0),\n lineItems: array(checkoutLineItemSchema),\n paymentOption: paymentOptionSchema,\n serviceFeeCents: safeIntegerSchema(0),\n subtotalCents: safeIntegerSchema(0),\n tipCents: safeIntegerSchema(0),\n totalCents: safeIntegerSchema(0),\n }),\n check(({ lineItems, paymentOption }) => {\n if (\n lineItems.length === 0 ||\n lineItems.some((item) => item.paymentOption !== paymentOption)\n ) {\n return false;\n }\n return (\n paymentOption === \"one-time\" ||\n (lineItems.length === 1 &&\n lineItems[0]?.pricingMode === \"fixed\" &&\n lineItems[0].quantity === 1)\n );\n }, \"Invalid checkout cadence composition.\")\n);\n\nexport const paymentResultSchema = pipe(\n vPaymentWidgetPaymentResultResponseDto,\n check((payment) => {\n if (!(payment.checkoutId.trim() && payment.paymentReference.trim())) {\n return false;\n }\n if (payment.checkoutStatus === \"action_required\") {\n return (\n payment.requiresAction &&\n payment.paymentRequired &&\n Boolean(payment.clientSecret?.trim())\n );\n }\n return !payment.requiresAction && payment.clientSecret === null;\n }, \"Invalid payment result state.\")\n);\n\nexport const checkoutBootstrapSchema = object({\n catalog: publicWidgetSchema,\n quote: checkoutQuoteSchema,\n});\n\nexport type PublicCheckoutQuote = InferOutput<typeof checkoutQuoteSchema>;\nexport type PublicProductListing = InferOutput<typeof productListingSchema>;\nexport type PublicWidget = InferOutput<typeof publicWidgetSchema>;\n\nexport const parseCheckoutQuote = parser(checkoutQuoteSchema);\nexport const parseCheckoutBootstrap = parser(checkoutBootstrapSchema);\nexport const parsePaymentResult = parser(paymentResultSchema);\nexport const parsePublicWidget = parser(publicWidgetSchema);\n","import type { PublicProductListing, PublicWidget } from \"./checkout-schemas.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\nimport type {\n LockerverseCatalog,\n LockerversePaymentResult,\n LockerversePreparedCheckout,\n LockerverseProduct,\n} from \"./types.ts\";\n\nfunction mapProduct(listing: PublicProductListing): LockerverseProduct {\n const { product } = listing;\n\n return {\n acceptsDiscounts: listing.acceptsDiscounts ?? false,\n amountCents: product.amountCents,\n description: product.description ?? null,\n id: product.id,\n inventoryQuantity: product.inventoryQuantity,\n listingId: listing.id,\n maximumQuantity: product.maxQuantity,\n minimumAmountCents: product.minimumAmountCents,\n minimumQuantity: product.minQuantity,\n name: product.name,\n paymentOption: product.paymentOption,\n pricingMode: product.pricingMode,\n slug: listing.slug,\n };\n}\n\nexport function createCatalog(widget: PublicWidget): LockerverseCatalog {\n const fields = widget.config?.fields ?? {};\n\n return {\n community: widget.community\n ? {\n accentColor: widget.community.color,\n imageUrl: widget.community.thumbnail,\n name: widget.community.name,\n }\n : null,\n payment: {\n currency: widget.payment.currency,\n publishableKey: widget.payment.publishableKey,\n },\n pricingPolicy: {\n currency: \"usd\",\n serviceFeeRateBasisPoints:\n widget.pricingPolicy?.serviceFeeRateBasisPoints ?? 0,\n },\n products: (widget.products ?? []).map(mapProduct),\n widget: {\n customFields: widget.config?.customFields ?? [],\n description: widget.description ?? null,\n fields: {\n memberId: fields.memberId ?? false,\n merchSize: fields.merchSize ?? false,\n phone: fields.phone ?? false,\n promoCode: fields.promoCode ?? false,\n serviceFee: fields.serviceFee ?? false,\n shipping: fields.shipping ?? false,\n tipping: fields.tipping ?? false,\n },\n id: widget.id ?? \"\",\n name: widget.name ?? \"Lockerverse widget\",\n showCommunityBranding: widget.showCommunityBranding ?? true,\n title: widget.title ?? null,\n },\n };\n}\n\nexport function cloneCatalog(catalog: LockerverseCatalog): LockerverseCatalog {\n return cloneSnapshot(catalog);\n}\n\nexport function clonePreparedCheckout(\n checkout: LockerversePreparedCheckout\n): LockerversePreparedCheckout {\n return cloneSnapshot(checkout);\n}\n\nexport function clonePaymentResult(\n paymentResult: LockerversePaymentResult\n): LockerversePaymentResult {\n return cloneSnapshot(paymentResult);\n}\n\nfunction cloneSnapshot<T>(value: T): T {\n return deepFreeze(structuredClone(value));\n}\n","import { resolveWidgetEnvironment } from \"./checkout-environment.ts\";\nimport {\n parseCheckoutItems,\n parseCheckoutPricingInput,\n parseCheckoutSelectionItems,\n parsePaymentSubmission,\n} from \"./checkout-input-schemas.ts\";\nimport {\n parseCheckoutBootstrap,\n parseCheckoutQuote,\n parsePaymentResult,\n parsePublicWidget,\n} from \"./checkout-schemas.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\nimport { createSdkErrorReporter } from \"./error-reporting.ts\";\nimport {\n cloneCatalog,\n clonePaymentResult,\n clonePreparedCheckout,\n createCatalog,\n} from \"./snapshots.ts\";\nimport { createTransport } from \"./transport.ts\";\nimport {\n type CreateLockerverseWidgetOptions,\n type LockerverseCatalog,\n type LockerverseCheckoutClient,\n type LockerverseCheckoutItem,\n type LockerverseCheckoutPricingInput,\n type LockerverseCheckoutQuote,\n type LockerverseCheckoutSelectionItem,\n type LockerversePreparedCheckout,\n type LockerverseProduct,\n LockerverseSdkError,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype OperationErrorContext = {\n code:\n | \"checkout_bootstrap_failed\"\n | \"payment_status_failed\"\n | \"payment_submit_failed\"\n | \"total_calculation_failed\"\n | \"widget_load_failed\";\n message: string;\n operation:\n | \"bootstrap_checkout\"\n | \"calculate_total\"\n | \"get_payment_status\"\n | \"load_widget\"\n | \"submit_payment\";\n};\n\nexport function createLockerverseCheckoutClient(\n options: CreateLockerverseWidgetOptions\n): LockerverseCheckoutClient {\n const {\n apiBaseUrl,\n communitySlug,\n communitySlugValue,\n environment,\n fetchImplementation,\n onError,\n requestTimeoutMs,\n sentryDsn,\n widgetSlug,\n widgetSlugValue,\n } = resolveWidgetEnvironment(options);\n let catalogPublishableKey: string | undefined;\n const reportError = createSdkErrorReporter({\n communitySlug: communitySlugValue,\n environment,\n getContext: () => ({ widgetSlug: widgetSlugValue }),\n onError,\n resourceContextName: \"lockerverse_widget\",\n sentryDsn,\n });\n const { requestJson } = createTransport(\n fetchImplementation,\n reportError,\n requestTimeoutMs\n );\n const checkoutBaseUrl = `${apiBaseUrl}/v2/community/${communitySlug}/payment-widgets/${widgetSlug}/checkout`;\n\n function invalidInput(\n message: string,\n operation: LockerverseSdkOperation,\n code: \"invalid_selection\" | \"payment_submit_failed\" = \"invalid_selection\"\n ): never {\n throw reportError(\n new LockerverseSdkError({\n code,\n message,\n operation,\n reportable: false,\n })\n );\n }\n\n function normalizeOperationError(\n error: unknown,\n context: OperationErrorContext\n ) {\n return error instanceof LockerverseSdkError\n ? error\n : new LockerverseSdkError({ ...context, reportable: true });\n }\n\n function failOperation(\n error: unknown,\n context: OperationErrorContext,\n recoveryMayBeRequired = false\n ): never {\n const normalized = normalizeOperationError(error, context);\n const recoveryRecommended =\n recoveryMayBeRequired &&\n (normalized.status === undefined || normalized.status >= 500);\n throw reportError(\n recoveryRecommended\n ? new LockerverseSdkError({\n code: normalized.code,\n message: normalized.message,\n operation: normalized.operation,\n recoveryRecommended: true,\n reportable: normalized.reportable,\n ...(normalized.status === undefined\n ? {}\n : { status: normalized.status }),\n })\n : normalized\n );\n }\n\n function normalizePricingInput(\n input: unknown,\n operation: \"bootstrap_checkout\" | \"calculate_total\" | \"submit_payment\"\n ) {\n let parsed: ReturnType<typeof parseCheckoutPricingInput>;\n try {\n parsed = parseCheckoutPricingInput(input);\n } catch {\n invalidInput(\"Checkout pricing input is invalid.\", operation);\n }\n const email = parsed.email?.trim().toLowerCase();\n const promoCode = parsed.promoCode?.trim();\n return {\n ...(email ? { email } : {}),\n ...(parsed.includeServiceFee === undefined\n ? {}\n : { includeServiceFee: parsed.includeServiceFee }),\n ...(promoCode ? { promoCode } : {}),\n ...(parsed.tipCents === undefined ? {} : { tipCents: parsed.tipCents }),\n };\n }\n\n function normalizeBootstrapCheckoutInput(input: unknown) {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n invalidInput(\"Checkout selection is invalid.\", \"bootstrap_checkout\");\n }\n const { items, ...pricingInput } = input as Record<string, unknown>;\n try {\n return {\n pricing: normalizePricingInput(pricingInput, \"bootstrap_checkout\"),\n selection: parseCheckoutSelectionItems(items),\n };\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw error;\n }\n invalidInput(\"Checkout selection is invalid.\", \"bootstrap_checkout\");\n }\n }\n\n function createAmountCheckoutItem(\n product: LockerverseProduct,\n amountCents: number\n ): LockerverseCheckoutItem {\n if (\n product.pricingMode !== \"custom\" ||\n (product.minimumAmountCents !== null &&\n amountCents < product.minimumAmountCents)\n ) {\n invalidInput(\"Selected Product amount is invalid.\", \"bootstrap_checkout\");\n }\n return { amountCents, productId: product.id };\n }\n\n function createFixedCheckoutItem(\n product: LockerverseProduct,\n item: Exclude<LockerverseCheckoutSelectionItem, { amountCents: number }>\n ): LockerverseCheckoutItem {\n if (product.paymentOption !== \"one-time\") {\n if (product.pricingMode !== \"fixed\" || \"quantity\" in item) {\n invalidInput(\n \"Selected recurring Product is invalid.\",\n \"bootstrap_checkout\"\n );\n }\n return { productId: product.id };\n }\n if (\n product.pricingMode !== \"fixed\" ||\n !(\"quantity\" in item) ||\n (product.minimumQuantity !== null &&\n item.quantity < product.minimumQuantity) ||\n (product.maximumQuantity !== null &&\n item.quantity > product.maximumQuantity) ||\n (product.inventoryQuantity !== null &&\n item.quantity > product.inventoryQuantity)\n ) {\n invalidInput(\n \"Selected Product quantity is invalid.\",\n \"bootstrap_checkout\"\n );\n }\n return { productId: product.id, quantity: item.quantity };\n }\n\n function createCheckoutItems(\n catalog: LockerverseCatalog,\n selection: LockerverseCheckoutSelectionItem[]\n ): LockerverseCheckoutItem[] {\n return selection.map((item) => {\n const product = catalog.products.find(\n (candidate) => candidate.slug === item.productSlug\n );\n if (!product) {\n invalidInput(\"Selected Product is unavailable.\", \"bootstrap_checkout\");\n }\n return \"amountCents\" in item\n ? createAmountCheckoutItem(product, item.amountCents)\n : createFixedCheckoutItem(product, item);\n });\n }\n\n function createPreparedCheckout(\n quote: ReturnType<typeof parseCheckoutQuote>,\n items: LockerverseCheckoutItem[],\n pricing: LockerverseCheckoutPricingInput,\n context: OperationErrorContext\n ): LockerversePreparedCheckout {\n if (!catalogPublishableKey) {\n throw new LockerverseSdkError({\n ...context,\n message: \"Load the Lockerverse widget before calculating a checkout.\",\n reportable: false,\n });\n }\n const { connectedAccountId, ...checkoutQuote } = quote;\n return clonePreparedCheckout(\n deepFreeze({\n ...checkoutQuote,\n authoritative: true as const,\n items,\n payment: {\n connectedAccountId,\n currency: \"usd\" as const,\n publishableKey: catalogPublishableKey,\n },\n paymentOption: quote.paymentOption,\n paymentReference: globalThis.crypto.randomUUID(),\n pricing,\n })\n );\n }\n\n function normalizeCalculateTotalInput(input: unknown) {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n invalidInput(\"Checkout selection is invalid.\", \"calculate_total\");\n }\n const { items, ...pricingInput } = input as Record<string, unknown>;\n try {\n return {\n items: parseCheckoutItems(items),\n pricing: normalizePricingInput(pricingInput, \"calculate_total\"),\n };\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw error;\n }\n invalidInput(\"Checkout selection is invalid.\", \"calculate_total\");\n }\n }\n\n function normalizeQuote(input: unknown) {\n try {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n throw new TypeError(\"Invalid quote.\");\n }\n const quoteInput = input as LockerverseCheckoutQuote;\n if (\n quoteInput.authoritative !== true ||\n typeof quoteInput.paymentReference !== \"string\" ||\n quoteInput.paymentReference.length === 0 ||\n quoteInput.payment.currency !== \"usd\" ||\n quoteInput.payment.publishableKey !== catalogPublishableKey\n ) {\n throw new TypeError(\"Invalid quote.\");\n }\n const parsed = parseCheckoutQuote({\n ...quoteInput,\n connectedAccountId: quoteInput.payment.connectedAccountId,\n });\n const { connectedAccountId, ...quote } = parsed;\n return deepFreeze({\n ...quote,\n authoritative: true as const,\n payment: {\n connectedAccountId,\n currency: \"usd\" as const,\n publishableKey: catalogPublishableKey,\n },\n paymentOption: parsed.paymentOption,\n paymentReference: quoteInput.paymentReference,\n });\n } catch {\n invalidInput(\n \"Lockerverse payment submission is invalid.\",\n \"submit_payment\",\n \"payment_submit_failed\"\n );\n }\n }\n\n function normalizeSubmitPaymentInput(input: unknown) {\n try {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n throw new TypeError(\"Invalid payment input.\");\n }\n const { checkout, submission: submissionInput } = input as Record<\n string,\n unknown\n >;\n if (\n !(checkout && typeof checkout === \"object\") ||\n Array.isArray(checkout)\n ) {\n throw new TypeError(\"Invalid prepared checkout.\");\n }\n const checkoutInput = checkout as Record<string, unknown>;\n const items = parseCheckoutItems(checkoutInput.items);\n const pricing = normalizePricingInput(\n checkoutInput.pricing,\n \"submit_payment\"\n );\n const quote = normalizeQuote(checkoutInput);\n const submission = parsePaymentSubmission(submissionInput);\n if (quote.totalCents > 0 && !submission.confirmationToken) {\n invalidInput(\n \"Stripe confirmation is required for a paid checkout.\",\n \"submit_payment\",\n \"payment_submit_failed\"\n );\n }\n const email = submission.email.trim().toLowerCase();\n if (!email || email !== pricing.email) {\n invalidInput(\n \"Payment email must match the current checkout quote.\",\n \"submit_payment\"\n );\n }\n return {\n items,\n pricing,\n quote,\n submission: { ...submission, email },\n };\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw error;\n }\n invalidInput(\n \"Lockerverse payment submission is invalid.\",\n \"submit_payment\",\n \"payment_submit_failed\"\n );\n }\n }\n\n return {\n async bootstrapCheckout(input) {\n const { pricing, selection } = normalizeBootstrapCheckoutInput(input);\n const context = {\n code: \"checkout_bootstrap_failed\" as const,\n message: \"Lockerverse returned an invalid checkout bootstrap.\",\n operation: \"bootstrap_checkout\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/bootstrap`,\n {\n body: JSON.stringify({ ...pricing, items: selection }),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n },\n parseCheckoutBootstrap,\n {\n ...context,\n message:\n \"Unable to bootstrap the Lockerverse checkout because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to bootstrap the Lockerverse checkout (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n const catalog = deepFreeze(createCatalog(response.value.catalog));\n catalogPublishableKey = catalog.payment.publishableKey;\n const checkoutItems = createCheckoutItems(catalog, selection);\n const checkoutPricing = {\n ...pricing,\n includeServiceFee:\n pricing.includeServiceFee ?? catalog.widget.fields.serviceFee,\n };\n return deepFreeze({\n catalog: cloneCatalog(catalog),\n checkout: createPreparedCheckout(\n response.value.quote,\n checkoutItems,\n checkoutPricing,\n context\n ),\n });\n } catch (error) {\n failOperation(error, context);\n }\n },\n async calculateTotal(input) {\n const { items, pricing } = normalizeCalculateTotalInput(input);\n const context = {\n code: \"total_calculation_failed\" as const,\n message: \"Lockerverse returned an invalid checkout total.\",\n operation: \"calculate_total\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/quote`,\n {\n body: JSON.stringify({ ...pricing, items }),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n },\n parseCheckoutQuote,\n {\n ...context,\n message:\n \"Unable to calculate the Lockerverse checkout total because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to calculate the Lockerverse checkout total (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n return createPreparedCheckout(response.value, items, pricing, context);\n } catch (error) {\n failOperation(error, context);\n }\n },\n async getPaymentStatus(paymentReference) {\n if (typeof paymentReference !== \"string\" || !paymentReference.trim()) {\n invalidInput(\n \"Provide a payment reference to recover its status.\",\n \"get_payment_status\"\n );\n }\n const normalizedReference = paymentReference.trim();\n const context = {\n code: \"payment_status_failed\" as const,\n message: \"Lockerverse returned an invalid payment status.\",\n operation: \"get_payment_status\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/${encodeURIComponent(normalizedReference)}/status`,\n undefined,\n parsePaymentResult,\n {\n ...context,\n message:\n \"Unable to recover the Lockerverse payment status because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to recover the Lockerverse payment status (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n if (response.value.paymentReference !== normalizedReference) {\n throw new LockerverseSdkError({ ...context, reportable: true });\n }\n return clonePaymentResult(response.value);\n } catch (error) {\n failOperation(error, context);\n }\n },\n async load() {\n const context = {\n code: \"widget_load_failed\" as const,\n message: \"Lockerverse returned an invalid widget catalog.\",\n operation: \"load_widget\" as const,\n };\n try {\n const response = await requestJson(\n `${apiBaseUrl}/v2/community/${communitySlug}/payment-widgets/${widgetSlug}`,\n undefined,\n parsePublicWidget,\n {\n ...context,\n message:\n \"Unable to load Lockerverse widget because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to load Lockerverse widget (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n const catalog = deepFreeze(createCatalog(response.value));\n catalogPublishableKey = catalog.payment.publishableKey;\n return cloneCatalog(catalog);\n } catch (error) {\n failOperation(error, context);\n }\n },\n async submitPayment(input) {\n const { items, pricing, quote, submission } =\n normalizeSubmitPaymentInput(input);\n const context = {\n code: \"payment_submit_failed\" as const,\n message: \"Lockerverse returned an invalid payment confirmation.\",\n operation: \"submit_payment\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/confirm`,\n {\n body: JSON.stringify({\n ...(submission.confirmationToken\n ? { confirmationToken: submission.confirmationToken }\n : {}),\n customFieldAnswers: submission.customFieldAnswers,\n email: submission.email,\n expectedAmountCents: quote.amountCents,\n expectedAppliedDiscount: quote.appliedDiscount,\n expectedConnectedAccountId: quote.payment.connectedAccountId,\n expectedDiscountableSubtotalCents:\n quote.discountableSubtotalCents,\n expectedDiscountCents: quote.discountCents,\n expectedServiceFeeCents: quote.serviceFeeCents,\n expectedSubtotalCents: quote.subtotalCents,\n expectedTipCents: quote.tipCents,\n expectedTotalCents: quote.totalCents,\n ...pricing,\n items,\n memberId: submission.memberId,\n merchSize: submission.merchSize,\n metadata: submission.metadata,\n paymentReference: quote.paymentReference,\n phone: submission.phone,\n quoteContractVersion: 1,\n shipping: submission.shipping,\n }),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n },\n parsePaymentResult,\n {\n ...context,\n message:\n \"Unable to submit the Lockerverse payment because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to submit the Lockerverse payment (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n if (response.value.paymentReference !== quote.paymentReference) {\n throw new LockerverseSdkError({ ...context, reportable: true });\n }\n return clonePaymentResult(response.value);\n } catch (error) {\n failOperation(error, context, true);\n }\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkout.js","names":[],"sources":["../src/checkout-environment.ts","../src/checkout-input-schemas.ts","../src/checkout-schemas.ts","../src/snapshots.ts","../src/checkout-client.ts"],"sourcesContent":["import { resolveResourceEnvironment } from \"./environment.ts\";\nimport type { CreateLockerverseWidgetOptions } from \"./types.ts\";\n\nexport function resolveWidgetEnvironment(\n options: CreateLockerverseWidgetOptions\n) {\n const runtime = resolveResourceEnvironment(\n options.apiBaseUrl !== undefined && options.environment === undefined\n ? { ...options, environment: \"production\" }\n : options,\n \"widgetSlug\"\n );\n return {\n ...runtime,\n widgetSlug: runtime.resourceSlug,\n widgetSlugValue: runtime.resourceSlugValue,\n };\n}\n","import {\n array,\n boolean,\n minLength,\n optional,\n parser,\n picklist,\n pipe,\n record,\n strictObject,\n string,\n union,\n} from \"valibot\";\n\nimport {\n customFieldAnswerSchema,\n nonEmptyStringSchema,\n safeIntegerSchema,\n} from \"./schema-helpers.ts\";\n\nexport const parseCheckoutPricingInput = parser(\n optional(\n strictObject({\n email: optional(string()),\n includeServiceFee: optional(boolean()),\n promoCode: optional(string()),\n tipCents: optional(safeIntegerSchema(0)),\n }),\n {}\n )\n);\n\nexport const parsePaymentSubmission = parser(\n strictObject({\n confirmationToken: optional(nonEmptyStringSchema),\n customFieldAnswers: optional(array(customFieldAnswerSchema)),\n email: string(),\n memberId: optional(string()),\n merchSize: optional(picklist([\"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\", \"XXXL\"])),\n metadata: optional(record(string(), string())),\n phone: optional(string()),\n shipping: optional(\n strictObject({\n address: strictObject({\n city: string(),\n country: string(),\n line1: string(),\n line2: optional(string()),\n postal_code: string(),\n state: string(),\n }),\n name: string(),\n })\n ),\n })\n);\n\nconst checkoutItemSchema = union([\n strictObject({\n amountCents: safeIntegerSchema(1),\n productId: nonEmptyStringSchema,\n }),\n strictObject({\n productId: nonEmptyStringSchema,\n quantity: safeIntegerSchema(1),\n }),\n strictObject({\n productId: nonEmptyStringSchema,\n }),\n]);\n\nconst checkoutSelectionItemSchema = union([\n strictObject({\n amountCents: safeIntegerSchema(1),\n productSlug: nonEmptyStringSchema,\n }),\n strictObject({\n productSlug: nonEmptyStringSchema,\n quantity: safeIntegerSchema(1),\n }),\n strictObject({\n productSlug: nonEmptyStringSchema,\n }),\n]);\n\nexport const parseCheckoutItems = parser(\n pipe(array(checkoutItemSchema), minLength(1))\n);\n\nexport const parseCheckoutSelectionItems = parser(\n pipe(array(checkoutSelectionItemSchema), minLength(1))\n);\n","import {\n array,\n boolean,\n check,\n finite,\n type InferOutput,\n literal,\n maxValue,\n minValue,\n nullable,\n number,\n object,\n optional,\n parser,\n picklist,\n pipe,\n regex,\n string,\n transform,\n variant,\n} from \"valibot\";\n\nimport { vPaymentWidgetPaymentResultResponseDto } from \"./generated/public-api/valibot.gen.ts\";\nimport {\n customFieldsSchema,\n nonEmptyStringSchema,\n optionalNullableStringSchema,\n safeIntegerSchema,\n} from \"./schema-helpers.ts\";\n\nconst paymentOptionSchema = picklist([\"one-time\", \"monthly\", \"annually\"]);\nconst nullableNonNegativeIntegerSchema = nullable(safeIntegerSchema(0));\nconst publishableKeySchema = pipe(\n string(),\n regex(/^pk_(?:test|live)_\\S+$/, \"Invalid publishable key.\")\n);\n\nconst productBaseEntries = {\n description: optionalNullableStringSchema,\n id: nonEmptyStringSchema,\n inventoryQuantity: nullableNonNegativeIntegerSchema,\n maxQuantity: nullableNonNegativeIntegerSchema,\n minimumAmountCents: nullableNonNegativeIntegerSchema,\n minQuantity: nullableNonNegativeIntegerSchema,\n name: nonEmptyStringSchema,\n paymentOption: paymentOptionSchema,\n};\n\nconst publicProductSchema = pipe(\n variant(\"pricingMode\", [\n object({\n ...productBaseEntries,\n amountCents: safeIntegerSchema(0),\n pricingMode: literal(\"fixed\"),\n }),\n object({\n ...productBaseEntries,\n amountCents: nullableNonNegativeIntegerSchema,\n pricingMode: literal(\"custom\"),\n }),\n ]),\n check(\n ({ maxQuantity, minQuantity }) =>\n maxQuantity === null || minQuantity === null || minQuantity <= maxQuantity\n )\n);\n\nconst productListingSchema = object({\n acceptsDiscounts: optional(boolean(), false),\n id: nonEmptyStringSchema,\n product: publicProductSchema,\n productId: nonEmptyStringSchema,\n slug: nonEmptyStringSchema,\n});\n\nconst widgetFieldsSchema = optional(\n object({\n memberId: optional(boolean(), false),\n merchSize: optional(boolean(), false),\n phone: optional(boolean(), false),\n promoCode: optional(boolean(), false),\n serviceFee: optional(boolean(), false),\n shipping: optional(boolean(), false),\n tipping: optional(boolean(), false),\n }),\n {}\n);\n\nexport const publicWidgetSchema = pipe(\n object({\n community: optional(\n object({\n color: string(),\n name: nonEmptyStringSchema,\n thumbnail: nullable(string()),\n })\n ),\n config: optional(\n object({\n customFields: customFieldsSchema,\n fields: widgetFieldsSchema,\n })\n ),\n description: optionalNullableStringSchema,\n id: optional(string(), \"\"),\n name: optional(string(), \"Lockerverse widget\"),\n payment: object({\n currency: literal(\"usd\"),\n publishableKey: publishableKeySchema,\n }),\n pricingPolicy: optional(\n object({\n currency: optional(literal(\"usd\"), \"usd\"),\n serviceFeeRateBasisPoints: optional(safeIntegerSchema(0), 0),\n })\n ),\n products: optional(array(productListingSchema), []),\n showCommunityBranding: optional(boolean(), true),\n title: optionalNullableStringSchema,\n }),\n transform((widget) => ({\n ...widget,\n config: {\n customFields: widget.config?.customFields ?? [],\n fields: {\n memberId: widget.config?.fields?.memberId ?? false,\n merchSize: widget.config?.fields?.merchSize ?? false,\n phone: widget.config?.fields?.phone ?? false,\n promoCode: widget.config?.fields?.promoCode ?? false,\n serviceFee: widget.config?.fields?.serviceFee ?? false,\n shipping: widget.config?.fields?.shipping ?? false,\n tipping: widget.config?.fields?.tipping ?? false,\n },\n },\n pricingPolicy: widget.pricingPolicy ?? {\n currency: \"usd\" as const,\n serviceFeeRateBasisPoints: 0,\n },\n }))\n);\n\nconst appliedDiscountSchema = nullable(\n object({\n percentageOff: pipe(number(), finite(), minValue(0), maxValue(100)),\n source: picklist([\"email_list\", \"promo_code\"]),\n })\n);\n\nconst checkoutLineItemSchema = object({\n acceptsDiscounts: boolean(),\n listingId: nonEmptyStringSchema,\n listingSlug: nonEmptyStringSchema,\n paymentOption: paymentOptionSchema,\n pricingMode: picklist([\"fixed\", \"custom\"]),\n productId: nonEmptyStringSchema,\n productName: nonEmptyStringSchema,\n quantity: safeIntegerSchema(1),\n subtotalCents: safeIntegerSchema(0),\n unitAmountCents: safeIntegerSchema(0),\n});\n\nexport const checkoutQuoteSchema = pipe(\n object({\n amountCents: safeIntegerSchema(0),\n appliedDiscount: appliedDiscountSchema,\n connectedAccountId: nullable(nonEmptyStringSchema),\n discountableSubtotalCents: safeIntegerSchema(0),\n discountCents: safeIntegerSchema(0),\n lineItems: array(checkoutLineItemSchema),\n paymentOption: paymentOptionSchema,\n serviceFeeCents: safeIntegerSchema(0),\n subtotalCents: safeIntegerSchema(0),\n tipCents: safeIntegerSchema(0),\n totalCents: safeIntegerSchema(0),\n }),\n check(({ lineItems, paymentOption }) => {\n if (\n lineItems.length === 0 ||\n lineItems.some((item) => item.paymentOption !== paymentOption)\n ) {\n return false;\n }\n return (\n paymentOption === \"one-time\" ||\n (lineItems.length === 1 &&\n lineItems[0]?.pricingMode === \"fixed\" &&\n lineItems[0].quantity === 1)\n );\n }, \"Invalid checkout cadence composition.\")\n);\n\nexport const paymentResultSchema = pipe(\n vPaymentWidgetPaymentResultResponseDto,\n check((payment) => {\n if (!(payment.checkoutId.trim() && payment.paymentReference.trim())) {\n return false;\n }\n if (payment.checkoutStatus === \"action_required\") {\n return (\n payment.requiresAction &&\n payment.paymentRequired &&\n Boolean(payment.clientSecret?.trim())\n );\n }\n return !payment.requiresAction && payment.clientSecret === null;\n }, \"Invalid payment result state.\")\n);\n\nexport const checkoutBootstrapSchema = object({\n catalog: publicWidgetSchema,\n quote: checkoutQuoteSchema,\n});\n\nexport type PublicCheckoutQuote = InferOutput<typeof checkoutQuoteSchema>;\nexport type PublicProductListing = InferOutput<typeof productListingSchema>;\nexport type PublicWidget = InferOutput<typeof publicWidgetSchema>;\n\nexport const parseCheckoutQuote = parser(checkoutQuoteSchema);\nexport const parseCheckoutBootstrap = parser(checkoutBootstrapSchema);\nexport const parsePaymentResult = parser(paymentResultSchema);\nexport const parsePublicWidget = parser(publicWidgetSchema);\n","import type { PublicProductListing, PublicWidget } from \"./checkout-schemas.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\nimport type {\n LockerverseCatalog,\n LockerversePaymentResult,\n LockerversePreparedCheckout,\n LockerverseProduct,\n} from \"./types.ts\";\n\nfunction mapProduct(listing: PublicProductListing): LockerverseProduct {\n const { product } = listing;\n\n return {\n acceptsDiscounts: listing.acceptsDiscounts ?? false,\n amountCents: product.amountCents,\n description: product.description ?? null,\n id: product.id,\n inventoryQuantity: product.inventoryQuantity,\n listingId: listing.id,\n maximumQuantity: product.maxQuantity,\n minimumAmountCents: product.minimumAmountCents,\n minimumQuantity: product.minQuantity,\n name: product.name,\n paymentOption: product.paymentOption,\n pricingMode: product.pricingMode,\n slug: listing.slug,\n };\n}\n\nexport function createCatalog(widget: PublicWidget): LockerverseCatalog {\n const fields = widget.config?.fields ?? {};\n\n return {\n community: widget.community\n ? {\n accentColor: widget.community.color,\n imageUrl: widget.community.thumbnail,\n name: widget.community.name,\n }\n : null,\n payment: {\n currency: widget.payment.currency,\n publishableKey: widget.payment.publishableKey,\n },\n pricingPolicy: {\n currency: \"usd\",\n serviceFeeRateBasisPoints:\n widget.pricingPolicy?.serviceFeeRateBasisPoints ?? 0,\n },\n products: (widget.products ?? []).map(mapProduct),\n widget: {\n customFields: widget.config?.customFields ?? [],\n description: widget.description ?? null,\n fields: {\n memberId: fields.memberId ?? false,\n merchSize: fields.merchSize ?? false,\n phone: fields.phone ?? false,\n promoCode: fields.promoCode ?? false,\n serviceFee: fields.serviceFee ?? false,\n shipping: fields.shipping ?? false,\n tipping: fields.tipping ?? false,\n },\n id: widget.id ?? \"\",\n name: widget.name ?? \"Lockerverse widget\",\n showCommunityBranding: widget.showCommunityBranding ?? true,\n title: widget.title ?? null,\n },\n };\n}\n\nexport function cloneCatalog(catalog: LockerverseCatalog): LockerverseCatalog {\n return cloneSnapshot(catalog);\n}\n\nexport function clonePreparedCheckout(\n checkout: LockerversePreparedCheckout\n): LockerversePreparedCheckout {\n return cloneSnapshot(checkout);\n}\n\nexport function clonePaymentResult(\n paymentResult: LockerversePaymentResult\n): LockerversePaymentResult {\n return cloneSnapshot(paymentResult);\n}\n\nfunction cloneSnapshot<T>(value: T): T {\n return deepFreeze(structuredClone(value));\n}\n","import { resolveWidgetEnvironment } from \"./checkout-environment.ts\";\nimport {\n parseCheckoutItems,\n parseCheckoutPricingInput,\n parseCheckoutSelectionItems,\n parsePaymentSubmission,\n} from \"./checkout-input-schemas.ts\";\nimport {\n parseCheckoutBootstrap,\n parseCheckoutQuote,\n parsePaymentResult,\n parsePublicWidget,\n} from \"./checkout-schemas.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\nimport { createSdkErrorReporter } from \"./error-reporting.ts\";\nimport {\n cloneCatalog,\n clonePaymentResult,\n clonePreparedCheckout,\n createCatalog,\n} from \"./snapshots.ts\";\nimport { createTransport } from \"./transport.ts\";\nimport {\n type CreateLockerverseWidgetOptions,\n type LockerverseCatalog,\n type LockerverseCheckoutClient,\n type LockerverseCheckoutItem,\n type LockerverseCheckoutPricingInput,\n type LockerverseCheckoutQuote,\n type LockerverseCheckoutSelectionItem,\n type LockerversePreparedCheckout,\n type LockerverseProduct,\n LockerverseSdkError,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype OperationErrorContext = {\n code:\n | \"checkout_bootstrap_failed\"\n | \"payment_status_failed\"\n | \"payment_submit_failed\"\n | \"total_calculation_failed\"\n | \"widget_load_failed\";\n message: string;\n operation:\n | \"bootstrap_checkout\"\n | \"calculate_total\"\n | \"get_payment_status\"\n | \"load_widget\"\n | \"submit_payment\";\n};\n\nexport function createLockerverseCheckoutClient(\n options: CreateLockerverseWidgetOptions\n): LockerverseCheckoutClient {\n const {\n apiBaseUrl,\n communitySlug,\n communitySlugValue,\n environment,\n fetchImplementation,\n onError,\n requestTimeoutMs,\n sentryDsn,\n widgetSlug,\n widgetSlugValue,\n } = resolveWidgetEnvironment(options);\n let catalogPublishableKey: string | undefined;\n const reportError = createSdkErrorReporter({\n communitySlug: communitySlugValue,\n environment,\n getContext: () => ({ widgetSlug: widgetSlugValue }),\n onError,\n resourceContextName: \"lockerverse_widget\",\n sentryDsn,\n });\n const { requestJson } = createTransport(\n fetchImplementation,\n reportError,\n requestTimeoutMs\n );\n const checkoutBaseUrl = `${apiBaseUrl}/v2/community/${communitySlug}/payment-widgets/${widgetSlug}/checkout`;\n\n function invalidInput(\n message: string,\n operation: LockerverseSdkOperation,\n code: \"invalid_selection\" | \"payment_submit_failed\" = \"invalid_selection\"\n ): never {\n throw reportError(\n new LockerverseSdkError({\n code,\n message,\n operation,\n reportable: false,\n })\n );\n }\n\n function normalizeOperationError(\n error: unknown,\n context: OperationErrorContext\n ) {\n return error instanceof LockerverseSdkError\n ? error\n : new LockerverseSdkError({ ...context, reportable: true });\n }\n\n function failOperation(\n error: unknown,\n context: OperationErrorContext,\n recoveryMayBeRequired = false\n ): never {\n const normalized = normalizeOperationError(error, context);\n const recoveryRecommended =\n recoveryMayBeRequired &&\n (normalized.status === undefined || normalized.status >= 500);\n throw reportError(\n recoveryRecommended\n ? new LockerverseSdkError({\n code: normalized.code,\n message: normalized.message,\n operation: normalized.operation,\n recoveryRecommended: true,\n reportable: normalized.reportable,\n ...(normalized.status === undefined\n ? {}\n : { status: normalized.status }),\n })\n : normalized\n );\n }\n\n function normalizePricingInput(\n input: unknown,\n operation: \"bootstrap_checkout\" | \"calculate_total\" | \"submit_payment\"\n ) {\n let parsed: ReturnType<typeof parseCheckoutPricingInput>;\n try {\n parsed = parseCheckoutPricingInput(input);\n } catch {\n invalidInput(\"Checkout pricing input is invalid.\", operation);\n }\n const email = parsed.email?.trim().toLowerCase();\n const promoCode = parsed.promoCode?.trim();\n return {\n ...(email ? { email } : {}),\n ...(parsed.includeServiceFee === undefined\n ? {}\n : { includeServiceFee: parsed.includeServiceFee }),\n ...(promoCode ? { promoCode } : {}),\n ...(parsed.tipCents === undefined ? {} : { tipCents: parsed.tipCents }),\n };\n }\n\n function normalizeBootstrapCheckoutInput(input: unknown) {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n invalidInput(\"Checkout selection is invalid.\", \"bootstrap_checkout\");\n }\n const { items, ...pricingInput } = input as Record<string, unknown>;\n try {\n return {\n pricing: normalizePricingInput(pricingInput, \"bootstrap_checkout\"),\n selection: parseCheckoutSelectionItems(items),\n };\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw error;\n }\n invalidInput(\"Checkout selection is invalid.\", \"bootstrap_checkout\");\n }\n }\n\n function createAmountCheckoutItem(\n product: LockerverseProduct,\n amountCents: number\n ): LockerverseCheckoutItem {\n if (\n product.pricingMode !== \"custom\" ||\n (product.minimumAmountCents !== null &&\n amountCents < product.minimumAmountCents)\n ) {\n invalidInput(\"Selected Product amount is invalid.\", \"bootstrap_checkout\");\n }\n return { amountCents, productId: product.id };\n }\n\n function createFixedCheckoutItem(\n product: LockerverseProduct,\n item: Exclude<LockerverseCheckoutSelectionItem, { amountCents: number }>\n ): LockerverseCheckoutItem {\n if (product.paymentOption !== \"one-time\") {\n if (\n product.pricingMode !== \"fixed\" ||\n (\"quantity\" in item && item.quantity !== 1)\n ) {\n invalidInput(\n \"Selected recurring Product is invalid.\",\n \"bootstrap_checkout\"\n );\n }\n return { productId: product.id };\n }\n if (\n product.pricingMode !== \"fixed\" ||\n !(\"quantity\" in item) ||\n (product.minimumQuantity !== null &&\n item.quantity < product.minimumQuantity) ||\n (product.maximumQuantity !== null &&\n item.quantity > product.maximumQuantity) ||\n (product.inventoryQuantity !== null &&\n item.quantity > product.inventoryQuantity)\n ) {\n invalidInput(\n \"Selected Product quantity is invalid.\",\n \"bootstrap_checkout\"\n );\n }\n return { productId: product.id, quantity: item.quantity };\n }\n\n function createCheckoutItems(\n catalog: LockerverseCatalog,\n selection: LockerverseCheckoutSelectionItem[]\n ): LockerverseCheckoutItem[] {\n return selection.map((item) => {\n const product = catalog.products.find(\n (candidate) => candidate.slug === item.productSlug\n );\n if (!product) {\n invalidInput(\"Selected Product is unavailable.\", \"bootstrap_checkout\");\n }\n return \"amountCents\" in item\n ? createAmountCheckoutItem(product, item.amountCents)\n : createFixedCheckoutItem(product, item);\n });\n }\n\n function createPreparedCheckout(\n quote: ReturnType<typeof parseCheckoutQuote>,\n items: LockerverseCheckoutItem[],\n pricing: LockerverseCheckoutPricingInput,\n context: OperationErrorContext\n ): LockerversePreparedCheckout {\n if (!catalogPublishableKey) {\n throw new LockerverseSdkError({\n ...context,\n message: \"Load the Lockerverse widget before calculating a checkout.\",\n reportable: false,\n });\n }\n const { connectedAccountId, ...checkoutQuote } = quote;\n return clonePreparedCheckout(\n deepFreeze({\n ...checkoutQuote,\n authoritative: true as const,\n items,\n payment: {\n connectedAccountId,\n currency: \"usd\" as const,\n publishableKey: catalogPublishableKey,\n },\n paymentOption: quote.paymentOption,\n paymentReference: globalThis.crypto.randomUUID(),\n pricing,\n })\n );\n }\n\n function normalizeCalculateTotalInput(input: unknown) {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n invalidInput(\"Checkout selection is invalid.\", \"calculate_total\");\n }\n const { items, ...pricingInput } = input as Record<string, unknown>;\n try {\n return {\n items: parseCheckoutItems(items),\n pricing: normalizePricingInput(pricingInput, \"calculate_total\"),\n };\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw error;\n }\n invalidInput(\"Checkout selection is invalid.\", \"calculate_total\");\n }\n }\n\n function normalizeQuote(input: unknown) {\n try {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n throw new TypeError(\"Invalid quote.\");\n }\n const quoteInput = input as LockerverseCheckoutQuote;\n if (\n quoteInput.authoritative !== true ||\n typeof quoteInput.paymentReference !== \"string\" ||\n quoteInput.paymentReference.length === 0 ||\n quoteInput.payment.currency !== \"usd\" ||\n quoteInput.payment.publishableKey !== catalogPublishableKey\n ) {\n throw new TypeError(\"Invalid quote.\");\n }\n const parsed = parseCheckoutQuote({\n ...quoteInput,\n connectedAccountId: quoteInput.payment.connectedAccountId,\n });\n const { connectedAccountId, ...quote } = parsed;\n return deepFreeze({\n ...quote,\n authoritative: true as const,\n payment: {\n connectedAccountId,\n currency: \"usd\" as const,\n publishableKey: catalogPublishableKey,\n },\n paymentOption: parsed.paymentOption,\n paymentReference: quoteInput.paymentReference,\n });\n } catch {\n invalidInput(\n \"Lockerverse payment submission is invalid.\",\n \"submit_payment\",\n \"payment_submit_failed\"\n );\n }\n }\n\n function normalizeSubmitPaymentInput(input: unknown) {\n try {\n if (!(input && typeof input === \"object\") || Array.isArray(input)) {\n throw new TypeError(\"Invalid payment input.\");\n }\n const { checkout, submission: submissionInput } = input as Record<\n string,\n unknown\n >;\n if (\n !(checkout && typeof checkout === \"object\") ||\n Array.isArray(checkout)\n ) {\n throw new TypeError(\"Invalid prepared checkout.\");\n }\n const checkoutInput = checkout as Record<string, unknown>;\n const items = parseCheckoutItems(checkoutInput.items);\n const pricing = normalizePricingInput(\n checkoutInput.pricing,\n \"submit_payment\"\n );\n const quote = normalizeQuote(checkoutInput);\n const submission = parsePaymentSubmission(submissionInput);\n if (quote.totalCents > 0 && !submission.confirmationToken) {\n invalidInput(\n \"Stripe confirmation is required for a paid checkout.\",\n \"submit_payment\",\n \"payment_submit_failed\"\n );\n }\n const email = submission.email.trim().toLowerCase();\n if (!email || email !== pricing.email) {\n invalidInput(\n \"Payment email must match the current checkout quote.\",\n \"submit_payment\"\n );\n }\n return {\n items,\n pricing,\n quote,\n submission: { ...submission, email },\n };\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw error;\n }\n invalidInput(\n \"Lockerverse payment submission is invalid.\",\n \"submit_payment\",\n \"payment_submit_failed\"\n );\n }\n }\n\n return {\n async bootstrapCheckout(input) {\n const { pricing, selection } = normalizeBootstrapCheckoutInput(input);\n const context = {\n code: \"checkout_bootstrap_failed\" as const,\n message: \"Lockerverse returned an invalid checkout bootstrap.\",\n operation: \"bootstrap_checkout\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/bootstrap`,\n {\n body: JSON.stringify({ ...pricing, items: selection }),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n },\n parseCheckoutBootstrap,\n {\n ...context,\n message:\n \"Unable to bootstrap the Lockerverse checkout because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to bootstrap the Lockerverse checkout (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n const catalog = deepFreeze(createCatalog(response.value.catalog));\n catalogPublishableKey = catalog.payment.publishableKey;\n const checkoutItems = createCheckoutItems(catalog, selection);\n const checkoutPricing = {\n ...pricing,\n includeServiceFee:\n pricing.includeServiceFee ?? catalog.widget.fields.serviceFee,\n };\n return deepFreeze({\n catalog: cloneCatalog(catalog),\n checkout: createPreparedCheckout(\n response.value.quote,\n checkoutItems,\n checkoutPricing,\n context\n ),\n });\n } catch (error) {\n failOperation(error, context);\n }\n },\n async calculateTotal(input) {\n const { items, pricing } = normalizeCalculateTotalInput(input);\n const context = {\n code: \"total_calculation_failed\" as const,\n message: \"Lockerverse returned an invalid checkout total.\",\n operation: \"calculate_total\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/quote`,\n {\n body: JSON.stringify({ ...pricing, items }),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n },\n parseCheckoutQuote,\n {\n ...context,\n message:\n \"Unable to calculate the Lockerverse checkout total because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to calculate the Lockerverse checkout total (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n return createPreparedCheckout(response.value, items, pricing, context);\n } catch (error) {\n failOperation(error, context);\n }\n },\n async getPaymentStatus(paymentReference) {\n if (typeof paymentReference !== \"string\" || !paymentReference.trim()) {\n invalidInput(\n \"Provide a payment reference to recover its status.\",\n \"get_payment_status\"\n );\n }\n const normalizedReference = paymentReference.trim();\n const context = {\n code: \"payment_status_failed\" as const,\n message: \"Lockerverse returned an invalid payment status.\",\n operation: \"get_payment_status\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/${encodeURIComponent(normalizedReference)}/status`,\n undefined,\n parsePaymentResult,\n {\n ...context,\n message:\n \"Unable to recover the Lockerverse payment status because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to recover the Lockerverse payment status (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n if (response.value.paymentReference !== normalizedReference) {\n throw new LockerverseSdkError({ ...context, reportable: true });\n }\n return clonePaymentResult(response.value);\n } catch (error) {\n failOperation(error, context);\n }\n },\n async load() {\n const context = {\n code: \"widget_load_failed\" as const,\n message: \"Lockerverse returned an invalid widget catalog.\",\n operation: \"load_widget\" as const,\n };\n try {\n const response = await requestJson(\n `${apiBaseUrl}/v2/community/${communitySlug}/payment-widgets/${widgetSlug}`,\n undefined,\n parsePublicWidget,\n {\n ...context,\n message:\n \"Unable to load Lockerverse widget because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to load Lockerverse widget (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n const catalog = deepFreeze(createCatalog(response.value));\n catalogPublishableKey = catalog.payment.publishableKey;\n return cloneCatalog(catalog);\n } catch (error) {\n failOperation(error, context);\n }\n },\n async submitPayment(input) {\n const { items, pricing, quote, submission } =\n normalizeSubmitPaymentInput(input);\n const context = {\n code: \"payment_submit_failed\" as const,\n message: \"Lockerverse returned an invalid payment confirmation.\",\n operation: \"submit_payment\" as const,\n };\n try {\n const response = await requestJson(\n `${checkoutBaseUrl}/confirm`,\n {\n body: JSON.stringify({\n ...(submission.confirmationToken\n ? { confirmationToken: submission.confirmationToken }\n : {}),\n customFieldAnswers: submission.customFieldAnswers,\n email: submission.email,\n expectedAmountCents: quote.amountCents,\n expectedAppliedDiscount: quote.appliedDiscount,\n expectedConnectedAccountId: quote.payment.connectedAccountId,\n expectedDiscountableSubtotalCents:\n quote.discountableSubtotalCents,\n expectedDiscountCents: quote.discountCents,\n expectedServiceFeeCents: quote.serviceFeeCents,\n expectedSubtotalCents: quote.subtotalCents,\n expectedTipCents: quote.tipCents,\n expectedTotalCents: quote.totalCents,\n ...pricing,\n items,\n memberId: submission.memberId,\n merchSize: submission.merchSize,\n metadata: submission.metadata,\n paymentReference: quote.paymentReference,\n phone: submission.phone,\n quoteContractVersion: 1,\n shipping: submission.shipping,\n }),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n },\n parsePaymentResult,\n {\n ...context,\n message:\n \"Unable to submit the Lockerverse payment because the request failed.\",\n report: false,\n },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to submit the Lockerverse payment (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n if (response.value.paymentReference !== quote.paymentReference) {\n throw new LockerverseSdkError({ ...context, reportable: true });\n }\n return clonePaymentResult(response.value);\n } catch (error) {\n failOperation(error, context, true);\n }\n },\n };\n}\n"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -26,7 +26,7 @@ type LockerverseCatalog = {
26
26
  };
27
27
  type LockerverseCommunityBranding = {
28
28
  accentColor: string;
29
- imageUrl: string;
29
+ imageUrl: string | null;
30
30
  name: string;
31
31
  };
32
32
  type LockerverseCheckoutPricingPolicy = {
package/dist/types.js CHANGED
@@ -1,2 +1,2 @@
1
- const e=`0.2.59`;var t=class extends Error{code;operation;reportable;recoveryRecommended;sdkVersion;status;constructor({code:t,message:n,operation:r,reportable:i,recoveryRecommended:a=!1,status:o}){super(n),this.name=`LockerverseSdkError`,this.code=t,this.operation=r,this.reportable=i,this.recoveryRecommended=a,this.sdkVersion=e,this.status=o}};export{t as n,e as t};
1
+ const e=`0.2.61`;var t=class extends Error{code;operation;reportable;recoveryRecommended;sdkVersion;status;constructor({code:t,message:n,operation:r,reportable:i,recoveryRecommended:a=!1,status:o}){super(n),this.name=`LockerverseSdkError`,this.code=t,this.operation=r,this.reportable=i,this.recoveryRecommended=a,this.sdkVersion=e,this.status=o}};export{t as n,e as t};
2
2
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["packageMetadata.version"],"sources":["../package.json","../src/types.ts"],"sourcesContent":["","import packageMetadata from \"../package.json\" with { type: \"json\" };\nimport type { GeneratedPaymentResult } from \"./generated/public-contract-types.ts\";\n\nexport type LockerversePaymentOption = \"one-time\" | \"monthly\" | \"annually\";\nexport type LockerverseEnvironment = \"development\" | \"production\";\n\nexport const LOCKERVERSE_SDK_VERSION = packageMetadata.version;\n\nexport type LockerverseProduct = {\n id: string;\n listingId: string;\n slug: string;\n name: string;\n description: string | null;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n amountCents: number | null;\n minimumAmountCents: number | null;\n minimumQuantity: number | null;\n maximumQuantity: number | null;\n inventoryQuantity: number | null;\n acceptsDiscounts: boolean;\n};\n\nexport type LockerverseCatalog = {\n community: LockerverseCommunityBranding | null;\n payment: LockerversePaymentConfiguration;\n pricingPolicy: LockerverseCheckoutPricingPolicy;\n products: LockerverseProduct[];\n widget: LockerverseWidgetConfiguration;\n};\n\nexport type LockerverseCommunityBranding = {\n accentColor: string;\n imageUrl: string;\n name: string;\n};\n\nexport type LockerverseCheckoutPricingPolicy = {\n currency: \"usd\";\n serviceFeeRateBasisPoints: number;\n};\n\nexport type LockerversePaymentConfiguration = {\n currency: \"usd\";\n publishableKey: string;\n};\n\nexport type LockerverseCheckoutPaymentConfiguration =\n LockerversePaymentConfiguration & {\n connectedAccountId: string | null;\n };\n\nexport type LockerverseWidgetFields = {\n memberId: boolean;\n merchSize: boolean;\n phone: boolean;\n promoCode: boolean;\n serviceFee: boolean;\n shipping: boolean;\n tipping: boolean;\n};\n\nexport type LockerverseCustomFieldOption = { id: string; label: string };\n\ntype LockerverseCustomFieldBase = {\n id: string;\n label: string;\n required: boolean;\n};\n\nexport type LockerverseTextCustomField = LockerverseCustomFieldBase & {\n type: \"text\" | \"textarea\";\n};\n\nexport type LockerverseSingleOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"radio\" | \"select\";\n};\n\nexport type LockerverseMultiOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"checkboxes\" | \"multi_select\";\n};\n\nexport type LockerverseCustomField =\n | LockerverseTextCustomField\n | LockerverseSingleOptionCustomField\n | LockerverseMultiOptionCustomField;\n\nexport type LockerverseCustomFieldAnswerValue<\n Field extends LockerverseCustomField,\n> = Field extends LockerverseMultiOptionCustomField ? string[] : string;\n\nexport type LockerverseCustomFieldAnswer<\n Field extends LockerverseCustomField = LockerverseCustomField,\n> = Field extends LockerverseCustomField\n ? { fieldId: Field[\"id\"]; value: LockerverseCustomFieldAnswerValue<Field> }\n : never;\n\nexport type LockerverseWidgetConfiguration = {\n customFields: LockerverseCustomField[];\n description: string | null;\n fields: LockerverseWidgetFields;\n id: string;\n name: string;\n showCommunityBranding: boolean;\n title: string | null;\n};\n\nexport type LockerverseSdkErrorCode =\n | \"checkout_bootstrap_failed\"\n | \"widget_load_failed\"\n | \"signup_load_failed\"\n | \"signup_submit_failed\"\n | \"total_calculation_failed\"\n | \"payment_submit_failed\"\n | \"payment_status_failed\"\n | \"invalid_selection\";\n\nexport type LockerverseSdkOperation =\n | \"bootstrap_checkout\"\n | \"load_widget\"\n | \"load_signup\"\n | \"submit_signup\"\n | \"calculate_total\"\n | \"submit_payment\"\n | \"get_payment_status\"\n | \"update_selection\";\n\nexport class LockerverseSdkError extends Error {\n readonly code: LockerverseSdkErrorCode;\n readonly operation: LockerverseSdkOperation;\n readonly reportable: boolean;\n readonly recoveryRecommended: boolean;\n readonly sdkVersion: string;\n readonly status: number | undefined;\n\n constructor({\n code,\n message,\n operation,\n reportable,\n recoveryRecommended = false,\n status,\n }: {\n code: LockerverseSdkErrorCode;\n message: string;\n operation: LockerverseSdkOperation;\n reportable: boolean;\n recoveryRecommended?: boolean;\n status?: number;\n }) {\n super(message);\n this.name = \"LockerverseSdkError\";\n this.code = code;\n this.operation = operation;\n this.reportable = reportable;\n this.recoveryRecommended = recoveryRecommended;\n this.sdkVersion = LOCKERVERSE_SDK_VERSION;\n this.status = status;\n }\n}\n\nexport type LockerverseCheckoutLineItem = {\n productId: string;\n productName: string;\n listingId: string;\n listingSlug: string;\n acceptsDiscounts: boolean;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n quantity: number;\n unitAmountCents: number;\n subtotalCents: number;\n};\n\nexport type LockerverseAppliedDiscount = {\n percentageOff: number;\n source: \"email_list\" | \"promo_code\";\n};\n\nexport type LockerverseCheckoutAmounts = {\n amountCents: number;\n discountableSubtotalCents: number;\n discountCents: number;\n serviceFeeCents: number;\n subtotalCents: number;\n tipCents: number;\n totalCents: number;\n};\n\nexport type LockerverseCheckoutQuote = LockerverseCheckoutAmounts & {\n appliedDiscount: LockerverseAppliedDiscount | null;\n authoritative: true;\n paymentReference: string;\n payment: LockerverseCheckoutPaymentConfiguration;\n paymentOption: LockerversePaymentOption;\n lineItems: LockerverseCheckoutLineItem[];\n};\n\nexport type LockerverseCheckoutPricingInput = {\n email?: string;\n includeServiceFee?: boolean;\n promoCode?: string;\n tipCents?: number;\n};\n\nexport type LockerversePaymentStatus =\n | \"action_required\"\n | \"failed\"\n | \"pending\"\n | \"success\";\n\nexport type LockerversePaymentResult = {\n checkoutId: string;\n paymentReference: string;\n checkoutStatus: LockerversePaymentStatus;\n clientSecret: string | null;\n paymentRequired: boolean;\n requiresAction: boolean;\n status: string | null;\n};\n\ntype AssertPaymentContract<T extends true> = T;\ntype _PaymentResultMatchesGenerated = AssertPaymentContract<\n LockerversePaymentResult extends GeneratedPaymentResult\n ? GeneratedPaymentResult extends LockerversePaymentResult\n ? true\n : false\n : false\n>;\n\nexport type LockerverseShipping = {\n address: {\n city: string;\n country: string;\n line1: string;\n line2?: string;\n postal_code: string;\n state: string;\n };\n name: string;\n};\n\nexport type LockerversePaymentSubmission = {\n confirmationToken?: string;\n customFieldAnswers?: LockerverseCustomFieldAnswer[];\n email: string;\n memberId?: string;\n merchSize?: \"XS\" | \"S\" | \"M\" | \"L\" | \"XL\" | \"XXL\" | \"XXXL\";\n metadata?: Record<string, string>;\n phone?: string;\n shipping?: LockerverseShipping;\n};\n\nexport type LockerverseCheckoutItem =\n | { productId: string; quantity: number }\n | { productId: string; amountCents: number }\n | { productId: string };\n\nexport type LockerverseCheckoutSelectionItem =\n | { productSlug: string; quantity: number }\n | { productSlug: string; amountCents: number }\n | { productSlug: string };\n\nexport type LockerverseBootstrapCheckoutInput =\n LockerverseCheckoutPricingInput & {\n items: LockerverseCheckoutSelectionItem[];\n };\n\nexport type LockerverseCalculateTotalInput = LockerverseCheckoutPricingInput & {\n items: LockerverseCheckoutItem[];\n};\n\nexport type LockerversePreparedCheckout = Readonly<\n LockerverseCheckoutQuote & {\n items: readonly LockerverseCheckoutItem[];\n pricing: Readonly<LockerverseCheckoutPricingInput>;\n }\n>;\n\nexport type LockerverseCheckoutBootstrap = Readonly<{\n catalog: LockerverseCatalog;\n checkout: LockerversePreparedCheckout;\n}>;\n\nexport type LockerverseSubmitPaymentInput = {\n checkout: LockerversePreparedCheckout;\n submission: LockerversePaymentSubmission;\n};\n\ntype CreateLockerverseWidgetBaseOptions = {\n communitySlug: string;\n fetch?: typeof globalThis.fetch;\n onError?: (error: LockerverseSdkError) => void;\n requestTimeoutMs?: number;\n sentryDsn?: string | null;\n widgetSlug: string;\n};\n\nexport type CreateLockerverseWidgetOptions =\n CreateLockerverseWidgetBaseOptions & {\n apiBaseUrl?: string;\n environment?: LockerverseEnvironment;\n };\n\nexport type LockerverseCheckoutClient = {\n bootstrapCheckout: (\n input: LockerverseBootstrapCheckoutInput\n ) => Promise<LockerverseCheckoutBootstrap>;\n calculateTotal: (\n input: LockerverseCalculateTotalInput\n ) => Promise<LockerversePreparedCheckout>;\n getPaymentStatus: (\n paymentReference: string\n ) => Promise<LockerversePaymentResult>;\n load: () => Promise<LockerverseCatalog>;\n submitPayment: (\n input: LockerverseSubmitPaymentInput\n ) => Promise<LockerversePaymentResult>;\n};\n"],"mappings":"ACMA,MAAa,EAA0BA,SA4HvC,IAAa,EAAb,cAAyC,KAAM,CAC7C,KACA,UACA,WACA,oBACA,WACA,OAEA,YAAY,CACV,OACA,UACA,YACA,aACA,sBAAsB,GACtB,UAQC,CACD,MAAM,CAAO,EACb,KAAK,KAAO,sBACZ,KAAK,KAAO,EACZ,KAAK,UAAY,EACjB,KAAK,WAAa,EAClB,KAAK,oBAAsB,EAC3B,KAAK,WAAa,EAClB,KAAK,OAAS,CAChB,CACF"}
1
+ {"version":3,"file":"types.js","names":["packageMetadata.version"],"sources":["../package.json","../src/types.ts"],"sourcesContent":["","import packageMetadata from \"../package.json\" with { type: \"json\" };\nimport type { GeneratedPaymentResult } from \"./generated/public-contract-types.ts\";\n\nexport type LockerversePaymentOption = \"one-time\" | \"monthly\" | \"annually\";\nexport type LockerverseEnvironment = \"development\" | \"production\";\n\nexport const LOCKERVERSE_SDK_VERSION = packageMetadata.version;\n\nexport type LockerverseProduct = {\n id: string;\n listingId: string;\n slug: string;\n name: string;\n description: string | null;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n amountCents: number | null;\n minimumAmountCents: number | null;\n minimumQuantity: number | null;\n maximumQuantity: number | null;\n inventoryQuantity: number | null;\n acceptsDiscounts: boolean;\n};\n\nexport type LockerverseCatalog = {\n community: LockerverseCommunityBranding | null;\n payment: LockerversePaymentConfiguration;\n pricingPolicy: LockerverseCheckoutPricingPolicy;\n products: LockerverseProduct[];\n widget: LockerverseWidgetConfiguration;\n};\n\nexport type LockerverseCommunityBranding = {\n accentColor: string;\n imageUrl: string | null;\n name: string;\n};\n\nexport type LockerverseCheckoutPricingPolicy = {\n currency: \"usd\";\n serviceFeeRateBasisPoints: number;\n};\n\nexport type LockerversePaymentConfiguration = {\n currency: \"usd\";\n publishableKey: string;\n};\n\nexport type LockerverseCheckoutPaymentConfiguration =\n LockerversePaymentConfiguration & {\n connectedAccountId: string | null;\n };\n\nexport type LockerverseWidgetFields = {\n memberId: boolean;\n merchSize: boolean;\n phone: boolean;\n promoCode: boolean;\n serviceFee: boolean;\n shipping: boolean;\n tipping: boolean;\n};\n\nexport type LockerverseCustomFieldOption = { id: string; label: string };\n\ntype LockerverseCustomFieldBase = {\n id: string;\n label: string;\n required: boolean;\n};\n\nexport type LockerverseTextCustomField = LockerverseCustomFieldBase & {\n type: \"text\" | \"textarea\";\n};\n\nexport type LockerverseSingleOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"radio\" | \"select\";\n};\n\nexport type LockerverseMultiOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"checkboxes\" | \"multi_select\";\n};\n\nexport type LockerverseCustomField =\n | LockerverseTextCustomField\n | LockerverseSingleOptionCustomField\n | LockerverseMultiOptionCustomField;\n\nexport type LockerverseCustomFieldAnswerValue<\n Field extends LockerverseCustomField,\n> = Field extends LockerverseMultiOptionCustomField ? string[] : string;\n\nexport type LockerverseCustomFieldAnswer<\n Field extends LockerverseCustomField = LockerverseCustomField,\n> = Field extends LockerverseCustomField\n ? { fieldId: Field[\"id\"]; value: LockerverseCustomFieldAnswerValue<Field> }\n : never;\n\nexport type LockerverseWidgetConfiguration = {\n customFields: LockerverseCustomField[];\n description: string | null;\n fields: LockerverseWidgetFields;\n id: string;\n name: string;\n showCommunityBranding: boolean;\n title: string | null;\n};\n\nexport type LockerverseSdkErrorCode =\n | \"checkout_bootstrap_failed\"\n | \"widget_load_failed\"\n | \"signup_load_failed\"\n | \"signup_submit_failed\"\n | \"total_calculation_failed\"\n | \"payment_submit_failed\"\n | \"payment_status_failed\"\n | \"invalid_selection\";\n\nexport type LockerverseSdkOperation =\n | \"bootstrap_checkout\"\n | \"load_widget\"\n | \"load_signup\"\n | \"submit_signup\"\n | \"calculate_total\"\n | \"submit_payment\"\n | \"get_payment_status\"\n | \"update_selection\";\n\nexport class LockerverseSdkError extends Error {\n readonly code: LockerverseSdkErrorCode;\n readonly operation: LockerverseSdkOperation;\n readonly reportable: boolean;\n readonly recoveryRecommended: boolean;\n readonly sdkVersion: string;\n readonly status: number | undefined;\n\n constructor({\n code,\n message,\n operation,\n reportable,\n recoveryRecommended = false,\n status,\n }: {\n code: LockerverseSdkErrorCode;\n message: string;\n operation: LockerverseSdkOperation;\n reportable: boolean;\n recoveryRecommended?: boolean;\n status?: number;\n }) {\n super(message);\n this.name = \"LockerverseSdkError\";\n this.code = code;\n this.operation = operation;\n this.reportable = reportable;\n this.recoveryRecommended = recoveryRecommended;\n this.sdkVersion = LOCKERVERSE_SDK_VERSION;\n this.status = status;\n }\n}\n\nexport type LockerverseCheckoutLineItem = {\n productId: string;\n productName: string;\n listingId: string;\n listingSlug: string;\n acceptsDiscounts: boolean;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n quantity: number;\n unitAmountCents: number;\n subtotalCents: number;\n};\n\nexport type LockerverseAppliedDiscount = {\n percentageOff: number;\n source: \"email_list\" | \"promo_code\";\n};\n\nexport type LockerverseCheckoutAmounts = {\n amountCents: number;\n discountableSubtotalCents: number;\n discountCents: number;\n serviceFeeCents: number;\n subtotalCents: number;\n tipCents: number;\n totalCents: number;\n};\n\nexport type LockerverseCheckoutQuote = LockerverseCheckoutAmounts & {\n appliedDiscount: LockerverseAppliedDiscount | null;\n authoritative: true;\n paymentReference: string;\n payment: LockerverseCheckoutPaymentConfiguration;\n paymentOption: LockerversePaymentOption;\n lineItems: LockerverseCheckoutLineItem[];\n};\n\nexport type LockerverseCheckoutPricingInput = {\n email?: string;\n includeServiceFee?: boolean;\n promoCode?: string;\n tipCents?: number;\n};\n\nexport type LockerversePaymentStatus =\n | \"action_required\"\n | \"failed\"\n | \"pending\"\n | \"success\";\n\nexport type LockerversePaymentResult = {\n checkoutId: string;\n paymentReference: string;\n checkoutStatus: LockerversePaymentStatus;\n clientSecret: string | null;\n paymentRequired: boolean;\n requiresAction: boolean;\n status: string | null;\n};\n\ntype AssertPaymentContract<T extends true> = T;\ntype _PaymentResultMatchesGenerated = AssertPaymentContract<\n LockerversePaymentResult extends GeneratedPaymentResult\n ? GeneratedPaymentResult extends LockerversePaymentResult\n ? true\n : false\n : false\n>;\n\nexport type LockerverseShipping = {\n address: {\n city: string;\n country: string;\n line1: string;\n line2?: string;\n postal_code: string;\n state: string;\n };\n name: string;\n};\n\nexport type LockerversePaymentSubmission = {\n confirmationToken?: string;\n customFieldAnswers?: LockerverseCustomFieldAnswer[];\n email: string;\n memberId?: string;\n merchSize?: \"XS\" | \"S\" | \"M\" | \"L\" | \"XL\" | \"XXL\" | \"XXXL\";\n metadata?: Record<string, string>;\n phone?: string;\n shipping?: LockerverseShipping;\n};\n\nexport type LockerverseCheckoutItem =\n | { productId: string; quantity: number }\n | { productId: string; amountCents: number }\n | { productId: string };\n\nexport type LockerverseCheckoutSelectionItem =\n | { productSlug: string; quantity: number }\n | { productSlug: string; amountCents: number }\n | { productSlug: string };\n\nexport type LockerverseBootstrapCheckoutInput =\n LockerverseCheckoutPricingInput & {\n items: LockerverseCheckoutSelectionItem[];\n };\n\nexport type LockerverseCalculateTotalInput = LockerverseCheckoutPricingInput & {\n items: LockerverseCheckoutItem[];\n};\n\nexport type LockerversePreparedCheckout = Readonly<\n LockerverseCheckoutQuote & {\n items: readonly LockerverseCheckoutItem[];\n pricing: Readonly<LockerverseCheckoutPricingInput>;\n }\n>;\n\nexport type LockerverseCheckoutBootstrap = Readonly<{\n catalog: LockerverseCatalog;\n checkout: LockerversePreparedCheckout;\n}>;\n\nexport type LockerverseSubmitPaymentInput = {\n checkout: LockerversePreparedCheckout;\n submission: LockerversePaymentSubmission;\n};\n\ntype CreateLockerverseWidgetBaseOptions = {\n communitySlug: string;\n fetch?: typeof globalThis.fetch;\n onError?: (error: LockerverseSdkError) => void;\n requestTimeoutMs?: number;\n sentryDsn?: string | null;\n widgetSlug: string;\n};\n\nexport type CreateLockerverseWidgetOptions =\n CreateLockerverseWidgetBaseOptions & {\n apiBaseUrl?: string;\n environment?: LockerverseEnvironment;\n };\n\nexport type LockerverseCheckoutClient = {\n bootstrapCheckout: (\n input: LockerverseBootstrapCheckoutInput\n ) => Promise<LockerverseCheckoutBootstrap>;\n calculateTotal: (\n input: LockerverseCalculateTotalInput\n ) => Promise<LockerversePreparedCheckout>;\n getPaymentStatus: (\n paymentReference: string\n ) => Promise<LockerversePaymentResult>;\n load: () => Promise<LockerverseCatalog>;\n submitPayment: (\n input: LockerverseSubmitPaymentInput\n ) => Promise<LockerversePaymentResult>;\n};\n"],"mappings":"ACMA,MAAa,EAA0BA,SA4HvC,IAAa,EAAb,cAAyC,KAAM,CAC7C,KACA,UACA,WACA,oBACA,WACA,OAEA,YAAY,CACV,OACA,UACA,YACA,aACA,sBAAsB,GACtB,UAQC,CACD,MAAM,CAAO,EACb,KAAK,KAAO,sBACZ,KAAK,KAAO,EACZ,KAAK,UAAY,EACjB,KAAK,WAAa,EAClB,KAAK,oBAAsB,EAC3B,KAAK,WAAa,EAClB,KAAK,OAAS,CAChB,CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lockerverse/sdk",
3
- "version": "0.2.59",
3
+ "version": "0.2.61",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/Lockerverse/lockerverse-sdk.git",