@seatlayer/js 0.47.2 → 0.48.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.
@@ -401,8 +401,9 @@ declare function stateBadge(state: ChannelState | 'builtin'): string;
401
401
  * cookie-CSRF gate, so no extra client header is needed.
402
402
  * - `credentials: 'omit'` — there is no session cookie; the CMS runs
403
403
  * cross-origin. The worker's credentialed CORS still echoes the CMS origin.
404
- * - `/pub/events/:key/chart` stays public: geometry is the same map buyers
405
- * see. The seat STATE reads are not. `/pub/.../objects` and an unticketed
404
+ * - chart geometry and authored media use authenticated organizer Event
405
+ * routes. A manage bearer is not buyer authority and is never sent to
406
+ * `/pub`. The seat STATE reads are private too. `/pub/.../objects` and an unticketed
406
407
  * `/pub/.../subscribe` both answer with the BUYER projection, which shows
407
408
  * inventory the caller may not buy as a neutral `blocked` — so an organizer
408
409
  * reading them sees its own channel allocations as blocked seats. Both now
@@ -506,7 +507,9 @@ interface ReportCategoryRow {
506
507
  held: number;
507
508
  booked: number;
508
509
  not_for_sale: number;
509
- /** Exact sum of booked unit_price snapshots, in major currency units. */
510
+ /** Configured-price snapshots for booked inventory; not proof of payment. */
511
+ bookedValue: number;
512
+ /** @deprecated Use `bookedValue`. */
510
513
  bookedRevenue: number;
511
514
  }
