@suiteop/storefront 0.5.0 → 0.6.0

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +4 -2
  3. package/dist/astro-content-model.cjs +3 -3
  4. package/dist/astro-content-model.js +2 -2
  5. package/dist/astro.cjs +1 -1
  6. package/dist/astro.d.cts +66 -1
  7. package/dist/astro.d.ts +66 -1
  8. package/dist/astro.js +1 -1
  9. package/dist/{availability-Dh0yLSkj.d.cts → availability.d-Cla9GuGc.d.cts} +8 -8
  10. package/dist/{availability-Dh0yLSkj.d.ts → availability.d-Cla9GuGc.d.ts} +8 -8
  11. package/dist/checkout.d.cts +11 -0
  12. package/dist/checkout.d.ts +11 -0
  13. package/dist/{chunk-IUNIQSFB.js → chunk-3B6ZYRYF.js} +1 -1
  14. package/dist/chunk-3NE27PHL.cjs +19 -0
  15. package/dist/chunk-JF245QUY.cjs +9 -0
  16. package/dist/{chunk-NNWJZUQL.cjs → chunk-OXCLLFCY.cjs} +2 -2
  17. package/dist/chunk-QBHOJGZI.cjs +21 -0
  18. package/dist/chunk-UQWQPTHO.js +3 -0
  19. package/dist/chunk-XOCFEVP4.js +6 -0
  20. package/dist/chunk-YIYGBTAM.js +9 -0
  21. package/dist/{client-C9Igm7O-.d.ts → client-CX8K7JNt.d.cts} +65 -11
  22. package/dist/{client-2KyVv-2l.d.cts → client-s-lEwqzc.d.ts} +65 -11
  23. package/dist/components.d.cts +43 -1
  24. package/dist/components.d.ts +43 -1
  25. package/dist/config.cjs +3 -3
  26. package/dist/config.d.cts +78 -74
  27. package/dist/config.d.ts +78 -74
  28. package/dist/config.js +2 -2
  29. package/dist/content.cjs +9 -9
  30. package/dist/content.d.cts +53 -9
  31. package/dist/content.d.ts +53 -9
  32. package/dist/content.js +2 -2
  33. package/dist/{errors-DpImb0Uf.d.cts → errors-Oax7djdp.d.ts} +54 -13
  34. package/dist/{errors-BGgJ--XR.d.ts → errors-welPvrD6.d.cts} +54 -13
  35. package/dist/index.cjs +12 -12
  36. package/dist/index.d.cts +27 -8
  37. package/dist/index.d.ts +27 -8
  38. package/dist/index.js +3 -3
  39. package/dist/react.cjs +4 -4
  40. package/dist/react.d.cts +24 -3
  41. package/dist/react.d.ts +24 -3
  42. package/dist/react.js +3 -3
  43. package/package.json +1 -1
  44. package/dist/chunk-5TUJX6GY.js +0 -5
  45. package/dist/chunk-LY73ZYN5.cjs +0 -20
  46. package/dist/chunk-NZWYOV5Y.cjs +0 -19
  47. package/dist/chunk-PYVUDQSQ.js +0 -3
  48. package/dist/chunk-YSKWSL2F.js +0 -9
  49. package/dist/chunk-ZLAOY6IF.cjs +0 -9
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var chunkJF245QUY_cjs = require('./chunk-JF245QUY.cjs');
4
+ var chunkQBHOJGZI_cjs = require('./chunk-QBHOJGZI.cjs');
5
+ var chunkJ5FZ4WDQ_cjs = require('./chunk-J5FZ4WDQ.cjs');
6
+ var chunkEHQFWSP6_cjs = require('./chunk-EHQFWSP6.cjs');
7
+ var zod = require('zod');
8
+
9
+ var STOREFRONT_CHANNELS=["ai_assistant","paid_search","paid_social","organic_search","organic_social","email","referral","direct"];var AI_ASSISTANT_HOSTS={"chatgpt.com":"chatgpt","chat.openai.com":"chatgpt","perplexity.ai":"perplexity","gemini.google.com":"gemini","copilot.microsoft.com":"copilot","claude.ai":"claude"};var AI_ASSISTANT_SOURCES={"chatgpt.com":"chatgpt",perplexity:"perplexity","perplexity.ai":"perplexity",gemini:"gemini",copilot:"copilot","claude.ai":"claude"};var PAID_CLICKS=["google","microsoft","meta"];var PAID_MEDIUMS=new Set(["cpc","ppc","paid","paidsearch","sem"]);var EMAIL_RE=/newsletter|mailchimp|klaviyo/;var SEARCH_SUFFIXES=["bing.com","duckduckgo.com","search.yahoo.com","baidu.com","ecosia.org","search.brave.com"];var SEARCH_ANY_TLD_RE=/^(?:www\.)?(?:google|yandex)\.[a-z]{2,3}(?:\.[a-z]{2})?$/;var SOCIAL_SUFFIXES=["facebook.com","instagram.com","t.co","x.com","twitter.com","linkedin.com","tiktok.com","youtube.com","reddit.com"];var SOCIAL_ANY_TLD_RE=/(?:^|\.)pinterest\.[a-z]{2,3}(?:\.[a-z]{2})?$/;var SOCIAL_SOURCES=new Set(["facebook","fb","instagram","ig","meta","twitter","x","linkedin","pinterest","tiktok","youtube","reddit"]);var clean=value=>{const v=value?.trim().toLowerCase();return v?v:null};var hostOf=value=>clean(value)?.replace(/\.$/,"")??null;var hostMatches=(host,suffix)=>host===suffix||host.endsWith(`.${suffix}`);var bareHost=host=>host.replace(/^www\./,"");function aiLabel(host,source){if(host){const suffix=Object.keys(AI_ASSISTANT_HOSTS).find(s=>hostMatches(host,s));if(suffix)return AI_ASSISTANT_HOSTS[suffix]}return source&&Object.hasOwn(AI_ASSISTANT_SOURCES,source)?AI_ASSISTANT_SOURCES[source]:null}var isSearchHost=host=>SEARCH_ANY_TLD_RE.test(host)||SEARCH_SUFFIXES.some(s=>hostMatches(host,s));var isSocialHost=host=>SOCIAL_ANY_TLD_RE.test(host)||SOCIAL_SUFFIXES.some(s=>hostMatches(host,s));function paidClickOf(t){const medium=clean(t.utmMedium);if(t.fbclid&&medium!==null&&PAID_MEDIUMS.has(medium))return "meta";if(t.gclid||t.gbraid||t.wbraid)return "google";if(t.msclkid)return "microsoft";if(t.fbclid)return "meta";return t.paidClick??null}function classifyChannel(t){const source=clean(t.utmSource);const medium=clean(t.utmMedium);const site=bareHost(hostOf(t.siteHost)??"");const ref=hostOf(t.referrerHost);const external=ref&&bareHost(ref)!==site?ref:null;const result=(channel,label=null)=>({channel,source:label??source??external,medium});const socialSource=source!==null&&(SOCIAL_SOURCES.has(source)||isSocialHost(source))||!!(external&&isSocialHost(external));const paidMedium=medium!==null&&PAID_MEDIUMS.has(medium);const searchClick=t.gclid||t.gbraid||t.wbraid||t.msclkid||t.paidClick==="google"||t.paidClick==="microsoft";const metaClick=t.fbclid||t.paidClick==="meta";if(searchClick||paidMedium){return result(socialSource||metaClick&&paidMedium?"paid_social":"paid_search")}if(medium==="email"||EMAIL_RE.test(source??"")||EMAIL_RE.test(medium??"")){return result("email")}const ai=aiLabel(external,source);if(ai)return result("ai_assistant",ai);if(external&&isSearchHost(external))return result("organic_search");if(socialSource||metaClick)return result("organic_social");const anyUtm=[source,medium,t.utmCampaign,t.utmTerm,t.utmContent].some(v=>clean(v??null));if(!external&&!anyUtm)return result("direct");return result("referral")}var consentStateSchema=zod.z.object({analytics:zod.z.boolean(),ads:zod.z.boolean(),source:zod.z.enum(["default","user"]),region:zod.z.enum(["restricted","other"]),decidedAt:zod.z.iso.datetime().max(40).nullable()});function isSafePrivacyUrl(value){if([...value].some(ch=>/\s/.test(ch)||ch.charCodeAt(0)<32))return false;if(value.startsWith("/"))return !value.startsWith("//")&&!value.startsWith("/\\");if(!value.startsWith("https://")||!URL.canParse(value))return false;const url=new URL(value);return url.hostname!==""&&url.username===""&&url.password===""}var STOREFRONT_CONSENT_MODES=["regional","strict"];var modeField=zod.z.enum(STOREFRONT_CONSENT_MODES);var privacyPolicyUrlField=zod.z.string().trim().max(2048,"validation.storefront.privacy_policy_url_invalid").refine(isSafePrivacyUrl,"validation.storefront.privacy_policy_url_invalid").nullable();zod.z.object({mode:modeField.default("regional"),privacyPolicyUrl:privacyPolicyUrlField.default(null)});zod.z.object({siteId:zod.z.uuid(),consentSettings:zod.z.object({mode:modeField.optional(),privacyPolicyUrl:privacyPolicyUrlField.optional()})});var ACTIVE_RESERVATION_STATUSES=["confirmed","reserved","awaiting_payment"];new Set(ACTIVE_RESERVATION_STATUSES);var SCHEDULABLE_RESERVATION_STATUSES=[...ACTIVE_RESERVATION_STATUSES,"blocked"];new Set(SCHEDULABLE_RESERVATION_STATUSES);var VOLATILE_SYNC_STATUSES=["pending","pending_deletion","failed_deletion"];new Set(VOLATILE_SYNC_STATUSES);var CURRENCIES=["usd","eur","aud","gbp","cad","chf","cny","jpy","nzd","nok","mxn","thb","bgn","aed","inr","rub","brl","zar","sgd","hkd","xcd","xof","clp","dkk","try","bnd","xcg","shp","fkp","idr","ron","czk"];var ZERO_DECIMAL_CURRENCY_CODES=new Set(["bif","clp","djf","gnf","jpy","kmf","krw","mga","pyg","rwf","vnd","vuv","xaf","xof","xpf"]);new Set(CURRENCIES.filter(code=>ZERO_DECIMAL_CURRENCY_CODES.has(code)));var LIVE_PAYMENT_INTENT_STATUS_LIST=["succeeded","processing","requires_capture","refunded","disputed","reversed"];new Set(LIVE_PAYMENT_INTENT_STATUS_LIST);var BE_SITE_EXPERIMENT_VARIANTS=["a","b"];var ACTIVE_MIGRATION_RUN_STATUSES=["running","writing","finalizing","rolling_back"];new Set(ACTIVE_MIGRATION_RUN_STATUSES.filter(status=>status!=="rolling_back"));var experimentVariantSchema=zod.z.enum(BE_SITE_EXPERIMENT_VARIANTS);var experimentAssignmentSchema=zod.z.object({id:zod.z.uuid(),variant:experimentVariantSchema});zod.z.object({siteId:zod.z.uuid()});zod.z.object({siteId:zod.z.uuid(),deploymentBId:zod.z.uuid("validation.storefront.experiment_variant_required"),splitBPercent:zod.z.number("validation.storefront.experiment_split_range").int("validation.storefront.experiment_split_range").min(1,"validation.storefront.experiment_split_range").max(99,"validation.storefront.experiment_split_range")});zod.z.object({id:zod.z.uuid(),winner:experimentVariantSchema.nullable()});zod.z.object({id:zod.z.uuid()});var clickId=zod.z.string().min(1).max(512).regex(/^[\w.\-~]+$/);var storable=value=>!value.includes("\0")&&!/\p{Surrogate}/u.test(value);var utm=zod.z.string().max(150).refine(storable).nullable();var attributionTouchSchema=zod.z.object({ts:zod.z.iso.datetime().max(40),landingPath:zod.z.string().max(512).regex(/^\/[^?#]*$/).refine(storable),referrerHost:zod.z.string().max(253).regex(/^[a-z0-9.-]+$/).nullable(),utmSource:utm,utmMedium:utm,utmCampaign:utm,utmTerm:utm,utmContent:utm,gclid:clickId.nullable(),gbraid:clickId.nullable(),wbraid:clickId.nullable(),fbclid:clickId.nullable(),msclkid:clickId.nullable(),paidClick:zod.z.enum(PAID_CLICKS).nullable().default(null)});var attributionIdsSchema=zod.z.object({gaClientId:zod.z.string().max(64).regex(/^\d+\.\d+$/).nullable(),gaSessionId:zod.z.string().max(32).regex(/^\d+$/).nullable(),fbp:zod.z.string().max(128).regex(/^fb\.\d\.\d+\.\d+$/).nullable(),fbc:zod.z.string().max(600).regex(/^fb\.\d\.\d+\.[\w-]+$/).nullable()});var storefrontAttributionInputSchema=zod.z.object({first:attributionTouchSchema.nullable(),last:attributionTouchSchema.nullable(),ids:attributionIdsSchema,consent:consentStateSchema,experiment:experimentAssignmentSchema.optional()});var STORED_ATTRIBUTION_CHANNELS=[...STOREFRONT_CHANNELS,"ai_agent_mcp"];storefrontAttributionInputSchema.extend({firstChannel:zod.z.enum(STORED_ATTRIBUTION_CHANNELS).nullable(),lastChannel:zod.z.enum(STORED_ATTRIBUTION_CHANNELS),userAgent:zod.z.string().max(512).nullable(),capturedAt:zod.z.iso.datetime(),preview:zod.z.literal(true).optional()});function withoutClickIds(touch){return {...touch,gclid:null,gbraid:null,wbraid:null,fbclid:null,msclkid:null,paidClick:paidClickOf(touch)}}var MAX_CHECKOUT_CUSTOM_FIELDS=10;var MAX_CHECKOUT_UPSELLS=12;var MAX_CHECKOUT_UPSELL_QUANTITY=50;var MAX_CHECKOUT_FIELD_LENGTH=2e3;var MAX_FIELD_KEY_LENGTH=40;var BOOKING_UPSELL_CHARGE_TYPES=["fixed_price","price_per_quantity","price_per_night","price_per_guest_per_night","free"];var localizedTextSchema=zod.z.object({default:zod.z.string().trim().min(1,"validation.required").max(200,"validation.max_length"),translations:zod.z.record(zod.z.string().min(2).max(10),zod.z.string().max(200,"validation.max_length")).optional()});var fieldKeySchema=zod.z.string().regex(new RegExp(`^[a-z][a-z0-9_]{0,${MAX_FIELD_KEY_LENGTH-1}}$`),"validation.storefront.extensions_invalid_key").refine(key=>!(key in Object.prototype),"validation.storefront.extensions_invalid_key");var boundSchema=zod.z.number({error:"validation.number_required"}).int("validation.integer_required");var fieldBase={key:fieldKeySchema,label:localizedTextSchema,required:zod.z.boolean()};var customFieldDefSchema=zod.z.discriminatedUnion("type",[zod.z.object({type:zod.z.enum(["text","textarea"]),...fieldBase,maxLength:zod.z.number({error:"validation.number_required"}).int("validation.integer_required").min(1,"validation.too_small").max(MAX_CHECKOUT_FIELD_LENGTH,"validation.too_large").default(500)}),zod.z.object({type:zod.z.literal("select"),...fieldBase,options:zod.z.array(zod.z.object({value:zod.z.string().max(64).refine(value=>value.trim()!=="","validation.required"),label:localizedTextSchema})).min(1,"validation.storefront.extensions_select_needs_options").max(30,"validation.too_large").refine(options=>new Set(options.map(o=>o.value)).size===options.length,{message:"validation.storefront.extensions_duplicate_option"})}),zod.z.object({type:zod.z.literal("checkbox"),...fieldBase}),zod.z.object({type:zod.z.literal("number"),...fieldBase,min:boundSchema.optional(),max:boundSchema.optional()}),zod.z.object({type:zod.z.literal("date"),...fieldBase})]);zod.z.object({customFields:zod.z.array(customFieldDefSchema).max(MAX_CHECKOUT_CUSTOM_FIELDS,"validation.too_large").superRefine((fields,ctx)=>{const seen=new Set;fields.forEach((field,index)=>{if(seen.has(field.key)){ctx.addIssue({code:"custom",path:[index,"key"],message:"validation.storefront.extensions_duplicate_key"});}seen.add(field.key);if(field.type==="number"&&field.min!=null&&field.max!=null&&field.min>field.max){ctx.addIssue({code:"custom",path:[index,"max"],message:"validation.storefront.extensions_number_range_invalid"});}});}).default([]),upsells:zod.z.object({portalUpsellIds:zod.z.array(zod.z.uuid()).max(MAX_CHECKOUT_UPSELLS,"validation.too_large").refine(ids=>new Set(ids).size===ids.length,{message:"validation.storefront.extensions_duplicate_upsell"}).default([])}).default({portalUpsellIds:[]})});var checkoutExtrasInputSchema=zod.z.object({customFields:zod.z.record(zod.z.string().max(MAX_FIELD_KEY_LENGTH),zod.z.union([zod.z.string().max(MAX_CHECKOUT_FIELD_LENGTH),zod.z.number(),zod.z.boolean()])).refine(values=>Object.keys(values).length<=MAX_CHECKOUT_CUSTOM_FIELDS,{message:"validation.too_large"}).default({}),upsells:zod.z.array(zod.z.object({portalUpsellId:zod.z.uuid(),quantity:zod.z.number().int().min(1).max(MAX_CHECKOUT_UPSELL_QUANTITY)})).max(MAX_CHECKOUT_UPSELLS).default([])});var upsellOfferSchema=zod.z.object({portalUpsellId:zod.z.uuid(),title:zod.z.string(),description:zod.z.string().nullable(),imageUrl:zod.z.string().nullable(),chargeType:zod.z.enum(BOOKING_UPSELL_CHARGE_TYPES),unitMinor:zod.z.number().int(),minQuantity:zod.z.number().int(),maxQuantity:zod.z.number().int(),quantifierLabel:zod.z.string().nullable(),currency:zod.z.string().length(3)});zod.z.object({locale:zod.z.string().max(35).optional().catch(void 0)});zod.z.object({customFields:zod.z.array(customFieldDefSchema),upsellOffers:zod.z.array(upsellOfferSchema)});var checkoutSessionExtrasSchema=zod.z.object({lines:zod.z.array(zod.z.object({portalUpsellId:zod.z.uuid().nullable(),title:zod.z.string(),quantity:zod.z.number().int(),totalMinor:zod.z.number().int()})),extrasTotalMinor:zod.z.number().int(),heldTotalMinor:zod.z.number().int()});var amountMinor=zod.z.number().int().positive();var currency=zod.z.string().length(3);var chargedByHost=zod.z.literal("host");var checkoutMountDescriptorKnownSchema=zod.z.discriminatedUnion("provider",[zod.z.object({provider:zod.z.literal("stripe"),publishableKey:zod.z.string().min(1),stripeAccountId:zod.z.string().nullable(),clientSecret:zod.z.string().min(1),amountMinor,currency}),zod.z.object({provider:zod.z.literal("juspay"),publishableKey:zod.z.string().min(1),providerBaseUrl:zod.z.url(),clientSecret:zod.z.string().min(1),profileId:zod.z.string().min(1),amountMinor,currency}),zod.z.object({provider:zod.z.literal("guesty_pay"),guestyPartnerId:zod.z.string().min(1),paymentProviderId:zod.z.string().min(1),externalListingId:zod.z.string().min(1),pmsQuoteId:zod.z.string().nullable(),amountMinor,currency,chargedBy:chargedByHost.optional()}),zod.z.object({provider:zod.z.literal("pms_stripe"),publishableKey:zod.z.string().min(1),stripeAccountId:zod.z.string().min(1),clientSecret:zod.z.string().min(1),amountMinor,currency,chargedBy:chargedByHost})]);var KNOWN_MOUNT_PROVIDERS=["stripe","juspay","guesty_pay","pms_stripe"];var checkoutMountDescriptorSchema=zod.z.union([checkoutMountDescriptorKnownSchema,zod.z.object({provider:zod.z.string().refine(p=>!KNOWN_MOUNT_PROVIDERS.includes(p))}).loose()]);zod.z.enum(chunkJF245QUY_cjs.BE_BOOKING_REQUEST_STATUSES);var bookingRequestStatusResponseSchema=chunkEHQFWSP6_cjs.openEnum(chunkJF245QUY_cjs.BE_BOOKING_REQUEST_STATUSES);var checkoutSessionQuoteSchema=zod.z.object({listingId:zod.z.uuid(),checkIn:zod.z.iso.date(),checkOut:zod.z.iso.date(),guests:zod.z.number().int().positive(),ratePlanId:zod.z.string(),totalMinor:zod.z.number().int(),currency:zod.z.string().length(3)});zod.z.object({quoteRef:zod.z.string().min(1).max(4096),ratePlanId:zod.z.string().min(1).max(200).optional(),attribution:zod.z.custom().optional(),extras:checkoutExtrasInputSchema.optional(),hostSessionId:zod.z.uuid().optional()});var checkoutSessionSchema=zod.z.object({id:zod.z.uuid(),status:bookingRequestStatusResponseSchema,quote:checkoutSessionQuoteSchema,mount:checkoutMountDescriptorSchema.nullable(),chargedBy:chargedByHost.optional(),guestSaved:zod.z.literal(true).optional(),extras:checkoutSessionExtrasSchema.optional(),extrasSessionId:zod.z.uuid().optional(),expiresAt:zod.z.iso.datetime()});var storefrontGuestInputSchema=zod.z.object({firstName:zod.z.string().trim().min(1,"validation.first_name_required").max(100),lastName:zod.z.string().trim().min(1,"validation.last_name_required").max(100),email:chunkQBHOJGZI_cjs.requiredTrimmedEmailField,phone:zod.z.string().trim().min(1,"validation.phone_required").max(40)});var storefrontConsentsSchema=zod.z.object({emailMarketing:zod.z.boolean().default(false),smsMarketing:zod.z.boolean().default(false)}).default({emailMarketing:false,smsMarketing:false});var confirmCheckoutSessionInputSchema=zod.z.object({quoteRef:zod.z.string().min(1).max(4096),guest:storefrontGuestInputSchema,consents:storefrontConsentsSchema,paymentMethodId:zod.z.string().min(1).max(255).optional(),language:zod.z.string().max(35).optional().catch(void 0)});confirmCheckoutSessionInputSchema.pick({quoteRef:true,guest:true,consents:true,language:true});zod.z.object({saved:zod.z.boolean()});var bookingResultSchema=zod.z.object({bookingRequestId:zod.z.uuid(),confirmationToken:zod.z.string(),status:bookingRequestStatusResponseSchema,confirmationCode:zod.z.string().nullable()});var storefrontBookingSchema=zod.z.object({id:zod.z.uuid(),status:bookingRequestStatusResponseSchema,propertyId:zod.z.uuid().nullable(),checkIn:zod.z.iso.date().nullable(),checkOut:zod.z.iso.date().nullable(),guestCount:zod.z.number().int().nullable(),guestFirstName:zod.z.string().nullable(),totalMinor:zod.z.number().int().nullable(),currency:zod.z.string().nullable(),confirmationCode:zod.z.string().nullable(),lines:zod.z.array(zod.z.object({title:zod.z.string(),quantity:zod.z.number().int(),totalMinor:zod.z.number().int()})).optional()});zod.z.enum(chunkJF245QUY_cjs.STOREFRONT_KEY_ENVIRONMENTS);var STOREFRONT_KEY_RE=new RegExp(`^pk_(${chunkJF245QUY_cjs.STOREFRONT_KEY_ENVIRONMENTS.join("|")})_(${chunkJF245QUY_cjs.REGIONS.join("|")})_[0-9A-Za-z]{24}$`);function parseStorefrontKey(token){const match=STOREFRONT_KEY_RE.exec(token);if(!match)return null;return {environment:match[1],region:match[2]}}var ORIGIN_HOST_RE=/^(?:[a-z0-9-]+\.)*[a-z0-9-]+$|^\[[0-9a-f:.]+\]$/;function parseUrl(value){try{return new URL(value)}catch{return null}}zod.z.string().refine(value=>{const url=parseUrl(value);if(!url)return false;return (url.protocol==="https:"||url.protocol==="http:")&&url.origin===value&&ORIGIN_HOST_RE.test(url.hostname)},"validation.storefront.origin_invalid");var CLIENT_CONVERSION_EVENT_NAMES=["begin_checkout","generate_lead","sign_up"];var STOREFRONT_EVENT_PATH_MAX=512;var base={eventId:zod.z.uuid(),ts:zod.z.number().int(),path:zod.z.string().max(STOREFRONT_EVENT_PATH_MAX),referrerHost:zod.z.string().max(253).nullable()};var currency2=zod.z.string().length(3).regex(/^[a-z]{3}$/);var storefrontClientEventSchema=zod.z.discriminatedUnion("name",[zod.z.object({...base,name:zod.z.literal("page_view")}),zod.z.object({...base,name:zod.z.literal("view_search_results"),checkIn:chunkEHQFWSP6_cjs.storefrontDateSchema.optional(),checkOut:chunkEHQFWSP6_cjs.storefrontDateSchema.optional(),guests:zod.z.number().int().min(1).max(50).optional(),locationId:zod.z.uuid().optional()}),zod.z.object({...base,name:zod.z.literal("view_item_list"),listName:zod.z.string().max(64),itemCount:zod.z.number().int().min(0).max(500)}),zod.z.object({...base,name:zod.z.literal("view_item"),listingId:zod.z.uuid()}),zod.z.object({...base,name:zod.z.literal("view_quote"),listingId:zod.z.uuid(),valueMinor:zod.z.number().int().nonnegative(),currency:currency2,nights:zod.z.number().int().min(1).max(365)}),zod.z.object({...base,name:zod.z.literal("begin_checkout"),checkoutSessionId:zod.z.uuid()}),zod.z.object({...base,name:zod.z.literal("add_payment_info"),checkoutSessionId:zod.z.uuid()}),zod.z.object({...base,name:zod.z.literal("generate_lead"),formId:zod.z.string().max(64).optional()}),zod.z.object({...base,name:zod.z.literal("sign_up"),method:zod.z.literal("newsletter")})]);var STOREFRONT_EVENT_BATCH_MAX=20;zod.z.object({events:zod.z.array(storefrontClientEventSchema).min(1).max(STOREFRONT_EVENT_BATCH_MAX)});zod.z.object({events:zod.z.array(zod.z.object({eventId:zod.z.uuid(),name:zod.z.enum(CLIENT_CONVERSION_EVENT_NAMES),occurredAt:zod.z.iso.datetime(),pageUrl:zod.z.url({protocol:/^https?$/}).max(2048),checkoutSessionId:zod.z.uuid().nullable(),userAgent:zod.z.string().max(512).nullable(),attribution:storefrontAttributionInputSchema.nullable()})).min(1).max(STOREFRONT_EVENT_BATCH_MAX)});var storefrontGuideItemSchema=zod.z.object({id:zod.z.uuid(),title:zod.z.string().nullable(),description:zod.z.string().nullable(),address:zod.z.string().nullable(),latitude:zod.z.number().nullable(),longitude:zod.z.number().nullable(),googleMapsUrl:zod.z.string().nullable(),websiteUrl:zod.z.string().nullable(),imageUrl:zod.z.string().nullable(),categories:zod.z.array(zod.z.string()),priceLevel:zod.z.number().int().min(1).max(4).nullable(),rating:zod.z.number().nullable(),ratingsCount:zod.z.number().int().nullable()});var storefrontGuideSchema=zod.z.object({id:zod.z.uuid(),name:zod.z.string(),category:zod.z.string().nullable(),coverImageUrl:zod.z.string().nullable(),items:zod.z.array(storefrontGuideItemSchema)});var EXPERIMENT_COOKIE="__so_exp";var COOKIE_RE=/(?:^|;\s*)__so_exp=([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.(a|b)(?:\s*;|\s*$)/;function readExperimentCookie(cookies){const match=COOKIE_RE.exec(cookies??"");return match?{id:match[1],variant:match[2]}:null}var ATTRIBUTION_COOKIE="so_attr";var ATTRIBUTION_COOKIE_MAX_AGE_SECONDS=90*24*60*60;var COOKIE_SCOPE="Path=/; SameSite=Lax; Secure";var ATTRIBUTION_COOKIE_ATTRIBUTES=`Max-Age=${ATTRIBUTION_COOKIE_MAX_AGE_SECONDS}; ${COOKIE_SCOPE}`;var ATTRIBUTION_COOKIE_MAX_BYTES=3584;var attributionCookieSchema=zod.z.object({first:attributionTouchSchema.nullable(),last:attributionTouchSchema.nullable()});function toBase64Url(text){let binary="";for(const byte of new TextEncoder().encode(text))binary+=String.fromCharCode(byte);return btoa(binary).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function fromBase64Url(value){const binary=atob(value.replace(/-/g,"+").replace(/_/g,"/"));return new TextDecoder().decode(Uint8Array.from(binary,ch=>ch.charCodeAt(0)))}function encodeAttributionCookie(value){const encoded=toBase64Url(JSON.stringify(value));return encoded.length>ATTRIBUTION_COOKIE_MAX_BYTES?null:encoded}function serializeAttributionCookie(value){const encoded=encodeAttributionCookie(value);return encoded===null?null:`${ATTRIBUTION_COOKIE}=${encoded}; ${ATTRIBUTION_COOKIE_ATTRIBUTES}`}function decodeAttributionCookie(value){if(!value)return null;return attributionCookieSchema.parse(JSON.parse(fromBase64Url(value)))}function expiredAttributionCookies(cookies,consent){const revoked=[...consent.analytics?[]:[ATTRIBUTION_COOKIE,EXPERIMENT_COOKIE],...consent.ads?[]:["_fbc","_fbp"]];return revoked.filter(name=>readCookie(cookies,name)!==null).map(name=>`${name}=; Max-Age=0; ${COOKIE_SCOPE}`)}function strippedAttributionCookie(held){const clicked=t=>t!==null&&[t.gclid,t.gbraid,t.wbraid,t.fbclid,t.msclkid].some(id=>id!==null);if(!held||!(clicked(held.first)||clicked(held.last)))return null;return serializeAttributionCookie({first:held.first&&withoutClickIds(held.first),last:held.last&&withoutClickIds(held.last)})??`${ATTRIBUTION_COOKIE}=; Max-Age=0; ${COOKIE_SCOPE}`}function readCookie(header,name){if(!header)return null;for(const part of header.split(";")){const eq=part.indexOf("=");if(eq!==-1&&part.slice(0,eq).trim()===name)return part.slice(eq+1).trim()}return null}var MalformedCookieError=class extends Error{constructor(name){super(`${name} is malformed`);this.name="MalformedAttributionError";}};var NO_IDS={gaClientId:null,gaSessionId:null,fbp:null,fbc:null};function matchCookie(cookies,name,re,report){const value=name?readCookie(cookies,name):null;if(!value)return null;const match=re.exec(value);if(!match){report(new MalformedCookieError(name),name);return null}return match.slice(1).filter(Boolean).join(".")}function browserIdsFromCookies(cookies,consent,report){const sessionCookie=cookies.split(";").map(part=>part.split("=")[0].trim()).find(name=>name.startsWith("_ga_"))??null;const ga=consent.analytics;const ads=consent.ads;const ids={gaClientId:ga?matchCookie(cookies,"_ga",/^GA\d\.\d+\.(\d+)\.(\d+)$/,report):null,gaSessionId:ga?matchCookie(cookies,sessionCookie,/^(?:GS1\.\d+\.(\d+)\.|GS2\.\d+\.s(\d+)(?:\$|$))/,report):null,fbp:ads?matchCookie(cookies,"_fbp",/^(fb\.\d\.\d+\.\d+)$/,report):null,fbc:ads?matchCookie(cookies,"_fbc",/^(fb\.\d\.\d+\.[\w-]+)$/,report):null};const parsed=attributionIdsSchema.safeParse(ids);if(parsed.success)return parsed.data;report(parsed.error,"ids");return NO_IDS}var isDirect=touch=>classifyChannel({...touch,siteHost:globalThis.location?.hostname??""}).channel==="direct";var TOUCH_ELEMENT_ID="__suiteop_touch";var CONSENT_EVENT="suiteop:consent";var DENIED={analytics:false,ads:false,source:"default",region:"restricted",decidedAt:null};var defaultReport=(err,where)=>{console.warn(`[suiteop] ignored malformed attribution input (${where})`,err);};function pageConsent(){const read=globalThis.__suiteop?.consent?.get;const parsed=consentStateSchema.safeParse(typeof read==="function"?read():null);return parsed.success?parsed.data:DENIED}function pageTouch(report){const text=document.getElementById(TOUCH_ELEMENT_ID)?.textContent;if(!text)return null;try{return attributionTouchSchema.parse(JSON.parse(text))}catch(err){report(err,TOUCH_ELEMENT_ID);return null}}function storedCookie(cookies,report){try{return decodeAttributionCookie(readCookie(cookies,ATTRIBUTION_COOKIE))}catch(err){report(err,ATTRIBUTION_COOKIE);return null}}function getAttribution(opts={}){if(typeof document==="undefined")return null;const report=opts.report??defaultReport;const cookies=document.cookie;const consent=pageConsent();const stored=consent.analytics?storedCookie(cookies,report):null;const touch=pageTouch(report);const pageIsLast=touch!==null&&!(stored?.last&&(isDirect(touch)||Date.parse(stored.last.ts)>Date.parse(touch.ts)));const experiment=consent.analytics?readExperimentCookie(cookies):null;return {first:stored?.first??touch,last:pageIsLast?touch:stored?.last??null,ids:browserIdsFromCookies(cookies,consent,report),consent,...experiment?{experiment}:{}}}function watchAttributionConsent(opts={}){if(typeof window==="undefined")return ()=>{};const report=opts.report??defaultReport;const persist=consent=>{if(readCookie(document.cookie,ATTRIBUTION_COOKIE))return;const touch=pageTouch(report);if(!touch)return;const kept=consent.ads?touch:withoutClickIds(touch);const cookie=serializeAttributionCookie({first:kept,last:kept});if(cookie)document.cookie=cookie;};const withdraw=consent=>{for(const cookie of expiredAttributionCookies(document.cookie,consent)){document.cookie=cookie;}if(consent.analytics&&!consent.ads){const stripped=strippedAttributionCookie(storedCookie(document.cookie,report));if(stripped)document.cookie=stripped;}};const initial=pageConsent();let analytics=initial.analytics;if(initial.source==="user")withdraw(initial);if(analytics)persist(initial);const onConsent=event=>{const next=consentStateSchema.safeParse(event.detail);if(!next.success)return;const granted=!analytics&&next.data.analytics;analytics=next.data.analytics;withdraw(next.data);if(granted)persist(next.data);};window.addEventListener(CONSENT_EVENT,onConsent);return ()=>window.removeEventListener(CONSENT_EVENT,onConsent)}var EVENTS_ENDPOINT="/_suiteop/events";var FLUSH_INTERVAL_MS=2e3;var FLUSH_AT_EVENTS=10;var defaultReport2=err=>{console.warn("[suiteop] storefront events could not be sent",err);};function hostOf2(url){try{return new URL(url).hostname||null}catch{return null}}var META_EVENTS={begin_checkout:"InitiateCheckout",generate_lead:"Lead",sign_up:"CompleteRegistration",view_item:"ViewContent",view_search_results:"Search",add_payment_info:"AddPaymentInfo"};var GTAG_SKIP=new Set(["page_view","purchase"]);function mirrorToTags(event){const w=window;if(typeof w.gtag!=="function"&&typeof w.fbq!=="function")return;const consent=pageConsent();const{name,eventId,ts:_ts,path:_path,referrerHost:_ref,...params}=event;if(consent.analytics&&typeof w.gtag==="function"&&!GTAG_SKIP.has(name)){w.gtag("event",name,params);}const metaName=META_EVENTS[name];if(consent.ads&&typeof w.fbq==="function"&&metaName){w.fbq("track",metaName,{},{eventID:eventId});}}function trackPurchasePixel(booking){if(typeof window==="undefined")return;const fbq=window.fbq;if(typeof fbq!=="function"||!pageConsent().ads)return;const amount=typeof booking.totalMinor==="number"&&booking.currency?{value:booking.totalMinor/100,currency:booking.currency.toUpperCase()}:{};fbq("track","Purchase",amount,{eventID:booking.bookingRequestId});}var NOOP={track(){},pageView(){},flush(){},dispose(){}};function createAnalytics(opts){if(typeof window==="undefined")return NOOP;const report=opts.report??defaultReport2;const url=`${EVENTS_ENDPOINT}?key=${encodeURIComponent(opts.publishableKey)}`;let queue=[];let timer=null;let landing=true;let lastViewedHref=null;let disabled=false;let reported=false;const fail=err=>{if(reported)return;reported=true;report(err);};const send=(events,beacon)=>{const body=JSON.stringify({events});if(beacon&&typeof navigator.sendBeacon==="function"&&navigator.sendBeacon(url,body)){return}fetch(url,{method:"POST",body,keepalive:true,credentials:"same-origin",headers:{"content-type":"application/json"}}).then(response=>{if(response.status===404)disabled=true;else if(!response.ok)fail(new Error(`storefront events answered ${response.status}`));}).catch(fail);};const flush=({beacon=false}={})=>{if(timer)clearTimeout(timer);timer=null;if(disabled||queue.length===0)return;const pending=queue;queue=[];for(let i=0;i<pending.length;i+=STOREFRONT_EVENT_BATCH_MAX){send(pending.slice(i,i+STOREFRONT_EVENT_BATCH_MAX),beacon);}};const enqueue=(event,referrerHost)=>{const full={...event,eventId:crypto.randomUUID(),ts:Date.now(),path:location.pathname.slice(0,STOREFRONT_EVENT_PATH_MAX),referrerHost};try{mirrorToTags(full);}catch(err){fail(err);}if(disabled)return;queue.push(full);if(queue.length>=FLUSH_AT_EVENTS)flush();else timer??=setTimeout(()=>flush(),FLUSH_INTERVAL_MS);};const pageView=()=>{if(location.href===lastViewedHref)return;lastViewedHref=location.href;const referrerHost=landing?hostOf2(document.referrer):location.hostname;landing=false;enqueue({name:"page_view"},referrerHost);};const onPageHide=()=>flush({beacon:true});const onPageShow=event=>{if(!event.persisted)return;lastViewedHref=null;pageView();};window.addEventListener("pagehide",onPageHide);window.addEventListener("pageshow",onPageShow);return {track:event=>enqueue(event,location.hostname),pageView,flush,dispose:()=>{flush({beacon:true});window.removeEventListener("pagehide",onPageHide);window.removeEventListener("pageshow",onPageShow);}}}var shared=new Map;function analyticsFor(publishableKey){let instance=shared.get(publishableKey);if(!instance){instance=createAnalytics({publishableKey});if(instance!==NOOP)shared.set(publishableKey,instance);}return instance}function parsePublishableKey(key){if(typeof key==="string"&&key.trim().startsWith("sk_")){throw new chunkJ5FZ4WDQ_cjs.StorefrontConfigError("A SuiteOp secret key (sk_\u2026) was passed as the publishable key. Secret keys must never be used in a browser or shipped in site code \u2014 revoke it now, then use a publishable key (pk_live_\u2026 / pk_test_\u2026) from the site settings.")}const parsed=typeof key==="string"?parseStorefrontKey(key.trim()):null;if(!parsed){throw new chunkJ5FZ4WDQ_cjs.StorefrontConfigError("Invalid SuiteOp publishable key: expected pk_{live|test}_{us|eu|apac}_ followed by 24 letters or digits.")}if(parsed.region==="demo"){throw new chunkJ5FZ4WDQ_cjs.StorefrontConfigError("Invalid SuiteOp publishable key: expected pk_{live|test}_{us|eu|apac}_ followed by 24 letters or digits.")}return {environment:parsed.environment,region:parsed.region}}function defaultApiOrigin({environment,region}){return environment==="live"?`https://api-${region}.suiteop.com`:`https://api-${region}-staging.suiteop.com`}var SDK_VERSION="0.6.0";var STOREFRONT_API_VERSION="2026-09-27";var GET_RETRY_JITTER_MS=300;function buildUrl(base2,spec){const params=new URLSearchParams;for(const[key,value]of Object.entries(spec.query??{})){if(Array.isArray(value))for(const item of value)params.append(key,item);else if(value!==void 0&&value!==null)params.set(key,String(value));}const search=params.toString();return `${base2}${spec.path}${search?`?${search}`:""}`}function sleep(ms,signal){return new Promise((resolve,reject)=>{if(signal?.aborted)return reject(signal.reason);const onAbort=()=>{clearTimeout(timer);reject(signal?.reason);};const timer=setTimeout(()=>{signal?.removeEventListener("abort",onAbort);resolve();},ms);signal?.addEventListener("abort",onAbort,{once:true});})}function parseJson(text){if(!text)return void 0;try{return JSON.parse(text)}catch{return void 0}}function isRetryable(err){return err instanceof chunkJ5FZ4WDQ_cjs.StorefrontNetworkError||err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError&&err.status>=500}function createTransport(opts){async function attempt(spec){const controller=new AbortController;let timedOut=false;const timer=setTimeout(()=>{timedOut=true;controller.abort(new DOMException("The request timed out","TimeoutError"));},spec.timeoutMs);const onCallerAbort=()=>controller.abort(spec.signal?.reason);if(spec.signal?.aborted)onCallerAbort();else spec.signal?.addEventListener("abort",onCallerAbort,{once:true});try{let response;let text;try{response=await opts.fetch(buildUrl(opts.baseUrl(),spec),{method:spec.method,headers:{...opts.headers,...spec.body===void 0?{}:{"Content-Type":"application/json"},...spec.headers},body:spec.body===void 0?void 0:JSON.stringify(spec.body),signal:controller.signal});text=await response.text();}catch(err){if(spec.signal?.aborted)throw spec.signal.reason;if(timedOut)throw new chunkJ5FZ4WDQ_cjs.StorefrontTimeoutError(spec.timeoutMs);throw new chunkJ5FZ4WDQ_cjs.StorefrontNetworkError(err)}const body=parseJson(text);if(!response.ok)throw chunkJ5FZ4WDQ_cjs.errorFromResponse(response,body);const envelope=body;const meta=envelope?.meta??{};const requestId=typeof meta["requestId"]==="string"?meta["requestId"]:response.headers.get("x-request-id");if(!envelope||typeof envelope!=="object"||!("data"in envelope)){throw new chunkJ5FZ4WDQ_cjs.StorefrontError({status:response.status,code:"invalid_response",message:"The Storefront API answered without a data envelope",requestId})}return {status:response.status,requestId,data:envelope.data,meta}}finally{clearTimeout(timer);spec.signal?.removeEventListener("abort",onCallerAbort);}}return {async send(spec){try{return await attempt(spec)}catch(err){if(spec.method!=="GET"||!isRetryable(err))throw err;await sleep(Math.random()*GET_RETRY_JITTER_MS,spec.signal);return attempt(spec)}}}}var STOREFRONT_API_PATH="/api/storefront/v1";var READ_TIMEOUT_MS=1e4;var WRITE_TIMEOUT_MS=2e4;function resolveBaseUrl(baseUrl,origin){if(baseUrl===void 0)return `${origin}${STOREFRONT_API_PATH}`;if(baseUrl==="same-origin"){const pageOrigin=globalThis.location?.origin;if(!pageOrigin||pageOrigin==="null"){throw new chunkJ5FZ4WDQ_cjs.StorefrontConfigError("baseUrl 'same-origin' needs a page origin; pass an explicit baseUrl outside a browser.")}return `${pageOrigin}${STOREFRONT_API_PATH}`}let url;try{url=new URL(baseUrl);}catch{throw new chunkJ5FZ4WDQ_cjs.StorefrontConfigError(`baseUrl must be an absolute URL or 'same-origin'.`)}const path=url.pathname.replace(/\/+$/,"");return `${url.origin}${path.endsWith(STOREFRONT_API_PATH)?path:`${path}${STOREFRONT_API_PATH}`}`}function uuidV4(){const c=globalThis.crypto;if(typeof c.randomUUID==="function")return c.randomUUID();const b=c.getRandomValues(new Uint8Array(16));b[6]=b[6]&15|64;b[8]=b[8]&63|128;const hex=Array.from(b,x=>x.toString(16).padStart(2,"0")).join("");return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`}function validate(schema,value,res){const parsed=schema.safeParse(value);if(parsed.success)return parsed.data;throw new chunkJ5FZ4WDQ_cjs.StorefrontError({status:res.status,code:"invalid_response",message:"The Storefront API answered a shape this SDK version does not understand",requestId:res.requestId,details:{issues:parsed.error.issues.map(i=>({path:i.path,code:i.code}))}})}var paginationSchema=zod.z.object({total:zod.z.number().int(),limit:zod.z.number().int(),offset:zod.z.number().int()});var seg=value=>encodeURIComponent(value);var SLUG_OR_ID=/^[a-z0-9-]{1,120}$/;var slotOf=(quoteRef,ratePlanId)=>`${quoteRef}\0${ratePlanId??""}`;var RELEASED_SESSION_STATUSES=new Set(["expired","cancelled"]);var KEY_BOUND_ELSEWHERE="idempotency_key_reused";function endsSession(err){return err.code==="session_expired"||err.details["requiresNewSession"]===true}var attributionWatched=false;function createStorefrontClient(options){const key=parsePublishableKey(options.publishableKey);const baseUrl=resolveBaseUrl(options.baseUrl,defaultApiOrigin(key));const transport=createTransport({baseUrl:()=>baseUrl,fetch:(input,init)=>(options.fetch??globalThis.fetch)(input,init),headers:{Authorization:`Bearer ${options.publishableKey.trim()}`,Accept:"application/json","X-SuiteOp-SDK":`storefront-js/${SDK_VERSION}`,"X-SuiteOp-Api-Version":STOREFRONT_API_VERSION,...options.locale?{"Accept-Language":options.locale}:{}}});const keySlots=new Map;const sessionSlots=new Map;const release=(slot,key2)=>{if(keySlots.get(slot)===key2)keySlots.delete(slot);};const releaseSession=id=>{const entry=sessionSlots.get(id);if(!entry)return;sessionSlots.delete(id);release(...entry);};if(!attributionWatched&&typeof window!=="undefined"){attributionWatched=true;watchAttributionConsent();}const readTimeoutMs=options.timeoutMs??READ_TIMEOUT_MS;const writeTimeoutMs=options.timeoutMs??WRITE_TIMEOUT_MS;async function get(schema,path,opts,query){const res=await transport.send({method:"GET",path,query,timeoutMs:readTimeoutMs,signal:opts?.signal});return validate(schema,res.data,res)}async function post(schema,path,body,opts,headers){const res=await transport.send({method:"POST",path,body,headers,timeoutMs:writeTimeoutMs,signal:opts?.signal});return validate(schema,res.data,res)}return {publishableKey:options.publishableKey.trim(),baseUrl,site:{get:opts=>get(chunkQBHOJGZI_cjs.storefrontSiteSchema,"/site",opts)},listings:{async list(query,opts){const res=await transport.send({method:"GET",path:"/listings",query:{location:typeof query?.location==="string"?query.location:query?.location?.length?query.location.join(","):void 0,building:query?.building,guests:query?.guests,bedrooms:query?.bedrooms,currency:query?.currency,priceMin:query?.priceMin,priceMax:query?.priceMax,amenities:query?.amenities,bounds:typeof query?.bounds==="string"?query.bounds:query?.bounds?.join(","),checkIn:query?.checkIn,checkOut:query?.checkOut,sort:query?.sort,facets:query?.facets?1:void 0,limit:query?.limit,offset:query?.offset},timeoutMs:readTimeoutMs,signal:opts?.signal});const items=validate(zod.z.array(chunkQBHOJGZI_cjs.storefrontListingSummarySchema),res.data,res);const pagination=validate(paginationSchema,res.meta["pagination"],res);const facets=res.meta["facets"]===void 0?void 0:validate(chunkQBHOJGZI_cjs.storefrontListingFacetsSchema,res.meta["facets"],res);return {items,...pagination,...facets?{facets}:{}}},get:(id,opts)=>get(chunkQBHOJGZI_cjs.storefrontListingSchema,`/listings/${seg(id)}`,opts)},buildings:{list:opts=>get(zod.z.array(chunkQBHOJGZI_cjs.storefrontBuildingSchema),"/buildings",opts),get:(id,opts)=>get(chunkQBHOJGZI_cjs.storefrontBuildingSchema,`/buildings/${seg(id)}`,opts),async availability(id,query,opts){const res=await transport.send({method:"GET",path:`/buildings/${seg(id)}/availability`,query:{checkIn:query.checkIn,checkOut:query.checkOut,guests:query.guests,limit:query.limit,offset:query.offset},timeoutMs:readTimeoutMs,signal:opts?.signal});const items=validate(zod.z.array(chunkEHQFWSP6_cjs.storefrontUnitAvailabilitySchema),res.data,res);const pagination=validate(paginationSchema,res.meta["pagination"],res);return {items,...pagination}}},locations:{list:opts=>get(zod.z.array(chunkQBHOJGZI_cjs.storefrontLocationSchema),"/locations",opts)},guides:{list:opts=>get(zod.z.array(storefrontGuideSchema),"/guides",opts),async get(id,opts){if(!chunkQBHOJGZI_cjs.storefrontIdSchema.safeParse(id).success)return null;try{return await get(storefrontGuideSchema,`/guides/${seg(id)}`,opts)}catch(err){if(err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError&&err.status===404)return null;throw err}}},contentModel:{get:opts=>get(chunkQBHOJGZI_cjs.storefrontContentModelSchema,"/content-model",opts)},collections:{async list(key2,query,opts){const res=await transport.send({method:"GET",path:`/collections/${seg(key2)}/items`,query:{limit:query?.limit,offset:query?.offset},timeoutMs:readTimeoutMs,signal:opts?.signal});const items=validate(zod.z.array(chunkQBHOJGZI_cjs.storefrontContentItemSchema),res.data,res);const pagination=validate(paginationSchema,res.meta["pagination"],res);return {items,...pagination}},async get(key2,slugOrId,opts){if(!SLUG_OR_ID.test(slugOrId))return null;try{return await get(chunkQBHOJGZI_cjs.storefrontContentItemSchema,`/collections/${seg(key2)}/items/${seg(slugOrId)}`,opts)}catch(err){if(err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError&&err.status===404)return null;throw err}}},sections:{get:(key2,opts)=>get(chunkQBHOJGZI_cjs.storefrontContentItemSchema,`/sections/${seg(key2)}`,opts)},amenities:{list:opts=>get(zod.z.array(zod.z.string()),"/amenities",opts)},reviews:{list:(query,opts)=>get(zod.z.array(chunkQBHOJGZI_cjs.storefrontReviewSchema),"/reviews",opts,{listingId:query?.listingId,limit:query?.limit,offset:query?.offset})},availability:{get:(listingId,stay,opts)=>get(chunkEHQFWSP6_cjs.storefrontAvailabilitySchema,`/listings/${seg(listingId)}/availability`,opts,{checkIn:stay.checkIn,checkOut:stay.checkOut,guests:stay.guests})},calendar:{get:(listingId,range,opts)=>get(chunkEHQFWSP6_cjs.storefrontCalendarSchema,`/listings/${seg(listingId)}/calendar`,opts,{from:range.from,to:range.to})},quotes:{create:(input,opts)=>post(chunkJ5FZ4WDQ_cjs.storefrontQuoteSchema,"/quotes",input,opts)},checkoutSessions:{async create(input,opts){const slot=slotOf(input.quoteRef,input.ratePlanId);const idempotencyKey=opts?.idempotencyKey??keySlots.get(slot)??uuidV4();keySlots.set(slot,idempotencyKey);const attribution=input.attribution===void 0?getAttribution():input.attribution;const body=attribution?{...input,attribution}:input;try{const created=await post(checkoutSessionSchema,"/checkout-sessions",body,opts,{"Idempotency-Key":idempotencyKey});if(RELEASED_SESSION_STATUSES.has(created.status))release(slot,idempotencyKey);else sessionSlots.set(created.id,[slot,idempotencyKey]);return {...created,idempotencyKey}}catch(err){if(err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError){err.details["idempotencyKey"]=idempotencyKey;if(err.code===KEY_BOUND_ELSEWHERE)release(slot,idempotencyKey);}throw err}},get:(id,opts)=>get(checkoutSessionSchema,`/checkout-sessions/${seg(id)}`,opts),async confirm(id,input,opts){try{const result=await post(bookingResultSchema,`/checkout-sessions/${seg(id)}/confirm`,input,opts);return result}catch(err){if(err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError&&endsSession(err)){releaseSession(id);}throw err}},forget(quoteRef,ratePlanId){keySlots.delete(slotOf(quoteRef,ratePlanId));}},bookings:{get:(token,opts)=>get(storefrontBookingSchema,`/bookings/${seg(token)}`,opts)},contact:{async create(input,opts){await post(chunkQBHOJGZI_cjs.storefrontContactResultSchema,"/contact",input,opts);}}}}
10
+
11
+ exports.SDK_VERSION = SDK_VERSION;
12
+ exports.STOREFRONT_API_PATH = STOREFRONT_API_PATH;
13
+ exports.STOREFRONT_API_VERSION = STOREFRONT_API_VERSION;
14
+ exports.analyticsFor = analyticsFor;
15
+ exports.createAnalytics = createAnalytics;
16
+ exports.createStorefrontClient = createStorefrontClient;
17
+ exports.getAttribution = getAttribution;
18
+ exports.parsePublishableKey = parsePublishableKey;
19
+ exports.trackPurchasePixel = trackPurchasePixel;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var REGIONS=["us","eu","apac","demo"];var BE_BOOKING_REQUEST_STATUSES=["inquiry","processing","confirmed","failed","expired","pending_pms_sync","pending_payment","authorized","reserved","cancelled"];var STOREFRONT_KEY_ENVIRONMENTS=["live","test"];var GOOGLE_FONTS=["inter","montserrat","poppins","raleway","nunito","work_sans","mulish","barlow","jost","bitter","archivo","public_sans","gantari","anybody","lato","playfair_display","karla","reddit_sans","overpass","roboto","open_sans","merriweather","outfit"];var STOREFRONT_FONTS=[...GOOGLE_FONTS,"fraunces","dm_sans","cormorant_garamond","eb_garamond","lora","crimson_pro","source_serif_4","ibm_plex_serif","manrope","plus_jakarta_sans","space_grotesk","ibm_plex_sans","libre_franklin","josefin_sans"];var STOREFRONT_FONT_FAMILIES={inter:"Inter",montserrat:"Montserrat",poppins:"Poppins",raleway:"Raleway",nunito:"Nunito",work_sans:"Work Sans",mulish:"Mulish",barlow:"Barlow",jost:"Jost",bitter:"Bitter",archivo:"Archivo",public_sans:"Public Sans",gantari:"Gantari",anybody:"Anybody",lato:"Lato",playfair_display:"Playfair Display",karla:"Karla",reddit_sans:"Reddit Sans",overpass:"Overpass",roboto:"Roboto",open_sans:"Open Sans",merriweather:"Merriweather",outfit:"Outfit",fraunces:"Fraunces",dm_sans:"DM Sans",cormorant_garamond:"Cormorant Garamond",eb_garamond:"EB Garamond",lora:"Lora",crimson_pro:"Crimson Pro",source_serif_4:"Source Serif 4",ibm_plex_serif:"IBM Plex Serif",manrope:"Manrope",plus_jakarta_sans:"Plus Jakarta Sans",space_grotesk:"Space Grotesk",ibm_plex_sans:"IBM Plex Sans",libre_franklin:"Libre Franklin",josefin_sans:"Josefin Sans"};
4
+
5
+ exports.BE_BOOKING_REQUEST_STATUSES = BE_BOOKING_REQUEST_STATUSES;
6
+ exports.REGIONS = REGIONS;
7
+ exports.STOREFRONT_FONTS = STOREFRONT_FONTS;
8
+ exports.STOREFRONT_FONT_FAMILIES = STOREFRONT_FONT_FAMILIES;
9
+ exports.STOREFRONT_KEY_ENVIRONMENTS = STOREFRONT_KEY_ENVIRONMENTS;
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkLY73ZYN5_cjs = require('./chunk-LY73ZYN5.cjs');
3
+ var chunkQBHOJGZI_cjs = require('./chunk-QBHOJGZI.cjs');
4
4
  var chunkJ5FZ4WDQ_cjs = require('./chunk-J5FZ4WDQ.cjs');
5
5
  var zod = require('zod');
6
6
 
7
7
  var CONTENT_FIELD_TYPES=["text","rich_text","image","gallery","number","boolean","date","option","link","reference","references"];var CONTENT_TYPE_KINDS=["collection","section","fields"];var CONTENT_SUBJECT_KINDS=["building","area"];var CONTENT_REFERENCE_KINDS=["listing","building","area"];var MAX_CONTENT_TYPES=40;var MAX_CONTENT_FIELDS=40;var contentKeySchema=zod.z.string().regex(/^[a-z][a-z0-9_]{0,39}$/,"validation.invalid_format");var contentLocalizedSchema=zod.z.union([zod.z.string().min(1).max(120),zod.z.record(zod.z.string().min(2).max(35),zod.z.string().min(1).max(120))]);var COLLECTION_TARGET=/^collection:[a-z][a-z0-9_]{0,39}$/;var contentReferenceTargetSchema=zod.z.union([zod.z.enum(CONTENT_REFERENCE_KINDS),zod.z.string().regex(COLLECTION_TARGET,"validation.invalid_format")]);var TEXT_TYPES=new Set(["text","rich_text"]);var LIST_TYPES=new Set(["gallery","references"]);var REFERENCE_TYPES=new Set(["reference","references"]);var contentFieldSchema=zod.z.object({key:contentKeySchema,type:zod.z.enum(CONTENT_FIELD_TYPES),label:contentLocalizedSchema,help:contentLocalizedSchema.optional(),required:zod.z.boolean().default(false),translatable:zod.z.boolean().optional(),maxLength:zod.z.number().int().min(1).max(6e4).optional(),options:zod.z.array(zod.z.object({value:contentKeySchema,label:contentLocalizedSchema})).min(1).max(50).optional(),to:contentReferenceTargetSchema.optional(),max:zod.z.number().int().min(1).max(100).optional(),removed:zod.z.boolean().optional()}).superRefine((field2,ctx)=>{if(field2.type==="option"&&!field2.options?.length){ctx.addIssue({code:"custom",path:["options"],message:"validation.required"});}if(field2.options&&new Set(field2.options.map(o=>o.value)).size!==field2.options.length){ctx.addIssue({code:"custom",path:["options"],message:"validation.invalid"});}if(REFERENCE_TYPES.has(field2.type)&&!field2.to){ctx.addIssue({code:"custom",path:["to"],message:"validation.required"});}if(field2.maxLength!==void 0&&!TEXT_TYPES.has(field2.type)){ctx.addIssue({code:"custom",path:["maxLength"],message:"validation.invalid"});}if(field2.max!==void 0&&!LIST_TYPES.has(field2.type)){ctx.addIssue({code:"custom",path:["max"],message:"validation.invalid"});}});var contentTypeSchema=zod.z.object({key:contentKeySchema,kind:zod.z.enum(CONTENT_TYPE_KINDS),label:contentLocalizedSchema,description:contentLocalizedSchema.optional(),attachesTo:zod.z.enum(CONTENT_SUBJECT_KINDS).optional(),titleField:contentKeySchema.optional(),routable:zod.z.boolean().default(false),drafts:zod.z.boolean().default(false),order:zod.z.enum(["manual","newest"]).default("manual"),fields:zod.z.array(contentFieldSchema).min(1).max(MAX_CONTENT_FIELDS)}).superRefine((type,ctx)=>{const keys=type.fields.map(f=>f.key);keys.forEach((key,i)=>{if(keys.indexOf(key)!==i){ctx.addIssue({code:"custom",path:["fields",i,"key"],message:"validation.invalid"});}});if(type.kind==="fields"!==(type.attachesTo!==void 0)){ctx.addIssue({code:"custom",path:["attachesTo"],message:"validation.invalid"});}if(type.kind==="collection"){const title=type.fields.find(f=>f.key===type.titleField);if(!title||title.type!=="text"){ctx.addIssue({code:"custom",path:["titleField"],message:"validation.invalid"});}}else if(type.titleField!==void 0){ctx.addIssue({code:"custom",path:["titleField"],message:"validation.invalid"});}});var contentModelSchema=zod.z.object({version:zod.z.literal(1),types:zod.z.array(contentTypeSchema).max(MAX_CONTENT_TYPES)}).superRefine((model,ctx)=>{const keys=model.types.map(t=>t.key);const collections=new Set(model.types.filter(t=>t.kind==="collection").map(t=>t.key));model.types.forEach((type,i)=>{if(keys.indexOf(type.key)!==i){ctx.addIssue({code:"custom",path:["types",i,"key"],message:"validation.invalid"});}type.fields.forEach((field2,j)=>{const target=field2.to?.startsWith("collection:")?field2.to.slice(11):null;if(target!==null&&!collections.has(target)){ctx.addIssue({code:"custom",path:["types",i,"fields",j,"to"],message:"validation.invalid"});}});});});function defineContent(definition){return definition}var field={text:o=>({...o,type:"text"}),richText:o=>({...o,type:"rich_text"}),image:o=>({...o,type:"image"}),gallery:o=>({...o,type:"gallery"}),number:o=>({...o,type:"number"}),boolean:o=>({...o,type:"boolean"}),date:o=>({...o,type:"date"}),option:o=>({...o,type:"option"}),link:o=>({...o,type:"link"}),reference:o=>({...o,type:"reference"}),references:o=>({...o,type:"references"})};var optionOf=choice=>typeof choice==="string"?{value:choice,label:choice}:choice;function toContentModel(definition){return {version:1,types:Object.entries(definition).map(([key,type])=>({...type,key,fields:Object.entries(type.fields).map(([fieldKey,f])=>f.type==="option"?{...f,key:fieldKey,options:f.options.map(optionOf)}:{...f,key:fieldKey})}))}}function parseContentModel(definition){const parsed=contentModelSchema.safeParse(toContentModel(definition));if(parsed.success)return parsed.data;const problems=parsed.error.issues.map(i=>`${i.path.join(".")}: ${i.message}`);throw new Error(`Invalid SuiteOp content model:
8
- ${problems.join("\n ")}`)}var DAY=/^\d{4}-\d{2}-\d{2}$/;var linkSchema=zod.z.object({url:zod.z.string(),label:zod.z.string().optional()});function valueSchema(f){switch(f.type){case "text":case "rich_text":return zod.z.string();case "date":return zod.z.string().regex(DAY);case "image":return zod.z.union([chunkLY73ZYN5_cjs.storefrontImageSchema,zod.z.array(chunkLY73ZYN5_cjs.storefrontImageSchema).min(1).transform(photos=>photos[0])]);case "gallery":return zod.z.array(chunkLY73ZYN5_cjs.storefrontImageSchema);case "number":return zod.z.number();case "boolean":return zod.z.boolean();case "option":{const values=new Set(f.options.map(o=>optionOf(o).value));return zod.z.string().refine(v=>values.has(v))}case "link":return linkSchema;case "reference":return chunkLY73ZYN5_cjs.storefrontContentRefSchema;case "references":return zod.z.array(chunkLY73ZYN5_cjs.storefrontContentRefSchema)}}var isList=f=>f.type==="gallery"||f.type==="references";function readFields(type,values){const out={};for(const[key,f]of Object.entries(type.fields)){const raw=values?.[key];const parsed=raw===void 0||raw===null?null:valueSchema(f).safeParse(raw);out[key]=parsed?.success?parsed.data:isList(f)?[]:null;}return out}function toItem(type,item){return {id:item.id,slug:item.slug,publishedAt:item.publishedAt,updatedAt:item.updatedAt,sortOrder:item.sortOrder,fields:readFields(type,item.fields)}}async function orEmpty(read,empty){try{return await read}catch(err){if(err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError&&err.status===404)return empty();throw err}}function createContentReader(client,definition){return {collection:key=>({async list(query,opts){const page=await orEmpty(client.collections.list(key,query,opts),()=>({items:[],total:0,limit:query?.limit??20,offset:query?.offset??0}));return {...page,items:page.items.map(item=>toItem(definition[key],item))}},async get(slugOrId,opts){const item=await client.collections.get(key,slugOrId,opts);return item?toItem(definition[key],item):null}}),section:key=>({get:async opts=>toItem(definition[key],await orEmpty(client.sections.get(key,opts),()=>({id:"",type:key,slug:null,publishedAt:null,updatedAt:new Date(0).toISOString(),sortOrder:0,fields:{}})))}),fieldsOf:(key,record)=>readFields(definition[key],record.fields?.[key])}}
8
+ ${problems.join("\n ")}`)}var DAY=/^\d{4}-\d{2}-\d{2}$/;var linkSchema=zod.z.object({url:zod.z.string(),label:zod.z.string().optional()});function valueSchema(f){switch(f.type){case "text":case "rich_text":return zod.z.string();case "date":return zod.z.string().regex(DAY);case "image":return zod.z.union([chunkQBHOJGZI_cjs.storefrontImageSchema,zod.z.array(chunkQBHOJGZI_cjs.storefrontImageSchema).min(1).transform(photos=>photos[0])]);case "gallery":return zod.z.array(chunkQBHOJGZI_cjs.storefrontImageSchema);case "number":return zod.z.number();case "boolean":return zod.z.boolean();case "option":{const values=new Set(f.options.map(o=>optionOf(o).value));return zod.z.string().refine(v=>values.has(v))}case "link":return linkSchema;case "reference":return chunkQBHOJGZI_cjs.storefrontContentRefSchema;case "references":return zod.z.array(chunkQBHOJGZI_cjs.storefrontContentRefSchema)}}var isList=f=>f.type==="gallery"||f.type==="references";function readFields(type,values){const out={};for(const[key,f]of Object.entries(type.fields)){const raw=values?.[key];const parsed=raw===void 0||raw===null?null:valueSchema(f).safeParse(raw);out[key]=parsed?.success?parsed.data:isList(f)?[]:null;}return out}function toItem(type,item){return {id:item.id,slug:item.slug,publishedAt:item.publishedAt,updatedAt:item.updatedAt,sortOrder:item.sortOrder,fields:readFields(type,item.fields)}}async function orEmpty(read,empty){try{return await read}catch(err){if(err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError&&err.status===404)return empty();throw err}}function createContentReader(client,definition){return {collection:key=>({async list(query,opts){const page=await orEmpty(client.collections.list(key,query,opts),()=>({items:[],total:0,limit:query?.limit??20,offset:query?.offset??0}));return {...page,items:page.items.map(item=>toItem(definition[key],item))}},async get(slugOrId,opts){const item=await client.collections.get(key,slugOrId,opts);return item?toItem(definition[key],item):null}}),section:key=>({get:async opts=>toItem(definition[key],await orEmpty(client.sections.get(key,opts),()=>({id:"",type:key,slug:null,publishedAt:null,updatedAt:new Date(0).toISOString(),sortOrder:0,fields:{}})))}),fieldsOf:(key,record)=>readFields(definition[key],record.fields?.[key])}}
9
9
 
10
10
  exports.contentModelSchema = contentModelSchema;
11
11
  exports.createContentReader = createContentReader;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var chunkEHQFWSP6_cjs = require('./chunk-EHQFWSP6.cjs');
4
+ var zod = require('zod');
5
+
6
+ var emailField=zod.z.string().trim().toLowerCase().pipe(zod.z.email("validation.email_invalid"));zod.z.string().trim().min(1,"validation.email_required").pipe(emailField);var trimmedEmailField=zod.z.string().trim().pipe(zod.z.email("validation.email_invalid"));var requiredTrimmedEmailField=zod.z.string().trim().min(1,"validation.email_required").pipe(trimmedEmailField);zod.z.string().nullish().transform((raw,ctx)=>{if(raw===void 0)return void 0;const trimmed=(raw??"").trim().toLowerCase();if(!trimmed)return null;if(!zod.z.email().safeParse(trimmed).success){ctx.addIssue({code:"custom",message:"validation.email_invalid"});return zod.z.NEVER}return trimmed});var storefrontIdSchema=zod.z.uuid();var storefrontSiteSchema=zod.z.object({id:zod.z.uuid(),name:zod.z.string(),slug:zod.z.string(),isActive:zod.z.boolean(),enableWebChat:zod.z.boolean(),mapEmbedHost:zod.z.string().nullable(),countryCode:zod.z.string().nullish(),bookingsOpen:zod.z.boolean().optional()});var storefrontListingSummarySchema=zod.z.object({id:zod.z.uuid(),buildingId:zod.z.uuid(),sortOrder:zod.z.number().int(),name:zod.z.string(),coverImageUrl:zod.z.string().nullable(),city:zod.z.string().nullable(),state:zod.z.string().nullable(),bedroomCount:zod.z.number().int().nullable(),bathroomCount:zod.z.number().nullable(),maxGuests:zod.z.number().int().nullable(),averageRating:zod.z.number().nullable(),latitude:zod.z.number().nullable(),longitude:zod.z.number().nullable(),bookable:zod.z.boolean(),fromPriceMinor:zod.z.number().int().nonnegative().nullish(),currency:zod.z.string().nullish()});var storefrontImageSchema=zod.z.object({url:zod.z.string(),alt:zod.z.string().nullable(),width:zod.z.number().int().nullable(),height:zod.z.number().int().nullable()});var storefrontListingSchema=storefrontListingSummarySchema.extend({buildingSlug:zod.z.string(),buildingAddress:zod.z.unknown(),description:zod.z.string().nullable(),amenities:zod.z.array(zod.z.string()),pictures:zod.z.unknown(),images:zod.z.array(storefrontImageSchema).optional(),rooms:zod.z.unknown(),houseRules:zod.z.string().nullable(),checkInTime:zod.z.string().nullable(),checkOutTime:zod.z.string().nullable(),beds:zod.z.number().nullable(),countryCode:zod.z.string().nullish()});var STOREFRONT_LISTING_SORTS=["recommended","price_asc","price_desc","rating"];var asList=value=>value===void 0?void 0:Array.isArray(value)?value:[value];var boundsSchema=zod.z.string().transform(value=>value.split(",").map(part=>part.trim()===""?NaN:Number(part))).pipe(zod.z.tuple([zod.z.number().min(-90).max(90),zod.z.number().min(-180).max(180),zod.z.number().min(-90).max(90),zod.z.number().min(-180).max(180)]).refine(([swLat,,neLat])=>swLat<=neLat)).transform(([swLat,swLng,neLat,neLng])=>({swLat,swLng,neLat,neLng}));var listingsStaySchema=chunkEHQFWSP6_cjs.withStayRules(zod.z.object({checkIn:chunkEHQFWSP6_cjs.storefrontDateSchema,checkOut:chunkEHQFWSP6_cjs.storefrontDateSchema}));zod.z.object({location:zod.z.preprocess(value=>asList(value)?.flatMap(v=>typeof v==="string"?v.split(","):[v]),zod.z.array(zod.z.string().trim().min(1).max(200)).min(1).max(50).optional()).optional(),building:zod.z.uuid().optional(),guests:zod.z.coerce.number().int().min(1).max(100).optional(),bedrooms:zod.z.coerce.number().int().min(0).max(50).optional(),currency:zod.z.string().trim().regex(/^[A-Za-z]{3}$/).transform(value=>value.toLowerCase()).optional(),priceMin:zod.z.coerce.number().int().min(0).optional(),priceMax:zod.z.coerce.number().int().min(0).optional(),amenities:zod.z.preprocess(asList,zod.z.array(zod.z.string().trim().min(1).max(200)).min(1).max(30).optional()).optional(),bounds:boundsSchema.optional(),checkIn:chunkEHQFWSP6_cjs.storefrontDateSchema.optional(),checkOut:chunkEHQFWSP6_cjs.storefrontDateSchema.optional(),sort:zod.z.enum(STOREFRONT_LISTING_SORTS).optional(),facets:zod.z.enum(["0","1","true","false"]).transform(value=>value==="1"||value==="true").optional(),limit:zod.z.coerce.number().int().min(1).max(100).default(50),offset:zod.z.coerce.number().int().min(0).max(1e4).default(0)}).refine(q=>q.currency!==void 0||q.priceMin===void 0&&q.priceMax===void 0,{path:["currency"],message:"validation.required"}).refine(q=>q.priceMin===void 0||q.priceMax===void 0||q.priceMin<=q.priceMax,{path:["priceMax"],message:"validation.invalid"}).superRefine((q,ctx)=>{if(q.checkIn===void 0&&q.checkOut===void 0)return;if(q.checkIn===void 0||q.checkOut===void 0){const path=q.checkIn===void 0?"checkIn":"checkOut";ctx.addIssue({code:"custom",path:[path],message:"validation.required"});return}const stay=listingsStaySchema.safeParse({checkIn:q.checkIn,checkOut:q.checkOut});for(const issue of stay.error?.issues??[]){ctx.addIssue({code:"custom",path:issue.path,message:issue.message});}});var storefrontListingFacetsSchema=zod.z.object({total:zod.z.number().int(),areas:zod.z.array(zod.z.object({id:zod.z.uuid(),slug:zod.z.string().nullable(),count:zod.z.number().int()})),bedrooms:zod.z.array(zod.z.object({bedrooms:zod.z.number().int(),count:zod.z.number().int()})),price:zod.z.object({min:zod.z.number().int(),max:zod.z.number().int(),currency:zod.z.string().nullable(),buckets:zod.z.array(zod.z.number().int()).length(24)}).nullable()});var storefrontBuildingSchema=zod.z.object({id:zod.z.uuid(),locationId:zod.z.uuid().nullable(),nameId:zod.z.uuid().nullable(),descriptionId:zod.z.uuid().nullable(),slug:zod.z.string(),imageId:zod.z.uuid().nullable(),latitude:zod.z.number().nullable(),longitude:zod.z.number().nullable(),address:zod.z.unknown(),name:zod.z.string().nullish(),description:zod.z.string().nullish(),imageUrl:zod.z.string().nullish(),images:zod.z.array(storefrontImageSchema).nullish(),sortOrder:zod.z.number().int().nullish(),listingCount:zod.z.number().int().nullish(),fields:zod.z.record(zod.z.string(),zod.z.record(zod.z.string(),zod.z.unknown())).nullish()});var storefrontLocationSchema=zod.z.object({id:zod.z.uuid(),type:zod.z.string(),parentId:zod.z.uuid().nullable(),nameId:zod.z.uuid().nullable(),slug:zod.z.string().nullable(),imageId:zod.z.uuid().nullable(),latitude:zod.z.number().nullable(),longitude:zod.z.number().nullable(),address:zod.z.unknown(),sortOrder:zod.z.number().int(),name:zod.z.string().nullish(),description:zod.z.string().nullish(),imageUrl:zod.z.string().nullish(),images:zod.z.array(storefrontImageSchema).nullish(),buildingCount:zod.z.number().int().nullish(),fields:zod.z.record(zod.z.string(),zod.z.record(zod.z.string(),zod.z.unknown())).nullish()});zod.z.object({locale:zod.z.string().max(35).optional().catch(void 0)});var storefrontReviewSchema=zod.z.object({id:zod.z.uuid(),listingId:zod.z.uuid().nullable(),reviewedAt:zod.z.string().nullable(),rating:zod.z.number().nullable(),publicReview:zod.z.string(),source:zod.z.string().nullable()});zod.z.object({listingId:zod.z.uuid().optional(),limit:zod.z.coerce.number().int().min(1).max(100).default(20),offset:zod.z.coerce.number().int().min(0).max(1e4).default(0)});zod.z.object({name:zod.z.string().trim().min(1,"validation.name_required").max(200,"validation.name_max_length"),email:requiredTrimmedEmailField,subject:zod.z.string().trim().min(1,"validation.title_required").max(300,"validation.title_max_length"),message:zod.z.string().trim().min(10,"validation.message_min_length").max(1e4,"validation.message_max_length")});var storefrontContactResultSchema=zod.z.object({sent:zod.z.literal(true)});var storefrontContentRefSchema=zod.z.object({kind:zod.z.string(),id:zod.z.uuid(),slug:zod.z.string().nullable()});var storefrontContentItemSchema=zod.z.object({id:zod.z.uuid(),type:zod.z.string(),slug:zod.z.string().nullable(),publishedAt:zod.z.string().nullable(),updatedAt:zod.z.string(),sortOrder:zod.z.number().int(),fields:zod.z.record(zod.z.string(),zod.z.unknown())});var storefrontContentFieldDefSchema=zod.z.object({key:zod.z.string(),type:zod.z.string()}).catchall(zod.z.unknown());var storefrontContentModelSchema=zod.z.object({version:zod.z.number().int(),types:zod.z.array(zod.z.object({key:zod.z.string(),kind:zod.z.string(),fields:zod.z.array(storefrontContentFieldDefSchema)}).catchall(zod.z.unknown()))});zod.z.object({limit:zod.z.coerce.number().int().min(1).max(100).default(20),offset:zod.z.coerce.number().int().min(0).max(1e4).default(0),locale:zod.z.string().max(35).optional().catch(void 0)});zod.z.string().regex(/^[a-z][a-z0-9_]{0,39}$/);zod.z.string().min(1).max(120).regex(/^[a-z0-9-]+$/);
7
+
8
+ exports.requiredTrimmedEmailField = requiredTrimmedEmailField;
9
+ exports.storefrontBuildingSchema = storefrontBuildingSchema;
10
+ exports.storefrontContactResultSchema = storefrontContactResultSchema;
11
+ exports.storefrontContentItemSchema = storefrontContentItemSchema;
12
+ exports.storefrontContentModelSchema = storefrontContentModelSchema;
13
+ exports.storefrontContentRefSchema = storefrontContentRefSchema;
14
+ exports.storefrontIdSchema = storefrontIdSchema;
15
+ exports.storefrontImageSchema = storefrontImageSchema;
16
+ exports.storefrontListingFacetsSchema = storefrontListingFacetsSchema;
17
+ exports.storefrontListingSchema = storefrontListingSchema;
18
+ exports.storefrontListingSummarySchema = storefrontListingSummarySchema;
19
+ exports.storefrontLocationSchema = storefrontLocationSchema;
20
+ exports.storefrontReviewSchema = storefrontReviewSchema;
21
+ exports.storefrontSiteSchema = storefrontSiteSchema;
@@ -0,0 +1,3 @@
1
+ var REGIONS=["us","eu","apac","demo"];var BE_BOOKING_REQUEST_STATUSES=["inquiry","processing","confirmed","failed","expired","pending_pms_sync","pending_payment","authorized","reserved","cancelled"];var STOREFRONT_KEY_ENVIRONMENTS=["live","test"];var GOOGLE_FONTS=["inter","montserrat","poppins","raleway","nunito","work_sans","mulish","barlow","jost","bitter","archivo","public_sans","gantari","anybody","lato","playfair_display","karla","reddit_sans","overpass","roboto","open_sans","merriweather","outfit"];var STOREFRONT_FONTS=[...GOOGLE_FONTS,"fraunces","dm_sans","cormorant_garamond","eb_garamond","lora","crimson_pro","source_serif_4","ibm_plex_serif","manrope","plus_jakarta_sans","space_grotesk","ibm_plex_sans","libre_franklin","josefin_sans"];var STOREFRONT_FONT_FAMILIES={inter:"Inter",montserrat:"Montserrat",poppins:"Poppins",raleway:"Raleway",nunito:"Nunito",work_sans:"Work Sans",mulish:"Mulish",barlow:"Barlow",jost:"Jost",bitter:"Bitter",archivo:"Archivo",public_sans:"Public Sans",gantari:"Gantari",anybody:"Anybody",lato:"Lato",playfair_display:"Playfair Display",karla:"Karla",reddit_sans:"Reddit Sans",overpass:"Overpass",roboto:"Roboto",open_sans:"Open Sans",merriweather:"Merriweather",outfit:"Outfit",fraunces:"Fraunces",dm_sans:"DM Sans",cormorant_garamond:"Cormorant Garamond",eb_garamond:"EB Garamond",lora:"Lora",crimson_pro:"Crimson Pro",source_serif_4:"Source Serif 4",ibm_plex_serif:"IBM Plex Serif",manrope:"Manrope",plus_jakarta_sans:"Plus Jakarta Sans",space_grotesk:"Space Grotesk",ibm_plex_sans:"IBM Plex Sans",libre_franklin:"Libre Franklin",josefin_sans:"Josefin Sans"};
2
+
3
+ export { BE_BOOKING_REQUEST_STATUSES, REGIONS, STOREFRONT_FONTS, STOREFRONT_FONT_FAMILIES, STOREFRONT_KEY_ENVIRONMENTS };
@@ -0,0 +1,6 @@
1
+ import { withStayRules, storefrontDateSchema } from './chunk-IBCBDAGY.js';
2
+ import { z } from 'zod';
3
+
4
+ var emailField=z.string().trim().toLowerCase().pipe(z.email("validation.email_invalid"));z.string().trim().min(1,"validation.email_required").pipe(emailField);var trimmedEmailField=z.string().trim().pipe(z.email("validation.email_invalid"));var requiredTrimmedEmailField=z.string().trim().min(1,"validation.email_required").pipe(trimmedEmailField);z.string().nullish().transform((raw,ctx)=>{if(raw===void 0)return void 0;const trimmed=(raw??"").trim().toLowerCase();if(!trimmed)return null;if(!z.email().safeParse(trimmed).success){ctx.addIssue({code:"custom",message:"validation.email_invalid"});return z.NEVER}return trimmed});var storefrontIdSchema=z.uuid();var storefrontSiteSchema=z.object({id:z.uuid(),name:z.string(),slug:z.string(),isActive:z.boolean(),enableWebChat:z.boolean(),mapEmbedHost:z.string().nullable(),countryCode:z.string().nullish(),bookingsOpen:z.boolean().optional()});var storefrontListingSummarySchema=z.object({id:z.uuid(),buildingId:z.uuid(),sortOrder:z.number().int(),name:z.string(),coverImageUrl:z.string().nullable(),city:z.string().nullable(),state:z.string().nullable(),bedroomCount:z.number().int().nullable(),bathroomCount:z.number().nullable(),maxGuests:z.number().int().nullable(),averageRating:z.number().nullable(),latitude:z.number().nullable(),longitude:z.number().nullable(),bookable:z.boolean(),fromPriceMinor:z.number().int().nonnegative().nullish(),currency:z.string().nullish()});var storefrontImageSchema=z.object({url:z.string(),alt:z.string().nullable(),width:z.number().int().nullable(),height:z.number().int().nullable()});var storefrontListingSchema=storefrontListingSummarySchema.extend({buildingSlug:z.string(),buildingAddress:z.unknown(),description:z.string().nullable(),amenities:z.array(z.string()),pictures:z.unknown(),images:z.array(storefrontImageSchema).optional(),rooms:z.unknown(),houseRules:z.string().nullable(),checkInTime:z.string().nullable(),checkOutTime:z.string().nullable(),beds:z.number().nullable(),countryCode:z.string().nullish()});var STOREFRONT_LISTING_SORTS=["recommended","price_asc","price_desc","rating"];var asList=value=>value===void 0?void 0:Array.isArray(value)?value:[value];var boundsSchema=z.string().transform(value=>value.split(",").map(part=>part.trim()===""?NaN:Number(part))).pipe(z.tuple([z.number().min(-90).max(90),z.number().min(-180).max(180),z.number().min(-90).max(90),z.number().min(-180).max(180)]).refine(([swLat,,neLat])=>swLat<=neLat)).transform(([swLat,swLng,neLat,neLng])=>({swLat,swLng,neLat,neLng}));var listingsStaySchema=withStayRules(z.object({checkIn:storefrontDateSchema,checkOut:storefrontDateSchema}));z.object({location:z.preprocess(value=>asList(value)?.flatMap(v=>typeof v==="string"?v.split(","):[v]),z.array(z.string().trim().min(1).max(200)).min(1).max(50).optional()).optional(),building:z.uuid().optional(),guests:z.coerce.number().int().min(1).max(100).optional(),bedrooms:z.coerce.number().int().min(0).max(50).optional(),currency:z.string().trim().regex(/^[A-Za-z]{3}$/).transform(value=>value.toLowerCase()).optional(),priceMin:z.coerce.number().int().min(0).optional(),priceMax:z.coerce.number().int().min(0).optional(),amenities:z.preprocess(asList,z.array(z.string().trim().min(1).max(200)).min(1).max(30).optional()).optional(),bounds:boundsSchema.optional(),checkIn:storefrontDateSchema.optional(),checkOut:storefrontDateSchema.optional(),sort:z.enum(STOREFRONT_LISTING_SORTS).optional(),facets:z.enum(["0","1","true","false"]).transform(value=>value==="1"||value==="true").optional(),limit:z.coerce.number().int().min(1).max(100).default(50),offset:z.coerce.number().int().min(0).max(1e4).default(0)}).refine(q=>q.currency!==void 0||q.priceMin===void 0&&q.priceMax===void 0,{path:["currency"],message:"validation.required"}).refine(q=>q.priceMin===void 0||q.priceMax===void 0||q.priceMin<=q.priceMax,{path:["priceMax"],message:"validation.invalid"}).superRefine((q,ctx)=>{if(q.checkIn===void 0&&q.checkOut===void 0)return;if(q.checkIn===void 0||q.checkOut===void 0){const path=q.checkIn===void 0?"checkIn":"checkOut";ctx.addIssue({code:"custom",path:[path],message:"validation.required"});return}const stay=listingsStaySchema.safeParse({checkIn:q.checkIn,checkOut:q.checkOut});for(const issue of stay.error?.issues??[]){ctx.addIssue({code:"custom",path:issue.path,message:issue.message});}});var storefrontListingFacetsSchema=z.object({total:z.number().int(),areas:z.array(z.object({id:z.uuid(),slug:z.string().nullable(),count:z.number().int()})),bedrooms:z.array(z.object({bedrooms:z.number().int(),count:z.number().int()})),price:z.object({min:z.number().int(),max:z.number().int(),currency:z.string().nullable(),buckets:z.array(z.number().int()).length(24)}).nullable()});var storefrontBuildingSchema=z.object({id:z.uuid(),locationId:z.uuid().nullable(),nameId:z.uuid().nullable(),descriptionId:z.uuid().nullable(),slug:z.string(),imageId:z.uuid().nullable(),latitude:z.number().nullable(),longitude:z.number().nullable(),address:z.unknown(),name:z.string().nullish(),description:z.string().nullish(),imageUrl:z.string().nullish(),images:z.array(storefrontImageSchema).nullish(),sortOrder:z.number().int().nullish(),listingCount:z.number().int().nullish(),fields:z.record(z.string(),z.record(z.string(),z.unknown())).nullish()});var storefrontLocationSchema=z.object({id:z.uuid(),type:z.string(),parentId:z.uuid().nullable(),nameId:z.uuid().nullable(),slug:z.string().nullable(),imageId:z.uuid().nullable(),latitude:z.number().nullable(),longitude:z.number().nullable(),address:z.unknown(),sortOrder:z.number().int(),name:z.string().nullish(),description:z.string().nullish(),imageUrl:z.string().nullish(),images:z.array(storefrontImageSchema).nullish(),buildingCount:z.number().int().nullish(),fields:z.record(z.string(),z.record(z.string(),z.unknown())).nullish()});z.object({locale:z.string().max(35).optional().catch(void 0)});var storefrontReviewSchema=z.object({id:z.uuid(),listingId:z.uuid().nullable(),reviewedAt:z.string().nullable(),rating:z.number().nullable(),publicReview:z.string(),source:z.string().nullable()});z.object({listingId:z.uuid().optional(),limit:z.coerce.number().int().min(1).max(100).default(20),offset:z.coerce.number().int().min(0).max(1e4).default(0)});z.object({name:z.string().trim().min(1,"validation.name_required").max(200,"validation.name_max_length"),email:requiredTrimmedEmailField,subject:z.string().trim().min(1,"validation.title_required").max(300,"validation.title_max_length"),message:z.string().trim().min(10,"validation.message_min_length").max(1e4,"validation.message_max_length")});var storefrontContactResultSchema=z.object({sent:z.literal(true)});var storefrontContentRefSchema=z.object({kind:z.string(),id:z.uuid(),slug:z.string().nullable()});var storefrontContentItemSchema=z.object({id:z.uuid(),type:z.string(),slug:z.string().nullable(),publishedAt:z.string().nullable(),updatedAt:z.string(),sortOrder:z.number().int(),fields:z.record(z.string(),z.unknown())});var storefrontContentFieldDefSchema=z.object({key:z.string(),type:z.string()}).catchall(z.unknown());var storefrontContentModelSchema=z.object({version:z.number().int(),types:z.array(z.object({key:z.string(),kind:z.string(),fields:z.array(storefrontContentFieldDefSchema)}).catchall(z.unknown()))});z.object({limit:z.coerce.number().int().min(1).max(100).default(20),offset:z.coerce.number().int().min(0).max(1e4).default(0),locale:z.string().max(35).optional().catch(void 0)});z.string().regex(/^[a-z][a-z0-9_]{0,39}$/);z.string().min(1).max(120).regex(/^[a-z0-9-]+$/);
5
+
6
+ export { requiredTrimmedEmailField, storefrontBuildingSchema, storefrontContactResultSchema, storefrontContentItemSchema, storefrontContentModelSchema, storefrontContentRefSchema, storefrontIdSchema, storefrontImageSchema, storefrontListingFacetsSchema, storefrontListingSchema, storefrontListingSummarySchema, storefrontLocationSchema, storefrontReviewSchema, storefrontSiteSchema };
@@ -0,0 +1,9 @@
1
+ import { BE_BOOKING_REQUEST_STATUSES, STOREFRONT_KEY_ENVIRONMENTS, REGIONS } from './chunk-UQWQPTHO.js';
2
+ import { requiredTrimmedEmailField, storefrontReviewSchema, storefrontContentItemSchema, storefrontIdSchema, storefrontLocationSchema, storefrontBuildingSchema, storefrontListingSummarySchema, storefrontListingFacetsSchema, storefrontContactResultSchema, storefrontContentModelSchema, storefrontListingSchema, storefrontSiteSchema } from './chunk-XOCFEVP4.js';
3
+ import { StorefrontConfigError, StorefrontError, storefrontQuoteSchema, StorefrontTimeoutError, StorefrontNetworkError, errorFromResponse } from './chunk-W5K7IDYN.js';
4
+ import { openEnum, storefrontDateSchema, storefrontCalendarSchema, storefrontAvailabilitySchema, storefrontUnitAvailabilitySchema } from './chunk-IBCBDAGY.js';
5
+ import { z } from 'zod';
6
+
7
+ var STOREFRONT_CHANNELS=["ai_assistant","paid_search","paid_social","organic_search","organic_social","email","referral","direct"];var AI_ASSISTANT_HOSTS={"chatgpt.com":"chatgpt","chat.openai.com":"chatgpt","perplexity.ai":"perplexity","gemini.google.com":"gemini","copilot.microsoft.com":"copilot","claude.ai":"claude"};var AI_ASSISTANT_SOURCES={"chatgpt.com":"chatgpt",perplexity:"perplexity","perplexity.ai":"perplexity",gemini:"gemini",copilot:"copilot","claude.ai":"claude"};var PAID_CLICKS=["google","microsoft","meta"];var PAID_MEDIUMS=new Set(["cpc","ppc","paid","paidsearch","sem"]);var EMAIL_RE=/newsletter|mailchimp|klaviyo/;var SEARCH_SUFFIXES=["bing.com","duckduckgo.com","search.yahoo.com","baidu.com","ecosia.org","search.brave.com"];var SEARCH_ANY_TLD_RE=/^(?:www\.)?(?:google|yandex)\.[a-z]{2,3}(?:\.[a-z]{2})?$/;var SOCIAL_SUFFIXES=["facebook.com","instagram.com","t.co","x.com","twitter.com","linkedin.com","tiktok.com","youtube.com","reddit.com"];var SOCIAL_ANY_TLD_RE=/(?:^|\.)pinterest\.[a-z]{2,3}(?:\.[a-z]{2})?$/;var SOCIAL_SOURCES=new Set(["facebook","fb","instagram","ig","meta","twitter","x","linkedin","pinterest","tiktok","youtube","reddit"]);var clean=value=>{const v=value?.trim().toLowerCase();return v?v:null};var hostOf=value=>clean(value)?.replace(/\.$/,"")??null;var hostMatches=(host,suffix)=>host===suffix||host.endsWith(`.${suffix}`);var bareHost=host=>host.replace(/^www\./,"");function aiLabel(host,source){if(host){const suffix=Object.keys(AI_ASSISTANT_HOSTS).find(s=>hostMatches(host,s));if(suffix)return AI_ASSISTANT_HOSTS[suffix]}return source&&Object.hasOwn(AI_ASSISTANT_SOURCES,source)?AI_ASSISTANT_SOURCES[source]:null}var isSearchHost=host=>SEARCH_ANY_TLD_RE.test(host)||SEARCH_SUFFIXES.some(s=>hostMatches(host,s));var isSocialHost=host=>SOCIAL_ANY_TLD_RE.test(host)||SOCIAL_SUFFIXES.some(s=>hostMatches(host,s));function paidClickOf(t){const medium=clean(t.utmMedium);if(t.fbclid&&medium!==null&&PAID_MEDIUMS.has(medium))return "meta";if(t.gclid||t.gbraid||t.wbraid)return "google";if(t.msclkid)return "microsoft";if(t.fbclid)return "meta";return t.paidClick??null}function classifyChannel(t){const source=clean(t.utmSource);const medium=clean(t.utmMedium);const site=bareHost(hostOf(t.siteHost)??"");const ref=hostOf(t.referrerHost);const external=ref&&bareHost(ref)!==site?ref:null;const result=(channel,label=null)=>({channel,source:label??source??external,medium});const socialSource=source!==null&&(SOCIAL_SOURCES.has(source)||isSocialHost(source))||!!(external&&isSocialHost(external));const paidMedium=medium!==null&&PAID_MEDIUMS.has(medium);const searchClick=t.gclid||t.gbraid||t.wbraid||t.msclkid||t.paidClick==="google"||t.paidClick==="microsoft";const metaClick=t.fbclid||t.paidClick==="meta";if(searchClick||paidMedium){return result(socialSource||metaClick&&paidMedium?"paid_social":"paid_search")}if(medium==="email"||EMAIL_RE.test(source??"")||EMAIL_RE.test(medium??"")){return result("email")}const ai=aiLabel(external,source);if(ai)return result("ai_assistant",ai);if(external&&isSearchHost(external))return result("organic_search");if(socialSource||metaClick)return result("organic_social");const anyUtm=[source,medium,t.utmCampaign,t.utmTerm,t.utmContent].some(v=>clean(v??null));if(!external&&!anyUtm)return result("direct");return result("referral")}var consentStateSchema=z.object({analytics:z.boolean(),ads:z.boolean(),source:z.enum(["default","user"]),region:z.enum(["restricted","other"]),decidedAt:z.iso.datetime().max(40).nullable()});function isSafePrivacyUrl(value){if([...value].some(ch=>/\s/.test(ch)||ch.charCodeAt(0)<32))return false;if(value.startsWith("/"))return !value.startsWith("//")&&!value.startsWith("/\\");if(!value.startsWith("https://")||!URL.canParse(value))return false;const url=new URL(value);return url.hostname!==""&&url.username===""&&url.password===""}var STOREFRONT_CONSENT_MODES=["regional","strict"];var modeField=z.enum(STOREFRONT_CONSENT_MODES);var privacyPolicyUrlField=z.string().trim().max(2048,"validation.storefront.privacy_policy_url_invalid").refine(isSafePrivacyUrl,"validation.storefront.privacy_policy_url_invalid").nullable();z.object({mode:modeField.default("regional"),privacyPolicyUrl:privacyPolicyUrlField.default(null)});z.object({siteId:z.uuid(),consentSettings:z.object({mode:modeField.optional(),privacyPolicyUrl:privacyPolicyUrlField.optional()})});var ACTIVE_RESERVATION_STATUSES=["confirmed","reserved","awaiting_payment"];new Set(ACTIVE_RESERVATION_STATUSES);var SCHEDULABLE_RESERVATION_STATUSES=[...ACTIVE_RESERVATION_STATUSES,"blocked"];new Set(SCHEDULABLE_RESERVATION_STATUSES);var VOLATILE_SYNC_STATUSES=["pending","pending_deletion","failed_deletion"];new Set(VOLATILE_SYNC_STATUSES);var CURRENCIES=["usd","eur","aud","gbp","cad","chf","cny","jpy","nzd","nok","mxn","thb","bgn","aed","inr","rub","brl","zar","sgd","hkd","xcd","xof","clp","dkk","try","bnd","xcg","shp","fkp","idr","ron","czk"];var ZERO_DECIMAL_CURRENCY_CODES=new Set(["bif","clp","djf","gnf","jpy","kmf","krw","mga","pyg","rwf","vnd","vuv","xaf","xof","xpf"]);new Set(CURRENCIES.filter(code=>ZERO_DECIMAL_CURRENCY_CODES.has(code)));var LIVE_PAYMENT_INTENT_STATUS_LIST=["succeeded","processing","requires_capture","refunded","disputed","reversed"];new Set(LIVE_PAYMENT_INTENT_STATUS_LIST);var BE_SITE_EXPERIMENT_VARIANTS=["a","b"];var ACTIVE_MIGRATION_RUN_STATUSES=["running","writing","finalizing","rolling_back"];new Set(ACTIVE_MIGRATION_RUN_STATUSES.filter(status=>status!=="rolling_back"));var experimentVariantSchema=z.enum(BE_SITE_EXPERIMENT_VARIANTS);var experimentAssignmentSchema=z.object({id:z.uuid(),variant:experimentVariantSchema});z.object({siteId:z.uuid()});z.object({siteId:z.uuid(),deploymentBId:z.uuid("validation.storefront.experiment_variant_required"),splitBPercent:z.number("validation.storefront.experiment_split_range").int("validation.storefront.experiment_split_range").min(1,"validation.storefront.experiment_split_range").max(99,"validation.storefront.experiment_split_range")});z.object({id:z.uuid(),winner:experimentVariantSchema.nullable()});z.object({id:z.uuid()});var clickId=z.string().min(1).max(512).regex(/^[\w.\-~]+$/);var storable=value=>!value.includes("\0")&&!/\p{Surrogate}/u.test(value);var utm=z.string().max(150).refine(storable).nullable();var attributionTouchSchema=z.object({ts:z.iso.datetime().max(40),landingPath:z.string().max(512).regex(/^\/[^?#]*$/).refine(storable),referrerHost:z.string().max(253).regex(/^[a-z0-9.-]+$/).nullable(),utmSource:utm,utmMedium:utm,utmCampaign:utm,utmTerm:utm,utmContent:utm,gclid:clickId.nullable(),gbraid:clickId.nullable(),wbraid:clickId.nullable(),fbclid:clickId.nullable(),msclkid:clickId.nullable(),paidClick:z.enum(PAID_CLICKS).nullable().default(null)});var attributionIdsSchema=z.object({gaClientId:z.string().max(64).regex(/^\d+\.\d+$/).nullable(),gaSessionId:z.string().max(32).regex(/^\d+$/).nullable(),fbp:z.string().max(128).regex(/^fb\.\d\.\d+\.\d+$/).nullable(),fbc:z.string().max(600).regex(/^fb\.\d\.\d+\.[\w-]+$/).nullable()});var storefrontAttributionInputSchema=z.object({first:attributionTouchSchema.nullable(),last:attributionTouchSchema.nullable(),ids:attributionIdsSchema,consent:consentStateSchema,experiment:experimentAssignmentSchema.optional()});var STORED_ATTRIBUTION_CHANNELS=[...STOREFRONT_CHANNELS,"ai_agent_mcp"];storefrontAttributionInputSchema.extend({firstChannel:z.enum(STORED_ATTRIBUTION_CHANNELS).nullable(),lastChannel:z.enum(STORED_ATTRIBUTION_CHANNELS),userAgent:z.string().max(512).nullable(),capturedAt:z.iso.datetime(),preview:z.literal(true).optional()});function withoutClickIds(touch){return {...touch,gclid:null,gbraid:null,wbraid:null,fbclid:null,msclkid:null,paidClick:paidClickOf(touch)}}var MAX_CHECKOUT_CUSTOM_FIELDS=10;var MAX_CHECKOUT_UPSELLS=12;var MAX_CHECKOUT_UPSELL_QUANTITY=50;var MAX_CHECKOUT_FIELD_LENGTH=2e3;var MAX_FIELD_KEY_LENGTH=40;var BOOKING_UPSELL_CHARGE_TYPES=["fixed_price","price_per_quantity","price_per_night","price_per_guest_per_night","free"];var localizedTextSchema=z.object({default:z.string().trim().min(1,"validation.required").max(200,"validation.max_length"),translations:z.record(z.string().min(2).max(10),z.string().max(200,"validation.max_length")).optional()});var fieldKeySchema=z.string().regex(new RegExp(`^[a-z][a-z0-9_]{0,${MAX_FIELD_KEY_LENGTH-1}}$`),"validation.storefront.extensions_invalid_key").refine(key=>!(key in Object.prototype),"validation.storefront.extensions_invalid_key");var boundSchema=z.number({error:"validation.number_required"}).int("validation.integer_required");var fieldBase={key:fieldKeySchema,label:localizedTextSchema,required:z.boolean()};var customFieldDefSchema=z.discriminatedUnion("type",[z.object({type:z.enum(["text","textarea"]),...fieldBase,maxLength:z.number({error:"validation.number_required"}).int("validation.integer_required").min(1,"validation.too_small").max(MAX_CHECKOUT_FIELD_LENGTH,"validation.too_large").default(500)}),z.object({type:z.literal("select"),...fieldBase,options:z.array(z.object({value:z.string().max(64).refine(value=>value.trim()!=="","validation.required"),label:localizedTextSchema})).min(1,"validation.storefront.extensions_select_needs_options").max(30,"validation.too_large").refine(options=>new Set(options.map(o=>o.value)).size===options.length,{message:"validation.storefront.extensions_duplicate_option"})}),z.object({type:z.literal("checkbox"),...fieldBase}),z.object({type:z.literal("number"),...fieldBase,min:boundSchema.optional(),max:boundSchema.optional()}),z.object({type:z.literal("date"),...fieldBase})]);z.object({customFields:z.array(customFieldDefSchema).max(MAX_CHECKOUT_CUSTOM_FIELDS,"validation.too_large").superRefine((fields,ctx)=>{const seen=new Set;fields.forEach((field,index)=>{if(seen.has(field.key)){ctx.addIssue({code:"custom",path:[index,"key"],message:"validation.storefront.extensions_duplicate_key"});}seen.add(field.key);if(field.type==="number"&&field.min!=null&&field.max!=null&&field.min>field.max){ctx.addIssue({code:"custom",path:[index,"max"],message:"validation.storefront.extensions_number_range_invalid"});}});}).default([]),upsells:z.object({portalUpsellIds:z.array(z.uuid()).max(MAX_CHECKOUT_UPSELLS,"validation.too_large").refine(ids=>new Set(ids).size===ids.length,{message:"validation.storefront.extensions_duplicate_upsell"}).default([])}).default({portalUpsellIds:[]})});var checkoutExtrasInputSchema=z.object({customFields:z.record(z.string().max(MAX_FIELD_KEY_LENGTH),z.union([z.string().max(MAX_CHECKOUT_FIELD_LENGTH),z.number(),z.boolean()])).refine(values=>Object.keys(values).length<=MAX_CHECKOUT_CUSTOM_FIELDS,{message:"validation.too_large"}).default({}),upsells:z.array(z.object({portalUpsellId:z.uuid(),quantity:z.number().int().min(1).max(MAX_CHECKOUT_UPSELL_QUANTITY)})).max(MAX_CHECKOUT_UPSELLS).default([])});var upsellOfferSchema=z.object({portalUpsellId:z.uuid(),title:z.string(),description:z.string().nullable(),imageUrl:z.string().nullable(),chargeType:z.enum(BOOKING_UPSELL_CHARGE_TYPES),unitMinor:z.number().int(),minQuantity:z.number().int(),maxQuantity:z.number().int(),quantifierLabel:z.string().nullable(),currency:z.string().length(3)});z.object({locale:z.string().max(35).optional().catch(void 0)});z.object({customFields:z.array(customFieldDefSchema),upsellOffers:z.array(upsellOfferSchema)});var checkoutSessionExtrasSchema=z.object({lines:z.array(z.object({portalUpsellId:z.uuid().nullable(),title:z.string(),quantity:z.number().int(),totalMinor:z.number().int()})),extrasTotalMinor:z.number().int(),heldTotalMinor:z.number().int()});var amountMinor=z.number().int().positive();var currency=z.string().length(3);var chargedByHost=z.literal("host");var checkoutMountDescriptorKnownSchema=z.discriminatedUnion("provider",[z.object({provider:z.literal("stripe"),publishableKey:z.string().min(1),stripeAccountId:z.string().nullable(),clientSecret:z.string().min(1),amountMinor,currency}),z.object({provider:z.literal("juspay"),publishableKey:z.string().min(1),providerBaseUrl:z.url(),clientSecret:z.string().min(1),profileId:z.string().min(1),amountMinor,currency}),z.object({provider:z.literal("guesty_pay"),guestyPartnerId:z.string().min(1),paymentProviderId:z.string().min(1),externalListingId:z.string().min(1),pmsQuoteId:z.string().nullable(),amountMinor,currency,chargedBy:chargedByHost.optional()}),z.object({provider:z.literal("pms_stripe"),publishableKey:z.string().min(1),stripeAccountId:z.string().min(1),clientSecret:z.string().min(1),amountMinor,currency,chargedBy:chargedByHost})]);var KNOWN_MOUNT_PROVIDERS=["stripe","juspay","guesty_pay","pms_stripe"];var checkoutMountDescriptorSchema=z.union([checkoutMountDescriptorKnownSchema,z.object({provider:z.string().refine(p=>!KNOWN_MOUNT_PROVIDERS.includes(p))}).loose()]);z.enum(BE_BOOKING_REQUEST_STATUSES);var bookingRequestStatusResponseSchema=openEnum(BE_BOOKING_REQUEST_STATUSES);var checkoutSessionQuoteSchema=z.object({listingId:z.uuid(),checkIn:z.iso.date(),checkOut:z.iso.date(),guests:z.number().int().positive(),ratePlanId:z.string(),totalMinor:z.number().int(),currency:z.string().length(3)});z.object({quoteRef:z.string().min(1).max(4096),ratePlanId:z.string().min(1).max(200).optional(),attribution:z.custom().optional(),extras:checkoutExtrasInputSchema.optional(),hostSessionId:z.uuid().optional()});var checkoutSessionSchema=z.object({id:z.uuid(),status:bookingRequestStatusResponseSchema,quote:checkoutSessionQuoteSchema,mount:checkoutMountDescriptorSchema.nullable(),chargedBy:chargedByHost.optional(),guestSaved:z.literal(true).optional(),extras:checkoutSessionExtrasSchema.optional(),extrasSessionId:z.uuid().optional(),expiresAt:z.iso.datetime()});var storefrontGuestInputSchema=z.object({firstName:z.string().trim().min(1,"validation.first_name_required").max(100),lastName:z.string().trim().min(1,"validation.last_name_required").max(100),email:requiredTrimmedEmailField,phone:z.string().trim().min(1,"validation.phone_required").max(40)});var storefrontConsentsSchema=z.object({emailMarketing:z.boolean().default(false),smsMarketing:z.boolean().default(false)}).default({emailMarketing:false,smsMarketing:false});var confirmCheckoutSessionInputSchema=z.object({quoteRef:z.string().min(1).max(4096),guest:storefrontGuestInputSchema,consents:storefrontConsentsSchema,paymentMethodId:z.string().min(1).max(255).optional(),language:z.string().max(35).optional().catch(void 0)});confirmCheckoutSessionInputSchema.pick({quoteRef:true,guest:true,consents:true,language:true});z.object({saved:z.boolean()});var bookingResultSchema=z.object({bookingRequestId:z.uuid(),confirmationToken:z.string(),status:bookingRequestStatusResponseSchema,confirmationCode:z.string().nullable()});var storefrontBookingSchema=z.object({id:z.uuid(),status:bookingRequestStatusResponseSchema,propertyId:z.uuid().nullable(),checkIn:z.iso.date().nullable(),checkOut:z.iso.date().nullable(),guestCount:z.number().int().nullable(),guestFirstName:z.string().nullable(),totalMinor:z.number().int().nullable(),currency:z.string().nullable(),confirmationCode:z.string().nullable(),lines:z.array(z.object({title:z.string(),quantity:z.number().int(),totalMinor:z.number().int()})).optional()});z.enum(STOREFRONT_KEY_ENVIRONMENTS);var STOREFRONT_KEY_RE=new RegExp(`^pk_(${STOREFRONT_KEY_ENVIRONMENTS.join("|")})_(${REGIONS.join("|")})_[0-9A-Za-z]{24}$`);function parseStorefrontKey(token){const match=STOREFRONT_KEY_RE.exec(token);if(!match)return null;return {environment:match[1],region:match[2]}}var ORIGIN_HOST_RE=/^(?:[a-z0-9-]+\.)*[a-z0-9-]+$|^\[[0-9a-f:.]+\]$/;function parseUrl(value){try{return new URL(value)}catch{return null}}z.string().refine(value=>{const url=parseUrl(value);if(!url)return false;return (url.protocol==="https:"||url.protocol==="http:")&&url.origin===value&&ORIGIN_HOST_RE.test(url.hostname)},"validation.storefront.origin_invalid");var CLIENT_CONVERSION_EVENT_NAMES=["begin_checkout","generate_lead","sign_up"];var STOREFRONT_EVENT_PATH_MAX=512;var base={eventId:z.uuid(),ts:z.number().int(),path:z.string().max(STOREFRONT_EVENT_PATH_MAX),referrerHost:z.string().max(253).nullable()};var currency2=z.string().length(3).regex(/^[a-z]{3}$/);var storefrontClientEventSchema=z.discriminatedUnion("name",[z.object({...base,name:z.literal("page_view")}),z.object({...base,name:z.literal("view_search_results"),checkIn:storefrontDateSchema.optional(),checkOut:storefrontDateSchema.optional(),guests:z.number().int().min(1).max(50).optional(),locationId:z.uuid().optional()}),z.object({...base,name:z.literal("view_item_list"),listName:z.string().max(64),itemCount:z.number().int().min(0).max(500)}),z.object({...base,name:z.literal("view_item"),listingId:z.uuid()}),z.object({...base,name:z.literal("view_quote"),listingId:z.uuid(),valueMinor:z.number().int().nonnegative(),currency:currency2,nights:z.number().int().min(1).max(365)}),z.object({...base,name:z.literal("begin_checkout"),checkoutSessionId:z.uuid()}),z.object({...base,name:z.literal("add_payment_info"),checkoutSessionId:z.uuid()}),z.object({...base,name:z.literal("generate_lead"),formId:z.string().max(64).optional()}),z.object({...base,name:z.literal("sign_up"),method:z.literal("newsletter")})]);var STOREFRONT_EVENT_BATCH_MAX=20;z.object({events:z.array(storefrontClientEventSchema).min(1).max(STOREFRONT_EVENT_BATCH_MAX)});z.object({events:z.array(z.object({eventId:z.uuid(),name:z.enum(CLIENT_CONVERSION_EVENT_NAMES),occurredAt:z.iso.datetime(),pageUrl:z.url({protocol:/^https?$/}).max(2048),checkoutSessionId:z.uuid().nullable(),userAgent:z.string().max(512).nullable(),attribution:storefrontAttributionInputSchema.nullable()})).min(1).max(STOREFRONT_EVENT_BATCH_MAX)});var storefrontGuideItemSchema=z.object({id:z.uuid(),title:z.string().nullable(),description:z.string().nullable(),address:z.string().nullable(),latitude:z.number().nullable(),longitude:z.number().nullable(),googleMapsUrl:z.string().nullable(),websiteUrl:z.string().nullable(),imageUrl:z.string().nullable(),categories:z.array(z.string()),priceLevel:z.number().int().min(1).max(4).nullable(),rating:z.number().nullable(),ratingsCount:z.number().int().nullable()});var storefrontGuideSchema=z.object({id:z.uuid(),name:z.string(),category:z.string().nullable(),coverImageUrl:z.string().nullable(),items:z.array(storefrontGuideItemSchema)});var EXPERIMENT_COOKIE="__so_exp";var COOKIE_RE=/(?:^|;\s*)__so_exp=([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.(a|b)(?:\s*;|\s*$)/;function readExperimentCookie(cookies){const match=COOKIE_RE.exec(cookies??"");return match?{id:match[1],variant:match[2]}:null}var ATTRIBUTION_COOKIE="so_attr";var ATTRIBUTION_COOKIE_MAX_AGE_SECONDS=90*24*60*60;var COOKIE_SCOPE="Path=/; SameSite=Lax; Secure";var ATTRIBUTION_COOKIE_ATTRIBUTES=`Max-Age=${ATTRIBUTION_COOKIE_MAX_AGE_SECONDS}; ${COOKIE_SCOPE}`;var ATTRIBUTION_COOKIE_MAX_BYTES=3584;var attributionCookieSchema=z.object({first:attributionTouchSchema.nullable(),last:attributionTouchSchema.nullable()});function toBase64Url(text){let binary="";for(const byte of new TextEncoder().encode(text))binary+=String.fromCharCode(byte);return btoa(binary).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function fromBase64Url(value){const binary=atob(value.replace(/-/g,"+").replace(/_/g,"/"));return new TextDecoder().decode(Uint8Array.from(binary,ch=>ch.charCodeAt(0)))}function encodeAttributionCookie(value){const encoded=toBase64Url(JSON.stringify(value));return encoded.length>ATTRIBUTION_COOKIE_MAX_BYTES?null:encoded}function serializeAttributionCookie(value){const encoded=encodeAttributionCookie(value);return encoded===null?null:`${ATTRIBUTION_COOKIE}=${encoded}; ${ATTRIBUTION_COOKIE_ATTRIBUTES}`}function decodeAttributionCookie(value){if(!value)return null;return attributionCookieSchema.parse(JSON.parse(fromBase64Url(value)))}function expiredAttributionCookies(cookies,consent){const revoked=[...consent.analytics?[]:[ATTRIBUTION_COOKIE,EXPERIMENT_COOKIE],...consent.ads?[]:["_fbc","_fbp"]];return revoked.filter(name=>readCookie(cookies,name)!==null).map(name=>`${name}=; Max-Age=0; ${COOKIE_SCOPE}`)}function strippedAttributionCookie(held){const clicked=t=>t!==null&&[t.gclid,t.gbraid,t.wbraid,t.fbclid,t.msclkid].some(id=>id!==null);if(!held||!(clicked(held.first)||clicked(held.last)))return null;return serializeAttributionCookie({first:held.first&&withoutClickIds(held.first),last:held.last&&withoutClickIds(held.last)})??`${ATTRIBUTION_COOKIE}=; Max-Age=0; ${COOKIE_SCOPE}`}function readCookie(header,name){if(!header)return null;for(const part of header.split(";")){const eq=part.indexOf("=");if(eq!==-1&&part.slice(0,eq).trim()===name)return part.slice(eq+1).trim()}return null}var MalformedCookieError=class extends Error{constructor(name){super(`${name} is malformed`);this.name="MalformedAttributionError";}};var NO_IDS={gaClientId:null,gaSessionId:null,fbp:null,fbc:null};function matchCookie(cookies,name,re,report){const value=name?readCookie(cookies,name):null;if(!value)return null;const match=re.exec(value);if(!match){report(new MalformedCookieError(name),name);return null}return match.slice(1).filter(Boolean).join(".")}function browserIdsFromCookies(cookies,consent,report){const sessionCookie=cookies.split(";").map(part=>part.split("=")[0].trim()).find(name=>name.startsWith("_ga_"))??null;const ga=consent.analytics;const ads=consent.ads;const ids={gaClientId:ga?matchCookie(cookies,"_ga",/^GA\d\.\d+\.(\d+)\.(\d+)$/,report):null,gaSessionId:ga?matchCookie(cookies,sessionCookie,/^(?:GS1\.\d+\.(\d+)\.|GS2\.\d+\.s(\d+)(?:\$|$))/,report):null,fbp:ads?matchCookie(cookies,"_fbp",/^(fb\.\d\.\d+\.\d+)$/,report):null,fbc:ads?matchCookie(cookies,"_fbc",/^(fb\.\d\.\d+\.[\w-]+)$/,report):null};const parsed=attributionIdsSchema.safeParse(ids);if(parsed.success)return parsed.data;report(parsed.error,"ids");return NO_IDS}var isDirect=touch=>classifyChannel({...touch,siteHost:globalThis.location?.hostname??""}).channel==="direct";var TOUCH_ELEMENT_ID="__suiteop_touch";var CONSENT_EVENT="suiteop:consent";var DENIED={analytics:false,ads:false,source:"default",region:"restricted",decidedAt:null};var defaultReport=(err,where)=>{console.warn(`[suiteop] ignored malformed attribution input (${where})`,err);};function pageConsent(){const read=globalThis.__suiteop?.consent?.get;const parsed=consentStateSchema.safeParse(typeof read==="function"?read():null);return parsed.success?parsed.data:DENIED}function pageTouch(report){const text=document.getElementById(TOUCH_ELEMENT_ID)?.textContent;if(!text)return null;try{return attributionTouchSchema.parse(JSON.parse(text))}catch(err){report(err,TOUCH_ELEMENT_ID);return null}}function storedCookie(cookies,report){try{return decodeAttributionCookie(readCookie(cookies,ATTRIBUTION_COOKIE))}catch(err){report(err,ATTRIBUTION_COOKIE);return null}}function getAttribution(opts={}){if(typeof document==="undefined")return null;const report=opts.report??defaultReport;const cookies=document.cookie;const consent=pageConsent();const stored=consent.analytics?storedCookie(cookies,report):null;const touch=pageTouch(report);const pageIsLast=touch!==null&&!(stored?.last&&(isDirect(touch)||Date.parse(stored.last.ts)>Date.parse(touch.ts)));const experiment=consent.analytics?readExperimentCookie(cookies):null;return {first:stored?.first??touch,last:pageIsLast?touch:stored?.last??null,ids:browserIdsFromCookies(cookies,consent,report),consent,...experiment?{experiment}:{}}}function watchAttributionConsent(opts={}){if(typeof window==="undefined")return ()=>{};const report=opts.report??defaultReport;const persist=consent=>{if(readCookie(document.cookie,ATTRIBUTION_COOKIE))return;const touch=pageTouch(report);if(!touch)return;const kept=consent.ads?touch:withoutClickIds(touch);const cookie=serializeAttributionCookie({first:kept,last:kept});if(cookie)document.cookie=cookie;};const withdraw=consent=>{for(const cookie of expiredAttributionCookies(document.cookie,consent)){document.cookie=cookie;}if(consent.analytics&&!consent.ads){const stripped=strippedAttributionCookie(storedCookie(document.cookie,report));if(stripped)document.cookie=stripped;}};const initial=pageConsent();let analytics=initial.analytics;if(initial.source==="user")withdraw(initial);if(analytics)persist(initial);const onConsent=event=>{const next=consentStateSchema.safeParse(event.detail);if(!next.success)return;const granted=!analytics&&next.data.analytics;analytics=next.data.analytics;withdraw(next.data);if(granted)persist(next.data);};window.addEventListener(CONSENT_EVENT,onConsent);return ()=>window.removeEventListener(CONSENT_EVENT,onConsent)}var EVENTS_ENDPOINT="/_suiteop/events";var FLUSH_INTERVAL_MS=2e3;var FLUSH_AT_EVENTS=10;var defaultReport2=err=>{console.warn("[suiteop] storefront events could not be sent",err);};function hostOf2(url){try{return new URL(url).hostname||null}catch{return null}}var META_EVENTS={begin_checkout:"InitiateCheckout",generate_lead:"Lead",sign_up:"CompleteRegistration",view_item:"ViewContent",view_search_results:"Search",add_payment_info:"AddPaymentInfo"};var GTAG_SKIP=new Set(["page_view","purchase"]);function mirrorToTags(event){const w=window;if(typeof w.gtag!=="function"&&typeof w.fbq!=="function")return;const consent=pageConsent();const{name,eventId,ts:_ts,path:_path,referrerHost:_ref,...params}=event;if(consent.analytics&&typeof w.gtag==="function"&&!GTAG_SKIP.has(name)){w.gtag("event",name,params);}const metaName=META_EVENTS[name];if(consent.ads&&typeof w.fbq==="function"&&metaName){w.fbq("track",metaName,{},{eventID:eventId});}}function trackPurchasePixel(booking){if(typeof window==="undefined")return;const fbq=window.fbq;if(typeof fbq!=="function"||!pageConsent().ads)return;const amount=typeof booking.totalMinor==="number"&&booking.currency?{value:booking.totalMinor/100,currency:booking.currency.toUpperCase()}:{};fbq("track","Purchase",amount,{eventID:booking.bookingRequestId});}var NOOP={track(){},pageView(){},flush(){},dispose(){}};function createAnalytics(opts){if(typeof window==="undefined")return NOOP;const report=opts.report??defaultReport2;const url=`${EVENTS_ENDPOINT}?key=${encodeURIComponent(opts.publishableKey)}`;let queue=[];let timer=null;let landing=true;let lastViewedHref=null;let disabled=false;let reported=false;const fail=err=>{if(reported)return;reported=true;report(err);};const send=(events,beacon)=>{const body=JSON.stringify({events});if(beacon&&typeof navigator.sendBeacon==="function"&&navigator.sendBeacon(url,body)){return}fetch(url,{method:"POST",body,keepalive:true,credentials:"same-origin",headers:{"content-type":"application/json"}}).then(response=>{if(response.status===404)disabled=true;else if(!response.ok)fail(new Error(`storefront events answered ${response.status}`));}).catch(fail);};const flush=({beacon=false}={})=>{if(timer)clearTimeout(timer);timer=null;if(disabled||queue.length===0)return;const pending=queue;queue=[];for(let i=0;i<pending.length;i+=STOREFRONT_EVENT_BATCH_MAX){send(pending.slice(i,i+STOREFRONT_EVENT_BATCH_MAX),beacon);}};const enqueue=(event,referrerHost)=>{const full={...event,eventId:crypto.randomUUID(),ts:Date.now(),path:location.pathname.slice(0,STOREFRONT_EVENT_PATH_MAX),referrerHost};try{mirrorToTags(full);}catch(err){fail(err);}if(disabled)return;queue.push(full);if(queue.length>=FLUSH_AT_EVENTS)flush();else timer??=setTimeout(()=>flush(),FLUSH_INTERVAL_MS);};const pageView=()=>{if(location.href===lastViewedHref)return;lastViewedHref=location.href;const referrerHost=landing?hostOf2(document.referrer):location.hostname;landing=false;enqueue({name:"page_view"},referrerHost);};const onPageHide=()=>flush({beacon:true});const onPageShow=event=>{if(!event.persisted)return;lastViewedHref=null;pageView();};window.addEventListener("pagehide",onPageHide);window.addEventListener("pageshow",onPageShow);return {track:event=>enqueue(event,location.hostname),pageView,flush,dispose:()=>{flush({beacon:true});window.removeEventListener("pagehide",onPageHide);window.removeEventListener("pageshow",onPageShow);}}}var shared=new Map;function analyticsFor(publishableKey){let instance=shared.get(publishableKey);if(!instance){instance=createAnalytics({publishableKey});if(instance!==NOOP)shared.set(publishableKey,instance);}return instance}function parsePublishableKey(key){if(typeof key==="string"&&key.trim().startsWith("sk_")){throw new StorefrontConfigError("A SuiteOp secret key (sk_\u2026) was passed as the publishable key. Secret keys must never be used in a browser or shipped in site code \u2014 revoke it now, then use a publishable key (pk_live_\u2026 / pk_test_\u2026) from the site settings.")}const parsed=typeof key==="string"?parseStorefrontKey(key.trim()):null;if(!parsed){throw new StorefrontConfigError("Invalid SuiteOp publishable key: expected pk_{live|test}_{us|eu|apac}_ followed by 24 letters or digits.")}if(parsed.region==="demo"){throw new StorefrontConfigError("Invalid SuiteOp publishable key: expected pk_{live|test}_{us|eu|apac}_ followed by 24 letters or digits.")}return {environment:parsed.environment,region:parsed.region}}function defaultApiOrigin({environment,region}){return environment==="live"?`https://api-${region}.suiteop.com`:`https://api-${region}-staging.suiteop.com`}var SDK_VERSION="0.6.0";var STOREFRONT_API_VERSION="2026-09-27";var GET_RETRY_JITTER_MS=300;function buildUrl(base2,spec){const params=new URLSearchParams;for(const[key,value]of Object.entries(spec.query??{})){if(Array.isArray(value))for(const item of value)params.append(key,item);else if(value!==void 0&&value!==null)params.set(key,String(value));}const search=params.toString();return `${base2}${spec.path}${search?`?${search}`:""}`}function sleep(ms,signal){return new Promise((resolve,reject)=>{if(signal?.aborted)return reject(signal.reason);const onAbort=()=>{clearTimeout(timer);reject(signal?.reason);};const timer=setTimeout(()=>{signal?.removeEventListener("abort",onAbort);resolve();},ms);signal?.addEventListener("abort",onAbort,{once:true});})}function parseJson(text){if(!text)return void 0;try{return JSON.parse(text)}catch{return void 0}}function isRetryable(err){return err instanceof StorefrontNetworkError||err instanceof StorefrontError&&err.status>=500}function createTransport(opts){async function attempt(spec){const controller=new AbortController;let timedOut=false;const timer=setTimeout(()=>{timedOut=true;controller.abort(new DOMException("The request timed out","TimeoutError"));},spec.timeoutMs);const onCallerAbort=()=>controller.abort(spec.signal?.reason);if(spec.signal?.aborted)onCallerAbort();else spec.signal?.addEventListener("abort",onCallerAbort,{once:true});try{let response;let text;try{response=await opts.fetch(buildUrl(opts.baseUrl(),spec),{method:spec.method,headers:{...opts.headers,...spec.body===void 0?{}:{"Content-Type":"application/json"},...spec.headers},body:spec.body===void 0?void 0:JSON.stringify(spec.body),signal:controller.signal});text=await response.text();}catch(err){if(spec.signal?.aborted)throw spec.signal.reason;if(timedOut)throw new StorefrontTimeoutError(spec.timeoutMs);throw new StorefrontNetworkError(err)}const body=parseJson(text);if(!response.ok)throw errorFromResponse(response,body);const envelope=body;const meta=envelope?.meta??{};const requestId=typeof meta["requestId"]==="string"?meta["requestId"]:response.headers.get("x-request-id");if(!envelope||typeof envelope!=="object"||!("data"in envelope)){throw new StorefrontError({status:response.status,code:"invalid_response",message:"The Storefront API answered without a data envelope",requestId})}return {status:response.status,requestId,data:envelope.data,meta}}finally{clearTimeout(timer);spec.signal?.removeEventListener("abort",onCallerAbort);}}return {async send(spec){try{return await attempt(spec)}catch(err){if(spec.method!=="GET"||!isRetryable(err))throw err;await sleep(Math.random()*GET_RETRY_JITTER_MS,spec.signal);return attempt(spec)}}}}var STOREFRONT_API_PATH="/api/storefront/v1";var READ_TIMEOUT_MS=1e4;var WRITE_TIMEOUT_MS=2e4;function resolveBaseUrl(baseUrl,origin){if(baseUrl===void 0)return `${origin}${STOREFRONT_API_PATH}`;if(baseUrl==="same-origin"){const pageOrigin=globalThis.location?.origin;if(!pageOrigin||pageOrigin==="null"){throw new StorefrontConfigError("baseUrl 'same-origin' needs a page origin; pass an explicit baseUrl outside a browser.")}return `${pageOrigin}${STOREFRONT_API_PATH}`}let url;try{url=new URL(baseUrl);}catch{throw new StorefrontConfigError(`baseUrl must be an absolute URL or 'same-origin'.`)}const path=url.pathname.replace(/\/+$/,"");return `${url.origin}${path.endsWith(STOREFRONT_API_PATH)?path:`${path}${STOREFRONT_API_PATH}`}`}function uuidV4(){const c=globalThis.crypto;if(typeof c.randomUUID==="function")return c.randomUUID();const b=c.getRandomValues(new Uint8Array(16));b[6]=b[6]&15|64;b[8]=b[8]&63|128;const hex=Array.from(b,x=>x.toString(16).padStart(2,"0")).join("");return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`}function validate(schema,value,res){const parsed=schema.safeParse(value);if(parsed.success)return parsed.data;throw new StorefrontError({status:res.status,code:"invalid_response",message:"The Storefront API answered a shape this SDK version does not understand",requestId:res.requestId,details:{issues:parsed.error.issues.map(i=>({path:i.path,code:i.code}))}})}var paginationSchema=z.object({total:z.number().int(),limit:z.number().int(),offset:z.number().int()});var seg=value=>encodeURIComponent(value);var SLUG_OR_ID=/^[a-z0-9-]{1,120}$/;var slotOf=(quoteRef,ratePlanId)=>`${quoteRef}\0${ratePlanId??""}`;var RELEASED_SESSION_STATUSES=new Set(["expired","cancelled"]);var KEY_BOUND_ELSEWHERE="idempotency_key_reused";function endsSession(err){return err.code==="session_expired"||err.details["requiresNewSession"]===true}var attributionWatched=false;function createStorefrontClient(options){const key=parsePublishableKey(options.publishableKey);const baseUrl=resolveBaseUrl(options.baseUrl,defaultApiOrigin(key));const transport=createTransport({baseUrl:()=>baseUrl,fetch:(input,init)=>(options.fetch??globalThis.fetch)(input,init),headers:{Authorization:`Bearer ${options.publishableKey.trim()}`,Accept:"application/json","X-SuiteOp-SDK":`storefront-js/${SDK_VERSION}`,"X-SuiteOp-Api-Version":STOREFRONT_API_VERSION,...options.locale?{"Accept-Language":options.locale}:{}}});const keySlots=new Map;const sessionSlots=new Map;const release=(slot,key2)=>{if(keySlots.get(slot)===key2)keySlots.delete(slot);};const releaseSession=id=>{const entry=sessionSlots.get(id);if(!entry)return;sessionSlots.delete(id);release(...entry);};if(!attributionWatched&&typeof window!=="undefined"){attributionWatched=true;watchAttributionConsent();}const readTimeoutMs=options.timeoutMs??READ_TIMEOUT_MS;const writeTimeoutMs=options.timeoutMs??WRITE_TIMEOUT_MS;async function get(schema,path,opts,query){const res=await transport.send({method:"GET",path,query,timeoutMs:readTimeoutMs,signal:opts?.signal});return validate(schema,res.data,res)}async function post(schema,path,body,opts,headers){const res=await transport.send({method:"POST",path,body,headers,timeoutMs:writeTimeoutMs,signal:opts?.signal});return validate(schema,res.data,res)}return {publishableKey:options.publishableKey.trim(),baseUrl,site:{get:opts=>get(storefrontSiteSchema,"/site",opts)},listings:{async list(query,opts){const res=await transport.send({method:"GET",path:"/listings",query:{location:typeof query?.location==="string"?query.location:query?.location?.length?query.location.join(","):void 0,building:query?.building,guests:query?.guests,bedrooms:query?.bedrooms,currency:query?.currency,priceMin:query?.priceMin,priceMax:query?.priceMax,amenities:query?.amenities,bounds:typeof query?.bounds==="string"?query.bounds:query?.bounds?.join(","),checkIn:query?.checkIn,checkOut:query?.checkOut,sort:query?.sort,facets:query?.facets?1:void 0,limit:query?.limit,offset:query?.offset},timeoutMs:readTimeoutMs,signal:opts?.signal});const items=validate(z.array(storefrontListingSummarySchema),res.data,res);const pagination=validate(paginationSchema,res.meta["pagination"],res);const facets=res.meta["facets"]===void 0?void 0:validate(storefrontListingFacetsSchema,res.meta["facets"],res);return {items,...pagination,...facets?{facets}:{}}},get:(id,opts)=>get(storefrontListingSchema,`/listings/${seg(id)}`,opts)},buildings:{list:opts=>get(z.array(storefrontBuildingSchema),"/buildings",opts),get:(id,opts)=>get(storefrontBuildingSchema,`/buildings/${seg(id)}`,opts),async availability(id,query,opts){const res=await transport.send({method:"GET",path:`/buildings/${seg(id)}/availability`,query:{checkIn:query.checkIn,checkOut:query.checkOut,guests:query.guests,limit:query.limit,offset:query.offset},timeoutMs:readTimeoutMs,signal:opts?.signal});const items=validate(z.array(storefrontUnitAvailabilitySchema),res.data,res);const pagination=validate(paginationSchema,res.meta["pagination"],res);return {items,...pagination}}},locations:{list:opts=>get(z.array(storefrontLocationSchema),"/locations",opts)},guides:{list:opts=>get(z.array(storefrontGuideSchema),"/guides",opts),async get(id,opts){if(!storefrontIdSchema.safeParse(id).success)return null;try{return await get(storefrontGuideSchema,`/guides/${seg(id)}`,opts)}catch(err){if(err instanceof StorefrontError&&err.status===404)return null;throw err}}},contentModel:{get:opts=>get(storefrontContentModelSchema,"/content-model",opts)},collections:{async list(key2,query,opts){const res=await transport.send({method:"GET",path:`/collections/${seg(key2)}/items`,query:{limit:query?.limit,offset:query?.offset},timeoutMs:readTimeoutMs,signal:opts?.signal});const items=validate(z.array(storefrontContentItemSchema),res.data,res);const pagination=validate(paginationSchema,res.meta["pagination"],res);return {items,...pagination}},async get(key2,slugOrId,opts){if(!SLUG_OR_ID.test(slugOrId))return null;try{return await get(storefrontContentItemSchema,`/collections/${seg(key2)}/items/${seg(slugOrId)}`,opts)}catch(err){if(err instanceof StorefrontError&&err.status===404)return null;throw err}}},sections:{get:(key2,opts)=>get(storefrontContentItemSchema,`/sections/${seg(key2)}`,opts)},amenities:{list:opts=>get(z.array(z.string()),"/amenities",opts)},reviews:{list:(query,opts)=>get(z.array(storefrontReviewSchema),"/reviews",opts,{listingId:query?.listingId,limit:query?.limit,offset:query?.offset})},availability:{get:(listingId,stay,opts)=>get(storefrontAvailabilitySchema,`/listings/${seg(listingId)}/availability`,opts,{checkIn:stay.checkIn,checkOut:stay.checkOut,guests:stay.guests})},calendar:{get:(listingId,range,opts)=>get(storefrontCalendarSchema,`/listings/${seg(listingId)}/calendar`,opts,{from:range.from,to:range.to})},quotes:{create:(input,opts)=>post(storefrontQuoteSchema,"/quotes",input,opts)},checkoutSessions:{async create(input,opts){const slot=slotOf(input.quoteRef,input.ratePlanId);const idempotencyKey=opts?.idempotencyKey??keySlots.get(slot)??uuidV4();keySlots.set(slot,idempotencyKey);const attribution=input.attribution===void 0?getAttribution():input.attribution;const body=attribution?{...input,attribution}:input;try{const created=await post(checkoutSessionSchema,"/checkout-sessions",body,opts,{"Idempotency-Key":idempotencyKey});if(RELEASED_SESSION_STATUSES.has(created.status))release(slot,idempotencyKey);else sessionSlots.set(created.id,[slot,idempotencyKey]);return {...created,idempotencyKey}}catch(err){if(err instanceof StorefrontError){err.details["idempotencyKey"]=idempotencyKey;if(err.code===KEY_BOUND_ELSEWHERE)release(slot,idempotencyKey);}throw err}},get:(id,opts)=>get(checkoutSessionSchema,`/checkout-sessions/${seg(id)}`,opts),async confirm(id,input,opts){try{const result=await post(bookingResultSchema,`/checkout-sessions/${seg(id)}/confirm`,input,opts);return result}catch(err){if(err instanceof StorefrontError&&endsSession(err)){releaseSession(id);}throw err}},forget(quoteRef,ratePlanId){keySlots.delete(slotOf(quoteRef,ratePlanId));}},bookings:{get:(token,opts)=>get(storefrontBookingSchema,`/bookings/${seg(token)}`,opts)},contact:{async create(input,opts){await post(storefrontContactResultSchema,"/contact",input,opts);}}}}
8
+
9
+ export { SDK_VERSION, STOREFRONT_API_PATH, STOREFRONT_API_VERSION, analyticsFor, createAnalytics, createStorefrontClient, getAttribution, parsePublishableKey, trackPurchasePixel };
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { e as StorefrontStay, a as StorefrontBuildingAvailabilityQuery, g as StorefrontUnitAvailability, S as StorefrontAvailability, d as StorefrontCalendarQuery, b as StorefrontCalendar } from './availability-Dh0yLSkj.js';
2
+ import { e as StorefrontStay, a as StorefrontBuildingAvailabilityQuery, g as StorefrontUnitAvailability, S as StorefrontAvailability, d as StorefrontCalendarQuery, b as StorefrontCalendar } from './availability.d-Cla9GuGc.cjs';
3
3
 
4
4
  declare const storefrontGuestInputSchema: z.ZodObject<{
5
5
  firstName: z.ZodString;
@@ -27,13 +27,13 @@ type ConfirmCheckoutSessionInput = z.infer<typeof confirmCheckoutSessionInputSch
27
27
  declare const bookingResultSchema: z.ZodObject<{
28
28
  bookingRequestId: z.ZodUUID;
29
29
  confirmationToken: z.ZodString;
30
- status: z.ZodType<"inquiry" | "processing" | "confirmed" | "failed" | "expired" | "pending_pms_sync" | "pending_payment" | "authorized" | "reserved" | "cancelled" | (string & {}), unknown, z.core.$ZodTypeInternals<"inquiry" | "processing" | "confirmed" | "failed" | "expired" | "pending_pms_sync" | "pending_payment" | "authorized" | "reserved" | "cancelled" | (string & {}), unknown>>;
30
+ status: z.ZodType<"authorized" | "cancelled" | "confirmed" | "expired" | "failed" | "inquiry" | "pending_payment" | "pending_pms_sync" | "processing" | "reserved" | (string & {}), unknown, z.core.$ZodTypeInternals<"authorized" | "cancelled" | "confirmed" | "expired" | "failed" | "inquiry" | "pending_payment" | "pending_pms_sync" | "processing" | "reserved" | (string & {}), unknown>>;
31
31
  confirmationCode: z.ZodNullable<z.ZodString>;
32
32
  }, z.core.$strip>;
33
33
  type BookingResult = z.infer<typeof bookingResultSchema>;
34
34
  declare const storefrontBookingSchema: z.ZodObject<{
35
35
  id: z.ZodUUID;
36
- status: z.ZodType<"inquiry" | "processing" | "confirmed" | "failed" | "expired" | "pending_pms_sync" | "pending_payment" | "authorized" | "reserved" | "cancelled" | (string & {}), unknown, z.core.$ZodTypeInternals<"inquiry" | "processing" | "confirmed" | "failed" | "expired" | "pending_pms_sync" | "pending_payment" | "authorized" | "reserved" | "cancelled" | (string & {}), unknown>>;
36
+ status: z.ZodType<"authorized" | "cancelled" | "confirmed" | "expired" | "failed" | "inquiry" | "pending_payment" | "pending_pms_sync" | "processing" | "reserved" | (string & {}), unknown, z.core.$ZodTypeInternals<"authorized" | "cancelled" | "confirmed" | "expired" | "failed" | "inquiry" | "pending_payment" | "pending_pms_sync" | "processing" | "reserved" | (string & {}), unknown>>;
37
37
  propertyId: z.ZodNullable<z.ZodUUID>;
38
38
  checkIn: z.ZodNullable<z.ZodISODate>;
39
39
  checkOut: z.ZodNullable<z.ZodISODate>;
@@ -123,7 +123,7 @@ declare const storefrontListingSchema: z.ZodObject<{
123
123
  countryCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
124
124
  }, z.core.$strip>;
125
125
  type StorefrontListing = z.infer<typeof storefrontListingSchema>;
126
- declare const STOREFRONT_LISTING_SORTS: readonly ["recommended", "price_asc", "price_desc", "rating"];
126
+ declare const STOREFRONT_LISTING_SORTS: readonly ['recommended', 'price_asc', 'price_desc', 'rating'];
127
127
  type StorefrontListingSort = (typeof STOREFRONT_LISTING_SORTS)[number];
128
128
  interface StorefrontListingsQuery {
129
129
  location?: string | readonly string[];
@@ -135,6 +135,8 @@ interface StorefrontListingsQuery {
135
135
  priceMax?: number;
136
136
  amenities?: readonly string[];
137
137
  bounds?: readonly [number, number, number, number] | string;
138
+ checkIn?: string;
139
+ checkOut?: string;
138
140
  sort?: StorefrontListingSort;
139
141
  facets?: boolean;
140
142
  limit?: number;
@@ -284,7 +286,7 @@ declare const createCheckoutSessionInputSchema: z.ZodObject<{
284
286
  wbraid: string | null;
285
287
  fbclid: string | null;
286
288
  msclkid: string | null;
287
- paidClick: "google" | "microsoft" | "meta" | null;
289
+ paidClick: "google" | "meta" | "microsoft" | null;
288
290
  } | null;
289
291
  last: {
290
292
  ts: string;
@@ -300,7 +302,7 @@ declare const createCheckoutSessionInputSchema: z.ZodObject<{
300
302
  wbraid: string | null;
301
303
  fbclid: string | null;
302
304
  msclkid: string | null;
303
- paidClick: "google" | "microsoft" | "meta" | null;
305
+ paidClick: "google" | "meta" | "microsoft" | null;
304
306
  } | null;
305
307
  ids: {
306
308
  gaClientId: string | null;
@@ -312,7 +314,7 @@ declare const createCheckoutSessionInputSchema: z.ZodObject<{
312
314
  analytics: boolean;
313
315
  ads: boolean;
314
316
  source: "default" | "user";
315
- region: "restricted" | "other";
317
+ region: "other" | "restricted";
316
318
  decidedAt: string | null;
317
319
  };
318
320
  experiment?: {
@@ -334,7 +336,7 @@ declare const createCheckoutSessionInputSchema: z.ZodObject<{
334
336
  wbraid: string | null;
335
337
  fbclid: string | null;
336
338
  msclkid: string | null;
337
- paidClick: "google" | "microsoft" | "meta" | null;
339
+ paidClick: "google" | "meta" | "microsoft" | null;
338
340
  } | null;
339
341
  last: {
340
342
  ts: string;
@@ -350,7 +352,7 @@ declare const createCheckoutSessionInputSchema: z.ZodObject<{
350
352
  wbraid: string | null;
351
353
  fbclid: string | null;
352
354
  msclkid: string | null;
353
- paidClick: "google" | "microsoft" | "meta" | null;
355
+ paidClick: "google" | "meta" | "microsoft" | null;
354
356
  } | null;
355
357
  ids: {
356
358
  gaClientId: string | null;
@@ -362,7 +364,7 @@ declare const createCheckoutSessionInputSchema: z.ZodObject<{
362
364
  analytics: boolean;
363
365
  ads: boolean;
364
366
  source: "default" | "user";
365
- region: "restricted" | "other";
367
+ region: "other" | "restricted";
366
368
  decidedAt: string | null;
367
369
  };
368
370
  experiment?: {
@@ -382,7 +384,7 @@ declare const createCheckoutSessionInputSchema: z.ZodObject<{
382
384
  type CreateCheckoutSessionInput = z.infer<typeof createCheckoutSessionInputSchema>;
383
385
  declare const checkoutSessionSchema: z.ZodObject<{
384
386
  id: z.ZodUUID;
385
- status: z.ZodType<"inquiry" | "processing" | "confirmed" | "failed" | "expired" | "pending_pms_sync" | "pending_payment" | "authorized" | "reserved" | "cancelled" | (string & {}), unknown, z.core.$ZodTypeInternals<"inquiry" | "processing" | "confirmed" | "failed" | "expired" | "pending_pms_sync" | "pending_payment" | "authorized" | "reserved" | "cancelled" | (string & {}), unknown>>;
387
+ status: z.ZodType<"authorized" | "cancelled" | "confirmed" | "expired" | "failed" | "inquiry" | "pending_payment" | "pending_pms_sync" | "processing" | "reserved" | (string & {}), unknown, z.core.$ZodTypeInternals<"authorized" | "cancelled" | "confirmed" | "expired" | "failed" | "inquiry" | "pending_payment" | "pending_pms_sync" | "processing" | "reserved" | (string & {}), unknown>>;
386
388
  quote: z.ZodObject<{
387
389
  listingId: z.ZodUUID;
388
390
  checkIn: z.ZodISODate;
@@ -557,18 +559,33 @@ type StorefrontQuote = z.infer<typeof storefrontQuoteSchema>;
557
559
  declare const STOREFRONT_API_PATH = "/api/storefront/v1";
558
560
  interface StorefrontClientOptions {
559
561
  publishableKey: string;
562
+ /**
563
+ * `'same-origin'` → `/api/storefront/v1` on the page's origin (SuiteOp-hosted sites, via the
564
+ * storefront edge). A URL → that origin (a `WrongRegionError.baseUrl` works as is). Omitted →
565
+ * the key's regional host: `https://api-<region>.suiteop.com` for `pk_live_`, the region's
566
+ * staging host for `pk_test_`.
567
+ */
560
568
  baseUrl?: 'same-origin' | (string & {});
569
+ /** Per-request timeout. Default 10 s for reads, 20 s for quotes and checkout. */
561
570
  timeoutMs?: number;
562
571
  fetch?: typeof fetch;
572
+ /** Sent as `Accept-Language`, so API-side copy (cancellation policy text) localises. */
563
573
  locale?: string;
564
574
  }
565
575
  interface RequestOptions {
576
+ /** Aborting rejects the call with the signal's reason (an `AbortError`). */
566
577
  signal?: AbortSignal;
567
578
  }
568
579
  interface CreateCheckoutSessionOptions extends RequestOptions {
580
+ /**
581
+ * Omitted → one UUID v4 per quoteRef + ratePlanId, reused by every retry on this client until
582
+ * the outcome is final (a dead session or a definitive refusal releases it).
583
+ */
569
584
  idempotencyKey?: string;
570
585
  }
586
+ /** `collections.list` paging. */
571
587
  interface ContentListQuery {
588
+ /** 1–100, default 20. */
572
589
  limit?: number;
573
590
  offset?: number;
574
591
  }
@@ -578,17 +595,25 @@ interface Page<T> {
578
595
  limit: number;
579
596
  offset: number;
580
597
  }
598
+ /** The session plus the Idempotency-Key it was created with — `<suiteop-checkout>` replays both. */
581
599
  type CreatedCheckoutSession = CheckoutSession & {
582
600
  idempotencyKey: string;
583
601
  };
602
+ /** `POST /checkout-sessions/:id/confirm` body as sent (consents and language are optional). */
584
603
  type ConfirmCheckoutSessionRequest = z.input<typeof confirmCheckoutSessionInputSchema>;
585
604
  interface StorefrontClient {
605
+ /** The publishable key this client sends (public by design). */
586
606
  readonly publishableKey: string;
607
+ /** The resolved Storefront API base, ending in `/api/storefront/v1`. */
587
608
  readonly baseUrl: string;
588
609
  site: {
589
610
  get(opts?: RequestOptions): Promise<StorefrontSite>;
590
611
  };
591
612
  listings: {
613
+ /**
614
+ * The site's listings, filtered and sorted. `facets: true` adds the filters sheet's
615
+ * `facets` (one more query on the API).
616
+ */
592
617
  list(query?: StorefrontListingsQuery, opts?: RequestOptions): Promise<Page<StorefrontListingSummary> & {
593
618
  facets?: StorefrontListingFacets;
594
619
  }>;
@@ -597,22 +622,40 @@ interface StorefrontClient {
597
622
  buildings: {
598
623
  list(opts?: RequestOptions): Promise<StorefrontBuilding[]>;
599
624
  get(id: string, opts?: RequestOptions): Promise<StorefrontBuilding>;
625
+ /**
626
+ * Every unit of the building for one stay — status, stay total and the next free window of the
627
+ * same length — in one call. Display only: read from the synced calendar, and the total is the
628
+ * nightly rates plus the cleaning fee, before taxes. `quotes.create` gives the bookable price.
629
+ * Pages like `listings.list` (`limit` 1–100, default 50).
630
+ */
600
631
  availability(id: string, query: StorefrontStay & Partial<Pick<StorefrontBuildingAvailabilityQuery, 'limit' | 'offset'>>, opts?: RequestOptions): Promise<Page<StorefrontUnitAvailability>>;
601
632
  };
602
633
  locations: {
603
634
  list(opts?: RequestOptions): Promise<StorefrontLocation[]>;
604
635
  };
636
+ /**
637
+ * "Things to do": the guest-portal guide lists the manager shows on booking sites, with their
638
+ * places, in the client's `locale` (English fallback). Lists with no place are left out.
639
+ */
605
640
  guides: {
606
641
  list(opts?: RequestOptions): Promise<StorefrontGuide[]>;
642
+ /** By id; null when the site does not show that list. */
607
643
  get(id: string, opts?: RequestOptions): Promise<StorefrontGuide | null>;
608
644
  };
645
+ /** The site's content model as its code declared it (hidden types and fields left out). */
609
646
  contentModel: {
610
647
  get(opts?: RequestOptions): Promise<StorefrontContentModel>;
611
648
  };
649
+ /**
650
+ * Items of a collection the site declares (`defineContent`): published ones only, dated up to
651
+ * now, in the collection's order. `createContentReader` gives the typed version.
652
+ */
612
653
  collections: {
613
654
  list(key: string, query?: ContentListQuery, opts?: RequestOptions): Promise<Page<StorefrontContentItem>>;
655
+ /** By slug or id; null when there is none published (a draft, a future post, a typo). */
614
656
  get(key: string, slugOrId: string, opts?: RequestOptions): Promise<StorefrontContentItem | null>;
615
657
  };
658
+ /** A page section's one item. A section nobody filled in yet has `fields: {}`. */
616
659
  sections: {
617
660
  get(key: string, opts?: RequestOptions): Promise<StorefrontContentItem>;
618
661
  };
@@ -634,7 +677,17 @@ interface StorefrontClient {
634
677
  checkoutSessions: {
635
678
  create(input: CreateCheckoutSessionInput, opts?: CreateCheckoutSessionOptions): Promise<CreatedCheckoutSession>;
636
679
  get(id: string, opts?: RequestOptions): Promise<CheckoutSession>;
680
+ /**
681
+ * Drop the kept Idempotency-Key for this quote + rate plan; the next `create` opens a new
682
+ * session and a new payment hold. Never call it after a `failed` session or booking result:
683
+ * the guest may already have been charged, and a new session would take a second payment.
684
+ */
637
685
  forget(quoteRef: string, ratePlanId?: string): void;
686
+ /**
687
+ * Idempotent on the session: a double submit or a second tab gets the same booking. A
688
+ * confirm error that ends the session (`session_expired`, or `requiresNewSession`) releases
689
+ * the quote's key, so the next `create` opens a new session. A `failed` result does not.
690
+ */
638
691
  confirm(id: string, input: ConfirmCheckoutSessionRequest, opts?: RequestOptions): Promise<BookingResult>;
639
692
  };
640
693
  bookings: {
@@ -644,6 +697,7 @@ interface StorefrontClient {
644
697
  create(input: StorefrontContactInput, opts?: RequestOptions): Promise<void>;
645
698
  };
646
699
  }
700
+ /** A typed client for one site's Storefront API, bound to its publishable key. */
647
701
  declare function createStorefrontClient(options: StorefrontClientOptions): StorefrontClient;
648
702
 
649
703
  export { type StorefrontQuoteInput as A, type BookingResult as B, type CheckoutMountDescriptor as C, type StorefrontRatePlanQuote as D, type StorefrontReview as E, type StorefrontReviewsQuery as F, type StorefrontSite as G, createStorefrontClient as H, type Page as P, type RequestOptions as R, STOREFRONT_API_PATH as S, type CheckoutSession as a, type ConfirmCheckoutSessionInput as b, type ConfirmCheckoutSessionRequest as c, type ContentListQuery as d, type CreateCheckoutSessionInput as e, type CreateCheckoutSessionOptions as f, type CreatedCheckoutSession as g, type StorefrontBooking as h, type StorefrontBuilding as i, type StorefrontClient as j, type StorefrontClientOptions as k, type StorefrontContactInput as l, type StorefrontContentItem as m, type StorefrontContentModel as n, type StorefrontContentRef as o, type StorefrontGuestInput as p, type StorefrontGuide as q, type StorefrontGuideItem as r, type StorefrontImage as s, type StorefrontListing as t, type StorefrontListingFacets as u, type StorefrontListingSort as v, type StorefrontListingSummary as w, type StorefrontListingsQuery as x, type StorefrontLocation as y, type StorefrontQuote as z };