seatschart 0.1.1 → 0.3.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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +191 -16
  3. data/lib/seatschart/api/audit_api.rb +2 -2
  4. data/lib/seatschart/api/charts_api.rb +808 -75
  5. data/lib/seatschart/api/embed_api.rb +18 -7
  6. data/lib/seatschart/api/embed_origins_api.rb +63 -2
  7. data/lib/seatschart/api/event_log_api.rb +2 -2
  8. data/lib/seatschart/api/events_api.rb +1594 -112
  9. data/lib/seatschart/api/health_api.rb +244 -0
  10. data/lib/seatschart/api/listings_api.rb +884 -0
  11. data/lib/seatschart/api/map_designer_api.rb +11 -9
  12. data/lib/seatschart/api/object_status_api.rb +2 -2
  13. data/lib/seatschart/api/public_api.rb +350 -0
  14. data/lib/seatschart/api/sandboxes_api.rb +672 -0
  15. data/lib/seatschart/api/seasons_api.rb +455 -42
  16. data/lib/seatschart/api/seats_api.rb +13 -32
  17. data/lib/seatschart/api/usage_api.rb +20 -17
  18. data/lib/seatschart/api/webhooks_api.rb +2 -2
  19. data/lib/seatschart/api/workspace_api.rb +306 -20
  20. data/lib/seatschart/models/api_error.rb +307 -0
  21. data/lib/seatschart/models/api_error_params_value.rb +105 -0
  22. data/lib/seatschart/models/delete_api_sandboxes_by_sandbox_id200_response.rb +255 -0
  23. data/lib/seatschart/models/get_api_monitoring_requests200_response.rb +78 -4
  24. data/lib/seatschart/models/get_api_monitoring_requests200_response_concurrency.rb +318 -0
  25. data/lib/seatschart/models/get_api_monitoring_requests200_response_concurrency_api_keys_inner.rb +297 -0
  26. data/lib/seatschart/models/get_api_monitoring_requests200_response_points_inner.rb +38 -4
  27. data/lib/seatschart/models/get_api_sandboxes200_response.rb +239 -0
  28. data/lib/seatschart/models/get_api_sandboxes200_response_items_inner.rb +431 -0
  29. data/lib/seatschart/models/get_api_sandboxes200_response_items_inner_rate_limits.rb +270 -0
  30. data/lib/seatschart/models/get_api_sandboxes200_response_items_inner_usage.rb +287 -0
  31. data/lib/seatschart/models/get_api_status200_response.rb +387 -0
  32. data/lib/seatschart/models/get_api_status200_response_components_inner.rb +330 -0
  33. data/lib/seatschart/models/get_api_status200_response_components_inner_days_inner.rb +301 -0
  34. data/lib/seatschart/models/get_api_status200_response_incidents_inner.rb +374 -0
  35. data/lib/seatschart/models/get_api_status200_response_maintenance_inner.rb +350 -0
  36. data/lib/seatschart/models/get_api_status503_response.rb +271 -0
  37. data/lib/seatschart/models/get_api_workspace_buyer_extra_data200_response.rb +241 -0
  38. data/lib/seatschart/models/get_api_workspace_defaults200_response.rb +254 -0
  39. data/lib/seatschart/models/get_api_workspace_defaults200_response_renderer.rb +246 -0
  40. data/lib/seatschart/models/get_api_workspace_defaults200_response_renderer_built_in.rb +270 -0
  41. data/lib/seatschart/models/get_api_workspace_settings200_response_effective.rb +20 -4
  42. data/lib/seatschart/models/get_api_workspace_settings200_response_overrides.rb +13 -4
  43. data/lib/seatschart/models/get_api_workspace_settings200_response_sources.rb +32 -4
  44. data/lib/seatschart/models/get_api_workspaces200_response_items_inner.rb +34 -5
  45. data/lib/seatschart/models/patch_api_events_by_event_id_listings_by_listing_id_request.rb +379 -0
  46. data/lib/seatschart/models/patch_api_events_by_event_id_request.rb +16 -6
  47. data/lib/seatschart/models/patch_api_listing_types_by_key_request.rb +376 -0
  48. data/lib/seatschart/models/patch_api_seasons_by_season_id_partial_seasons_by_partial_season_id_request.rb +268 -0
  49. data/lib/seatschart/models/patch_api_seasons_by_season_id_request.rb +41 -5
  50. data/lib/seatschart/models/patch_api_webhooks_by_id_request.rb +1 -1
  51. data/lib/seatschart/models/patch_api_workspace_chart_validation_request_severities.rb +25 -4
  52. data/lib/seatschart/models/patch_api_workspace_defaults_request.rb +224 -0
  53. data/lib/seatschart/models/patch_api_workspace_defaults_request_renderer.rb +249 -0
  54. data/lib/seatschart/models/patch_api_workspace_settings_request.rb +18 -7
  55. data/lib/seatschart/models/post_api_charts_by_chart_id_actions_copy_to_workspace_request.rb +39 -1
  56. data/lib/seatschart/models/post_api_charts_by_chart_id_actions_validate_request.rb +1 -0
  57. data/lib/seatschart/models/post_api_charts_by_chart_id_actions_validate_request_seats_inner_accessibility.rb +6 -6
  58. data/lib/seatschart/models/post_api_charts_by_chart_id_map_publish422_response_issues_inner.rb +64 -6
  59. data/lib/seatschart/models/post_api_charts_by_chart_id_map_publish_request.rb +1 -1
  60. data/lib/seatschart/models/post_api_embed_tokens_request.rb +18 -15
  61. data/lib/seatschart/models/post_api_embed_tokens_request_safe_mode_options.rb +226 -0
  62. data/lib/seatschart/models/post_api_events_actions_change_object_status_request_status_changes_inner.rb +0 -11
  63. data/lib/seatschart/models/post_api_events_actions_edit_for_sale_config_request.rb +251 -0
  64. data/lib/seatschart/models/post_api_events_actions_edit_for_sale_config_request_events_inner.rb +322 -0
  65. data/lib/seatschart/models/post_api_events_bulk_request_events_inner.rb +42 -1
  66. data/lib/seatschart/models/post_api_events_by_event_id_actions_change_object_status_request.rb +13 -26
  67. data/lib/seatschart/models/post_api_events_by_event_id_actions_change_object_status_request_listing.rb +392 -0
  68. data/lib/seatschart/models/post_api_events_by_event_id_actions_edit_for_sale_config_request.rb +277 -0
  69. data/lib/seatschart/models/post_api_events_by_event_id_actions_edit_for_sale_config_request_for_sale_inner.rb +319 -0
  70. data/lib/seatschart/models/post_api_events_by_event_id_actions_mark_everything_as_not_for_sale_request.rb +215 -0
  71. data/lib/seatschart/models/post_api_events_by_event_id_listings_by_listing_id_actions_mark_sold_request.rb +243 -0
  72. data/lib/seatschart/models/post_api_events_by_event_id_listings_request.rb +435 -0
  73. data/lib/seatschart/models/post_api_events_by_event_id_listings_request_objects_inner.rb +104 -0
  74. data/lib/seatschart/models/post_api_events_by_event_id_listings_request_objects_inner_any_of.rb +325 -0
  75. data/lib/seatschart/models/post_api_events_by_event_id_map_publish_request.rb +215 -0
  76. data/lib/seatschart/models/post_api_events_request.rb +42 -1
  77. data/lib/seatschart/models/{patch_api_events_by_event_id_request_categories_inner.rb → post_api_events_request_categories_inner.rb} +3 -3
  78. data/lib/seatschart/models/post_api_extract_seats200_response.rb +459 -0
  79. data/lib/seatschart/models/post_api_extract_seats200_response_seats_inner.rb +323 -0
  80. data/lib/seatschart/models/post_api_extract_seats200_response_suggested_inner.rb +320 -0
  81. data/lib/seatschart/models/post_api_extract_seats_request.rb +124 -4
  82. data/lib/seatschart/models/post_api_extract_seats_request_examples.rb +105 -0
  83. data/lib/seatschart/models/post_api_extract_seats_request_examples_any_of_inner.rb +293 -0
  84. data/lib/seatschart/models/post_api_extract_seats_request_negatives.rb +105 -0
  85. data/lib/seatschart/models/post_api_extract_seats_request_region.rb +105 -0
  86. data/lib/seatschart/models/post_api_extract_seats_request_region_any_of.rb +363 -0
  87. data/lib/seatschart/models/post_api_ga_confirm_request.rb +0 -44
  88. data/lib/seatschart/models/post_api_ga_release_request.rb +0 -11
  89. data/lib/seatschart/models/post_api_ga_reserve_request.rb +0 -33
  90. data/lib/seatschart/models/post_api_hold_tokens_request.rb +0 -22
  91. data/lib/seatschart/models/post_api_listing_types_request.rb +439 -0
  92. data/lib/seatschart/models/post_api_quotes_request.rb +0 -22
  93. data/lib/seatschart/models/post_api_sandboxes201_response.rb +245 -0
  94. data/lib/seatschart/models/post_api_sandboxes201_response_admin_key.rb +286 -0
  95. data/lib/seatschart/models/post_api_sandboxes201_response_copied.rb +313 -0
  96. data/lib/seatschart/models/post_api_sandboxes201_response_copied_charts_inner.rb +281 -0
  97. data/lib/seatschart/models/post_api_sandboxes201_response_copied_events_inner.rb +281 -0
  98. data/lib/seatschart/models/post_api_sandboxes201_response_copied_events_with_own_map_inner.rb +265 -0
  99. data/lib/seatschart/models/post_api_sandboxes201_response_copied_key_conflicts_inner.rb +287 -0
  100. data/lib/seatschart/models/post_api_sandboxes201_response_copied_seasons_inner.rb +312 -0
  101. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_actions_copy_from_production200_response.rb +313 -0
  102. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_actions_copy_from_production_request.rb +255 -0
  103. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_actions_join200_response.rb +271 -0
  104. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_actions_reset200_response.rb +268 -0
  105. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_actions_reset_request.rb +225 -0
  106. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_admin_key201_response.rb +253 -0
  107. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_admin_key201_response_api_key.rb +286 -0
  108. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_admin_key_request.rb +252 -0
  109. data/lib/seatschart/models/post_api_sandboxes_request.rb +319 -0
  110. data/lib/seatschart/models/post_api_seasons_by_season_id_partial_seasons_request.rb +27 -1
  111. data/lib/seatschart/models/post_api_seasons_request.rb +40 -4
  112. data/lib/seatschart/models/post_api_seats_best_available_request.rb +0 -11
  113. data/lib/seatschart/models/post_api_seats_confirm_request.rb +5 -49
  114. data/lib/seatschart/models/post_api_seats_release_request.rb +5 -16
  115. data/lib/seatschart/models/post_api_seats_reserve_request.rb +5 -27
  116. data/lib/seatschart/models/post_api_viewer_tokens_request.rb +0 -11
  117. data/lib/seatschart/models/post_api_webhooks_request.rb +1 -1
  118. data/lib/seatschart/models/post_api_workspaces_request.rb +1 -1
  119. data/lib/seatschart/models/put_api_charts_by_chart_id_map_draft_request.rb +349 -0
  120. data/lib/seatschart/models/put_api_workspace_buyer_extra_data_request.rb +260 -0
  121. data/lib/seatschart/models/put_internal_status_notices_request.rb +242 -0
  122. data/lib/seatschart/models/put_internal_status_notices_request_notices_inner.rb +445 -0
  123. data/lib/seatschart/retry.rb +106 -7
  124. data/lib/seatschart/version.rb +1 -1
  125. data/lib/seatschart.rb +69 -2
  126. metadata +71 -4
  127. data/lib/seatschart/api/default_api.rb +0 -763
