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.
12924 12925 12926 12927 12928 |
# File 'lib/infrawrench/client.rb', line 12924 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.
12918 12919 12920 |
# File 'lib/infrawrench/client.rb', line 12918 def invites @invites end |
#participants ⇒ SharedConsolesParticipantsNamespace (readonly)
Returns client.shared_consoles.participants.
12920 12921 12922 |
# File 'lib/infrawrench/client.rb', line 12920 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
12960 12961 12962 12963 12964 12965 12966 12967 12968 |
# File 'lib/infrawrench/client.rb', line 12960 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
12992 12993 12994 12995 12996 12997 12998 12999 |
# File 'lib/infrawrench/client.rb', line 12992 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
13021 13022 13023 13024 13025 13026 13027 13028 |
# File 'lib/infrawrench/client.rb', line 13021 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
13062 13063 13064 13065 13066 13067 13068 13069 13070 |
# File 'lib/infrawrench/client.rb', line 13062 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
13106 13107 13108 13109 13110 13111 13112 13113 13114 |
# File 'lib/infrawrench/client.rb', line 13106 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
13134 13135 13136 13137 13138 13139 13140 13141 |
# File 'lib/infrawrench/client.rb', line 13134 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
13161 13162 13163 13164 13165 13166 13167 13168 |
# File 'lib/infrawrench/client.rb', line 13161 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
13192 13193 13194 13195 13196 13197 13198 13199 |
# File 'lib/infrawrench/client.rb', line 13192 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 |