512
515
  interface ReportCategoryMeta {
@@ -538,6 +541,8 @@ interface ControlRoomSectionMetric {
538
541
  held: number;
539
542
  booked: number;
540
543
  not_for_sale: number;
544
+ bookedValue: number;
545
+ /** @deprecated Use `bookedValue`. */
541
546
  bookedRevenue: number;
542
547
  }
543
548
  /** Recent seat-state change safe for an event:view control-room grant. Full
@@ -557,6 +562,12 @@ interface ControlRoomSnapshot {
557
562
  booked: number;
558
563
  blocked: number;
559
564
  };
565
+ /** Configured value attached to booked inventory, never payment revenue. */
566
+ bookedValue: {
567
+ gross: number;
568
+ bySection: ControlRoomSectionMetric[];
569
+ };
570
+ /** @deprecated Use `bookedValue`. */
560
571
  revenue: {
561
572
  gross: number;
562
573
  bySection: ControlRoomSectionMetric[];
@@ -566,6 +577,8 @@ interface ControlRoomSnapshot {
566
577
  bySection: Array<{
567
578
  sectionId: string;
568
579
  netBooked: number;
580
+ bookedValue: number;
581
+ /** @deprecated Use `bookedValue`. */
569
582
  grossRevenue: number;
570
583
  previousNetBooked: number;
571
584
  trend: 'rising' | 'steady' | 'cooling';
@@ -595,6 +608,145 @@ interface LogPage {
595
608
  entries: LogEntry[];
596
609
  nextBefore: number | null;
597
610
  }
611
+ /** Platform/SDK inventory history — deliberately unrelated to commerce Orders. */
612
+ type InventoryBookingState = 'booked' | 'partially_cancelled' | 'cancelled';
613
+ interface InventoryBookingObject {
614
+ label: string;
615
+ objectId: string;
616
+ objectType: 'seat' | 'booth' | 'ga' | 'table';
617
+ categoryKey: string;
618
+ sectionId: string | null;
619
+ sectionLabel: string | null;
620
+ zoneId: string | null;
621
+ tierId: string | null;
622
+ releaseId: string | null;
623
+ bookingMode: 'individual' | 'whole' | 'variable';
624
+ quantity: number;
625
+ /** Event-configured price snapshot; not proof of what a buyer paid. */
626
+ unitPrice: number;
627
+ configuredValue: number;
628
+ currency: string;
629
+ channelId: string | null;
630
+ channelExternalRef: string | null;
631
+ source: string;
632
+ state: 'booked' | 'cancelled';
633
+ bookedAt: number;
634
+ cancelledAt: number | null;
635
+ }
636
+ interface InventoryBooking {
637
+ eventKey: string;
638
+ eventMode: 'live' | 'test';
639
+ bookingRef: string;
640
+ state: InventoryBookingState;
641
+ bookedAt: number;
642
+ updatedAt: number;
643
+ cancelledAt: number | null;
644
+ source: string;
645
+ bookedBy: string | null;
646
+ lastActor: string | null;
647
+ lastSource: string;
648
+ labels: string[];
649
+ objects: InventoryBookingObject[];
650
+ quantity: number;
651
+ activeQuantity: number;
652
+ configuredValue: number;
653
+ activeConfiguredValue: number;
654
+ currency: string | null;
655
+ }
656
+ interface InventoryBookingsQuery {
657
+ q?: string;
658
+ state?: InventoryBookingState | null;
659
+ cursor?: string | null;
660
+ limit?: number;
661
+ }
662
+ interface InventoryBookingsPage {
663
+ bookings: InventoryBooking[];
664
+ nextCursor: string | null;
665
+ }
666
+ interface InventoryBookingActivity {
667
+ id: number;
668
+ action: 'book' | 'replay' | 'partial_cancel' | 'cancel' | 'reconcile';
669
+ at: number;
670
+ labels: string[];
671
+ actor: string | null;
672
+ source: string;
673
+ }
674
+ interface InventoryBookingDetail {
675
+ booking: InventoryBooking;
676
+ activity: InventoryBookingActivity[];
677
+ activityTruncated: boolean;
678
+ }
679
+ /** Booking-time facts attached to the channel that produced the inventory move. */
680
+ interface ChannelAttribution {
681
+ sold: number;
682
+ units: number;
683
+ bookedValue: number | null;
684
+ /** @deprecated Use `bookedValue`. */
685
+ revenue: number | null;
686
+ }
687
+ interface ChannelReportRow {
688
+ channelId: string;
689
+ name: string;
690
+ externalRef: string | null;
691
+ state: ChannelState;
692
+ allocation: ChannelCounts;
693
+ attribution: ChannelAttribution;
694
+ sellThrough: number | null;
695
+ }
696
+ interface ChannelReport {
697
+ assignmentVersion: number;
698
+ includesBookedValue: boolean;
699
+ /** @deprecated Use `includesBookedValue`. */
700
+ includesRevenue: boolean;
701
+ methodology: {
702
+ allocation: string;
703
+ attribution: string;
704
+ sellThrough: string;
705
+ };
706
+ rows: ChannelReportRow[];
707
+ totals: {
708
+ allocated: number;
709
+ free: number;
710
+ held: number;
711
+ booked: number;
712
+ blocked: number;
713
+ sold: number;
714
+ bookedValue: number | null;
715
+ /** @deprecated Use `bookedValue`. */
716
+ revenue: number | null;
717
+ };
718
+ }
719
+ interface ChannelReportResult {
720
+ report: ChannelReport;
721
+ event: {
722
+ key: string;
723
+ name: string;
724
+ seatTotal?: number;
725
+ currency?: string;
726
+ };
727
+ }
728
+ interface ChannelReportLinkRecord {
729
+ id: string;
730
+ channelId: string;
731
+ label: string | null;
732
+ includesBookedValue: boolean;
733
+ /** @deprecated Use `includesBookedValue`. */
734
+ includesRevenue: boolean;
735
+ expiresAt: number;
736
+ state: 'active' | 'revoked';
737
+ status: 'active' | 'revoked' | 'expired';
738
+ views: number;
739
+ lastViewedAt: number | null;
740
+ createdAt: number;
741
+ createdBy: string | null;
742
+ revokedAt: number | null;
743
+ }
744
+ interface ChannelReportLinkReveal {
745
+ link: ChannelReportLinkRecord;
746
+ url: string;
747
+ capability: string;
748
+ revealedOnce: true;
749
+ }
598
750
  /**
599
751
  * A one-use WebSocket subscribe ticket. `protocols` is exactly what to hand
600
752
  * `new WebSocket(url, protocols)` — the ticket rides in `Sec-WebSocket-Protocol`
@@ -637,9 +789,11 @@ declare class ManageApi {
637
789
  /** Swap the Bearer token in place (SeatManager re-mints on 401). */
638
790
  setToken(token: string): void;
639
791
  private auth;
640
- private pub;
641
- /** The chart geometry. Genuinely public it is the same map buyers see. */
792
+ private authBlob;
793
+ /** Event-pinned organizer geometry. A manage token is never sent to `/pub`. */
642
794
  chart(key: string): Promise<PubChartResult>;
795
+ /** Authenticated bytes for an Event-scoped organizer chart asset. */
796
+ asset(key: string, asset: string): Promise<Blob>;
643
797
  /**
644
798
  * The ORGANIZER's seat map: physical state, token-authed.
645
799
  *
@@ -696,6 +850,14 @@ declare class ManageApi {
696
850
  ok: true;
697
851
  holdTtlMs: number | null;
698
852
  }>;
853
+ /** Inventory lifecycle by stable integrator bookingRef. Absent on Managed. */
854
+ bookings(key: string, query?: InventoryBookingsQuery): Promise<InventoryBookingsPage>;
855
+ /** Exact configured-value snapshot plus book/replay/cancellation audit. */
856
+ booking(key: string, bookingRef: string): Promise<InventoryBookingDetail>;
857
+ /** Alias matching the server SDK vocabulary. */
858
+ listBookings(key: string, query?: InventoryBookingsQuery): Promise<InventoryBookingsPage>;
859
+ /** Alias matching the server SDK vocabulary. */
860
+ retrieveBooking(key: string, bookingRef: string): Promise<InventoryBookingDetail>;
699
861
  /** The organizer's current per section/zone availability windows (needs
700
862
  * `event:view`). Ids absent from `rules` are open / on sale. */
701
863
  availability(key: string): Promise<{
@@ -855,6 +1017,22 @@ declare class ManageApi {
855
1017
  }>;
856
1018
  report(key: string): Promise<ReportResult>;
857
1019
  controlRoom(key: string, windowMinutes?: number): Promise<ControlRoomSnapshot>;
1020
+ /** Allocation beside immutable booking-time channel attribution. */
1021
+ channelReport(key: string): Promise<ChannelReportResult>;
1022
+ createChannelReportLink(key: string, channelId: string, input?: {
1023
+ label?: string;
1024
+ includesBookedValue?: boolean;
1025
+ /** @deprecated Use `includesBookedValue`. */
1026
+ includesRevenue?: boolean;
1027
+ expiresAt?: number;
1028
+ }): Promise<ChannelReportLinkReveal>;
1029
+ channelReportLinks(key: string, channelId: string): Promise<{
1030
+ links: ChannelReportLinkRecord[];
1031
+ }>;
1032
+ revokeChannelReportLink(key: string, channelId: string, linkId: string): Promise<{
1033
+ ok: true;
1034
+ link: ChannelReportLinkRecord;
1035
+ }>;
858
1036
  log(key: string, opts?: {
859
1037
  limit?: number;
860
1038
  before?: number;
@@ -873,7 +1051,7 @@ declare class ManageApi {
873
1051
  * and drives three control-room tools on one persistent canvas:
874
1052
  *
875
1053
  * - **view** — a live board: realtime seat repaint (flash on hold/book),
876
- * live KPI tallies + gross revenue, and a streaming activity
1054
+ * live KPI tallies + configured booked value, and a streaming activity
877
1055
  * feed derived from the delta stream + audit log. Read-only.
878
1056
  * - **inspect** — select one seat to read its live inventory context.
879
1057
  * - **block** — bulk-first block/unblock: marquee-drag, ⌘A select-all,
@@ -881,9 +1059,9 @@ declare class ManageApi {
881
1059
  * one batched block/unblock (optimistic, reconciled by the WS),
882
1060
  * and timed auto-release.
883
1061
  *
884
- * Auth: reads (chart/objects/WS) are public; writes/reports carry a Bearer
885
- * event-scoped manage token (`mse_…`) or a tenant secret key (`sk_…`) via
886
- * {@link ManageApi}. Box office + Sections + full Reports UI are M2/M3.
1062
+ * Auth: organizer chart/media, inventory, realtime and reports all carry a
1063
+ * Bearer event-scoped manage token (`mse_…`) or tenant secret key (`sk_…`) via
1064
+ * {@link ManageApi}. Organizer authority is never downgraded to buyer `/pub`.
887
1065
  */
888
1066
 
889
1067
  type SeatManagerMode = 'view' | 'inspect' | 'block' | 'sections' | 'channels';
@@ -909,10 +1087,14 @@ interface SeatManagerTallies {
909
1087
  /** booked / (total − blocked), 0–100 — sell-through of sellable inventory. */
910
1088
  sellThroughPct: number;
911
1089
  /** Exact Σ booked unit_price snapshots from the authenticated report. */
1090
+ bookedValue: number;
1091
+ /** @deprecated Use `bookedValue`. */
912
1092
  grossRevenue: number;
913
- /** Revenue is never reconstructed from chart list price. */
1093
+ /** Booked value is never reconstructed from the chart's current list price. */
1094
+ bookedValueStatus: 'loading' | 'current' | 'stale';
1095
+ /** @deprecated Use `bookedValueStatus`. */
914
1096
  revenueStatus: 'loading' | 'current' | 'stale';
915
- /** ISO-4217 currency for grossRevenue. */
1097
+ /** ISO-4217 currency for `bookedValue`. */
916
1098
  currency: string;
917
1099
  }
918
1100
  /** One streamed activity line for the live feed. */
@@ -957,7 +1139,7 @@ interface SeatManagerOptions {
957
1139
  * never narrowed server-side, so it is treated as fully capable.
958
1140
  */
959
1141
  capabilities?: SeatManagerCapability[] | string[];
960
- /** ISO-4217 fallback currency for revenue (chart/event currency wins). */
1142
+ /** ISO-4217 fallback currency for configured booked value (chart/event wins). */
961
1143
  currency?: string;
962
1144
  /** Chart theme override for the chrome (rails/bar). Chart colors come from the doc. */
963
1145
  theme?: ChartTheme;
@@ -1052,6 +1234,8 @@ declare class SeatManager {
1052
1234
  private revenueStatus;
1053
1235
  private revenueRequest;
1054
1236
  private controlRoomSnapshot;
1237
+ /** Bearer-fetched organizer chart media, revoked with this manager. */
1238
+ private readonly organizerAssetUrls;
1055
1239
  /**
1056
1240
  * The server's own totals, pinned to the client model they were read against.
1057
1241
  * Display = server baseline + (client now − client then), so the authoritative
@@ -1260,10 +1444,9 @@ declare class SeatManager {
1260
1444
  * projects its deltas, so any change inside a private channel allocation is
1261
1445
  * structurally suppressed and the map silently drifts.
1262
1446
  *
1263
- * If the mint fails (an expired token, a worker that predates the route) we
1264
- * still connect unticketed rather than going dark the public-sale stream is
1265
- * worth having, and every `resnapshot()` re-establishes physical truth from
1266
- * the authenticated HTTP read.
1447
+ * If the mint fails, remain reconnecting. An unticketed socket is a buyer
1448
+ * projection, so applying it to organizer state would be worse than staying
1449
+ * visibly offline while the host refreshes authority or upgrades the API.
1267
1450
  */
1268
1451
  private connect;
1269
1452
  private scheduleReconnect;
@@ -1416,4 +1599,4 @@ declare class SeatManager {
1416
1599
  private fail;
1417
1600
  }
1418
1601
 
1419
- export { bucketRows as $, type AssignmentResult as A, type BucketRow as B, type ChannelListResult as C, type ReportCategoryMeta as D, type ReportCategoryRow as E, type ReportResult as F, type SeatManagerActionResult as G, type SeatManagerActivity as H, type IntentSwitchBlockedDetails as I, type SeatManagerCapability as J, type SeatManagerConnection as K, type LogEntry as L, ManageApi as M, type SeatManagerMode as N, type SeatManagerOptions as O, PUBLIC_CHANNEL_ID as P, type SeatManagerTallies as Q, type ReportByStatus as R, SeatManager as S, type SelectionSourceRow as T, accessIntentDescription as U, accessIntentLabel as V, accessLine as W, accessLinkBadge as X, accessLinkErrorCopy as Y, accessLinkIsLive as Z, accessLinkPolicyLines as _, type ChannelAllocationPage as a, dropReviewRows as a0, intentForbidsCopy as a1, intentSwitchBlockedCopy as a2, isPublicChannelId as a3, markerLetter as a4, markerOf as a5, mutationCount as a6, needsMoveConfirmation as a7, planAssignment as a8, retryAfterCopy as a9, selectionSources as aa, stateBadge as ab, suggestMarker as ac, type ChannelRecord as b, type ChannelPreviewProjection as c, type ChannelAccessIntent as d, type AccessLinkReveal as e, type AccessLinkStatusRecord as f, type ChannelSeatStatus as g, ACCESS_LINK_DEFAULTS as h, type AccessIntentForbidsDetails as i, type AccessLinkRecord as j, type AccessLinkState as k, type AccessLinkStatus as l, type ArchiveBlockedDetails as m, type AssignmentBuckets as n, type AssignmentDropDetails as o, type ChannelAccessSummary as p, type ChannelAuditEntry as q, type ChannelAuditPage as r, type ChannelCounts as s, type ChannelState as t, type ControlRoomActivityEntry as u, type ControlRoomSectionMetric as v, type ControlRoomSnapshot as w, type LogPage as x, ManageApiError as y, PUBLIC_CHANNEL_NAME as z };
1602
+ export { type SeatManagerCapability as $, type AssignmentResult as A, type BucketRow as B, type ChannelListResult as C, type ControlRoomActivityEntry as D, type ControlRoomSectionMetric as E, type ControlRoomSnapshot as F, type InventoryBooking as G, type InventoryBookingActivity as H, type IntentSwitchBlockedDetails as I, type InventoryBookingDetail as J, type InventoryBookingObject as K, type InventoryBookingState as L, type InventoryBookingsPage as M, type InventoryBookingsQuery as N, type LogEntry as O, type LogPage as P, ManageApi as Q, ManageApiError as R, PUBLIC_CHANNEL_ID as S, PUBLIC_CHANNEL_NAME as T, type ReportByStatus as U, type ReportCategoryMeta as V, type ReportCategoryRow as W, type ReportResult as X, SeatManager as Y, type SeatManagerActionResult as Z, type SeatManagerActivity as _, type ChannelAllocationPage as a, type SeatManagerConnection as a0, type SeatManagerMode as a1, type SeatManagerOptions as a2, type SeatManagerTallies as a3, type SelectionSourceRow as a4, accessIntentDescription as a5, accessIntentLabel as a6, accessLine as a7, accessLinkBadge as a8, accessLinkErrorCopy as a9, accessLinkIsLive as aa, accessLinkPolicyLines as ab, bucketRows as ac, dropReviewRows as ad, intentForbidsCopy as ae, intentSwitchBlockedCopy as af, isPublicChannelId as ag, markerLetter as ah, markerOf as ai, mutationCount as aj, needsMoveConfirmation as ak, planAssignment as al, retryAfterCopy as am, selectionSources as an, stateBadge as ao, suggestMarker as ap, type ChannelRecord as b, type ChannelPreviewProjection as c, type ChannelAccessIntent as d, type AccessLinkReveal as e, type AccessLinkStatusRecord as f, type ChannelSeatStatus as g, ACCESS_LINK_DEFAULTS as h, type AccessIntentForbidsDetails as i, type AccessLinkRecord as j, type AccessLinkState as k, type AccessLinkStatus as l, type ArchiveBlockedDetails as m, type AssignmentBuckets as n, type AssignmentDropDetails as o, type ChannelAccessSummary as p, type ChannelAttribution as q, type ChannelAuditEntry as r, type ChannelAuditPage as s, type ChannelCounts as t, type ChannelReport as u, type ChannelReportLinkRecord as v, type ChannelReportLinkReveal as w, type ChannelReportResult as x, type ChannelReportRow as y, type ChannelState as z };
@@ -401,8 +401,9 @@ declare function stateBadge(state: ChannelState | 'builtin'): string;
401
401
  * cookie-CSRF gate, so no extra client header is needed.
402
402
  * - `credentials: 'omit'` — there is no session cookie; the CMS runs
403
403
  * cross-origin. The worker's credentialed CORS still echoes the CMS origin.
404
- * - `/pub/events/:key/chart` stays public: geometry is the same map buyers
405
- * see. The seat STATE reads are not. `/pub/.../objects` and an unticketed
404
+ * - chart geometry and authored media use authenticated organizer Event
405
+ * routes. A manage bearer is not buyer authority and is never sent to
406
+ * `/pub`. The seat STATE reads are private too. `/pub/.../objects` and an unticketed
406
407
  * `/pub/.../subscribe` both answer with the BUYER projection, which shows
407
408
  * inventory the caller may not buy as a neutral `blocked` — so an organizer
408
409
  * reading them sees its own channel allocations as blocked seats. Both now
@@ -506,7 +507,9 @@ interface ReportCategoryRow {
506
507
  held: number;
507
508
  booked: number;
508
509
  not_for_sale: number;
509
- /** Exact sum of booked unit_price snapshots, in major currency units. */
510
+ /** Configured-price snapshots for booked inventory; not proof of payment. */
511
+ bookedValue: number;
512
+ /** @deprecated Use `bookedValue`. */
510
513
  bookedRevenue: number;
511
514
  }
512
515
  interface ReportCategoryMeta {
@@ -538,6 +541,8 @@ interface ControlRoomSectionMetric {
538
541
  held: number;
539
542
  booked: number;
540
543
  not_for_sale: number;
544
+ bookedValue: number;
545
+ /** @deprecated Use `bookedValue`. */
541
546
  bookedRevenue: number;
542
547
  }
543
548
  /** Recent seat-state change safe for an event:view control-room grant. Full
@@ -557,6 +562,12 @@ interface ControlRoomSnapshot {
557
562
  booked: number;
558
563
  blocked: number;
559
564
  };
565
+ /** Configured value attached to booked inventory, never payment revenue. */
566
+ bookedValue: {
567
+ gross: number;
568
+ bySection: ControlRoomSectionMetric[];
569
+ };
570
+ /** @deprecated Use `bookedValue`. */
560
571
  revenue: {
561
572
  gross: number;
562
573
  bySection: ControlRoomSectionMetric[];
@@ -566,6 +577,8 @@ interface ControlRoomSnapshot {
566
577
  bySection: Array<{
567
578
  sectionId: string;
568
579
  netBooked: number;
580
+ bookedValue: number;
581
+ /** @deprecated Use `bookedValue`. */
569
582
  grossRevenue: number;
570
583
  previousNetBooked: number;
571
584
  trend: 'rising' | 'steady' | 'cooling';
@@ -595,6 +608,145 @@ interface LogPage {
595
608
  entries: LogEntry[];
596
609
  nextBefore: number | null;
597
610
  }
611
+ /** Platform/SDK inventory history — deliberately unrelated to commerce Orders. */
612
+ type InventoryBookingState = 'booked' | 'partially_cancelled' | 'cancelled';
613
+ interface InventoryBookingObject {
614
+ label: string;
615
+ objectId: string;
616
+ objectType: 'seat' | 'booth' | 'ga' | 'table';
617
+ categoryKey: string;
618
+ sectionId: string | null;
619
+ sectionLabel: string | null;
620
+ zoneId: string | null;
621
+ tierId: string | null;
622
+ releaseId: string | null;
623
+ bookingMode: 'individual' | 'whole' | 'variable';
624
+ quantity: number;
625
+ /** Event-configured price snapshot; not proof of what a buyer paid. */
626
+ unitPrice: number;
627
+ configuredValue: number;
628
+ currency: string;
629
+ channelId: string | null;
630
+ channelExternalRef: string | null;
631
+ source: string;
632
+ state: 'booked' | 'cancelled';
633
+ bookedAt: number;
634
+ cancelledAt: number | null;
635
+ }
636
+ interface InventoryBooking {
637
+ eventKey: string;
638
+ eventMode: 'live' | 'test';
639
+ bookingRef: string;
640
+ state: InventoryBookingState;
641
+ bookedAt: number;
642
+ updatedAt: number;
643
+ cancelledAt: number | null;
644
+ source: string;
645
+ bookedBy: string | null;
646
+ lastActor: string | null;
647
+ lastSource: string;
648
+ labels: string[];
649
+ objects: InventoryBookingObject[];
650
+ quantity: number;
651
+ activeQuantity: number;
652
+ configuredValue: number;
653
+ activeConfiguredValue: number;
654
+ currency: string | null;
655
+ }
656
+ interface InventoryBookingsQuery {
657
+ q?: string;
658
+ state?: InventoryBookingState | null;
659
+ cursor?: string | null;
660
+ limit?: number;
661
+ }
662
+ interface InventoryBookingsPage {
663
+ bookings: InventoryBooking[];
664
+ nextCursor: string | null;
665
+ }
666
+ interface InventoryBookingActivity {
667
+ id: number;
668
+ action: 'book' | 'replay' | 'partial_cancel' | 'cancel' | 'reconcile';
669
+ at: number;
670
+ labels: string[];
671
+ actor: string | null;
672
+ source: string;
673
+ }
674
+ interface InventoryBookingDetail {
675
+ booking: InventoryBooking;
676
+ activity: InventoryBookingActivity[];
677
+ activityTruncated: boolean;
678
+ }
679
+ /** Booking-time facts attached to the channel that produced the inventory move. */
680
+ interface ChannelAttribution {
681
+ sold: number;
682
+ units: number;
683
+ bookedValue: number | null;
684
+ /** @deprecated Use `bookedValue`. */
685
+ revenue: number | null;
686
+ }
687
+ interface ChannelReportRow {
688
+ channelId: string;
689
+ name: string;
690
+ externalRef: string | null;
691
+ state: ChannelState;
692
+ allocation: ChannelCounts;
693
+ attribution: ChannelAttribution;
694
+ sellThrough: number | null;
695
+ }
696
+ interface ChannelReport {
697
+ assignmentVersion: number;
698
+ includesBookedValue: boolean;
699
+ /** @deprecated Use `includesBookedValue`. */
700
+ includesRevenue: boolean;
701
+ methodology: {
702
+ allocation: string;
703
+ attribution: string;
704
+ sellThrough: string;
705
+ };
706
+ rows: ChannelReportRow[];
707
+ totals: {
708
+ allocated: number;
709
+ free: number;
710
+ held: number;
711
+ booked: number;
712
+ blocked: number;
713
+ sold: number;
714
+ bookedValue: number | null;
715
+ /** @deprecated Use `bookedValue`. */
716
+ revenue: number | null;
717
+ };
718
+ }
719
+ interface ChannelReportResult {
720
+ report: ChannelReport;
721
+ event: {
722
+ key: string;
723
+ name: string;
724
+ seatTotal?: number;
725
+ currency?: string;
726
+ };
727
+ }
728
+ interface ChannelReportLinkRecord {
729
+ id: string;
730
+ channelId: string;
731
+ label: string | null;
732
+ includesBookedValue: boolean;
733
+ /** @deprecated Use `includesBookedValue`. */
734
+ includesRevenue: boolean;
735
+ expiresAt: number;
736
+ state: 'active' | 'revoked';
737
+ status: 'active' | 'revoked' | 'expired';
738
+ views: number;
739
+ lastViewedAt: number | null;
740
+ createdAt: number;
741
+ createdBy: string | null;
742
+ revokedAt: number | null;
743
+ }
744
+ interface ChannelReportLinkReveal {
745
+ link: ChannelReportLinkRecord;
746
+ url: string;
747
+ capability: string;
748
+ revealedOnce: true;
749
+ }
598
750
  /**
599
751
  * A one-use WebSocket subscribe ticket. `protocols` is exactly what to hand
600
752
  * `new WebSocket(url, protocols)` — the ticket rides in `Sec-WebSocket-Protocol`
@@ -637,9 +789,11 @@ declare class ManageApi {
637
789
  /** Swap the Bearer token in place (SeatManager re-mints on 401). */
638
790
  setToken(token: string): void;
639
791
  private auth;
640
- private pub;
641
- /** The chart geometry. Genuinely public it is the same map buyers see. */
792
+ private authBlob;
793
+ /** Event-pinned organizer geometry. A manage token is never sent to `/pub`. */
642
794
  chart(key: string): Promise<PubChartResult>;
795
+ /** Authenticated bytes for an Event-scoped organizer chart asset. */
796
+ asset(key: string, asset: string): Promise<Blob>;
643
797
  /**
644
798
  * The ORGANIZER's seat map: physical state, token-authed.
645
799
  *
@@ -696,6 +850,14 @@ declare class ManageApi {
696
850
  ok: true;
697
851
  holdTtlMs: number | null;
698
852
  }>;
853
+ /** Inventory lifecycle by stable integrator bookingRef. Absent on Managed. */
854
+ bookings(key: string, query?: InventoryBookingsQuery): Promise<InventoryBookingsPage>;
855
+ /** Exact configured-value snapshot plus book/replay/cancellation audit. */
856
+ booking(key: string, bookingRef: string): Promise<InventoryBookingDetail>;
857
+ /** Alias matching the server SDK vocabulary. */
858
+ listBookings(key: string, query?: InventoryBookingsQuery): Promise<InventoryBookingsPage>;
859
+ /** Alias matching the server SDK vocabulary. */
860
+ retrieveBooking(key: string, bookingRef: string): Promise<InventoryBookingDetail>;
699
861
  /** The organizer's current per section/zone availability windows (needs
700
862
  * `event:view`). Ids absent from `rules` are open / on sale. */
701
863
  availability(key: string): Promise<{
@@ -855,6 +1017,22 @@ declare class ManageApi {
855
1017
  }>;
856
1018
  report(key: string): Promise<ReportResult>;
857
1019
  controlRoom(key: string, windowMinutes?: number): Promise<ControlRoomSnapshot>;
1020
+ /** Allocation beside immutable booking-time channel attribution. */
1021
+ channelReport(key: string): Promise<ChannelReportResult>;
1022
+ createChannelReportLink(key: string, channelId: string, input?: {
1023
+ label?: string;
1024
+ includesBookedValue?: boolean;
1025
+ /** @deprecated Use `includesBookedValue`. */
1026
+ includesRevenue?: boolean;
1027
+ expiresAt?: number;
1028
+ }): Promise<ChannelReportLinkReveal>;
1029
+ channelReportLinks(key: string, channelId: string): Promise<{
1030
+ links: ChannelReportLinkRecord[];
1031
+ }>;
1032
+ revokeChannelReportLink(key: string, channelId: string, linkId: string): Promise<{
1033
+ ok: true;
1034
+ link: ChannelReportLinkRecord;
1035
+ }>;
858
1036
  log(key: string, opts?: {
859
1037
  limit?: number;
860
1038
  before?: number;
@@ -873,7 +1051,7 @@ declare class ManageApi {
873
1051
  * and drives three control-room tools on one persistent canvas:
874
1052
  *
875
1053
  * - **view** — a live board: realtime seat repaint (flash on hold/book),
876
- * live KPI tallies + gross revenue, and a streaming activity
1054
+ * live KPI tallies + configured booked value, and a streaming activity
877
1055
  * feed derived from the delta stream + audit log. Read-only.
878
1056
  * - **inspect** — select one seat to read its live inventory context.
879
1057
  * - **block** — bulk-first block/unblock: marquee-drag, ⌘A select-all,
@@ -881,9 +1059,9 @@ declare class ManageApi {
881
1059
  * one batched block/unblock (optimistic, reconciled by the WS),
882
1060
  * and timed auto-release.
883
1061
  *
884
- * Auth: reads (chart/objects/WS) are public; writes/reports carry a Bearer
885
- * event-scoped manage token (`mse_…`) or a tenant secret key (`sk_…`) via
886
- * {@link ManageApi}. Box office + Sections + full Reports UI are M2/M3.
1062
+ * Auth: organizer chart/media, inventory, realtime and reports all carry a
1063
+ * Bearer event-scoped manage token (`mse_…`) or tenant secret key (`sk_…`) via
1064
+ * {@link ManageApi}. Organizer authority is never downgraded to buyer `/pub`.
887
1065
  */
888
1066
 
889
1067
  type SeatManagerMode = 'view' | 'inspect' | 'block' | 'sections' | 'channels';
@@ -909,10 +1087,14 @@ interface SeatManagerTallies {
909
1087
  /** booked / (total − blocked), 0–100 — sell-through of sellable inventory. */
910
1088
  sellThroughPct: number;
911
1089
  /** Exact Σ booked unit_price snapshots from the authenticated report. */
1090
+ bookedValue: number;
1091
+ /** @deprecated Use `bookedValue`. */
912
1092
  grossRevenue: number;
913
- /** Revenue is never reconstructed from chart list price. */
1093
+ /** Booked value is never reconstructed from the chart's current list price. */
1094
+ bookedValueStatus: 'loading' | 'current' | 'stale';
1095
+ /** @deprecated Use `bookedValueStatus`. */
914
1096
  revenueStatus: 'loading' | 'current' | 'stale';
915
- /** ISO-4217 currency for grossRevenue. */
1097
+ /** ISO-4217 currency for `bookedValue`. */
916
1098
  currency: string;
917
1099
  }
918
1100
  /** One streamed activity line for the live feed. */
@@ -957,7 +1139,7 @@ interface SeatManagerOptions {
957
1139
  * never narrowed server-side, so it is treated as fully capable.
958
1140
  */
959
1141
  capabilities?: SeatManagerCapability[] | string[];
960
- /** ISO-4217 fallback currency for revenue (chart/event currency wins). */
1142
+ /** ISO-4217 fallback currency for configured booked value (chart/event wins). */
961
1143
  currency?: string;
962
1144
  /** Chart theme override for the chrome (rails/bar). Chart colors come from the doc. */
963
1145
  theme?: ChartTheme;
@@ -1052,6 +1234,8 @@ declare class SeatManager {
1052
1234
  private revenueStatus;
1053
1235
  private revenueRequest;
1054
1236
  private controlRoomSnapshot;
1237
+ /** Bearer-fetched organizer chart media, revoked with this manager. */
1238
+ private readonly organizerAssetUrls;
1055
1239
  /**
1056
1240
  * The server's own totals, pinned to the client model they were read against.
1057
1241
  * Display = server baseline + (client now − client then), so the authoritative
@@ -1260,10 +1444,9 @@ declare class SeatManager {
1260
1444
  * projects its deltas, so any change inside a private channel allocation is
1261
1445
  * structurally suppressed and the map silently drifts.
1262
1446
  *
1263
- * If the mint fails (an expired token, a worker that predates the route) we
1264
- * still connect unticketed rather than going dark the public-sale stream is
1265
- * worth having, and every `resnapshot()` re-establishes physical truth from
1266
- * the authenticated HTTP read.
1447
+ * If the mint fails, remain reconnecting. An unticketed socket is a buyer
1448
+ * projection, so applying it to organizer state would be worse than staying
1449
+ * visibly offline while the host refreshes authority or upgrades the API.
1267
1450
  */
1268
1451
  private connect;
1269
1452
  private scheduleReconnect;
@@ -1416,4 +1599,4 @@ declare class SeatManager {
1416
1599
  private fail;
1417
1600
  }
1418
1601
 
1419
- export { bucketRows as $, type AssignmentResult as A, type BucketRow as B, type ChannelListResult as C, type ReportCategoryMeta as D, type ReportCategoryRow as E, type ReportResult as F, type SeatManagerActionResult as G, type SeatManagerActivity as H, type IntentSwitchBlockedDetails as I, type SeatManagerCapability as J, type SeatManagerConnection as K, type LogEntry as L, ManageApi as M, type SeatManagerMode as N, type SeatManagerOptions as O, PUBLIC_CHANNEL_ID as P, type SeatManagerTallies as Q, type ReportByStatus as R, SeatManager as S, type SelectionSourceRow as T, accessIntentDescription as U, accessIntentLabel as V, accessLine as W, accessLinkBadge as X, accessLinkErrorCopy as Y, accessLinkIsLive as Z, accessLinkPolicyLines as _, type ChannelAllocationPage as a, dropReviewRows as a0, intentForbidsCopy as a1, intentSwitchBlockedCopy as a2, isPublicChannelId as a3, markerLetter as a4, markerOf as a5, mutationCount as a6, needsMoveConfirmation as a7, planAssignment as a8, retryAfterCopy as a9, selectionSources as aa, stateBadge as ab, suggestMarker as ac, type ChannelRecord as b, type ChannelPreviewProjection as c, type ChannelAccessIntent as d, type AccessLinkReveal as e, type AccessLinkStatusRecord as f, type ChannelSeatStatus as g, ACCESS_LINK_DEFAULTS as h, type AccessIntentForbidsDetails as i, type AccessLinkRecord as j, type AccessLinkState as k, type AccessLinkStatus as l, type ArchiveBlockedDetails as m, type AssignmentBuckets as n, type AssignmentDropDetails as o, type ChannelAccessSummary as p, type ChannelAuditEntry as q, type ChannelAuditPage as r, type ChannelCounts as s, type ChannelState as t, type ControlRoomActivityEntry as u, type ControlRoomSectionMetric as v, type ControlRoomSnapshot as w, type LogPage as x, ManageApiError as y, PUBLIC_CHANNEL_NAME as z };
1602
+ export { type SeatManagerCapability as $, type AssignmentResult as A, type BucketRow as B, type ChannelListResult as C, type ControlRoomActivityEntry as D, type ControlRoomSectionMetric as E, type ControlRoomSnapshot as F, type InventoryBooking as G, type InventoryBookingActivity as H, type IntentSwitchBlockedDetails as I, type InventoryBookingDetail as J, type InventoryBookingObject as K, type InventoryBookingState as L, type InventoryBookingsPage as M, type InventoryBookingsQuery as N, type LogEntry as O, type LogPage as P, ManageApi as Q, ManageApiError as R, PUBLIC_CHANNEL_ID as S, PUBLIC_CHANNEL_NAME as T, type ReportByStatus as U, type ReportCategoryMeta as V, type ReportCategoryRow as W, type ReportResult as X, SeatManager as Y, type SeatManagerActionResult as Z, type SeatManagerActivity as _, type ChannelAllocationPage as a, type SeatManagerConnection as a0, type SeatManagerMode as a1, type SeatManagerOptions as a2, type SeatManagerTallies as a3, type SelectionSourceRow as a4, accessIntentDescription as a5, accessIntentLabel as a6, accessLine as a7, accessLinkBadge as a8, accessLinkErrorCopy as a9, accessLinkIsLive as aa, accessLinkPolicyLines as ab, bucketRows as ac, dropReviewRows as ad, intentForbidsCopy as ae, intentSwitchBlockedCopy as af, isPublicChannelId as ag, markerLetter as ah, markerOf as ai, mutationCount as aj, needsMoveConfirmation as ak, planAssignment as al, retryAfterCopy as am, selectionSources as an, stateBadge as ao, suggestMarker as ap, type ChannelRecord as b, type ChannelPreviewProjection as c, type ChannelAccessIntent as d, type AccessLinkReveal as e, type AccessLinkStatusRecord as f, type ChannelSeatStatus as g, ACCESS_LINK_DEFAULTS as h, type AccessIntentForbidsDetails as i, type AccessLinkRecord as j, type AccessLinkState as k, type AccessLinkStatus as l, type ArchiveBlockedDetails as m, type AssignmentBuckets as n, type AssignmentDropDetails as o, type ChannelAccessSummary as p, type ChannelAttribution as q, type ChannelAuditEntry as r, type ChannelAuditPage as s, type ChannelCounts as t, type ChannelReport as u, type ChannelReportLinkRecord as v, type ChannelReportLinkReveal as w, type ChannelReportResult as x, type ChannelReportRow as y, type ChannelState as z };