@@ -19,8 +19,8 @@ module SeatsChart
19
19
  def initialize(api_client = ApiClient.default)
20
20
  @api_client = api_client
21
21
  end
22
- # Extract seat candidates with OpenCV
23
- # Multipart file and optional calibration JSON (sample patches, rotations and grouping); returns source-image pixel coordinates for review. Does not persist seats. Requires CV_SERVICE_URL.
22
+ # Extract seat candidates from a floor-plan image
23
+ # Multipart image (PNG/JPEG/WebP, at most 8 MiB and 16 megapixels). Returns seat centres in source-image pixels for review in the map designer, plus the `mode` that produced them; nothing is persisted. Requires CV_SERVICE_URL. Review (`auto` and `examples`): every seat carries a `confidence` (0-1) and the uncertain ones `doubtful: true`; `review` counts them and the designer shows them for a keep/remove decision instead of keeping them silently. `legibility` is `ok`, `low_resolution` or `no_individual_seats`; when it is not `ok` every seat is doubtful and the count is not reliable. `suggested` lists places where a seat was probably missed (not part of `seats`); the designer offers them in the review. Clicks never remove a seat on weak evidence: a seat they argue against stays, flagged `doubtful`. When the clicked seats (or, without clicks, an illegible plan) are tiny, the scanner reads the plan again upscaled. Vector plans: send the PDF or SVG as `vector` (and `vector_page`) next to its rendered image; the response says whether its geometry was `used`. Modes: `auto` (default) finds the repeated seat glyphs on its own and infers size, rotation and threshold; `examples` uses 1-24 clicked seats (`examples`): a click on a missed seat adds that look, then only detections consistent with the clicked seats (their look, size and spacing, or the same drawn vector shape) stay, plus seats of another look that the scanner is confident about; every clicked seat is kept; `edges` is the legacy contour mode tuned by the `seat_diameter`/`closing_kernel` query parameters. Refinements for `auto` and `examples`: `negatives` (points the user marked as not a seat after a scan) remove that detection and its look-alikes, or the whole style when most of it looks alike; `region` limits the scan to a rectangle. `calibration` (sample patches) and `profile` (the mapa1-mapa6 regression benchmark) are kept for backward compatibility and cannot be combined with `mode`, `examples`, `negatives` or `region`. Errors: 422 for invalid parameters or work budgets, 413/415 for oversized or unsupported images (or a `vector` file that is neither PDF nor SVG), 503 when the scanner is busy or not configured, 504 on its 80-second deadline.
24
24
  # @param post_api_extract_seats_request [PostApiExtractSeatsRequest]
25
25
  # @param [Hash] opts the optional parameters
26
26
  # @option opts [Float] :seat_diameter
@@ -28,14 +28,14 @@ module SeatsChart
28
28
  # @option opts [Float] :canny_low
29
29
  # @option opts [Float] :canny_high
30
30
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
31
- # @return [nil]
31
+ # @return [PostApiExtractSeats200Response]
32
32
  def post_api_extract_seats(post_api_extract_seats_request, opts = {})
33
- post_api_extract_seats_with_http_info(post_api_extract_seats_request, opts)
34
- nil
33
+ data, _status_code, _headers = post_api_extract_seats_with_http_info(post_api_extract_seats_request, opts)
34
+ data
35
35
  end
36
36
 
