Booking Client (@seatmap.pro/renderer) API Changes - v1.65.0

Release: v1.65.0 Date: 2026-04-29 Package: @seatmap.pro/renderer


Summary

Aspect Status
Breaking changes NO
New public API 0
Modified models IBaseSector gains optional labelVisible?: boolean (additive, default off)
Internal refactor sentry.ts (booking-client internal — not exported from the package; no consumer impact)

The renderer package public surface (@seatmap.pro/renderer) is unchanged for typical consumers. No re-renders or migration are required.


Model Additions

IBaseSector.labelVisible?: boolean

Issue: SEAT-895

A new optional flag on IBaseSector controls whether the section name label renders. Default behaviour is type-specific:

  • Table sections: null / false / undefined → label hidden (preserves the pre-1.65 behaviour where tables never rendered labels). true → label rendered on the table.
  • Non-table sections: null / true / undefined → label rendered (preserves the pre-1.65 behaviour where non-table sections always rendered labels via the SVG outline pipeline). false → label hidden.

The flag travels through SectorDTO from editor-service, so the renderer only ever observes the resolved value. Existing schemas open with no visual change.

interface IBaseSector {
  id: number;
  name: string;
  labelAnchorX?: number;
  labelAnchorY?: number;
  labelStyle?: ILabelStyle;
  /** SEAT-895 — whether the section name label renders */
  labelVisible?: boolean;
  // ... existing fields ...
}

No host integration changes are required. Hosts that read IBaseSector for custom rendering can opt to honor labelVisible if they want parity with the bundled renderer.


Renderer Behaviour Changes

Table label rendering — Canvas2D and WebGL paths

Issue: SEAT-895

When a Table section is rendered with labelVisible=true, the section name draws inside Table._render() (Canvas2D path) and through the WebGL atlas pipeline (OutlineLayer / WebGLLayer). Position uses the existing labelAnchorX / labelAnchorY if set, falling back to the table’s geometric center. Font / size uses the same ladder as other section labels (LABEL_STYLES) so visual scale is consistent.

A bug-fix in this release ensures table labels also render correctly on schemas that have no GA bindings (previously labels were hidden on table-only schemas as a side-effect of the GA section binding lookup).

WebGL context-loss capture (internal)

Issue: SEAT-958

WebGLLayer now captures webglcontextlost as a Sentry warning with diagnostic context (heap fraction, GPU renderer info via WEBGL_debug_renderer_info, canvas dimensions, WEBGL_lose_context.statusMessage). This is internal to the renderer — host applications that already register their own webglcontextlost listener continue to receive the event independently.


Internal — Sentry refactor (not part of public API)

Issue: SEAT-958

products/booking-client/src/sentry.ts was refactored to fix four production-observability gaps. These exports are internal to the booking-client package and are not re-exported from @seatmap.pro/renderer. Listed here for completeness for in-tree contributors and forks.

  • Removed: initSentry(instanceId: string | undefined).
  • Added:
    • initSentryEarly(component: SentryComponent) — call at the top of renderer construction, before any business logic.
    • setSentryInstanceId(instanceId: string | undefined) — call once the renderer instance id is available, to enrich the existing scope.
    • reportError(error: unknown) — explicit reporter that respects the new 4xx-ApiError filter.
    • SentryComponent = 'booking-client' | 'booking-client-admin' — string-literal union; new renderer surfaces must be added explicitly.
  • Behavioural changes:
    • 4xx ApiError exceptions are dropped in beforeSend. Only 5xx and non-ApiError exceptions reach GlitchTip.
    • The admin renderer (SeatmapAdminRenderer) now initialises Sentry. Previously every captureException call from admin sessions was a silent no-op.
    • Token query-parameter scrubbing (URL, query_string, Referer header) is centralised in scrubTokenFromEvent.

In-tree consumers that imported initSentry directly must migrate to initSentryEarly + setSentryInstanceId. The two bundled renderers (SeatmapBookingRenderer, SeatmapAdminRenderer) and the BookingApiClient were updated in the same commit.


Migration Guide

Renderer integrators (@seatmap.pro/renderer consumers)

No action required. The public API and renderer behaviour are unchanged for typical integrations. Existing schemas continue to render identically; new sections with labelVisible=true render the label as expected.

Editor / backend integrators consuming SectorDTO

If your service consumes SectorDTO directly (for example, a custom export pipeline), the field labelVisible: boolean | null is now part of the DTO. Treat null as the default and apply the type-specific resolution above if you render labels yourself.

In-tree contributors

If you maintain a fork or in-tree consumer that imports from products/booking-client/src/sentry, migrate to the new exports as documented above.


Deprecations

No deprecations in this release.


References