Class: Infrawrench::SharedConsolesNamespace

Inherits:
Object
  • Object
show all
Defined in:
lib/infrawrench/client.rb,
sig/infrawrench/sdk.rbs

Overview

client.shared_consoles

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transport) ⇒ SharedConsolesNamespace

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of SharedConsolesNamespace.

Parameters:



13179
13180
13181
13182
13183
# File 'lib/infrawrench/client.rb', line 13179

def initialize(transport)
  @transport = transport
  @invites = SharedConsolesInvitesNamespace.new(@transport)
  @participants = SharedConsolesParticipantsNamespace.new(@transport)
end

Instance Attribute Details

#invitesSharedConsolesInvitesNamespace (readonly)

Returns client.shared_consoles.invites.

Returns:



13173
13174
13175
# File 'lib/infrawrench/client.rb', line 13173

def invites
  @invites
end

#participantsSharedConsolesParticipantsNamespace (readonly)

Returns client.shared_consoles.participants.

Returns:



13175
13176
13177
# File 'lib/infrawrench/client.rb', line 13175

def participants
  @participants
end

Instance Method Details

#create(org_id: nil, body: nil, request_options: nil) ⇒ Hash

Share a live SSH session

Opens a share on a session you already have running and mints its first invite. You become the driver.

Returns 409 console_not_here when the pty is held by a different server replica than the one answering this call — reopen the terminal and share again. Writing the share anyway would produce a link that authorises correctly and then finds nothing to attach to.

Requires resources:execute — the same permission as opening the terminal. Closed to API keys: sharing a shell is an act a person performs.

Requires permission: resources:execute.

POST /api/org/orgId/shared-consoles

Raises on 400: Bad request

Raises on 404: Not found

Raises on 409: Conflict

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • body (Hash, nil) (defaults to: nil)

    Request body, shaped as CreateSharedConsole.

  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • org_id: (String, nil) (defaults to: nil)
  • body: (create_shared_console, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Hash)

    Parsed JSON, shaped as SharedConsoleCreated — see sig/infrawrench/sdk.rbs.

Raises:



13215
13216
13217
13218
13219
13220
13221
13222
13223
# File 'lib/infrawrench/client.rb', line 13215

def create(org_id: nil, body: nil, request_options: nil)
  @transport.request(
    http_method: "POST",
    path: "/api/org/{orgId}/shared-consoles",
    path_params: { "orgId" => org_id },
    body: body,
    request_options: request_options
  )
end

#delete(console_id:, org_id: nil, request_options: nil) ⇒ Hash

Revoke a share

Disconnects every guest and stops the fan-out. The sharer's own SSH session carries on — revoking a share is not killing a terminal.

The sharer or a holder of org:settings:write. Deliberately does not require resources:execute: ending access must never be gated on still holding the access, or an owner whose role was narrowed mid-incident could not close the session they opened.

DELETE /api/org/orgId/shared-consoles/consoleId

Raises on 403: Forbidden

Raises on 404: Not found

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • console_id (String)
  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • console_id: (String)
  • org_id: (String, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Hash)

    Parsed JSON, shaped as Ok — see sig/infrawrench/sdk.rbs.

Raises:



13247
13248
13249
13250
13251
13252
13253
13254
# File 'lib/infrawrench/client.rb', line 13247

def delete(console_id:, org_id: nil, request_options: nil)
  @transport.request(
    http_method: "DELETE",
    path: "/api/org/{orgId}/shared-consoles/{consoleId}",
    path_params: { "orgId" => org_id, "consoleId" => console_id },
    request_options: request_options
  )
end

#get(console_id:, org_id: nil, request_options: nil) ⇒ Hash

Get one shared console

Visible to participants and to anyone who could revoke it (the sharer, or a holder of org:settings:write). Others get 404 — that a named colleague has a root shell open on a named production host right now is operational information.

Requires permission: resources:execute.

GET /api/org/orgId/shared-consoles/consoleId

Raises on 404: Not found

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • console_id (String)
  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • console_id: (String)
  • org_id: (String, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Hash)

    Parsed JSON, shaped as SharedConsoleState — see sig/infrawrench/sdk.rbs.

Raises:



13276
13277
13278
13279
13280
13281
13282
13283
# File 'lib/infrawrench/client.rb', line 13276

def get(console_id:, org_id: nil, request_options: nil)
  @transport.request(
    http_method: "GET",
    path: "/api/org/{orgId}/shared-consoles/{consoleId}",
    path_params: { "orgId" => org_id, "consoleId" => console_id },
    request_options: request_options
  )
end

#handover(console_id:, org_id: nil, body: nil, request_options: nil) ⇒ Hash

Move the keyboard to another participant

Authorised by the current driver (the keyboard is theirs to give) or by the sharer (it is their box, and asking permission from somebody who has stopped responding is not a control). An observer cannot promote themselves — that is /request-driver.

Two simultaneous grants cannot both win: the database's partial unique index decides the order, and the loser gets 409 driver-race-lost.

The pty resizes to the new driver's viewport; everyone else letterboxes.

Requires permission: resources:execute.

POST /api/org/orgId/shared-consoles/consoleId/handover

Raises on 400: Bad request

Raises on 403: Forbidden

Raises on 404: Not found