37
- # Extract seat candidates with OpenCV
38
- # Multipart file and optional calibration JSON (sample patches, rotations and grouping); returns source-image pixel coordinates for review. Does not persist seats. Requires CV_SERVICE_URL.
37
+ # Extract seat candidates from a floor-plan image
38
+ # Multipart image (PNG/JPEG/WebP, at most 8 MiB and 16 megapixels). Returns seat centres in source-image pixels for review in the map designer, plus the `mode` that produced them; nothing is persisted. Requires CV_SERVICE_URL. Review (`auto` and `examples`): every seat carries a `confidence` (0-1) and the uncertain ones `doubtful: true`; `review` counts them and the designer shows them for a keep/remove decision instead of keeping them silently. `legibility` is `ok`, `low_resolution` or `no_individual_seats`; when it is not `ok` every seat is doubtful and the count is not reliable. `suggested` lists places where a seat was probably missed (not part of `seats`); the designer offers them in the review. Clicks never remove a seat on weak evidence: a seat they argue against stays, flagged `doubtful`. When the clicked seats (or, without clicks, an illegible plan) are tiny, the scanner reads the plan again upscaled. Vector plans: send the PDF or SVG as `vector` (and `vector_page`) next to its rendered image; the response says whether its geometry was `used`. Modes: `auto` (default) finds the repeated seat glyphs on its own and infers size, rotation and threshold; `examples` uses 1-24 clicked seats (`examples`): a click on a missed seat adds that look, then only detections consistent with the clicked seats (their look, size and spacing, or the same drawn vector shape) stay, plus seats of another look that the scanner is confident about; every clicked seat is kept; `edges` is the legacy contour mode tuned by the `seat_diameter`/`closing_kernel` query parameters. Refinements for `auto` and `examples`: `negatives` (points the user marked as not a seat after a scan) remove that detection and its look-alikes, or the whole style when most of it looks alike; `region` limits the scan to a rectangle. `calibration` (sample patches) and `profile` (the mapa1-mapa6 regression benchmark) are kept for backward compatibility and cannot be combined with `mode`, `examples`, `negatives` or `region`. Errors: 422 for invalid parameters or work budgets, 413/415 for oversized or unsupported images (or a `vector` file that is neither PDF nor SVG), 503 when the scanner is busy or not configured, 504 on its 80-second deadline.
39
39
  # @param post_api_extract_seats_request [PostApiExtractSeatsRequest]
40
40
  # @param [Hash] opts the optional parameters
41
41
  # @option opts [Float] :seat_diameter
@@ -43,7 +43,7 @@ module SeatsChart
43
43
  # @option opts [Float] :canny_low
44
44
  # @option opts [Float] :canny_high
45
45
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
46
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
46
+ # @return [Array<(PostApiExtractSeats200Response, Integer, Hash)>] PostApiExtractSeats200Response data, response status code and response headers
47
47
  def post_api_extract_seats_with_http_info(post_api_extract_seats_request, opts = {})
48
48
  if @api_client.config.debugging
49
49
  @api_client.config.logger.debug 'Calling API: MapDesignerApi.post_api_extract_seats ...'
@@ -96,6 +96,8 @@ module SeatsChart
96
96
 
97
97
  # header parameters
98
98
  header_params = opts[:header_params] || {}
99
+ # HTTP header 'Accept' (if needed)
100
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', 'multipart/form-data', 'text/plain']) unless header_params['Accept']
99
101
  # HTTP header 'Content-Type'
100
102
  content_type = @api_client.select_header_content_type(['application/json', 'multipart/form-data', 'text/plain'])
101
103
  if !content_type.nil?
@@ -110,7 +112,7 @@ module SeatsChart
110
112
  post_body = opts[:debug_body] || @api_client.object_to_http_body(post_api_extract_seats_request)
111
113
 
112
114
  # return_type
113
- return_type = opts[:debug_return_type]
115
+ return_type = opts[:debug_return_type] || 'PostApiExtractSeats200Response'
114
116
 
115
117
  # auth_names
116
118
  auth_names = opts[:debug_auth_names] || ['ApiKeyAuth', 'BearerAuth']
@@ -439,7 +439,7 @@ module SeatsChart
439
439
  end
440
440
 
441
441
  # Put booked objects up for resale
442
- # Resale retains the durable owner and sold status. Optional `resaleListingId` groups the objects into one listing (extraData.resaleListingId). Optional `resalePriceCents` is stored on extraData and merged into GET /seats on the next cache rebuild. Administrative status change on the path event. One SQL transaction per event; seats are locked in id order and every precondition is evaluated under those row locks, so a concurrent hold, purchase or other change cannot slip in between the check and the write. Requires **Idempotency-Key**; a replay returns the stored response and a retry after a crash reuses the same durable booking order. **Objects** (max 64 per call, per event): seat UUID or seat label (labels are resolved per event; a label that matches several seats returns 409 `ambiguous_label`; unknown references return 404 `objects_not_found`). General admission areas are addressed by UUID or name **with `quantity`** (1–10000): - `booked`: the places are first reserved in the same Redis structure buyers hold from (capacity minus not-for-sale places), then `sold_count` is incremented in the transaction with a `sold_count + quantity <= capacity` guard; the durable receipt belongs to the administrative booking order (cancel it with POST /orders/{orderId}/cancel). - `reservedByToken` (or POST …/actions/hold, GA only): holds the places atomically against capacity minus withheld, sold and held places and issues a **GA hold token** (`hold: { holdToken, holdUserId, holdExpiresAt }`), confirmable with POST /ga/confirm (`holdToken`, `userId` = `holdUserId`). Optional `userId` (customer identity of the hold; one hold per user and area, 409 `hold_exists`) and `holdExpiresInMinutes` (1–120). 409 `insufficient_capacity`. - `RELEASE` / `free` without `holdToken`: releases places of **administrative** bookings (newest receipts first, optionally only those of `orderId`), recording a release receipt per consumed booking and decrementing `sold_count` under the GA row lock (409 `insufficient_booked_places` with `available`). Buyer purchases are never released here. - `RELEASE` with `holdToken` (GA hold token): releases that many places held by the token (409 `insufficient_held_places`, `hold_token_conflict`). Every GA operation is idempotent per Idempotency-Key (deterministic receipts/holds/markers), and capacity can never be exceeded nor `sold_count` go below zero. Response `gaAreas: { <areaId>: { areaId, label, quantity, soldCount, status, heldCount?, releasedFrom? } }`. **`allowedPreviousStatuses` / `rejectedPreviousStatuses`**: `free`, `booked`, `resale`, `reservedByToken`, `retired` or a custom status. On violation nothing is written and 409 `illegal_previous_status` lists every offending object with its current status. For GA quantities the previous status follows from the operation: `free` for book/hold, `booked` for a release, `reservedByToken` for a release by `holdToken`. **`holdToken`**: with status `booked`, books seats held by that hold token. The hold session is frozen first, so the buyer cannot confirm the same seats concurrently; seats held by another token or not held by this one return 409 `hold_token_conflict`. Remaining seats of the session stay held. With `RELEASE` it releases GA places (see above). **`ticketType`** (per object, `{ objectId, ticketType }`, status `booked` only): ticket type id recorded on the new booking (order item and reservation, like a confirmed sale) and returned per object; it shows up in reports by ticket type. Other statuses return 400. **`keepExtraData`**: keeps the stored extraData; per-object `extraData` sent with it is merged on top (without it, the object's extraData is replaced by the one sent, or cleared). **`ticketBuyerId`** (opaque, ≤ 256 chars, never an internal user id) is recorded on new bookings, object statuses, status history and GA hold tokens; query it with GET /events/{eventId}/objects?ticketBuyerId=…. **`channelKeys`** (channel secret keys or channel ids) restricts the change to public objects and objects of the named channels (409 `channel_forbidden` otherwise). Without `channelKeys`, or with `ignoreChannels: true`, channel partitions are ignored (backward-compatible default). **`events`** (max 50, must include the path event): applies the same change to each event of the tenant, labels resolved per event. By default each event is atomic on its own (no cross-event atomicity): response 200 when every event succeeded, otherwise 207 with `results[]` (`{ eventId, ok, objects | status, error, message }`), `succeeded` and `failed`. Replaying the same Idempotency-Key returns the stored per-event outcome; retry failed events (listed with their error) with a new key. **`atomic: true`** makes the whole call all-or-nothing in one SQL transaction (same engine as POST /events/actions/change-object-status; at most 512 objects across the events): 200 with `atomic: true` when everything was applied, otherwise the status of the first failing event and `results[]` with `outcome: failed` (with `error`, `message`) or `rolled_back` per event — nothing was written. GA administrative holds cannot be atomic (400 `not_atomic`). **`seasonId`** (season or partial season id; XOR with `events`): fans out by unique label to every live member in one transaction (cap 50 members, 64 seats overall). Preconditions and channelKeys apply to every member seat.
442
+ # Resale retains the durable owner and sold status. Optional `resaleListingId` groups the objects into one listing (extraData.resaleListingId). Optional `resalePriceCents` is stored on extraData and merged into GET /seats on the next cache rebuild. Optional `listing` also creates a server-side listing of the objects (type, sellAsWhole, price; see the listings tag): viewers then show and sell it as one listing. Administrative status change on the path event. One SQL transaction per event; seats are locked in id order and every precondition is evaluated under those row locks, so a concurrent hold, purchase or other change cannot slip in between the check and the write. Requires **Idempotency-Key**; a replay returns the stored response and a retry after a crash reuses the same durable booking order. **Objects** (max 64 per call, per event): seat UUID or seat label (labels are resolved per event; a label that matches several seats returns 409 `ambiguous_label`; unknown references return 404 `objects_not_found`). General admission areas are addressed by UUID or name **with `quantity`** (1–10000): - `booked`: the places are first reserved in the same Redis structure buyers hold from (capacity minus not-for-sale places), then `sold_count` is incremented in the transaction with a `sold_count + quantity <= capacity` guard; the durable receipt belongs to the administrative booking order (cancel it with POST /orders/{orderId}/cancel). - `reservedByToken` (or POST …/actions/hold, GA only): holds the places atomically against capacity minus withheld, sold and held places and issues a **GA hold token** (`hold: { holdToken, holdUserId, holdExpiresAt }`), confirmable with POST /ga/confirm (`holdToken`, `userId` = `holdUserId`). Optional `userId` (customer identity of the hold; one hold per user and area, 409 `hold_exists`) and `holdExpiresInMinutes` (1–120). 409 `insufficient_capacity`. - `RELEASE` / `free` without `holdToken`: releases places of **administrative** bookings (newest receipts first, optionally only those of `orderId`), recording a release receipt per consumed booking and decrementing `sold_count` under the GA row lock (409 `insufficient_booked_places` with `available`). Buyer purchases are never released here. - `RELEASE` with `holdToken` (GA hold token): releases that many places held by the token (409 `insufficient_held_places`, `hold_token_conflict`). Every GA operation is idempotent per Idempotency-Key (deterministic receipts/holds/markers), and capacity can never be exceeded nor `sold_count` go below zero. Response `gaAreas: { <areaId>: { areaId, label, quantity, soldCount, status, heldCount?, releasedFrom? } }`. **`allowedPreviousStatuses` / `rejectedPreviousStatuses`**: `free`, `booked`, `resale`, `reservedByToken`, `retired` or a custom status. On violation nothing is written and 409 `illegal_previous_status` lists every offending object with its current status. For GA quantities the previous status follows from the operation: `free` for book/hold, `booked` for a release, `reservedByToken` for a release by `holdToken`. **`holdToken`**: with status `booked`, books seats held by that hold token. The hold session is frozen first, so the buyer cannot confirm the same seats concurrently; seats held by another token or not held by this one return 409 `hold_token_conflict`. Remaining seats of the session stay held. With `RELEASE` it releases GA places (see above). **`ticketType`** (per object, `{ objectId, ticketType }`, status `booked` only): ticket type id recorded on the new booking (order item and reservation, like a confirmed sale) and returned per object; it shows up in reports by ticket type. Other statuses return 400. **`keepExtraData`**: keeps the stored extraData; per-object `extraData` sent with it is merged on top (without it, the object's extraData is replaced by the one sent, or cleared). **`ticketBuyerId`** (opaque, ≤ 256 chars, never an internal user id) is recorded on new bookings, object statuses, status history and GA hold tokens; query it with GET /events/{eventId}/objects?ticketBuyerId=…. **`channelKeys`** (channel secret keys or channel ids) restricts the change to public objects and objects of the named channels (409 `channel_forbidden` otherwise). Without `channelKeys`, or with `ignoreChannels: true`, channel partitions are ignored (backward-compatible default). **`events`** (max 50, must include the path event): applies the same change to each event of the tenant, labels resolved per event. By default each event is atomic on its own (no cross-event atomicity): response 200 when every event succeeded, otherwise 207 with `results[]` (`{ eventId, ok, objects | status, error, message }`), `succeeded` and `failed`. Replaying the same Idempotency-Key returns the stored per-event outcome; retry failed events (listed with their error) with a new key. **`atomic: true`** makes the whole call all-or-nothing in one SQL transaction (same engine as POST /events/actions/change-object-status; at most 512 objects across the events): 200 with `atomic: true` when everything was applied, otherwise the status of the first failing event and `results[]` with `outcome: failed` (with `error`, `message`) or `rolled_back` per event — nothing was written. GA administrative holds cannot be atomic (400 `not_atomic`). **`seasonId`** (season or partial season id; XOR with `events`): fans out by unique label to every live member in one transaction (cap 50 members, 64 seats overall). Preconditions and channelKeys apply to every member seat.
443
443
  # @param event_id [String]
