@getmicdrop/venue-calendar 3.3.1 → 3.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/{VenueCalendar-Xppig0q_.js → VenueCalendar-BMSfRl2d.js} +10 -13
  2. package/dist/{VenueCalendar-Xppig0q_.js.map → VenueCalendar-BMSfRl2d.js.map} +1 -1
  3. package/dist/api/api.cjs +2 -0
  4. package/dist/api/api.cjs.map +1 -0
  5. package/dist/api/api.mjs +787 -0
  6. package/dist/api/api.mjs.map +1 -0
  7. package/dist/api/client.d.ts +46 -0
  8. package/dist/api/events.d.ts +102 -0
  9. package/dist/api/index.d.ts +38 -0
  10. package/dist/api/orders.d.ts +104 -0
  11. package/dist/api/promo.d.ts +45 -0
  12. package/dist/api/transformers/event.d.ts +86 -0
  13. package/dist/api/transformers/index.d.ts +9 -0
  14. package/dist/api/transformers/order.d.ts +105 -0
  15. package/dist/api/transformers/venue.d.ts +48 -0
  16. package/dist/api/venues.d.ts +33 -0
  17. package/dist/{index-BjErG0CG.js → index-CoJaem3n.js} +2 -2
  18. package/dist/{index-BjErG0CG.js.map → index-CoJaem3n.js.map} +1 -1
  19. package/dist/venue-calendar.css +1 -1
  20. package/dist/venue-calendar.es.js +1 -1
  21. package/dist/venue-calendar.iife.js +4 -4
  22. package/dist/venue-calendar.iife.js.map +1 -1
  23. package/dist/venue-calendar.umd.js +4 -4
  24. package/dist/venue-calendar.umd.js.map +1 -1
  25. package/package.json +96 -94
  26. package/src/lib/api/client.ts +0 -210
  27. package/src/lib/api/events.ts +0 -358
  28. package/src/lib/api/index.ts +0 -182
  29. package/src/lib/api/orders.ts +0 -390
  30. package/src/lib/api/promo.ts +0 -164
  31. package/src/lib/api/transformers/event.ts +0 -248
  32. package/src/lib/api/transformers/index.ts +0 -29
  33. package/src/lib/api/transformers/order.ts +0 -207
  34. package/src/lib/api/transformers/venue.ts +0 -118
  35. package/src/lib/api/venues.ts +0 -100
  36. package/src/lib/utils/api.js +0 -790
  37. package/src/lib/utils/api.test.js +0 -1284
  38. package/src/lib/utils/constants.js +0 -8
  39. package/src/lib/utils/constants.test.js +0 -39
  40. package/src/lib/utils/datetime.js +0 -266
  41. package/src/lib/utils/datetime.test.js +0 -340
  42. package/src/lib/utils/event-transform.js +0 -464
  43. package/src/lib/utils/event-transform.test.js +0 -413
  44. package/src/lib/utils/logger.js +0 -105
  45. package/src/lib/utils/timezone.js +0 -109
  46. package/src/lib/utils/timezone.test.js +0 -222
  47. package/src/lib/utils/utils.js +0 -806
  48. package/src/lib/utils/utils.test.js +0 -959
  49. /package/{src/lib/api/types.ts → dist/api/types.d.ts} +0 -0
@@ -1,358 +0,0 @@
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
- }
@@ -1,182 +0,0 @@
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';