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.
12870 12871 12872 12873 12874 |
# File 'lib/infrawrench/client.rb', line 12870 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.
12864 12865 12866 |
# File 'lib/infrawrench/client.rb', line 12864 def invites @invites end |
#participants ⇒ SharedConsolesParticipantsNamespace (readonly)
Returns client.shared_consoles.participants.
12866 12867 12868 |
# File 'lib/infrawrench/client.rb', line 12866 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
12906 12907 12908 12909 12910 12911 12912 12913 12914 |
# File 'lib/infrawrench/client.rb', line 12906 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
12938 12939 12940 12941 12942 12943 12944 12945 |
# File 'lib/infrawrench/client.rb', line 12938 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
12967 12968 12969 12970 12971 12972 12973 12974 |
# File 'lib/infrawrench/client.rb', line 12967 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
13008 13009 13010 13011 13012 13013 13014 13015 13016 |
# File 'lib/infrawrench/client.rb', line 13008 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
13052 13053 13054 13055 13056 13057 13058 13059 13060 |
# File 'lib/infrawrench/client.rb', line 13052 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
13080 13081 13082 13083 13084 13085 13086 13087 |
# File 'lib/infrawrench/client.rb', line 13080 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
13107 13108 13109 13110 13111 13112 13113 13114 |
# File 'lib/infrawrench/client.rb', line 13107 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
13138 13139 13140 13141 13142 13143 13144 13145 |
# File 'lib/infrawrench/client.rb', line 13138 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 |