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:



13396
13397
13398
13399
13400
# File 'lib/infrawrench/client.rb', line 13396

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:



13390
13391
13392
# File 'lib/infrawrench/client.rb', line 13390

def invites
  @invites
end

#participantsSharedConsolesParticipantsNamespace (readonly)

Returns client.shared_consoles.participants.

Returns:



13392
13393
13394
# File 'lib/infrawrench/client.rb', line 13392

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:



13432
13433
13434
13435
13436
13437
13438
13439
13440
# File 'lib/infrawrench/client.rb', line 13432

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:



13464
13465
13466
13467
13468
13469
13470
13471
# File 'lib/infrawrench/client.rb', line 13464

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:



13493
13494
13495
13496
13497
13498
13499
13500
# File 'lib/infrawrench/client.rb', line 13493

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:



13534
13535
13536
13537
13538
13539
13540
13541
13542
# File 'lib/infrawrench/client.rb', line 13534

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:



13578
13579
13580
13581
13582
13583
13584
13585
13586
# File 'lib/infrawrench/client.rb', line 13578

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:



13606
13607
13608
13609
13610
13611
13612
13613
# File 'lib/infrawrench/client.rb', line 13606

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:



13633
13634
13635
13636
13637
13638
13639
13640
# File 'lib/infrawrench/client.rb', line 13633

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:



13664
13665
13666
13667
13668
13669
13670
13671
# File 'lib/infrawrench/client.rb', line 13664

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