Raises on 409: Conflict

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • console_id (String)
  • body (Hash, nil) (defaults to: nil)

    Request body, shaped as Hash.

  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • console_id: (String)
  • org_id: (String, nil) (defaults to: nil)
  • body: ({ "participantId" => String }, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Hash)

    Parsed JSON, shaped as SharedConsoleState — see sig/infrawrench/sdk.rbs.

Raises:



13317
13318
13319
13320
13321
13322
13323
13324
13325
# File 'lib/infrawrench/client.rb', line 13317

def handover(console_id:, org_id: nil, body: nil, request_options: nil)
  @transport.request(
    http_method: "POST",
    path: "/api/org/{orgId}/shared-consoles/{consoleId}/handover",
    path_params: { "orgId" => org_id, "consoleId" => console_id },
    body: body,
    request_options: request_options
  )
end

#join(console_id:, org_id: nil, body: nil, request_options: nil) ⇒ Hash

Redeem an invite and join

Admission needs live org membership and resources:execute — the invite is a locator, never a capability, so a leaked link admits nobody who could not have opened the shell themselves.

The invite is consumed by the first person it admits. Somebody already on the console resumes their own row without a token, so a reload costs them nothing and obliges the sharer to mint nothing. New joiners always start as observers whatever the link said.

Audit-logged as shared_console.join, and written onto the recording's timeline as an asciicast marker.

Requires permission: resources:execute.

POST /api/org/orgId/shared-consoles/consoleId/join

Raises on 400: Bad request

Raises on 403: Forbidden

Raises on 404: Not found

Raises on 409: Conflict

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • console_id (String)
  • body (Hash, nil) (defaults to: nil)

    Request body, shaped as Hash.

  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • console_id: (String)
  • org_id: (String, nil) (defaults to: nil)
  • body: ({ "token" => String }, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Hash)

    Parsed JSON, shaped as SharedConsoleJoined — see sig/infrawrench/sdk.rbs.

Raises:



13361
13362
13363
13364
13365
13366
13367
13368
13369
# File 'lib/infrawrench/client.rb', line 13361

def join(console_id:, org_id: nil, body: nil, request_options: nil)
  @transport.request(
    http_method: "POST",
    path: "/api/org/{orgId}/shared-consoles/{consoleId}/join",
    path_params: { "orgId" => org_id, "consoleId" => console_id },
    body: body,
    request_options: request_options
  )
end

#leave(console_id:, org_id: nil, request_options: nil) ⇒ Hash

Leave a shared console

Steps you off without ending the session. Your row survives, so the same invite is not needed again. Deliberately does not require resources:execute: giving access up must never be gated on still holding it.

POST /api/org/orgId/shared-consoles/consoleId/leave

Raises on 404: Not found

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • console_id (String)
  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • console_id: (String)
  • org_id: (String, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Hash)

    Parsed JSON, shaped as SharedConsoleState — see sig/infrawrench/sdk.rbs.

Raises:



13389
13390
13391
13392
13393
13394
13395
13396
# File 'lib/infrawrench/client.rb', line 13389

def leave(console_id:, org_id: nil, request_options: nil)
  @transport.request(
    http_method: "POST",
    path: "/api/org/{orgId}/shared-consoles/{consoleId}/leave",
    path_params: { "orgId" => org_id, "consoleId" => console_id },
    request_options: request_options
  )
end

#list(org_id: nil, request_options: nil) ⇒ Array<Hash>

List sessions currently shared

Live shared SSH sessions in this organization, with who is on each. Only cloud SSH can be shared: those sessions are already proxied by the server, so fanning the pty out to a second socket is a consumer of a stream it holds. A desktop session dialling a host directly never reaches the server and cannot be shared.

Requires permission: resources:execute.

GET /api/org/orgId/shared-consoles

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • org_id: (String, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Array<Hash>)

    Parsed JSON, shaped as Array<SharedConsoleSummary> — see sig/infrawrench/sdk.rbs.

Raises:



13416
13417
13418
13419
13420
13421
13422
13423
# File 'lib/infrawrench/client.rb', line 13416

def list(org_id: nil, request_options: nil)
  @transport.request(
    http_method: "GET",
    path: "/api/org/{orgId}/shared-consoles",
    path_params: { "orgId" => org_id },
    request_options: request_options
  )
end

#request_driver(console_id:, org_id: nil, request_options: nil) ⇒ Hash

Ask for the keyboard

Raises a flag the driver and the sharer can see. Grants nothing on its own — that is the point.

Requires permission: resources:execute.

POST /api/org/orgId/shared-consoles/consoleId/request-driver

Raises on 403: Forbidden

Raises on 404: Not found

Raises on 409: Conflict

Parameters:

  • org_id (String, nil) (defaults to: nil)

    Organization id. Defaults to the org_id the client was constructed with.

  • console_id (String)
  • request_options (Hash, nil) (defaults to: nil)

    Per-call :headers, :timeout and :open_timeout.

  • console_id: (String)
  • org_id: (String, nil) (defaults to: nil)
  • request_options: (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (Hash)

    Parsed JSON, shaped as SharedConsoleState — see sig/infrawrench/sdk.rbs.

Raises:



13447
13448
13449
13450
13451
13452
13453
13454
# File 'lib/infrawrench/client.rb', line 13447

def request_driver(console_id:, org_id: nil, request_options: nil)
  @transport.request(
    http_method: "POST",
    path: "/api/org/{orgId}/shared-consoles/{consoleId}/request-driver",
    path_params: { "orgId" => org_id, "consoleId" => console_id },
    request_options: request_options
  )
end