@session-services/web-elements 0.1.28 → 0.1.30

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 (32) hide show
  1. package/README.md +5 -0
  2. package/dist/cjs/{index-BYBgrATL.js → index-B2ZmNnji.js} +292 -245
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/session-services-elements.cjs.js +3 -3
  5. package/dist/cjs/session-services-formatted-text.cjs.entry.js +8 -20
  6. package/dist/cjs/session-services-ticketing.cjs.entry.js +1051 -526
  7. package/dist/collection/collection-manifest.json +4 -3
  8. package/dist/collection/components/session-services-ticketing/session-services-ticketing.js +116 -45
  9. package/dist/collection/components/session-services-ticketing/session-services-ticketing.logic.js +15 -5
  10. package/dist/collection/components/session-services-ticketing/session-services-ticketing.logic.test.js +28 -1
  11. package/dist/collection/components/session-services-ticketing/session-services-ticketing.test.js +71 -1
  12. package/dist/components/index.d.ts +2 -0
  13. package/dist/components/index.js +1 -1311
  14. package/dist/components/session-services-formatted-text.js +1 -1802
  15. package/dist/components/session-services-ticketing.js +1 -25072
  16. package/dist/esm/{index-CNOpF6tk.js → index-DhbVMqIT.js} +292 -245
  17. package/dist/esm/loader.js +3 -3
  18. package/dist/esm/session-services-elements.js +4 -4
  19. package/dist/esm/session-services-formatted-text.entry.js +8 -20
  20. package/dist/esm/session-services-ticketing.entry.js +1051 -526
  21. package/dist/session-services-elements/p-4dd3f723.entry.js +1 -0
  22. package/dist/session-services-elements/{p-703444ed.entry.js → p-8483ca88.entry.js} +1 -1
  23. package/dist/session-services-elements/p-DhbVMqIT.js +2 -0
  24. package/dist/session-services-elements/session-services-elements.esm.js +1 -1
  25. package/dist/types/components/session-services-ticketing/session-services-ticketing.d.ts +15 -4
  26. package/dist/types/components/session-services-ticketing/session-services-ticketing.logic.d.ts +5 -3
  27. package/dist/types/components.d.ts +36 -8
  28. package/dist/types/index.d.ts +1 -1
  29. package/dist/types/stencil-public-runtime.d.ts +67 -5
  30. package/package.json +17 -13
  31. package/dist/session-services-elements/p-1acfcdfd.entry.js +0 -1
  32. package/dist/session-services-elements/p-CNOpF6tk.js +0 -2
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "entries": [
3
- "components/session-services-formatted-text/session-services-formatted-text.js",
4
- "components/session-services-ticketing/session-services-ticketing.js"
3
+ "components/session-services-ticketing/session-services-ticketing.js",
4
+ "components/session-services-formatted-text/session-services-formatted-text.js"
5
5
  ],
6
+ "mixins": [],
6
7
  "compiler": {
7
8
  "name": "@stencil/core",
8
- "version": "4.39.0",
9
+ "version": "4.43.5",
9
10
  "typescriptVersion": "5.8.3"
10
11
  },
11
12
  "collections": [],
@@ -36,8 +36,12 @@ function parseJson(value) {
36
36
  return null;
37
37
  }
38
38
  }