444
444
  # @param post_api_events_by_event_id_actions_change_object_status_request [PostApiEventsByEventIdActionsChangeObjectStatusRequest]
445
445
  # @param [Hash] opts the optional parameters
@@ -451,7 +451,7 @@ module SeatsChart
451
451
  end
452
452
 
453
453
  # Put booked objects up for resale
454
- # Resale retains the durable owner and sold status. Optional &#x60;resaleListingId&#x60; groups the objects into one listing (extraData.resaleListingId). Optional &#x60;resalePriceCents&#x60; is stored on extraData and merged into GET /seats on the next cache rebuild. Administrative status change on the path event. One SQL transaction per event; seats are locked in id order and every precondition is evaluated under those row locks, so a concurrent hold, purchase or other change cannot slip in between the check and the write. Requires **Idempotency-Key**; a replay returns the stored response and a retry after a crash reuses the same durable booking order. **Objects** (max 64 per call, per event): seat UUID or seat label (labels are resolved per event; a label that matches several seats returns 409 &#x60;ambiguous_label&#x60;; unknown references return 404 &#x60;objects_not_found&#x60;). General admission areas are addressed by UUID or name **with &#x60;quantity&#x60;** (1–10000): - &#x60;booked&#x60;: the places are first reserved in the same Redis structure buyers hold from (capacity minus not-for-sale places), then &#x60;sold_count&#x60; is incremented in the transaction with a &#x60;sold_count + quantity &lt;&#x3D; capacity&#x60; guard; the durable receipt belongs to the administrative booking order (cancel it with POST /orders/{orderId}/cancel). - &#x60;reservedByToken&#x60; (or POST …/actions/hold, GA only): holds the places atomically against capacity minus withheld, sold and held places and issues a **GA hold token** (&#x60;hold: { holdToken, holdUserId, holdExpiresAt }&#x60;), confirmable with POST /ga/confirm (&#x60;holdToken&#x60;, &#x60;userId&#x60; &#x3D; &#x60;holdUserId&#x60;). Optional &#x60;userId&#x60; (customer identity of the hold; one hold per user and area, 409 &#x60;hold_exists&#x60;) and &#x60;holdExpiresInMinutes&#x60; (1–120). 409 &#x60;insufficient_capacity&#x60;. - &#x60;RELEASE&#x60; / &#x60;free&#x60; without &#x60;holdToken&#x60;: releases places of **administrative** bookings (newest receipts first, optionally only those of &#x60;orderId&#x60;), recording a release receipt per consumed booking and decrementing &#x60;sold_count&#x60; under the GA row lock (409 &#x60;insufficient_booked_places&#x60; with &#x60;available&#x60;). Buyer purchases are never released here. - &#x60;RELEASE&#x60; with &#x60;holdToken&#x60; (GA hold token): releases that many places held by the token (409 &#x60;insufficient_held_places&#x60;, &#x60;hold_token_conflict&#x60;). Every GA operation is idempotent per Idempotency-Key (deterministic receipts/holds/markers), and capacity can never be exceeded nor &#x60;sold_count&#x60; go below zero. Response &#x60;gaAreas: { &lt;areaId&gt;: { areaId, label, quantity, soldCount, status, heldCount?, releasedFrom? } }&#x60;. **&#x60;allowedPreviousStatuses&#x60; / &#x60;rejectedPreviousStatuses&#x60;**: &#x60;free&#x60;, &#x60;booked&#x60;, &#x60;resale&#x60;, &#x60;reservedByToken&#x60;, &#x60;retired&#x60; or a custom status. On violation nothing is written and 409 &#x60;illegal_previous_status&#x60; lists every offending object with its current status. For GA quantities the previous status follows from the operation: &#x60;free&#x60; for book/hold, &#x60;booked&#x60; for a release, &#x60;reservedByToken&#x60; for a release by &#x60;holdToken&#x60;. **&#x60;holdToken&#x60;**: with status &#x60;booked&#x60;, books seats held by that hold token. The hold session is frozen first, so the buyer cannot confirm the same seats concurrently; seats held by another token or not held by this one return 409 &#x60;hold_token_conflict&#x60;. Remaining seats of the session stay held. With &#x60;RELEASE&#x60; it releases GA places (see above). **&#x60;ticketType&#x60;** (per object, &#x60;{ objectId, ticketType }&#x60;, status &#x60;booked&#x60; only): ticket type id recorded on the new booking (order item and reservation, like a confirmed sale) and returned per object; it shows up in reports by ticket type. Other statuses return 400. **&#x60;keepExtraData&#x60;**: keeps the stored extraData; per-object &#x60;extraData&#x60; sent with it is merged on top (without it, the object&#39;s extraData is replaced by the one sent, or cleared). **&#x60;ticketBuyerId&#x60;** (opaque, ≤ 256 chars, never an internal user id) is recorded on new bookings, object statuses, status history and GA hold tokens; query it with GET /events/{eventId}/objects?ticketBuyerId&#x3D;…. **&#x60;channelKeys&#x60;** (channel secret keys or channel ids) restricts the change to public objects and objects of the named channels (409 &#x60;channel_forbidden&#x60; otherwise). Without &#x60;channelKeys&#x60;, or with &#x60;ignoreChannels: true&#x60;, channel partitions are ignored (backward-compatible default). **&#x60;events&#x60;** (max 50, must include the path event): applies the same change to each event of the tenant, labels resolved per event. By default each event is atomic on its own (no cross-event atomicity): response 200 when every event succeeded, otherwise 207 with &#x60;results[]&#x60; (&#x60;{ eventId, ok, objects | status, error, message }&#x60;), &#x60;succeeded&#x60; and &#x60;failed&#x60;. Replaying the same Idempotency-Key returns the stored per-event outcome; retry failed events (listed with their error) with a new key. **&#x60;atomic: true&#x60;** makes the whole call all-or-nothing in one SQL transaction (same engine as POST /events/actions/change-object-status; at most 512 objects across the events): 200 with &#x60;atomic: true&#x60; when everything was applied, otherwise the status of the first failing event and &#x60;results[]&#x60; with &#x60;outcome: failed&#x60; (with &#x60;error&#x60;, &#x60;message&#x60;) or &#x60;rolled_back&#x60; per event — nothing was written. GA administrative holds cannot be atomic (400 &#x60;not_atomic&#x60;). **&#x60;seasonId&#x60;** (season or partial season id; XOR with &#x60;events&#x60;): fans out by unique label to every live member in one transaction (cap 50 members, 64 seats overall). Preconditions and channelKeys apply to every member seat.
454
+ # Resale retains the durable owner and sold status. Optional &#x60;resaleListingId&#x60; groups the objects into one listing (extraData.resaleListingId). Optional &#x60;resalePriceCents&#x60; is stored on extraData and merged into GET /seats on the next cache rebuild. Optional &#x60;listing&#x60; also creates a server-side listing of the objects (type, sellAsWhole, price; see the listings tag): viewers then show and sell it as one listing. Administrative status change on the path event. One SQL transaction per event; seats are locked in id order and every precondition is evaluated under those row locks, so a concurrent hold, purchase or other change cannot slip in between the check and the write. Requires **Idempotency-Key**; a replay returns the stored response and a retry after a crash reuses the same durable booking order. **Objects** (max 64 per call, per event): seat UUID or seat label (labels are resolved per event; a label that matches several seats returns 409 &#x60;ambiguous_label&#x60;; unknown references return 404 &#x60;objects_not_found&#x60;). General admission areas are addressed by UUID or name **with &#x60;quantity&#x60;** (1–10000): - &#x60;booked&#x60;: the places are first reserved in the same Redis structure buyers hold from (capacity minus not-for-sale places), then &#x60;sold_count&#x60; is incremented in the transaction with a &#x60;sold_count + quantity &lt;&#x3D; capacity&#x60; guard; the durable receipt belongs to the administrative booking order (cancel it with POST /orders/{orderId}/cancel). - &#x60;reservedByToken&#x60; (or POST …/actions/hold, GA only): holds the places atomically against capacity minus withheld, sold and held places and issues a **GA hold token** (&#x60;hold: { holdToken, holdUserId, holdExpiresAt }&#x60;), confirmable with POST /ga/confirm (&#x60;holdToken&#x60;, &#x60;userId&#x60; &#x3D; &#x60;holdUserId&#x60;). Optional &#x60;userId&#x60; (customer identity of the hold; one hold per user and area, 409 &#x60;hold_exists&#x60;) and &#x60;holdExpiresInMinutes&#x60; (1–120). 409 &#x60;insufficient_capacity&#x60;. - &#x60;RELEASE&#x60; / &#x60;free&#x60; without &#x60;holdToken&#x60;: releases places of **administrative** bookings (newest receipts first, optionally only those of &#x60;orderId&#x60;), recording a release receipt per consumed booking and decrementing &#x60;sold_count&#x60; under the GA row lock (409 &#x60;insufficient_booked_places&#x60; with &#x60;available&#x60;). Buyer purchases are never released here. - &#x60;RELEASE&#x60; with &#x60;holdToken&#x60; (GA hold token): releases that many places held by the token (409 &#x60;insufficient_held_places&#x60;, &#x60;hold_token_conflict&#x60;). Every GA operation is idempotent per Idempotency-Key (deterministic receipts/holds/markers), and capacity can never be exceeded nor &#x60;sold_count&#x60; go below zero. Response &#x60;gaAreas: { &lt;areaId&gt;: { areaId, label, quantity, soldCount, status, heldCount?, releasedFrom? } }&#x60;. **&#x60;allowedPreviousStatuses&#x60; / &#x60;rejectedPreviousStatuses&#x60;**: &#x60;free&#x60;, &#x60;booked&#x60;, &#x60;resale&#x60;, &#x60;reservedByToken&#x60;, &#x60;retired&#x60; or a custom status. On violation nothing is written and 409 &#x60;illegal_previous_status&#x60; lists every offending object with its current status. For GA quantities the previous status follows from the operation: &#x60;free&#x60; for book/hold, &#x60;booked&#x60; for a release, &#x60;reservedByToken&#x60; for a release by &#x60;holdToken&#x60;. **&#x60;holdToken&#x60;**: with status &#x60;booked&#x60;, books seats held by that hold token. The hold session is frozen first, so the buyer cannot confirm the same seats concurrently; seats held by another token or not held by this one return 409 &#x60;hold_token_conflict&#x60;. Remaining seats of the session stay held. With &#x60;RELEASE&#x60; it releases GA places (see above). **&#x60;ticketType&#x60;** (per object, &#x60;{ objectId, ticketType }&#x60;, status &#x60;booked&#x60; only): ticket type id recorded on the new booking (order item and reservation, like a confirmed sale) and returned per object; it shows up in reports by ticket type. Other statuses return 400. **&#x60;keepExtraData&#x60;**: keeps the stored extraData; per-object &#x60;extraData&#x60; sent with it is merged on top (without it, the object&#39;s extraData is replaced by the one sent, or cleared). **&#x60;ticketBuyerId&#x60;** (opaque, ≤ 256 chars, never an internal user id) is recorded on new bookings, object statuses, status history and GA hold tokens; query it with GET /events/{eventId}/objects?ticketBuyerId&#x3D;…. **&#x60;channelKeys&#x60;** (channel secret keys or channel ids) restricts the change to public objects and objects of the named channels (409 &#x60;channel_forbidden&#x60; otherwise). Without &#x60;channelKeys&#x60;, or with &#x60;ignoreChannels: true&#x60;, channel partitions are ignored (backward-compatible default). **&#x60;events&#x60;** (max 50, must include the path event): applies the same change to each event of the tenant, labels resolved per event. By default each event is atomic on its own (no cross-event atomicity): response 200 when every event succeeded, otherwise 207 with &#x60;results[]&#x60; (&#x60;{ eventId, ok, objects | status, error, message }&#x60;), &#x60;succeeded&#x60; and &#x60;failed&#x60;. Replaying the same Idempotency-Key returns the stored per-event outcome; retry failed events (listed with their error) with a new key. **&#x60;atomic: true&#x60;** makes the whole call all-or-nothing in one SQL transaction (same engine as POST /events/actions/change-object-status; at most 512 objects across the events): 200 with &#x60;atomic: true&#x60; when everything was applied, otherwise the status of the first failing event and &#x60;results[]&#x60; with &#x60;outcome: failed&#x60; (with &#x60;error&#x60;, &#x60;message&#x60;) or &#x60;rolled_back&#x60; per event — nothing was written. GA administrative holds cannot be atomic (400 &#x60;not_atomic&#x60;). **&#x60;seasonId&#x60;** (season or partial season id; XOR with &#x60;events&#x60;): fans out by unique label to every live member in one transaction (cap 50 members, 64 seats overall). Preconditions and channelKeys apply to every member seat.
455
455
  # @param event_id [String]
