Class: SeatLayer::Sessions

Inherits:
Resource show all
Defined in:
lib/seatlayer/inventory.rb

Overview

Short-lived, origin-bound browser tokens.

The governing rule: the SDK mints tokens, widgets consume them. Your secret key never reaches a browser.

Constant Summary collapse

CAPABILITIES =
[
  "event:view", "event:block", "event:cancel", "event:reports",
  "event:channels:view", "event:channels:manage", "event:orders:read",
  "event:refund", "event:tickets:send", "event:door:view",
  "event:door:checkin", "event:boxoffice"
].freeze

Constants inherited from Resource

Resource::UNSET

Instance Method Summary collapse

Methods inherited from Resource

#initialize

Constructor Details

This class inherits a constructor from SeatLayer::Resource

Instance Method Details

#create_designer_session(workspace_id:, chart_id:, allowed_origin:, authority: nil, can_publish: nil, mode: nil, safe_mode_options: nil, features: nil, expires_in_seconds: nil) ⇒ Object

Mint a designer token so an organiser can edit a chart inside your own UI. Requires a chart id that already exists — create or copy one first. Explicit keywords keep each security and feature-policy boundary visible. rubocop:disable Metrics/ParameterLists



190
191
192
193
194
195
196
197
198
199
# File 'lib/seatlayer/inventory.rb', line 190

def create_designer_session(workspace_id:, chart_id:, allowed_origin:,
                            authority: nil, can_publish: nil, mode: nil,
                            safe_mode_options: nil, features: nil, expires_in_seconds: nil)
  body = compact({ "workspaceId" => workspace_id, "chartId" => chart_id,
                   "allowedOrigin" => allowed_origin, "authority" => authority,
                   "canPublish" => can_publish, "mode" => mode,
                   "safeModeOptions" => safe_mode_options, "features" => features,
                   "expiresInSeconds" => expires_in_seconds })
  @client.post("/v1/designer/sessions", body)
end

#create_manage_session(event_key, allowed_origin:, capabilities:, expires_in_seconds: nil, workspace_id: nil) ⇒ Object

Mint a manage-session token for the control room.

The raw API defaults an omitted list to view-only (+event:view+). This SDK still requires an explicit set so browser authority is visible at each call.

Raises:

  • (ArgumentError)


167
168
169
170
171
172
173
174
175
176
177
178
179
180
# File 'lib/seatlayer/inventory.rb', line 167

def create_manage_session(event_key, allowed_origin:, capabilities:, expires_in_seconds: nil,
                          workspace_id: nil)
  if capabilities.nil? || capabilities.empty?
    raise ArgumentError,
          'capabilities is required: pass the smallest set the page needs, e.g. ["event:view"].'
  end
  unknown = capabilities - CAPABILITIES
  raise ArgumentError, "unsupported manage capabilities: #{unknown.join(", ")}" unless unknown.empty?

  body = compact({ "allowedOrigin" => allowed_origin, "capabilities" => capabilities,
                   "expiresInSeconds" => expires_in_seconds,
                   "workspaceId" => workspace_id })
  @client.post("/v1/events/#{encode(event_key)}/manage-sessions", body)
end

#revoke_designer_session(session_id) ⇒ Object

rubocop:enable Metrics/ParameterLists



202
203
204
# File 'lib/seatlayer/inventory.rb', line 202

def revoke_designer_session(session_id)
  @client.delete("/v1/designer/sessions/#{encode(session_id)}")
end

#revoke_manage_session(event_key, session_id) ⇒ Object



182
183
184
# File 'lib/seatlayer/inventory.rb', line 182

def revoke_manage_session(event_key, session_id)
  @client.delete("/v1/events/#{encode(event_key)}/manage-sessions/#{encode(session_id)}")
end