@getmicdrop/venue-calendar 4.0.108 → 4.0.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +740 -740
- package/dist/CartView-bMHSoj75.js +2475 -0
- package/dist/CartView-bMHSoj75.js.map +1 -0
- package/dist/{Checkout-C4zUFYYG.js → Checkout-DDXZc-yj.js} +266 -276
- package/dist/Checkout-DDXZc-yj.js.map +1 -0
- package/dist/{Checkout-CACB_Qvi.js → Checkout-DG2iHmHC.js} +215 -214
- package/dist/Checkout-DG2iHmHC.js.map +1 -0
- package/dist/{CheckoutTimer-D5llSBPs.js → CheckoutTimer-Bwq6a_Hl.js} +5 -5
- package/dist/CheckoutTimer-Bwq6a_Hl.js.map +1 -0
- package/dist/{ClockIcon-BJnxLZ4f.js → ClockIcon-ZgeMNNI1.js} +2 -2
- package/dist/ClockIcon-ZgeMNNI1.js.map +1 -0
- package/dist/{CollectionView-BLpwWRcN.js → CollectionView-1pf2C4kX.js} +85 -84
- package/dist/CollectionView-1pf2C4kX.js.map +1 -0
- package/dist/{Event-DXp4Ypv4.js → Event-D3o0fguY.js} +1693 -1611
- package/dist/Event-D3o0fguY.js.map +1 -0
- package/dist/EventPage-DqO-AV8i.js +995 -0
- package/dist/EventPage-DqO-AV8i.js.map +1 -0
- package/dist/{Heading-C_Pc_j8f.js → Heading-pURRwiIC.js} +5 -5
- package/dist/Heading-pURRwiIC.js.map +1 -0
- package/dist/{ScarcityBadge-CSi-i0-w.js → ScarcityBadge-ykz32KS9.js} +25 -25
- package/dist/ScarcityBadge-ykz32KS9.js.map +1 -0
- package/dist/SeriesPage-BmNk80cF.js +34 -0
- package/dist/SeriesPage-BmNk80cF.js.map +1 -0
- package/dist/{Spinner-BFIjCOTb.js → Spinner-OGA1hrc5.js} +2 -2
- package/dist/Spinner-OGA1hrc5.js.map +1 -0
- package/dist/Success-DLlQ54_-.js +896 -0
- package/dist/Success-DLlQ54_-.js.map +1 -0
- package/dist/{Text-tWGKQJab.js → Text-DMpMLgcU.js} +27 -27
- package/dist/Text-DMpMLgcU.js.map +1 -0
- package/dist/{VenueCalendar-Dhoi9hF5.js → VenueCalendar-ClSRsS6u.js} +8133 -8270
- package/dist/VenueCalendar-ClSRsS6u.js.map +1 -0
- package/dist/{ViewTicketsEmbed-BrXae6cK.js → ViewTicketsEmbed-5LMG2xwn.js} +151 -150
- package/dist/ViewTicketsEmbed-5LMG2xwn.js.map +1 -0
- package/dist/__SKIP_PATHS__-BtJ0tS93.js +10 -0
- package/dist/__SKIP_PATHS__-BtJ0tS93.js.map +1 -0
- package/dist/api/api/events.d.ts +28 -12
- package/dist/api/api/index.d.ts +1 -1
- package/dist/api/api/route-manifest.d.ts +179 -0
- package/dist/api/api.cjs +1 -1
- package/dist/api/api.cjs.map +1 -1
- package/dist/api/api.mjs +388 -385
- package/dist/api/api.mjs.map +1 -1
- package/dist/api/types.d.ts +483 -483
- package/dist/{labels-CGndTgO9.js → labels-Ws4MJjH5.js} +141 -136
- package/dist/labels-Ws4MJjH5.js.map +1 -0
- package/dist/{modalManager.svelte-BgW5Xd6y.js → modalManager.svelte-BPA2JF6c.js} +2 -2
- package/dist/modalManager.svelte-BPA2JF6c.js.map +1 -0
- package/dist/navigation--gZASiSa.js +19 -0
- package/dist/navigation--gZASiSa.js.map +1 -0
- package/dist/promo-vXx1bxQm.js +29 -0
- package/dist/promo-vXx1bxQm.js.map +1 -0
- package/dist/seo/helpers.d.ts +11 -0
- package/dist/seo/seo.cjs +1 -1
- package/dist/seo/seo.cjs.map +1 -1
- package/dist/seo/seo.mjs +463 -325
- package/dist/seo/seo.mjs.map +1 -1
- package/dist/seo/types.d.ts +0 -1
- package/dist/{showcase-state-options-BxLP2R1L.js → showcase-state-options-9SoS5WuT.js} +21 -21
- package/dist/showcase-state-options-9SoS5WuT.js.map +1 -0
- package/dist/{transform-CVOgA-Ky.js → transform-BD9xXAq7.js} +83 -79
- package/dist/transform-BD9xXAq7.js.map +1 -0
- package/dist/types/index.d.ts +459 -455
- package/dist/utm-rT0TPh8G.js +288 -0
- package/dist/utm-rT0TPh8G.js.map +1 -0
- package/dist/venue-calendar.css +1 -1
- package/dist/venue-calendar.es.js +4 -4
- package/dist/venue-calendar.iife.js +49 -49
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +44 -44
- package/dist/venue-calendar.umd.js.map +1 -1
- package/package.json +199 -195
- package/src/lib/theme.js +222 -222
- package/dist/CartView-eQNOdQSz.js +0 -2354
- package/dist/CartView-eQNOdQSz.js.map +0 -1
- package/dist/Checkout-C4zUFYYG.js.map +0 -1
- package/dist/Checkout-CACB_Qvi.js.map +0 -1
- package/dist/CheckoutTimer-D5llSBPs.js.map +0 -1
- package/dist/ClockIcon-BJnxLZ4f.js.map +0 -1
- package/dist/CollectionView-BLpwWRcN.js.map +0 -1
- package/dist/Event-DXp4Ypv4.js.map +0 -1
- package/dist/EventPage-Dfxyzfg2.js +0 -949
- package/dist/EventPage-Dfxyzfg2.js.map +0 -1
- package/dist/Heading-C_Pc_j8f.js.map +0 -1
- package/dist/ScarcityBadge-CSi-i0-w.js.map +0 -1
- package/dist/SeriesPage-bPZlyzQ6.js +0 -33
- package/dist/SeriesPage-bPZlyzQ6.js.map +0 -1
- package/dist/Spinner-BFIjCOTb.js.map +0 -1
- package/dist/Success-Cv8d2syu.js +0 -886
- package/dist/Success-Cv8d2syu.js.map +0 -1
- package/dist/Text-tWGKQJab.js.map +0 -1
- package/dist/VenueCalendar-Dhoi9hF5.js.map +0 -1
- package/dist/ViewTicketsEmbed-BrXae6cK.js.map +0 -1
- package/dist/labels-CGndTgO9.js.map +0 -1
- package/dist/modalManager.svelte-BgW5Xd6y.js.map +0 -1
- package/dist/promo-WWbp2OWI.js +0 -12
- package/dist/promo-WWbp2OWI.js.map +0 -1
- package/dist/showcase-state-options-BxLP2R1L.js.map +0 -1
- package/dist/transform-CVOgA-Ky.js.map +0 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The wire contract: every backend route this repo names.
|
|
3
|
+
*
|
|
4
|
+
* A test that asserts a route NAME proves nothing unless it proves the name
|
|
5
|
+
* RESOLVES. `expect(fetch).toHaveBeenCalledWith('/api/…')` passes happily
|
|
6
|
+
* against a route the router 404s — that is how 4.0.96 shipped a POST against a
|
|
7
|
+
* route the backend did not serve and locked every buyer out of every
|
|
8
|
+
* password-protected event.
|
|
9
|
+
*
|
|
10
|
+
* This module is the single source of truth two gates read:
|
|
11
|
+
*
|
|
12
|
+
* route-answers-contract.test.ts (every PR, offline)
|
|
13
|
+
* every API call site in src/ must name a route listed here, with a verb
|
|
14
|
+
* and body shape that match.
|
|
15
|
+
*
|
|
16
|
+
* route-answers-probe.test.ts (CI job, hits the deployed backend)
|
|
17
|
+
* every route listed here must be ANSWERED by the router. That is what
|
|
18
|
+
* keeps this file from being fiction.
|
|
19
|
+
*
|
|
20
|
+
* ROUTER-404 vs RESOURCE-404 — the whole diagnosis. The backend replies to an
|
|
21
|
+
* unrouted request with 404 + `{"error":{"code":"NOT_FOUND","message":"Route
|
|
22
|
+
* not found: POST /api/…"}}`. A route that EXISTS but whose resource does not
|
|
23
|
+
* replies 400 "Invalid event ID", or 404 "Order not found", or 401, or 200.
|
|
24
|
+
* Only the "Route not found:" prefix means the name resolved to nothing.
|
|
25
|
+
* `isRouterNotFound()` below is the one place that distinction is made.
|
|
26
|
+
*
|
|
27
|
+
* PROBE SAFETY. The probe test asks PRODUCTION. A probe recipe is only correct if
|
|
28
|
+
* it CANNOT MUTATE — and that claim is worthless unless something checks it. It
|
|
29
|
+
* is load-bearing, not decorative: `POST /orders/create` with an EMPTY body
|
|
30
|
+
* answers 200 and creates a real order.
|
|
31
|
+
*
|
|
32
|
+
* So every mutating row (POST/PUT/DELETE) must declare `probe.safety`, and
|
|
33
|
+
* route-answers-probe.test.ts asserts the declaration against what production
|
|
34
|
+
* actually answers. That holds for EVERY mutating row in BOTH lists — an UNSERVED
|
|
35
|
+
* row is not exempt. "It is a router-404, so no handler runs" is circular: it is
|
|
36
|
+
* true until the day the row's whole purpose is fulfilled and the backend ships the
|
|
37
|
+
* route. The probe sends the request BEFORE it can know whether the name resolved,
|
|
38
|
+
* so on that day the POST lands on a live handler, and the safety claim is the only
|
|
39
|
+
* thing asserting it bounced. Two shapes are legal, and only two:
|
|
40
|
+
*
|
|
41
|
+
* refused — the handler REJECTS the recipe (400 invalid id, 401, 404, 422) and
|
|
42
|
+
* never reaches its write. Assert the status is one it declared.
|
|
43
|
+
*
|
|
44
|
+
* inert — the handler ACCEPTS the recipe but it targets a resource that
|
|
45
|
+
* cannot exist, so it changes nothing, and the response SAYS SO.
|
|
46
|
+
* `POST /orders/complete/:uuid` is a bulk update keyed on the UUID:
|
|
47
|
+
* it answers 200 "Completed 0 reservations" for every UUID, refusing
|
|
48
|
+
* nothing — there is no rejecting recipe to write. Assert the row
|
|
49
|
+
* count in the body: the response itself proves zero rows moved.
|
|
50
|
+
*
|
|
51
|
+
* A row that cannot honestly claim either shape must not be probed at all.
|
|
52
|
+
*/
|
|
53
|
+
/** Host prefixes. `client.ts` prefixes any endpoint not starting with `http`
|
|
54
|
+
* with PUBLIC — a bare `/orders/create` means `${PUBLIC}/orders/create`. */
|
|
55
|
+
export declare const PUBLIC = "/api/v2/public";
|
|
56
|
+
export declare const ORDERS_V2 = "/api/orders/v2/public";
|
|
57
|
+
export declare const ORDERS_V2_ROOT = "/api/orders/v2";
|
|
58
|
+
/**
|
|
59
|
+
* The verbs this contract knows — runtime, not just a type. The source scanner in
|
|
60
|
+
* route-answers-contract.test.ts checks a call site's `method:` against THIS list
|
|
61
|
+
* and goes red on anything else. When the scanner carried its own regex
|
|
62
|
+
* alternation instead, a `method: 'PATCH'` matched nothing, fell through to the
|
|
63
|
+
* `'GET'` default and was checked against the GET row: green, silently, at a route
|
|
64
|
+
* that serves no PATCH. One list, read by both.
|
|
65
|
+
*/
|
|
66
|
+
export declare const HTTP_METHODS: readonly ["GET", "HEAD", "POST", "PUT", "DELETE"];
|
|
67
|
+
export type HttpMethod = (typeof HTTP_METHODS)[number];
|
|
68
|
+
/** Whether a verb written at a call site is one this contract can reason about. */
|
|
69
|
+
export declare function isHttpMethod(verb: string): verb is HttpMethod;
|
|
70
|
+
/**
|
|
71
|
+
* Why a probe cannot mutate production — see PROBE SAFETY above. Required on
|
|
72
|
+
* every POST/PUT/DELETE row and asserted live; the offline gate fails a mutating
|
|
73
|
+
* row that omits it, so the safety claim can never again be author discipline.
|
|
74
|
+
*/
|
|
75
|
+
export type ProbeSafety = {
|
|
76
|
+
kind: 'refused';
|
|
77
|
+
/** Statuses the handler answers when it refuses this recipe. Never 2xx. */
|
|
78
|
+
statuses: readonly number[];
|
|
79
|
+
} | {
|
|
80
|
+
kind: 'inert';
|
|
81
|
+
/** The status the handler answers when it accepts this recipe. */
|
|
82
|
+
status: number;
|
|
83
|
+
/** Must match the response body, and must prove nothing was written. */
|
|
84
|
+
proof: RegExp;
|
|
85
|
+
/** Why accepting it changes nothing. */
|
|
86
|
+
why: string;
|
|
87
|
+
};
|
|
88
|
+
export interface Probe {
|
|
89
|
+
path: string;
|
|
90
|
+
body?: unknown;
|
|
91
|
+
headers?: Record<string, string>;
|
|
92
|
+
/** Required on POST/PUT/DELETE. Reads cannot mutate, so GET/HEAD omit it. */
|
|
93
|
+
safety?: ProbeSafety;
|
|
94
|
+
}
|
|
95
|
+
export interface BackendRoute {
|
|
96
|
+
method: HttpMethod;
|
|
97
|
+
/** Full path from the host root. Path params are written `:name`. */
|
|
98
|
+
path: string;
|
|
99
|
+
/** Whether the route takes a request body. */
|
|
100
|
+
body: 'required' | 'none';
|
|
101
|
+
/** A request that reaches the router and cannot change anything behind it. */
|
|
102
|
+
probe: Probe;
|
|
103
|
+
}
|
|
104
|
+
/** The verbs that can write. These are the probes that need a safety claim. */
|
|
105
|
+
export declare function isMutating(method: HttpMethod): boolean;
|
|
106
|
+
/** Turn a manifest pattern into a matcher: `:name` matches any single segment. */
|
|
107
|
+
export declare function patternMatches(pattern: string, concrete: string): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* A path param value that is syntactically valid and cannot exist.
|
|
110
|
+
*
|
|
111
|
+
* Exported because production code needs it too: `testNetworkConnection()` asks a
|
|
112
|
+
* SERVED route about this id to find out whether the router answers at all. Same
|
|
113
|
+
* id, same reason, one definition — an id-that-cannot-exist written out twice is
|
|
114
|
+
* two ids that can drift.
|
|
115
|
+
*/
|
|
116
|
+
export declare const NONEXISTENT_ID = "00000000-0000-0000-0000-000000000000";
|
|
117
|
+
/**
|
|
118
|
+
* Routes the deployed backend ANSWERS. Verified by route-answers-probe.test.ts.
|
|
119
|
+
* Adding a row here without the probe agreeing is exactly the lie this gate exists
|
|
120
|
+
* to catch — the probe will fail the row.
|
|
121
|
+
*/
|
|
122
|
+
export declare const SERVED_ROUTES: BackendRoute[];
|
|
123
|
+
export interface UnservedRoute extends Omit<BackendRoute, 'body'> {
|
|
124
|
+
/** Where the dead name is spoken. */
|
|
125
|
+
callSites: string[];
|
|
126
|
+
/** What the buyer sees because the name resolves to nothing. */
|
|
127
|
+
impact: string;
|
|
128
|
+
issue: string;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Routes this repo NAMES that the router does not serve — verified router-404.
|
|
132
|
+
*
|
|
133
|
+
* This is a debt ledger, not a sanctioned end-state. It exists so the gate can
|
|
134
|
+
* land red-free while every dead name stays visible and non-regressible: the
|
|
135
|
+
* contract test fails if a NEW call site names a route in neither list, and the
|
|
136
|
+
* probe fails if a route listed here starts answering (fix the call site, then
|
|
137
|
+
* move the row into SERVED_ROUTES). The list may only ever shrink.
|
|
138
|
+
*/
|
|
139
|
+
export declare const UNSERVED_ROUTES: UnservedRoute[];
|
|
140
|
+
export interface RetiredRoute {
|
|
141
|
+
method: HttpMethod;
|
|
142
|
+
/** The dead name, exactly as the ledger row used to spell it. */
|
|
143
|
+
path: string;
|
|
144
|
+
/** Who used to speak it, and what happened to them. */
|
|
145
|
+
wasNamedBy: string;
|
|
146
|
+
issue: string;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Dead names this repo has STOPPED speaking. The ledger's graveyard.
|
|
150
|
+
*
|
|
151
|
+
* UNSERVED_ROUTES says "may only ever shrink" — and until now nothing enforced
|
|
152
|
+
* that. Two ways to put a dead name back were wide open: re-add the row, or write
|
|
153
|
+
* a fresh call site and baseline it. Either one turns the debt ledger into a
|
|
154
|
+
* silencer, and a silencer is how the 4.0.96 password outage shipped in the first
|
|
155
|
+
* place.
|
|
156
|
+
*
|
|
157
|
+
* So a retired route is retired in both directions, asserted in
|
|
158
|
+
* route-answers-contract.test.ts:
|
|
159
|
+
*
|
|
160
|
+
* - nothing in src/ may NAME it again (a new call site goes red, not baselined);
|
|
161
|
+
* - it may not reappear in UNSERVED_ROUTES (you cannot re-open the debt);
|
|
162
|
+
* - it may not appear in SERVED_ROUTES either — if the backend genuinely ships
|
|
163
|
+
* the route one day, DELETE the row here in the same commit that adds the
|
|
164
|
+
* served one with a probe recipe proving the router answers it. That is a
|
|
165
|
+
* deliberate two-place edit, which is the whole point: coming back from the
|
|
166
|
+
* dead should cost more than adding a line.
|
|
167
|
+
*/
|
|
168
|
+
export declare const RETIRED_ROUTES: RetiredRoute[];
|
|
169
|
+
/**
|
|
170
|
+
* The router-404 discriminator — the one place the distinction is made.
|
|
171
|
+
*
|
|
172
|
+
* TRUE = the name resolved to nothing (the bug).
|
|
173
|
+
* FALSE = the router answered; whatever the handler then said (400 invalid id,
|
|
174
|
+
* 404 "Order not found", 401, 501, 200) is a RESOURCE-level answer and
|
|
175
|
+
* is none of this gate's business.
|
|
176
|
+
*/
|
|
177
|
+
export declare function isRouterNotFound(status: number, bodyText: string): boolean;
|
|
178
|
+
/** HEAD is answered by the GET route — Express routes the two together. */
|
|
179
|
+
export declare function effectiveMethod(method: HttpMethod): HttpMethod;
|
package/dist/api/api.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("@getmicdrop/svelte-components/utils/logger"),U=require("@getmicdrop/svelte-components/errors"),p=require("@getmicdrop/svelte-components"),M=require("@getmicdrop/svelte-components/datetime"),Ce=require("@getmicdrop/svelte-components/transforms");require("@getmicdrop/svelte-components/utils/timezones");const G=S.createLogger("VC"),be={baseUrl:"https://get-micdrop.com",timeout:3e4,retries:2,retryDelay:500,onError:t=>G.error("API Error:",t)};let g={...be};function $e(t){g={...g,...t}}function Pe(){return{...g}}function c(){return`${g.baseUrl}/api/v2/public`}function Se(){return`${g.baseUrl}/api/public`}function k(){return`${g.baseUrl}/api/orders/v2/public`}async function Te(){return""}const Ee=t=>new Promise(e=>setTimeout(e,t));async function X(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,I=setTimeout(()=>u.abort(),r.timeout),y=e.signal;let P;y&&(y.aborted?u.abort():(P=()=>u.abort(),y.addEventListener("abort",P,{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(I),y&&P&&y.removeEventListener("abort",P)}i<s&&await Ee(r.retryDelay*Math.pow(2,i-1))}throw o}async function b(t,e){return L("GET",t,void 0,e)}async function f(t,e,r){return L("POST",t,e,r)}async function Ie(t,e,r){return L("PUT",t,e,r)}async function ee(t,e){return L("DELETE",t,void 0,e)}async function L(t,e,r,n){const a=e.startsWith("http")?e:`${c()}${e}`;try{const s=await X(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 T(t,e){try{const r=await X(t,{credentials:"include",...e},g);if(!r.ok){const n=await r.json().catch(()=>({}));return G.error(`API request failed: ${r.status}`,n),null}return r.json()}catch(r){return G.error("API request error:",r),null}}function Re(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 Ae(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(Re);return{uuid:r,eventID:n,status:a,expiresAt:s,reservations:i}}const te=["utmSource","utmMedium","utmCampaign","utmContent","utmTerm"],Ne={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 Ue(t){const e={};for(const r of te)e[r]=t.get(Ne[r]);return De(e)}function Oe(){if(typeof window>"u")return!0;try{return window.self===window.top}catch{return!1}}function xe(){const t=typeof window<"u",e=Oe(),r=t?window.location.search:"",n=(typeof document<"u"?document.referrer:"")??"",a=t&&e?window.location.href:"";return{utm:Ue(new URLSearchParams(r)),referrer:n||"",pageUrl:a||""}}let Fe=!1;function Ve(){return typeof window<"u"&&typeof window.__tcfapi=="function"}function Le(){return Ve()}function qe(){return Le()?Fe:!0}const Y="micdrop_session_id",K="micdrop_visitor_id",Me=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function Ge(t){return typeof t=="string"&&Me.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 je(){let t=p.getSessionStorage(Y);return t||(t=ae(),p.setSessionStorage(Y,t)),t}function Be(){if(!qe())return null;const t=p.getLocalStorage(K);if(Ge(t))return t;const e=ae();return p.setLocalStorage(K,e),e}const ze="micdrop_attribution";function We(){const t=p.getSessionStorage(ze);return!t||!t.utm||typeof t.utm.utmSource!="string"?null:t}function O(){const e=We()??xe();return{sessionId:je(),visitorId:Be(),utmSource:e.utm.utmSource,utmMedium:e.utm.utmMedium,utmCampaign:e.utm.utmCampaign,utmContent:e.utm.utmContent,utmTerm:e.utm.utmTerm,referrer:e.referrer||""}}p.createLogger("tracking");const d=S.createLogger("VC");async function He(t,e,r){try{const n=await f(`${k()}/cart/${t}/payment-intent`,{productQuantities:e,...r&&Object.keys(r).length>0?{donationAmounts:r}:{},attribution:O()});if(!n.success)throw d.error("Payment intent creation failed:",n.error),new U.ApiError(n.error||"Failed to create payment intent",n.statusCode??0,{endpoint:`${k()}/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 Je(t,e){if(!t)return null;try{const r=await b(`${k()}/cart/${t}`);if(!r.success)return null;const{uuid:n,eventID:a,status:s,expiresAt:o,reservations:i}=Ae(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 Qe(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(`${k()}/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 Ye(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 Ke(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 Ze(t,e){try{const r=await f(`${c()}/orders/create`,{eventID:t,promoCode:e,attribution:O()});return r.success?r.data:(d.error("Create order failed:",r.error),null)}catch(r){return d.error("createOrder error:",r),null}}async function Xe(t){return T(`${c()}/orders/${t}`)}async function et(t,e){try{const r=await f(`${k()}/validatePaymentIntent/${t}`,{...e,attribution:O()});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 tt(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 rt(t){try{const e=await b(`${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 nt(t={eventID:""}){try{const e=await f(`${c()}/orders/create`,{...t,attribution:O()});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 at(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 q=S.createLogger("VC"),st=()=>k();async function ot(t,e){try{if(!e||!e.trim())return{valid:!1,error:"Promo code is required"};const r=encodeURIComponent(e.trim()),n=await b(`/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 q.error("Error validating promo code:",r),{valid:!1,error:"Network error validating code"}}}async function it(t){try{const e=await b(`/promo-codes/check/${t}`);return e.success?e.data.hasPromoCodes===!0:!0}catch(e){return q.error("Error checking promo codes availability:",e),!0}}async function ct(t,e){try{const r=await f(`${st()}/cart/${t}/apply-promo`,{promoCode:e});return r.success?{success:!0}:{success:!1,error:r.error||"Failed to apply promo code"}}catch(r){return q.error("Error applying promo code:",r),{success:!1,error:"Network error applying code"}}}async function ut(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 q.error("Error removing promo code:",e),{success:!1,error:"Network error removing code"}}}function lt(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 C(t){return{ok:!1,error:t}}function j(t){return{ok:!1,error:t,notFound:!0}}function dt(t){return t.ok}function ft(t){return!t.ok}function E(t,e){return t.ok?t.data:e}const m=S.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?j("event_not_found"):(m.error(`Failed to fetch event details: ${o.status}`),C("event_fetch_failed"));const i=await o.json();return i?z(i):j("event_not_found")}catch(s){return m.error("Error fetching event details:",s),C("event_fetch_failed")}})();return e===fetch&&(F.set(n,a),a.finally(()=>{F.get(n)===a&&F.delete(n)})),a}async function mt(t,e=fetch,r){const n=await se(t,e,r);return n.ok?n.data:null}async function $(t,e,r=n=>n){try{const n=await T(t);return n?z(r(n)):(m.error(`Failed to load (${e}): network or server error`),C(e))}catch(n){return m.error(`Error loading (${e}):`,n),C(e)}}function W(t){return Array.isArray(t)?t:[]}async function oe(t){return $(`${c()}/tickets/event/${t}`,"tickets_fetch_failed",W)}async function pt(t){return E(await oe(t),[])}async function ie(t){return t?$(`${c()}/events/${t}/performers`,"performers_fetch_failed",e=>lt(e)):(m.warn("fetchEventPerformers called without eventId"),C("performers_missing_event_id"))}async function gt(t){return E(await ie(t),{performers:[],showPerformers:!1})}async function ce(t){return t?$(`${c()}/venues/organization/${t}`,"venues_fetch_failed",W):(m.warn("fetchAllVenues called without orgId"),C("venues_missing_org_id"))}async function yt(t){return E(await ce(t),[])}async function ue(t){return t?$(`${c()}/events/venue/${t}`,"venue_events_fetch_failed",W):(m.warn("fetchVenueEvents called without venueId"),C("venue_events_missing_venue_id"))}async function vt(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 $(`${c()}/events/venue/${t}/month/${e}/${r}`,"month_events_fetch_failed",n=>le(n))}async function ht(t,e,r){return E(await de(t,e,r),[])}async function fe(t,e,r){return $(`${c()}/events/organization/${t}/month/${e}/${r}`,"org_month_events_fetch_failed",n=>le(n))}async function _t(t,e,r){return E(await fe(t,e,r),[])}async function me(t){return $(`${c()}/series/${t}/occurrences`,"series_occurrences_fetch_failed")}async function wt(t){const e=await me(t);return e.ok?e.data:null}async function pe(t,e){return $(`${c()}/series/${t}/occurrences?venueId=${e}`,"series_cta_fetch_failed")}async function kt(t,e){const r=await pe(t,e);return r.ok?r.data:null}async function Ct(t,e){try{const r=e?`?slug=${encodeURIComponent(e)}`:"",n=await T(`${c()}/resolve/${encodeURIComponent(String(t))}${r}`);if(!n||!n.type)throw new U.NotFoundError("entity",String(t));return n}catch(r){return m.error("Error resolving public entity:",r),null}}async function bt(t){try{const e=await T(`${c()}/series/${t}/page`);if(!e)throw new U.NotFoundError("series",String(t));return e}catch(e){return m.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 T(r);if(!n)throw new U.NotFoundError("collection",String(t));return n}catch(r){return m.error("Error fetching collection:",r),null}}async function Pt(t,e){try{return(await T(`${c()}/collections/${t}/check-password`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e})}))?.valid===!0}catch(r){return m.error("Error checking collection password:",r),!1}}async function St(t,e){try{const r=await T(`${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 m.error("Error checking event password:",r),{valid:!1}}}async function Tt(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 m.error("Network connection test failed:",r),!1}}const D=S.createLogger("VC");async function ge(t){try{if(!t)return D.warn("getVenue called without venueId"),null;const e=await b(`/venues/${t}`);return e.success?e.data??null:(D.error(`Failed to fetch venue: ${e.statusCode}`),null)}catch(e){return D.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 It(t){try{if(!t)return D.warn("getVenueBySlug called without slug"),null;const e=encodeURIComponent(t),r=await b(`/venues/slug/${e}`);return r.success?r.data??null:(D.error(`Failed to fetch venue by slug: ${r.statusCode}`),null)}catch(e){return D.error("Error fetching venue by slug:",e),null}}function Rt(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 _=S.createLogger("VC"),At="https://get-micdrop.com",Z=`${At}/api/orders/v2`,H=()=>k();async function Nt(t){try{const e=await f(`${Z}/gift-cards`,t);if(!e.success)throw _.error("Gift card purchase creation failed:",e.error),new U.ApiError(e.error||"Failed to create gift card purchase",e.statusCode??0,{endpoint:`${Z}/gift-cards`,method:"POST"});return _.debug("Gift card purchase created:",e.data),e.data}catch(e){return _.error("Gift card purchase creation error:",e),null}}async function Dt(t,e){try{const r=await f(`${H()}/cart/${t}/apply-gift-card`,{giftCardCode:e});return r.success?Rt(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 Ut(t,e){try{const r=await ee(`${H()}/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 Ot(t,e){try{const r=await f(`${H()}/cart/${t}/complete-gift-card-payment`,{customerName:p.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:O()});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 V=S.createLogger("VC"),xt={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 Ft(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:xt[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 Vt(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 Lt(t){const e={waitlistEnabled:!1,soldOut:!1,gated:!1};try{const r=await b(`/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 qt(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(Ce.isHiddenTicketPurchasable),I=(e||[]).filter(l=>l.salesChannel!==2&&!l.isHidden&&!(typeof l.visibility=="number"&&l.visibility>=2));if(I.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,P=!0,v=!0,h=null;for(const l of I){const R=l.salesBegin||l.salesStart||l.saleBegin||l.onSaleStart,x=l.salesEnd||l.saleEnd||l.onSaleEnd,A=l.remainingCapacity??l.quantityRemaining??l.quantity,w=l.soldOut||A!=null&&A<=0,N=R?new Date(R)>o:!1,J=x?new Date(x)<o:!1;if(!w&&!N&&!J&&(y=!0),w||(P=!1),N||(v=!1),N&&R&&!w&&!J){const Q=new Date(R);(!h||Q<h)&&(h=Q)}}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(),R=l/(1e3*60*60),x=l/(1e3*60*60*24),A=N=>M.formatLocal(N,{hour:"numeric",minute:"2-digit",hour12:!0},"en-US");let w;return R<24?w=A(h):x<=7?w=M.formatLocal(h,{weekday:"short",hour:"numeric",minute:"2-digit",hour12:!0},"en-US"):w=`${M.formatLocal(h,{month:"short",day:"numeric"},"en-US")} ${A(h)}`,{text:`On sale ${w}`,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 Mt=ye,Gt=ve;function jt(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:`${p.formatCurrency(p.asUSD(Number.isFinite(n)?n/100:0))}`,ticketCount:e.purchasedTickets.length,status:e.status}}function he(t){return p.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=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,I=i.quantitySold??i.quantity_sold??0;return o+Math.max(0,u-I)},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,Wt=ke,Ht=ke;function Jt(t){return p.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 Kt(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=b;exports.apiPost=f;exports.apiPut=Ie;exports.applyGiftCard=Dt;exports.applyPromoCode=ct;exports.calculateCtaState=_e;exports.cancelReservation=Ke;exports.checkCollectionPassword=Pt;exports.checkEventPassword=St;exports.completeGiftCardPayment=Ot;exports.completeReservation=Ye;exports.computeCtaState=qt;exports.configureApi=$e;exports.createGiftCardPurchase=Nt;exports.createOrder=Ze;exports.createPaymentIntent=He;exports.err=C;exports.errNotFound=j;exports.extendCheckoutSession=tt;exports.extractVenueFees=Kt;exports.fetchAllVenues=yt;exports.fetchAllVenuesResult=ce;exports.fetchEventDetails=mt;exports.fetchEventDetailsResult=se;exports.fetchEventPerformers=gt;exports.fetchEventPerformersResult=ie;exports.fetchEventTickets=pt;exports.fetchEventTicketsResult=oe;exports.fetchPublicCollection=$t;exports.fetchSeriesOccurrences=kt;exports.fetchSeriesOccurrencesResult=pe;exports.fetchSeriesPage=bt;exports.fetchVenueEvents=vt;exports.fetchVenueEventsResult=ue;exports.formatVenueAddress=Zt;exports.getApiConfig=Pe;exports.getCDNImageUrl=he;exports.getCartByUUID=Je;exports.getClientIP=Te;exports.getEventImageUrl=B;exports.getLegacyPublicUrl=Se;exports.getMonthEvents=ht;exports.getMonthEventsResult=de;exports.getOrder=Xe;exports.getOrdersV2Url=k;exports.getOrgMonthEvents=_t;exports.getOrgMonthEventsResult=fe;exports.getPublicBaseUrl=c;exports.getSeriesOccurrences=wt;exports.getSeriesOccurrencesResult=me;exports.getSessionStatus=rt;exports.getVenue=ge;exports.getVenueBySlug=It;exports.getVenueFees=Et;exports.getWaitlistStatus=Lt;exports.hasPromoCodes=it;exports.initiateOrder=nt;exports.isErr=ft;exports.isOk=dt;exports.joinWaitlist=Ft;exports.ok=z;exports.removeGiftCard=Ut;exports.removePromoCode=ut;exports.resolvePublicEntity=Ct;exports.testNetworkConnection=Tt;exports.trackUTMSource=at;exports.transformAvailableTicket=zt;exports.transformEvent=Wt;exports.transformEventData=Ht;exports.transformOrder=Gt;exports.transformOrderForDisplay=jt;exports.transformTicket=Mt;exports.transformVenue=Yt;exports.unwrapOr=E;exports.updateCartQuantities=Qe;exports.validatePaymentIntent=et;exports.validatePromoCode=ot;exports.validateWaitlistToken=Vt;
|
|
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
2
|
//# sourceMappingURL=api.cjs.map
|