456
456
  # @param post_api_events_by_event_id_actions_change_object_status_request [PostApiEventsByEventIdActionsChangeObjectStatusRequest]
457
457
  # @param [Hash] opts the optional parameters
@@ -19,6 +19,356 @@ module SeatsChart
19
19
  def initialize(api_client = ApiClient.default)
20
20
  @api_client = api_client
21
21
  end
22
+ # Map-only embed policy of a chart
23
+ # Used by the Next.js map-only viewer (`/viewer/chart/{chart}?workspaceKey=…`) to build CSP frame-ancestors and validate `parent_origin`, like the event embed policy: `{ origins, chart: { id, name }, rendererDefaults }`. No tenant id. A deactivated workspace returns 403 `workspace_deactivated`; an unknown key or chart, a chart that was never published or is archived: 404 `not_found` (errors are `no-store`). CDN cache key: path + Origin + normalized Accept-Encoding.
24
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
25
+ # @param chart [String] Chart id or chart key.
26
+ # @param [Hash] opts the optional parameters
27
+ # @return [nil]
28
+ def get_api_public_by_public_key_charts_by_chart_embed_policy(public_key, chart, opts = {})
29
+ get_api_public_by_public_key_charts_by_chart_embed_policy_with_http_info(public_key, chart, opts)
30
+ nil
31
+ end
32
+
33
+ # Map-only embed policy of a chart
34
+ # Used by the Next.js map-only viewer (&#x60;/viewer/chart/{chart}?workspaceKey&#x3D;…&#x60;) to build CSP frame-ancestors and validate &#x60;parent_origin&#x60;, like the event embed policy: &#x60;{ origins, chart: { id, name }, rendererDefaults }&#x60;. No tenant id. A deactivated workspace returns 403 &#x60;workspace_deactivated&#x60;; an unknown key or chart, a chart that was never published or is archived: 404 &#x60;not_found&#x60; (errors are &#x60;no-store&#x60;). CDN cache key: path + Origin + normalized Accept-Encoding.
35
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
36
+ # @param chart [String] Chart id or chart key.
37
+ # @param [Hash] opts the optional parameters
38
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
39
+ def get_api_public_by_public_key_charts_by_chart_embed_policy_with_http_info(public_key, chart, opts = {})
40
+ if @api_client.config.debugging
41
+ @api_client.config.logger.debug 'Calling API: PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy ...'
42
+ end
43
+ # verify the required parameter 'public_key' is set
44
+ if @api_client.config.client_side_validation && public_key.nil?
45
+ fail ArgumentError, "Missing the required parameter 'public_key' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy"
46
+ end
47
+ if @api_client.config.client_side_validation && public_key.to_s.length > 64
48
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy, the character length must be smaller than or equal to 64.'
49
+ end
50
+
51
+ if @api_client.config.client_side_validation && public_key.to_s.length < 1
52
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy, the character length must be great than or equal to 1.'
53
+ end
54
+
55
+ # verify the required parameter 'chart' is set
56
+ if @api_client.config.client_side_validation && chart.nil?
57
+ fail ArgumentError, "Missing the required parameter 'chart' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy"
58
+ end
59
+ if @api_client.config.client_side_validation && chart.to_s.length > 100
60
+ fail ArgumentError, 'invalid value for "chart" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy, the character length must be smaller than or equal to 100.'
61
+ end
62
+
63
+ if @api_client.config.client_side_validation && chart.to_s.length < 1
64
+ fail ArgumentError, 'invalid value for "chart" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy, the character length must be great than or equal to 1.'
65
+ end
66
+
67
+ pattern = Regexp.new(/^[A-Za-z0-9][A-Za-z0-9_.~-]{0,99}$/)
68
+ if @api_client.config.client_side_validation && chart !~ pattern
69
+ fail ArgumentError, "invalid value for 'chart' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy, must conform to the pattern #{pattern}."
70
+ end
71
+
72
+ # resource path
73
+ local_var_path = '/api/public/{publicKey}/charts/{chart}/embed-policy'.sub('{' + 'publicKey' + '}', CGI.escape(public_key.to_s)).sub('{' + 'chart' + '}', CGI.escape(chart.to_s))
74
+
75
+ # query parameters
76
+ query_params = opts[:query_params] || {}
77
+
78
+ # header parameters
79
+ header_params = opts[:header_params] || {}
80
+
81
+ # form parameters
82
+ form_params = opts[:form_params] || {}
83
+
84
+ # http body (model)
85
+ post_body = opts[:debug_body]
86
+
87
+ # return_type
88
+ return_type = opts[:debug_return_type]
89
+
90
+ # auth_names
91
+ auth_names = opts[:debug_auth_names] || []
92
+
93
+ new_options = opts.merge(
94
+ :operation => :"PublicApi.get_api_public_by_public_key_charts_by_chart_embed_policy",
95
+ :header_params => header_params,
96
+ :query_params => query_params,
97
+ :form_params => form_params,
98
+ :body => post_body,
99
+ :auth_names => auth_names,
100
+ :return_type => return_type
101
+ )
102
+
103
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
104
+ if @api_client.config.debugging
105
+ @api_client.config.logger.debug "API called: PublicApi#get_api_public_by_public_key_charts_by_chart_embed_policy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
106
+ end
107
+ return data, status_code, headers
108
+ end
109
+
110
+ # Map-only chart geometry (immutable, CDN-cacheable)
111
+ # Content-addressed published geometry of the chart (sha256 of the canonical JSON; clients verify it), the same document as the chart preview geometry. `Cache-Control: public, max-age=31536000, immutable`. Unknown hash: 404. A deactivated workspace returns 403 `workspace_deactivated`; an unknown key or chart, a chart that was never published or is archived: 404 `not_found` (errors are `no-store`). CDN cache key: path + Origin + normalized Accept-Encoding.
112
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
113
+ # @param chart [String] Chart id or chart key.
114
+ # @param hash [String]
115
+ # @param [Hash] opts the optional parameters
116
+ # @return [nil]
117
+ def get_api_public_by_public_key_charts_by_chart_geometry_by_hash(public_key, chart, hash, opts = {})
118
+ get_api_public_by_public_key_charts_by_chart_geometry_by_hash_with_http_info(public_key, chart, hash, opts)
119
+ nil
120
+ end
121
+
122
+ # Map-only chart geometry (immutable, CDN-cacheable)
123
+ # Content-addressed published geometry of the chart (sha256 of the canonical JSON; clients verify it), the same document as the chart preview geometry. &#x60;Cache-Control: public, max-age&#x3D;31536000, immutable&#x60;. Unknown hash: 404. A deactivated workspace returns 403 &#x60;workspace_deactivated&#x60;; an unknown key or chart, a chart that was never published or is archived: 404 &#x60;not_found&#x60; (errors are &#x60;no-store&#x60;). CDN cache key: path + Origin + normalized Accept-Encoding.
124
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
125
+ # @param chart [String] Chart id or chart key.
126
+ # @param hash [String]
127
+ # @param [Hash] opts the optional parameters
128
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
129
+ def get_api_public_by_public_key_charts_by_chart_geometry_by_hash_with_http_info(public_key, chart, hash, opts = {})
130
+ if @api_client.config.debugging
131
+ @api_client.config.logger.debug 'Calling API: PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash ...'
132
+ end
133
+ # verify the required parameter 'public_key' is set
134
+ if @api_client.config.client_side_validation && public_key.nil?
135
+ fail ArgumentError, "Missing the required parameter 'public_key' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash"
136
+ end
137
+ if @api_client.config.client_side_validation && public_key.to_s.length > 64
138
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash, the character length must be smaller than or equal to 64.'
139
+ end
140
+
141
+ if @api_client.config.client_side_validation && public_key.to_s.length < 1
142
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash, the character length must be great than or equal to 1.'
143
+ end
144
+
145
+ # verify the required parameter 'chart' is set
146
+ if @api_client.config.client_side_validation && chart.nil?
147
+ fail ArgumentError, "Missing the required parameter 'chart' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash"
148
+ end
149
+ if @api_client.config.client_side_validation && chart.to_s.length > 100
150
+ fail ArgumentError, 'invalid value for "chart" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash, the character length must be smaller than or equal to 100.'
151
+ end
152
+
153
+ if @api_client.config.client_side_validation && chart.to_s.length < 1
154
+ fail ArgumentError, 'invalid value for "chart" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash, the character length must be great than or equal to 1.'
155
+ end
156
+
157
+ pattern = Regexp.new(/^[A-Za-z0-9][A-Za-z0-9_.~-]{0,99}$/)
158
+ if @api_client.config.client_side_validation && chart !~ pattern
159
+ fail ArgumentError, "invalid value for 'chart' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash, must conform to the pattern #{pattern}."
160
+ end
161
+
162
+ # verify the required parameter 'hash' is set
163
+ if @api_client.config.client_side_validation && hash.nil?
164
+ fail ArgumentError, "Missing the required parameter 'hash' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash"
165
+ end
166
+ pattern = Regexp.new(/^[a-f0-9]{64}$/)
167
+ if @api_client.config.client_side_validation && hash !~ pattern
168
+ fail ArgumentError, "invalid value for 'hash' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash, must conform to the pattern #{pattern}."
169
+ end
170
+
171
+ # resource path
172
+ local_var_path = '/api/public/{publicKey}/charts/{chart}/geometry/{hash}'.sub('{' + 'publicKey' + '}', CGI.escape(public_key.to_s)).sub('{' + 'chart' + '}', CGI.escape(chart.to_s)).sub('{' + 'hash' + '}', CGI.escape(hash.to_s))
173
+
174
+ # query parameters
175
+ query_params = opts[:query_params] || {}
176
+
177
+ # header parameters
178
+ header_params = opts[:header_params] || {}
179
+
180
+ # form parameters
181
+ form_params = opts[:form_params] || {}
182
+
183
+ # http body (model)
184
+ post_body = opts[:debug_body]
185
+
186
+ # return_type
187
+ return_type = opts[:debug_return_type]
188
+
189
+ # auth_names
190
+ auth_names = opts[:debug_auth_names] || []
191
+
192
+ new_options = opts.merge(
193
+ :operation => :"PublicApi.get_api_public_by_public_key_charts_by_chart_geometry_by_hash",
194
+ :header_params => header_params,
195
+ :query_params => query_params,
196
+ :form_params => form_params,
197
+ :body => post_body,
198
+ :auth_names => auth_names,
199
+ :return_type => return_type
200
+ )
201
+
202
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
203
+ if @api_client.config.debugging
204
+ @api_client.config.logger.debug "API called: PublicApi#get_api_public_by_public_key_charts_by_chart_geometry_by_hash\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
205
+ end
206
+ return data, status_code, headers
207
+ end
208
+
209
+ # Map-only chart manifest (CDN-cacheable)
210
+ # Published chart for a map-only render (seats.io `bringYourOwnBackend`): `{ chartId, name, eventId (= chartId), mapRevision, geometryHash, geometrySchema, seatCount, gaCount, geometryUrl, state }`. `state` is the compact state with every object free (catalog prices, GA capacities, category prices / ticket types, booking rules); the renderer overlays the statuses the host passes. No inventory, holds or event data. Every object of the chart (seats + general admission areas) counts as a used object once per chart and UTC month (see the map-only guide). ETag; `If-None-Match` returns 304. `Cache-Control: public, max-age=30, stale-while-revalidate=60`. `chart` accepts the chart id or key. A deactivated workspace returns 403 `workspace_deactivated`; an unknown key or chart, a chart that was never published or is archived: 404 `not_found` (errors are `no-store`). CDN cache key: path + Origin + normalized Accept-Encoding.
211
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
212
+ # @param chart [String] Chart id or chart key.
213
+ # @param [Hash] opts the optional parameters
214
+ # @return [nil]
215
+ def get_api_public_by_public_key_charts_by_chart_manifest(public_key, chart, opts = {})
216
+ get_api_public_by_public_key_charts_by_chart_manifest_with_http_info(public_key, chart, opts)
217
+ nil
218
+ end
219
+
220
+ # Map-only chart manifest (CDN-cacheable)
221
+ # Published chart for a map-only render (seats.io &#x60;bringYourOwnBackend&#x60;): &#x60;{ chartId, name, eventId (&#x3D; chartId), mapRevision, geometryHash, geometrySchema, seatCount, gaCount, geometryUrl, state }&#x60;. &#x60;state&#x60; is the compact state with every object free (catalog prices, GA capacities, category prices / ticket types, booking rules); the renderer overlays the statuses the host passes. No inventory, holds or event data. Every object of the chart (seats + general admission areas) counts as a used object once per chart and UTC month (see the map-only guide). ETag; &#x60;If-None-Match&#x60; returns 304. &#x60;Cache-Control: public, max-age&#x3D;30, stale-while-revalidate&#x3D;60&#x60;. &#x60;chart&#x60; accepts the chart id or key. A deactivated workspace returns 403 &#x60;workspace_deactivated&#x60;; an unknown key or chart, a chart that was never published or is archived: 404 &#x60;not_found&#x60; (errors are &#x60;no-store&#x60;). CDN cache key: path + Origin + normalized Accept-Encoding.
222
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
223
+ # @param chart [String] Chart id or chart key.
224
+ # @param [Hash] opts the optional parameters
225
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
226
+ def get_api_public_by_public_key_charts_by_chart_manifest_with_http_info(public_key, chart, opts = {})
227
+ if @api_client.config.debugging
228
+ @api_client.config.logger.debug 'Calling API: PublicApi.get_api_public_by_public_key_charts_by_chart_manifest ...'
229
+ end
230
+ # verify the required parameter 'public_key' is set
231
+ if @api_client.config.client_side_validation && public_key.nil?
232
+ fail ArgumentError, "Missing the required parameter 'public_key' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_manifest"
233
+ end
234
+ if @api_client.config.client_side_validation && public_key.to_s.length > 64
235
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_manifest, the character length must be smaller than or equal to 64.'
236
+ end
237
+
238
+ if @api_client.config.client_side_validation && public_key.to_s.length < 1
239
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_manifest, the character length must be great than or equal to 1.'
240
+ end
241
+
242
+ # verify the required parameter 'chart' is set
243
+ if @api_client.config.client_side_validation && chart.nil?
244
+ fail ArgumentError, "Missing the required parameter 'chart' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_manifest"
245
+ end
246
+ if @api_client.config.client_side_validation && chart.to_s.length > 100
247
+ fail ArgumentError, 'invalid value for "chart" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_manifest, the character length must be smaller than or equal to 100.'
248
+ end
249
+
250
+ if @api_client.config.client_side_validation && chart.to_s.length < 1
251
+ fail ArgumentError, 'invalid value for "chart" when calling PublicApi.get_api_public_by_public_key_charts_by_chart_manifest, the character length must be great than or equal to 1.'
252
+ end
253
+
254
+ pattern = Regexp.new(/^[A-Za-z0-9][A-Za-z0-9_.~-]{0,99}$/)
255
+ if @api_client.config.client_side_validation && chart !~ pattern
256
+ fail ArgumentError, "invalid value for 'chart' when calling PublicApi.get_api_public_by_public_key_charts_by_chart_manifest, must conform to the pattern #{pattern}."
257
+ end
258
+
259
+ # resource path
260
+ local_var_path = '/api/public/{publicKey}/charts/{chart}/manifest'.sub('{' + 'publicKey' + '}', CGI.escape(public_key.to_s)).sub('{' + 'chart' + '}', CGI.escape(chart.to_s))
261
+
262
+ # query parameters
263
+ query_params = opts[:query_params] || {}
264
+
265
+ # header parameters
266
+ header_params = opts[:header_params] || {}
267
+
268
+ # form parameters
269
+ form_params = opts[:form_params] || {}
270
+
271
+ # http body (model)
272
+ post_body = opts[:debug_body]
273
+
274
+ # return_type
275
+ return_type = opts[:debug_return_type]
276
+
277
+ # auth_names
278
+ auth_names = opts[:debug_auth_names] || []
279
+
280
+ new_options = opts.merge(
281
+ :operation => :"PublicApi.get_api_public_by_public_key_charts_by_chart_manifest",
282
+ :header_params => header_params,
283
+ :query_params => query_params,
284
+ :form_params => form_params,
285
+ :body => post_body,
286
+ :auth_names => auth_names,
287
+ :return_type => return_type
288
+ )
289
+
290
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
291
+ if @api_client.config.debugging
292
+ @api_client.config.logger.debug "API called: PublicApi#get_api_public_by_public_key_charts_by_chart_manifest\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
293
+ end
294
+ return data, status_code, headers
295
+ end
296
+
297
+ # Published buyer extraData of an event (workspace opt-in, CDN-cacheable)
298
+ # Object `extraData` is private by default. When a workspace admin enables buyer publication (`PUT /api/workspace/buyer-extra-data`) with an allow-list of keys, this read returns, for the workspace's events, `{ keys, objects: { [objectId]: { key: value } } }` with only those keys and scalar values (strings up to 256 characters, numbers, booleans, null; objects, arrays and longer strings are never published). The renderer reads it once after the map for declarative rules (`match.extraData`), templates (`{extraData.key}`) and host objects. Built from one indexed query on a miss, then served from a per-event cache dropped whenever the seat map cache is invalidated (overlay writes, extraData updates) and rebuilt when the key list changes. Never part of the compact state. Not published (setting off or no keys): 404 `extra_data_not_published`. ETag; `If-None-Match` returns 304. `Cache-Control: public, max-age=5, stale-while-revalidate=10`. `eventId` also accepts the event key.
299
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
300
+ # @param event_id [String]
301
+ # @param [Hash] opts the optional parameters
302
+ # @return [nil]
303
+ def get_api_public_by_public_key_events_by_event_id_extra_data(public_key, event_id, opts = {})
304
+ get_api_public_by_public_key_events_by_event_id_extra_data_with_http_info(public_key, event_id, opts)
305
+ nil
306
+ end
307
+
308
+ # Published buyer extraData of an event (workspace opt-in, CDN-cacheable)
309
+ # Object &#x60;extraData&#x60; is private by default. When a workspace admin enables buyer publication (&#x60;PUT /api/workspace/buyer-extra-data&#x60;) with an allow-list of keys, this read returns, for the workspace&#39;s events, &#x60;{ keys, objects: { [objectId]: { key: value } } }&#x60; with only those keys and scalar values (strings up to 256 characters, numbers, booleans, null; objects, arrays and longer strings are never published). The renderer reads it once after the map for declarative rules (&#x60;match.extraData&#x60;), templates (&#x60;{extraData.key}&#x60;) and host objects. Built from one indexed query on a miss, then served from a per-event cache dropped whenever the seat map cache is invalidated (overlay writes, extraData updates) and rebuilt when the key list changes. Never part of the compact state. Not published (setting off or no keys): 404 &#x60;extra_data_not_published&#x60;. ETag; &#x60;If-None-Match&#x60; returns 304. &#x60;Cache-Control: public, max-age&#x3D;5, stale-while-revalidate&#x3D;10&#x60;. &#x60;eventId&#x60; also accepts the event key.
310
+ # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).
311
+ # @param event_id [String]
312
+ # @param [Hash] opts the optional parameters
313
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
314
+ def get_api_public_by_public_key_events_by_event_id_extra_data_with_http_info(public_key, event_id, opts = {})
315
+ if @api_client.config.debugging
316
+ @api_client.config.logger.debug 'Calling API: PublicApi.get_api_public_by_public_key_events_by_event_id_extra_data ...'
317
+ end
318
+ # verify the required parameter 'public_key' is set
319
+ if @api_client.config.client_side_validation && public_key.nil?
320
+ fail ArgumentError, "Missing the required parameter 'public_key' when calling PublicApi.get_api_public_by_public_key_events_by_event_id_extra_data"
321
+ end
322
+ if @api_client.config.client_side_validation && public_key.to_s.length > 64
323
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_events_by_event_id_extra_data, the character length must be smaller than or equal to 64.'
324
+ end
325
+
326
+ if @api_client.config.client_side_validation && public_key.to_s.length < 1
327
+ fail ArgumentError, 'invalid value for "public_key" when calling PublicApi.get_api_public_by_public_key_events_by_event_id_extra_data, the character length must be great than or equal to 1.'
328
+ end
329
+
330
+ # verify the required parameter 'event_id' is set
331
+ if @api_client.config.client_side_validation && event_id.nil?
332
+ fail ArgumentError, "Missing the required parameter 'event_id' when calling PublicApi.get_api_public_by_public_key_events_by_event_id_extra_data"
333
+ end
334
+ # resource path
335
+ local_var_path = '/api/public/{publicKey}/events/{eventId}/extra-data'.sub('{' + 'publicKey' + '}', CGI.escape(public_key.to_s)).sub('{' + 'eventId' + '}', CGI.escape(event_id.to_s))
336
+
337
+ # query parameters
338
+ query_params = opts[:query_params] || {}
339
+
340
+ # header parameters
341
+ header_params = opts[:header_params] || {}
342
+
343
+ # form parameters
344
+ form_params = opts[:form_params] || {}
345
+
346
+ # http body (model)
347
+ post_body = opts[:debug_body]
348
+
349
+ # return_type
350
+ return_type = opts[:debug_return_type]
351
+
352
+ # auth_names
353
+ auth_names = opts[:debug_auth_names] || []
354
+
355
+ new_options = opts.merge(
356
+ :operation => :"PublicApi.get_api_public_by_public_key_events_by_event_id_extra_data",
357
+ :header_params => header_params,
358
+ :query_params => query_params,
359
+ :form_params => form_params,
360
+ :body => post_body,
361
+ :auth_names => auth_names,
362
+ :return_type => return_type
363
+ )
364
+
365
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
366
+ if @api_client.config.debugging
367
+ @api_client.config.logger.debug "API called: PublicApi#get_api_public_by_public_key_events_by_event_id_extra_data\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
368
+ end
369
+ return data, status_code, headers
370
+ end
371
+
22
372
  # Public immutable geometry (CDN-cacheable)
23
373
  # Content-addressed geometry (sha256 of the canonical JSON). br/gzip negotiated from Accept-Encoding. `Cache-Control: public, max-age=31536000, immutable`. Clients must verify the hash. Unknown key, event or hash: 404 no-store. `eventId` also accepts the event key. A deactivated workspace returns 403 `workspace_deactivated` (no-store). CDN cache key: path + Origin + normalized Accept-Encoding. Never forward or key on cookies, Authorization, x-api-key, x-channel-key or the query string.
24
374
  # @param public_key [String] Workspace public key (&#x60;pub_…&#x60;).