@seatlayer/js 0.36.1 → 0.36.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.
- package/dist/index.cjs +123 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +98 -8
- package/dist/index.d.ts +98 -8
- package/dist/index.js +121 -28
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -605,7 +605,7 @@ interface RealtimeSink {
|
|
|
605
605
|
activeHolds: number;
|
|
606
606
|
}): void;
|
|
607
607
|
}
|
|
608
|
-
interface SubscribeTicket {
|
|
608
|
+
interface SubscribeTicket$1 {
|
|
609
609
|
ticket?: string;
|
|
610
610
|
/** Exactly what to hand `new WebSocket(url, protocols)`, per protocol doc §3. */
|
|
611
611
|
protocols?: string[];
|
|
@@ -616,7 +616,7 @@ interface BuyerRealtimeOptions {
|
|
|
616
616
|
sink: RealtimeSink;
|
|
617
617
|
/** Mint a one-use ticket for THIS connection attempt. Returns null for the
|
|
618
618
|
* anonymous public case (no ticket needed). Throwing stops the client. */
|
|
619
|
-
mintTicket?: () => Promise<SubscribeTicket | null>;
|
|
619
|
+
mintTicket?: () => Promise<SubscribeTicket$1 | null>;
|
|
620
620
|
/** Typed access states. 4401 arrives here as `revoked`. */
|
|
621
621
|
onAccessUnavailable?: (event: BuyerAccessUnavailableEvent) => void;
|
|
622
622
|
/** Test seam. Defaults to the global WebSocket. */
|
|
@@ -1830,9 +1830,23 @@ declare function attachPickerFrame(iframe: HTMLIFrameElement, opts?: AttachPicke
|
|
|
1830
1830
|
*
|
|
1831
1831
|
* Spec: sales-channels-product-ux-spec §8.4–8.5.
|
|
1832
1832
|
*/
|
|
1833
|
-
/**
|
|
1834
|
-
|
|
1833
|
+
/**
|
|
1834
|
+
* Public sale is a built-in pseudo-channel. The server's sentinel for it is the
|
|
1835
|
+
* literal string `'public'` — it is what `GET /channels` returns as
|
|
1836
|
+
* `publicSale.id`, what `GET /channels/allocation` reports for an unallocated
|
|
1837
|
+
* unit, and what `POST /channels/assignments` accepts (alongside `null`) as the
|
|
1838
|
+
* target meaning "send these back to public sale".
|
|
1839
|
+
*
|
|
1840
|
+
* This constant was `''` until 2026-08-02, which silently made every public unit
|
|
1841
|
+
* look like an unknown PRIVATE channel to `planAssignment` and `markerOf` — the
|
|
1842
|
+
* cause of the Review sheet's phantom "moved out of another channel" line and
|
|
1843
|
+
* the rail's "?" marker. Keep it byte-identical to the server's
|
|
1844
|
+
* `eventChannels.PUBLIC_CHANNEL_ID`.
|
|
1845
|
+
*/
|
|
1846
|
+
declare const PUBLIC_CHANNEL_ID = "public";
|
|
1835
1847
|
declare const PUBLIC_CHANNEL_NAME = "Public sale";
|
|
1848
|
+
/** True for every spelling of "public sale" a worker may hand us. */
|
|
1849
|
+
declare function isPublicChannelId(id: string | null | undefined): boolean;
|
|
1836
1850
|
type ChannelState = 'active' | 'paused' | 'archived';
|
|
1837
1851
|
/** Physical inventory status, as the manage surface speaks it. */
|
|
1838
1852
|
type ChannelSeatStatus = 'free' | 'held' | 'booked' | 'blocked';
|
|
@@ -1873,7 +1887,9 @@ interface ChannelRecord {
|
|
|
1873
1887
|
access?: ChannelAccessSummary | null;
|
|
1874
1888
|
}
|
|
1875
1889
|
interface PublicSaleChannel {
|
|
1876
|
-
|
|
1890
|
+
/** `'public'` on every shipped worker; typed loosely so an older build that
|
|
1891
|
+
* still answers `''` is normalised rather than rejected. */
|
|
1892
|
+
id: string;
|
|
1877
1893
|
name: string;
|
|
1878
1894
|
state: 'active';
|
|
1879
1895
|
counts: ChannelCounts;
|
|
@@ -1920,6 +1936,16 @@ interface ArchiveBlockedDetails {
|
|
|
1920
1936
|
latestHoldExpiresAt?: number | null;
|
|
1921
1937
|
retryAfterMs?: number;
|
|
1922
1938
|
}
|
|
1939
|
+
/**
|
|
1940
|
+
* Clamp any marker text down to the ONE uppercase character every surface draws.
|
|
1941
|
+
*
|
|
1942
|
+
* The server stores `marker` as free text (it only length-caps it), so a channel
|
|
1943
|
+
* created outside this widget can carry "star" or "VIP". The comp's marker chip
|
|
1944
|
+
* is a single glyph: taking two characters ("ST") overflows the 22px chip and
|
|
1945
|
+
* stops reading as a letter. Non-letter leading characters (an emoji, a digit,
|
|
1946
|
+
* punctuation) are skipped in favour of the first real letter.
|
|
1947
|
+
*/
|
|
1948
|
+
declare function markerLetter(raw: string | null | undefined, fallback: string): string;
|
|
1923
1949
|
/**
|
|
1924
1950
|
* Suggest a marker for a new channel: the first letter of its name when that
|
|
1925
1951
|
* letter is still free, otherwise the next unused letter. Deterministic so the
|
|
@@ -2037,8 +2063,13 @@ declare function stateBadge(state: ChannelState | 'builtin'): string;
|
|
|
2037
2063
|
* cookie-CSRF gate, so no extra client header is needed.
|
|
2038
2064
|
* - `credentials: 'omit'` — there is no session cookie; the CMS runs
|
|
2039
2065
|
* cross-origin. The worker's credentialed CORS still echoes the CMS origin.
|
|
2040
|
-
* -
|
|
2041
|
-
*
|
|
2066
|
+
* - `/pub/events/:key/chart` stays public: geometry is the same map buyers
|
|
2067
|
+
* see. The seat STATE reads are not. `/pub/.../objects` and an unticketed
|
|
2068
|
+
* `/pub/.../subscribe` both answer with the BUYER projection, which shows
|
|
2069
|
+
* inventory the caller may not buy as a neutral `blocked` — so an organizer
|
|
2070
|
+
* reading them sees its own channel allocations as blocked seats. Both now
|
|
2071
|
+
* go through the token: `/v1/events/:key/objects` for the snapshot, and a
|
|
2072
|
+
* `/v1/events/:key/subscribe-tickets` mint for the socket's scope.
|
|
2042
2073
|
*
|
|
2043
2074
|
* `box-book` is intentionally omitted for M1 (box office ships in M2, and the
|
|
2044
2075
|
* route is still session-only server-side).
|
|
@@ -2219,6 +2250,18 @@ interface LogPage {
|
|
|
2219
2250
|
entries: LogEntry[];
|
|
2220
2251
|
nextBefore: number | null;
|
|
2221
2252
|
}
|
|
2253
|
+
/**
|
|
2254
|
+
* A one-use WebSocket subscribe ticket. `protocols` is exactly what to hand
|
|
2255
|
+
* `new WebSocket(url, protocols)` — the ticket rides in `Sec-WebSocket-Protocol`
|
|
2256
|
+
* because a browser socket cannot carry an Authorization header and a bearer
|
|
2257
|
+
* must never travel in a URL.
|
|
2258
|
+
*/
|
|
2259
|
+
interface SubscribeTicket {
|
|
2260
|
+
ticket: string;
|
|
2261
|
+
expiresAt: number;
|
|
2262
|
+
protocol: string;
|
|
2263
|
+
protocols: string[];
|
|
2264
|
+
}
|
|
2222
2265
|
interface PubObjectsResult {
|
|
2223
2266
|
/** Every non-free seat's status keyed by label (free seats omitted). */
|
|
2224
2267
|
seats: Record<string, string>;
|
|
@@ -2250,8 +2293,32 @@ declare class ManageApi {
|
|
|
2250
2293
|
setToken(token: string): void;
|
|
2251
2294
|
private auth;
|
|
2252
2295
|
private pub;
|
|
2296
|
+
/** The chart geometry. Genuinely public — it is the same map buyers see. */
|
|
2253
2297
|
chart(key: string): Promise<PubChartResult>;
|
|
2298
|
+
/**
|
|
2299
|
+
* The ORGANIZER's seat map: physical state, token-authed.
|
|
2300
|
+
*
|
|
2301
|
+
* This used to read `/pub/events/:key/objects` with no credential, which
|
|
2302
|
+
* answers with the BUYER projection — every unit the caller may not buy
|
|
2303
|
+
* collapses to a neutral `blocked`. An anonymous caller may buy only Public
|
|
2304
|
+
* sale inventory, so the cockpit rendered every channel-allocated seat as
|
|
2305
|
+
* blocked and then computed its KPIs, sell-through and (worse) its
|
|
2306
|
+
* block/unblock target sets from that. `/v1/events/:key/objects` returns the
|
|
2307
|
+
* unprojected snapshot the control-room read model already trusts.
|
|
2308
|
+
*/
|
|
2254
2309
|
objects(key: string): Promise<PubObjectsResult>;
|
|
2310
|
+
/**
|
|
2311
|
+
* Exchange the manage token for a one-use organizer socket ticket.
|
|
2312
|
+
*
|
|
2313
|
+
* A browser `WebSocket` cannot send an Authorization header, so the socket's
|
|
2314
|
+
* scope is established here, over ordinary HTTPS. Without it the DO treats a
|
|
2315
|
+
* manager socket as an anonymous public buyer and projects its deltas — so a
|
|
2316
|
+
* hold inside a private allocation is structurally suppressed and the map
|
|
2317
|
+
* drifts away from the truth `objects()` just established.
|
|
2318
|
+
*
|
|
2319
|
+
* Tickets are single-redemption and expire in ~30s: mint one per connect.
|
|
2320
|
+
*/
|
|
2321
|
+
subscribeTicket(key: string): Promise<SubscribeTicket>;
|
|
2255
2322
|
socketUrl(key: string): string;
|
|
2256
2323
|
/** Take FREE seats off sale in one batched call. Optional `releaseAt` (epoch
|
|
2257
2324
|
* ms, future) auto-returns them to sale; `reason` tags the block (M3 uses it).
|
|
@@ -2648,10 +2715,33 @@ declare class SeatManager {
|
|
|
2648
2715
|
private updateRendererInteraction;
|
|
2649
2716
|
private handleSeatSelect;
|
|
2650
2717
|
private repaintAll;
|
|
2718
|
+
/**
|
|
2719
|
+
* Open the cockpit's realtime socket AS THE ORGANIZER.
|
|
2720
|
+
*
|
|
2721
|
+
* The scope has to be established before the upgrade, because a browser
|
|
2722
|
+
* `WebSocket` cannot send an Authorization header: the manage token is traded
|
|
2723
|
+
* over HTTPS for a one-use ticket which rides in `Sec-WebSocket-Protocol`.
|
|
2724
|
+
* Without it the server treats this socket as an anonymous public buyer and
|
|
2725
|
+
* projects its deltas, so any change inside a private channel allocation is
|
|
2726
|
+
* structurally suppressed and the map silently drifts.
|
|
2727
|
+
*
|
|
2728
|
+
* If the mint fails (an expired token, a worker that predates the route) we
|
|
2729
|
+
* still connect unticketed rather than going dark — the public-sale stream is
|
|
2730
|
+
* worth having, and every `resnapshot()` re-establishes physical truth from
|
|
2731
|
+
* the authenticated HTTP read.
|
|
2732
|
+
*/
|
|
2651
2733
|
private connect;
|
|
2652
2734
|
private scheduleReconnect;
|
|
2653
2735
|
private onMessage;
|
|
2654
2736
|
private resnapshot;
|
|
2737
|
+
/**
|
|
2738
|
+
* Replace the whole seat model.
|
|
2739
|
+
*
|
|
2740
|
+
* `fallback` is the compact frame's modal status: those snapshots list only
|
|
2741
|
+
* the seats that DIFFER from it, so every other known label takes it. Without
|
|
2742
|
+
* this the omitted majority would silently fall back to `free` — fine when
|
|
2743
|
+
* the mode really is free, wrong the moment it is not.
|
|
2744
|
+
*/
|
|
2655
2745
|
private applySnapshot;
|
|
2656
2746
|
/** Optimistic local write shared by organizer actions. Paint and tally once,
|
|
2657
2747
|
* even when an arena-sized operation changes hundreds of seats. */
|
|
@@ -3036,4 +3126,4 @@ declare class ChannelsMode {
|
|
|
3036
3126
|
handleBack(): boolean;
|
|
3037
3127
|
}
|
|
3038
3128
|
|
|
3039
|
-
export { ApiError, type ArchiveBlockedDetails, type AssignmentBuckets, type AssignmentDropDetails, type AssignmentResult, type AttachPickerFrameOptions, type BestAvailableResult, type BucketRow, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type ChannelAccessIntent, type ChannelAccessSummary, type ChannelAllocationPage, type ChannelAuditEntry, type ChannelAuditPage, type ChannelCounts, type ChannelListResult, type ChannelPreviewProjection, type ChannelRecord, type ChannelSeatStatus, type ChannelState, type ChannelsCapabilities, type ChannelsClient, ChannelsMode, type ChannelsModeHost, type ChannelsSeatView, type CheckoutHandoff, type CheckoutLineItem, type ControlRoomActivityEntry, type ControlRoomSectionMetric, type ControlRoomSnapshot, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type HoldConflict, type HoldLineItem, type HoldResult, type LogEntry, type LogPage, ManageApi, ManageApiError, PUBLIC_CHANNEL_ID, PUBLIC_CHANNEL_NAME, type Projection, type PubApiOptions, type RealtimeSink, type ReportByStatus, type ReportCategoryMeta, type ReportCategoryRow, type ReportResult, type ResumedHoldResult, SeatManager, type SeatManagerActionResult, type SeatManagerActivity, type SeatManagerCapability, type SeatManagerMode, type SeatManagerOptions, type SeatManagerTallies, SeatPicker, type SeatPickerOptions, type SeatPickerTheme, SeatingChart, type SeatingChartOptions, type SelectedObjectUnavailableEvent, type SelectedSeat, type SelectionSourceRow, type StatusChange, type SubscribeTicket, accessIntentLabel, accessLine, attachPickerFrame, bucketRows, bucketRowsHtml, createBuyerAccessContext, createControllerSink, dropReviewRows, markerOf, mutationCount, needsMoveConfirmation, planAssignment, retryAfterCopy, selectionSources, stateBadge, suggestMarker };
|
|
3129
|
+
export { ApiError, type ArchiveBlockedDetails, type AssignmentBuckets, type AssignmentDropDetails, type AssignmentResult, type AttachPickerFrameOptions, type BestAvailableResult, type BucketRow, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type ChannelAccessIntent, type ChannelAccessSummary, type ChannelAllocationPage, type ChannelAuditEntry, type ChannelAuditPage, type ChannelCounts, type ChannelListResult, type ChannelPreviewProjection, type ChannelRecord, type ChannelSeatStatus, type ChannelState, type ChannelsCapabilities, type ChannelsClient, ChannelsMode, type ChannelsModeHost, type ChannelsSeatView, type CheckoutHandoff, type CheckoutLineItem, type ControlRoomActivityEntry, type ControlRoomSectionMetric, type ControlRoomSnapshot, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type HoldConflict, type HoldLineItem, type HoldResult, type LogEntry, type LogPage, ManageApi, ManageApiError, PUBLIC_CHANNEL_ID, PUBLIC_CHANNEL_NAME, type Projection, type PubApiOptions, type RealtimeSink, type ReportByStatus, type ReportCategoryMeta, type ReportCategoryRow, type ReportResult, type ResumedHoldResult, SeatManager, type SeatManagerActionResult, type SeatManagerActivity, type SeatManagerCapability, type SeatManagerMode, type SeatManagerOptions, type SeatManagerTallies, SeatPicker, type SeatPickerOptions, type SeatPickerTheme, SeatingChart, type SeatingChartOptions, type SelectedObjectUnavailableEvent, type SelectedSeat, type SelectionSourceRow, type StatusChange, type SubscribeTicket$1 as SubscribeTicket, accessIntentLabel, accessLine, attachPickerFrame, bucketRows, bucketRowsHtml, createBuyerAccessContext, createControllerSink, dropReviewRows, isPublicChannelId, markerLetter, markerOf, mutationCount, needsMoveConfirmation, planAssignment, retryAfterCopy, selectionSources, stateBadge, suggestMarker };
|
package/dist/index.d.ts
CHANGED
|
@@ -605,7 +605,7 @@ interface RealtimeSink {
|
|
|
605
605
|
activeHolds: number;
|
|
606
606
|
}): void;
|
|
607
607
|
}
|
|
608
|
-
interface SubscribeTicket {
|
|
608
|
+
interface SubscribeTicket$1 {
|
|
609
609
|
ticket?: string;
|
|
610
610
|
/** Exactly what to hand `new WebSocket(url, protocols)`, per protocol doc §3. */
|
|
611
611
|
protocols?: string[];
|
|
@@ -616,7 +616,7 @@ interface BuyerRealtimeOptions {
|
|
|
616
616
|
sink: RealtimeSink;
|
|
617
617
|
/** Mint a one-use ticket for THIS connection attempt. Returns null for the
|
|
618
618
|
* anonymous public case (no ticket needed). Throwing stops the client. */
|
|
619
|
-
mintTicket?: () => Promise<SubscribeTicket | null>;
|
|
619
|
+
mintTicket?: () => Promise<SubscribeTicket$1 | null>;
|
|
620
620
|
/** Typed access states. 4401 arrives here as `revoked`. */
|
|
621
621
|
onAccessUnavailable?: (event: BuyerAccessUnavailableEvent) => void;
|
|
622
622
|
/** Test seam. Defaults to the global WebSocket. */
|
|
@@ -1830,9 +1830,23 @@ declare function attachPickerFrame(iframe: HTMLIFrameElement, opts?: AttachPicke
|
|
|
1830
1830
|
*
|
|
1831
1831
|
* Spec: sales-channels-product-ux-spec §8.4–8.5.
|
|
1832
1832
|
*/
|
|
1833
|
-
/**
|
|
1834
|
-
|
|
1833
|
+
/**
|
|
1834
|
+
* Public sale is a built-in pseudo-channel. The server's sentinel for it is the
|
|
1835
|
+
* literal string `'public'` — it is what `GET /channels` returns as
|
|
1836
|
+
* `publicSale.id`, what `GET /channels/allocation` reports for an unallocated
|
|
1837
|
+
* unit, and what `POST /channels/assignments` accepts (alongside `null`) as the
|
|
1838
|
+
* target meaning "send these back to public sale".
|
|
1839
|
+
*
|
|
1840
|
+
* This constant was `''` until 2026-08-02, which silently made every public unit
|
|
1841
|
+
* look like an unknown PRIVATE channel to `planAssignment` and `markerOf` — the
|
|
1842
|
+
* cause of the Review sheet's phantom "moved out of another channel" line and
|
|
1843
|
+
* the rail's "?" marker. Keep it byte-identical to the server's
|
|
1844
|
+
* `eventChannels.PUBLIC_CHANNEL_ID`.
|
|
1845
|
+
*/
|
|
1846
|
+
declare const PUBLIC_CHANNEL_ID = "public";
|
|
1835
1847
|
declare const PUBLIC_CHANNEL_NAME = "Public sale";
|
|
1848
|
+
/** True for every spelling of "public sale" a worker may hand us. */
|
|
1849
|
+
declare function isPublicChannelId(id: string | null | undefined): boolean;
|
|
1836
1850
|
type ChannelState = 'active' | 'paused' | 'archived';
|
|
1837
1851
|
/** Physical inventory status, as the manage surface speaks it. */
|
|
1838
1852
|
type ChannelSeatStatus = 'free' | 'held' | 'booked' | 'blocked';
|
|
@@ -1873,7 +1887,9 @@ interface ChannelRecord {
|
|
|
1873
1887
|
access?: ChannelAccessSummary | null;
|
|
1874
1888
|
}
|
|
1875
1889
|
interface PublicSaleChannel {
|
|
1876
|
-
|
|
1890
|
+
/** `'public'` on every shipped worker; typed loosely so an older build that
|
|
1891
|
+
* still answers `''` is normalised rather than rejected. */
|
|
1892
|
+
id: string;
|
|
1877
1893
|
name: string;
|
|
1878
1894
|
state: 'active';
|
|
1879
1895
|
counts: ChannelCounts;
|
|
@@ -1920,6 +1936,16 @@ interface ArchiveBlockedDetails {
|
|
|
1920
1936
|
latestHoldExpiresAt?: number | null;
|
|
1921
1937
|
retryAfterMs?: number;
|
|
1922
1938
|
}
|
|
1939
|
+
/**
|
|
1940
|
+
* Clamp any marker text down to the ONE uppercase character every surface draws.
|
|
1941
|
+
*
|
|
1942
|
+
* The server stores `marker` as free text (it only length-caps it), so a channel
|
|
1943
|
+
* created outside this widget can carry "star" or "VIP". The comp's marker chip
|
|
1944
|
+
* is a single glyph: taking two characters ("ST") overflows the 22px chip and
|
|
1945
|
+
* stops reading as a letter. Non-letter leading characters (an emoji, a digit,
|
|
1946
|
+
* punctuation) are skipped in favour of the first real letter.
|
|
1947
|
+
*/
|
|
1948
|
+
declare function markerLetter(raw: string | null | undefined, fallback: string): string;
|
|
1923
1949
|
/**
|
|
1924
1950
|
* Suggest a marker for a new channel: the first letter of its name when that
|
|
1925
1951
|
* letter is still free, otherwise the next unused letter. Deterministic so the
|
|
@@ -2037,8 +2063,13 @@ declare function stateBadge(state: ChannelState | 'builtin'): string;
|
|
|
2037
2063
|
* cookie-CSRF gate, so no extra client header is needed.
|
|
2038
2064
|
* - `credentials: 'omit'` — there is no session cookie; the CMS runs
|
|
2039
2065
|
* cross-origin. The worker's credentialed CORS still echoes the CMS origin.
|
|
2040
|
-
* -
|
|
2041
|
-
*
|
|
2066
|
+
* - `/pub/events/:key/chart` stays public: geometry is the same map buyers
|
|
2067
|
+
* see. The seat STATE reads are not. `/pub/.../objects` and an unticketed
|
|
2068
|
+
* `/pub/.../subscribe` both answer with the BUYER projection, which shows
|
|
2069
|
+
* inventory the caller may not buy as a neutral `blocked` — so an organizer
|
|
2070
|
+
* reading them sees its own channel allocations as blocked seats. Both now
|
|
2071
|
+
* go through the token: `/v1/events/:key/objects` for the snapshot, and a
|
|
2072
|
+
* `/v1/events/:key/subscribe-tickets` mint for the socket's scope.
|
|
2042
2073
|
*
|
|
2043
2074
|
* `box-book` is intentionally omitted for M1 (box office ships in M2, and the
|
|
2044
2075
|
* route is still session-only server-side).
|
|
@@ -2219,6 +2250,18 @@ interface LogPage {
|
|
|
2219
2250
|
entries: LogEntry[];
|
|
2220
2251
|
nextBefore: number | null;
|
|
2221
2252
|
}
|
|
2253
|
+
/**
|
|
2254
|
+
* A one-use WebSocket subscribe ticket. `protocols` is exactly what to hand
|
|
2255
|
+
* `new WebSocket(url, protocols)` — the ticket rides in `Sec-WebSocket-Protocol`
|
|
2256
|
+
* because a browser socket cannot carry an Authorization header and a bearer
|
|
2257
|
+
* must never travel in a URL.
|
|
2258
|
+
*/
|
|
2259
|
+
interface SubscribeTicket {
|
|
2260
|
+
ticket: string;
|
|
2261
|
+
expiresAt: number;
|
|
2262
|
+
protocol: string;
|
|
2263
|
+
protocols: string[];
|
|
2264
|
+
}
|
|
2222
2265
|
interface PubObjectsResult {
|
|
2223
2266
|
/** Every non-free seat's status keyed by label (free seats omitted). */
|
|
2224
2267
|
seats: Record<string, string>;
|
|
@@ -2250,8 +2293,32 @@ declare class ManageApi {
|
|
|
2250
2293
|
setToken(token: string): void;
|
|
2251
2294
|
private auth;
|
|
2252
2295
|
private pub;
|
|
2296
|
+
/** The chart geometry. Genuinely public — it is the same map buyers see. */
|
|
2253
2297
|
chart(key: string): Promise<PubChartResult>;
|
|
2298
|
+
/**
|
|
2299
|
+
* The ORGANIZER's seat map: physical state, token-authed.
|
|
2300
|
+
*
|
|
2301
|
+
* This used to read `/pub/events/:key/objects` with no credential, which
|
|
2302
|
+
* answers with the BUYER projection — every unit the caller may not buy
|
|
2303
|
+
* collapses to a neutral `blocked`. An anonymous caller may buy only Public
|
|
2304
|
+
* sale inventory, so the cockpit rendered every channel-allocated seat as
|
|
2305
|
+
* blocked and then computed its KPIs, sell-through and (worse) its
|
|
2306
|
+
* block/unblock target sets from that. `/v1/events/:key/objects` returns the
|
|
2307
|
+
* unprojected snapshot the control-room read model already trusts.
|
|
2308
|
+
*/
|
|
2254
2309
|
objects(key: string): Promise<PubObjectsResult>;
|
|
2310
|
+
/**
|
|
2311
|
+
* Exchange the manage token for a one-use organizer socket ticket.
|
|
2312
|
+
*
|
|
2313
|
+
* A browser `WebSocket` cannot send an Authorization header, so the socket's
|
|
2314
|
+
* scope is established here, over ordinary HTTPS. Without it the DO treats a
|
|
2315
|
+
* manager socket as an anonymous public buyer and projects its deltas — so a
|
|
2316
|
+
* hold inside a private allocation is structurally suppressed and the map
|
|
2317
|
+
* drifts away from the truth `objects()` just established.
|
|
2318
|
+
*
|
|
2319
|
+
* Tickets are single-redemption and expire in ~30s: mint one per connect.
|
|
2320
|
+
*/
|
|
2321
|
+
subscribeTicket(key: string): Promise<SubscribeTicket>;
|
|
2255
2322
|
socketUrl(key: string): string;
|
|
2256
2323
|
/** Take FREE seats off sale in one batched call. Optional `releaseAt` (epoch
|
|
2257
2324
|
* ms, future) auto-returns them to sale; `reason` tags the block (M3 uses it).
|
|
@@ -2648,10 +2715,33 @@ declare class SeatManager {
|
|
|
2648
2715
|
private updateRendererInteraction;
|
|
2649
2716
|
private handleSeatSelect;
|
|
2650
2717
|
private repaintAll;
|
|
2718
|
+
/**
|
|
2719
|
+
* Open the cockpit's realtime socket AS THE ORGANIZER.
|
|
2720
|
+
*
|
|
2721
|
+
* The scope has to be established before the upgrade, because a browser
|
|
2722
|
+
* `WebSocket` cannot send an Authorization header: the manage token is traded
|
|
2723
|
+
* over HTTPS for a one-use ticket which rides in `Sec-WebSocket-Protocol`.
|
|
2724
|
+
* Without it the server treats this socket as an anonymous public buyer and
|
|
2725
|
+
* projects its deltas, so any change inside a private channel allocation is
|
|
2726
|
+
* structurally suppressed and the map silently drifts.
|
|
2727
|
+
*
|
|
2728
|
+
* If the mint fails (an expired token, a worker that predates the route) we
|
|
2729
|
+
* still connect unticketed rather than going dark — the public-sale stream is
|
|
2730
|
+
* worth having, and every `resnapshot()` re-establishes physical truth from
|
|
2731
|
+
* the authenticated HTTP read.
|
|
2732
|
+
*/
|
|
2651
2733
|
private connect;
|
|
2652
2734
|
private scheduleReconnect;
|
|
2653
2735
|
private onMessage;
|
|
2654
2736
|
private resnapshot;
|
|
2737
|
+
/**
|
|
2738
|
+
* Replace the whole seat model.
|
|
2739
|
+
*
|
|
2740
|
+
* `fallback` is the compact frame's modal status: those snapshots list only
|
|
2741
|
+
* the seats that DIFFER from it, so every other known label takes it. Without
|
|
2742
|
+
* this the omitted majority would silently fall back to `free` — fine when
|
|
2743
|
+
* the mode really is free, wrong the moment it is not.
|
|
2744
|
+
*/
|
|
2655
2745
|
private applySnapshot;
|
|
2656
2746
|
/** Optimistic local write shared by organizer actions. Paint and tally once,
|
|
2657
2747
|
* even when an arena-sized operation changes hundreds of seats. */
|
|
@@ -3036,4 +3126,4 @@ declare class ChannelsMode {
|
|
|
3036
3126
|
handleBack(): boolean;
|
|
3037
3127
|
}
|
|
3038
3128
|
|
|
3039
|
-
export { ApiError, type ArchiveBlockedDetails, type AssignmentBuckets, type AssignmentDropDetails, type AssignmentResult, type AttachPickerFrameOptions, type BestAvailableResult, type BucketRow, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type ChannelAccessIntent, type ChannelAccessSummary, type ChannelAllocationPage, type ChannelAuditEntry, type ChannelAuditPage, type ChannelCounts, type ChannelListResult, type ChannelPreviewProjection, type ChannelRecord, type ChannelSeatStatus, type ChannelState, type ChannelsCapabilities, type ChannelsClient, ChannelsMode, type ChannelsModeHost, type ChannelsSeatView, type CheckoutHandoff, type CheckoutLineItem, type ControlRoomActivityEntry, type ControlRoomSectionMetric, type ControlRoomSnapshot, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type HoldConflict, type HoldLineItem, type HoldResult, type LogEntry, type LogPage, ManageApi, ManageApiError, PUBLIC_CHANNEL_ID, PUBLIC_CHANNEL_NAME, type Projection, type PubApiOptions, type RealtimeSink, type ReportByStatus, type ReportCategoryMeta, type ReportCategoryRow, type ReportResult, type ResumedHoldResult, SeatManager, type SeatManagerActionResult, type SeatManagerActivity, type SeatManagerCapability, type SeatManagerMode, type SeatManagerOptions, type SeatManagerTallies, SeatPicker, type SeatPickerOptions, type SeatPickerTheme, SeatingChart, type SeatingChartOptions, type SelectedObjectUnavailableEvent, type SelectedSeat, type SelectionSourceRow, type StatusChange, type SubscribeTicket, accessIntentLabel, accessLine, attachPickerFrame, bucketRows, bucketRowsHtml, createBuyerAccessContext, createControllerSink, dropReviewRows, markerOf, mutationCount, needsMoveConfirmation, planAssignment, retryAfterCopy, selectionSources, stateBadge, suggestMarker };
|
|
3129
|
+
export { ApiError, type ArchiveBlockedDetails, type AssignmentBuckets, type AssignmentDropDetails, type AssignmentResult, type AttachPickerFrameOptions, type BestAvailableResult, type BucketRow, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type ChannelAccessIntent, type ChannelAccessSummary, type ChannelAllocationPage, type ChannelAuditEntry, type ChannelAuditPage, type ChannelCounts, type ChannelListResult, type ChannelPreviewProjection, type ChannelRecord, type ChannelSeatStatus, type ChannelState, type ChannelsCapabilities, type ChannelsClient, ChannelsMode, type ChannelsModeHost, type ChannelsSeatView, type CheckoutHandoff, type CheckoutLineItem, type ControlRoomActivityEntry, type ControlRoomSectionMetric, type ControlRoomSnapshot, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type HoldConflict, type HoldLineItem, type HoldResult, type LogEntry, type LogPage, ManageApi, ManageApiError, PUBLIC_CHANNEL_ID, PUBLIC_CHANNEL_NAME, type Projection, type PubApiOptions, type RealtimeSink, type ReportByStatus, type ReportCategoryMeta, type ReportCategoryRow, type ReportResult, type ResumedHoldResult, SeatManager, type SeatManagerActionResult, type SeatManagerActivity, type SeatManagerCapability, type SeatManagerMode, type SeatManagerOptions, type SeatManagerTallies, SeatPicker, type SeatPickerOptions, type SeatPickerTheme, SeatingChart, type SeatingChartOptions, type SelectedObjectUnavailableEvent, type SelectedSeat, type SelectionSourceRow, type StatusChange, type SubscribeTicket$1 as SubscribeTicket, accessIntentLabel, accessLine, attachPickerFrame, bucketRows, bucketRowsHtml, createBuyerAccessContext, createControllerSink, dropReviewRows, isPublicChannelId, markerLetter, markerOf, mutationCount, needsMoveConfirmation, planAssignment, retryAfterCopy, selectionSources, stateBadge, suggestMarker };
|