@getmicdrop/venue-calendar 4.0.110 → 4.0.111

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 (88) hide show
  1. package/dist/{CartView-bMHSoj75.js → CartView-DiSdmuA_.js} +9 -9
  2. package/dist/{CartView-bMHSoj75.js.map → CartView-DiSdmuA_.js.map} +1 -1
  3. package/dist/{Checkout-DDXZc-yj.js → Checkout-DBaNrRya.js} +9 -9
  4. package/dist/{Checkout-DDXZc-yj.js.map → Checkout-DBaNrRya.js.map} +1 -1
  5. package/dist/{Checkout-DG2iHmHC.js → Checkout-DwJr030c.js} +5 -5
  6. package/dist/{Checkout-DG2iHmHC.js.map → Checkout-DwJr030c.js.map} +1 -1
  7. package/dist/{CheckoutTimer-Bwq6a_Hl.js → CheckoutTimer-DPFVh7QG.js} +5 -5
  8. package/dist/{CheckoutTimer-Bwq6a_Hl.js.map → CheckoutTimer-DPFVh7QG.js.map} +1 -1
  9. package/dist/{ClockIcon-ZgeMNNI1.js → ClockIcon-BoEIfS3d.js} +2 -2
  10. package/dist/{ClockIcon-ZgeMNNI1.js.map → ClockIcon-BoEIfS3d.js.map} +1 -1
  11. package/dist/{CollectionView-1pf2C4kX.js → CollectionView-DM3WLpLu.js} +5 -5
  12. package/dist/{CollectionView-1pf2C4kX.js.map → CollectionView-DM3WLpLu.js.map} +1 -1
  13. package/dist/{Event-D3o0fguY.js → Event-DymZpajQ.js} +8 -8
  14. package/dist/{Event-D3o0fguY.js.map → Event-DymZpajQ.js.map} +1 -1
  15. package/dist/{EventPage-DqO-AV8i.js → EventPage-D7GG_BWH.js} +8 -8
  16. package/dist/{EventPage-DqO-AV8i.js.map → EventPage-D7GG_BWH.js.map} +1 -1
  17. package/dist/{Heading-pURRwiIC.js → Heading-C8oOcA05.js} +2 -2
  18. package/dist/{Heading-pURRwiIC.js.map → Heading-C8oOcA05.js.map} +1 -1
  19. package/dist/{ScarcityBadge-ykz32KS9.js → ScarcityBadge-BqJHRkab.js} +2 -2
  20. package/dist/{ScarcityBadge-ykz32KS9.js.map → ScarcityBadge-BqJHRkab.js.map} +1 -1
  21. package/dist/{SeriesPage-BmNk80cF.js → SeriesPage-DsJ9zGPQ.js} +5 -5
  22. package/dist/{SeriesPage-BmNk80cF.js.map → SeriesPage-DsJ9zGPQ.js.map} +1 -1
  23. package/dist/{Spinner-OGA1hrc5.js → Spinner-DPzuHWU6.js} +2 -2
  24. package/dist/{Spinner-OGA1hrc5.js.map → Spinner-DPzuHWU6.js.map} +1 -1
  25. package/dist/{Success-DLlQ54_-.js → Success-C0D_INAc.js} +8 -8
  26. package/dist/{Success-DLlQ54_-.js.map → Success-C0D_INAc.js.map} +1 -1
  27. package/dist/{Text-DMpMLgcU.js → Text-DOd8068v.js} +2 -2
  28. package/dist/{Text-DMpMLgcU.js.map → Text-DOd8068v.js.map} +1 -1
  29. package/dist/{VenueCalendar-ClSRsS6u.js → VenueCalendar-B809Hecp.js} +4308 -4315
  30. package/dist/{VenueCalendar-ClSRsS6u.js.map → VenueCalendar-B809Hecp.js.map} +1 -1
  31. package/dist/{ViewTicketsEmbed-5LMG2xwn.js → ViewTicketsEmbed-BPMp4JM0.js} +5 -5
  32. package/dist/{ViewTicketsEmbed-5LMG2xwn.js.map → ViewTicketsEmbed-BPMp4JM0.js.map} +1 -1
  33. package/dist/{labels-Ws4MJjH5.js → labels-wFEhrJkb.js} +3 -3
  34. package/dist/{labels-Ws4MJjH5.js.map → labels-wFEhrJkb.js.map} +1 -1
  35. package/dist/{modalManager.svelte-BPA2JF6c.js → modalManager.svelte-DjiZPIja.js} +2 -2
  36. package/dist/{modalManager.svelte-BPA2JF6c.js.map → modalManager.svelte-DjiZPIja.js.map} +1 -1
  37. package/dist/{promo-vXx1bxQm.js → promo-DK6Hxogl.js} +2 -2
  38. package/dist/{promo-vXx1bxQm.js.map → promo-DK6Hxogl.js.map} +1 -1
  39. package/dist/{showcase-state-options-9SoS5WuT.js → showcase-state-options-BuPnUf0V.js} +2 -2
  40. package/dist/{showcase-state-options-9SoS5WuT.js.map → showcase-state-options-BuPnUf0V.js.map} +1 -1
  41. package/dist/{transform-BD9xXAq7.js → transform-C6LCkao6.js} +2 -2
  42. package/dist/{transform-BD9xXAq7.js.map → transform-C6LCkao6.js.map} +1 -1
  43. package/dist/{utm-rT0TPh8G.js → utm-DYGTGbVA.js} +2 -2
  44. package/dist/{utm-rT0TPh8G.js.map → utm-DYGTGbVA.js.map} +1 -1
  45. package/dist/venue-calendar.css +1 -1
  46. package/dist/venue-calendar.es.js +2 -2
  47. package/dist/venue-calendar.iife.js +47 -47
  48. package/dist/venue-calendar.iife.js.map +1 -1
  49. package/dist/venue-calendar.umd.js +44 -44
  50. package/dist/venue-calendar.umd.js.map +1 -1
  51. package/package.json +199 -199
  52. package/dist/api/api/client.d.ts +0 -17
  53. package/dist/api/api/cta.d.ts +0 -34
  54. package/dist/api/api/events.d.ts +0 -183
  55. package/dist/api/api/gift-cards.d.ts +0 -108
  56. package/dist/api/api/index.d.ts +0 -46
  57. package/dist/api/api/orders.d.ts +0 -149
  58. package/dist/api/api/promo.d.ts +0 -45
  59. package/dist/api/api/result.d.ts +0 -78
  60. package/dist/api/api/route-manifest.d.ts +0 -179
  61. package/dist/api/api/transformers/address.d.ts +0 -18
  62. package/dist/api/api/transformers/cart.d.ts +0 -19
  63. package/dist/api/api/transformers/collection.d.ts +0 -12
  64. package/dist/api/api/transformers/event.d.ts +0 -173
  65. package/dist/api/api/transformers/giftCard.d.ts +0 -11
  66. package/dist/api/api/transformers/index.d.ts +0 -27
  67. package/dist/api/api/transformers/order.d.ts +0 -44
  68. package/dist/api/api/transformers/performer.d.ts +0 -8
  69. package/dist/api/api/transformers/series.d.ts +0 -12
  70. package/dist/api/api/transformers/venue.d.ts +0 -39
  71. package/dist/api/api/venues.d.ts +0 -33
  72. package/dist/api/api/waitlist.d.ts +0 -49
  73. package/dist/api/api.cjs +0 -2
  74. package/dist/api/api.cjs.map +0 -1
  75. package/dist/api/api.mjs +0 -1302
  76. package/dist/api/api.mjs.map +0 -1
  77. package/dist/api/types.d.ts +0 -483
  78. package/dist/seo/HostSeoController.d.ts +0 -68
  79. package/dist/seo/buildCollectionJsonLd.d.ts +0 -8
  80. package/dist/seo/buildEventJsonLd.d.ts +0 -9
  81. package/dist/seo/buildSeriesJsonLd.d.ts +0 -6
  82. package/dist/seo/helpers.d.ts +0 -88
  83. package/dist/seo/index.d.ts +0 -10
  84. package/dist/seo/seo.cjs +0 -2
  85. package/dist/seo/seo.cjs.map +0 -1
  86. package/dist/seo/seo.mjs +0 -688
  87. package/dist/seo/seo.mjs.map +0 -1
  88. package/dist/seo/types.d.ts +0 -149
