@lockerverse/sdk 0.2.20 → 0.2.24

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/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Lockerverse SDK
2
2
 
3
- Stateless browser client for Lockerverse checkout and signup APIs. It validates
4
- public inputs and backend responses, returns immutable snapshots, and never
5
- renders UI or owns host application state.
3
+ Small, stateless browser clients for Lockerverse checkout and signup APIs. The
4
+ checkout client validates public inputs and responses but does not render UI or
5
+ own payment state. React applications should use `@lockerverse/react` for the
6
+ complete payment form.
6
7
 
7
8
  ## Checkout
8
9
 
@@ -12,69 +13,44 @@ import { createLockerverseCheckoutClient } from "@lockerverse/sdk/checkout";
12
13
  const client = createLockerverseCheckoutClient({
13
14
  communitySlug: "auburn",
14
15
  widgetSlug: "auburn-tailgate-party",
15
- onError(error) {
16
- console.error(error.code, error.operation);
17
- },
18
16
  });
19
17
 
20
18
  const catalog = await client.load();
21
-
22
- // The host owns Product selection. Use IDs from the current catalog.
23
- const items = [
24
- { productId: catalog.products[0].id, quantity: 2 },
25
- ];
26
- const pricing = {
19
+ const session = await client.createSession({
27
20
  email: "customer@example.com",
28
- includeServiceFee: true,
21
+ items: [{ productId: catalog.products[0].id, quantity: 2 }],
22
+ requestKey: crypto.randomUUID(),
23
+ returnUrl: "https://example.com/payment-complete",
29
24
  tipCents: 500,
30
- };
31
-
32
- // Lockerverse resolves current prices, availability, discounts, fees, and the
33
- // connected Stripe account authoritatively.
34
- const checkout = await client.calculateTotal({ ...pricing, items });
35
-
36
- // Render Stripe Elements with checkout.payment.publishableKey,
37
- // checkout.payment.connectedAccountId, and checkout.totalCents. The prepared
38
- // checkout also binds the normalized items and pricing used for this total.
39
- const payment = await client.submitPayment({
40
- checkout,
41
- submission: {
42
- confirmationToken: "ctoken_...",
43
- customFieldAnswers: [
44
- { fieldId: "guest-name", value: "Ada Lovelace" },
45
- { fieldId: "interests", value: ["meetups", "merch"] },
46
- ],
47
- email: "customer@example.com",
48
- },
49
25
  });
50
26
 
51
- // Safe after a refresh or an interrupted confirmation response.
52
- const recovered = await client.getPaymentStatus(checkout.paymentReference);
53
- ```
27
+ await client.updateSessionDiscount({
28
+ paymentReference: session.paymentReference,
29
+ promoCode: "FREE",
30
+ });
31
+
32
+ await client.updateSessionPricing({
33
+ includeServiceFee: false,
34
+ paymentReference: session.paymentReference,
35
+ tipCents: 500,
36
+ });
54
37
 
55
- `createLockerverseCheckoutClient()` exposes only `load`, `calculateTotal`,
56
- `submitPayment`, and `getPaymentStatus`. It has no selection store, lifecycle
57
- state, subscriptions, or Stripe state. React applications can use
58
- `@lockerverse/react` for the complete payment UI and orchestration.
38
+ const status = await client.getPaymentStatus(session.paymentReference);
39
+ ```
59
40
 
60
- Fixed prices in the catalog are display data. `calculateTotal()` sends Product
61
- IDs and selections to Lockerverse, which resolves the payable amount. The host
62
- returns them together as one immutable prepared checkout. Pass that prepared
63
- checkout to `submitPayment()` so a host cannot accidentally submit different
64
- inputs from the ones Lockerverse quoted. It owns one stable payment reference
65
- so Lockerverse can prevent duplicate checkout creation and recover ambiguous
66
- outcomes.
41
+ The public checkout surface is deliberately narrow: `load`, `createSession`,
42
+ `updateSessionDetails`, `updateSessionDiscount`, `updateSessionPricing`, and
43
+ `getPaymentStatus`. Lockerverse resolves current prices, availability,
44
+ discounts, service fees, tips, the connected Stripe account, and the final
45
+ total on the server. Stripe Checkout owns payment state.
67
46
 
68
- If `submitPayment()` throws an error with `recoveryRecommended: true`, the
69
- request may still have reached Lockerverse. Query `getPaymentStatus()` with the
70
- prepared checkout's payment reference before allowing another payment. Other
71
- failures are definitive and do not require recovery.
47
+ The SDK never accepts a Stripe secret key. The shared public key is selected by
48
+ environment; the Session response identifies the community connected account.
72
49
 
73
- ## Runtime configuration
50
+ ## Development environment
74
51
 
75
- Production is the default endpoint and environment. A custom endpoint must name
76
- its environment so a development host cannot silently select live Stripe
77
- configuration:
52
+ Production is the default. A custom endpoint must explicitly name its
53
+ environment:
78
54
 
79
55
  ```ts
80
56
  const client = createLockerverseCheckoutClient({
@@ -85,11 +61,6 @@ const client = createLockerverseCheckoutClient({
85
61
  });
86
62
  ```
87
63
 
88
- Custom endpoints must be HTTP(S) URLs without credentials, query strings, or
89
- fragments. HTTPS is required except for literal `localhost`, `127.0.0.1`, and
90
- `[::1]` endpoints in development. Requests have a 20-second deadline by
91
- default; override it with a positive `requestTimeoutMs` value.
92
-
93
64
  ## Signup
94
65
 
95
66
  ```ts
@@ -102,43 +73,24 @@ const signup = createLockerverseSignup({
102
73
 
103
74
  const definition = await signup.load();
104
75
  const submission = await signup.submit({
105
- answers: [{ fieldId: "guest-type", value: "student" }],
76
+ answers: [{ fieldId: definition.fields[0].id, value: "student" }],
106
77
  email: "customer@example.com",
107
78
  name: "Ada Lovelace",
108
79
  participantCount: 2,
109
80
  });
110
81
  ```
111
82
 
112
- Signup currently retains its small workflow facade. Its immutable states are
113
- `idle`, `loading`, `ready`, `submitting`, `submitted`, and `error`. When a
114
- submission times out, reuse `recoverableSubmissionReference` with the same
115
- values so Lockerverse can return the original submission.
116
-
117
83
  ## Security and observability
118
84
 
119
- - No Stripe or Lockerverse secret is accepted by the public API.
120
- - Successful catalog, quote, confirmation, and status responses are validated
121
- before being returned.
122
- - Public workflow inputs are validated with private Valibot schemas.
123
- - Backend response bodies and validation internals never escape in SDK errors.
124
- - Expected input errors are `reportable: false`; unexpected network and server
125
- failures are `reportable: true`.
126
- - Reportable failures are sent directly to Lockerverse Sentry with allowlisted
127
- workflow context. `sentryDsn: null` disables loading and sending telemetry.
128
- - The Sentry runtime is an isolated failure-only chunk and does not replace or
129
- mutate the host application's Sentry client.
130
- - Stripe's shared publishable key is selected by environment. The authoritative
131
- quote supplies the community's connected account.
132
- - Analytics and auctions are intentionally out of scope.
85
+ - Valibot validates public inputs and backend responses.
86
+ - Backend response bodies and validation internals do not escape in SDK errors.
87
+ - Expected input errors are not reported; unexpected failures can be sent to
88
+ Lockerverse Sentry with allowlisted context.
89
+ - Analytics and auctions remain out of scope.
133
90
 
134
91
  ## Commands
135
92
 
136
- Run these from the repository root:
137
-
138
93
  ```sh
139
94
  pnpm dev:react
140
- pnpm typecheck
141
- pnpm test
142
- pnpm build
143
- pnpm --filter @lockerverse/sdk pack:check
95
+ pnpm check
144
96
  ```
@@ -1,6 +1,6 @@
1
- import { A as LockerverseSingleOptionCustomField, C as LockerversePaymentStatus, D as LockerverseSdkError, E as LockerverseProduct, M as LockerverseTextCustomField, N as LockerverseWidgetConfiguration, O as LockerverseSdkErrorCode, P as LockerverseWidgetFields, S as LockerversePaymentResult, T as LockerversePreparedCheckout, _ as LockerverseCustomFieldOption, a as LockerverseCatalog, b as LockerversePaymentConfiguration, c as LockerverseCheckoutItem, d as LockerverseCheckoutPricingInput, f as LockerverseCheckoutPricingPolicy, g as LockerverseCustomFieldAnswerValue, h as LockerverseCustomFieldAnswer, i as LockerverseCalculateTotalInput, j as LockerverseSubmitPaymentInput, k as LockerverseSdkOperation, l as LockerverseCheckoutLineItem, m as LockerverseCustomField, n as LOCKERVERSE_SDK_VERSION, o as LockerverseCheckoutAmounts, p as LockerverseCheckoutQuote, r as LockerverseAppliedDiscount, s as LockerverseCheckoutClient, t as CreateLockerverseWidgetOptions, u as LockerverseCheckoutPaymentConfiguration, v as LockerverseEnvironment, w as LockerversePaymentSubmission, x as LockerversePaymentOption, y as LockerverseMultiOptionCustomField } from "./types.js";
1
+ import { C as LockerverseSdkError, D as LockerverseTextCustomField, E as LockerverseSingleOptionCustomField, O as LockerverseWidgetConfiguration, S as LockerverseProduct, T as LockerverseSdkOperation, _ as LockerverseMultiOptionCustomField, a as LockerverseCheckoutItem, b as LockerversePaymentResult, c as LockerverseCheckoutSessionDetailsInput, d as LockerverseCreateCheckoutSessionInput, f as LockerverseCustomField, g as LockerverseEnvironment, h as LockerverseCustomFieldOption, i as LockerverseCheckoutClient, k as LockerverseWidgetFields, l as LockerverseCheckoutSessionDiscount, m as LockerverseCustomFieldAnswerValue, n as LOCKERVERSE_SDK_VERSION, o as LockerverseCheckoutPricingPolicy, p as LockerverseCustomFieldAnswer, r as LockerverseCatalog, s as LockerverseCheckoutSession, t as CreateLockerverseWidgetOptions, u as LockerverseCheckoutSessionPricing, v as LockerversePaymentConfiguration, w as LockerverseSdkErrorCode, x as LockerversePaymentStatus, y as LockerversePaymentOption } from "./types.js";
2
2
  //#region src/checkout-client.d.ts
3
3
  declare function createLockerverseCheckoutClient(options: CreateLockerverseWidgetOptions): LockerverseCheckoutClient;
4
4
  //#endregion
5
- export { CreateLockerverseWidgetOptions, LOCKERVERSE_SDK_VERSION, LockerverseAppliedDiscount, LockerverseCalculateTotalInput, LockerverseCatalog, LockerverseCheckoutAmounts, LockerverseCheckoutClient, LockerverseCheckoutItem, LockerverseCheckoutLineItem, LockerverseCheckoutPaymentConfiguration, LockerverseCheckoutPricingInput, LockerverseCheckoutPricingPolicy, LockerverseCheckoutQuote, LockerverseCustomField, LockerverseCustomFieldAnswer, LockerverseCustomFieldAnswerValue, LockerverseCustomFieldOption, LockerverseEnvironment, LockerverseMultiOptionCustomField, LockerversePaymentConfiguration, LockerversePaymentOption, LockerversePaymentResult, LockerversePaymentStatus, LockerversePaymentSubmission, LockerversePreparedCheckout, LockerverseProduct, LockerverseSdkError, LockerverseSdkErrorCode, LockerverseSdkOperation, LockerverseSingleOptionCustomField, LockerverseSubmitPaymentInput, LockerverseTextCustomField, LockerverseWidgetConfiguration, LockerverseWidgetFields, createLockerverseCheckoutClient };
5
+ export { CreateLockerverseWidgetOptions, LOCKERVERSE_SDK_VERSION, LockerverseCatalog, LockerverseCheckoutClient, LockerverseCheckoutItem, LockerverseCheckoutPricingPolicy, LockerverseCheckoutSession, LockerverseCheckoutSessionDetailsInput, LockerverseCheckoutSessionDiscount, LockerverseCheckoutSessionPricing, LockerverseCreateCheckoutSessionInput, LockerverseCustomField, LockerverseCustomFieldAnswer, LockerverseCustomFieldAnswerValue, LockerverseCustomFieldOption, LockerverseEnvironment, LockerverseMultiOptionCustomField, LockerversePaymentConfiguration, LockerversePaymentOption, LockerversePaymentResult, LockerversePaymentStatus, LockerverseProduct, LockerverseSdkError, LockerverseSdkErrorCode, LockerverseSdkOperation, LockerverseSingleOptionCustomField, LockerverseTextCustomField, LockerverseWidgetConfiguration, LockerverseWidgetFields, createLockerverseCheckoutClient };
6
6
  //# sourceMappingURL=checkout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.d.ts","names":[],"sources":["../src/checkout-client.ts"],"mappings":";;iBA0CgB,gCACd,SAAS,iCACR"}
1
+ {"version":3,"file":"checkout.d.ts","names":[],"sources":["../src/checkout-client.ts"],"mappings":";;iBA8CgB,gCACd,SAAS,iCACR"}
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,O as a,S as o,T as s,_ as c,a as l,b as u,c as d,d as f,f as p,g as m,i as h,j as g,k as _,l as v,m as y,n as b,o as x,p as S,r as C,s as w,t as T,v as ee,w as E,x as D,y as O}from"./transport.js";import{n as k,t as A}from"./types.js";const j={development:`pk_test_51O7FkjDHAhgRuLtFHdkXdIe8T5i7rOVaG9PCtDetK3UUVKojVUEKHmQacGzigf9mOX1wz3zSOKoYwFjRcTfML9PU00OjJko2lk`,production:`pk_live_51O7FkjDHAhgRuLtFlzLdxJrwo7F09WCKTlzT9lnBePjOGizWnuijkH9oCkoAddkmBT8ngIuqAPkDiHlPEAH4KXbz00Tm0DaPT4`};function M(e){let t=v(e,`widgetSlug`);return{...t,stripePublishableKey:j[t.environment],widgetSlug:t.resourceSlug,widgetSlugValue:t.resourceSlugValue}}const N=E(t(a({email:t(_()),includeServiceFee:t(p()),promoCode:t(_()),tipCents:t(d(0))}),{})),P=E(a({confirmationToken:x,customFieldAnswers:t(f(h)),email:_(),memberId:t(_()),merchSize:t(s([`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`])),metadata:t(n(_(),_())),phone:t(_())})),F=g([a({amountCents:d(1),productId:x}),a({productId:x,quantity:d(1)})]),I=E(r(f(F),ee(1))),L=s([`one-time`,`monthly`,`annually`]),R=u(d(0)),z={description:w,id:x,inventoryQuantity:R,maxQuantity:R,minimumAmountCents:R,minQuantity:R,name:x,paymentOption:L},B=r(i(`pricingMode`,[o({...z,amountCents:d(0),pricingMode:m(`fixed`)}),o({...z,amountCents:R,pricingMode:m(`custom`)})]),S(({maxQuantity:e,minQuantity:t})=>e===null||t===null||t<=e)),V=o({acceptsDiscounts:t(p(),!1),id:x,product:B,productId:x,slug:x}),H=t(o({memberId:t(p(),!1),merchSize:t(p(),!1),phone:t(p(),!1),promoCode:t(p(),!1),serviceFee:t(p(),!1),shipping:t(p(),!1),tipping:t(p(),!1)}),{}),U=r(o({config:t(o({customFields:l,fields:H})),description:w,id:t(_(),``),name:t(_(),`Lockerverse widget`),pricingPolicy:t(o({currency:t(m(`usd`),`usd`),serviceFeeRateBasisPoints:t(d(0),0)})),products:t(f(V),[]),showCommunityBranding:t(p(),!0),title:w}),e(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}}))),W=u(o({percentageOff:r(D(),y(),O(0),c(100)),source:s([`email_list`,`promo_code`])})),G=o({acceptsDiscounts:p(),listingId:x,listingSlug:x,paymentOption:L,pricingMode:s([`fixed`,`custom`]),productId:x,productName:x,quantity:d(1),subtotalCents:d(0),unitAmountCents:d(0)}),K=o({amountCents:d(0),appliedDiscount:W,connectedAccountId:u(x),discountableSubtotalCents:d(0),discountCents:d(0),lineItems:f(G),paymentOption:L,serviceFeeCents:d(0),subtotalCents:d(0),tipCents:d(0),totalCents:d(0)}),q=o({checkoutId:x,checkoutStatus:s([`action_required`,`failed`,`pending`,`success`]),clientSecret:u(_()),paymentReference:x,requiresAction:p(),status:u(_())}),J=E(K),Y=E(q),X=E(U);function Z(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 te(e,t){let n=e.config?.fields??{};return{payment:{currency:`usd`,publishableKey:t},pricingPolicy:{currency:`usd`,serviceFeeRateBasisPoints:e.pricingPolicy?.serviceFeeRateBasisPoints??0},products:(e.products??[]).map(Z),widget:{customFields:e.config?.customFields??[],description:e.description??null,fields:{memberId:n.memberId??!1,merchSize:n.merchSize??!1,phone:n.phone??!1,promoCode:n.promoCode??!1,serviceFee:n.serviceFee??!1,shipping:n.shipping??!1,tipping:n.tipping??!1},id:e.id??``,name:e.name??`Lockerverse widget`,showCommunityBranding:e.showCommunityBranding??!0,title:e.title??null}}}function ne(e){return $(e)}function re(e){return $(e)}function Q(e){return $(e)}function $(e){return C(structuredClone(e))}function ie(e){let{apiBaseUrl:t,communitySlug:n,communitySlugValue:r,environment:i,fetchImplementation:a,onError:o,requestTimeoutMs:s,sentryDsn:c,stripePublishableKey:l,widgetSlug:u,widgetSlugValue:d}=M(e),f=b({communitySlug:r,environment:i,getContext:()=>({widgetSlug:d}),onError:o,resourceContextName:`lockerverse_widget`,sentryDsn:c}),{requestJson:p}=T(a,f,s),m=`${t}/v2/community/${n}/payment-widgets/${u}/checkout`;function h(e,t,n=`invalid_selection`){throw f(new k({code:n,message:e,operation:t,reportable:!1}))}function g(e,t){return e instanceof k?e:new k({...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 k({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=N(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.`,`calculate_total`);let{items:t,...n}=e;try{return{items:I(t),pricing:v(n,`calculate_total`)}}catch(e){if(e instanceof k)throw e;h(`Checkout selection is invalid.`,`calculate_total`)}}function x(e){try{if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`Invalid quote.`);let t=e;if(t.authoritative!==!0||t.paymentOption!==`one-time`||typeof t.paymentReference!=`string`||t.paymentReference.length===0||t.payment.currency!==`usd`||t.payment.publishableKey!==l)throw TypeError(`Invalid quote.`);let n=J({...t,connectedAccountId:t.payment.connectedAccountId});if(n.paymentOption!==`one-time`)throw TypeError(`Unsupported checkout cadence.`);let{connectedAccountId:r,paymentOption:i,...a}=n;return C({...a,authoritative:!0,payment:{connectedAccountId:r,currency:`usd`,publishableKey:l},paymentOption:`one-time`,paymentReference:t.paymentReference})}catch{h(`Lockerverse payment submission is invalid.`,`submit_payment`,`payment_submit_failed`)}}function S(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=I(r.items),a=v(r.pricing,`submit_payment`),o=x(r),s=P(n),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 k)throw e;h(`Lockerverse payment submission is invalid.`,`submit_payment`,`payment_submit_failed`)}}return{async calculateTotal(e){let{items:t,pricing:n}=y(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 k({...r,message:`Unable to calculate the Lockerverse checkout total (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});if(e.value.paymentOption!==`one-time`)throw new k({...r,message:`Lockerverse returned an unsupported checkout cadence.`,reportable:!0});let{connectedAccountId:i,paymentOption:a,...o}=e.value;return re(C({...o,authoritative:!0,items:t,payment:{connectedAccountId:i,currency:`usd`,publishableKey:l},paymentOption:`one-time`,paymentReference:globalThis.crypto.randomUUID(),pricing:n}))}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 k({...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 k({...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/${u}`,void 0,X,{...e,message:`Unable to load Lockerverse widget because the request failed.`,report:!1},{...e,report:!1});if(!r.ok)throw new k({...e,message:`Unable to load Lockerverse widget (${r.response.status}).`,reportable:r.response.status>=500,status:r.response.status});return ne(C(te(r.value,l)))}catch(t){_(t,e)}},async submitPayment(e){let{items:t,pricing:n,quote:r,submission:i}=S(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({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}),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 k({...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 k({...a,reportable:!0});return Q(e.value)}catch(e){_(e,a,!0)}}}}export{A as LOCKERVERSE_SDK_VERSION,k as LockerverseSdkError,ie as createLockerverseCheckoutClient};
1
+ import{C as e,D as t,E as n,S as r,T as i,_ as a,a as o,b as s,c,d as l,f as u,g as d,h as f,l as p,n as m,o as h,p as g,r as _,s as v,t as y,v as b,w as x,x as S,y as C}from"./transport.js";import{n as w,t as T}from"./types.js";const ee={development:`pk_test_51O7FkjDHAhgRuLtFHdkXdIe8T5i7rOVaG9PCtDetK3UUVKojVUEKHmQacGzigf9mOX1wz3zSOKoYwFjRcTfML9PU00OjJko2lk`,production:`pk_live_51O7FkjDHAhgRuLtFlzLdxJrwo7F09WCKTlzT9lnBePjOGizWnuijkH9oCkoAddkmBT8ngIuqAPkDiHlPEAH4KXbz00Tm0DaPT4`};function E(e){let t=p(e,`widgetSlug`);return{...t,stripePublishableKey:ee[t.environment],widgetSlug:t.resourceSlug,widgetSlugValue:t.resourceSlugValue}}const D=n([e({amountCents:c(1),productId:h}),e({productId:h,quantity:c(1)})]),O=s(e({email:C(x()),includeServiceFee:C(u()),items:r(l(D),d(1)),requestKey:h,returnUrl:h,tipCents:C(c(0))})),k=s(e({paymentReference:h,promoCode:C(x())})),A=s(e({includeServiceFee:u(),paymentReference:h,tipCents:c(0)})),j=s(e({customFieldAnswers:C(l(e({fieldId:h,value:C(a(n([x(),l(x())])))}))),email:h,memberId:C(x()),merchSize:C(S([`XS`,`S`,`M`,`L`,`XL`,`XXL`,`XXXL`])),paymentReference:h,phone:C(x())})),M=S([`one-time`,`monthly`,`annually`]),N=a(c(0)),P={description:v,id:h,inventoryQuantity:N,maxQuantity:N,minimumAmountCents:N,minQuantity:N,name:h,paymentOption:M},F=r(t(`pricingMode`,[b({...P,amountCents:c(0),pricingMode:f(`fixed`)}),b({...P,amountCents:N,pricingMode:f(`custom`)})]),g(({maxQuantity:e,minQuantity:t})=>e===null||t===null||t<=e)),I=b({acceptsDiscounts:C(u(),!1),id:h,product:F,productId:h,slug:h}),L=C(b({memberId:C(u(),!1),merchSize:C(u(),!1),phone:C(u(),!1),promoCode:C(u(),!1),serviceFee:C(u(),!1),shipping:C(u(),!1),tipping:C(u(),!1)}),{}),R=r(b({config:C(b({customFields:o,fields:L})),description:v,id:C(x(),``),name:C(x(),`Lockerverse widget`),pricingPolicy:C(b({currency:C(f(`usd`),`usd`),serviceFeeRateBasisPoints:C(c(0),0)})),products:C(l(I),[]),showCommunityBranding:C(u(),!0),title:v}),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}}))),z=b({checkoutId:h,checkoutStatus:S([`action_required`,`failed`,`pending`,`success`]),clientSecret:a(x()),paymentReference:h,requiresAction:u(),status:a(x())}),B=b({checkoutId:h,clientSecret:h,connectedAccountId:a(h),paymentReference:h,sessionId:h}),V=b({discountCents:c(0),paymentReference:h,totalCents:c(0)}),H=b({paymentReference:h,totalCents:c(0)}),U=b({includeServiceFee:u(),paymentReference:h,serviceFeeCents:c(0),tipCents:c(0),totalCents:c(0)}),W=s(B),G=s(V),K=s(H),q=s(U),J=s(z),Y=s(R);function X(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 Z(e,t){let n=e.config?.fields??{};return{payment:{currency:`usd`,publishableKey:t},pricingPolicy:{currency:`usd`,serviceFeeRateBasisPoints:e.pricingPolicy?.serviceFeeRateBasisPoints??0},products:(e.products??[]).map(X),widget:{customFields:e.config?.customFields??[],description:e.description??null,fields:{memberId:n.memberId??!1,merchSize:n.merchSize??!1,phone:n.phone??!1,promoCode:n.promoCode??!1,serviceFee:n.serviceFee??!1,shipping:n.shipping??!1,tipping:n.tipping??!1},id:e.id??``,name:e.name??`Lockerverse widget`,showCommunityBranding:e.showCommunityBranding??!0,title:e.title??null}}}function Q(e){return $(e)}function te(e){return $(e)}function $(e){return _(structuredClone(e))}function ne(e){let{apiBaseUrl:t,communitySlug:n,communitySlugValue:r,environment:i,fetchImplementation:a,onError:o,requestTimeoutMs:s,sentryDsn:c,stripePublishableKey:l,widgetSlug:u,widgetSlugValue:d}=E(e),f=m({communitySlug:r,environment:i,getContext:()=>({widgetSlug:d}),onError:o,resourceContextName:`lockerverse_widget`,sentryDsn:c}),{requestJson:p}=y(a,f,s),h=`${t}/v2/community/${n}/payment-widgets/${u}`,g=`${h}/checkout/session`;function v(e,t){throw f(new w({code:`invalid_selection`,message:e,operation:t,reportable:!1}))}function b(e,t){throw f(e instanceof w?e:new w({...t,reportable:!0}))}function x(e){try{let t=O(e),n=new URL(t.returnUrl);if(n.protocol!==`http:`&&n.protocol!==`https:`)throw TypeError(`Invalid return URL.`);let r=t.email?.trim().toLowerCase();return{...r?{email:r}:{},...t.includeServiceFee===void 0?{}:{includeServiceFee:t.includeServiceFee},items:t.items,requestKey:t.requestKey.trim(),returnUrl:n.toString(),...t.tipCents===void 0?{}:{tipCents:t.tipCents}}}catch{v(`Checkout Session input is invalid.`,`create_session`)}}return{async createSession(e){let t=x(e),n={code:`session_create_failed`,message:`Lockerverse returned an invalid Checkout Session.`,operation:`create_session`};try{let e=await p(g,{body:JSON.stringify(t),headers:{"Content-Type":`application/json`},method:`POST`},W,{...n,message:`Unable to create the Lockerverse Checkout Session because the request failed.`,report:!1},{...n,report:!1});if(!e.ok)throw new w({...n,message:`Unable to create the Lockerverse Checkout Session (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});return _({...e.value})}catch(e){b(e,n)}},async getPaymentStatus(e){(typeof e!=`string`||!e.trim())&&v(`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(`${h}/checkout/${encodeURIComponent(t)}/status`,void 0,J,{...n,message:`Unable to recover the Lockerverse payment status because the request failed.`,report:!1},{...n,report:!1});if(!e.ok)throw new w({...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 w({...n,reportable:!0});return te(e.value)}catch(e){b(e,n)}},async load(){let e={code:`widget_load_failed`,message:`Lockerverse returned an invalid widget catalog.`,operation:`load_widget`};try{let t=await p(h,void 0,Y,{...e,message:`Unable to load Lockerverse widget because the request failed.`,report:!1},{...e,report:!1});if(!t.ok)throw new w({...e,message:`Unable to load Lockerverse widget (${t.response.status}).`,reportable:t.response.status>=500,status:t.response.status});return Q(_(Z(t.value,l)))}catch(t){b(t,e)}},async updateSessionDetails(e){let t;try{t=j(e)}catch{v(`Checkout Session details are invalid.`,`update_session_details`)}let n=t.paymentReference.trim(),r={code:`session_update_failed`,message:`Lockerverse returned invalid Checkout Session details.`,operation:`update_session_details`};try{let e={...t.customFieldAnswers?{customFieldAnswers:t.customFieldAnswers}:{},email:t.email.trim().toLowerCase(),...t.memberId?.trim()?{memberId:t.memberId.trim()}:{},...t.merchSize?{merchSize:t.merchSize}:{},...t.phone?.trim()?{phone:t.phone.trim()}:{}},i=await p(`${g}/${encodeURIComponent(n)}/details`,{body:JSON.stringify(e),headers:{"Content-Type":`application/json`},method:`PATCH`},K,{...r,report:!1},{...r,report:!1});if(!i.ok)throw new w({...r,message:`Unable to save the Lockerverse Checkout Session details (${i.response.status}).`,reportable:i.response.status>=500,status:i.response.status});if(i.value.paymentReference!==n)throw new w({...r,reportable:!0});return _({...i.value})}catch(e){b(e,r)}},async updateSessionDiscount(e){let t;try{t=k(e)}catch{v(`Checkout Session discount input is invalid.`,`update_session_discount`)}let n=t.paymentReference.trim(),r=t.promoCode?.trim(),i={code:`session_update_failed`,message:`Lockerverse returned an invalid Checkout Session update.`,operation:`update_session_discount`};try{let e=await p(`${g}/${encodeURIComponent(n)}/discount`,{body:JSON.stringify(r?{promoCode:r}:{}),headers:{"Content-Type":`application/json`},method:`PATCH`},G,{...i,message:`Unable to update the Lockerverse Checkout Session because the request failed.`,report:!1},{...i,report:!1});if(!e.ok)throw new w({...i,message:`Unable to update the Lockerverse Checkout Session (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});if(e.value.paymentReference!==n)throw new w({...i,reportable:!0});return _({...e.value})}catch(e){b(e,i)}},async updateSessionPricing(e){let t;try{t=A(e)}catch{v(`Checkout Session pricing input is invalid.`,`update_session_pricing`)}let n=t.paymentReference.trim(),r={code:`session_update_failed`,message:`Lockerverse returned invalid Checkout Session pricing.`,operation:`update_session_pricing`};try{let e=await p(`${g}/${encodeURIComponent(n)}/pricing`,{body:JSON.stringify({includeServiceFee:t.includeServiceFee,tipCents:t.tipCents}),headers:{"Content-Type":`application/json`},method:`PATCH`},q,{...r,report:!1},{...r,report:!1});if(!e.ok)throw new w({...r,message:`Unable to update Lockerverse Checkout Session pricing (${e.response.status}).`,reportable:e.response.status>=500,status:e.response.status});if(e.value.paymentReference!==n)throw new w({...r,reportable:!0});return _({...e.value})}catch(e){b(e,r)}}}}export{T as LOCKERVERSE_SDK_VERSION,w as LockerverseSdkError,ne 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 {\n CreateLockerverseWidgetOptions,\n LockerverseEnvironment,\n} from \"./types.ts\";\n\nconst STRIPE_PUBLISHABLE_KEYS: Record<LockerverseEnvironment, string> = {\n development:\n \"pk_test_51O7FkjDHAhgRuLtFHdkXdIe8T5i7rOVaG9PCtDetK3UUVKojVUEKHmQacGzigf9mOX1wz3zSOKoYwFjRcTfML9PU00OjJko2lk\",\n production:\n \"pk_live_51O7FkjDHAhgRuLtFlzLdxJrwo7F09WCKTlzT9lnBePjOGizWnuijkH9oCkoAddkmBT8ngIuqAPkDiHlPEAH4KXbz00Tm0DaPT4\",\n};\n\nexport function resolveWidgetEnvironment(\n options: CreateLockerverseWidgetOptions\n) {\n const runtime = resolveResourceEnvironment(options, \"widgetSlug\");\n return {\n ...runtime,\n stripePublishableKey: STRIPE_PUBLISHABLE_KEYS[runtime.environment],\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: 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 })\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]);\n\nexport const parseCheckoutItems = parser(\n pipe(array(checkoutItemSchema), 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 string,\n transform,\n variant,\n} from \"valibot\";\n\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));\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 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 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 = 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\nexport const paymentResultSchema = object({\n checkoutId: nonEmptyStringSchema,\n checkoutStatus: picklist([\"action_required\", \"failed\", \"pending\", \"success\"]),\n clientSecret: nullable(string()),\n paymentReference: nonEmptyStringSchema,\n requiresAction: boolean(),\n status: nullable(string()),\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 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(\n widget: PublicWidget,\n publishableKey: string\n): LockerverseCatalog {\n const fields = widget.config?.fields ?? {};\n\n return {\n payment: {\n currency: \"usd\",\n 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 parsePaymentSubmission,\n} from \"./checkout-input-schemas.ts\";\nimport {\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 LockerverseCheckoutClient,\n type LockerverseCheckoutQuote,\n LockerverseSdkError,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype OperationErrorContext = {\n code:\n | \"payment_status_failed\"\n | \"payment_submit_failed\"\n | \"total_calculation_failed\"\n | \"widget_load_failed\";\n message: string;\n operation:\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 stripePublishableKey,\n widgetSlug,\n widgetSlugValue,\n } = resolveWidgetEnvironment(options);\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: \"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 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 quoteInput.paymentOption !== \"one-time\" ||\n typeof quoteInput.paymentReference !== \"string\" ||\n quoteInput.paymentReference.length === 0 ||\n quoteInput.payment.currency !== \"usd\" ||\n quoteInput.payment.publishableKey !== stripePublishableKey\n ) {\n throw new TypeError(\"Invalid quote.\");\n }\n const parsed = parseCheckoutQuote({\n ...quoteInput,\n connectedAccountId: quoteInput.payment.connectedAccountId,\n });\n if (parsed.paymentOption !== \"one-time\") {\n throw new TypeError(\"Unsupported checkout cadence.\");\n }\n const {\n connectedAccountId,\n paymentOption: _paymentOption,\n ...quote\n } = parsed;\n return deepFreeze({\n ...quote,\n authoritative: true as const,\n payment: {\n connectedAccountId,\n currency: \"usd\" as const,\n publishableKey: stripePublishableKey,\n },\n paymentOption: \"one-time\" as const,\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 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 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 if (response.value.paymentOption !== \"one-time\") {\n throw new LockerverseSdkError({\n ...context,\n message: \"Lockerverse returned an unsupported checkout cadence.\",\n reportable: true,\n });\n }\n const {\n connectedAccountId,\n paymentOption: _paymentOption,\n ...quote\n } = response.value;\n return clonePreparedCheckout(\n deepFreeze({\n ...quote,\n authoritative: true as const,\n items,\n payment: {\n connectedAccountId,\n currency: \"usd\" as const,\n publishableKey: stripePublishableKey,\n },\n paymentOption: \"one-time\" as const,\n paymentReference: globalThis.crypto.randomUUID(),\n pricing,\n })\n );\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 return cloneCatalog(\n deepFreeze(createCatalog(response.value, stripePublishableKey))\n );\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 confirmationToken: submission.confirmationToken,\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 }),\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 {\n CreateLockerverseWidgetOptions,\n LockerverseEnvironment,\n} from \"./types.ts\";\n\nconst STRIPE_PUBLISHABLE_KEYS: Record<LockerverseEnvironment, string> = {\n development:\n \"pk_test_51O7FkjDHAhgRuLtFHdkXdIe8T5i7rOVaG9PCtDetK3UUVKojVUEKHmQacGzigf9mOX1wz3zSOKoYwFjRcTfML9PU00OjJko2lk\",\n production:\n \"pk_live_51O7FkjDHAhgRuLtFlzLdxJrwo7F09WCKTlzT9lnBePjOGizWnuijkH9oCkoAddkmBT8ngIuqAPkDiHlPEAH4KXbz00Tm0DaPT4\",\n};\n\nexport function resolveWidgetEnvironment(\n options: CreateLockerverseWidgetOptions\n) {\n const runtime = resolveResourceEnvironment(options, \"widgetSlug\");\n return {\n ...runtime,\n stripePublishableKey: STRIPE_PUBLISHABLE_KEYS[runtime.environment],\n widgetSlug: runtime.resourceSlug,\n widgetSlugValue: runtime.resourceSlugValue,\n };\n}\n","import {\n array,\n boolean,\n minLength,\n nullable,\n optional,\n parser,\n picklist,\n pipe,\n strictObject,\n string,\n union,\n} from \"valibot\";\n\nimport { nonEmptyStringSchema, safeIntegerSchema } from \"./schema-helpers.ts\";\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]);\n\nexport const parseCreateCheckoutSessionInput = parser(\n strictObject({\n email: optional(string()),\n includeServiceFee: optional(boolean()),\n items: pipe(array(checkoutItemSchema), minLength(1)),\n requestKey: nonEmptyStringSchema,\n returnUrl: nonEmptyStringSchema,\n tipCents: optional(safeIntegerSchema(0)),\n })\n);\n\nexport const parseCheckoutSessionDiscountInput = parser(\n strictObject({\n paymentReference: nonEmptyStringSchema,\n promoCode: optional(string()),\n })\n);\n\nexport const parseCheckoutSessionPricingInput = parser(\n strictObject({\n includeServiceFee: boolean(),\n paymentReference: nonEmptyStringSchema,\n tipCents: safeIntegerSchema(0),\n })\n);\n\nexport const parseCheckoutSessionDetailsInput = parser(\n strictObject({\n customFieldAnswers: optional(\n array(\n strictObject({\n fieldId: nonEmptyStringSchema,\n value: optional(nullable(union([string(), array(string())]))),\n })\n )\n ),\n email: nonEmptyStringSchema,\n memberId: optional(string()),\n merchSize: optional(picklist([\"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\", \"XXXL\"])),\n paymentReference: nonEmptyStringSchema,\n phone: optional(string()),\n })\n);\n","import {\n array,\n boolean,\n check,\n type InferOutput,\n literal,\n nullable,\n object,\n optional,\n parser,\n picklist,\n pipe,\n string,\n transform,\n variant,\n} from \"valibot\";\n\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));\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 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 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\nexport const paymentResultSchema = object({\n checkoutId: nonEmptyStringSchema,\n checkoutStatus: picklist([\"action_required\", \"failed\", \"pending\", \"success\"]),\n clientSecret: nullable(string()),\n paymentReference: nonEmptyStringSchema,\n requiresAction: boolean(),\n status: nullable(string()),\n});\n\nexport const checkoutSessionSchema = object({\n checkoutId: nonEmptyStringSchema,\n clientSecret: nonEmptyStringSchema,\n connectedAccountId: nullable(nonEmptyStringSchema),\n paymentReference: nonEmptyStringSchema,\n sessionId: nonEmptyStringSchema,\n});\n\nexport const checkoutSessionDiscountSchema = object({\n discountCents: safeIntegerSchema(0),\n paymentReference: nonEmptyStringSchema,\n totalCents: safeIntegerSchema(0),\n});\n\nexport const checkoutSessionDetailsSchema = object({\n paymentReference: nonEmptyStringSchema,\n totalCents: safeIntegerSchema(0),\n});\n\nexport const checkoutSessionPricingSchema = object({\n includeServiceFee: boolean(),\n paymentReference: nonEmptyStringSchema,\n serviceFeeCents: safeIntegerSchema(0),\n tipCents: safeIntegerSchema(0),\n totalCents: safeIntegerSchema(0),\n});\n\nexport type PublicProductListing = InferOutput<typeof productListingSchema>;\nexport type PublicWidget = InferOutput<typeof publicWidgetSchema>;\n\nexport const parseCheckoutSession = parser(checkoutSessionSchema);\nexport const parseCheckoutSessionDiscount = parser(\n checkoutSessionDiscountSchema\n);\nexport const parseCheckoutSessionDetails = parser(checkoutSessionDetailsSchema);\nexport const parseCheckoutSessionPricing = parser(checkoutSessionPricingSchema);\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 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(\n widget: PublicWidget,\n publishableKey: string\n): LockerverseCatalog {\n const fields = widget.config?.fields ?? {};\n\n return {\n payment: {\n currency: \"usd\",\n 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 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 parseCheckoutSessionDetailsInput,\n parseCheckoutSessionDiscountInput,\n parseCheckoutSessionPricingInput,\n parseCreateCheckoutSessionInput,\n} from \"./checkout-input-schemas.ts\";\nimport {\n parseCheckoutSession,\n parseCheckoutSessionDetails,\n parseCheckoutSessionDiscount,\n parseCheckoutSessionPricing,\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 createCatalog,\n} from \"./snapshots.ts\";\nimport { createTransport } from \"./transport.ts\";\nimport {\n type CreateLockerverseWidgetOptions,\n type LockerverseCheckoutClient,\n LockerverseSdkError,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype OperationErrorContext = {\n code:\n | \"payment_status_failed\"\n | \"session_create_failed\"\n | \"session_update_failed\"\n | \"widget_load_failed\";\n message: string;\n operation:\n | \"create_session\"\n | \"get_payment_status\"\n | \"load_widget\"\n | \"update_session_details\"\n | \"update_session_discount\"\n | \"update_session_pricing\";\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 stripePublishableKey,\n widgetSlug,\n widgetSlugValue,\n } = resolveWidgetEnvironment(options);\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 widgetUrl = `${apiBaseUrl}/v2/community/${communitySlug}/payment-widgets/${widgetSlug}`;\n const sessionUrl = `${widgetUrl}/checkout/session`;\n\n function invalidInput(\n message: string,\n operation: LockerverseSdkOperation\n ): never {\n throw reportError(\n new LockerverseSdkError({\n code: \"invalid_selection\",\n message,\n operation,\n reportable: false,\n })\n );\n }\n\n function failOperation(\n error: unknown,\n context: OperationErrorContext\n ): never {\n throw reportError(\n error instanceof LockerverseSdkError\n ? error\n : new LockerverseSdkError({ ...context, reportable: true })\n );\n }\n\n function normalizeCreateSessionInput(input: unknown) {\n try {\n const parsed = parseCreateCheckoutSessionInput(input);\n const returnUrl = new URL(parsed.returnUrl);\n if (\n !(returnUrl.protocol === \"http:\" || returnUrl.protocol === \"https:\")\n ) {\n throw new TypeError(\"Invalid return URL.\");\n }\n const email = parsed.email?.trim().toLowerCase();\n return {\n ...(email ? { email } : {}),\n ...(parsed.includeServiceFee === undefined\n ? {}\n : { includeServiceFee: parsed.includeServiceFee }),\n items: parsed.items,\n requestKey: parsed.requestKey.trim(),\n returnUrl: returnUrl.toString(),\n ...(parsed.tipCents === undefined ? {} : { tipCents: parsed.tipCents }),\n };\n } catch {\n invalidInput(\"Checkout Session input is invalid.\", \"create_session\");\n }\n }\n\n return {\n async createSession(input) {\n const normalized = normalizeCreateSessionInput(input);\n const context = {\n code: \"session_create_failed\" as const,\n message: \"Lockerverse returned an invalid Checkout Session.\",\n operation: \"create_session\" as const,\n };\n try {\n const response = await requestJson(\n sessionUrl,\n {\n body: JSON.stringify(normalized),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n },\n parseCheckoutSession,\n {\n ...context,\n message:\n \"Unable to create the Lockerverse Checkout Session 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 create the Lockerverse Checkout Session (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n return deepFreeze({ ...response.value });\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 `${widgetUrl}/checkout/${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 widgetUrl,\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 return cloneCatalog(\n deepFreeze(createCatalog(response.value, stripePublishableKey))\n );\n } catch (error) {\n failOperation(error, context);\n }\n },\n async updateSessionDetails(input) {\n let parsed: ReturnType<typeof parseCheckoutSessionDetailsInput>;\n try {\n parsed = parseCheckoutSessionDetailsInput(input);\n } catch {\n invalidInput(\n \"Checkout Session details are invalid.\",\n \"update_session_details\"\n );\n }\n const paymentReference = parsed.paymentReference.trim();\n const context = {\n code: \"session_update_failed\" as const,\n message: \"Lockerverse returned invalid Checkout Session details.\",\n operation: \"update_session_details\" as const,\n };\n try {\n const body = {\n ...(parsed.customFieldAnswers\n ? { customFieldAnswers: parsed.customFieldAnswers }\n : {}),\n email: parsed.email.trim().toLowerCase(),\n ...(parsed.memberId?.trim()\n ? { memberId: parsed.memberId.trim() }\n : {}),\n ...(parsed.merchSize ? { merchSize: parsed.merchSize } : {}),\n ...(parsed.phone?.trim() ? { phone: parsed.phone.trim() } : {}),\n };\n const response = await requestJson(\n `${sessionUrl}/${encodeURIComponent(paymentReference)}/details`,\n {\n body: JSON.stringify(body),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PATCH\",\n },\n parseCheckoutSessionDetails,\n { ...context, report: false },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to save the Lockerverse Checkout Session details (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n if (response.value.paymentReference !== paymentReference) {\n throw new LockerverseSdkError({ ...context, reportable: true });\n }\n return deepFreeze({ ...response.value });\n } catch (error) {\n failOperation(error, context);\n }\n },\n async updateSessionDiscount(input) {\n let parsed: ReturnType<typeof parseCheckoutSessionDiscountInput>;\n try {\n parsed = parseCheckoutSessionDiscountInput(input);\n } catch {\n invalidInput(\n \"Checkout Session discount input is invalid.\",\n \"update_session_discount\"\n );\n }\n const paymentReference = parsed.paymentReference.trim();\n const promoCode = parsed.promoCode?.trim();\n const context = {\n code: \"session_update_failed\" as const,\n message: \"Lockerverse returned an invalid Checkout Session update.\",\n operation: \"update_session_discount\" as const,\n };\n try {\n const response = await requestJson(\n `${sessionUrl}/${encodeURIComponent(paymentReference)}/discount`,\n {\n body: JSON.stringify(promoCode ? { promoCode } : {}),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PATCH\",\n },\n parseCheckoutSessionDiscount,\n {\n ...context,\n message:\n \"Unable to update the Lockerverse Checkout Session 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 update the Lockerverse Checkout Session (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n if (response.value.paymentReference !== paymentReference) {\n throw new LockerverseSdkError({ ...context, reportable: true });\n }\n return deepFreeze({ ...response.value });\n } catch (error) {\n failOperation(error, context);\n }\n },\n async updateSessionPricing(input) {\n let parsed: ReturnType<typeof parseCheckoutSessionPricingInput>;\n try {\n parsed = parseCheckoutSessionPricingInput(input);\n } catch {\n invalidInput(\n \"Checkout Session pricing input is invalid.\",\n \"update_session_pricing\"\n );\n }\n const paymentReference = parsed.paymentReference.trim();\n const context = {\n code: \"session_update_failed\" as const,\n message: \"Lockerverse returned invalid Checkout Session pricing.\",\n operation: \"update_session_pricing\" as const,\n };\n try {\n const response = await requestJson(\n `${sessionUrl}/${encodeURIComponent(paymentReference)}/pricing`,\n {\n body: JSON.stringify({\n includeServiceFee: parsed.includeServiceFee,\n tipCents: parsed.tipCents,\n }),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PATCH\",\n },\n parseCheckoutSessionPricing,\n { ...context, report: false },\n { ...context, report: false }\n );\n if (!response.ok) {\n throw new LockerverseSdkError({\n ...context,\n message: `Unable to update Lockerverse Checkout Session pricing (${response.response.status}).`,\n reportable: response.response.status >= 500,\n status: response.response.status,\n });\n }\n if (response.value.paymentReference !== paymentReference) {\n throw new LockerverseSdkError({ ...context, reportable: true });\n }\n return deepFreeze({ ...response.value });\n } catch (error) {\n failOperation(error, context);\n }\n },\n };\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { D as LockerverseSdkError, O as LockerverseSdkErrorCode, k as LockerverseSdkOperation, n as LOCKERVERSE_SDK_VERSION, v as LockerverseEnvironment } from "./types.js";
1
+ import { C as LockerverseSdkError, T as LockerverseSdkOperation, g as LockerverseEnvironment, n as LOCKERVERSE_SDK_VERSION, w as LockerverseSdkErrorCode } from "./types.js";
2
2
  export { LOCKERVERSE_SDK_VERSION, type LockerverseEnvironment, LockerverseSdkError, type LockerverseSdkErrorCode, type LockerverseSdkOperation };
package/dist/signup.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { D as LockerverseSdkError, _ as LockerverseCustomFieldOption, g as LockerverseCustomFieldAnswerValue, h as LockerverseCustomFieldAnswer, m as LockerverseCustomField, v as LockerverseEnvironment } from "./types.js";
1
+ import { C as LockerverseSdkError, f as LockerverseCustomField, g as LockerverseEnvironment, h as LockerverseCustomFieldOption, m as LockerverseCustomFieldAnswerValue, p as LockerverseCustomFieldAnswer } from "./types.js";
2
2
  //#region src/signup-types.d.ts
3
3
  type LockerverseSignupField = {
4
4
  enabled: boolean;
package/dist/signup.js CHANGED
@@ -1,2 +1,2 @@
1
- import{A as e,C as t,E as n,O as r,S as i,a,b as o,c as s,d as c,f as l,h as u,i as d,k as f,n as p,o as m,r as h,s as g,t as _,u as v,w as y}from"./transport.js";import{n as b}from"./types.js";const x=r({city:f(),country:f(),line1:f(),line2:t(o(f())),postalCode:f(),state:f()}),S=y(r({address:t(o(x)),answers:t(c(d)),email:t(o(f())),honeypot:t(f()),name:m,participantCount:t(o(s(0))),phone:t(o(f()))})),C=i({enabled:l(),required:l()}),w=n(i({config:i({builtInFields:i({address:C,email:C,name:C,participantCount:C,phone:C}),customFields:a}),coverImageUrl:g,description:g,id:m,isActive:l(),name:m,slug:m,title:g}),e(({config:e,...t})=>({...t,customFields:e.customFields,fields:e.builtInFields}))),T=i({id:m,submittedAt:n(f(),u())}),E=y(w),D=y(T);function O(e){let t=h(e),n=new Set;return{commit(e){t=h(e);for(let e of[...n])try{e(t)}catch{}},getState(){return t},subscribe(e){n.add(e);try{e(t)}catch{}return()=>{n.delete(e)}}}}function k(e){let t=v(e),n=O({phase:`idle`}),r=null,i=!1,a=!1,o=p({communitySlug:t.communitySlugValue,environment:t.environment,getContext:()=>({signupSlug:t.signupSlugValue}),onError:t.onError,resourceContextName:`lockerverse_signup`,sentryDsn:t.sentryDsn}),{requestJson:s}=_(t.fetchImplementation,o,t.requestTimeoutMs);return{getState:n.getState,async load(){let e={code:`signup_load_failed`,message:`Unable to load Lockerverse signup.`,operation:`load_signup`};if(i||a)throw o(new b({...e,reportable:!1}));i=!0,r=null,n.commit({phase:`loading`});try{let i;try{i=await s(`${t.apiBaseUrl}/community/${t.communitySlug}/sign-up-widgets/${t.signupSlug}`,void 0,E,e,e)}catch(e){throw e instanceof b&&n.commit({error:e,phase:`error`,recoverableSubmissionReference:null,signup:null}),e}if(!i.ok){let t=o(new b({...e,reportable:i.response.status>=500,status:i.response.status}));throw n.commit({error:t,phase:`error`,recoverableSubmissionReference:null,signup:null}),t}let a=h(i.value);return r=a,n.commit({phase:`ready`,signup:a}),a}finally{i=!1}},async submit(e,i){let c=r,l=i?.submissionReference??globalThis.crypto.randomUUID(),u={code:`signup_submit_failed`,message:`Unable to submit Lockerverse signup.`,operation:`submit_signup`};if(!c?.isActive||a)throw o(new b({...u,reportable:!1}));let d;try{d=S(e)}catch{let e=o(new b({...u,message:`Lockerverse signup input is invalid.`,reportable:!1}));throw n.commit({error:e,phase:`error`,recoverableSubmissionReference:l,signup:c}),e}a=!0,n.commit({phase:`submitting`,signup:c,submissionReference:l});try{let e=await s(`${t.apiBaseUrl}/community/${t.communitySlug}/sign-up-widgets/${t.signupSlug}/submissions`,{body:JSON.stringify({...d,submissionReference:l}),headers:{"content-type":`application/json`},method:`POST`},D,u,u);if(!e.ok)throw o(new b({...u,reportable:e.response.status>=500,status:e.response.status}));let r=h(e.value);if(r.id!==l)throw o(new b({...u,reportable:!0}));return n.commit({phase:`submitted`,signup:c,submission:r}),r}catch(e){let t=e instanceof b?e:o(new b({...u,reportable:!1}));throw n.commit({error:t,phase:`error`,recoverableSubmissionReference:l,signup:c}),t}finally{a=!1}},subscribe:n.subscribe}}export{k as createLockerverseSignup};
1
+ import{C as e,S as t,T as n,_ as r,a as i,b as a,c as o,d as s,f as c,i as l,m as u,n as d,o as f,r as p,s as m,t as h,u as g,v as _,w as v,y}from"./transport.js";import{n as b}from"./types.js";const x=e({city:v(),country:v(),line1:v(),line2:y(r(v())),postalCode:v(),state:v()}),S=a(e({address:y(r(x)),answers:y(s(l)),email:y(r(v())),honeypot:y(v()),name:f,participantCount:y(r(o(0))),phone:y(r(v()))})),C=_({enabled:c(),required:c()}),w=t(_({config:_({builtInFields:_({address:C,email:C,name:C,participantCount:C,phone:C}),customFields:i}),coverImageUrl:m,description:m,id:f,isActive:c(),name:f,slug:f,title:m}),n(({config:e,...t})=>({...t,customFields:e.customFields,fields:e.builtInFields}))),T=_({id:f,submittedAt:t(v(),u())}),E=a(w),D=a(T);function O(e){let t=p(e),n=new Set;return{commit(e){t=p(e);for(let e of[...n])try{e(t)}catch{}},getState(){return t},subscribe(e){n.add(e);try{e(t)}catch{}return()=>{n.delete(e)}}}}function k(e){let t=g(e),n=O({phase:`idle`}),r=null,i=!1,a=!1,o=d({communitySlug:t.communitySlugValue,environment:t.environment,getContext:()=>({signupSlug:t.signupSlugValue}),onError:t.onError,resourceContextName:`lockerverse_signup`,sentryDsn:t.sentryDsn}),{requestJson:s}=h(t.fetchImplementation,o,t.requestTimeoutMs);return{getState:n.getState,async load(){let e={code:`signup_load_failed`,message:`Unable to load Lockerverse signup.`,operation:`load_signup`};if(i||a)throw o(new b({...e,reportable:!1}));i=!0,r=null,n.commit({phase:`loading`});try{let i;try{i=await s(`${t.apiBaseUrl}/community/${t.communitySlug}/sign-up-widgets/${t.signupSlug}`,void 0,E,e,e)}catch(e){throw e instanceof b&&n.commit({error:e,phase:`error`,recoverableSubmissionReference:null,signup:null}),e}if(!i.ok){let t=o(new b({...e,reportable:i.response.status>=500,status:i.response.status}));throw n.commit({error:t,phase:`error`,recoverableSubmissionReference:null,signup:null}),t}let a=p(i.value);return r=a,n.commit({phase:`ready`,signup:a}),a}finally{i=!1}},async submit(e,i){let c=r,l=i?.submissionReference??globalThis.crypto.randomUUID(),u={code:`signup_submit_failed`,message:`Unable to submit Lockerverse signup.`,operation:`submit_signup`};if(!c?.isActive||a)throw o(new b({...u,reportable:!1}));let d;try{d=S(e)}catch{let e=o(new b({...u,message:`Lockerverse signup input is invalid.`,reportable:!1}));throw n.commit({error:e,phase:`error`,recoverableSubmissionReference:l,signup:c}),e}a=!0,n.commit({phase:`submitting`,signup:c,submissionReference:l});try{let e=await s(`${t.apiBaseUrl}/community/${t.communitySlug}/sign-up-widgets/${t.signupSlug}/submissions`,{body:JSON.stringify({...d,submissionReference:l}),headers:{"content-type":`application/json`},method:`POST`},D,u,u);if(!e.ok)throw o(new b({...u,reportable:e.response.status>=500,status:e.response.status}));let r=p(e.value);if(r.id!==l)throw o(new b({...u,reportable:!0}));return n.commit({phase:`submitted`,signup:c,submission:r}),r}catch(e){let t=e instanceof b?e:o(new b({...u,reportable:!1}));throw n.commit({error:t,phase:`error`,recoverableSubmissionReference:l,signup:c}),t}finally{a=!1}},subscribe:n.subscribe}}export{k as createLockerverseSignup};
2
2
  //# sourceMappingURL=signup.js.map
package/dist/transport.js CHANGED
@@ -1,2 +1,2 @@
1
- import{n as e}from"./types.js";const t={lang:void 0,message:void 0,abortEarly:void 0,abortPipeEarly:void 0};function n(e){return e?{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}:t}function r(e){let t=typeof e;return t===`string`?`"${e}"`:t===`number`||t===`bigint`||t===`boolean`?`${e}`:t===`object`||t===`function`?(e&&Object.getPrototypeOf(e)?.constructor?.name)??`null`:t}function i(e,t,n,i,a){let o=a&&`input`in a?a.input:n.value,s=a?.expected??e.expects??null,c=a?.received??r(o),l={kind:e.kind,type:e.type,input:o,expected:s,received:c,message:`Invalid ${t}: ${s?`Expected ${s} but r`:`R`}eceived ${c}`,requirement:e.requirement,path:a?.path,issues:a?.issues,lang:i.lang,abortEarly:i.abortEarly,abortPipeEarly:i.abortPipeEarly},u=e.kind===`schema`,d=a?.message??e.message??(e.reference,l.lang,void 0)??(u?(l.lang,void 0):null)??i.message??(l.lang,void 0);d!==void 0&&(l.message=typeof d==`function`?d(l):d),u&&(n.typed=!1),n.issues?n.issues.push(l):n.issues=[l]}const a=new WeakMap;function o(e){let t=a.get(e);return t||(t={version:1,vendor:`valibot`,validate(t){return e[`~run`]({value:t},n())}},a.set(e,t)),t}function s(e,t){return Object.prototype.hasOwnProperty.call(e,t)&&t!==`__proto__`&&t!==`prototype`&&t!==`constructor`}function c(e,t){let n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??`never`}var l=class extends Error{constructor(e){super(e[0].message),this.name=`ValiError`,this.issues=e}};const u=/^\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\d|0[1-9]|3[01])[T ](?:0\d|1\d|2[0-3])(?::[0-5]\d){2}(?:\.\d{1,9})?(?:Z| ?[+-](?:0\d|1\d|2[0-3])(?::?[0-5]\d)?)$/u;function d(e,t){return{kind:`validation`,type:`check`,reference:d,async:!1,expects:null,requirement:e,message:t,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&i(this,`input`,e,t),e}}}function f(e){return{kind:`validation`,type:`finite`,reference:f,async:!1,expects:null,requirement:Number.isFinite,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&i(this,`finite`,e,t),e}}}function p(e){return{kind:`validation`,type:`iso_timestamp`,reference:p,async:!1,expects:null,requirement:u,message:e,"~run"(e,t){return e.typed&&!this.requirement.test(e.value)&&i(this,`timestamp`,e,t),e}}}function m(e,t){return{kind:`validation`,type:`max_value`,reference:m,async:!1,expects:`<=${e instanceof Date?e.toJSON():r(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value<=this.requirement)&&i(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():r(e.value)}),e}}}function h(e,t){return{kind:`validation`,type:`min_length`,reference:h,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&i(this,`length`,e,t,{received:`${e.value.length}`}),e}}}function g(e,t){return{kind:`validation`,type:`min_value`,reference:g,async:!1,expects:`>=${e instanceof Date?e.toJSON():r(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value>=this.requirement)&&i(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():r(e.value)}),e}}}function _(e){return{kind:`validation`,type:`non_empty`,reference:_,async:!1,expects:`!0`,message:e,"~run"(e,t){return e.typed&&e.value.length===0&&i(this,`length`,e,t,{received:`0`}),e}}}function v(e){return{kind:`validation`,type:`safe_integer`,reference:v,async:!1,expects:null,requirement:Number.isSafeInteger,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&i(this,`safe integer`,e,t),e}}}function y(e){return{kind:`transformation`,type:`transform`,reference:y,async:!1,operation:e,"~run"(e){return e.value=this.operation(e.value),e}}}const ee={abortEarly:!0};function b(e,t,n){return typeof e.fallback==`function`?e.fallback(t,n):e.fallback}function x(e,t,n){return typeof e.default==`function`?e.default(t,n):e.default}function S(e,t){return{kind:`schema`,type:`array`,reference:S,expects:`Array`,async:!1,item:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(Array.isArray(n)){e.typed=!0,e.value=[];for(let r=0;r<n.length;r++){let i=n[r],a=this.item[`~run`]({value:i},t);if(a.issues){let o={type:`array`,origin:`value`,input:n,key:r,value:i};for(let t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||=a.issues,t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value.push(a.value)}}else i(this,`type`,e,t);return e}}}function C(e){return{kind:`schema`,type:`boolean`,reference:C,expects:`boolean`,async:!1,message:e,get"~standard"(){return o(this)},"~run"(e,t){return typeof e.value==`boolean`?e.typed=!0:i(this,`type`,e,t),e}}}function w(e,t){return{kind:`schema`,type:`custom`,reference:w,expects:`unknown`,async:!1,check:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){return this.check(e.value)?e.typed=!0:i(this,`type`,e,t),e}}}function T(e,t){return{kind:`schema`,type:`literal`,reference:T,expects:r(e),async:!1,literal:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){return e.value===this.literal?e.typed=!0:i(this,`type`,e,t),e}}}function E(e,t){return{kind:`schema`,type:`loose_object`,reference:E,expects:`Object`,async:!1,entries:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let a=this.entries[r];if(r in n||(a.type===`exact_optional`||a.type===`optional`||a.type===`nullish`)&&a.default!==void 0){let i=r in n?n[r]:x(a),o=a[`~run`]({value:i},t);if(o.issues){let a={type:`object`,origin:`value`,input:n,key:r,value:i};for(let t of o.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(a.fallback!==void 0)e.value[r]=b(a);else if(a.type!==`exact_optional`&&a.type!==`optional`&&a.type!==`nullish`&&(i(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}if(!e.issues||!t.abortEarly)for(let t in n)s(n,t)&&!(t in this.entries)&&(e.value[t]=n[t])}else i(this,`type`,e,t);return e}}}function D(e,t){return{kind:`schema`,type:`nullable`,reference:D,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:t,get"~standard"(){return o(this)},"~run"(e,t){return e.value===null&&(this.default!==void 0&&(e.value=x(this,e,t)),e.value===null)?(e.typed=!0,e):this.wrapped[`~run`](e,t)}}}function O(e){return{kind:`schema`,type:`number`,reference:O,expects:`number`,async:!1,message:e,get"~standard"(){return o(this)},"~run"(e,t){return typeof e.value==`number`&&!isNaN(e.value)?e.typed=!0:i(this,`type`,e,t),e}}}function k(e,t){return{kind:`schema`,type:`object`,reference:k,expects:`Object`,async:!1,entries:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let a=this.entries[r];if(r in n||(a.type===`exact_optional`||a.type===`optional`||a.type===`nullish`)&&a.default!==void 0){let i=r in n?n[r]:x(a),o=a[`~run`]({value:i},t);if(o.issues){let a={type:`object`,origin:`value`,input:n,key:r,value:i};for(let t of o.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(a.fallback!==void 0)e.value[r]=b(a);else if(a.type!==`exact_optional`&&a.type!==`optional`&&a.type!==`nullish`&&(i(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}}else i(this,`type`,e,t);return e}}}function A(e,t){return{kind:`schema`,type:`optional`,reference:A,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return o(this)},"~run"(e,t){return e.value===void 0&&(this.default!==void 0&&(e.value=x(this,e,t)),e.value===void 0)?(e.typed=!0,e):this.wrapped[`~run`](e,t)}}}function j(e,t){return{kind:`schema`,type:`picklist`,reference:j,expects:c(e.map(r),`|`),async:!1,options:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:i(this,`type`,e,t),e}}}function M(e,t,n){return{kind:`schema`,type:`record`,reference:M,expects:`Object`,async:!1,key:e,value:t,message:n,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in n)if(s(n,r)){let i=n[r],a=this.key[`~run`]({value:r},t);if(a.issues){let o={type:`object`,origin:`key`,input:n,key:r,value:i};for(let t of a.issues)t.path=[o],e.issues?.push(t);if(e.issues||=a.issues,t.abortEarly){e.typed=!1;break}}let o=this.value[`~run`]({value:i},t);if(o.issues){let a={type:`object`,origin:`value`,input:n,key:r,value:i};for(let t of o.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}(!a.typed||!o.typed)&&(e.typed=!1),a.typed&&(e.value[a.value]=o.value)}}else i(this,`type`,e,t);return e}}}function N(e,t){return{kind:`schema`,type:`strict_object`,reference:N,expects:`Object`,async:!1,entries:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let a=this.entries[r];if(r in n||(a.type===`exact_optional`||a.type===`optional`||a.type===`nullish`)&&a.default!==void 0){let i=r in n?n[r]:x(a),o=a[`~run`]({value:i},t);if(o.issues){let a={type:`object`,origin:`value`,input:n,key:r,value:i};for(let t of o.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(a.fallback!==void 0)e.value[r]=b(a);else if(a.type!==`exact_optional`&&a.type!==`optional`&&a.type!==`nullish`&&(i(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}if(!e.issues||!t.abortEarly){for(let r in n)if(!(r in this.entries)){i(this,`key`,e,t,{input:r,expected:`never`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]});break}}}else i(this,`type`,e,t);return e}}}function P(e){return{kind:`schema`,type:`string`,reference:P,expects:`string`,async:!1,message:e,get"~standard"(){return o(this)},"~run"(e,t){return typeof e.value==`string`?e.typed=!0:i(this,`type`,e,t),e}}}function F(e){let t;if(e)for(let n of e)if(t)for(let e of n.issues)t.push(e);else t=n.issues;return t}function I(e,t){return{kind:`schema`,type:`union`,reference:I,expects:c(e.map(e=>e.expects),`|`),async:!1,options:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n,r,a;for(let i of this.options){let o=i[`~run`]({value:e.value},t);if(o.typed)if(o.issues)r?r.push(o):r=[o];else{n=o;break}else a?a.push(o):a=[o]}if(n)return n;if(r){if(r.length===1)return r[0];i(this,`type`,e,t,{issues:F(r)}),e.typed=!0}else if(a?.length===1)return a[0];else i(this,`type`,e,t,{issues:F(a)});return e}}}function L(){return{kind:`schema`,type:`unknown`,reference:L,expects:`unknown`,async:!1,get"~standard"(){return o(this)},"~run"(e){return e.typed=!0,e}}}function R(e,t,n){return{kind:`schema`,type:`variant`,reference:R,expects:`Object`,async:!1,key:e,options:t,message:n,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){let r,a=0,o=this.key,s=[],l=(e,i)=>{for(let c of e.options){if(c.type===`variant`)l(c,new Set(i).add(c.key));else{let e=!0,l=0;for(let t of i){let r=c.entries[t];if(t in n?r[`~run`]({typed:!1,value:n[t]},ee).issues:r.type!==`exact_optional`&&r.type!==`optional`&&r.type!==`nullish`){e=!1,o!==t&&(a<l||a===l&&t in n&&!(o in n))&&(a=l,o=t,s=[]),o===t&&s.push(c.entries[t].expects);break}l++}if(e){let e=c[`~run`]({value:n},t);(!r||!r.typed&&e.typed)&&(r=e)}}if(r&&!r.issues)break}};if(l(this,new Set([this.key])),r)return r;i(this,`type`,e,t,{input:n[o],expected:c(s,`|`),path:[{type:`object`,origin:`value`,input:n,key:o,value:n[o]}]})}else i(this,`type`,e,t);return e}}}function z(e,t,r){let i=e[`~run`]({value:t},n(r));if(i.issues)throw new l(i.issues);return i.value}function B(e,t){let n=n=>z(e,n,t);return n.schema=e,n.config=t,n}function V(...e){return{...e[0],pipe:e,get"~standard"(){return o(this)},"~run"(t,n){for(let r of e)if(r.kind!==`metadata`){if(t.issues&&(r.kind===`schema`||r.kind===`transformation`)){t.typed=!1;break}(!t.issues||!n.abortEarly&&!n.abortPipeEarly)&&(t=r[`~run`](t,n))}return t}}}const H=/\/+$/,U=new Set([`localhost`,`127.0.0.1`,`[::1]`]),W={development:{sentryDsn:`https://1977371f7bc44480935a7bc9726ca296@o1338376.ingest.sentry.io/6631829`},production:{sentryDsn:`https://c87cbc682ff0422eab5a4714acb95fd1@o1338376.ingest.sentry.io/6662564`}};function G(e,t){let n;try{n=new URL(e)}catch{throw TypeError(`apiBaseUrl must be a valid HTTP or HTTPS URL.`)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw TypeError(`apiBaseUrl must be a valid HTTP or HTTPS URL.`);if(n.username||n.password)throw TypeError(`apiBaseUrl must not include credentials.`);if(n.search||n.hash)throw TypeError(`apiBaseUrl must not include a query or fragment.`);if(n.protocol!==`https:`&&!(t===`development`&&U.has(n.hostname)))throw TypeError(`apiBaseUrl must use HTTPS except for development loopback endpoints.`);return n.pathname=n.pathname.replace(H,``),n.toString().replace(H,``)}function K(e,t){let n=`requestTimeoutMs must be a positive integer no greater than 2147483647.`,r=e=>V(P(`${e} must be a non-empty string.`),d(e=>e.trim().length>0,`${e} must be a non-empty string.`));try{let i=z(E({apiBaseUrl:A(P(`apiBaseUrl must be a valid HTTP or HTTPS URL.`)),communitySlug:r(`communitySlug`),environment:A(j([`development`,`production`],`environment must be either development or production.`)),fetch:A(w(e=>typeof e==`function`,`fetch must be a function when provided.`)),onError:A(w(e=>typeof e==`function`,`onError must be a function when provided.`)),requestTimeoutMs:A(V(O(n),v(n),g(1,n),m(2147483647,n))),sentryDsn:A(D(P(`sentryDsn must be a string or null when provided.`)))},`Expected an object.`),e);return{apiBaseUrl:i.apiBaseUrl,communitySlug:i.communitySlug,environment:i.environment,fetch:i.fetch,onError:i.onError,requestTimeoutMs:i.requestTimeoutMs,resourceSlugValue:z(r(t),i[t]),sentryDsn:i.sentryDsn}}catch(e){let t=e instanceof l?e.issues[0]?.message??`Invalid SDK options.`:`Invalid SDK options.`;throw TypeError(t)}}function q(e,t){let n=K(e,t),r=n.environment;if(n.apiBaseUrl!==void 0&&r===void 0)throw TypeError(`environment is required when apiBaseUrl is provided.`);if(n.apiBaseUrl===void 0&&r===`development`)throw TypeError(`apiBaseUrl is required when environment is development.`);let i=r===void 0?`production`:r,{communitySlug:a,resourceSlugValue:o}=n,s=n.fetch??globalThis.fetch,c=n.apiBaseUrl===void 0?`https://portal.lockerverse.com/api`:G(n.apiBaseUrl,i),l=W[i],u=n.sentryDsn,d=u===null?null:u??l.sentryDsn;return{apiBaseUrl:c,communitySlug:encodeURIComponent(a),communitySlugValue:a,environment:i,fetchImplementation:s,onError:n.onError,requestTimeoutMs:n.requestTimeoutMs??2e4,resourceSlug:encodeURIComponent(o),resourceSlugValue:o,sentryDsn:d}}function J(e){let t=q(e,`signupSlug`);return{...t,signupSlug:t.resourceSlug,signupSlugValue:t.resourceSlugValue}}const Y=V(P(),_(),d(e=>e.trim().length>0)),te=A(D(P()),null);function ne(e){return V(O(),v(),g(e))}const X=V(S(L()),y(e=>e.filter(e=>{let{archivedAt:t}=z(E({archivedAt:A(D(Y))}),e);return!t}))),Z=V(X,S(k({id:Y,label:Y})),h(2),d(e=>new Set(e.map(({id:e})=>e)).size===e.length,`Expected unique custom field option IDs.`)),Q={id:Y,label:Y,required:C()},re=R(`type`,[k({...Q,type:j([`text`,`textarea`])}),k({...Q,options:Z,type:j([`radio`,`select`])}),k({...Q,options:Z,type:j([`checkboxes`,`multi_select`])})]),ie=V(A(X,[]),S(re),d(e=>new Set(e.map(({id:e})=>e)).size===e.length,`Expected unique custom field IDs.`)),ae=k({fieldId:Y,value:I([P(),S(P())])});function $(e){if(typeof e!=`object`||!e||Object.isFrozen(e))return e;for(let t of Object.values(e))$(t);return Object.freeze(e)}function oe({communitySlug:e,environment:t,getContext:n,onError:r,resourceContextName:i,sentryDsn:a}){let o=null;return function(s){try{r?.(s)}catch{}if(s.reportable&&a&&typeof window<`u`){let r=o??import(`./telemetry.js`);o=r;let c={communitySlug:e,...n()};s.status!==void 0&&(c.status=s.status),r.then(({captureSdkError:e})=>e({context:c,contextName:i,dsn:a,environment:t,error:s})).catch(()=>{o===r&&(o=null)})}return s}}function se(t,n,r){function i(t){let r=new e({code:t.code,message:t.message,operation:t.operation,reportable:!0});return t.report===!1?r:n(r)}async function a(e,n,a,o,s){let c=new AbortController,l=n?.signal??void 0,u=()=>c.abort(l?.reason);l?.aborted?u():l?.addEventListener(`abort`,u,{once:!0});let d,f=new Promise((e,t)=>{d=()=>t(c.signal.reason??new DOMException(`The request was aborted.`,`AbortError`)),c.signal.aborted?d():c.signal.addEventListener(`abort`,d,{once:!0})}),p=setTimeout(()=>{c.abort(new DOMException(`The request timed out.`,`TimeoutError`))},r);try{let r;try{r=await Promise.race([t(e,{...n,signal:c.signal}),f])}catch{throw i(o)}if(!r.ok)return{ok:!1,response:r};try{let e=await Promise.race([r.json(),f]);return{ok:!0,response:r,value:a(e)}}catch{throw i(s)}}finally{clearTimeout(p),l?.removeEventListener(`abort`,u),d&&c.signal.removeEventListener(`abort`,d)}}return{requestJson:a}}export{y as A,A as C,M as D,V as E,R as M,N as O,k as S,j as T,m as _,ie as a,D as b,ne as c,S as d,C as f,T as g,p as h,ae as i,I as j,P as k,q as l,f as m,oe as n,Y as o,d as p,$ as r,te as s,se as t,J as u,h as v,B as w,O as x,g as y};
1
+ import{n as e}from"./types.js";const t={lang:void 0,message:void 0,abortEarly:void 0,abortPipeEarly:void 0};function n(e){return e?{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}:t}function r(e){let t=typeof e;return t===`string`?`"${e}"`:t===`number`||t===`bigint`||t===`boolean`?`${e}`:t===`object`||t===`function`?(e&&Object.getPrototypeOf(e)?.constructor?.name)??`null`:t}function i(e,t,n,i,a){let o=a&&`input`in a?a.input:n.value,s=a?.expected??e.expects??null,c=a?.received??r(o),l={kind:e.kind,type:e.type,input:o,expected:s,received:c,message:`Invalid ${t}: ${s?`Expected ${s} but r`:`R`}eceived ${c}`,requirement:e.requirement,path:a?.path,issues:a?.issues,lang:i.lang,abortEarly:i.abortEarly,abortPipeEarly:i.abortPipeEarly},u=e.kind===`schema`,d=a?.message??e.message??(e.reference,l.lang,void 0)??(u?(l.lang,void 0):null)??i.message??(l.lang,void 0);d!==void 0&&(l.message=typeof d==`function`?d(l):d),u&&(n.typed=!1),n.issues?n.issues.push(l):n.issues=[l]}const a=new WeakMap;function o(e){let t=a.get(e);return t||(t={version:1,vendor:`valibot`,validate(t){return e[`~run`]({value:t},n())}},a.set(e,t)),t}function s(e,t){return Object.prototype.hasOwnProperty.call(e,t)&&t!==`__proto__`&&t!==`prototype`&&t!==`constructor`}function c(e,t){let n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??`never`}var l=class extends Error{constructor(e){super(e[0].message),this.name=`ValiError`,this.issues=e}};const u=/^\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\d|0[1-9]|3[01])[T ](?:0\d|1\d|2[0-3])(?::[0-5]\d){2}(?:\.\d{1,9})?(?:Z| ?[+-](?:0\d|1\d|2[0-3])(?::?[0-5]\d)?)$/u;function d(e,t){return{kind:`validation`,type:`check`,reference:d,async:!1,expects:null,requirement:e,message:t,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&i(this,`input`,e,t),e}}}function f(e){return{kind:`validation`,type:`iso_timestamp`,reference:f,async:!1,expects:null,requirement:u,message:e,"~run"(e,t){return e.typed&&!this.requirement.test(e.value)&&i(this,`timestamp`,e,t),e}}}function p(e,t){return{kind:`validation`,type:`max_value`,reference:p,async:!1,expects:`<=${e instanceof Date?e.toJSON():r(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value<=this.requirement)&&i(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():r(e.value)}),e}}}function m(e,t){return{kind:`validation`,type:`min_length`,reference:m,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&i(this,`length`,e,t,{received:`${e.value.length}`}),e}}}function h(e,t){return{kind:`validation`,type:`min_value`,reference:h,async:!1,expects:`>=${e instanceof Date?e.toJSON():r(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value>=this.requirement)&&i(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():r(e.value)}),e}}}function g(e){return{kind:`validation`,type:`non_empty`,reference:g,async:!1,expects:`!0`,message:e,"~run"(e,t){return e.typed&&e.value.length===0&&i(this,`length`,e,t,{received:`0`}),e}}}function _(e){return{kind:`validation`,type:`safe_integer`,reference:_,async:!1,expects:null,requirement:Number.isSafeInteger,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&i(this,`safe integer`,e,t),e}}}function v(e){return{kind:`transformation`,type:`transform`,reference:v,async:!1,operation:e,"~run"(e){return e.value=this.operation(e.value),e}}}const y={abortEarly:!0};function b(e,t,n){return typeof e.fallback==`function`?e.fallback(t,n):e.fallback}function x(e,t,n){return typeof e.default==`function`?e.default(t,n):e.default}function S(e,t){return{kind:`schema`,type:`array`,reference:S,expects:`Array`,async:!1,item:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(Array.isArray(n)){e.typed=!0,e.value=[];for(let r=0;r<n.length;r++){let i=n[r],a=this.item[`~run`]({value:i},t);if(a.issues){let o={type:`array`,origin:`value`,input:n,key:r,value:i};for(let t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||=a.issues,t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value.push(a.value)}}else i(this,`type`,e,t);return e}}}function C(e){return{kind:`schema`,type:`boolean`,reference:C,expects:`boolean`,async:!1,message:e,get"~standard"(){return o(this)},"~run"(e,t){return typeof e.value==`boolean`?e.typed=!0:i(this,`type`,e,t),e}}}function w(e,t){return{kind:`schema`,type:`custom`,reference:w,expects:`unknown`,async:!1,check:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){return this.check(e.value)?e.typed=!0:i(this,`type`,e,t),e}}}function T(e,t){return{kind:`schema`,type:`literal`,reference:T,expects:r(e),async:!1,literal:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){return e.value===this.literal?e.typed=!0:i(this,`type`,e,t),e}}}function E(e,t){return{kind:`schema`,type:`loose_object`,reference:E,expects:`Object`,async:!1,entries:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let a=this.entries[r];if(r in n||(a.type===`exact_optional`||a.type===`optional`||a.type===`nullish`)&&a.default!==void 0){let i=r in n?n[r]:x(a),o=a[`~run`]({value:i},t);if(o.issues){let a={type:`object`,origin:`value`,input:n,key:r,value:i};for(let t of o.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(a.fallback!==void 0)e.value[r]=b(a);else if(a.type!==`exact_optional`&&a.type!==`optional`&&a.type!==`nullish`&&(i(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}if(!e.issues||!t.abortEarly)for(let t in n)s(n,t)&&!(t in this.entries)&&(e.value[t]=n[t])}else i(this,`type`,e,t);return e}}}function D(e,t){return{kind:`schema`,type:`nullable`,reference:D,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:t,get"~standard"(){return o(this)},"~run"(e,t){return e.value===null&&(this.default!==void 0&&(e.value=x(this,e,t)),e.value===null)?(e.typed=!0,e):this.wrapped[`~run`](e,t)}}}function O(e){return{kind:`schema`,type:`number`,reference:O,expects:`number`,async:!1,message:e,get"~standard"(){return o(this)},"~run"(e,t){return typeof e.value==`number`&&!isNaN(e.value)?e.typed=!0:i(this,`type`,e,t),e}}}function k(e,t){return{kind:`schema`,type:`object`,reference:k,expects:`Object`,async:!1,entries:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let a=this.entries[r];if(r in n||(a.type===`exact_optional`||a.type===`optional`||a.type===`nullish`)&&a.default!==void 0){let i=r in n?n[r]:x(a),o=a[`~run`]({value:i},t);if(o.issues){let a={type:`object`,origin:`value`,input:n,key:r,value:i};for(let t of o.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(a.fallback!==void 0)e.value[r]=b(a);else if(a.type!==`exact_optional`&&a.type!==`optional`&&a.type!==`nullish`&&(i(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}}else i(this,`type`,e,t);return e}}}function A(e,t){return{kind:`schema`,type:`optional`,reference:A,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return o(this)},"~run"(e,t){return e.value===void 0&&(this.default!==void 0&&(e.value=x(this,e,t)),e.value===void 0)?(e.typed=!0,e):this.wrapped[`~run`](e,t)}}}function j(e,t){return{kind:`schema`,type:`picklist`,reference:j,expects:c(e.map(r),`|`),async:!1,options:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:i(this,`type`,e,t),e}}}function M(e,t){return{kind:`schema`,type:`strict_object`,reference:M,expects:`Object`,async:!1,entries:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let a=this.entries[r];if(r in n||(a.type===`exact_optional`||a.type===`optional`||a.type===`nullish`)&&a.default!==void 0){let i=r in n?n[r]:x(a),o=a[`~run`]({value:i},t);if(o.issues){let a={type:`object`,origin:`value`,input:n,key:r,value:i};for(let t of o.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(a.fallback!==void 0)e.value[r]=b(a);else if(a.type!==`exact_optional`&&a.type!==`optional`&&a.type!==`nullish`&&(i(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}if(!e.issues||!t.abortEarly){for(let r in n)if(!(r in this.entries)){i(this,`key`,e,t,{input:r,expected:`never`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]});break}}}else i(this,`type`,e,t);return e}}}function N(e){return{kind:`schema`,type:`string`,reference:N,expects:`string`,async:!1,message:e,get"~standard"(){return o(this)},"~run"(e,t){return typeof e.value==`string`?e.typed=!0:i(this,`type`,e,t),e}}}function P(e){let t;if(e)for(let n of e)if(t)for(let e of n.issues)t.push(e);else t=n.issues;return t}function F(e,t){return{kind:`schema`,type:`union`,reference:F,expects:c(e.map(e=>e.expects),`|`),async:!1,options:e,message:t,get"~standard"(){return o(this)},"~run"(e,t){let n,r,a;for(let i of this.options){let o=i[`~run`]({value:e.value},t);if(o.typed)if(o.issues)r?r.push(o):r=[o];else{n=o;break}else a?a.push(o):a=[o]}if(n)return n;if(r){if(r.length===1)return r[0];i(this,`type`,e,t,{issues:P(r)}),e.typed=!0}else if(a?.length===1)return a[0];else i(this,`type`,e,t,{issues:P(a)});return e}}}function I(){return{kind:`schema`,type:`unknown`,reference:I,expects:`unknown`,async:!1,get"~standard"(){return o(this)},"~run"(e){return e.typed=!0,e}}}function L(e,t,n){return{kind:`schema`,type:`variant`,reference:L,expects:`Object`,async:!1,key:e,options:t,message:n,get"~standard"(){return o(this)},"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){let r,a=0,o=this.key,s=[],l=(e,i)=>{for(let c of e.options){if(c.type===`variant`)l(c,new Set(i).add(c.key));else{let e=!0,l=0;for(let t of i){let r=c.entries[t];if(t in n?r[`~run`]({typed:!1,value:n[t]},y).issues:r.type!==`exact_optional`&&r.type!==`optional`&&r.type!==`nullish`){e=!1,o!==t&&(a<l||a===l&&t in n&&!(o in n))&&(a=l,o=t,s=[]),o===t&&s.push(c.entries[t].expects);break}l++}if(e){let e=c[`~run`]({value:n},t);(!r||!r.typed&&e.typed)&&(r=e)}}if(r&&!r.issues)break}};if(l(this,new Set([this.key])),r)return r;i(this,`type`,e,t,{input:n[o],expected:c(s,`|`),path:[{type:`object`,origin:`value`,input:n,key:o,value:n[o]}]})}else i(this,`type`,e,t);return e}}}function R(e,t,r){let i=e[`~run`]({value:t},n(r));if(i.issues)throw new l(i.issues);return i.value}function z(e,t){let n=n=>R(e,n,t);return n.schema=e,n.config=t,n}function B(...e){return{...e[0],pipe:e,get"~standard"(){return o(this)},"~run"(t,n){for(let r of e)if(r.kind!==`metadata`){if(t.issues&&(r.kind===`schema`||r.kind===`transformation`)){t.typed=!1;break}(!t.issues||!n.abortEarly&&!n.abortPipeEarly)&&(t=r[`~run`](t,n))}return t}}}const V=/\/+$/,H=new Set([`localhost`,`127.0.0.1`,`[::1]`]),U={development:{sentryDsn:`https://1977371f7bc44480935a7bc9726ca296@o1338376.ingest.sentry.io/6631829`},production:{sentryDsn:`https://c87cbc682ff0422eab5a4714acb95fd1@o1338376.ingest.sentry.io/6662564`}};function W(e,t){let n;try{n=new URL(e)}catch{throw TypeError(`apiBaseUrl must be a valid HTTP or HTTPS URL.`)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw TypeError(`apiBaseUrl must be a valid HTTP or HTTPS URL.`);if(n.username||n.password)throw TypeError(`apiBaseUrl must not include credentials.`);if(n.search||n.hash)throw TypeError(`apiBaseUrl must not include a query or fragment.`);if(n.protocol!==`https:`&&!(t===`development`&&H.has(n.hostname)))throw TypeError(`apiBaseUrl must use HTTPS except for development loopback endpoints.`);return n.pathname=n.pathname.replace(V,``),n.toString().replace(V,``)}function G(e,t){let n=`requestTimeoutMs must be a positive integer no greater than 2147483647.`,r=e=>B(N(`${e} must be a non-empty string.`),d(e=>e.trim().length>0,`${e} must be a non-empty string.`));try{let i=R(E({apiBaseUrl:A(N(`apiBaseUrl must be a valid HTTP or HTTPS URL.`)),communitySlug:r(`communitySlug`),environment:A(j([`development`,`production`],`environment must be either development or production.`)),fetch:A(w(e=>typeof e==`function`,`fetch must be a function when provided.`)),onError:A(w(e=>typeof e==`function`,`onError must be a function when provided.`)),requestTimeoutMs:A(B(O(n),_(n),h(1,n),p(2147483647,n))),sentryDsn:A(D(N(`sentryDsn must be a string or null when provided.`)))},`Expected an object.`),e);return{apiBaseUrl:i.apiBaseUrl,communitySlug:i.communitySlug,environment:i.environment,fetch:i.fetch,onError:i.onError,requestTimeoutMs:i.requestTimeoutMs,resourceSlugValue:R(r(t),i[t]),sentryDsn:i.sentryDsn}}catch(e){let t=e instanceof l?e.issues[0]?.message??`Invalid SDK options.`:`Invalid SDK options.`;throw TypeError(t)}}function K(e,t){let n=G(e,t),r=n.environment;if(n.apiBaseUrl!==void 0&&r===void 0)throw TypeError(`environment is required when apiBaseUrl is provided.`);if(n.apiBaseUrl===void 0&&r===`development`)throw TypeError(`apiBaseUrl is required when environment is development.`);let i=r===void 0?`production`:r,{communitySlug:a,resourceSlugValue:o}=n,s=n.fetch??globalThis.fetch,c=n.apiBaseUrl===void 0?`https://portal.lockerverse.com/api`:W(n.apiBaseUrl,i),l=U[i],u=n.sentryDsn,d=u===null?null:u??l.sentryDsn;return{apiBaseUrl:c,communitySlug:encodeURIComponent(a),communitySlugValue:a,environment:i,fetchImplementation:s,onError:n.onError,requestTimeoutMs:n.requestTimeoutMs??2e4,resourceSlug:encodeURIComponent(o),resourceSlugValue:o,sentryDsn:d}}function q(e){let t=K(e,`signupSlug`);return{...t,signupSlug:t.resourceSlug,signupSlugValue:t.resourceSlugValue}}const J=B(N(),g(),d(e=>e.trim().length>0)),Y=A(D(N()),null);function ee(e){return B(O(),_(),h(e))}const X=B(S(I()),v(e=>e.filter(e=>{let{archivedAt:t}=R(E({archivedAt:A(D(J))}),e);return!t}))),Z=B(X,S(k({id:J,label:J})),m(2),d(e=>new Set(e.map(({id:e})=>e)).size===e.length,`Expected unique custom field option IDs.`)),Q={id:J,label:J,required:C()},te=L(`type`,[k({...Q,type:j([`text`,`textarea`])}),k({...Q,options:Z,type:j([`radio`,`select`])}),k({...Q,options:Z,type:j([`checkboxes`,`multi_select`])})]),ne=B(A(X,[]),S(te),d(e=>new Set(e.map(({id:e})=>e)).size===e.length,`Expected unique custom field IDs.`)),re=k({fieldId:J,value:F([N(),S(N())])});function $(e){if(typeof e!=`object`||!e||Object.isFrozen(e))return e;for(let t of Object.values(e))$(t);return Object.freeze(e)}function ie({communitySlug:e,environment:t,getContext:n,onError:r,resourceContextName:i,sentryDsn:a}){let o=null;return function(s){try{r?.(s)}catch{}if(s.reportable&&a&&typeof window<`u`){let r=o??import(`./telemetry.js`);o=r;let c={communitySlug:e,...n()};s.status!==void 0&&(c.status=s.status),r.then(({captureSdkError:e})=>e({context:c,contextName:i,dsn:a,environment:t,error:s})).catch(()=>{o===r&&(o=null)})}return s}}function ae(t,n,r){function i(t){let r=new e({code:t.code,message:t.message,operation:t.operation,reportable:!0});return t.report===!1?r:n(r)}async function a(e,n,a,o,s){let c=new AbortController,l=n?.signal??void 0,u=()=>c.abort(l?.reason);l?.aborted?u():l?.addEventListener(`abort`,u,{once:!0});let d,f=new Promise((e,t)=>{d=()=>t(c.signal.reason??new DOMException(`The request was aborted.`,`AbortError`)),c.signal.aborted?d():c.signal.addEventListener(`abort`,d,{once:!0})}),p=setTimeout(()=>{c.abort(new DOMException(`The request timed out.`,`TimeoutError`))},r);try{let r;try{r=await Promise.race([t(e,{...n,signal:c.signal}),f])}catch{throw i(o)}if(!r.ok)return{ok:!1,response:r};try{let e=await Promise.race([r.json(),f]);return{ok:!0,response:r,value:a(e)}}catch{throw i(s)}}finally{clearTimeout(p),l?.removeEventListener(`abort`,u),d&&c.signal.removeEventListener(`abort`,d)}}return{requestJson:a}}export{M as C,L as D,F as E,B as S,v as T,D as _,ne as a,z as b,ee as c,S as d,C as f,m as g,T as h,re as i,K as l,f as m,ie as n,J as o,d as p,$ as r,Y as s,ae as t,q as u,k as v,N as w,j as x,A as y};
2
2
  //# sourceMappingURL=transport.js.map