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.
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
#invites ⇒ SharedConsolesInvitesNamespace (readonly)
Returns client.shared_consoles.invites.
13173 13174 13175 |
# File 'lib/infrawrench/client.rb', line 13173 def invites @invites end |
#participants ⇒ SharedConsolesParticipantsNamespace (readonly)
Returns client.shared_consoles.participants.
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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) 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
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: ) end |