@@ -1,173 +0,0 @@
1
- import { Event, AvailableTicket } from '../types.js';
2
- interface ApiEvent {
3
- eventID?: number;
4
- id?: number;
5
- ID?: number;
6
- name?: string;
7
- title?: string;
8
- slug?: string;
9
- description?: string;
10
- date?: string;
11
- startDateTime?: string;
12
- start_date_time?: string;
13
- endDateTime?: string;
14
- end_date_time?: string;
15
- doorsOpenTime?: string;
16
- doors_open_time?: string;
17
- timezone?: string;
18
- time_zone?: string;
19
- venueId?: number;
20
- venue_id?: number;
21
- venueName?: string;
22
- venue_name?: string;
23
- venueAddress?: string;
24
- venue_address?: string;
25
- location?: string;
26
- imageUrl?: string;
27
- imageURL?: string;
28
- image_url?: string;
29
- image?: string;
30
- status?: string;
31
- isPublished?: boolean;
32
- is_published?: boolean;
33
- isCancelled?: boolean;
34
- is_cancelled?: boolean;
35
- availableTickets?: any[];
36
- available_tickets?: any[];
37
- tickets?: any[];
38
- ticketsAvailable?: number;
39
- tickets_available?: number;
40
- ticketsSold?: number;
41
- tickets_sold?: number;
42
- minPrice?: number;
43
- min_price?: number;
44
- maxPrice?: number;
45
- max_price?: number;
46
- ctaText?: string;
47
- cta_text?: string;
48
- ctaState?: string;
49
- cta_state?: string;
50
- showPerformers?: boolean;
51
- show_performers?: boolean;
52
- eventSeriesId?: number;
53
- event_series_id?: number;
54
- seriesInstanceNumber?: number;
55
- series_instance_number?: number;
56
- timeZone?: string;
57
- eventSummary?: string;
58
- password?: string;
59
- hasPassword?: boolean;
60
- disclaimer?: string;
61
- ticketType?: number;
62
- eventTicketingType?: number;
63
- ageRestriction?: number;
64
- displayAgeRestriction?: boolean;
65
- displayStartTime?: boolean;
66
- displayEndTime?: boolean;
67
- displayDoorsTime?: boolean;
68
- collectionId?: number;
69
- collection_id?: number;
70
- ticketsRemaining?: number;
71
- ticketsTotal?: number;
72
- hasHiddenTickets?: boolean;
73
- stage?: {
74
- name?: string;
75
- } | null;
76
- stageName?: string;
77
- stageId?: number;
78
- eventCategoryTypes?: number[] | null;
79
- publicPerformers?: Array<{
80
- id?: number;
81
- displayName?: string;
82
- image?: string;
83
- }> | null;
84
- collectionIds?: number[] | null;
85
- venue?: Record<string, any>;
86
- performers?: Record<string, any>[];
87
- faqs?: Record<string, any>[];
88
- showtimes?: Record<string, any>[];
89
- purchasedTickets?: Record<string, any>[];
90
- }
91
- /**
92
- * Get CDN image URL.
93
- *
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.
102
- */
103
- export declare function getCDNImageUrl(path: string | undefined): string;
104
- /**
105
- * Extract image URL from event with fallbacks.
106
- *
107
- * DIVERGENCE (no-shadowed-helper rename-keep): 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. Declared under a non-shadowing name and
115
- * re-exported below as `getEventImageUrl` so call sites keep their existing
116
- * import -- satisfies `micdrop/no-shadowed-helper` without suppression.
117
- */
118
- declare function getEventImageUrlByFieldPrecedence(apiEvent: ApiEvent): string;
119
- export { getEventImageUrlByFieldPrecedence as getEventImageUrl };
120
- /**
121
- * Calculate CTA state based on ticket availability
122
- */
123
- /**
124
- * VC's 4-state CTA derivation (available/sold_out/coming_soon/ended) for parsed events.
125
- * Distinct from SC's `calculateCtaState` (richer wire-level canonical) — renamed to
126
- * avoid shadowing the SC export; this variant reads the parsed/raw event shape parseEvent consumes.
127
- */
128
- type CtaState = 'available' | 'sold_out' | 'coming_soon' | 'ended';
129
- export declare function deriveEventCtaState(apiEvent: ApiEvent): CtaState;
130
- /**
131
- * Parse a raw ticket payload into the normalized AvailableTicket domain shape.
132
- *
133
- * Wire shape is contained inside this module. Uses `||` chains matching the
134
- * old transformer exactly -- 0/false values fall through to the next variant
135
- * or default, byte-identical to previous behavior.
136
- */
137
- export declare function parseTicket(raw: unknown): AvailableTicket;
138
- /**
139
- * Parse a raw event payload into the normalized Event domain shape.
140
- *
141
- * Wire shape (ApiEvent) is contained inside this module and never escapes it.
142
- * Uses `||` chains matching the old transformer exactly -- 0/false values fall
143
- * through to the next variant, byte-identical to previous behavior. Throw
144
- * behavior preserved from old mapper: null/undefined input (property access on a nullish value) or a non-array
145
- * tickets field throws exactly as the old code did. Callers always pass real
146
- * wire objects.
147
- *
148
- * COMPOSITION NOTE — passthrough seams (events convergence):
149
- * The trailing block of fields below is carried VERBATIM from the wire (no
150
- * fallback chains, no normalization) so that the view-shape projections —
151
- * `utils/event-transform.js` (DETAIL/BROWSE) and
152
- * `public-calendar-flow/transform.ts` (EventData) — can compose parseEvent
153
- * for every event-level scalar instead of reading the wire themselves.
154
- * `venue`/`performers`/`faqs`/`showtimes`/`purchasedTickets` stay raw objects
155
- * by contract: their consumers (and #260's performer canonical) own that
156
- * variance; normalizing them here would change rendered output.
157
- */
158
- export declare function parseEvent(raw: unknown): Event;
159
- /**
160
- * Back-compat alias -- existing call sites using transformTicket continue
161
- * to work unchanged.
162
- */
163
- export declare const transformTicket: typeof parseTicket;
164
- /**
165
- * Back-compat alias -- existing call sites using transformEvent(apiEvent)
166
- * continue to work unchanged.
167
- */
168
- export declare const transformEvent: typeof parseEvent;
169
- /**
170
- * Legacy transformer name for backwards compatibility.
171
- */
172
- export declare const transformEventData: typeof parseEvent;
173
- export declare function parseEventList(raws: unknown[]): Event[];
@@ -1,11 +0,0 @@
1
- import { ApplyGiftCardResult } from '../gift-cards.js';
2
- /**
3
- * Parse a successful apply-gift-card backend payload into ApplyGiftCardResult.
4
- *
5
- * Maps the real backend contract to what the Checkout component expects:
6
- * - appliedAmount (cents) -> giftCardAmount (dollars)
7
- * - remainingTotal (dollars) -> stripeAmount (dollars, residual to charge)
8
- * - fullyCoveredByCard -> paymentType 'gift_card_only' | 'split' + requiresStripe
9
- * Byte-identical to the inline success-path mapping previously in applyGiftCard.
10
- */
11
- export declare function parseGiftCardApplication(raw: unknown): ApplyGiftCardResult;
@@ -1,27 +0,0 @@
1
- /**
2
- * Transformers Index
3
- *
4
- * Re-exports all transformer functions for convenient importing.
5
- *
6
- * Canonical parse<Entity> functions (preferred for new code):
7
- * parseEvent, parseVenue, parseOrder, parsePurchasedTicket, parseTicket,
8
- * parseSeries, parseCollection
9
- *
10
- * Back-compat aliases (old names, call the same function):
11
- * transformEvent, transformEventData, transformVenue, transformOrder,
12
- * transformTicket, transformSeriesPageData, transformCollectionData
13
- */
14
- export { parseOrder, parsePurchasedTicket, transformOrder, // back-compat alias
15
- transformTicket, // back-compat alias
16
- transformOrderForDisplay, } from './order.js';
17
- export { parseEvent, parseEventList, parseTicket, transformEvent, // back-compat alias
18
- transformEventData, // legacy alias
19
- transformTicket as transformAvailableTicket, // back-compat alias
20
- getCDNImageUrl, getEventImageUrl, deriveEventCtaState, deriveEventCtaState as calculateCtaState, } from './event.js';
21
- export { parseVenue, transformVenue, // back-compat alias
22
- extractVenueFees, formatVenueAddress, } from './venue.js';
23
- export { parseSeries, transformSeriesPageData, } from './series.js';
24
- export { parseCollection, transformCollectionData, } from './collection.js';
25
- export { parseCart, parseCartReservation } from './cart.js';
26
- export { parseGiftCardApplication } from './giftCard.js';
27
- export { parseEventPerformers } from './performer.js';
@@ -1,44 +0,0 @@
1
- import { Order, PurchasedTicket } from '../types.js';
2
- /**
3
- * Parse a raw purchased-ticket payload into the normalized PurchasedTicket domain shape.
4
- *
5
- * Wire shape (ApiTicket) is contained inside this module. Uses `||` chains matching
6
- * the old transformer exactly -- byte-identical to previous behavior. Throw behavior
7
- * preserved from old mapper: null/undefined input (property access on a nullish value) throws as the old code did.
8
- */
9
- export declare function parsePurchasedTicket(raw: unknown): PurchasedTicket;
10
- /**
11
- * Parse a raw order payload into the normalized Order domain shape.
12
- *
13
- * Wire shape (ApiOrder) is contained inside this module and never escapes it.
14
- * Uses `||` chains matching the old transformer exactly (all money fields use `||`,
15
- * not `??` -- 0-valued amounts fall through to next variant, same as old) --
16
- * byte-identical to previous behavior. Throw behavior preserved from old mapper:
17
- * null/undefined input (property access on a nullish value) or a non-array tickets field throws as the old code did.
18
- */
19
- export declare function parseOrder(raw: unknown): Order;
20
- /**
21
- * Back-compat alias -- existing call sites using transformTicket continue
22
- * to work unchanged.
23
- */
24
- export declare const transformTicket: typeof parsePurchasedTicket;
25
- /**
26
- * Back-compat alias -- existing call sites using transformOrder(apiOrder)
27
- * continue to work unchanged.
28
- */
29
- export declare const transformOrder: typeof parseOrder;
30
- /**
31
- * Transform order for display on success page.
32
- *
33
- * Returns a simplified object with display-ready values.
34
- */
35
- export declare function transformOrderForDisplay(raw: unknown): {
36
- orderId: string;
37
- displayOrderId: string;
38
- email: string;
39
- customerName: string;
40
- total: number;
41
- formattedTotal: string;
42
- ticketCount: number;
43
- status: string;
44
- };
@@ -1,8 +0,0 @@
1
- import { EventPerformersResponse } from '../types.js';
2
- /**
3
- * Parse a raw performers payload into the normalized EventPerformersResponse.
4
- *
5
- * `performers` is coerced to an array (Array.isArray gate), `showPerformers`
6
- * to a strict boolean (`=== true`) -- matching fetchEventPerformers exactly.
7
- */
8
- export declare function parseEventPerformers(raw: unknown): EventPerformersResponse;
@@ -1,12 +0,0 @@
1
- import { SeriesPageData } from '../types.js';
2
- import { EventData } from '../../public-calendar-flow/types';
3
- /**
4
- * Transform SeriesPageData (from the series API) into our clean EventData interface.
5
- * Sets eventSeriesId so EventExperience renders in full-width series mode.
6
- */
7
- export declare function parseSeries(series: SeriesPageData): EventData;
8
- /**
9
- * Back-compat alias — the public-calendar-flow shaper name. Existing call
10
- * sites importing transformSeriesPageData continue to work unchanged.
11
- */
12
- export declare const transformSeriesPageData: typeof parseSeries;
@@ -1,39 +0,0 @@
1
- import { Venue } from '../types.js';
2
- /**
3
- * Parse a raw venue payload into the normalized Venue domain shape.
4
- *
5
- * Wire shape (ApiVenue) is contained inside this module and never escapes it.
6
- * Uses `||` / `??` chains matching the old transformer exactly -- byte-identical
7
- * to previous behavior. Throw behavior preserved from old mapper: null/undefined
8
- * input throws exactly as the old code did. Callers always pass real wire objects.
9
- */
10
- declare function vcParseVenue(raw: unknown): Venue;
11
- /**
12
- * Public re-export under the canonical name + back-compat alias. Existing call
13
- * sites using either parseVenue(apiVenue) or transformVenue(apiVenue) continue
14
- * to work unchanged; re-exports don't redeclare the identifier so the
15
- * no-shadowed-helper rule is satisfied without a suppression.
16
- */
17
- export { vcParseVenue as parseVenue };
18
- export declare const transformVenue: typeof vcParseVenue;
19
- /**
20
- * Extract fee configuration from a raw venue payload.
21
- *
22
- * Uses `??` (not `||`) so 0-valued fees are preserved correctly.
23
- */
24
- declare function vcExtractVenueFees(raw: unknown): {
25
- serviceFeePercentage: number;
26
- serviceFeeCents: number;
27
- taxPercentage: number;
28
- };
29
- /**
30
- * Get formatted venue address.
31
- *
32
- * Compare-first vs SC canonical formatVenueAddress(venue: Pick<ParsedVenue,
33
- * 'address'|'city'|'state'|...>): GENUINELY DIVERGED — VC takes its own `Venue`
34
- * domain type (the resolved shape `vcParseVenue` emits), not SC's `ParsedVenue`
35
- * pick. Kept local under a non-shadowing name and re-exported below; no
36
- * eslint-disable.
37
- */
38
- declare function vcFormatVenueAddress(venue: Venue): string;
39
- export { vcExtractVenueFees as extractVenueFees, vcFormatVenueAddress as formatVenueAddress, };
@@ -1,33 +0,0 @@
1
- import { Venue } from './types.js';
2
- /**
3
- * Get venue details (public, no auth required)
4
- *
5
- * Fetches venue information including service fees and taxes
6
- * needed for checkout calculations.
7
- *
8
- * @param venueId - The venue ID
9
- * @returns Venue details or null on error
10
- */
11
- export declare function getVenue(venueId: string | number): Promise<Venue | null>;
12
- /**
13
- * Get venue service fee configuration
14
- *
15
- * Returns just the fee-related fields for checkout calculations.
16
- *
17
- * @param venueId - The venue ID
18
- * @returns Fee configuration or null on error
19
- */
20
- export declare function getVenueFees(venueId: string | number): Promise<{
21
- serviceFeePercentage: number;
22
- serviceFeeCents: number;
23
- taxPercentage: number;
24
- } | null>;
25
- /**
26
- * Get venue by slug
27
- *
28
- * Fetches venue using its URL-friendly slug.
29
- *
30
- * @param slug - The venue slug
31
- * @returns Venue details or null on error
32
- */
33
- export declare function getVenueBySlug(slug: string): Promise<Venue | null>;
@@ -1,49 +0,0 @@
1
- /**
2
- * Waitlist API
3
- *
4
- * Endpoints for the sold-out-event waitlist flow.
5
- */
6
- export interface JoinWaitlistResult {
7
- success: boolean;
8
- updated?: boolean;
9
- error?: string;
10
- }
11
- /**
12
- * Join the waitlist for a sold-out event.
13
- */
14
- export declare function joinWaitlist(eventId: string | number, email: string, phone?: string | null, smsOptIn?: boolean): Promise<JoinWaitlistResult>;
15
- export interface ValidateWaitlistTokenResult {
16
- valid: boolean;
17
- eventId: number;
18
- /**
19
- * Present only when `valid` is false. One of the server's failure enums:
20
- * invalid_token | token_expired | token_used | email_mismatch |
21
- * inventory_exhausted. Callers map it to friendly copy.
22
- */
23
- errorCode?: string;
24
- }
25
- /**
26
- * Validate a tokenized waitlist unlock link (decisions #3/#22/#36).
27
- *
28
- * A waitlister receives an email link carrying an opaque token bound to their
29
- * email. Presenting a valid (token, email) pair unlocks the normal Buy Tickets
30
- * flow on an otherwise-gated sold-out event, routing freed inventory to the
31
- * notified buyer. Failures are surfaced (not thrown) so the page can show a
32
- * non-blocking notice while keeping the event in its gated waitlist state.
33
- */
34
- export declare function validateWaitlistToken(token: string, email: string): Promise<ValidateWaitlistTokenResult>;
35
- export interface WaitlistStatusResult {
36
- waitlistEnabled: boolean;
37
- soldOut: boolean;
38
- /**
39
- * When gated, the public event page should present "Sold Out — join the
40
- * waitlist" to non-members even if tickets are technically available, and only
41
- * a valid tokenized link unlocks checkout (reconciled decision #3).
42
- */
43
- gated: boolean;
44
- }
45
- /**
46
- * Fetch an event's waitlist gating status. Returns a non-gated default if the
47
- * request fails so the page degrades to normal behavior.
48
- */
49
- export declare function getWaitlistStatus(eventId: string | number): Promise<WaitlistStatusResult>;
package/dist/api/api.cjs DELETED
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("@getmicdrop/svelte-components/utils/logger"),L=require("@getmicdrop/svelte-components/errors"),y=require("@getmicdrop/svelte-components"),m=require("@getmicdrop/svelte-components/datetime"),Ce=require("@getmicdrop/svelte-components/transforms");require("@getmicdrop/svelte-components/utils/timezones");var G=typeof document<"u"?document.currentScript:null;const be={};function $e(){typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:G&&G.tagName.toUpperCase()==="SCRIPT"&&G.src||new URL("api.cjs",document.baseURI).href}<"u"&&be?.VITE_WIDGET_KEY}const j=I.createLogger("VC");function X(t){const e=$e();return e?{...t,"X-Widget-Key":e}:t}const Te={baseUrl:"https://get-micdrop.com",timeout:3e4,retries:2,retryDelay:500,onError:t=>j.error("API Error:",t)};let g={...Te};function Pe(t){g={...g,...t}}function Se(){return{...g}}function c(){return`${g.baseUrl}/api/v2/public`}function Ie(){return`${g.baseUrl}/api/public`}function v(){return`${g.baseUrl}/api/orders/v2/public`}async function Ee(){return""}const Re=t=>new Promise(e=>setTimeout(e,t));async function Z(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,R=setTimeout(()=>u.abort(),r.timeout),h=e.signal;let P;h&&(h.aborted?u.abort():(P=()=>u.abort(),h.addEventListener("abort",P,{once:!0})));try{const _=await fetch(t,{...e,signal:u.signal});if(_.status>=500&&i<s)o=new Error(`HTTP ${_.status}`);else return _}catch(_){if(o=_,h?.aborted)throw _}finally{clearTimeout(R),h&&P&&h.removeEventListener("abort",P)}i<s&&await Re(r.retryDelay*Math.pow(2,i-1))}throw o}async function $(t,e){return q("GET",t,void 0,e)}async function f(t,e,r){return q("POST",t,e,r)}async function Ne(t,e,r){return q("PUT",t,e,r)}async function ee(t,e){return q("DELETE",t,void 0,e)}async function q(t,e,r,n){const a=e.startsWith("http")?e:`${c()}${e}`;try{const s=await Z(a,{method:t,headers:X({"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 O(t,e){try{const r=t.startsWith(g.baseUrl),n=await Z(t,{credentials:"include",...e,...r?{headers:X(e?.headers)}:{}},g);if(!n.ok){const a=await n.json().catch(()=>({}));return j.error(`API request failed: ${n.status}`,a),null}return n.json()}catch(r){return j.error("API request error:",r),null}}function Ae(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 Ue(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(Ae);return{uuid:r,eventID:n,status:a,expiresAt:s,reservations:i}}const te=["utmSource","utmMedium","utmCampaign","utmContent","utmTerm"],Oe={utmSource:"utm_source",utmMedium:"utm_medium",utmCampaign:"utm_campaign",utmContent:"utm_content",utmTerm:"utm_term"},re="direct";function ne(t){return t?t.trim().toLowerCase().replace(/\s+/g,"_"):""}function De(t){const e={};for(const r of te)e[r]=ne(t[r]);return e.utmSource||(e.utmSource=re),e}function xe(t){const e={};for(const r of te)e[r]=t.get(Oe[r]);return De(e)}function Fe(){if(typeof window>"u")return!0;try{return window.self===window.top}catch{return!1}}function Ve(){const t=typeof window<"u",e=Fe(),r=t?window.location.search:"",n=(typeof document<"u"?document.referrer:"")??"",a=t&&e?window.location.href:"";return{utm:xe(new URLSearchParams(r)),referrer:n||"",pageUrl:a||""}}let Le=!1;function qe(){return typeof window<"u"&&typeof window.__tcfapi=="function"}function Me(){return qe()}function Ge(){return Me()?Le:!0}const J="micdrop_session_id",Q="micdrop_visitor_id",je=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function We(t){return typeof t=="string"&&je.test(t)}function ae(){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 Be(){let t=y.getSessionStorage(J);return t||(t=ae(),y.setSessionStorage(J,t)),t}function ze(){if(!Ge())return null;const t=y.getLocalStorage(Q);if(We(t))return t;const e=ae();return y.setLocalStorage(Q,e),e}const He="micdrop_attribution";function Ke(){const t=y.getSessionStorage(He);return!t||!t.utm||typeof t.utm.utmSource!="string"?null:t}function D(){const e=Ke()??Ve();return{sessionId:Be(),visitorId:ze(),utmSource:e.utm.utmSource,utmMedium:e.utm.utmMedium,utmCampaign:e.utm.utmCampaign,utmContent:e.utm.utmContent,utmTerm:e.utm.utmTerm,referrer:e.referrer||""}}y.createLogger("tracking");const d=I.createLogger("VC");async function Je(t,e,r){try{const n=await f(`${v()}/cart/${t}/payment-intent`,{productQuantities:e,...r&&Object.keys(r).length>0?{donationAmounts:r}:{},attribution:D()});if(!n.success)throw d.error("Payment intent creation failed:",n.error),new L.ApiError(n.error||"Failed to create payment intent",n.statusCode??0,{endpoint:`${v()}/cart/${t}/payment-intent`,method:"POST"});return d.debug("Payment intent created:",n.data),n.data}catch(n){return d.error("createPaymentIntent error:",n),null}}async function Qe(t,e){if(!t)return null;try{const r=await $(`${v()}/cart/${t}`);if(!r.success)return null;const{uuid:n,eventID:a,status:s,expiresAt:o,reservations:i}=Ue(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 Ye(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(`${v()}/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 Xe(t){try{const e=await f(`${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 Ze(t){try{const e=await f(`${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 et(t,e){try{const r=await f(`${c()}/orders/create`,{eventID:t,promoCode:e,attribution:D()});return r.success?r.data:(d.error("Create order failed:",r.error),null)}catch(r){return d.error("createOrder error:",r),null}}async function tt(t){return O(`${c()}/orders/${t}`)}async function rt(t,e){try{const r=await f(`${v()}/validatePaymentIntent/${t}`,{...e,attribution:D()});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 nt(t){try{const e=await f(`${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 at(t){try{const e=await $(`${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 st(t={eventID:""}){try{const e=await f(`${c()}/orders/create`,{...t,attribution:D()});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 ot(t){if(typeof window>"u")return;const e=new URLSearchParams(window.location.search),r=ne(e.get("utm_source"))||re;try{await fetch(`${c()}/utm/${t}/${encodeURIComponent(r)}`)}catch(n){d.error("UTM tracking failed:",n)}}const M=I.createLogger("VC");async function it(t,e){try{if(!e||!e.trim())return{valid:!1,error:"Promo code is required"};const r=encodeURIComponent(e.trim()),n=await $(`/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.discount??a.amount,code:a.name||a.code||e}}catch(r){return M.error("Error validating promo code:",r),{valid:!1,error:"Network error validating code"}}}async function ct(t){try{const e=await $(`/promo-codes/check/${t}`);return e.success?e.data.hasPromoCodes===!0:!0}catch(e){return M.error("Error checking promo codes availability:",e),!0}}async function ut(t,e){try{const r=await f(`${v()}/cart/${t}/apply-promo`,{promoCode:e});return r.success?{success:!0}:{success:!1,error:r.error||"Failed to apply promo code"}}catch(r){return M.error("Error applying promo code:",r),{success:!1,error:"Network error applying code"}}}async function lt(t){try{const e=await f(`/orders/${t}/remove-promo`);return e.success?{success:!0}:{success:!1,error:e.error||"Failed to remove promo code"}}catch(e){return M.error("Error removing promo code:",e),{success:!1,error:"Network error removing code"}}}function dt(t){const e=t??{};return{performers:Array.isArray(e.performers)?e.performers:[],showPerformers:e.showPerformers===!0}}function z(t){return{ok:!0,data:t}}function b(t){return{ok:!1,error:t}}function W(t){return{ok:!1,error:t,notFound:!0}}function ft(t){return t.ok}function mt(t){return!t.ok}function E(t,e){return t.ok?t.data:e}const pt="00000000-0000-0000-0000-000000000000",p=I.createLogger("VC"),F=new Map;async function se(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)return o.status===404?W("event_not_found"):(p.error(`Failed to fetch event details: ${o.status}`),b("event_fetch_failed"));const i=await o.json();return i?z(i):W("event_not_found")}catch(s){return p.error("Error fetching event details:",s),b("event_fetch_failed")}})();return e===fetch&&(F.set(n,a),a.finally(()=>{F.get(n)===a&&F.delete(n)})),a}async function gt(t,e=fetch,r){const n=await se(t,e,r);return n.ok?n.data:null}async function T(t,e,r=n=>n){try{const n=await O(t);return n?z(r(n)):(p.error(`Failed to load (${e}): network or server error`),b(e))}catch(n){return p.error(`Error loading (${e}):`,n),b(e)}}function H(t){return Array.isArray(t)?t:[]}async function oe(t){return T(`${c()}/tickets/event/${t}`,"tickets_fetch_failed",H)}async function yt(t){return E(await oe(t),[])}async function ie(t){return t?T(`${c()}/events/${t}/performers`,"performers_fetch_failed",e=>dt(e)):(p.warn("fetchEventPerformers called without eventId"),b("performers_missing_event_id"))}async function vt(t){return E(await ie(t),{performers:[],showPerformers:!1})}async function ce(t){return t?T(`${c()}/venues/organization/${t}`,"venues_fetch_failed",H):(p.warn("fetchAllVenues called without orgId"),b("venues_missing_org_id"))}async function ht(t){return E(await ce(t),[])}async function ue(t){return t?T(`${c()}/events/venue/${t}`,"venue_events_fetch_failed",H):(p.warn("fetchVenueEvents called without venueId"),b("venue_events_missing_venue_id"))}async function _t(t){return E(await ue(t),[])}function le(t){return Array.isArray(t)?t:Array.isArray(t.events)?t.events:[]}async function de(t,e,r){return T(`${c()}/events/venue/${t}/month/${e}/${r}`,"month_events_fetch_failed",n=>le(n))}async function wt(t,e,r){return E(await de(t,e,r),[])}async function fe(t,e,r){return T(`${c()}/events/organization/${t}/month/${e}/${r}`,"org_month_events_fetch_failed",n=>le(n))}async function kt(t,e,r){return E(await fe(t,e,r),[])}async function me(t){return T(`${c()}/series/${t}/occurrences`,"series_occurrences_fetch_failed")}async function Ct(t){const e=await me(t);return e.ok?e.data:null}async function pe(t,e){return T(`${c()}/series/${t}/occurrences?venueId=${e}`,"series_cta_fetch_failed")}async function bt(t,e){const r=await pe(t,e);return r.ok?r.data:null}async function $t(t,e){try{const r=e?`?slug=${encodeURIComponent(e)}`:"",n=await O(`${c()}/resolve/${encodeURIComponent(String(t))}${r}`);if(!n||!n.type)throw new L.NotFoundError("entity",String(t));return n}catch(r){return p.error("Error resolving public entity:",r),null}}async function Tt(t,e){try{const r=e?`${c()}/collections/${t}?password=${encodeURIComponent(e)}`:`${c()}/collections/${t}`,n=await O(r);if(!n)throw new L.NotFoundError("collection",String(t));return n}catch(r){return p.error("Error fetching collection:",r),null}}async function Pt(t,e){try{return(await O(`${c()}/collections/${t}/check-password`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e})}))?.valid===!0}catch(r){return p.error("Error checking collection password:",r),!1}}async function St(t,e){try{const r=await O(`${c()}/events/${t}/check-password`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e})});return typeof r=="boolean"?{valid:r}:{valid:r?.valid===!0}}catch(r){return p.error("Error checking event password:",r),{valid:!1}}}async function It(t,e){try{const r=e?`${c()}/events/venue/${e}`:t?`${c()}/venues/organization/${t}`:`${c()}/venues/${pt}`;return(await fetch(r,{method:"HEAD"})).status<500}catch(r){return p.error("Network connection test failed:",r),!1}}const U=I.createLogger("VC");async function ge(t){try{if(!t)return U.warn("getVenue called without venueId"),null;const e=await $(`/venues/${t}`);return e.success?e.data??null:(U.error(`Failed to fetch venue: ${e.statusCode}`),null)}catch(e){return U.error("Error fetching venue:",e),null}}async function Et(t){const e=await ge(t);return e?{serviceFeePercentage:e.serviceFeePercentage??0,serviceFeeCents:e.serviceFeeCents??0,taxPercentage:e.taxPercentage??0}:null}async function Rt(t){try{if(!t)return U.warn("getVenueBySlug called without slug"),null;const e=encodeURIComponent(t),r=await $(`/venues/slug/${e}`);return r.success?r.data??null:(U.error(`Failed to fetch venue by slug: ${r.statusCode}`),null)}catch(e){return U.error("Error fetching venue by slug:",e),null}}function Nt(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 k=I.createLogger("VC"),At="https://get-micdrop.com",Y=`${At}/api/orders/v2`;async function Ut(t){try{const e=await f(`${Y}/gift-cards`,t);if(!e.success)throw k.error("Gift card purchase creation failed:",e.error),new L.ApiError(e.error||"Failed to create gift card purchase",e.statusCode??0,{endpoint:`${Y}/gift-cards`,method:"POST"});return k.debug("Gift card purchase created:",e.data),e.data}catch(e){return k.error("Gift card purchase creation error:",e),null}}async function Ot(t,e){try{const r=await f(`${v()}/cart/${t}/apply-gift-card`,{giftCardCode:e});return r.success?Nt(r.data):r.statusCode===429?{valid:!1,error:"Too many attempts. Please wait a moment and try again."}:(k.error("Apply gift card failed:",r.error),{valid:!1,error:r.error||"Invalid gift card code"})}catch(r){return k.error("applyGiftCard error:",r),{valid:!1,error:"Network error. Please check your connection and try again."}}}async function Dt(t,e){try{const r=await ee(`${v()}/cart/${t}/gift-card`,e?{body:JSON.stringify({giftCardCode:e})}:void 0);return r.success?{success:!0}:(k.error("Remove gift card failed:",r.error),{success:!1,error:r.error||"Failed to remove gift card"})}catch(r){return k.error("removeGiftCard error:",r),{success:!1,error:"Network error. Please check your connection and try again."}}}async function xt(t,e){try{const r=await f(`${v()}/cart/${t}/complete-gift-card-payment`,{customerName:y.formatFullName(e.firstName,e.lastName),customerEmail:e.email,firstName:e.firstName,lastName:e.lastName,email:e.email,phoneNumber:e.phoneNumber||null,mailingList:e.mailingList||!1,attribution:D()});return r.success?{success:!0,orderId:r.data?.orderId,confirmationNumber:r.data?.confirmationNumber}:(k.error("Complete gift card payment failed:",r.error),{success:!1,error:r.error||"Failed to complete payment"})}catch(r){return k.error("completeGiftCardPayment error:",r),{success:!1,error:"Network error. Please check your connection and try again."}}}const V=I.createLogger("VC"),Ft={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 Vt(t,e,r=null,n=!1){try{const a={email:e};r&&n&&(a.phone=r,a.smsOptIn=!0);const s=await f(`/events/${t}/waitlist`,a);return s.success?{success:!0,updated:s.data?.updated}:(V.error("Join waitlist failed:",s.error),{success:!1,error:Ft[s.error??""]||"Failed to join waitlist. Please try again."})}catch(a){return V.error("joinWaitlist error:",a),{success:!1,error:"Network error. Please check your connection and try again."}}}async function Lt(t,e){try{const r=await f(`/checkout/validate-token/${t}`,{email:e});return r.success?{valid:!0,eventId:r.data?.eventId??0}:{valid:!1,eventId:0,errorCode:r.error}}catch(r){return V.error("validateWaitlistToken error:",r),{valid:!1,eventId:0,errorCode:"invalid_token"}}}async function qt(t){const e={waitlistEnabled:!1,soldOut:!1,gated:!1};try{const r=await $(`/events/${t}/waitlist/status`);return r.success?{waitlistEnabled:!!r.data?.waitlistEnabled,soldOut:!!r.data?.soldOut,gated:!!r.data?.gated}:e}catch(r){return V.error("getWaitlistStatus error:",r),e}}function Mt(t,e,r={}){const{cancelled:n=!1,isRegistration:a=!1,waitlistEnabled:s=!1}=r,o=m.browserNow();if(n)return{text:"Cancelled",disabled:!0,reason:"cancelled"};const i=m.toInstantOrNull(t.endDateTime||t.startDateTime);if(i&&m.compareInstants(i,o)<0)return{text:"Sales ended",disabled:!0,reason:"event_past"};const u=t?.hasPurchasableHiddenTickets===!0||Array.isArray(e)&&e.some(Ce.isHiddenTicketPurchasable),R=(e||[]).filter(l=>l.salesChannel!==2&&!l.isHidden&&!(typeof l.visibility=="number"&&l.visibility>=2));if(R.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 h=!1,P=!0,_=!0,w=null;for(const l of R){const S=m.toInstantOrNull(l.salesBegin||l.salesStart||l.saleBegin||l.onSaleStart),x=m.toInstantOrNull(l.salesEnd||l.saleEnd||l.onSaleEnd),N=l.remainingCapacity??l.quantityRemaining??l.quantity,C=l.soldOut||N!=null&&N<=0,A=S?m.compareInstants(S,o)>0:!1,K=x?m.compareInstants(x,o)<0:!1;!C&&!A&&!K&&(h=!0),C||(P=!1),A||(_=!1),A&&S&&!C&&!K&&(!w||m.compareInstants(S,w)<0)&&(w=S)}if(h)return{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"available"};if(_&&w){if(u)return{text:a?"Reserve a spot":"Get tickets",disabled:!1,reason:"hidden_only"};const l=m.compareInstants(w,o),S=l/(1e3*60*60),x=l/(1e3*60*60*24),N=A=>m.formatLocal(A,{hour:"numeric",minute:"2-digit",hour12:!0},"en-US");let C;return S<24?C=N(w):x<=7?C=m.formatLocal(w,{weekday:"short",hour:"numeric",minute:"2-digit",hour12:!0},"en-US"):C=`${m.formatLocal(w,{month:"short",day:"numeric"},"en-US")} ${N(w)}`,{text:`On sale ${C}`,disabled:!0,reason:"coming_soon"}}return P?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 ye(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 ve(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(ye),createdAt:e.createdAt||e.created_at,updatedAt:e.updatedAt||e.updated_at}}const Gt=ye,jt=ve;function Wt(t){const e=ve(t),r=e.uuid.split("-")[0]||e.uuid,n=Number(e.totalAmount);return{orderId:e.uuid,displayOrderId:r,email:e.customerEmail,customerName:[e.customerFirstName,e.customerLastName].filter(Boolean).join(" "),total:e.totalAmount,formattedTotal:`${y.formatCurrency(y.asUSD(Number.isFinite(n)?n/100:0))}`,ticketCount:e.purchasedTickets.length,status:e.status}}function he(t){return y.resolveImageUrl(t,{cdn:!0})}function B(t){const e=t.imageUrl||t.imageURL||t.image_url||t.image||"";return he(e)}function Bt(t){switch(t){case"available":case"sold_out":case"coming_soon":case"ended":return t;default:return null}}function _e(t){const e=t.ctaState||t.cta_state;if(e){const o=Bt(e);if(o)return o}if(t.isCancelled||t.is_cancelled)return"ended";const r=m.toInstantOrNull(t.startDateTime||t.start_date_time||t.date);if(r){const o=Date.now();if(r.getTime()<o)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,R=i.quantitySold??i.quantity_sold??0;return o+Math.max(0,u-R)},0)<=0?"sold_out":"available"}function we(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 ke(t){const e=t,n=(e.availableTickets||e.available_tickets||e.tickets||[]).map(we),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:B(e),imageURL:B(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:_e(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 zt=we,Ht=ke,Kt=ke;function Jt(t){return y.resolveImageUrl(t,{cdn:!0})}function Qt(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 Yt=Qt;function Xt(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 Zt(t){return[t.address,t.city,t.state,t.zipCode].filter(Boolean).join(", ")}exports.apiDelete=ee;exports.apiGet=$;exports.apiPost=f;exports.apiPut=Ne;exports.applyGiftCard=Ot;exports.applyPromoCode=ut;exports.calculateCtaState=_e;exports.cancelReservation=Ze;exports.checkCollectionPassword=Pt;exports.checkEventPassword=St;exports.completeGiftCardPayment=xt;exports.completeReservation=Xe;exports.computeCtaState=Mt;exports.configureApi=Pe;exports.createGiftCardPurchase=Ut;exports.createOrder=et;exports.createPaymentIntent=Je;exports.err=b;exports.errNotFound=W;exports.extendCheckoutSession=nt;exports.extractVenueFees=Xt;exports.fetchAllVenues=ht;exports.fetchAllVenuesResult=ce;exports.fetchEventDetails=gt;exports.fetchEventDetailsResult=se;exports.fetchEventPerformers=vt;exports.fetchEventPerformersResult=ie;exports.fetchEventTickets=yt;exports.fetchEventTicketsResult=oe;exports.fetchPublicCollection=Tt;exports.fetchSeriesOccurrences=bt;exports.fetchSeriesOccurrencesResult=pe;exports.fetchVenueEvents=_t;exports.fetchVenueEventsResult=ue;exports.formatVenueAddress=Zt;exports.getApiConfig=Se;exports.getCDNImageUrl=he;exports.getCartByUUID=Qe;exports.getClientIP=Ee;exports.getEventImageUrl=B;exports.getLegacyPublicUrl=Ie;exports.getMonthEvents=wt;exports.getMonthEventsResult=de;exports.getOrder=tt;exports.getOrdersV2Url=v;exports.getOrgMonthEvents=kt;exports.getOrgMonthEventsResult=fe;exports.getPublicBaseUrl=c;exports.getSeriesOccurrences=Ct;exports.getSeriesOccurrencesResult=me;exports.getSessionStatus=at;exports.getVenue=ge;exports.getVenueBySlug=Rt;exports.getVenueFees=Et;exports.getWaitlistStatus=qt;exports.hasPromoCodes=ct;exports.initiateOrder=st;exports.isErr=mt;exports.isOk=ft;exports.joinWaitlist=Vt;exports.ok=z;exports.removeGiftCard=Dt;exports.removePromoCode=lt;exports.resolvePublicEntity=$t;exports.testNetworkConnection=It;exports.trackUTMSource=ot;exports.transformAvailableTicket=zt;exports.transformEvent=Ht;exports.transformEventData=Kt;exports.transformOrder=jt;exports.transformOrderForDisplay=Wt;exports.transformTicket=Gt;exports.transformVenue=Yt;exports.unwrapOr=E;exports.updateCartQuantities=Ye;exports.validatePaymentIntent=rt;exports.validatePromoCode=it;exports.validateWaitlistToken=Lt;
2
- //# sourceMappingURL=api.cjs.map