39
- function hasAnalyticsIds(event) {
40
- return Boolean(event.teamId && event.promoterId);
39
+ function analyticsSkipReason(event) {
40
+ if (!event.teamId)
41
+ return "missing_team_id";
42
+ if (!event.promoterId)
43
+ return "missing_promoter_id";
44
+ return null;
41
45
  }
42
46
  function eventVenueName(event) {
43
47
  return [event.location?.venue?.name, event.location?.name].find(Boolean);
@@ -128,6 +132,7 @@ export class SessionsTicketing {
128
132
  checkoutInit;
129
133
  cartUpdate;
130
134
  errorOccurred;
135
+ analyticsEventSkipped;
131
136
  client;
132
137
  analytics;
133
138
  mediaQueryList;
@@ -269,36 +274,62 @@ export class SessionsTicketing {
269
274
  }
270
275
  };
271
276
  trackEvent(eventType, properties = {}) {
272
- const context = this.analyticsContext();
277
+ const context = this.analyticsContext(eventType);
273
278
  if (!context)
274
279
  return;
275
280
  context.analytics.track(eventType, {
276
- event_id: this.eventId,
277
- team_id: context.event.teamId,
278
- promoter_id: context.event.promoterId,
279
- event_name: context.event.name,
280
- event_slug: context.event.slug,
281
- currency: context.event.currency,
281
+ ...this.analyticsProperties(context.event),
282
282
  ...properties,
283
283
  });
284
284
  }
285
- analyticsContext() {
286
- const analytics = this.activeAnalytics();
287
- const event = this.analyticsEvent();
288
- if (!analytics || !event)
289
- return undefined;
290
- return { analytics, event };
285
+ analyticsProperties(event, properties = {}) {
286
+ return {
287
+ event_id: this.eventId,
288
+ team_id: event.teamId,
289
+ promoter_id: event.promoterId,
290
+ event_name: event.name,
291
+ event_slug: event.slug,
292
+ currency: event.currency,
293
+ ...properties,
294
+ };
291
295
  }
292
- activeAnalytics() {
296
+ analyticsForEvent(eventType, event) {
293
297
  if (!this.enableAnalytics)
294
298
  return undefined;
299
+ const reason = analyticsSkipReason(event);
300
+ if (reason) {
301
+ this.emitAnalyticsEventSkipped(eventType, reason, event);
302
+ return undefined;
303
+ }
304
+ if (!this.analytics) {
305
+ this.emitAnalyticsEventSkipped(eventType, "analytics_not_initialized", event);
306
+ return undefined;
307
+ }
295
308
  return this.analytics;
296
309
  }
297
- analyticsEvent() {
310
+ analyticsContext(eventType) {
298
311
  const event = this.event;
299
- if (!event)
312
+ if (!event) {
313
+ this.emitAnalyticsEventSkipped(eventType, "missing_event");
314
+ return undefined;
315
+ }
316
+ const analytics = this.analyticsForEvent(eventType, event);
317
+ if (!analytics)
300
318
  return undefined;
301
- return hasAnalyticsIds(event) ? event : undefined;
319
+ return { analytics, event };
320
+ }
321
+ emitAnalyticsEventSkipped(eventType, reason, event, err) {
322
+ const detail = {
323
+ eventType,
324
+ eventId: this.eventId,
325
+ reason,
326
+ promoterId: event?.promoterId || undefined,
327
+ teamId: event?.teamId || undefined,
328
+ };
329
+ this.analyticsEventSkipped.emit(detail);
330
+ if (this.debugAnalytics) {
331
+ console.warn("[SessionServicesTicketing] Analytics event skipped:", detail, err);
332
+ }
302
333
  }
303
334
  getLowestPrice() {
304
335
  const event = this.event;
@@ -357,7 +388,9 @@ export class SessionsTicketing {
357
388
  this.quoteError = null;
358
389
  }
359
390
  trackLoadedEvent(event) {
360
- this.setupAnalytics(event);
391
+ if (!this.setupAnalytics(event))
392
+ return;
393
+ this.trackPageViewed(event);
361
394
  this.trackProductViewed(event);
362
395
  this.trackEvent("Product List Viewed", {
363
396
  list_id: this.eventId,
@@ -366,19 +399,32 @@ export class SessionsTicketing {
366
399
  });
367
400
  }
368
401
  setupAnalytics(event) {
369
- if (!this.enableAnalytics || this.analytics || !event.promoterId)
402
+ if (!this.enableAnalytics)
403
+ return false;
404
+ const reason = analyticsSkipReason(event);
405
+ if (reason) {
406
+ this.emitAnalyticsEventSkipped("Page Viewed", reason, event);
407
+ return false;
408
+ }
409
+ if (this.analytics)
410
+ return true;
411
+ try {
412
+ this.analytics = createAnalytics({
413
+ client: this.client,
414
+ debug: this.debugAnalytics,
415
+ });
416
+ }
417
+ catch (err) {
418
+ this.emitAnalyticsEventSkipped("Page Viewed", "analytics_initialization_failed", event, err);
419
+ return false;
420
+ }
421
+ return true;
422
+ }
423
+ trackPageViewed(event) {
424
+ const analytics = this.analyticsForEvent("Page Viewed", event);
425
+ if (!analytics)
370
426
  return;
371
- this.analytics = createAnalytics({
372
- client: this.client,
373
- debug: this.debugAnalytics,
374
- });
375
- this.analytics.page("Ticketing Widget", {
376
- event_id: this.eventId,
377
- team_id: event.teamId,
378
- promoter_id: event.promoterId,
379
- event_name: event.name,
380
- event_slug: event.slug,
381
- });
427
+ analytics.page("Ticketing Widget", this.analyticsProperties(event));
382
428
  }
383
429
  trackProductViewed(event) {
384
430
  const lowestPrice = this.getLowestPrice();
@@ -1214,10 +1260,11 @@ export class SessionsTicketing {
1214
1260
  renderStickyExternalTicketing(state) {
1215
1261
  if (!this.stickyCheckout)
1216
1262
  return null;
1217
- if (!state.externalTicketUrl)
1263
+ const url = state.externalTicketUrl;
1264
+ if (!url)
1218
1265
  return null;
1219
- const domain = urlDomain(state.externalTicketUrl);
1220
- return (h("div", { class: "sticky-checkout-bar" }, h("a", { class: "external-ticket-button sticky-checkout-btn", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer", onClick: () => this.trackExternalTicketClick(state.externalTicketUrl, "sticky") }, h("span", { class: "external-ticket-label" }, "Get tickets"), h("span", { class: "external-ticket-domain" }, "via ", domain))));
1266
+ const domain = urlDomain(url);
1267
+ return (h("div", { class: "sticky-checkout-bar" }, h("a", { class: "external-ticket-button sticky-checkout-btn", href: url, target: "_blank", rel: "noreferrer", onClick: () => this.trackExternalTicketClick(url, "sticky") }, h("span", { class: "external-ticket-label" }, "Get tickets"), h("span", { class: "external-ticket-domain" }, "via ", domain))));
1221
1268
  }
1222
1269
  renderModal() {
1223
1270
  if (!this.openModalAdmissionId)
@@ -1280,10 +1327,11 @@ export class SessionsTicketing {
1280
1327
  this.renderCheckoutActions()), this.renderStickyCheckout(state), this.renderModal()));
1281
1328
  }
1282
1329
  renderExternalTicketing(state) {
1283
- const domain = urlDomain(state.externalTicketUrl);
1284
- if (!state.externalTicketUrl)
1330
+ const url = state.externalTicketUrl;
1331
+ if (!url)
1285
1332
  return null;
1286
- return (h("div", { class: "tickets-wrapper" }, h("h2", { class: "tickets-heading" }, state.ticketHeading), h("div", { class: "external-ticket-panel" }, h("p", { class: "external-ticket-warning" }, "This event sells through an external ticketing site. Checkout, tickets, and support are handled there."), h("a", { class: "external-ticket-button inline-external-ticket-button", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer", onClick: () => this.trackExternalTicketClick(state.externalTicketUrl, "inline") }, h("span", { class: "external-ticket-label" }, "Get tickets"), h("span", { class: "external-ticket-domain" }, "via ", domain)))));
1333
+ const domain = urlDomain(url);
1334
+ return (h("div", { class: "tickets-wrapper" }, h("h2", { class: "tickets-heading" }, state.ticketHeading), h("div", { class: "external-ticket-panel" }, h("p", { class: "external-ticket-warning" }, "This event sells through an external ticketing site. Checkout, tickets, and support are handled there."), h("a", { class: "external-ticket-button inline-external-ticket-button", href: url, target: "_blank", rel: "noreferrer", onClick: () => this.trackExternalTicketClick(url, "inline") }, h("span", { class: "external-ticket-label" }, "Get tickets"), h("span", { class: "external-ticket-domain" }, "via ", domain)))));
1287
1335
  }
1288
1336
  renderUnavailableState(state) {
1289
1337
  return (h("div", { class: "empty-ticketing-state" }, h("strong", null, "Tickets Unavailable"), h("span", null, state.isEnded
@@ -1428,7 +1476,7 @@ export class SessionsTicketing {
1428
1476
  "mutable": false,
1429
1477
  "complexType": {
1430
1478
  "original": "| Record<string, { discount: number; gross: number; total: number }>\n | string",
1431
- "resolved": "string | { [x: string]: { discount: number; gross: number; total: number; }; }",
1479
+ "resolved": "string | { discount: number; gross: number; total: number; }",
1432
1480
  "references": {
1433
1481
  "Record": {
1434
1482
  "location": "global",
@@ -1452,12 +1500,13 @@ export class SessionsTicketing {
1452
1500
  "mutable": false,
1453
1501
  "complexType": {
1454
1502
  "original": "OrderQuote | string",
1455
- "resolved": "string | { items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"HIDDEN\"; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; subtitle?: string; description?: string; available?: number; sold?: number; reserved?: number; createdAt?: string; updatedAt?: string; sectionId?: string; }; section?: { name: string; capacity: number; limit: number; order: number; visibility: \"ALWAYS\" | \"HIDDEN\" | \"STACKED\"; location: { createdAt: string; updatedAt: string; name: string; address: string; country: string; latitude: number; longitude: number; timeZone: string; id?: string; googlePlaceId?: string; city?: string; state?: string; postcode?: string; types?: string[]; description?: string; image?: { src: string; alt: string; width: number; height: number; }; venueId?: string; }; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; createdAt?: string; updatedAt?: string; available?: number; sold?: number; reserved?: number; }; }[]; price: { net: number; total: number; gross: number; base: number; booking: number; shipping: number; sms: number; refunded: number; discount: number; gateway: number; dispute: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; couponCode?: { name: string; active: boolean; couponId: string; teamId: string; id?: string; createdAt?: string; updatedAt?: string; uses?: number; }; }",
1503
+ "resolved": "string | { items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"HIDDEN\" | \"AFTER_ADMISSION\"; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; subtitle?: string; description?: string; available?: number; sold?: number; reserved?: number; createdAt?: string; updatedAt?: string; visibleAfterAdmissionId?: string; sectionId?: string; }; section?: { name: string; capacity: number; limit: number; order: number; visibility: \"ALWAYS\" | \"STACKED\" | \"HIDDEN\"; location: { createdAt: string; updatedAt: string; name: string; address: string; country: string; latitude: number; longitude: number; timeZone: string; id?: string; googlePlaceId?: string; city?: string; state?: string; postcode?: string; types?: string[]; description?: string; image?: { src: string; alt: string; width: number; height: number; }; venueId?: string; }; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; createdAt?: string; updatedAt?: string; available?: number; sold?: number; reserved?: number; }; }[]; price: { net: number; total: number; gross: number; base: number; booking: number; shipping: number; sms: number; refunded: number; discount: number; gateway: number; dispute: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; couponCode?: { name: string; active: boolean; couponId: string; teamId: string; id?: string; createdAt?: string; updatedAt?: string; uses?: number; }; }",
1456
1504
  "references": {
1457
1505
  "OrderQuote": {
1458
1506
  "location": "import",
1459
1507
  "path": "@session-services/sdk/schemas",
1460
- "id": "../../sdk/src/schemas.ts::OrderQuote"
1508
+ "id": "../../sdk/src/schemas.ts::OrderQuote",
1509
+ "referenceLocation": "OrderQuote"
1461
1510
  }
1462
1511
  }
1463
1512
  },
@@ -1608,8 +1657,8 @@ export class SessionsTicketing {
1608
1657
  "text": ""
1609
1658
  },
1610
1659
  "complexType": {
1611
- "original": "{\n orderId: string;\n checkoutUrl: string;\n }",
1612
- "resolved": "{ orderId: string; checkoutUrl: string; }",
1660
+ "original": "{\n orderId?: string;\n checkoutUrl?: string;\n }",
1661
+ "resolved": "{ orderId?: string; checkoutUrl?: string; }",
1613
1662
  "references": {}
1614
1663
  }
1615
1664
  }, {
@@ -1624,12 +1673,13 @@ export class SessionsTicketing {
1624
1673
  },
1625
1674
  "complexType": {
1626
1675
  "original": "OrderQuote",
1627
- "resolved": "{ items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"HIDDEN\"; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; subtitle?: string; description?: string; available?: number; sold?: number; reserved?: number; createdAt?: string; updatedAt?: string; sectionId?: string; }; section?: { name: string; capacity: number; limit: number; order: number; visibility: \"ALWAYS\" | \"HIDDEN\" | \"STACKED\"; location: { createdAt: string; updatedAt: string; name: string; address: string; country: string; latitude: number; longitude: number; timeZone: string; id?: string; googlePlaceId?: string; city?: string; state?: string; postcode?: string; types?: string[]; description?: string; image?: { src: string; alt: string; width: number; height: number; }; venueId?: string; }; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; createdAt?: string; updatedAt?: string; available?: number; sold?: number; reserved?: number; }; }[]; price: { net: number; total: number; gross: number; base: number; booking: number; shipping: number; sms: number; refunded: number; discount: number; gateway: number; dispute: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; couponCode?: { name: string; active: boolean; couponId: string; teamId: string; id?: string; createdAt?: string; updatedAt?: string; uses?: number; }; }",
1676
+ "resolved": "{ items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"HIDDEN\" | \"AFTER_ADMISSION\"; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; subtitle?: string; description?: string; available?: number; sold?: number; reserved?: number; createdAt?: string; updatedAt?: string; visibleAfterAdmissionId?: string; sectionId?: string; }; section?: { name: string; capacity: number; limit: number; order: number; visibility: \"ALWAYS\" | \"STACKED\" | \"HIDDEN\"; location: { createdAt: string; updatedAt: string; name: string; address: string; country: string; latitude: number; longitude: number; timeZone: string; id?: string; googlePlaceId?: string; city?: string; state?: string; postcode?: string; types?: string[]; description?: string; image?: { src: string; alt: string; width: number; height: number; }; venueId?: string; }; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; createdAt?: string; updatedAt?: string; available?: number; sold?: number; reserved?: number; }; }[]; price: { net: number; total: number; gross: number; base: number; booking: number; shipping: number; sms: number; refunded: number; discount: number; gateway: number; dispute: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; couponCode?: { name: string; active: boolean; couponId: string; teamId: string; id?: string; createdAt?: string; updatedAt?: string; uses?: number; }; }",
1628
1677
  "references": {
1629
1678
  "OrderQuote": {
1630
1679
  "location": "import",
1631
1680
  "path": "@session-services/sdk/schemas",
1632
- "id": "../../sdk/src/schemas.ts::OrderQuote"
1681
+ "id": "../../sdk/src/schemas.ts::OrderQuote",
1682
+ "referenceLocation": "OrderQuote"
1633
1683
  }
1634
1684
  }
1635
1685
  }
@@ -1648,6 +1698,27 @@ export class SessionsTicketing {
1648
1698
  "resolved": "{ error: string; }",
1649
1699
  "references": {}
1650
1700
  }
1701
+ }, {
1702
+ "method": "analyticsEventSkipped",
1703
+ "name": "analyticsEventSkipped",
1704
+ "bubbles": true,
1705
+ "cancelable": true,
1706
+ "composed": true,
1707
+ "docs": {
1708
+ "tags": [],
1709
+ "text": ""
1710
+ },
1711
+ "complexType": {
1712
+ "original": "AnalyticsEventSkipped",
1713
+ "resolved": "{ eventType: string; eventId: string; reason: AnalyticsSkipReason; promoterId?: string; teamId?: string; }",
1714
+ "references": {
1715
+ "AnalyticsEventSkipped": {
1716
+ "location": "local",
1717
+ "path": "/Users/j/Dev/sessions-repo/packages/elements/web/src/components/session-services-ticketing/session-services-ticketing.tsx",
1718
+ "id": "src/components/session-services-ticketing/session-services-ticketing.tsx::AnalyticsEventSkipped"
1719
+ }
1720
+ }
1721
+ }
1651
1722
  }];
1652
1723
  }
1653
1724
  static get elementRef() { return "host"; }
@@ -1,4 +1,5 @@
1
1
  import { formatNaiveDateTime, isNaiveDateTimeFuture, isNaiveDateTimePast, } from "@session-services/utils/naive-datetime";
2
+ import { getAdmissionReleaseLabel } from "@session-services/utils/admission-release";
2
3
  import { getAdmissionSelectionCapacity, isAdmissionSoldOut, } from "@session-services/utils/ticket-availability";
3
4
  import { createQuoteItemMap } from "@session-services/utils/ticket-quote";
4
5
  const UNLIMITED_CAP = 10;
@@ -50,9 +51,11 @@ function isAdmissionOnSale(admission, zone) {
50
51
  function hasAdmissionCapacity(admission, section) {
51
52
  return getAdmissionSelectionCapacity({ admission, section }) > 0;
52
53
  }
53
- function isAdmissionPurchasable(admission, zone, sections) {
54
+ function isAdmissionPurchasable(admission, admissions, zone, sections) {
54
55
  if (!hasAdmissionSection(admission, sections))
55
56
  return false;
57
+ if (getAdmissionReleaseLabel(admission, admissions, zone))
58
+ return false;
56
59
  if (!isAdmissionOnSale(admission, zone))
57
60
  return false;
58
61
  return hasAdmissionCapacity(admission, admissionSection(admission, sections));
@@ -60,7 +63,7 @@ function isAdmissionPurchasable(admission, zone, sections) {
60
63
  function hasPurchasableAdmissions(event) {
61
64
  const sections = sectionsById(event);
62
65
  const zone = eventTimeZone(event);
63
- return event.admissions.some((admission) => isAdmissionPurchasable(admission, zone, sections));
66
+ return event.admissions.some((admission) => isAdmissionPurchasable(admission, event.admissions, zone, sections));
64
67
  }
65
68
  function admissionSaleLabel(admission, zone) {
66
69
  if (!isNaiveDateTimeFuture(admission.saleStartsAt, zone)) {
@@ -129,7 +132,8 @@ export function visibleAdmissions(event, mode) {
129
132
  if (mode !== "door")
130
133
  return event.admissions;
131
134
  const zone = eventTimeZone(event);
132
- return event.admissions.filter((admission) => admission.saleEndsBehavior === "DOOR" &&
135
+ return event.admissions.filter((admission) => !getAdmissionReleaseLabel(admission, event.admissions, zone) &&
136
+ admission.saleEndsBehavior === "DOOR" &&
133
137
  isNaiveDateTimePast(admission.saleEndsAt, zone));
134
138
  }
135
139
  function isStackableAdmission(input) {
@@ -263,6 +267,7 @@ function showScarcity(admission, soldOut, disabled) {
263
267
  }
264
268
  export function getAdmissionDisplayState(input) {
265
269
  const zone = eventTimeZone(input.event);
270
+ const releaseLabel = getAdmissionReleaseLabel(input.admission, input.event.admissions, zone);
266
271
  const saleNotStarted = isNaiveDateTimeFuture(input.admission.saleStartsAt, zone);
267
272
  const saleEnded = isNaiveDateTimePast(input.admission.saleEndsAt, zone);
268
273
  const saleEndedSoldOut = saleEnded && input.admission.saleEndsBehavior === "SOLD_OUT";
@@ -279,8 +284,10 @@ export function getAdmissionDisplayState(input) {
279
284
  value: input.admission.saleEndsBehavior,
280
285
  });
281
286
  return {
282
- disabled,
283
- label: admissionSaleLabel(input.admission, zone),
287
+ disabled: disabled || Boolean(releaseLabel),
288
+ label: releaseLabel
289
+ ? { ...releaseLabel, tone: "muted" }
290
+ : admissionSaleLabel(input.admission, zone),
284
291
  maxQuantity: maxQuantity(input.admission, input.section),
285
292
  postSale: saleEnded,
286
293
  showScarcity: showScarcity(input.admission, soldOut, disabled),
@@ -340,6 +347,9 @@ export function previewQuoteItems(event) {
340
347
  const zone = eventTimeZone(event);
341
348
  return event.admissions
342
349
  .filter((admission) => {
350
+ if (getAdmissionReleaseLabel(admission, event.admissions, zone)) {
351
+ return false;
352
+ }
343
353
  if (admission.sectionId && !ids.has(admission.sectionId))
344
354
  return false;
345
355
  if (isNaiveDateTimeFuture(admission.saleStartsAt, zone))
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { admissionPriceSavings, discountCouponFromSearch, getAdmissionDisplayState, getAdmissionPriceDisplay, getTicketingState, topLevelTicketItems, visibleAdmissions, } from "./session-services-ticketing.logic";
2
+ import { admissionPriceSavings, discountCouponFromSearch, getAdmissionDisplayState, getAdmissionPriceDisplay, getTicketingState, previewQuoteItems, topLevelTicketItems, visibleAdmissions, } from "./session-services-ticketing.logic";
3
3
  const futureStart = "2030-01-01T20:00:00";
4
4
  const futureEnd = "2030-01-01T23:00:00";
5
5
  const pastStart = "2020-01-01T20:00:00";
@@ -178,6 +178,33 @@ describe("session-services-ticketing logic", () => {
178
178
  expect(state.disabled).toBe(true);
179
179
  expect(state.label?.text).toContain("On sale");
180
180
  });
181
+ it("disables dependent releases until the previous release ends", () => {
182
+ const first = admission({
183
+ id: "adm_first",
184
+ name: "First Release",
185
+ capacity: 100,
186
+ sold: 20,
187
+ });
188
+ const second = admission({
189
+ id: "adm_second",
190
+ name: "Second Release",
191
+ visibility: "AFTER_ADMISSION",
192
+ visibleAfterAdmissionId: first.id,
193
+ });
194
+ const data = event({ admissions: [first, second] });
195
+ const state = getAdmissionDisplayState({
196
+ admission: second,
197
+ event: data,
198
+ });
199
+ expect(state.disabled).toBe(true);
200
+ expect(state.label).toEqual({
201
+ text: "Available soon",
202
+ tone: "muted",
203
+ });
204
+ expect(previewQuoteItems(data).map((item) => item.admissionId)).toEqual([
205
+ first.id,
206
+ ]);
207
+ });
181
208
  it("treats sold-out sale endings as sold out instead of a price label", () => {
182
209
  const data = event({
183
210
  admissions: [
@@ -129,6 +129,15 @@ function rendered(value, predicate) {
129
129
  const matches = predicate(value) ? [value] : [];
130
130
  return matches.concat(value.children.flatMap((item) => rendered(item, predicate)));
131
131
  }
132
+ function textContent(value) {
133
+ if (typeof value === "string")
134
+ return value;
135
+ if (Array.isArray(value))
136
+ return value.map(textContent).join(" ");
137
+ if (!isRenderNode(value))
138
+ return "";
139
+ return textContent(value.children);
140
+ }
132
141
  function hasClass(node, name) {
133
142
  return String(node.props.class ?? "")
134
143
  .split(/\s+/)
@@ -160,6 +169,7 @@ function widget() {
160
169
  item.cartUpdate = { emit: vi.fn() };
161
170
  item.checkoutInit = { emit: vi.fn() };
162
171
  item.errorOccurred = { emit: vi.fn() };
172
+ item.analyticsEventSkipped = { emit: vi.fn() };
163
173
  item.client = {
164
174
  event: {
165
175
  get: vi.fn(),
@@ -377,6 +387,53 @@ describe("session-services-ticketing component", () => {
377
387
  cta_surface: "sticky",
378
388
  }));
379
389
  });
390
+ it("tracks page, product, and product list views after event load", () => {
391
+ const item = widget();
392
+ const page = vi.fn();
393
+ const track = vi.fn();
394
+ item.analytics = { page, track };
395
+ item.trackLoadedEvent(item.event);
396
+ expect(page).toHaveBeenCalledWith("Ticketing Widget", expect.objectContaining({
397
+ event_id: "evt_1",
398
+ team_id: "team_1",
399
+ promoter_id: "pro_1",
400
+ event_name: "Test Event",
401
+ event_slug: "event",
402
+ }));
403
+ expect(track).toHaveBeenCalledWith("Product Viewed", expect.objectContaining({
404
+ event_id: "evt_1",
405
+ product_id: "evt_1",
406
+ price: 22,
407
+ }));
408
+ expect(track).toHaveBeenCalledWith("Product List Viewed", expect.objectContaining({
409
+ list_id: "evt_1",
410
+ products: [
411
+ expect.objectContaining({
412
+ admission_id: "adm_general",
413
+ price: 22,
414
+ }),
415
+ ],
416
+ }));
417
+ expect(item.analyticsEventSkipped.emit).not.toHaveBeenCalled();
418
+ });
419
+ it("emits an analytics diagnostic when event identity is incomplete", () => {
420
+ const item = widget();
421
+ const page = vi.fn();
422
+ const track = vi.fn();
423
+ item.analytics = { page, track };
424
+ const missingTeam = event({ teamId: "" });
425
+ item.event = missingTeam;
426
+ item.trackLoadedEvent(missingTeam);
427
+ expect(page).not.toHaveBeenCalled();
428
+ expect(track).not.toHaveBeenCalled();
429
+ expect(item.analyticsEventSkipped.emit).toHaveBeenCalledWith({
430
+ eventType: "Page Viewed",
431
+ eventId: "evt_1",
432
+ reason: "missing_team_id",
433
+ promoterId: "pro_1",
434
+ teamId: undefined,
435
+ });
436
+ });
380
437
  it("tracks hosted checkout starts with the created order id", async () => {
381
438
  const item = widget();
382
439
  const track = vi.fn();
@@ -408,13 +465,26 @@ describe("session-services-ticketing component", () => {
408
465
  getBoundingClientRect: () => ({ top: 900 }),
409
466
  };
410
467
  vi.stubGlobal("window", { scrollY: 250, scrollTo });
411
- item.handleStickyCheckoutClick(getTicketingState(item.event));
468
+ item.handleStickyCheckoutClick(getTicketingState(event()));
412
469
  expect(scrollTo).toHaveBeenCalledWith({
413
470
  behavior: "smooth",
414
471
  top: 570,
415
472
  });
416
473
  vi.unstubAllGlobals();
417
474
  });
475
+ it("shows only the placeholder name for secret event locations", () => {
476
+ const item = widget();
477
+ const node = item.renderEventLocation(event({
478
+ locationRevealAt: futureStart,
479
+ location: {
480
+ ...event().location,
481
+ name: "Secret location",
482
+ },
483
+ }), "admission-venue");
484
+ expect(node.children).toHaveLength(2);
485
+ expect(node.children).toContain("Secret location");
486
+ expect(textContent(node)).not.toContain("Address revealed");
487
+ });
418
488
  it("classifies only passcode access failures as passcode errors", async () => {
419
489
  const item = widget();
420
490
  item.client.event.get = vi
@@ -31,3 +31,5 @@ export interface SetPlatformOptions {
31
31
  rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
32
32
  }
33
33
  export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;
34
+
35
+ export * from '../types';