@getmicdrop/venue-calendar 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +661 -661
- package/dist/VenueCalendar-Xppig0q_.js +22015 -0
- package/dist/VenueCalendar-Xppig0q_.js.map +1 -0
- package/dist/index-BjErG0CG.js +486 -0
- package/dist/index-BjErG0CG.js.map +1 -0
- package/dist/types/index.d.ts +395 -0
- package/dist/venue-calendar.css +1 -9
- package/dist/venue-calendar.es.js +25 -0
- package/dist/venue-calendar.es.js.map +1 -0
- package/dist/venue-calendar.iife.js +30 -51
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +52 -0
- package/dist/venue-calendar.umd.js.map +1 -0
- package/package.json +91 -86
- package/src/lib/api/client.ts +210 -0
- package/src/lib/api/events.ts +358 -0
- package/src/lib/api/index.ts +182 -0
- package/src/lib/api/orders.ts +390 -0
- package/src/lib/api/promo.ts +164 -0
- package/src/lib/api/transformers/event.ts +248 -0
- package/src/lib/api/transformers/index.ts +29 -0
- package/src/lib/api/transformers/order.ts +207 -0
- package/src/lib/api/transformers/venue.ts +118 -0
- package/src/lib/api/types.ts +289 -0
- package/src/lib/api/venues.ts +100 -0
- package/src/lib/theme.js +209 -209
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events API
|
|
3
|
+
*
|
|
4
|
+
* Functions for fetching event data, tickets, and performers
|
|
5
|
+
* in the public checkout flow.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { getPublicBaseUrl, simpleFetch } from './client.js';
|
|
10
|
+
import type {
|
|
11
|
+
Event,
|
|
12
|
+
AvailableTicket,
|
|
13
|
+
EventPerformersResponse,
|
|
14
|
+
SeriesOccurrencesResponse,
|
|
15
|
+
} from './types.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Fetch event details
|
|
19
|
+
*
|
|
20
|
+
* Gets full event information including venue and ticket data.
|
|
21
|
+
*
|
|
22
|
+
* @param eventId - The event ID
|
|
23
|
+
* @param customFetch - Optional custom fetch function (for SSR)
|
|
24
|
+
* @returns Event details or null on error
|
|
25
|
+
*/
|
|
26
|
+
export async function fetchEventDetails(
|
|
27
|
+
eventId: string | number,
|
|
28
|
+
customFetch: typeof fetch = fetch
|
|
29
|
+
): Promise<Event | null> {
|
|
30
|
+
try {
|
|
31
|
+
const response = await customFetch(`${getPublicBaseUrl()}/events/${eventId}`);
|
|
32
|
+
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(`Failed to fetch event details: ${response.status}`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return response.json();
|
|
38
|
+
} catch (error) {
|
|
39
|
+
logger.error('Error fetching event details:', error);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Fetch available tickets for an event
|
|
46
|
+
*
|
|
47
|
+
* Returns all ticket types that are currently available for sale.
|
|
48
|
+
*
|
|
49
|
+
* @param eventId - The event ID
|
|
50
|
+
* @returns Array of available tickets
|
|
51
|
+
*/
|
|
52
|
+
export async function fetchEventTickets(
|
|
53
|
+
eventId: string | number
|
|
54
|
+
): Promise<AvailableTicket[]> {
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(
|
|
57
|
+
`${getPublicBaseUrl()}/tickets/event/${eventId}`
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
throw new Error(`Failed to fetch tickets: ${response.status}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const tickets = await response.json();
|
|
65
|
+
return Array.isArray(tickets) ? tickets : [];
|
|
66
|
+
} catch (error) {
|
|
67
|
+
logger.error('Error fetching tickets:', error);
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Fetch performers for an event
|
|
74
|
+
*
|
|
75
|
+
* Returns the lineup with pre-resolved avatar URLs.
|
|
76
|
+
*
|
|
77
|
+
* @param eventId - The event ID
|
|
78
|
+
* @returns Performers list and visibility flag
|
|
79
|
+
*/
|
|
80
|
+
export async function fetchEventPerformers(
|
|
81
|
+
eventId: string | number
|
|
82
|
+
): Promise<EventPerformersResponse> {
|
|
83
|
+
try {
|
|
84
|
+
if (!eventId) {
|
|
85
|
+
logger.warn('fetchEventPerformers called without eventId');
|
|
86
|
+
return { performers: [], showPerformers: false };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const response = await fetch(
|
|
90
|
+
`${getPublicBaseUrl()}/events/${eventId}/performers`
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
logger.error(
|
|
95
|
+
`Failed to fetch performers: ${response.status} ${response.statusText}`
|
|
96
|
+
);
|
|
97
|
+
return { performers: [], showPerformers: false };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const data = await response.json();
|
|
101
|
+
return {
|
|
102
|
+
performers: Array.isArray(data.performers) ? data.performers : [],
|
|
103
|
+
showPerformers: data.showPerformers === true,
|
|
104
|
+
};
|
|
105
|
+
} catch (error) {
|
|
106
|
+
logger.error('Error fetching event performers:', error);
|
|
107
|
+
return { performers: [], showPerformers: false };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Fetch all venues for an organization
|
|
113
|
+
*
|
|
114
|
+
* @param orgId - The organization ID
|
|
115
|
+
* @returns Array of venues
|
|
116
|
+
*/
|
|
117
|
+
export async function fetchAllVenues(orgId: string | number): Promise<any[]> {
|
|
118
|
+
try {
|
|
119
|
+
if (!orgId) {
|
|
120
|
+
logger.warn('fetchAllVenues called without orgId');
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const response = await fetch(
|
|
125
|
+
`${getPublicBaseUrl()}/venues/organization/${orgId}`
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
if (!response.ok) {
|
|
129
|
+
logger.error(
|
|
130
|
+
`Failed to fetch venues: ${response.status} ${response.statusText}`
|
|
131
|
+
);
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const venues = await response.json();
|
|
136
|
+
return Array.isArray(venues) ? venues : [];
|
|
137
|
+
} catch (error) {
|
|
138
|
+
logger.error('Error fetching venues:', error);
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Fetch events for a venue
|
|
145
|
+
*
|
|
146
|
+
* @param venueId - The venue ID
|
|
147
|
+
* @returns Array of events
|
|
148
|
+
*/
|
|
149
|
+
export async function fetchVenueEvents(venueId: string | number): Promise<Event[]> {
|
|
150
|
+
try {
|
|
151
|
+
if (!venueId) {
|
|
152
|
+
logger.warn('fetchVenueEvents called without venueId');
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const response = await fetch(
|
|
157
|
+
`${getPublicBaseUrl()}/events/venue/${venueId}`
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
if (!response.ok) {
|
|
161
|
+
logger.error(
|
|
162
|
+
`Failed to fetch venue events: ${response.status} ${response.statusText}`
|
|
163
|
+
);
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const events = await response.json();
|
|
168
|
+
return Array.isArray(events) ? events : [];
|
|
169
|
+
} catch (error) {
|
|
170
|
+
logger.error('Error fetching venue events:', error);
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Get events for a specific month
|
|
177
|
+
*
|
|
178
|
+
* Used for calendar views to efficiently load events.
|
|
179
|
+
*
|
|
180
|
+
* @param venueId - The venue ID
|
|
181
|
+
* @param year - The year (e.g., 2024)
|
|
182
|
+
* @param month - The month (1-12)
|
|
183
|
+
* @returns Array of events for the month
|
|
184
|
+
*/
|
|
185
|
+
export async function getMonthEvents(
|
|
186
|
+
venueId: string | number,
|
|
187
|
+
year: number,
|
|
188
|
+
month: number
|
|
189
|
+
): Promise<Event[]> {
|
|
190
|
+
try {
|
|
191
|
+
const response = await fetch(
|
|
192
|
+
`${getPublicBaseUrl()}/events/venue/${venueId}/month/${year}/${month}`
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
if (!response.ok) {
|
|
196
|
+
logger.error(`Failed to fetch month events: ${response.status}`);
|
|
197
|
+
return [];
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const data = await response.json();
|
|
201
|
+
return Array.isArray(data.events) ? data.events : Array.isArray(data) ? data : [];
|
|
202
|
+
} catch (error) {
|
|
203
|
+
logger.error('Error fetching month events:', error);
|
|
204
|
+
return [];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Get events for an organization for a specific month
|
|
210
|
+
*
|
|
211
|
+
* @param orgId - The organization ID
|
|
212
|
+
* @param year - The year (e.g., 2024)
|
|
213
|
+
* @param month - The month (1-12)
|
|
214
|
+
* @returns Array of events for the month
|
|
215
|
+
*/
|
|
216
|
+
export async function getOrgMonthEvents(
|
|
217
|
+
orgId: string | number,
|
|
218
|
+
year: number,
|
|
219
|
+
month: number
|
|
220
|
+
): Promise<Event[]> {
|
|
221
|
+
try {
|
|
222
|
+
const response = await fetch(
|
|
223
|
+
`${getPublicBaseUrl()}/events/organization/${orgId}/month/${year}/${month}`
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
if (!response.ok) {
|
|
227
|
+
logger.error(`Failed to fetch org month events: ${response.status}`);
|
|
228
|
+
return [];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const data = await response.json();
|
|
232
|
+
return Array.isArray(data.events) ? data.events : Array.isArray(data) ? data : [];
|
|
233
|
+
} catch (error) {
|
|
234
|
+
logger.error('Error fetching org month events:', error);
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Get series occurrences for date selector
|
|
241
|
+
*
|
|
242
|
+
* Returns all instances of a recurring event series.
|
|
243
|
+
*
|
|
244
|
+
* @param eventSeriesId - The series ID
|
|
245
|
+
* @returns Series occurrences
|
|
246
|
+
*/
|
|
247
|
+
export async function getSeriesOccurrences(
|
|
248
|
+
eventSeriesId: number
|
|
249
|
+
): Promise<SeriesOccurrencesResponse | null> {
|
|
250
|
+
try {
|
|
251
|
+
const response = await fetch(
|
|
252
|
+
`${getPublicBaseUrl()}/series/${eventSeriesId}/occurrences`
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
if (!response.ok) {
|
|
256
|
+
logger.error(`Failed to fetch series occurrences: ${response.status}`);
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return response.json();
|
|
261
|
+
} catch (error) {
|
|
262
|
+
logger.error('Error fetching series occurrences:', error);
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Fetch series occurrences with CTA state
|
|
269
|
+
*
|
|
270
|
+
* Returns full series data including availability status.
|
|
271
|
+
*
|
|
272
|
+
* @param eventSeriesId - The series ID
|
|
273
|
+
* @param venueId - The venue ID
|
|
274
|
+
* @returns Series occurrences with CTA state
|
|
275
|
+
*/
|
|
276
|
+
export async function fetchSeriesOccurrences(
|
|
277
|
+
eventSeriesId: number,
|
|
278
|
+
venueId: string | number
|
|
279
|
+
): Promise<SeriesOccurrencesResponse | null> {
|
|
280
|
+
try {
|
|
281
|
+
const response = await fetch(
|
|
282
|
+
`${getPublicBaseUrl()}/series/${eventSeriesId}/occurrences?venueId=${venueId}`
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
if (!response.ok) {
|
|
286
|
+
logger.error(`Failed to fetch series with CTA: ${response.status}`);
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return response.json();
|
|
291
|
+
} catch (error) {
|
|
292
|
+
logger.error('Error fetching series occurrences:', error);
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Check event password
|
|
299
|
+
*
|
|
300
|
+
* Validates password for password-protected events.
|
|
301
|
+
*
|
|
302
|
+
* @param eventId - The event ID
|
|
303
|
+
* @param password - The password to check
|
|
304
|
+
* @returns Whether the password is valid
|
|
305
|
+
*/
|
|
306
|
+
export async function checkEventPassword(
|
|
307
|
+
eventId: string | number,
|
|
308
|
+
password: string
|
|
309
|
+
): Promise<boolean> {
|
|
310
|
+
try {
|
|
311
|
+
const encodedPassword = encodeURIComponent(password);
|
|
312
|
+
const response = await fetch(
|
|
313
|
+
`${getPublicBaseUrl()}/events/${eventId}/check-password/${encodedPassword}`
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
if (!response.ok) {
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
const result = await response.json();
|
|
321
|
+
return result.valid === true;
|
|
322
|
+
} catch (error) {
|
|
323
|
+
logger.error('Error checking event password:', error);
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Test network connection
|
|
330
|
+
*
|
|
331
|
+
* Health check endpoint for connectivity testing.
|
|
332
|
+
*
|
|
333
|
+
* @param orgId - Optional org ID
|
|
334
|
+
* @param venueId - Optional venue ID
|
|
335
|
+
* @returns Whether the connection is working
|
|
336
|
+
*/
|
|
337
|
+
export async function testNetworkConnection(
|
|
338
|
+
orgId?: string | number,
|
|
339
|
+
venueId?: string | number
|
|
340
|
+
): Promise<boolean> {
|
|
341
|
+
try {
|
|
342
|
+
// Use a simple endpoint to test connectivity
|
|
343
|
+
const url = venueId
|
|
344
|
+
? `${getPublicBaseUrl()}/events/venue/${venueId}`
|
|
345
|
+
: orgId
|
|
346
|
+
? `${getPublicBaseUrl()}/venues/organization/${orgId}`
|
|
347
|
+
: `${getPublicBaseUrl()}/health`;
|
|
348
|
+
|
|
349
|
+
const response = await fetch(url, {
|
|
350
|
+
method: 'HEAD',
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
return response.ok;
|
|
354
|
+
} catch (error) {
|
|
355
|
+
logger.error('Network connection test failed:', error);
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MicDrop Public Checkout API
|
|
3
|
+
*
|
|
4
|
+
* This module provides a complete API layer for the public checkout flow:
|
|
5
|
+
* - Order creation and management
|
|
6
|
+
* - Payment processing with Stripe
|
|
7
|
+
* - Promo code validation
|
|
8
|
+
* - Event and venue data fetching
|
|
9
|
+
* - Session management
|
|
10
|
+
*
|
|
11
|
+
* All endpoints are public (no authentication required) and use
|
|
12
|
+
* the /api/v2/public base path.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import {
|
|
17
|
+
* createPaymentIntent,
|
|
18
|
+
* validatePromoCode,
|
|
19
|
+
* transformOrder,
|
|
20
|
+
* } from '@getmicdrop/venue-calendar/api';
|
|
21
|
+
*
|
|
22
|
+
* // Create payment intent
|
|
23
|
+
* const intent = await createPaymentIntent(cartId, { 123: 2 });
|
|
24
|
+
*
|
|
25
|
+
* // Validate promo code
|
|
26
|
+
* const promo = await validatePromoCode(eventId, 'DISCOUNT10');
|
|
27
|
+
*
|
|
28
|
+
* // Transform order for display
|
|
29
|
+
* const order = transformOrder(apiResponse);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Client Configuration
|
|
35
|
+
// ============================================================================
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
configureApi,
|
|
39
|
+
getApiConfig,
|
|
40
|
+
getPublicBaseUrl,
|
|
41
|
+
getLegacyPublicUrl,
|
|
42
|
+
getOrdersPublicUrl,
|
|
43
|
+
getClientIP,
|
|
44
|
+
apiGet,
|
|
45
|
+
apiPost,
|
|
46
|
+
apiPut,
|
|
47
|
+
apiDelete,
|
|
48
|
+
} from './client.js';
|
|
49
|
+
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// Orders API
|
|
52
|
+
// ============================================================================
|
|
53
|
+
|
|
54
|
+
export {
|
|
55
|
+
// Payment
|
|
56
|
+
createPaymentIntent,
|
|
57
|
+
validatePaymentIntent,
|
|
58
|
+
|
|
59
|
+
// Order lifecycle
|
|
60
|
+
createOrder,
|
|
61
|
+
getOrder,
|
|
62
|
+
completeReservation,
|
|
63
|
+
cancelReservation,
|
|
64
|
+
|
|
65
|
+
// Session management
|
|
66
|
+
extendCheckoutSession,
|
|
67
|
+
getSessionStatus,
|
|
68
|
+
|
|
69
|
+
// Legacy aliases (for micdrop-frontend compatibility)
|
|
70
|
+
initiateOrder,
|
|
71
|
+
trackUTMSource,
|
|
72
|
+
} from './orders.js';
|
|
73
|
+
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Promo Codes API
|
|
76
|
+
// ============================================================================
|
|
77
|
+
|
|
78
|
+
export {
|
|
79
|
+
validatePromoCode,
|
|
80
|
+
hasPromoCodes,
|
|
81
|
+
applyPromoCode,
|
|
82
|
+
removePromoCode,
|
|
83
|
+
} from './promo.js';
|
|
84
|
+
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// Events API
|
|
87
|
+
// ============================================================================
|
|
88
|
+
|
|
89
|
+
export {
|
|
90
|
+
fetchEventDetails,
|
|
91
|
+
fetchEventTickets,
|
|
92
|
+
fetchEventPerformers,
|
|
93
|
+
fetchAllVenues,
|
|
94
|
+
fetchVenueEvents,
|
|
95
|
+
getMonthEvents,
|
|
96
|
+
getOrgMonthEvents,
|
|
97
|
+
getSeriesOccurrences,
|
|
98
|
+
fetchSeriesOccurrences,
|
|
99
|
+
checkEventPassword,
|
|
100
|
+
testNetworkConnection,
|
|
101
|
+
} from './events.js';
|
|
102
|
+
|
|
103
|
+
// ============================================================================
|
|
104
|
+
// Venues API
|
|
105
|
+
// ============================================================================
|
|
106
|
+
|
|
107
|
+
export {
|
|
108
|
+
getVenue,
|
|
109
|
+
getVenueFees,
|
|
110
|
+
getVenueBySlug,
|
|
111
|
+
} from './venues.js';
|
|
112
|
+
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Transformers
|
|
115
|
+
// ============================================================================
|
|
116
|
+
|
|
117
|
+
export {
|
|
118
|
+
// Order
|
|
119
|
+
transformOrder,
|
|
120
|
+
transformTicket,
|
|
121
|
+
transformOrderForDisplay,
|
|
122
|
+
|
|
123
|
+
// Event
|
|
124
|
+
transformEvent,
|
|
125
|
+
transformEventData,
|
|
126
|
+
transformAvailableTicket,
|
|
127
|
+
getCDNImageUrl,
|
|
128
|
+
getEventImageUrl,
|
|
129
|
+
calculateCtaState,
|
|
130
|
+
|
|
131
|
+
// Venue
|
|
132
|
+
transformVenue,
|
|
133
|
+
extractVenueFees,
|
|
134
|
+
formatVenueAddress,
|
|
135
|
+
} from './transformers/index.js';
|
|
136
|
+
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// Types
|
|
139
|
+
// ============================================================================
|
|
140
|
+
|
|
141
|
+
export type {
|
|
142
|
+
// API Configuration
|
|
143
|
+
ApiConfig,
|
|
144
|
+
ApiResponse,
|
|
145
|
+
|
|
146
|
+
// Orders & Payment
|
|
147
|
+
PaymentIntentRequest,
|
|
148
|
+
PaymentIntentResponse,
|
|
149
|
+
CompleteReservationResponse,
|
|
150
|
+
CancelReservationResponse,
|
|
151
|
+
CreateOrderRequest,
|
|
152
|
+
CreateOrderResponse,
|
|
153
|
+
ValidatePaymentRequest,
|
|
154
|
+
ValidatePaymentResponse,
|
|
155
|
+
AttendeeInfo,
|
|
156
|
+
|
|
157
|
+
// Session
|
|
158
|
+
ExtendSessionRequest,
|
|
159
|
+
ExtendSessionResponse,
|
|
160
|
+
SessionStatus,
|
|
161
|
+
|
|
162
|
+
// Promo
|
|
163
|
+
PromoValidationResponse,
|
|
164
|
+
HasPromoCodesResponse,
|
|
165
|
+
|
|
166
|
+
// Orders
|
|
167
|
+
Order,
|
|
168
|
+
PurchasedTicket,
|
|
169
|
+
|
|
170
|
+
// Events
|
|
171
|
+
Event,
|
|
172
|
+
AvailableTicket,
|
|
173
|
+
EventPerformersResponse,
|
|
174
|
+
Performer,
|
|
175
|
+
|
|
176
|
+
// Venues
|
|
177
|
+
Venue,
|
|
178
|
+
|
|
179
|
+
// Series
|
|
180
|
+
SeriesOccurrence,
|
|
181
|
+
SeriesOccurrencesResponse,
|
|
182
|
+
} from './types.js';
|