Class: Infrawrench::SharedConsolesNamespace
- Inherits:
-
Object
- Object
- Infrawrench::SharedConsolesNamespace
- Defined in:
- lib/infrawrench/client.rb,
sig/infrawrench/sdk.rbs
Overview
client.shared_consoles
Instance Attribute Summary collapse
-
#invites ⇒ SharedConsolesInvitesNamespace
readonly
client.shared_consoles.invites. -
#participants ⇒ SharedConsolesParticipantsNamespace
readonly
client.shared_consoles.participants.
Instance Method Summary collapse
-
#create(org_id: nil, body: nil, request_options: nil) ⇒ Hash
Share a live SSH session.
-
#delete(console_id:, org_id: nil, request_options: nil) ⇒ Hash
Revoke a share.
-
#get(console_id:, org_id: nil, request_options: nil) ⇒ Hash
Get one shared console.
-
#handover(console_id:, org_id: nil, body: nil, request_options: nil) ⇒ Hash
Move the keyboard to another participant.
-
#initialize(transport) ⇒ SharedConsolesNamespace
constructor
private
A new instance of SharedConsolesNamespace.
-
#join(console_id:, org_id: nil, body: nil, request_options: nil) ⇒ Hash
Redeem an invite and join.
-
#leave(console_id:, org_id: nil, request_options: nil) ⇒ Hash
Leave a shared console.
-
#list(org_id: nil, request_options: nil) ⇒ Array<Hash>
List sessions currently shared.
-
#request_driver(console_id:, org_id: nil, request_options: nil) ⇒ Hash
Ask for the keyboard.
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.
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
#invites ⇒ SharedConsolesInvitesNamespace (readonly)
Returns client.shared_consoles.invites.
13390 13391 13392 |
# File 'lib/infrawrench/client.rb', line 13390 def invites @invites end |
#participants ⇒ SharedConsolesParticipantsNamespace (readonly)
Returns client.shared_consoles.participants.
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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) end |