@getmicdrop/venue-calendar 4.0.92 → 4.0.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CartView-R5Z2q4Hy.js +2380 -0
- package/dist/CartView-R5Z2q4Hy.js.map +1 -0
- package/dist/Checkout-BUwdMMjA.js +1040 -0
- package/dist/Checkout-BUwdMMjA.js.map +1 -0
- package/dist/{Checkout-BscK0fmI.js → Checkout-avoTg_Zw.js} +612 -587
- package/dist/Checkout-avoTg_Zw.js.map +1 -0
- package/dist/{CheckoutTimer-CF6emJxC.js → CheckoutTimer-C_ax1Uo2.js} +37 -37
- package/dist/CheckoutTimer-C_ax1Uo2.js.map +1 -0
- package/dist/ClockIcon-C5muTIYL.js +32 -0
- package/dist/ClockIcon-C5muTIYL.js.map +1 -0
- package/dist/CollectionView-3MHrh5Zm.js +299 -0
- package/dist/CollectionView-3MHrh5Zm.js.map +1 -0
- package/dist/{Event-BzBZmp6N.js → Event-vR1aE543.js} +1593 -1509
- package/dist/Event-vR1aE543.js.map +1 -0
- package/dist/EventPage-Bhg-8-5x.js +566 -0
- package/dist/EventPage-Bhg-8-5x.js.map +1 -0
- package/dist/{Heading-BswFTsr3.js → Heading-ZcvybCi8.js} +30 -30
- package/dist/Heading-ZcvybCi8.js.map +1 -0
- package/dist/ScarcityBadge-CjTFAhat.js +167 -0
- package/dist/ScarcityBadge-CjTFAhat.js.map +1 -0
- package/dist/{SeriesPage-CbmuRofu.js → SeriesPage-DTEY83yR.js} +5 -5
- package/dist/{SeriesPage-CbmuRofu.js.map → SeriesPage-DTEY83yR.js.map} +1 -1
- package/dist/{Spinner-CAxL7NK0.js → Spinner--YBVljiP.js} +10 -10
- package/dist/Spinner--YBVljiP.js.map +1 -0
- package/dist/Success-ClCvTxTH.js +848 -0
- package/dist/Success-ClCvTxTH.js.map +1 -0
- package/dist/Text-SlV9H-GU.js +171 -0
- package/dist/Text-SlV9H-GU.js.map +1 -0
- package/dist/VenueCalendar-Bth_j-Wp.js +15657 -0
- package/dist/VenueCalendar-Bth_j-Wp.js.map +1 -0
- package/dist/{ViewTicketsEmbed-C7GPK33F.js → ViewTicketsEmbed-D7g7RYZI.js} +375 -364
- package/dist/{ViewTicketsEmbed-C7GPK33F.js.map → ViewTicketsEmbed-D7g7RYZI.js.map} +1 -1
- package/dist/api/{events.d.ts → api/events.d.ts} +9 -10
- package/dist/api/{index.d.ts → api/index.d.ts} +2 -1
- package/dist/api/api/result.d.ts +48 -0
- package/dist/api/{transformers → api/transformers}/event.d.ts +19 -10
- package/dist/api/api.cjs +1 -1
- package/dist/api/api.cjs.map +1 -1
- package/dist/api/api.mjs +688 -594
- package/dist/api/api.mjs.map +1 -1
- package/dist/api/types.d.ts +447 -438
- package/dist/{data-toggle-store.svelte-BUOQgWTH.js → data-toggle-store.svelte-CFAVM8I0.js} +2 -2
- package/dist/{data-toggle-store.svelte-BUOQgWTH.js.map → data-toggle-store.svelte-CFAVM8I0.js.map} +1 -1
- package/dist/labels-CnpAWtkz.js +640 -0
- package/dist/labels-CnpAWtkz.js.map +1 -0
- package/dist/{modalManager.svelte-C8L8XPBi.js → modalManager.svelte-T2RGHhZH.js} +2 -2
- package/dist/{modalManager.svelte-C8L8XPBi.js.map → modalManager.svelte-T2RGHhZH.js.map} +1 -1
- package/dist/seo/seo.cjs +1 -1
- package/dist/seo/seo.cjs.map +1 -1
- package/dist/seo/seo.mjs +78 -74
- package/dist/seo/seo.mjs.map +1 -1
- package/dist/transform-C3TwZSH6.js +349 -0
- package/dist/transform-C3TwZSH6.js.map +1 -0
- package/dist/types/index.d.ts +22 -10
- package/dist/venue-calendar.css +1 -1
- package/dist/venue-calendar.es.js +18 -18
- package/dist/venue-calendar.iife.js +46 -32
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +45 -31
- package/dist/venue-calendar.umd.js.map +1 -1
- package/package.json +7 -5
- package/dist/CartView-IiXG4UTa.js +0 -2366
- package/dist/CartView-IiXG4UTa.js.map +0 -1
- package/dist/Checkout-BscK0fmI.js.map +0 -1
- package/dist/Checkout-Dx7QWFn9.js +0 -916
- package/dist/Checkout-Dx7QWFn9.js.map +0 -1
- package/dist/CheckoutTimer-CF6emJxC.js.map +0 -1
- package/dist/CollectionView-BAy5mYKg.js +0 -299
- package/dist/CollectionView-BAy5mYKg.js.map +0 -1
- package/dist/Event-BzBZmp6N.js.map +0 -1
- package/dist/EventPage-TNjZq1ls.js +0 -532
- package/dist/EventPage-TNjZq1ls.js.map +0 -1
- package/dist/Heading-BswFTsr3.js.map +0 -1
- package/dist/ScarcityBadge-DEzS1qXs.js +0 -90
- package/dist/ScarcityBadge-DEzS1qXs.js.map +0 -1
- package/dist/Spinner-CAxL7NK0.js.map +0 -1
- package/dist/Success-DdWMiFHS.js +0 -729
- package/dist/Success-DdWMiFHS.js.map +0 -1
- package/dist/Text-HvIEXENM.js +0 -167
- package/dist/Text-HvIEXENM.js.map +0 -1
- package/dist/VenueCalendar-DhxkKfli.js +0 -18400
- package/dist/VenueCalendar-DhxkKfli.js.map +0 -1
- package/dist/labels-Bwet5rDx.js +0 -965
- package/dist/labels-Bwet5rDx.js.map +0 -1
- package/dist/transform-5AH-sRWT.js +0 -274
- package/dist/transform-5AH-sRWT.js.map +0 -1
- /package/dist/api/{client.d.ts → api/client.d.ts} +0 -0
- /package/dist/api/{cta.d.ts → api/cta.d.ts} +0 -0
- /package/dist/api/{gift-cards.d.ts → api/gift-cards.d.ts} +0 -0
- /package/dist/api/{orders.d.ts → api/orders.d.ts} +0 -0
- /package/dist/api/{promo.d.ts → api/promo.d.ts} +0 -0
- /package/dist/api/{transformers → api/transformers}/address.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/cart.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/collection.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/giftCard.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/index.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/order.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/performer.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/series.d.ts +0 -0
- /package/dist/api/{transformers → api/transformers}/venue.d.ts +0 -0
- /package/dist/api/{venues.d.ts → api/venues.d.ts} +0 -0
- /package/dist/api/{waitlist.d.ts → api/waitlist.d.ts} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Result } from './result.js';
|
|
1
2
|
import { Event, AvailableTicket, EventPerformersResponse, SeriesOccurrencesResponse, SeriesPageData, PublicCollectionData, ResolvedEntity } from './types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Fetch event details
|
|
@@ -17,6 +18,7 @@ export declare function fetchEventDetails(eventId: string | number, customFetch?
|
|
|
17
18
|
* @param eventId - The event ID
|
|
18
19
|
* @returns Array of available tickets
|
|
19
20
|
*/
|
|
21
|
+
export declare function fetchEventTicketsResult(eventId: string | number): Promise<Result<AvailableTicket[]>>;
|
|
20
22
|
export declare function fetchEventTickets(eventId: string | number): Promise<AvailableTicket[]>;
|
|
21
23
|
/**
|
|
22
24
|
* Fetch performers for an event
|
|
@@ -26,6 +28,7 @@ export declare function fetchEventTickets(eventId: string | number): Promise<Ava
|
|
|
26
28
|
* @param eventId - The event ID
|
|
27
29
|
* @returns Performers list and visibility flag
|
|
28
30
|
*/
|
|
31
|
+
export declare function fetchEventPerformersResult(eventId: string | number): Promise<Result<EventPerformersResponse>>;
|
|
29
32
|
export declare function fetchEventPerformers(eventId: string | number): Promise<EventPerformersResponse>;
|
|
30
33
|
/**
|
|
31
34
|
* Fetch all venues for an organization
|
|
@@ -33,6 +36,7 @@ export declare function fetchEventPerformers(eventId: string | number): Promise<
|
|
|
33
36
|
* @param orgId - The organization ID
|
|
34
37
|
* @returns Array of venues
|
|
35
38
|
*/
|
|
39
|
+
export declare function fetchAllVenuesResult(orgId: string | number): Promise<Result<any[]>>;
|
|
36
40
|
export declare function fetchAllVenues(orgId: string | number): Promise<any[]>;
|
|
37
41
|
/**
|
|
38
42
|
* Fetch events for a venue
|
|
@@ -40,17 +44,9 @@ export declare function fetchAllVenues(orgId: string | number): Promise<any[]>;
|
|
|
40
44
|
* @param venueId - The venue ID
|
|
41
45
|
* @returns Array of events
|
|
42
46
|
*/
|
|
47
|
+
export declare function fetchVenueEventsResult(venueId: string | number): Promise<Result<Event[]>>;
|
|
43
48
|
export declare function fetchVenueEvents(venueId: string | number): Promise<Event[]>;
|
|
44
|
-
|
|
45
|
-
* Get events for a specific month
|
|
46
|
-
*
|
|
47
|
-
* Used for calendar views to efficiently load events.
|
|
48
|
-
*
|
|
49
|
-
* @param venueId - The venue ID
|
|
50
|
-
* @param year - The year (e.g., 2024)
|
|
51
|
-
* @param month - The month (1-12)
|
|
52
|
-
* @returns Array of events for the month
|
|
53
|
-
*/
|
|
49
|
+
export declare function getMonthEventsResult(venueId: string | number, year: number, month: number): Promise<Result<Event[]>>;
|
|
54
50
|
export declare function getMonthEvents(venueId: string | number, year: number, month: number): Promise<Event[]>;
|
|
55
51
|
/**
|
|
56
52
|
* Get events for an organization for a specific month
|
|
@@ -60,6 +56,7 @@ export declare function getMonthEvents(venueId: string | number, year: number, m
|
|
|
60
56
|
* @param month - The month (1-12)
|
|
61
57
|
* @returns Array of events for the month
|
|
62
58
|
*/
|
|
59
|
+
export declare function getOrgMonthEventsResult(orgId: string | number, year: number, month: number): Promise<Result<Event[]>>;
|
|
63
60
|
export declare function getOrgMonthEvents(orgId: string | number, year: number, month: number): Promise<Event[]>;
|
|
64
61
|
/**
|
|
65
62
|
* Get series occurrences for date selector
|
|
@@ -69,6 +66,7 @@ export declare function getOrgMonthEvents(orgId: string | number, year: number,
|
|
|
69
66
|
* @param eventSeriesId - The series ID
|
|
70
67
|
* @returns Series occurrences
|
|
71
68
|
*/
|
|
69
|
+
export declare function getSeriesOccurrencesResult(eventSeriesId: number): Promise<Result<SeriesOccurrencesResponse>>;
|
|
72
70
|
export declare function getSeriesOccurrences(eventSeriesId: number): Promise<SeriesOccurrencesResponse | null>;
|
|
73
71
|
/**
|
|
74
72
|
* Fetch series occurrences with CTA state
|
|
@@ -79,6 +77,7 @@ export declare function getSeriesOccurrences(eventSeriesId: number): Promise<Ser
|
|
|
79
77
|
* @param venueId - The venue ID
|
|
80
78
|
* @returns Series occurrences with CTA state
|
|
81
79
|
*/
|
|
80
|
+
export declare function fetchSeriesOccurrencesResult(eventSeriesId: number, venueId: string | number): Promise<Result<SeriesOccurrencesResponse>>;
|
|
82
81
|
export declare function fetchSeriesOccurrences(eventSeriesId: number, venueId: string | number): Promise<SeriesOccurrencesResponse | null>;
|
|
83
82
|
/**
|
|
84
83
|
* Resolve an entity-agnostic public id to its concrete type + data.
|
|
@@ -33,7 +33,8 @@ export { configureApi, getApiConfig, getPublicBaseUrl, getLegacyPublicUrl, getOr
|
|
|
33
33
|
export { createPaymentIntent, validatePaymentIntent, updateCartQuantities, getCartByUUID, createOrder, getOrder, completeReservation, cancelReservation, extendCheckoutSession, getSessionStatus, initiateOrder, trackUTMSource, } from './orders.js';
|
|
34
34
|
export type { CartReservationView, CartView } from './orders.js';
|
|
35
35
|
export { validatePromoCode, hasPromoCodes, applyPromoCode, removePromoCode, } from './promo.js';
|
|
36
|
-
export { fetchEventDetails, fetchEventTickets, fetchEventPerformers, fetchAllVenues, fetchVenueEvents, getMonthEvents, getOrgMonthEvents, getSeriesOccurrences, fetchSeriesOccurrences, fetchSeriesPage, fetchPublicCollection, resolvePublicEntity, checkEventPassword, checkCollectionPassword, testNetworkConnection, } from './events.js';
|
|
36
|
+
export { fetchEventDetails, fetchEventTickets, fetchEventPerformers, fetchAllVenues, fetchVenueEvents, getMonthEvents, getOrgMonthEvents, getSeriesOccurrences, fetchSeriesOccurrences, fetchSeriesPage, fetchPublicCollection, resolvePublicEntity, checkEventPassword, checkCollectionPassword, testNetworkConnection, fetchEventTicketsResult, fetchEventPerformersResult, fetchAllVenuesResult, fetchVenueEventsResult, getMonthEventsResult, getOrgMonthEventsResult, getSeriesOccurrencesResult, fetchSeriesOccurrencesResult, } from './events.js';
|
|
37
|
+
export { ok, err, isOk, unwrapOr, type Result } from './result.js';
|
|
37
38
|
export { getVenue, getVenueFees, getVenueBySlug } from './venues.js';
|
|
38
39
|
export { createGiftCardPurchase, applyGiftCard, removeGiftCard, completeGiftCardPayment, } from './gift-cards.js';
|
|
39
40
|
export type { GiftCardPurchaseRequest, GiftCardPurchaseResponse, ApplyGiftCardResult, RemoveGiftCardResult, CompleteGiftCardPaymentInput, CompleteGiftCardPaymentResult, } from './gift-cards.js';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result — the canonical error channel for API loaders.
|
|
3
|
+
*
|
|
4
|
+
* The public loaders in this package historically collapsed a failed fetch
|
|
5
|
+
* to an empty value (`[]`, `{ performers: [], showPerformers: false }`, or
|
|
6
|
+
* `null`), which is indistinguishable from a genuinely empty result. A buyer
|
|
7
|
+
* hitting a live event during a transient endpoint blip then sees a dead
|
|
8
|
+
* "No tickets available" button with no retry; a failed calendar month
|
|
9
|
+
* renders dark, so the venue looks like it has nothing on.
|
|
10
|
+
*
|
|
11
|
+
* `Result<T>` gives loaders a typed error channel so callers can tell
|
|
12
|
+
* "the request failed" apart from "there is genuinely nothing here", and
|
|
13
|
+
* offer a retry instead of silently degrading. Loaders expose a `*Result`
|
|
14
|
+
* variant returning this; the array/object-returning public functions stay
|
|
15
|
+
* as thin fail-open adapters over that variant (single source of truth for
|
|
16
|
+
* the fetch + validation logic).
|
|
17
|
+
*
|
|
18
|
+
* Not to be confused with `ApiResponse<T>` (types.ts) — that is the write-path
|
|
19
|
+
* HTTP envelope returned by `apiPost`/`apiGet`/etc. (`{ success, data?, error?,
|
|
20
|
+
* statusCode? }`, discriminated on `.success`). `Result<T>` is the read-path
|
|
21
|
+
* loader channel, discriminated on `.ok`. They are deliberately separate:
|
|
22
|
+
* `ApiResponse` carries transport metadata, `Result` carries only "loaded vs
|
|
23
|
+
* failed". Check `.ok` on a Result, `.success` on an ApiResponse — never mix.
|
|
24
|
+
*/
|
|
25
|
+
export type Result<T> = {
|
|
26
|
+
ok: true;
|
|
27
|
+
data: T;
|
|
28
|
+
} | {
|
|
29
|
+
ok: false;
|
|
30
|
+
error: string;
|
|
31
|
+
};
|
|
32
|
+
/** Wrap a successful value. */
|
|
33
|
+
export declare function ok<T>(data: T): Result<T>;
|
|
34
|
+
/** Wrap a failure with a short, stable error code (used for i18n/render). */
|
|
35
|
+
export declare function err(error: string): Result<never>;
|
|
36
|
+
/** Narrowing guard — true when the result carries data. */
|
|
37
|
+
export declare function isOk<T>(result: Result<T>): result is {
|
|
38
|
+
ok: true;
|
|
39
|
+
data: T;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Collapse a Result to its data, substituting `fallback` on failure.
|
|
43
|
+
*
|
|
44
|
+
* This is the fail-open bridge the legacy array/object-returning loaders use
|
|
45
|
+
* so existing callers keep their current "degrade to empty" behaviour until
|
|
46
|
+
* they adopt the Result variant and render an error/retry state.
|
|
47
|
+
*/
|
|
48
|
+
export declare function unwrapOr<T>(result: Result<T>, fallback: T): T;
|
|
@@ -89,21 +89,29 @@ interface ApiEvent {
|
|
|
89
89
|
purchasedTickets?: Record<string, any>[];
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
|
-
* Get CDN image URL
|
|
92
|
+
* Get CDN image URL.
|
|
93
93
|
*
|
|
94
|
-
*
|
|
94
|
+
* Delegates the host-join to SC's canonical `resolveImageUrl` (one path-join,
|
|
95
|
+
* one host constant). `{ cdn: true }` picks the Cloudflare-fronted CDN base
|
|
96
|
+
* (`moxy.sfo3.cdn`), the correct, edge-cached host for public buyer surfaces.
|
|
97
|
+
*
|
|
98
|
+
* This replaced VC's local `micdrop-images.sfo3` bucket, which 404s for real
|
|
99
|
+
* event/venue keys (CDN census 2026-07-05, ledger vc-getcdnimageurl-wrong-
|
|
100
|
+
* bucket-404). SC additionally passes `data:`/`blob:` URLs through untouched
|
|
101
|
+
* and normalizes a missing leading slash — a strict superset of the old body.
|
|
95
102
|
*/
|
|
96
103
|
export declare function getCDNImageUrl(path: string | undefined): string;
|
|
97
104
|
/**
|
|
98
105
|
* Extract image URL from event with fallbacks.
|
|
99
106
|
*
|
|
100
|
-
* NOTE: shadows SC's hoisted `getEventImageUrl
|
|
101
|
-
*
|
|
102
|
-
* differs -- this transformer reads
|
|
103
|
-
* (incl. the camelCase `imageURL`,
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
+
* NOTE: shadows SC's hoisted `getEventImageUrl`. The HOST-JOIN is now the SC
|
|
108
|
+
* canonical (via `getCDNImageUrl` above); only the FIELD PRECEDENCE stays local
|
|
109
|
+
* and deliberately differs -- this transformer reads
|
|
110
|
+
* `imageUrl -> imageURL -> image_url -> image` (incl. the camelCase `imageURL`,
|
|
111
|
+
* asserted by event.test.ts), whereas SC reads
|
|
112
|
+
* `image -> coverImage -> imageUrl -> image_url`. The VC chain is what this
|
|
113
|
+
* wire boundary trusts; changing it would repoint which field wins for the same
|
|
114
|
+
* event, so it is preserved and parity-pinned by tests.
|
|
107
115
|
*/
|
|
108
116
|
export declare function getEventImageUrl(apiEvent: ApiEvent): string;
|
|
109
117
|
/**
|
|
@@ -114,7 +122,8 @@ export declare function getEventImageUrl(apiEvent: ApiEvent): string;
|
|
|
114
122
|
* Distinct from SC's `calculateCtaState` (richer wire-level canonical) — renamed to
|
|
115
123
|
* avoid shadowing the SC export; this variant reads the parsed/raw event shape parseEvent consumes.
|
|
116
124
|
*/
|
|
117
|
-
|
|
125
|
+
type CtaState = 'available' | 'sold_out' | 'coming_soon' | 'ended';
|
|
126
|
+
export declare function deriveEventCtaState(apiEvent: ApiEvent): CtaState;
|
|
118
127
|
/**
|
|
119
128
|
* Parse a raw ticket payload into the normalized AvailableTicket domain shape.
|
|
120
129
|
*
|
package/dist/api/api.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const $=require("@getmicdrop/svelte-components/utils/logger"),y=require("@getmicdrop/svelte-components"),R=require("@getmicdrop/svelte-components/utils/formatters"),X=require("@getmicdrop/svelte-components/transforms");require("@getmicdrop/svelte-components/utils/timezones");const F=$.createLogger("VC"),ee={baseUrl:"https://get-micdrop.com",timeout:3e4,retries:2,retryDelay:500,onError:r=>F.error("API Error:",r)};let v={...ee};function re(r){v={...v,...r}}function te(){return{...v}}function u(){return`${v.baseUrl}/api/v2/public`}function ne(){return`${v.baseUrl}/api/public`}function E(){return`${v.baseUrl}/api/orders/v2/public`}async function ae(){return""}const se=r=>new Promise(e=>setTimeout(e,r));async function z(r,e,t){const n=(e.method||"GET").toUpperCase(),o=n==="GET"||n==="HEAD"?t.retries+1:1;let s;for(let i=1;i<=o;i++){const c=new AbortController,k=setTimeout(()=>c.abort(),t.timeout),p=e.signal;let _;p&&(p.aborted?c.abort():(_=()=>c.abort(),p.addEventListener("abort",_,{once:!0})));try{const h=await fetch(r,{...e,signal:c.signal});if(h.status>=500&&i<o)s=new Error(`HTTP ${h.status}`);else return h}catch(h){if(s=h,p?.aborted)throw h}finally{clearTimeout(k),p&&_&&p.removeEventListener("abort",_)}i<o&&await se(t.retryDelay*Math.pow(2,i-1))}throw s}async function b(r,e){return U("GET",r,void 0,e)}async function m(r,e,t){return U("POST",r,e,t)}async function oe(r,e,t){return U("PUT",r,e,t)}async function M(r,e){return U("DELETE",r,void 0,e)}async function U(r,e,t,n){const a=e.startsWith("http")?e:`${u()}${e}`;try{const o=await z(a,{method:r,headers:{"Content-Type":"application/json",...n?.headers},body:t!==void 0?JSON.stringify(t):void 0,credentials:"include",...n},v);if(!o.ok){const i=await o.json().catch(()=>({})),c=i.error||i.message||`HTTP ${o.status}`;return v.onError(new Error(c)),{success:!1,error:c,statusCode:o.status}}return{success:!0,data:await o.json(),statusCode:o.status}}catch(o){const s=o instanceof Error?o.name==="AbortError"?"Request timed out":o.message:"Unknown error";return v.onError(o instanceof Error?o:new Error(s)),{success:!1,error:s}}}async function g(r,e){try{const t=await z(r,{credentials:"include",...e},v);if(!t.ok){const n=await t.json().catch(()=>({}));return F.error(`API request failed: ${t.status}`,n),null}return t.json()}catch(t){return F.error("API request error:",t),null}}function ie(r){const e=r??{};return{ticketID:Number(e.TicketID??e.ticketID??0),quantity:Number(e.Quantity??e.quantity??0),priceAtReservation:Number(e.PriceAtReservation??e.priceAtReservation??0),status:String(e.Status??e.status??"")}}function ce(r){const e=r??{},t=e.UUID??e.uuid??"",n=Number(e.EventID??e.eventID??0),a=e.Status??e.status??"",o=e.ExpiresAt??e.expiresAt??"",i=(e.Reservations??e.reservations??[]).map(ie);return{uuid:t,eventID:n,status:a,expiresAt:o,reservations:i}}const f=$.createLogger("VC");async function ue(r,e,t){try{const n=await m(`${E()}/cart/${r}/payment-intent`,{productQuantities:e,...t&&Object.keys(t).length>0?{donationAmounts:t}:{}});if(!n.success)throw f.error("Payment intent creation failed:",n.error),new y.AppError(n.error||"Failed to create payment intent","lib/api/orders/createPaymentIntent");return f.debug("Payment intent created:",n.data),n.data}catch(n){return f.error("createPaymentIntent error:",n),null}}async function le(r,e){if(!r)return null;try{const t=await b(`${E()}/cart/${r}`);if(!t.success)return null;const{uuid:n,eventID:a,status:o,expiresAt:s,reservations:i}=ce(t.data);return o!=="reserved"&&o!=="active"||e!==void 0&&a!==Number(e)?null:{uuid:n,eventID:a,status:o,expiresAt:s,reservations:i}}catch(t){return f.error("getCartByUUID error:",t),null}}async function de(r,e,t){try{const n={};for(const[s,i]of Object.entries(e)){const c=typeof s=="number"?s:parseInt(s,10);!Number.isNaN(c)&&i>0&&(n[c]=i)}const a={};if(t)for(const[s,i]of Object.entries(t)){const c=typeof s=="number"?s:parseInt(s,10);!Number.isNaN(c)&&i>0&&(a[c]=i)}const o=await fetch(`${E()}/cart/${r}`,{method:"PUT",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({quantities:n,...Object.keys(a).length>0?{donationAmounts:a}:{}})});if(!o.ok){const s=await o.json().catch(()=>({}));return f.error("Cart update failed:",s),!1}return!0}catch(n){return f.error("updateCartQuantities error:",n),!1}}async function fe(r){try{const e=await m(`${u()}/orders/complete/${r}`);return e.success?{success:!0,message:e.data?.message}:{success:!1,error:e.error||"Failed to complete reservation"}}catch(e){return f.error("Error completing reservation:",e),{success:!1,error:"Network error completing reservation"}}}async function me(r){try{const e=await m(`${u()}/orders/cancel/${r}`);return e.success?{success:!0,message:e.data?.message}:{success:!1,error:e.error||"Failed to cancel reservation"}}catch(e){return f.error("Error cancelling reservation:",e),{success:!1,error:"Network error cancelling reservation"}}}async function pe(r,e){try{const t=await m(`${u()}/orders/create`,{eventID:r,promoCode:e});return t.success?t.data:(f.error("Create order failed:",t.error),null)}catch(t){return f.error("createOrder error:",t),null}}async function ge(r){return g(`${u()}/orders/${r}`)}async function ve(r,e){try{const t=await m(`${E()}/validatePaymentIntent/${r}`,e);if(!t.success)return f.error("Payment validation failed:",t.error),{success:!1,status:"failed",error:t.error||"Payment validation failed"};const n=t.data;return n.eventCanceled||n.eventPostponed?{success:!1,status:"failed",eventCanceled:n.eventCanceled,eventPostponed:n.eventPostponed}:{success:!0,status:n.status||"Payment succeeded",orderUUID:n.orderUUID||n.uuid}}catch(t){return f.error("validatePaymentIntent error:",t),null}}async function ye(r){try{const e=await m(`${u()}/orders/extend-session`,{orderUuid:r});if(!e.success)return{success:!1,error:e.error||"Failed to extend session",statusCode:e.statusCode};const t=e.data;return{success:!0,newExpiryTime:t.newExpiryTime,remainingExtensions:t.remainingExtensions}}catch(e){return f.error("Error extending checkout session:",e),{success:!1,error:"Network error extending session"}}}async function he(r){try{const e=await b(`${u()}/orders/session/${r}`);if(!e.success)return{error:e.error||"No active session found",notFound:e.statusCode===404};const t=e.data;return{expiresAt:t.expiresAt,extensionCount:t.extensionCount,remainingExtensions:t.remainingExtensions,canExtend:t.canExtend,reservationCount:t.reservationCount,eventStatus:t.eventStatus}}catch(e){return f.error("Error getting session status:",e),{error:"Network error getting session status"}}}async function we(r={}){try{const e=await m(`${u()}/orders/create`,r);return e.success?e.data?.uuid??null:(f.error("Order initiation failed:",e.error),null)}catch(e){return f.error("initiateOrder error:",e),null}}async function Ce(r){if(typeof window>"u")return;const t=new URLSearchParams(window.location.search).get("utm_source")||"Direct";try{await fetch(`${u()}/utm/${r}/${encodeURIComponent(t)}`)}catch(n){f.error("UTM tracking failed:",n)}}const O=$.createLogger("VC"),ke=()=>E();async function _e(r,e){try{if(!e||!e.trim())return{valid:!1,error:"Promo code is required"};const t=encodeURIComponent(e.trim()),n=await b(`/promo-codes/validate/${r}/${t}`);if(!n.success)return n.statusCode===404?{valid:!1,error:"Invalid promo code"}:{valid:!1,error:"Failed to validate code"};const a=n.data;return{valid:a.valid??!0,revealHiddenTickets:a.revealHiddenTickets,revealTicketIds:a.revealTicketIds,provideDiscount:a.provideDiscount,discountType:a.discountType,amount:a.amount,code:a.code||e}}catch(t){return O.error("Error validating promo code:",t),{valid:!1,error:"Network error validating code"}}}async function Pe(r){try{const e=await b(`/promo-codes/check/${r}`);return e.success?e.data.hasPromoCodes===!0:!0}catch(e){return O.error("Error checking promo codes availability:",e),!0}}async function be(r,e){try{const t=await m(`${ke()}/cart/${r}/apply-promo`,{promoCode:e});return t.success?{success:!0}:{success:!1,error:t.error||"Failed to apply promo code"}}catch(t){return O.error("Error applying promo code:",t),{success:!1,error:"Network error applying code"}}}async function $e(r){try{const e=await m(`/orders/${r}/remove-promo`);return e.success?{success:!0}:{success:!1,error:e.error||"Failed to remove promo code"}}catch(e){return O.error("Error removing promo code:",e),{success:!1,error:"Network error removing code"}}}function Ee(r){const e=r??{};return{performers:Array.isArray(e.performers)?e.performers:[],showPerformers:e.showPerformers===!0}}const l=$.createLogger("VC"),x=new Map;async function Te(r,e=fetch,t){const n=t?`${r}:pw`:String(r);if(e===fetch){const o=x.get(n);if(o)return o}const a=(async()=>{try{const o=t?`${u()}/events/${r}?password=${encodeURIComponent(t)}`:`${u()}/events/${r}`,s=await e(o);if(!s.ok)throw new y.AppError(`Failed to fetch event details: ${s.status}`,"lib/api/events/fetchEventDetails");return await s.json()}catch(o){return l.error("Error fetching event details:",o),null}})();return e===fetch&&(x.set(n,a),a.finally(()=>{x.get(n)===a&&x.delete(n)})),a}async function Ie(r){try{const e=await g(`${u()}/tickets/event/${r}`);return Array.isArray(e)?e:[]}catch(e){return l.error("Error fetching tickets:",e),[]}}async function Ae(r){try{if(!r)return l.warn("fetchEventPerformers called without eventId"),{performers:[],showPerformers:!1};const e=await g(`${u()}/events/${r}/performers`);return e?Ee(e):(l.error("Failed to fetch performers: network or server error"),{performers:[],showPerformers:!1})}catch(e){return l.error("Error fetching event performers:",e),{performers:[],showPerformers:!1}}}async function Se(r){try{if(!r)return l.warn("fetchAllVenues called without orgId"),[];const e=await g(`${u()}/venues/organization/${r}`);return e?Array.isArray(e)?e:[]:(l.error("Failed to fetch venues: network or server error"),[])}catch(e){return l.error("Error fetching venues:",e),[]}}async function De(r){try{if(!r)return l.warn("fetchVenueEvents called without venueId"),[];const e=await g(`${u()}/events/venue/${r}`);return e?Array.isArray(e)?e:[]:(l.error("Failed to fetch venue events: network or server error"),[])}catch(e){return l.error("Error fetching venue events:",e),[]}}async function Re(r,e,t){try{const n=await g(`${u()}/events/venue/${r}/month/${e}/${t}`);return n?Array.isArray(n)?n:Array.isArray(n.events)?n.events:[]:(l.error("Failed to fetch month events: network or server error"),[])}catch(n){return l.error("Error fetching month events:",n),[]}}async function xe(r,e,t){try{const n=await g(`${u()}/events/organization/${r}/month/${e}/${t}`);return n?Array.isArray(n)?n:Array.isArray(n.events)?n.events:[]:(l.error("Failed to fetch org month events: network or server error"),[])}catch(n){return l.error("Error fetching org month events:",n),[]}}async function Ne(r){try{const e=await g(`${u()}/series/${r}/occurrences`);return e||(l.error("Failed to fetch series occurrences: network or server error"),null)}catch(e){return l.error("Error fetching series occurrences:",e),null}}async function Ue(r,e){try{const t=await g(`${u()}/series/${r}/occurrences?venueId=${e}`);return t||(l.error("Failed to fetch series with CTA: network or server error"),null)}catch(t){return l.error("Error fetching series occurrences:",t),null}}async function Oe(r,e){try{const t=e?`?slug=${encodeURIComponent(e)}`:"",n=await g(`${u()}/resolve/${encodeURIComponent(String(r))}${t}`);if(!n||!n.type)throw new y.AppError("Failed to resolve entity","lib/api/events/resolvePublicEntity");return n}catch(t){return l.error("Error resolving public entity:",t),null}}async function Fe(r){try{const e=await g(`${u()}/series/${r}/page`);if(!e)throw new y.AppError("Failed to fetch series page","lib/api/events/fetchSeriesPage");return e}catch(e){return l.error("Error fetching series page:",e),null}}async function qe(r,e){try{const t=e?`${u()}/collections/${r}?password=${encodeURIComponent(e)}`:`${u()}/collections/${r}`,n=await g(t);if(!n)throw new y.AppError("Failed to fetch collection","lib/api/events/fetchPublicCollection");return n}catch(t){return l.error("Error fetching collection:",t),null}}async function Le(r,e){try{const t=encodeURIComponent(e);return(await g(`${u()}/collections/${r}/check-password/${t}`))?.valid===!0}catch(t){return l.error("Error checking collection password:",t),!1}}async function Ve(r,e){try{const t=await m(`${u()}/events/${r}/check-password`,{password:e});if(!t.success)return{valid:!1};const n=t.data;return typeof n=="boolean"?{valid:n}:{valid:n.valid===!0}}catch(t){return l.error("Error checking event password:",t),{valid:!1}}}async function Ge(r,e){try{const t=e?`${u()}/events/venue/${e}`:r?`${u()}/venues/organization/${r}`:`${u()}/health`;return(await fetch(t,{method:"HEAD"})).ok}catch(t){return l.error("Network connection test failed:",t),!1}}const I=$.createLogger("VC");async function W(r){try{if(!r)return I.warn("getVenue called without venueId"),null;const e=await b(`/venues/${r}`);return e.success?e.data??null:(I.error(`Failed to fetch venue: ${e.statusCode}`),null)}catch(e){return I.error("Error fetching venue:",e),null}}async function Be(r){const e=await W(r);return e?{serviceFeePercentage:e.serviceFeePercentage??0,serviceFeeCents:e.serviceFeeCents??0,taxPercentage:e.taxPercentage??0}:null}async function je(r){try{if(!r)return I.warn("getVenueBySlug called without slug"),null;const e=encodeURIComponent(r),t=await b(`/venues/slug/${e}`);return t.success?t.data??null:(I.error(`Failed to fetch venue by slug: ${t.statusCode}`),null)}catch(e){return I.error("Error fetching venue by slug:",e),null}}function ze(r){const e=r??{},t=(e.appliedAmount??0)/100,n=e.remainingTotal??0,a=e.fullyCoveredByCard??n<=0,o=!a;return{valid:!0,giftCardCode:e.giftCardCode,giftCardAmount:t,giftCardBalance:e.giftCardBalance,paymentType:a?"gift_card_only":"split",stripeAmount:n,orderTotal:t+n,requiresStripe:o}}const C=$.createLogger("VC"),Me="https://get-micdrop.com",We=`${Me}/api/orders/v2`,G=()=>E();async function He(r){try{const e=await m(`${We}/gift-cards`,r);if(!e.success)throw C.error("Gift card purchase creation failed:",e.error),new y.AppError(e.error||"Failed to create gift card purchase","lib/api/gift-cards/createGiftCardPurchase");return C.debug("Gift card purchase created:",e.data),e.data}catch(e){return C.error("Gift card purchase creation error:",e),null}}async function Qe(r,e){try{const t=await m(`${G()}/cart/${r}/apply-gift-card`,{giftCardCode:e});return t.success?ze(t.data):t.statusCode===429?{valid:!1,error:"Too many attempts. Please wait a moment and try again."}:(C.error("Apply gift card failed:",t.error),{valid:!1,error:t.error||"Invalid gift card code"})}catch(t){return C.error("applyGiftCard error:",t),{valid:!1,error:"Network error. Please check your connection and try again."}}}async function Je(r,e){try{const t=await M(`${G()}/cart/${r}/gift-card`,e?{body:JSON.stringify({giftCardCode:e})}:void 0);return t.success?{success:!0}:(C.error("Remove gift card failed:",t.error),{success:!1,error:t.error||"Failed to remove gift card"})}catch(t){return C.error("removeGiftCard error:",t),{success:!1,error:"Network error. Please check your connection and try again."}}}async function Ze(r,e){try{const t=await m(`${G()}/cart/${r}/complete-gift-card-payment`,{firstName:e.firstName,lastName:e.lastName,email:e.email,phoneNumber:e.phoneNumber||null,mailingList:e.mailingList||!1});return t.success?{success:!0,orderId:t.data?.orderId,confirmationNumber:t.data?.confirmationNumber}:(C.error("Complete gift card payment failed:",t.error),{success:!1,error:t.error||"Failed to complete payment"})}catch(t){return C.error("completeGiftCardPayment error:",t),{success:!1,error:"Network error. Please check your connection and try again."}}}const q=$.createLogger("VC"),Ye={waitlist_not_enabled:"Waitlist is not available for this event",event_not_found:"Event not found",invalid_phone:"Please enter a valid phone number",already_purchased:"You have already purchased tickets for this event",phone_already_registered:"This phone number is already on the waitlist"};async function Ke(r,e,t=null,n=!1){try{const a={email:e};t&&n&&(a.phone=t,a.smsOptIn=!0);const o=await m(`/events/${r}/waitlist`,a);return o.success?{success:!0,updated:o.data?.updated}:(q.error("Join waitlist failed:",o.error),{success:!1,error:Ye[o.error??""]||"Failed to join waitlist. Please try again."})}catch(a){return q.error("joinWaitlist error:",a),{success:!1,error:"Network error. Please check your connection and try again."}}}async function Xe(r){const e={waitlistEnabled:!1,soldOut:!1,gated:!1};try{const t=await b(`/events/${r}/waitlist/status`);return t.success?{waitlistEnabled:!!t.data?.waitlistEnabled,soldOut:!!t.data?.soldOut,gated:!!t.data?.gated}:e}catch(t){return q.error("getWaitlistStatus error:",t),e}}function er(r,e,t={}){const{cancelled:n=!1,isRegistration:a=!1,waitlistEnabled:o=!1}=t,s=new Date;if(n)return{text:"Cancelled",disabled:!0,reason:"cancelled"};const i=r.endDateTime||r.startDateTime;if(i&&new Date(i)<s)return{text:"Sales ended",disabled:!0,reason:"event_past"};const c=r?.hasPurchasableHiddenTickets===!0||Array.isArray(e)&&e.some(X.isHiddenTicketPurchasable),k=(e||[]).filter(d=>d.salesChannel!==2&&!d.isHidden&&!(typeof d.visibility=="number"&&d.visibility>=2));if(k.length===0)return c?{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"}:{text:"No tickets available",disabled:!0,reason:"no_tickets"};let p=!1,_=!0,h=!0,w=null;for(const d of k){const T=d.salesBegin||d.salesStart||d.saleBegin||d.onSaleStart,D=d.salesEnd||d.saleEnd||d.onSaleEnd,P=d.remainingCapacity??d.quantityRemaining??d.quantity,A=d.soldOut||P!=null&&P<=0,S=T?new Date(T)>s:!1,B=D?new Date(D)<s:!1;if(!A&&!S&&!B&&(p=!0),A||(_=!1),S||(h=!1),S&&T&&!A&&!B){const j=new Date(T);(!w||j<w)&&(w=j)}}if(p)return{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"available"};if(h&&w){if(c)return{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"};const d=w.getTime()-s.getTime(),T=d/(1e3*60*60),D=d/(1e3*60*60*24);let P;if(T<24)P=R.formatTime(w,{hour12:!0},"en-US");else if(D<=7)P=R.formatDateRaw(w,{weekday:"short",hour:"numeric",minute:"2-digit",hour12:!0},"en-US");else{const A=R.formatDateRaw(w,{month:"short",day:"numeric"},"en-US"),S=R.formatTime(w,{hour12:!0},"en-US");P=`${A} ${S}`}return{text:`On sale ${P}`,disabled:!0,reason:"coming_soon"}}return _?c?{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"}:o?{text:"Join Waitlist",disabled:!1,reason:"sold_out_waitlist"}:{text:"Sold out",disabled:!0,reason:"sold_out"}:c?{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"}:{text:"Sales ended",disabled:!0,reason:"sales_ended"}}function H(r){const e=r;return{uuid:e.uuid||String(e.id||e.ID||""),id:e.id||e.ID,ticketNumber:e.ticketNumber||e.ticket_number,orderId:e.orderId||e.order_id,attendeeFirstName:e.attendeeFirstName||e.attendee_first_name||e.firstName,attendeeLastName:e.attendeeLastName||e.attendee_last_name||e.lastName,attendeeEmail:e.attendeeEmail||e.attendee_email||e.email,ticketName:e.ticketName||e.ticket_name||e.name||"",ticketTypeId:e.ticketTypeId||e.ticket_type_id,purchasePrice:e.purchasePrice||e.purchase_price||e.price||0,status:e.status,checkedIn:e.checkedIn||e.checked_in,checkedInAt:e.checkedInAt||e.checked_in_at}}function Q(r){const e=r,t=e.purchasedTickets||e.tickets||e.purchased_tickets||[];return{uuid:e.uuid||String(e.id||e.ID||""),id:e.id||e.ID,customerEmail:e.customerEmail||e.email||e.customer_email||"",customerFirstName:e.customerFirstName||e.firstName||e.first_name,customerLastName:e.customerLastName||e.lastName||e.last_name,status:e.status||"unknown",totalAmount:e.totalAmount||e.total||e.total_amount||0,subtotal:e.subtotal,serviceFeesAmount:e.serviceFeesAmount||e.serviceFee||e.service_fee||e.service_fees_amount||0,taxAmount:e.taxAmount||e.tax||e.tax_amount||0,discount:e.discount||0,paymentIntentId:e.paymentIntentId||e.payment_intent_id,paymentMethod:e.paymentMethod||e.payment_method,purchasedTickets:t.map(H),createdAt:e.createdAt||e.created_at,updatedAt:e.updatedAt||e.updated_at}}const rr=H,tr=Q;function nr(r){const e=Q(r),t=e.uuid.split("-")[0]||e.uuid;return{orderId:e.uuid,displayOrderId:t,email:e.customerEmail,customerName:[e.customerFirstName,e.customerLastName].filter(Boolean).join(" "),total:e.totalAmount,formattedTotal:`${y.formatCurrency(e.totalAmount/100)}`,ticketCount:e.purchasedTickets.length,status:e.status}}const ar="https://micdrop-images.sfo3.digitaloceanspaces.com";function J(r){return r?r.startsWith("http")?r:`${ar}/${r.replace(/^\//,"")}`:""}function L(r){const e=r.imageUrl||r.imageURL||r.image_url||r.image||"";return J(e)}function Z(r){const e=r.ctaState||r.cta_state;if(e)return e;if(r.isCancelled||r.is_cancelled)return"ended";const t=r.startDateTime||r.start_date_time||r.date;if(t){const s=new Date(t).getTime(),i=Date.now();if(s<i)return"ended"}const n=r.ticketsAvailable??r.tickets_available;if(n!==void 0)return n<=0?"sold_out":"available";const a=r.availableTickets||r.available_tickets||r.tickets||[];return a.length===0?"coming_soon":a.reduce((s,i)=>{const c=i.quantityAvailable??i.quantity_available??i.quantity??0,k=i.quantitySold??i.quantity_sold??0;return s+Math.max(0,c-k)},0)<=0?"sold_out":"available"}function Y(r){const e=r;return{id:e.id||e.ID,name:e.name||e.ticketName||"",description:e.description,price:e.price||0,quantity:e.quantity||e.totalQuantity||0,quantitySold:e.quantitySold||e.quantity_sold||0,quantityAvailable:e.quantityAvailable||e.quantity_available||(e.quantity||0)-(e.quantitySold||0),minPerOrder:e.minPerOrder||e.min_per_order||1,maxPerOrder:e.maxPerOrder||e.max_per_order||10,saleStartDate:e.saleStartDate||e.sale_start_date,saleEndDate:e.saleEndDate||e.sale_end_date,isHidden:e.isHidden||e.is_hidden||!1,revealWithPromoCode:e.revealWithPromoCode||e.reveal_with_promo_code,ticketType:e.ticketType||e.ticket_type||0,sectionId:e.sectionId||e.section_id,sortOrder:e.sortOrder||e.sort_order||0}}function K(r){const e=r,n=(e.availableTickets||e.available_tickets||e.tickets||[]).map(Y),a=n.map(i=>i.price).filter(i=>i>0),o=a.length>0?Math.min(...a):void 0,s=a.length>0?Math.max(...a):void 0;return{eventID:e.eventID||e.id||e.ID||0,id:e.id||e.ID,name:e.name||e.title||"",title:e.title||e.name,slug:e.slug,description:e.description,date:e.date||e.startDateTime||e.start_date_time||"",startDateTime:e.startDateTime||e.start_date_time,endDateTime:e.endDateTime||e.end_date_time,doorsOpenTime:e.doorsOpenTime||e.doors_open_time,timezone:e.timezone||e.time_zone,venueId:e.venueId||e.venue_id,venueName:e.venueName||e.venue_name,venueAddress:e.venueAddress||e.venue_address,location:e.location||e.venueAddress||e.venue_address,imageUrl:L(e),imageURL:L(e),status:e.status,isPublished:e.isPublished??e.is_published,isCancelled:e.isCancelled??e.is_cancelled,availableTickets:n,ticketsAvailable:e.ticketsAvailable??e.tickets_available??n.reduce((i,c)=>i+(c.quantityAvailable||0),0),ticketsSold:e.ticketsSold??e.tickets_sold,minPrice:e.minPrice??e.min_price??o,maxPrice:e.maxPrice??e.max_price??s,ctaText:e.ctaText||e.cta_text,ctaState:Z(e),showPerformers:e.showPerformers??e.show_performers,eventSeriesId:e.eventSeriesId||e.event_series_id,seriesInstanceNumber:e.seriesInstanceNumber||e.series_instance_number,timeZone:e.timeZone,eventSummary:e.eventSummary,password:e.password,hasPassword:e.hasPassword,disclaimer:e.disclaimer,ticketType:e.ticketType,eventTicketingType:e.eventTicketingType,ageRestriction:e.ageRestriction,displayAgeRestriction:e.displayAgeRestriction,displayStartTime:e.displayStartTime,displayEndTime:e.displayEndTime,displayDoorsTime:e.displayDoorsTime,collectionId:e.collectionId||e.collection_id,ticketsRemaining:e.ticketsRemaining,ticketsTotal:e.ticketsTotal,hasHiddenTickets:e.hasHiddenTickets,stage:e.stage,stageName:e.stageName,stageId:e.stageId,eventCategoryTypes:e.eventCategoryTypes,publicPerformers:e.publicPerformers,collectionIds:e.collectionIds,venue:e.venue,performers:e.performers,faqs:e.faqs,showtimes:e.showtimes,purchasedTickets:e.purchasedTickets}}const sr=Y,or=K,ir=K,cr="https://micdrop-images.sfo3.digitaloceanspaces.com";function ur(r){return r?r.startsWith("http")?r:`${cr}/${r.replace(/^\//,"")}`:""}function lr(r){const e=r,t=e.logoUrl||e.logo_url||e.logo;return{id:e.id||e.ID||0,name:e.name||"",slug:e.slug,address:e.address,googleLocationNameCache:e.googleLocationNameCache||e.google_location_name_cache,city:e.city,state:e.state,zipCode:e.zipCode||e.zip_code,country:e.country,timezone:e.timezone||e.time_zone,logoUrl:ur(t),serviceFeePercentage:e.serviceFeePercentage??e.service_fee_percentage??0,serviceFeeCents:e.serviceFeeCents??e.service_fee_cents??0,taxPercentage:e.taxPercentage??e.tax_percentage??0,organizationId:e.organizationId||e.organization_id}}const dr=lr;function fr(r){const e=r;return{serviceFeePercentage:e.serviceFeePercentage??e.service_fee_percentage??0,serviceFeeCents:e.serviceFeeCents??e.service_fee_cents??0,taxPercentage:e.taxPercentage??e.tax_percentage??0}}function mr(r){return[r.address,r.city,r.state,r.zipCode].filter(Boolean).join(", ")}function N(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)n!=="__proto__"&&(r[n]=t[n])}return r}var pr={read:function(r){return r[0]==='"'&&(r=r.slice(1,-1)),r.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(r){return encodeURIComponent(r).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function V(r,e){function t(a,o,s){if(!(typeof document>"u")){s=N({},e,s),typeof s.expires=="number"&&(s.expires=new Date(Date.now()+s.expires*864e5)),s.expires&&(s.expires=s.expires.toUTCString()),a=encodeURIComponent(a).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var i="";for(var c in s)s[c]&&(i+="; "+c,s[c]!==!0&&(i+="="+s[c].split(";")[0]));return document.cookie=a+"="+r.write(o,a)+i}}function n(a){if(!(typeof document>"u"||arguments.length&&!a)){for(var o=document.cookie?document.cookie.split("; "):[],s={},i=0;i<o.length;i++){var c=o[i].split("="),k=c.slice(1).join("=");try{var p=decodeURIComponent(c[0]);if(p in s||(s[p]=r.read(k,p)),a===p)break}catch{}}return a?s[a]:s}}return Object.create({set:t,get:n,remove:function(a,o){t(a,"",N({},o,{expires:-1}))},withAttributes:function(a){return V(this.converter,N({},this.attributes,a))},withConverter:function(a){return V(N({},this.converter,a),this.attributes)}},{attributes:{value:Object.freeze(e)},converter:{value:Object.freeze(r)}})}V(pr,{path:"/"});y.createLogger("checkoutState");y.createLogger("orderApi");y.createLogger("utm");exports.apiDelete=M;exports.apiGet=b;exports.apiPost=m;exports.apiPut=oe;exports.applyGiftCard=Qe;exports.applyPromoCode=be;exports.calculateCtaState=Z;exports.cancelReservation=me;exports.checkCollectionPassword=Le;exports.checkEventPassword=Ve;exports.completeGiftCardPayment=Ze;exports.completeReservation=fe;exports.computeCtaState=er;exports.configureApi=re;exports.createGiftCardPurchase=He;exports.createOrder=pe;exports.createPaymentIntent=ue;exports.extendCheckoutSession=ye;exports.extractVenueFees=fr;exports.fetchAllVenues=Se;exports.fetchEventDetails=Te;exports.fetchEventPerformers=Ae;exports.fetchEventTickets=Ie;exports.fetchPublicCollection=qe;exports.fetchSeriesOccurrences=Ue;exports.fetchSeriesPage=Fe;exports.fetchVenueEvents=De;exports.formatVenueAddress=mr;exports.getApiConfig=te;exports.getCDNImageUrl=J;exports.getCartByUUID=le;exports.getClientIP=ae;exports.getEventImageUrl=L;exports.getLegacyPublicUrl=ne;exports.getMonthEvents=Re;exports.getOrder=ge;exports.getOrdersV2Url=E;exports.getOrgMonthEvents=xe;exports.getPublicBaseUrl=u;exports.getSeriesOccurrences=Ne;exports.getSessionStatus=he;exports.getVenue=W;exports.getVenueBySlug=je;exports.getVenueFees=Be;exports.getWaitlistStatus=Xe;exports.hasPromoCodes=Pe;exports.initiateOrder=we;exports.joinWaitlist=Ke;exports.removeGiftCard=Je;exports.removePromoCode=$e;exports.resolvePublicEntity=Oe;exports.testNetworkConnection=Ge;exports.trackUTMSource=Ce;exports.transformAvailableTicket=sr;exports.transformEvent=or;exports.transformEventData=ir;exports.transformOrder=tr;exports.transformOrderForDisplay=nr;exports.transformTicket=rr;exports.transformVenue=dr;exports.updateCartQuantities=de;exports.validatePaymentIntent=ve;exports.validatePromoCode=_e;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("@getmicdrop/svelte-components/utils/logger"),f=require("@getmicdrop/svelte-components"),x=require("@getmicdrop/svelte-components/utils/formatters"),he=require("@getmicdrop/svelte-components/transforms"),q=P.createLogger("VC"),_e={baseUrl:"https://get-micdrop.com",timeout:3e4,retries:2,retryDelay:500,onError:t=>q.error("API Error:",t)};let g={..._e};function we(t){g={...g,...t}}function ke(){return{...g}}function c(){return`${g.baseUrl}/api/v2/public`}function Ce(){return`${g.baseUrl}/api/public`}function $(){return`${g.baseUrl}/api/orders/v2/public`}async function be(){return""}const Pe=t=>new Promise(e=>setTimeout(e,t));async function J(t,e,r){const n=(e.method||"GET").toUpperCase(),s=n==="GET"||n==="HEAD"?r.retries+1:1;let o;for(let i=1;i<=s;i++){const u=new AbortController,T=setTimeout(()=>u.abort(),r.timeout),y=e.signal;let b;y&&(y.aborted?u.abort():(b=()=>u.abort(),y.addEventListener("abort",b,{once:!0})));try{const v=await fetch(t,{...e,signal:u.signal});if(v.status>=500&&i<s)o=new Error(`HTTP ${v.status}`);else return v}catch(v){if(o=v,y?.aborted)throw v}finally{clearTimeout(T),y&&b&&y.removeEventListener("abort",b)}i<s&&await Pe(r.retryDelay*Math.pow(2,i-1))}throw o}async function k(t,e){return V("GET",t,void 0,e)}async function m(t,e,r){return V("POST",t,e,r)}async function $e(t,e,r){return V("PUT",t,e,r)}async function Y(t,e){return V("DELETE",t,void 0,e)}async function V(t,e,r,n){const a=e.startsWith("http")?e:`${c()}${e}`;try{const s=await J(a,{method:t,headers:{"Content-Type":"application/json",...n?.headers},body:r!==void 0?JSON.stringify(r):void 0,credentials:"include",...n},g);if(!s.ok){const i=await s.json().catch(()=>({})),u=i.error||i.message||`HTTP ${s.status}`;return g.onError(new Error(u)),{success:!1,error:u,statusCode:s.status}}return{success:!0,data:await s.json(),statusCode:s.status}}catch(s){const o=s instanceof Error?s.name==="AbortError"?"Request timed out":s.message:"Unknown error";return g.onError(s instanceof Error?s:new Error(o)),{success:!1,error:o}}}async function A(t,e){try{const r=await J(t,{credentials:"include",...e},g);if(!r.ok){const n=await r.json().catch(()=>({}));return q.error(`API request failed: ${r.status}`,n),null}return r.json()}catch(r){return q.error("API request error:",r),null}}function Se(t){const e=t??{};return{ticketID:Number(e.TicketID??e.ticketID??0),quantity:Number(e.Quantity??e.quantity??0),priceAtReservation:Number(e.PriceAtReservation??e.priceAtReservation??0),status:String(e.Status??e.status??"")}}function Te(t){const e=t??{},r=e.UUID??e.uuid??"",n=Number(e.EventID??e.eventID??0),a=e.Status??e.status??"",s=e.ExpiresAt??e.expiresAt??"",i=(e.Reservations??e.reservations??[]).map(Se);return{uuid:r,eventID:n,status:a,expiresAt:s,reservations:i}}const K=["utmSource","utmMedium","utmCampaign","utmContent","utmTerm"],Ee={utmSource:"utm_source",utmMedium:"utm_medium",utmCampaign:"utm_campaign",utmContent:"utm_content",utmTerm:"utm_term"},Z="direct";function X(t){return t?t.trim().toLowerCase().replace(/\s+/g,"_"):""}function Ie(t){const e={};for(const r of K)e[r]=X(t[r]);return e.utmSource||(e.utmSource=Z),e}function Re(t){const e={};for(const r of K)e[r]=t.get(Ee[r]);return Ie(e)}function Ae(){if(typeof window>"u")return!0;try{return window.self===window.top}catch{return!1}}function De(){const t=typeof window<"u",e=Ae(),r=t?window.location.search:"",n=(typeof document<"u"?document.referrer:"")??"",a=t&&e?window.location.href:"";return{utm:Re(new URLSearchParams(r)),referrer:n||"",pageUrl:a||""}}let Ue=!1;function Ne(){return typeof window<"u"&&typeof window.__tcfapi=="function"}function Oe(){return Ne()}function xe(){return Oe()?Ue:!0}const W="micdrop_session_id",Q="micdrop_visitor_id",Fe=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function Ve(t){return typeof t=="string"&&Fe.test(t)}function ee(){const t=typeof crypto<"u"?crypto:void 0;if(t?.randomUUID)return t.randomUUID();const e=new Uint8Array(16);if(t?.getRandomValues)t.getRandomValues(e);else for(let n=0;n<16;n++)e[n]=Math.floor(Math.random()*256);e[6]=e[6]&15|64,e[8]=e[8]&63|128;const r=[];for(let n=0;n<16;n++)r.push(e[n].toString(16).padStart(2,"0"));return`${r[0]}${r[1]}${r[2]}${r[3]}-${r[4]}${r[5]}-${r[6]}${r[7]}-${r[8]}${r[9]}-${r[10]}${r[11]}${r[12]}${r[13]}${r[14]}${r[15]}`}function Le(){let t=f.getSessionStorage(W);return t||(t=ee(),f.setSessionStorage(W,t)),t}function qe(){if(!xe())return null;const t=f.getLocalStorage(Q);if(Ve(t))return t;const e=ee();return f.setLocalStorage(Q,e),e}const Me="micdrop_attribution";function Ge(){const t=f.getSessionStorage(Me);return!t||!t.utm||typeof t.utm.utmSource!="string"?null:t}function N(){const e=Ge()??De();return{sessionId:Le(),visitorId:qe(),utmSource:e.utm.utmSource,utmMedium:e.utm.utmMedium,utmCampaign:e.utm.utmCampaign,utmContent:e.utm.utmContent,utmTerm:e.utm.utmTerm,referrer:e.referrer||""}}f.createLogger("tracking");const d=P.createLogger("VC");async function je(t,e,r){try{const n=await m(`${$()}/cart/${t}/payment-intent`,{productQuantities:e,...r&&Object.keys(r).length>0?{donationAmounts:r}:{},attribution:N()});if(!n.success)throw d.error("Payment intent creation failed:",n.error),new f.AppError(n.error||"Failed to create payment intent","lib/api/orders/createPaymentIntent");return d.debug("Payment intent created:",n.data),n.data}catch(n){return d.error("createPaymentIntent error:",n),null}}async function Be(t,e){if(!t)return null;try{const r=await k(`${$()}/cart/${t}`);if(!r.success)return null;const{uuid:n,eventID:a,status:s,expiresAt:o,reservations:i}=Te(r.data);return s!=="reserved"&&s!=="active"||e!==void 0&&a!==Number(e)?null:{uuid:n,eventID:a,status:s,expiresAt:o,reservations:i}}catch(r){return d.error("getCartByUUID error:",r),null}}async function ze(t,e,r){try{const n={};for(const[o,i]of Object.entries(e)){const u=typeof o=="number"?o:parseInt(o,10);!Number.isNaN(u)&&i>0&&(n[u]=i)}const a={};if(r)for(const[o,i]of Object.entries(r)){const u=typeof o=="number"?o:parseInt(o,10);!Number.isNaN(u)&&i>0&&(a[u]=i)}const s=await fetch(`${$()}/cart/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({quantities:n,...Object.keys(a).length>0?{donationAmounts:a}:{}})});if(!s.ok){const o=await s.json().catch(()=>({}));return d.error("Cart update failed:",o),!1}return!0}catch(n){return d.error("updateCartQuantities error:",n),!1}}async function He(t){try{const e=await m(`${c()}/orders/complete/${t}`);return e.success?{success:!0,message:e.data?.message}:{success:!1,error:e.error||"Failed to complete reservation"}}catch(e){return d.error("Error completing reservation:",e),{success:!1,error:"Network error completing reservation"}}}async function We(t){try{const e=await m(`${c()}/orders/cancel/${t}`);return e.success?{success:!0,message:e.data?.message}:{success:!1,error:e.error||"Failed to cancel reservation"}}catch(e){return d.error("Error cancelling reservation:",e),{success:!1,error:"Network error cancelling reservation"}}}async function Qe(t,e){try{const r=await m(`${c()}/orders/create`,{eventID:t,promoCode:e,attribution:N()});return r.success?r.data:(d.error("Create order failed:",r.error),null)}catch(r){return d.error("createOrder error:",r),null}}async function Je(t){return A(`${c()}/orders/${t}`)}async function Ye(t,e){try{const r=await m(`${$()}/validatePaymentIntent/${t}`,{...e,attribution:N()});if(!r.success)return d.error("Payment validation failed:",r.error),{success:!1,status:"failed",error:r.error||"Payment validation failed"};const n=r.data;return n.eventCanceled||n.eventPostponed?{success:!1,status:"failed",eventCanceled:n.eventCanceled,eventPostponed:n.eventPostponed}:{success:!0,status:n.status||"Payment succeeded",orderUUID:n.orderUUID||n.uuid}}catch(r){return d.error("validatePaymentIntent error:",r),null}}async function Ke(t){try{const e=await m(`${c()}/orders/extend-session`,{orderUuid:t});if(!e.success)return{success:!1,error:e.error||"Failed to extend session",statusCode:e.statusCode};const r=e.data;return{success:!0,newExpiryTime:r.newExpiryTime,remainingExtensions:r.remainingExtensions}}catch(e){return d.error("Error extending checkout session:",e),{success:!1,error:"Network error extending session"}}}async function Ze(t){try{const e=await k(`${c()}/orders/session/${t}`);if(!e.success)return{error:e.error||"No active session found",notFound:e.statusCode===404};const r=e.data;return{expiresAt:r.expiresAt,extensionCount:r.extensionCount,remainingExtensions:r.remainingExtensions,canExtend:r.canExtend,reservationCount:r.reservationCount,eventStatus:r.eventStatus}}catch(e){return d.error("Error getting session status:",e),{error:"Network error getting session status"}}}async function Xe(t={eventID:""}){try{const e=await m(`${c()}/orders/create`,{...t,attribution:N()});return e.success?e.data?.uuid??null:(d.error("Order initiation failed:",e.error),null)}catch(e){return d.error("initiateOrder error:",e),null}}async function et(t){if(typeof window>"u")return;const e=new URLSearchParams(window.location.search),r=X(e.get("utm_source"))||Z;try{await fetch(`${c()}/utm/${t}/${encodeURIComponent(r)}`)}catch(n){d.error("UTM tracking failed:",n)}}const L=P.createLogger("VC"),tt=()=>$();async function rt(t,e){try{if(!e||!e.trim())return{valid:!1,error:"Promo code is required"};const r=encodeURIComponent(e.trim()),n=await k(`/promo-codes/validate/${t}/${r}`);if(!n.success)return n.statusCode===404?{valid:!1,error:"Invalid promo code"}:{valid:!1,error:"Failed to validate code"};const a=n.data;return{valid:a.valid??!0,revealHiddenTickets:a.revealHiddenTickets,revealTicketIds:a.revealTicketIds,provideDiscount:a.provideDiscount,discountType:a.discountType,amount:a.amount,code:a.code||e}}catch(r){return L.error("Error validating promo code:",r),{valid:!1,error:"Network error validating code"}}}async function nt(t){try{const e=await k(`/promo-codes/check/${t}`);return e.success?e.data.hasPromoCodes===!0:!0}catch(e){return L.error("Error checking promo codes availability:",e),!0}}async function at(t,e){try{const r=await m(`${tt()}/cart/${t}/apply-promo`,{promoCode:e});return r.success?{success:!0}:{success:!1,error:r.error||"Failed to apply promo code"}}catch(r){return L.error("Error applying promo code:",r),{success:!1,error:"Network error applying code"}}}async function st(t){try{const e=await m(`/orders/${t}/remove-promo`);return e.success?{success:!0}:{success:!1,error:e.error||"Failed to remove promo code"}}catch(e){return L.error("Error removing promo code:",e),{success:!1,error:"Network error removing code"}}}function ot(t){const e=t??{};return{performers:Array.isArray(e.performers)?e.performers:[],showPerformers:e.showPerformers===!0}}function te(t){return{ok:!0,data:t}}function R(t){return{ok:!1,error:t}}function it(t){return t.ok}function S(t,e){return t.ok?t.data:e}const p=P.createLogger("VC"),F=new Map;async function ct(t,e=fetch,r){const n=r?`${t}:pw`:String(t);if(e===fetch){const s=F.get(n);if(s)return s}const a=(async()=>{try{const s=r?`${c()}/events/${t}?password=${encodeURIComponent(r)}`:`${c()}/events/${t}`,o=await e(s);if(!o.ok)throw new f.AppError(`Failed to fetch event details: ${o.status}`,"lib/api/events/fetchEventDetails");return await o.json()}catch(s){return p.error("Error fetching event details:",s),null}})();return e===fetch&&(F.set(n,a),a.finally(()=>{F.get(n)===a&&F.delete(n)})),a}async function C(t,e,r=n=>n){try{const n=await A(t);return n?te(r(n)):(p.error(`Failed to load (${e}): network or server error`),R(e))}catch(n){return p.error(`Error loading (${e}):`,n),R(e)}}function j(t){return Array.isArray(t)?t:[]}async function re(t){return C(`${c()}/tickets/event/${t}`,"tickets_fetch_failed",j)}async function ut(t){return S(await re(t),[])}async function ne(t){return t?C(`${c()}/events/${t}/performers`,"performers_fetch_failed",e=>ot(e)):(p.warn("fetchEventPerformers called without eventId"),R("performers_missing_event_id"))}async function lt(t){return S(await ne(t),{performers:[],showPerformers:!1})}async function ae(t){return t?C(`${c()}/venues/organization/${t}`,"venues_fetch_failed",j):(p.warn("fetchAllVenues called without orgId"),R("venues_missing_org_id"))}async function dt(t){return S(await ae(t),[])}async function se(t){return t?C(`${c()}/events/venue/${t}`,"venue_events_fetch_failed",j):(p.warn("fetchVenueEvents called without venueId"),R("venue_events_missing_venue_id"))}async function ft(t){return S(await se(t),[])}function oe(t){return Array.isArray(t)?t:Array.isArray(t.events)?t.events:[]}async function ie(t,e,r){return C(`${c()}/events/venue/${t}/month/${e}/${r}`,"month_events_fetch_failed",n=>oe(n))}async function mt(t,e,r){return S(await ie(t,e,r),[])}async function ce(t,e,r){return C(`${c()}/events/organization/${t}/month/${e}/${r}`,"org_month_events_fetch_failed",n=>oe(n))}async function pt(t,e,r){return S(await ce(t,e,r),[])}async function ue(t){return C(`${c()}/series/${t}/occurrences`,"series_occurrences_fetch_failed")}async function gt(t){const e=await ue(t);return e.ok?e.data:null}async function le(t,e){return C(`${c()}/series/${t}/occurrences?venueId=${e}`,"series_cta_fetch_failed")}async function yt(t,e){const r=await le(t,e);return r.ok?r.data:null}async function vt(t,e){try{const r=e?`?slug=${encodeURIComponent(e)}`:"",n=await A(`${c()}/resolve/${encodeURIComponent(String(t))}${r}`);if(!n||!n.type)throw new f.AppError("Failed to resolve entity","lib/api/events/resolvePublicEntity");return n}catch(r){return p.error("Error resolving public entity:",r),null}}async function ht(t){try{const e=await A(`${c()}/series/${t}/page`);if(!e)throw new f.AppError("Failed to fetch series page","lib/api/events/fetchSeriesPage");return e}catch(e){return p.error("Error fetching series page:",e),null}}async function _t(t,e){try{const r=e?`${c()}/collections/${t}?password=${encodeURIComponent(e)}`:`${c()}/collections/${t}`,n=await A(r);if(!n)throw new f.AppError("Failed to fetch collection","lib/api/events/fetchPublicCollection");return n}catch(r){return p.error("Error fetching collection:",r),null}}async function wt(t,e){try{const r=encodeURIComponent(e);return(await A(`${c()}/collections/${t}/check-password/${r}`))?.valid===!0}catch(r){return p.error("Error checking collection password:",r),!1}}async function kt(t,e){try{const r=await m(`${c()}/events/${t}/check-password`,{password:e});if(!r.success)return{valid:!1};const n=r.data;return typeof n=="boolean"?{valid:n}:{valid:n.valid===!0}}catch(r){return p.error("Error checking event password:",r),{valid:!1}}}async function Ct(t,e){try{const r=e?`${c()}/events/venue/${e}`:t?`${c()}/venues/organization/${t}`:`${c()}/health`;return(await fetch(r,{method:"HEAD"})).ok}catch(r){return p.error("Network connection test failed:",r),!1}}const I=P.createLogger("VC");async function de(t){try{if(!t)return I.warn("getVenue called without venueId"),null;const e=await k(`/venues/${t}`);return e.success?e.data??null:(I.error(`Failed to fetch venue: ${e.statusCode}`),null)}catch(e){return I.error("Error fetching venue:",e),null}}async function bt(t){const e=await de(t);return e?{serviceFeePercentage:e.serviceFeePercentage??0,serviceFeeCents:e.serviceFeeCents??0,taxPercentage:e.taxPercentage??0}:null}async function Pt(t){try{if(!t)return I.warn("getVenueBySlug called without slug"),null;const e=encodeURIComponent(t),r=await k(`/venues/slug/${e}`);return r.success?r.data??null:(I.error(`Failed to fetch venue by slug: ${r.statusCode}`),null)}catch(e){return I.error("Error fetching venue by slug:",e),null}}function $t(t){const e=t??{},r=(e.appliedAmount??0)/100,n=e.remainingTotal??0,a=e.fullyCoveredByCard??n<=0,s=!a;return{valid:!0,giftCardCode:e.giftCardCode,giftCardAmount:r,giftCardBalance:e.giftCardBalance,paymentType:a?"gift_card_only":"split",stripeAmount:n,orderTotal:r+n,requiresStripe:s}}const _=P.createLogger("VC"),St="https://get-micdrop.com",Tt=`${St}/api/orders/v2`,B=()=>$();async function Et(t){try{const e=await m(`${Tt}/gift-cards`,t);if(!e.success)throw _.error("Gift card purchase creation failed:",e.error),new f.AppError(e.error||"Failed to create gift card purchase","lib/api/gift-cards/createGiftCardPurchase");return _.debug("Gift card purchase created:",e.data),e.data}catch(e){return _.error("Gift card purchase creation error:",e),null}}async function It(t,e){try{const r=await m(`${B()}/cart/${t}/apply-gift-card`,{giftCardCode:e});return r.success?$t(r.data):r.statusCode===429?{valid:!1,error:"Too many attempts. Please wait a moment and try again."}:(_.error("Apply gift card failed:",r.error),{valid:!1,error:r.error||"Invalid gift card code"})}catch(r){return _.error("applyGiftCard error:",r),{valid:!1,error:"Network error. Please check your connection and try again."}}}async function Rt(t,e){try{const r=await Y(`${B()}/cart/${t}/gift-card`,e?{body:JSON.stringify({giftCardCode:e})}:void 0);return r.success?{success:!0}:(_.error("Remove gift card failed:",r.error),{success:!1,error:r.error||"Failed to remove gift card"})}catch(r){return _.error("removeGiftCard error:",r),{success:!1,error:"Network error. Please check your connection and try again."}}}async function At(t,e){try{const r=await m(`${B()}/cart/${t}/complete-gift-card-payment`,{firstName:e.firstName,lastName:e.lastName,email:e.email,phoneNumber:e.phoneNumber||null,mailingList:e.mailingList||!1,attribution:N()});return r.success?{success:!0,orderId:r.data?.orderId,confirmationNumber:r.data?.confirmationNumber}:(_.error("Complete gift card payment failed:",r.error),{success:!1,error:r.error||"Failed to complete payment"})}catch(r){return _.error("completeGiftCardPayment error:",r),{success:!1,error:"Network error. Please check your connection and try again."}}}const M=P.createLogger("VC"),Dt={waitlist_not_enabled:"Waitlist is not available for this event",event_not_found:"Event not found",invalid_phone:"Please enter a valid phone number",already_purchased:"You have already purchased tickets for this event",phone_already_registered:"This phone number is already on the waitlist"};async function Ut(t,e,r=null,n=!1){try{const a={email:e};r&&n&&(a.phone=r,a.smsOptIn=!0);const s=await m(`/events/${t}/waitlist`,a);return s.success?{success:!0,updated:s.data?.updated}:(M.error("Join waitlist failed:",s.error),{success:!1,error:Dt[s.error??""]||"Failed to join waitlist. Please try again."})}catch(a){return M.error("joinWaitlist error:",a),{success:!1,error:"Network error. Please check your connection and try again."}}}async function Nt(t){const e={waitlistEnabled:!1,soldOut:!1,gated:!1};try{const r=await k(`/events/${t}/waitlist/status`);return r.success?{waitlistEnabled:!!r.data?.waitlistEnabled,soldOut:!!r.data?.soldOut,gated:!!r.data?.gated}:e}catch(r){return M.error("getWaitlistStatus error:",r),e}}function Ot(t,e,r={}){const{cancelled:n=!1,isRegistration:a=!1,waitlistEnabled:s=!1}=r,o=new Date;if(n)return{text:"Cancelled",disabled:!0,reason:"cancelled"};const i=t.endDateTime||t.startDateTime;if(i&&new Date(i)<o)return{text:"Sales ended",disabled:!0,reason:"event_past"};const u=t?.hasPurchasableHiddenTickets===!0||Array.isArray(e)&&e.some(he.isHiddenTicketPurchasable),T=(e||[]).filter(l=>l.salesChannel!==2&&!l.isHidden&&!(typeof l.visibility=="number"&&l.visibility>=2));if(T.length===0)return u?{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"}:{text:"No tickets available",disabled:!0,reason:"no_tickets"};let y=!1,b=!0,v=!0,h=null;for(const l of T){const E=l.salesBegin||l.salesStart||l.saleBegin||l.onSaleStart,O=l.salesEnd||l.saleEnd||l.onSaleEnd,w=l.remainingCapacity??l.quantityRemaining??l.quantity,D=l.soldOut||w!=null&&w<=0,U=E?new Date(E)>o:!1,z=O?new Date(O)<o:!1;if(!D&&!U&&!z&&(y=!0),D||(b=!1),U||(v=!1),U&&E&&!D&&!z){const H=new Date(E);(!h||H<h)&&(h=H)}}if(y)return{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"available"};if(v&&h){if(u)return{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"};const l=h.getTime()-o.getTime(),E=l/(1e3*60*60),O=l/(1e3*60*60*24);let w;if(E<24)w=x.formatTime(h,{hour12:!0},"en-US");else if(O<=7)w=x.formatDateRaw(h,{weekday:"short",hour:"numeric",minute:"2-digit",hour12:!0},"en-US");else{const D=x.formatDateRaw(h,{month:"short",day:"numeric"},"en-US"),U=x.formatTime(h,{hour12:!0},"en-US");w=`${D} ${U}`}return{text:`On sale ${w}`,disabled:!0,reason:"coming_soon"}}return b?u?{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"}:s?{text:"Join Waitlist",disabled:!1,reason:"sold_out_waitlist"}:{text:"Sold out",disabled:!0,reason:"sold_out"}:u?{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"}:{text:"Sales ended",disabled:!0,reason:"sales_ended"}}function fe(t){const e=t;return{uuid:e.uuid||String(e.id||e.ID||""),id:e.id||e.ID,ticketNumber:e.ticketNumber||e.ticket_number,orderId:e.orderId||e.order_id,attendeeFirstName:e.attendeeFirstName||e.attendee_first_name||e.firstName,attendeeLastName:e.attendeeLastName||e.attendee_last_name||e.lastName,attendeeEmail:e.attendeeEmail||e.attendee_email||e.email,ticketName:e.ticketName||e.ticket_name||e.name||"",ticketTypeId:e.ticketTypeId||e.ticket_type_id,purchasePrice:e.purchasePrice||e.purchase_price||e.price||0,status:e.status,checkedIn:e.checkedIn||e.checked_in,checkedInAt:e.checkedInAt||e.checked_in_at}}function me(t){const e=t,r=e.purchasedTickets||e.tickets||e.purchased_tickets||[];return{uuid:e.uuid||String(e.id||e.ID||""),id:e.id||e.ID,customerEmail:e.customerEmail||e.email||e.customer_email||"",customerFirstName:e.customerFirstName||e.firstName||e.first_name,customerLastName:e.customerLastName||e.lastName||e.last_name,status:e.status||"unknown",totalAmount:e.totalAmount||e.total||e.total_amount||0,subtotal:e.subtotal,serviceFeesAmount:e.serviceFeesAmount||e.serviceFee||e.service_fee||e.service_fees_amount||0,taxAmount:e.taxAmount||e.tax||e.tax_amount||0,discount:e.discount||0,paymentIntentId:e.paymentIntentId||e.payment_intent_id,paymentMethod:e.paymentMethod||e.payment_method,purchasedTickets:r.map(fe),createdAt:e.createdAt||e.created_at,updatedAt:e.updatedAt||e.updated_at}}const xt=fe,Ft=me;function Vt(t){const e=me(t),r=e.uuid.split("-")[0]||e.uuid;return{orderId:e.uuid,displayOrderId:r,email:e.customerEmail,customerName:[e.customerFirstName,e.customerLastName].filter(Boolean).join(" "),total:e.totalAmount,formattedTotal:`${f.formatCurrency(e.totalAmount/100)}`,ticketCount:e.purchasedTickets.length,status:e.status}}function pe(t){return f.resolveImageUrl(t,{cdn:!0})}function G(t){const e=t.imageUrl||t.imageURL||t.image_url||t.image||"";return pe(e)}function Lt(t){switch(t){case"available":case"sold_out":case"coming_soon":case"ended":return t;default:return null}}function ge(t){const e=t.ctaState||t.cta_state;if(e){const o=Lt(e);if(o)return o}if(t.isCancelled||t.is_cancelled)return"ended";const r=t.startDateTime||t.start_date_time||t.date;if(r){const o=new Date(r).getTime(),i=Date.now();if(o<i)return"ended"}const n=t.ticketsAvailable??t.tickets_available;if(n!==void 0)return n<=0?"sold_out":"available";const a=t.availableTickets||t.available_tickets||t.tickets||[];return a.length===0?"coming_soon":a.reduce((o,i)=>{const u=i.quantityAvailable??i.quantity_available??i.quantity??0,T=i.quantitySold??i.quantity_sold??0;return o+Math.max(0,u-T)},0)<=0?"sold_out":"available"}function ye(t){const e=t;return{id:e.id||e.ID,name:e.name||e.ticketName||"",description:e.description,price:e.price||0,quantity:e.quantity||e.totalQuantity||0,quantitySold:e.quantitySold||e.quantity_sold||0,quantityAvailable:e.quantityAvailable||e.quantity_available||(e.quantity||0)-(e.quantitySold||0),minPerOrder:e.minPerOrder||e.min_per_order||1,maxPerOrder:e.maxPerOrder||e.max_per_order||10,saleStartDate:e.saleStartDate||e.sale_start_date,saleEndDate:e.saleEndDate||e.sale_end_date,isHidden:e.isHidden||e.is_hidden||!1,revealWithPromoCode:e.revealWithPromoCode||e.reveal_with_promo_code,ticketType:e.ticketType||e.ticket_type||0,sectionId:e.sectionId||e.section_id,sortOrder:e.sortOrder||e.sort_order||0}}function ve(t){const e=t,n=(e.availableTickets||e.available_tickets||e.tickets||[]).map(ye),a=n.map(i=>i.price).filter(i=>i>0),s=a.length>0?Math.min(...a):void 0,o=a.length>0?Math.max(...a):void 0;return{eventID:e.eventID||e.id||e.ID||0,id:e.id||e.ID,name:e.name||e.title||"",title:e.title||e.name,slug:e.slug,description:e.description,date:e.date||e.startDateTime||e.start_date_time||"",startDateTime:e.startDateTime||e.start_date_time,endDateTime:e.endDateTime||e.end_date_time,doorsOpenTime:e.doorsOpenTime||e.doors_open_time,timezone:e.timezone||e.time_zone,venueId:e.venueId||e.venue_id,venueName:e.venueName||e.venue_name,venueAddress:e.venueAddress||e.venue_address,location:e.location||e.venueAddress||e.venue_address,imageUrl:G(e),imageURL:G(e),status:e.status,isPublished:e.isPublished??e.is_published,isCancelled:e.isCancelled??e.is_cancelled,availableTickets:n,ticketsAvailable:e.ticketsAvailable??e.tickets_available??n.reduce((i,u)=>i+(u.quantityAvailable||0),0),ticketsSold:e.ticketsSold??e.tickets_sold,minPrice:e.minPrice??e.min_price??s,maxPrice:e.maxPrice??e.max_price??o,ctaText:e.ctaText||e.cta_text,ctaState:ge(e),showPerformers:e.showPerformers??e.show_performers,eventSeriesId:e.eventSeriesId||e.event_series_id,seriesInstanceNumber:e.seriesInstanceNumber||e.series_instance_number,timeZone:e.timeZone,eventSummary:e.eventSummary,password:e.password,hasPassword:e.hasPassword,disclaimer:e.disclaimer,ticketType:e.ticketType,eventTicketingType:e.eventTicketingType,ageRestriction:e.ageRestriction,displayAgeRestriction:e.displayAgeRestriction,displayStartTime:e.displayStartTime,displayEndTime:e.displayEndTime,displayDoorsTime:e.displayDoorsTime,collectionId:e.collectionId||e.collection_id,ticketsRemaining:e.ticketsRemaining,ticketsTotal:e.ticketsTotal,hasHiddenTickets:e.hasHiddenTickets,stage:e.stage,stageName:e.stageName,stageId:e.stageId,eventCategoryTypes:e.eventCategoryTypes,publicPerformers:e.publicPerformers,collectionIds:e.collectionIds,venue:e.venue,performers:e.performers,faqs:e.faqs,showtimes:e.showtimes,purchasedTickets:e.purchasedTickets}}const qt=ye,Mt=ve,Gt=ve;function jt(t){return f.resolveImageUrl(t,{cdn:!0})}function Bt(t){const e=t,r=e.logoUrl||e.logo_url||e.logo;return{id:e.id||e.ID||0,name:e.name||"",slug:e.slug,address:e.address,googleLocationNameCache:e.googleLocationNameCache||e.google_location_name_cache,city:e.city,state:e.state,zipCode:e.zipCode||e.zip_code,country:e.country,timezone:e.timezone||e.time_zone,logoUrl:jt(r),serviceFeePercentage:e.serviceFeePercentage??e.service_fee_percentage??0,serviceFeeCents:e.serviceFeeCents??e.service_fee_cents??0,taxPercentage:e.taxPercentage??e.tax_percentage??0,organizationId:e.organizationId||e.organization_id}}const zt=Bt;function Ht(t){const e=t;return{serviceFeePercentage:e.serviceFeePercentage??e.service_fee_percentage??0,serviceFeeCents:e.serviceFeeCents??e.service_fee_cents??0,taxPercentage:e.taxPercentage??e.tax_percentage??0}}function Wt(t){return[t.address,t.city,t.state,t.zipCode].filter(Boolean).join(", ")}exports.apiDelete=Y;exports.apiGet=k;exports.apiPost=m;exports.apiPut=$e;exports.applyGiftCard=It;exports.applyPromoCode=at;exports.calculateCtaState=ge;exports.cancelReservation=We;exports.checkCollectionPassword=wt;exports.checkEventPassword=kt;exports.completeGiftCardPayment=At;exports.completeReservation=He;exports.computeCtaState=Ot;exports.configureApi=we;exports.createGiftCardPurchase=Et;exports.createOrder=Qe;exports.createPaymentIntent=je;exports.err=R;exports.extendCheckoutSession=Ke;exports.extractVenueFees=Ht;exports.fetchAllVenues=dt;exports.fetchAllVenuesResult=ae;exports.fetchEventDetails=ct;exports.fetchEventPerformers=lt;exports.fetchEventPerformersResult=ne;exports.fetchEventTickets=ut;exports.fetchEventTicketsResult=re;exports.fetchPublicCollection=_t;exports.fetchSeriesOccurrences=yt;exports.fetchSeriesOccurrencesResult=le;exports.fetchSeriesPage=ht;exports.fetchVenueEvents=ft;exports.fetchVenueEventsResult=se;exports.formatVenueAddress=Wt;exports.getApiConfig=ke;exports.getCDNImageUrl=pe;exports.getCartByUUID=Be;exports.getClientIP=be;exports.getEventImageUrl=G;exports.getLegacyPublicUrl=Ce;exports.getMonthEvents=mt;exports.getMonthEventsResult=ie;exports.getOrder=Je;exports.getOrdersV2Url=$;exports.getOrgMonthEvents=pt;exports.getOrgMonthEventsResult=ce;exports.getPublicBaseUrl=c;exports.getSeriesOccurrences=gt;exports.getSeriesOccurrencesResult=ue;exports.getSessionStatus=Ze;exports.getVenue=de;exports.getVenueBySlug=Pt;exports.getVenueFees=bt;exports.getWaitlistStatus=Nt;exports.hasPromoCodes=nt;exports.initiateOrder=Xe;exports.isOk=it;exports.joinWaitlist=Ut;exports.ok=te;exports.removeGiftCard=Rt;exports.removePromoCode=st;exports.resolvePublicEntity=vt;exports.testNetworkConnection=Ct;exports.trackUTMSource=et;exports.transformAvailableTicket=qt;exports.transformEvent=Mt;exports.transformEventData=Gt;exports.transformOrder=Ft;exports.transformOrderForDisplay=Vt;exports.transformTicket=xt;exports.transformVenue=zt;exports.unwrapOr=S;exports.updateCartQuantities=ze;exports.validatePaymentIntent=Ye;exports.validatePromoCode=rt;
|
|
2
2
|
//# sourceMappingURL=api.cjs.map
|