infrawrench-sdk 1.13.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe82c9ffcd03c219b43a54d621c17d764bf016082c3690c1c330d3fb51a89eb2
4
- data.tar.gz: f128050bb920aab571400145b812bcba3f660591cd36a5797686f46d8098e369
3
+ metadata.gz: 9e38a098383f11fdb35de83cb2014267146a3689c00f7b84da86b2c994a01ce1
4
+ data.tar.gz: aaba5e6be92f922ca34f0436611e30ec26cebb13687d0d454e3f1e987f3fe4f4
5
5
  SHA512:
6
- metadata.gz: 10437ca09c7ead9e234342793c2b64bec369b50987aa2477462804250446c8b3b2fcb10b59f2025f7c7ad1b45b6a21ab7219b23378d7f520dea6b9aae7f7e6a6
7
- data.tar.gz: 5e2c48172ce7b220f845f7f5480b30f17fc14b351afc0dd3c0d0372bba6b8c9e77f27a5ab27cf191dcb8181eafc494545632ec59a9547a5afa28002c22de2cea
6
+ metadata.gz: e9371a9e34e0adac31a39ea733dd10c50ffea1b4704726ae163bde10ca694e9cb666412fa48824501a32256098f165c3ada273fcccf0b90fc91851ef32211110
7
+ data.tar.gz: 65dd789443a52e1bb9368eec4dc7e92db2117850ad45e17645ed0e82f7d1a3367610eff61e92e05aa5c223fb62b493bc15cd2f6b08197a2bd5259a9d018799ec
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # infrawrench-sdk
2
2
 
3
- Generated Ruby client for the Infrawrench API (API version `1.13.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.15.0`).
4
4
 
5
5
  **Do not edit this gem by hand** — it is regenerated from `openapi.json` and is
6
6
  not checked into the repository. Run
@@ -41,7 +41,7 @@ Every method takes an optional trailing `request_options:` hash (`:headers`,
41
41
  Responses are the plain `Hash`/`Array` that `JSON.parse` returns, with String
42
42
  keys spelled exactly as the wire spells them. There are no model classes — see
43
43
  [`sig/infrawrench/sdk.rbs`](./sig/infrawrench/sdk.rbs) for the shape of every one of the
44
- 565 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 586 schemas, as RBS type aliases that steep and TypeProf can read.
45
45
 
46
46
  Non-2xx responses raise `Infrawrench::ApiError`, which carries `#status`,
47
47
  the parsed `#body`, and the machine-readable `#code` when the API sends one —
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.13.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.15.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.13.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.15.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -17,8 +17,8 @@ require_relative "lib/infrawrench/version"
17
17
  Gem::Specification.new do |spec|
18
18
  spec.name = "infrawrench-sdk"
19
19
  spec.version = Infrawrench::VERSION
20
- spec.summary = "Generated Ruby client for the Infrawrench API (v1.13.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.13.0). Covers the published API surface only — operations marked x-internal in the spec are not generated. No runtime dependencies."
20
+ spec.summary = "Generated Ruby client for the Infrawrench API (v1.15.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.15.0). Covers the published API surface only — operations marked x-internal in the spec are not generated. No runtime dependencies."
22
22
  spec.authors = ["Infrawrench LLC", "Astrid Gealer"]
23
23
  spec.email = ["astrid@infrawrench.com"]
24
24
  spec.homepage = "https://infrawrench.com/docs/team-and-billing/client-sdks"
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.13.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.15.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.13.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.15.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -6395,6 +6395,334 @@ module Infrawrench
6395
6395
  end
6396
6396
  end
6397
6397
 
6398
+ # `client.incidents.get`
6399
+ class IncidentsGetNamespace
6400
+ # @api private
6401
+ # @param transport [Transport]
6402
+ def initialize(transport)
6403
+ @transport = transport
6404
+ end
6405
+
6406
+ # List declared incidents
6407
+ #
6408
+ # Every incident the organization has declared, newest first, each with the
6409
+ # artefacts its declaration created — including the ones that failed.
6410
+ #
6411
+ # _Requires permission: `incidents:read`._
6412
+ #
6413
+ # GET /api/org/{orgId}/incidents
6414
+ #
6415
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6416
+ # constructed with.
6417
+ # @param status [String, nil] `open`, `mitigated`, `resolved`, or `all` (the default).
6418
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6419
+ # @return [Hash] Parsed JSON, shaped as `IncidentList` — see `sig/infrawrench/sdk.rbs`.
6420
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6421
+ def get(org_id: nil, status: nil, request_options: nil)
6422
+ @transport.request(
6423
+ http_method: "GET",
6424
+ path: "/api/org/{orgId}/incidents",
6425
+ path_params: { "orgId" => org_id },
6426
+ query: { "status" => status },
6427
+ request_options: request_options
6428
+ )
6429
+ end
6430
+
6431
+ # Read one incident
6432
+ #
6433
+ # The incident with its artefacts and its operator notes.
6434
+ #
6435
+ # _Requires permission: `incidents:read`._
6436
+ #
6437
+ # GET /api/org/{orgId}/incidents/{incidentId}
6438
+ #
6439
+ # Raises on 404: Not found
6440
+ #
6441
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6442
+ # constructed with.
6443
+ # @param incident_id [String]
6444
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6445
+ # @return [Hash] Parsed JSON, shaped as `IncidentDetail` — see `sig/infrawrench/sdk.rbs`.
6446
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6447
+ def get_org_org_id_incidents_incident_id(incident_id:, org_id: nil, request_options: nil)
6448
+ @transport.request(
6449
+ http_method: "GET",
6450
+ path: "/api/org/{orgId}/incidents/{incidentId}",
6451
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6452
+ request_options: request_options
6453
+ )
6454
+ end
6455
+ end
6456
+
6457
+ # `client.incidents.notes`
6458
+ class IncidentsNotesNamespace
6459
+ # @api private
6460
+ # @param transport [Transport]
6461
+ def initialize(transport)
6462
+ @transport = transport
6463
+ end
6464
+
6465
+ # Add an operator note
6466
+ #
6467
+ # The running commentary no join can reconstruct. `occurredAt` may be
6468
+ # backdated so a note typed at 04:00 lands on the timeline where it belongs.
6469
+ #
6470
+ # _Requires permission: `incidents:write`._
6471
+ #
6472
+ # POST /api/org/{orgId}/incidents/{incidentId}/notes
6473
+ #
6474
+ # Raises on 400: Bad request
6475
+ #
6476
+ # Raises on 404: Not found
6477
+ #
6478
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6479
+ # constructed with.
6480
+ # @param incident_id [String]
6481
+ # @param body [Hash, nil] Request body, shaped as `IncidentNoteCreate`.
6482
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6483
+ # @return [Hash] Parsed JSON, shaped as `IncidentNote` — see `sig/infrawrench/sdk.rbs`.
6484
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6485
+ def create(incident_id:, org_id: nil, body: nil, request_options: nil)
6486
+ @transport.request(
6487
+ http_method: "POST",
6488
+ path: "/api/org/{orgId}/incidents/{incidentId}/notes",
6489
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6490
+ body: body,
6491
+ request_options: request_options
6492
+ )
6493
+ end
6494
+
6495
+ # Delete an operator note
6496
+ #
6497
+ # _Requires permission: `incidents:write`._
6498
+ #
6499
+ # DELETE /api/org/{orgId}/incidents/{incidentId}/notes/{noteId}
6500
+ #
6501
+ # Raises on 404: Not found
6502
+ #
6503
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6504
+ # constructed with.
6505
+ # @param incident_id [String]
6506
+ # @param note_id [String]
6507
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6508
+ # @return [nil] This endpoint returns no content.
6509
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6510
+ def delete(incident_id:, note_id:, org_id: nil, request_options: nil)
6511
+ @transport.request(
6512
+ http_method: "DELETE",
6513
+ path: "/api/org/{orgId}/incidents/{incidentId}/notes/{noteId}",
6514
+ path_params: { "orgId" => org_id, "incidentId" => incident_id, "noteId" => note_id },
6515
+ accept: :empty,
6516
+ request_options: request_options
6517
+ )
6518
+ end
6519
+ end
6520
+
6521
+ # `client.incidents`
6522
+ class IncidentsNamespace
6523
+ # @return [IncidentsGetNamespace] `client.incidents.get`
6524
+ attr_reader :get
6525
+ # @return [IncidentsNotesNamespace] `client.incidents.notes`
6526
+ attr_reader :notes
6527
+
6528
+ # @api private
6529
+ # @param transport [Transport]
6530
+ def initialize(transport)
6531
+ @transport = transport
6532
+ @get = IncidentsGetNamespace.new(@transport)
6533
+ @notes = IncidentsNotesNamespace.new(@transport)
6534
+ end
6535
+
6536
+ # Declare an incident
6537
+ #
6538
+ # Record the incident and perform the opted-in side effects. The incident
6539
+ # row is written first and alone: a 201 means it exists, and the `artifacts`
6540
+ # array on the response says what else happened. No side effect can lose the
6541
+ # declaration, and none is swallowed. Audit-logged.
6542
+ #
6543
+ # _Requires permission: `incidents:write`._
6544
+ #
6545
+ # POST /api/org/{orgId}/incidents
6546
+ #
6547
+ # Raises on 400: Bad request
6548
+ #
6549
+ # Raises on 403: Forbidden
6550
+ #
6551
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6552
+ # constructed with.
6553
+ # @param body [Hash, nil] Request body, shaped as `IncidentDeclare`.
6554
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6555
+ # @return [Hash] Parsed JSON, shaped as `Incident` — see `sig/infrawrench/sdk.rbs`.
6556
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6557
+ def create(org_id: nil, body: nil, request_options: nil)
6558
+ @transport.request(
6559
+ http_method: "POST",
6560
+ path: "/api/org/{orgId}/incidents",
6561
+ path_params: { "orgId" => org_id },
6562
+ body: body,
6563
+ request_options: request_options
6564
+ )
6565
+ end
6566
+
6567
+ # Delete an incident
6568
+ #
6569
+ # Removes the incident, its notes and its artefact records. It does not lift
6570
+ # a freeze or close a status-page update — resolve for that; deleting is for
6571
+ # a mis-declaration. Audit-logged.
6572
+ #
6573
+ # _Requires permission: `incidents:write`._
6574
+ #
6575
+ # DELETE /api/org/{orgId}/incidents/{incidentId}
6576
+ #
6577
+ # Raises on 404: Not found
6578
+ #
6579
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6580
+ # constructed with.
6581
+ # @param incident_id [String]
6582
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6583
+ # @return [nil] This endpoint returns no content.
6584
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6585
+ def delete(incident_id:, org_id: nil, request_options: nil)
6586
+ @transport.request(
6587
+ http_method: "DELETE",
6588
+ path: "/api/org/{orgId}/incidents/{incidentId}",
6589
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6590
+ accept: :empty,
6591
+ request_options: request_options
6592
+ )
6593
+ end
6594
+
6595
+ # Export a pre-filled postmortem
6596
+ #
6597
+ # Markdown with the timeline, the affected resources, the duration, the time
6598
+ # to mitigate and the notes already filled in. The analysis headings —
6599
+ # impact, root cause, action items — are deliberately left blank: a
6600
+ # generated document that guesses at a root cause is worse than one that
6601
+ # leaves a heading.
6602
+ #
6603
+ # _Requires permission: `incidents:read`._
6604
+ #
6605
+ # GET /api/org/{orgId}/incidents/{incidentId}/postmortem
6606
+ #
6607
+ # Raises on 404: Not found
6608
+ #
6609
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6610
+ # constructed with.
6611
+ # @param incident_id [String]
6612
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6613
+ # @return [Hash] Parsed JSON, shaped as `IncidentPostmortem` — see
6614
+ # `sig/infrawrench/sdk.rbs`.
6615
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6616
+ def postmortem(incident_id:, org_id: nil, request_options: nil)
6617
+ @transport.request(
6618
+ http_method: "GET",
6619
+ path: "/api/org/{orgId}/incidents/{incidentId}/postmortem",
6620
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6621
+ request_options: request_options
6622
+ )
6623
+ end
6624
+
6625
+ # Retry the artefacts that failed
6626
+ #
6627
+ # Re-runs only the side effects whose artefact is in a failure state,
6628
+ # replacing each failure rather than queueing a second attempt beside it. A
6629
+ # `failed` artefact is **re-created**; a `close_failed` one is **re-closed**
6630
+ # — re-creating the latter would open a second change freeze or post a
6631
+ # duplicate public notice. A status-page retry reuses the components
6632
+ # recorded on the artefact's `request`, so the announcement keeps its
6633
+ # original scope. Its own endpoint rather than a flag on PATCH, because it
6634
+ # writes into three external systems. Audit-logged.
6635
+ #
6636
+ # _Requires permission: `incidents:write`._
6637
+ #
6638
+ # POST /api/org/{orgId}/incidents/{incidentId}/retry-artifacts
6639
+ #
6640
+ # Raises on 404: Not found
6641
+ #
6642
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6643
+ # constructed with.
6644
+ # @param incident_id [String]
6645
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6646
+ # @return [Hash] Parsed JSON, shaped as `Incident` — see `sig/infrawrench/sdk.rbs`.
6647
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6648
+ def retry_artifacts(incident_id:, org_id: nil, request_options: nil)
6649
+ @transport.request(
6650
+ http_method: "POST",
6651
+ path: "/api/org/{orgId}/incidents/{incidentId}/retry-artifacts",
6652
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6653
+ request_options: request_options
6654
+ )
6655
+ end
6656
+
6657
+ # Assemble the incident's timeline
6658
+ #
6659
+ # Merged on read from what is already recorded between the incident's start
6660
+ # and its resolution: resource changes, deployments, cost anomalies,
6661
+ # provider status incidents, audit entries, change freezes and workflow runs
6662
+ # (all via the same union the Moment screen uses), plus probe state
6663
+ # transitions, metric-alert firings, the incident's own life events, its
6664
+ # artefacts and its operator notes. Nothing is copied — a correction
6665
+ # upstream shows up here on the next read.
6666
+ #
6667
+ # Probe transitions are an approximation: `synthetic_probes` keeps only a
6668
+ # single `lastStateChangeAt`, so a probe that flapped twice inside the
6669
+ # window contributes its most recent flip and no more.
6670
+ #
6671
+ # _Requires permission: `incidents:read`._
6672
+ #
6673
+ # GET /api/org/{orgId}/incidents/{incidentId}/timeline
6674
+ #
6675
+ # Raises on 404: Not found
6676
+ #
6677
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6678
+ # constructed with.
6679
+ # @param incident_id [String]
6680
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6681
+ # @return [Hash] Parsed JSON, shaped as `IncidentTimeline` — see `sig/infrawrench/sdk.rbs`.
6682
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6683
+ def timeline(incident_id:, org_id: nil, request_options: nil)
6684
+ @transport.request(
6685
+ http_method: "GET",
6686
+ path: "/api/org/{orgId}/incidents/{incidentId}/timeline",
6687
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6688
+ request_options: request_options
6689
+ )
6690
+ end
6691
+
6692
+ # Edit or transition an incident
6693
+ #
6694
+ # Omitted fields keep their value. Setting `status` stamps the matching
6695
+ # timestamp, and resolving undoes exactly what this incident created — the
6696
+ # freeze whose id is on its own artefact, not whatever freeze happens to be
6697
+ # in effect. Resolving an incident that was never marked mitigated
6698
+ # back-fills `mitigatedAt` from `resolvedAt`. Audit-logged.
6699
+ #
6700
+ # _Requires permission: `incidents:write`._
6701
+ #
6702
+ # PATCH /api/org/{orgId}/incidents/{incidentId}
6703
+ #
6704
+ # Raises on 400: Bad request
6705
+ #
6706
+ # Raises on 404: Not found
6707
+ #
6708
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6709
+ # constructed with.
6710
+ # @param incident_id [String]
6711
+ # @param body [Hash, nil] Request body, shaped as `IncidentPatch`.
6712
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6713
+ # @return [Hash] Parsed JSON, shaped as `Incident` — see `sig/infrawrench/sdk.rbs`.
6714
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6715
+ def update(incident_id:, org_id: nil, body: nil, request_options: nil)
6716
+ @transport.request(
6717
+ http_method: "PATCH",
6718
+ path: "/api/org/{orgId}/incidents/{incidentId}",
6719
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6720
+ body: body,
6721
+ request_options: request_options
6722
+ )
6723
+ end
6724
+ end
6725
+
6398
6726
  # `client.invitations.by_token`
6399
6727
  class InvitationsByTokenNamespace
6400
6728
  # @api private
@@ -11075,6 +11403,435 @@ module Infrawrench
11075
11403
  end
11076
11404
  end
11077
11405
 
11406
+ # `client.shared_consoles.invites`
11407
+ class SharedConsolesInvitesNamespace
11408
+ # @api private
11409
+ # @param transport [Transport]
11410
+ def initialize(transport)
11411
+ @transport = transport
11412
+ end
11413
+
11414
+ # Mint a replacement invite
11415
+ #
11416
+ # An invite is spent by the first person it admits, so inviting a second
11417
+ # guest means minting a second link. Replaces any outstanding one. Sharer or
11418
+ # `org:settings:write`.
11419
+ #
11420
+ # POST /api/org/{orgId}/shared-consoles/{consoleId}/invites
11421
+ #
11422
+ # Raises on 403: Forbidden
11423
+ #
11424
+ # Raises on 404: Not found
11425
+ #
11426
+ # Raises on 409: Conflict
11427
+ #
11428
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11429
+ # constructed with.
11430
+ # @param console_id [String]
11431
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
11432
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11433
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleCreated` — see
11434
+ # `sig/infrawrench/sdk.rbs`.
11435
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11436
+ def create(console_id:, org_id: nil, body: nil, request_options: nil)
11437
+ @transport.request(
11438
+ http_method: "POST",
11439
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}/invites",
11440
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11441
+ body: body,
11442
+ request_options: request_options
11443
+ )
11444
+ end
11445
+
11446
+ # Withdraw the outstanding invite
11447
+ #
11448
+ # Kills the link without touching the session or anyone already on it.
11449
+ #
11450
+ # DELETE /api/org/{orgId}/shared-consoles/{consoleId}/invites
11451
+ #
11452
+ # Raises on 403: Forbidden
11453
+ #
11454
+ # Raises on 404: Not found
11455
+ #
11456
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11457
+ # constructed with.
11458
+ # @param console_id [String]
11459
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11460
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleState` — see
11461
+ # `sig/infrawrench/sdk.rbs`.
11462
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11463
+ def delete(console_id:, org_id: nil, request_options: nil)
11464
+ @transport.request(
11465
+ http_method: "DELETE",
11466
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}/invites",
11467
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11468
+ request_options: request_options
11469
+ )
11470
+ end
11471
+
11472
+ # Preview what an invite link points at
11473
+ #
11474
+ # What the join screen shows before anyone commits: which host, whose
11475
+ # session, and whether you may join it. Reachable with a valid token by a
11476
+ # signed-in member who already holds `resources:execute` — the token says
11477
+ # *which* session, never *whether*. Returns nothing from the session itself.
11478
+ #
11479
+ # _Requires permission: `resources:execute`._
11480
+ #
11481
+ # GET /api/org/{orgId}/shared-consoles/invites/{token}
11482
+ #
11483
+ # Raises on 404: Not found
11484
+ #
11485
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11486
+ # constructed with.
11487
+ # @param token [String]
11488
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11489
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleInvitePreview` — see
11490
+ # `sig/infrawrench/sdk.rbs`.
11491
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11492
+ def get(token:, org_id: nil, request_options: nil)
11493
+ @transport.request(
11494
+ http_method: "GET",
11495
+ path: "/api/org/{orgId}/shared-consoles/invites/{token}",
11496
+ path_params: { "orgId" => org_id, "token" => token },
11497
+ request_options: request_options
11498
+ )
11499
+ end
11500
+ end
11501
+
11502
+ # `client.shared_consoles.participants`
11503
+ class SharedConsolesParticipantsNamespace
11504
+ # @api private
11505
+ # @param transport [Transport]
11506
+ def initialize(transport)
11507
+ @transport = transport
11508
+ end
11509
+
11510
+ # Remove somebody from a shared console
11511
+ #
11512
+ # Their socket is closed immediately on the replica holding the pty, and
11513
+ # within one two-second sweep on any other. They are marked `removed` rather
11514
+ # than `left`, so they cannot resume without a fresh invite. The sharer
11515
+ # cannot be removed — revoke the share.
11516
+ #
11517
+ # DELETE
11518
+ # /api/org/{orgId}/shared-consoles/{consoleId}/participants/{participantId}
11519
+ #
11520
+ # Raises on 403: Forbidden
11521
+ #
11522
+ # Raises on 404: Not found
11523
+ #
11524
+ # Raises on 409: Conflict
11525
+ #
11526
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11527
+ # constructed with.
11528
+ # @param console_id [String]
11529
+ # @param participant_id [String]
11530
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11531
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleState` — see
11532
+ # `sig/infrawrench/sdk.rbs`.
11533
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11534
+ def delete(console_id:, participant_id:, org_id: nil, request_options: nil)
11535
+ @transport.request(
11536
+ http_method: "DELETE",
11537
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}/participants/{participantId}",
11538
+ path_params: {
11539
+ "orgId" => org_id,
11540
+ "consoleId" => console_id,
11541
+ "participantId" => participant_id
11542
+ },
11543
+ request_options: request_options
11544
+ )
11545
+ end
11546
+ end
11547
+
11548
+ # `client.shared_consoles`
11549
+ class SharedConsolesNamespace
11550
+ # @return [SharedConsolesInvitesNamespace] `client.shared_consoles.invites`
11551
+ attr_reader :invites
11552
+ # @return [SharedConsolesParticipantsNamespace] `client.shared_consoles.participants`
11553
+ attr_reader :participants
11554
+
11555
+ # @api private
11556
+ # @param transport [Transport]
11557
+ def initialize(transport)
11558
+ @transport = transport
11559
+ @invites = SharedConsolesInvitesNamespace.new(@transport)
11560
+ @participants = SharedConsolesParticipantsNamespace.new(@transport)
11561
+ end
11562
+
11563
+ # Share a live SSH session
11564
+ #
11565
+ # Opens a share on a session you already have running and mints its first
11566
+ # invite. You become the driver.
11567
+ #
11568
+ # Returns 409 `console_not_here` when the pty is held by a different server
11569
+ # replica than the one answering this call — reopen the terminal and share
11570
+ # again. Writing the share anyway would produce a link that authorises
11571
+ # correctly and then finds nothing to attach to.
11572
+ #
11573
+ # Requires `resources:execute` — the same permission as opening the
11574
+ # terminal. Closed to API keys: sharing a shell is an act a person performs.
11575
+ #
11576
+ # _Requires permission: `resources:execute`._
11577
+ #
11578
+ # POST /api/org/{orgId}/shared-consoles
11579
+ #
11580
+ # Raises on 400: Bad request
11581
+ #
11582
+ # Raises on 404: Not found
11583
+ #
11584
+ # Raises on 409: Conflict
11585
+ #
11586
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11587
+ # constructed with.
11588
+ # @param body [Hash, nil] Request body, shaped as `CreateSharedConsole`.
11589
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11590
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleCreated` — see
11591
+ # `sig/infrawrench/sdk.rbs`.
11592
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11593
+ def create(org_id: nil, body: nil, request_options: nil)
11594
+ @transport.request(
11595
+ http_method: "POST",
11596
+ path: "/api/org/{orgId}/shared-consoles",
11597
+ path_params: { "orgId" => org_id },
11598
+ body: body,
11599
+ request_options: request_options
11600
+ )
11601
+ end
11602
+
11603
+ # Revoke a share
11604
+ #
11605
+ # Disconnects every guest and stops the fan-out. The sharer's own SSH
11606
+ # session carries on — revoking a share is not killing a terminal.
11607
+ #
11608
+ # The sharer or a holder of `org:settings:write`. Deliberately does **not**
11609
+ # require `resources:execute`: ending access must never be gated on still
11610
+ # holding the access, or an owner whose role was narrowed mid-incident could
11611
+ # not close the session they opened.
11612
+ #
11613
+ # DELETE /api/org/{orgId}/shared-consoles/{consoleId}
11614
+ #
11615
+ # Raises on 403: Forbidden
11616
+ #
11617
+ # Raises on 404: Not found
11618
+ #
11619
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11620
+ # constructed with.
11621
+ # @param console_id [String]
11622
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11623
+ # @return [Hash] Parsed JSON, shaped as `Ok` — see `sig/infrawrench/sdk.rbs`.
11624
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11625
+ def delete(console_id:, org_id: nil, request_options: nil)
11626
+ @transport.request(
11627
+ http_method: "DELETE",
11628
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}",
11629
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11630
+ request_options: request_options
11631
+ )
11632
+ end
11633
+
11634
+ # Get one shared console
11635
+ #
11636
+ # Visible to participants and to anyone who could revoke it (the sharer, or
11637
+ # a holder of `org:settings:write`). Others get 404 — that a named colleague
11638
+ # has a root shell open on a named production host right now is operational
11639
+ # information.
11640
+ #
11641
+ # _Requires permission: `resources:execute`._
11642
+ #
11643
+ # GET /api/org/{orgId}/shared-consoles/{consoleId}
11644
+ #
11645
+ # Raises on 404: Not found
11646
+ #
11647
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11648
+ # constructed with.
11649
+ # @param console_id [String]
11650
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11651
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleState` — see
11652
+ # `sig/infrawrench/sdk.rbs`.
11653
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11654
+ def get(console_id:, org_id: nil, request_options: nil)
11655
+ @transport.request(
11656
+ http_method: "GET",
11657
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}",
11658
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11659
+ request_options: request_options
11660
+ )
11661
+ end
11662
+
11663
+ # Move the keyboard to another participant
11664
+ #
11665
+ # Authorised by the **current driver** (the keyboard is theirs to give) or
11666
+ # by the **sharer** (it is their box, and asking permission from somebody
11667
+ # who has stopped responding is not a control). An observer cannot promote
11668
+ # themselves — that is `/request-driver`.
11669
+ #
11670
+ # Two simultaneous grants cannot both win: the database's partial unique
11671
+ # index decides the order, and the loser gets 409 `driver-race-lost`.
11672
+ #
11673
+ # The pty resizes to the new driver's viewport; everyone else letterboxes.
11674
+ #
11675
+ # _Requires permission: `resources:execute`._
11676
+ #
11677
+ # POST /api/org/{orgId}/shared-consoles/{consoleId}/handover
11678
+ #
11679
+ # Raises on 400: Bad request
11680
+ #
11681
+ # Raises on 403: Forbidden
11682
+ #
11683
+ # Raises on 404: Not found
11684
+ #
11685
+ # Raises on 409: Conflict
11686
+ #
11687
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11688
+ # constructed with.
11689
+ # @param console_id [String]
11690
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
11691
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11692
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleState` — see
11693
+ # `sig/infrawrench/sdk.rbs`.
11694
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11695
+ def handover(console_id:, org_id: nil, body: nil, request_options: nil)
11696
+ @transport.request(
11697
+ http_method: "POST",
11698
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}/handover",
11699
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11700
+ body: body,
11701
+ request_options: request_options
11702
+ )
11703
+ end
11704
+
11705
+ # Redeem an invite and join
11706
+ #
11707
+ # Admission needs live org membership **and** `resources:execute` — the
11708
+ # invite is a locator, never a capability, so a leaked link admits nobody
11709
+ # who could not have opened the shell themselves.
11710
+ #
11711
+ # The invite is consumed by the first person it admits. Somebody already on
11712
+ # the console resumes their own row without a token, so a reload costs them
11713
+ # nothing and obliges the sharer to mint nothing. New joiners always start
11714
+ # as observers whatever the link said.
11715
+ #
11716
+ # Audit-logged as `shared_console.join`, and written onto the recording's
11717
+ # timeline as an asciicast marker.
11718
+ #
11719
+ # _Requires permission: `resources:execute`._
11720
+ #
11721
+ # POST /api/org/{orgId}/shared-consoles/{consoleId}/join
11722
+ #
11723
+ # Raises on 400: Bad request
11724
+ #
11725
+ # Raises on 403: Forbidden
11726
+ #
11727
+ # Raises on 404: Not found
11728
+ #
11729
+ # Raises on 409: Conflict
11730
+ #
11731
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11732
+ # constructed with.
11733
+ # @param console_id [String]
11734
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
11735
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11736
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleJoined` — see
11737
+ # `sig/infrawrench/sdk.rbs`.
11738
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11739
+ def join(console_id:, org_id: nil, body: nil, request_options: nil)
11740
+ @transport.request(
11741
+ http_method: "POST",
11742
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}/join",
11743
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11744
+ body: body,
11745
+ request_options: request_options
11746
+ )
11747
+ end
11748
+
11749
+ # Leave a shared console
11750
+ #
11751
+ # Steps you off without ending the session. Your row survives, so the same
11752
+ # invite is not needed again. Deliberately does not require
11753
+ # `resources:execute`: giving access up must never be gated on still holding
11754
+ # it.
11755
+ #
11756
+ # POST /api/org/{orgId}/shared-consoles/{consoleId}/leave
11757
+ #
11758
+ # Raises on 404: Not found
11759
+ #
11760
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11761
+ # constructed with.
11762
+ # @param console_id [String]
11763
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11764
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleState` — see
11765
+ # `sig/infrawrench/sdk.rbs`.
11766
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11767
+ def leave(console_id:, org_id: nil, request_options: nil)
11768
+ @transport.request(
11769
+ http_method: "POST",
11770
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}/leave",
11771
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11772
+ request_options: request_options
11773
+ )
11774
+ end
11775
+
11776
+ # List sessions currently shared
11777
+ #
11778
+ # Live shared SSH sessions in this organization, with who is on each. Only
11779
+ # cloud SSH can be shared: those sessions are already proxied by the server,
11780
+ # so fanning the pty out to a second socket is a consumer of a stream it
11781
+ # holds. A desktop session dialling a host directly never reaches the server
11782
+ # and cannot be shared.
11783
+ #
11784
+ # _Requires permission: `resources:execute`._
11785
+ #
11786
+ # GET /api/org/{orgId}/shared-consoles
11787
+ #
11788
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11789
+ # constructed with.
11790
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11791
+ # @return [Array<Hash>] Parsed JSON, shaped as `Array<SharedConsoleSummary>` — see
11792
+ # `sig/infrawrench/sdk.rbs`.
11793
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11794
+ def list(org_id: nil, request_options: nil)
11795
+ @transport.request(
11796
+ http_method: "GET",
11797
+ path: "/api/org/{orgId}/shared-consoles",
11798
+ path_params: { "orgId" => org_id },
11799
+ request_options: request_options
11800
+ )
11801
+ end
11802
+
11803
+ # Ask for the keyboard
11804
+ #
11805
+ # Raises a flag the driver and the sharer can see. Grants nothing on its own
11806
+ # — that is the point.
11807
+ #
11808
+ # _Requires permission: `resources:execute`._
11809
+ #
11810
+ # POST /api/org/{orgId}/shared-consoles/{consoleId}/request-driver
11811
+ #
11812
+ # Raises on 403: Forbidden
11813
+ #
11814
+ # Raises on 404: Not found
11815
+ #
11816
+ # Raises on 409: Conflict
11817
+ #
11818
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11819
+ # constructed with.
11820
+ # @param console_id [String]
11821
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11822
+ # @return [Hash] Parsed JSON, shaped as `SharedConsoleState` — see
11823
+ # `sig/infrawrench/sdk.rbs`.
11824
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11825
+ def request_driver(console_id:, org_id: nil, request_options: nil)
11826
+ @transport.request(
11827
+ http_method: "POST",
11828
+ path: "/api/org/{orgId}/shared-consoles/{consoleId}/request-driver",
11829
+ path_params: { "orgId" => org_id, "consoleId" => console_id },
11830
+ request_options: request_options
11831
+ )
11832
+ end
11833
+ end
11834
+
11078
11835
  # `client.slack.channels`
11079
11836
  class SlackChannelsNamespace
11080
11837
  # @api private
@@ -12875,6 +13632,8 @@ module Infrawrench
12875
13632
  attr_reader :environment_diff
12876
13633
  # @return [ExpiringNamespace] `client.expiring`
12877
13634
  attr_reader :expiring
13635
+ # @return [IncidentsNamespace] `client.incidents`
13636
+ attr_reader :incidents
12878
13637
  # @return [InvitationsNamespace] `client.invitations`
12879
13638
  attr_reader :invitations
12880
13639
  # @return [InvoicesNamespace] `client.invoices`
@@ -12929,6 +13688,8 @@ module Infrawrench
12929
13688
  attr_reader :session_recordings
12930
13689
  # @return [SftpNamespace] `client.sftp`
12931
13690
  attr_reader :sftp
13691
+ # @return [SharedConsolesNamespace] `client.shared_consoles`
13692
+ attr_reader :shared_consoles
12932
13693
  # @return [SlackNamespace] `client.slack`
12933
13694
  attr_reader :slack
12934
13695
  # @return [SqlNamespace] `client.sql`
@@ -13002,6 +13763,7 @@ module Infrawrench
13002
13763
  @docker = DockerNamespace.new(@transport)
13003
13764
  @environment_diff = EnvironmentDiffNamespace.new(@transport)
13004
13765
  @expiring = ExpiringNamespace.new(@transport)
13766
+ @incidents = IncidentsNamespace.new(@transport)
13005
13767
  @invitations = InvitationsNamespace.new(@transport)
13006
13768
  @invoices = InvoicesNamespace.new(@transport)
13007
13769
  @jira = JiraNamespace.new(@transport)
@@ -13029,6 +13791,7 @@ module Infrawrench
13029
13791
  @search = SearchNamespace.new(@transport)
13030
13792
  @session_recordings = SessionRecordingsNamespace.new(@transport)
13031
13793
  @sftp = SftpNamespace.new(@transport)
13794
+ @shared_consoles = SharedConsolesNamespace.new(@transport)
13032
13795
  @slack = SlackNamespace.new(@transport)
13033
13796
  @sql = SqlNamespace.new(@transport)
13034
13797
  @ssh_fanout = SshFanoutNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.13.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.15.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.13.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.15.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.13.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.15.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.13.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.15.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.13.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.15.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.13.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.15.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -15,5 +15,5 @@
15
15
  # Kept in its own file so the gemspec can read the version without loading the
16
16
  # client — a gemspec that pulls in net/http is a gemspec that can fail to parse.
17
17
  module Infrawrench
18
- VERSION = "1.13.0"
18
+ VERSION = "1.15.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.13.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.15.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.13.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.15.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,7 +1,7 @@
1
- # infrawrench-sdk v1.13.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.15.0 | MIT | Copyright (c) 2026 Infrawrench LLC
2
2
  # https://github.com/Infrawrench/Infrawrench
3
3
  #
4
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.13.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.15.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -328,6 +328,7 @@ module Infrawrench
328
328
  | "postureAlerts"
329
329
  | "probeAlerts"
330
330
  | "quotaAlerts"
331
+ | "incidentAlerts"
331
332
  | "weeklyDigest"
332
333
 
333
334
  # Spec schema: `AllocationRule`.
@@ -1727,6 +1728,14 @@ module Infrawrench
1727
1728
  # Spec schema: `CreateResourceResponse`.
1728
1729
  type create_resource_response = { "id" => resource_id, "displayName" => String, ?"warnings" => Array[String] }
1729
1730
 
1731
+ # Spec schema: `CreateSharedConsole`.
1732
+ type create_shared_console = {
1733
+ "liveConsoleId" => String,
1734
+ "routingKey" => String,
1735
+ ?"allowHandover" => bool,
1736
+ ?"inviteTtlMinutes" => Integer
1737
+ }
1738
+
1730
1739
  # Spec schema: `CreateWidgetRequest`.
1731
1740
  type create_widget_request = {
1732
1741
  "dashboardId" => String,
@@ -2576,6 +2585,148 @@ module Infrawrench
2576
2585
  "isImported" => bool
2577
2586
  }
2578
2587
 
2588
+ # Spec schema: `Incident`.
2589
+ type incident = {
2590
+ "id" => String,
2591
+ "title" => String,
2592
+ "severity" => "sev1" | "sev2" | "sev3" | "sev4",
2593
+ "status" => "open" | "mitigated" | "resolved",
2594
+ "summary" => String | nil,
2595
+ "startedAt" => String,
2596
+ "mitigatedAt" => String | nil,
2597
+ "resolvedAt" => String | nil,
2598
+ "declaredByUserId" => String | nil,
2599
+ "declaredByName" => String | nil,
2600
+ "resolvedByUserId" => String | nil,
2601
+ "affectedResourceIds" => Array[String],
2602
+ "affectedAccountIds" => Array[String],
2603
+ "issueUrl" => String | nil,
2604
+ "createdAt" => String,
2605
+ "updatedAt" => String,
2606
+ "artifacts" => Array[incident_artifact],
2607
+ "noteCount" => Integer
2608
+ }
2609
+
2610
+ # Spec schema: `IncidentActions`.
2611
+ type incident_actions = {
2612
+ ?"openFreeze" => bool,
2613
+ ?"pinMoment" => bool,
2614
+ ?"postSlack" => bool,
2615
+ ?"statusPageId" => String | nil,
2616
+ ?"statusPageComponentIds" => Array[String]
2617
+ }
2618
+
2619
+ # Spec schema: `IncidentArtifact`.
2620
+ type incident_artifact = {
2621
+ "id" => String,
2622
+ "kind" => "freeze" | "moment" | "slack" | "status-page",
2623
+ "status" => "created" | "failed" | "closed" | "close_failed",
2624
+ "label" => String | nil,
2625
+ "refId" => String | String | nil,
2626
+ "refSecondary" => String | nil,
2627
+ "error" => String | nil,
2628
+ "request" => incident_artifact_request,
2629
+ "createdAt" => String,
2630
+ "updatedAt" => String
2631
+ }
2632
+
2633
+ # What the declaration asked for, recorded so a retry asks for the same thing.
2634
+ # Present on the status-page artefact, where a retry that forgot the
2635
+ # operator's chosen components would publish the outage against the whole
2636
+ # page.
2637
+ #
2638
+ # Spec schema: `IncidentArtifactRequest`.
2639
+ type incident_artifact_request = { ?"statusPageId" => String | nil, ?"componentIds" => Array[String] } | nil
2640
+
2641
+ # Spec schema: `IncidentDeclare`.
2642
+ type incident_declare = {
2643
+ "title" => String,
2644
+ ?"severity" => "sev1" | "sev2" | "sev3" | "sev4",
2645
+ ?"summary" => String | nil,
2646
+ ?"startedAt" => String,
2647
+ ?"affectedResourceIds" => Array[String],
2648
+ ?"affectedAccountIds" => Array[String],
2649
+ ?"actions" => incident_actions
2650
+ }
2651
+
2652
+ # Spec schema: `IncidentDetail`.
2653
+ type incident_detail = { "incident" => incident, "notes" => Array[incident_note] }
2654
+
2655
+ # Spec schema: `IncidentList`.
2656
+ type incident_list = { "incidents" => Array[incident] }
2657
+
2658
+ # Spec schema: `IncidentNote`.
2659
+ type incident_note = {
2660
+ "id" => String,
2661
+ "body" => String,
2662
+ "authorUserId" => String | nil,
2663
+ "authorName" => String | nil,
2664
+ "occurredAt" => String,
2665
+ "createdAt" => String
2666
+ }
2667
+
2668
+ # Spec schema: `IncidentNoteCreate`.
2669
+ type incident_note_create = { "body" => String, ?"occurredAt" => String }
2670
+
2671
+ # Spec schema: `IncidentPatch`.
2672
+ type incident_patch = {
2673
+ ?"title" => String,
2674
+ ?"severity" => "sev1" | "sev2" | "sev3" | "sev4",
2675
+ ?"status" => "open" | "mitigated" | "resolved",
2676
+ ?"summary" => String | nil,
2677
+ ?"affectedResourceIds" => Array[String],
2678
+ ?"affectedAccountIds" => Array[String],
2679
+ ?"issueUrl" => String | nil
2680
+ }
2681
+
2682
+ # Spec schema: `IncidentPostmortem`.
2683
+ type incident_postmortem = { "markdown" => String, "filename" => String }
2684
+
2685
+ # Spec schema: `IncidentTimeline`.
2686
+ type incident_timeline = {
2687
+ "incidentId" => String,
2688
+ "from" => String,
2689
+ "to" => String,
2690
+ "generatedAt" => String,
2691
+ "entries" => Array[incident_timeline_entry],
2692
+ "feeds" => Array[{ "feed" => String, "status" => "ok" | "omitted" | "error", ?"error" => String | nil }],
2693
+ "truncated" => bool
2694
+ }
2695
+
2696
+ # Spec schema: `IncidentTimelineEntry`.
2697
+ type incident_timeline_entry = {
2698
+ "id" => String,
2699
+ "source" => "incident" | "note" | "artifact" | "moment" | "probe" | "metric-alert",
2700
+ "kind" => String,
2701
+ "at" => String,
2702
+ "title" => String,
2703
+ ?"detail" => String | nil,
2704
+ "severity" => "info" | "warning" | "critical",
2705
+ ?"authorName" => String | nil,
2706
+ ?"resourceId" => String | nil,
2707
+ ?"resourceName" => String | nil,
2708
+ ?"pluginId" => String | nil,
2709
+ ?"accountId" => String | nil,
2710
+ ?"link" => {
2711
+ "kind" => "resource"
2712
+ | "changes"
2713
+ | "provider-incident"
2714
+ | "costs"
2715
+ | "workflow-run"
2716
+ | "deployment"
2717
+ | "audit"
2718
+ | "freeze"
2719
+ | "expiring"
2720
+ | "probe"
2721
+ | "metric-alert"
2722
+ | "incident",
2723
+ ?"id" => String | nil,
2724
+ ?"parentId" => String | nil,
2725
+ ?"url" => String | nil
2726
+ }
2727
+ | nil
2728
+ }
2729
+
2579
2730
  # Spec schema: `Invitation`.
2580
2731
  type invitation = {
2581
2732
  "id" => String,
@@ -3785,6 +3936,8 @@ module Infrawrench
3785
3936
  | "freezes:read"
3786
3937
  | "freezes:write"
3787
3938
  | "freezes:override"
3939
+ | "incidents:read"
3940
+ | "incidents:write"
3788
3941
  | "tag-policy:override"
3789
3942
  | "config:read"
3790
3943
  | "config:write"
@@ -5061,6 +5214,15 @@ module Infrawrench
5061
5214
  "cols" => Integer,
5062
5215
  "rows" => Integer,
5063
5216
  "hasInput" => bool,
5217
+ ?"sharedConsoleId" => String | nil,
5218
+ ?"participants" => Array[{
5219
+ "userId" => String | nil,
5220
+ "userName" => String | nil,
5221
+ "role" => "observer" | "driver",
5222
+ "joinedAt" => String,
5223
+ "leftAt" => String | nil
5224
+ }]
5225
+ | nil,
5064
5226
  "status" => "recording" | "complete" | "truncated" | "abandoned",
5065
5227
  "outputBytes" => Integer,
5066
5228
  "eventCount" => Integer,
@@ -5129,6 +5291,69 @@ module Infrawrench
5129
5291
  ?"sshUsername" => String
5130
5292
  }
5131
5293
 
5294
+ # Spec schema: `SharedConsole`.
5295
+ type shared_console = {
5296
+ "id" => String,
5297
+ "routingKey" => String,
5298
+ "ownerUserId" => String | nil,
5299
+ "ownerName" => String | nil,
5300
+ "accountId" => String | nil,
5301
+ "resourceId" => String | nil,
5302
+ "host" => String,
5303
+ "port" => Integer,
5304
+ "username" => String,
5305
+ "allowHandover" => bool,
5306
+ "status" => "active" | "revoked" | "ended",
5307
+ "inviteTokenPrefix" => String | nil,
5308
+ "inviteExpiresAt" => String | nil,
5309
+ "inviteConsumedAt" => String | nil,
5310
+ "recordingId" => String | nil,
5311
+ "ptyCols" => Integer,
5312
+ "ptyRows" => Integer,
5313
+ "createdAt" => String
5314
+ }
5315
+
5316
+ # Spec schema: `SharedConsoleCreated`.
5317
+ type shared_console_created = {
5318
+ "share" => shared_console,
5319
+ "participants" => Array[shared_console_participant],
5320
+ "inviteToken" => String
5321
+ }
5322
+
5323
+ # Spec schema: `SharedConsoleInvitePreview`.
5324
+ type shared_console_invite_preview = {
5325
+ "share" => shared_console,
5326
+ "joinable" => bool,
5327
+ ?"rejoin" => bool,
5328
+ ?"error" => String,
5329
+ ?"code" => String
5330
+ }
5331
+
5332
+ # Spec schema: `SharedConsoleJoined`.
5333
+ type shared_console_joined = {
5334
+ "share" => shared_console,
5335
+ "participants" => Array[shared_console_participant],
5336
+ "you" => shared_console_participant,
5337
+ "routingKey" => String
5338
+ }
5339
+
5340
+ # Spec schema: `SharedConsoleParticipant`.
5341
+ type shared_console_participant = {
5342
+ "id" => String,
5343
+ "userId" => String,
5344
+ "userName" => String | nil,
5345
+ "role" => "observer" | "driver",
5346
+ "status" => "joined" | "left" | "removed",
5347
+ "driverRequestedAt" => String | nil,
5348
+ "joinedAt" => String
5349
+ }
5350
+
5351
+ # Spec schema: `SharedConsoleState`.
5352
+ type shared_console_state = { "share" => shared_console, "participants" => Array[shared_console_participant] }
5353
+
5354
+ # Spec schema: `SharedConsoleSummary`.
5355
+ type shared_console_summary = shared_console & { "participants" => Array[shared_console_participant] }
5356
+
5132
5357
  # Spec schema: `ShowbackReport`.
5133
5358
  type showback_report = {
5134
5359
  "from" => String,
@@ -5573,6 +5798,7 @@ module Infrawrench
5573
5798
  | "metric-alerts"
5574
5799
  | "probes"
5575
5800
  | "quotas"
5801
+ | "incidents"
5576
5802
  | "workflows"
5577
5803
  | "deployments"
5578
5804
  | "settings"
@@ -6302,6 +6528,30 @@ module Infrawrench
6302
6528
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> expiry_list_response
6303
6529
  end
6304
6530
 
6531
+ class IncidentsGetNamespace
6532
+ def initialize: (Transport) -> void
6533
+ def get: (?org_id: String?, ?status: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_list
6534
+ def get_org_org_id_incidents_incident_id: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_detail
6535
+ end
6536
+
6537
+ class IncidentsNotesNamespace
6538
+ def initialize: (Transport) -> void
6539
+ def create: (incident_id: String, ?org_id: String?, ?body: incident_note_create?, ?request_options: Hash[Symbol, untyped]?) -> incident_note
6540
+ def delete: (incident_id: String, note_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
6541
+ end
6542
+
6543
+ class IncidentsNamespace
6544
+ attr_reader get: IncidentsGetNamespace
6545
+ attr_reader notes: IncidentsNotesNamespace
6546
+ def initialize: (Transport) -> void
6547
+ def create: (?org_id: String?, ?body: incident_declare?, ?request_options: Hash[Symbol, untyped]?) -> incident
6548
+ def delete: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
6549
+ def postmortem: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_postmortem
6550
+ def retry_artifacts: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident
6551
+ def timeline: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_timeline
6552
+ def update: (incident_id: String, ?org_id: String?, ?body: incident_patch?, ?request_options: Hash[Symbol, untyped]?) -> incident
6553
+ end
6554
+
6305
6555
  class InvitationsByTokenNamespace
6306
6556
  def initialize: (Transport) -> void
6307
6557
  def get: (token: String, ?request_options: Hash[Symbol, untyped]?) -> invitation_detail
@@ -6624,6 +6874,32 @@ module Infrawrench
6624
6874
  def upload: (body: sftp_upload_form, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
6625
6875
  end
6626
6876
 
6877
+ class SharedConsolesInvitesNamespace
6878
+ def initialize: (Transport) -> void
6879
+ def create: (console_id: String, ?org_id: String?, ?body: { ?"inviteTtlMinutes" => Integer }?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_created
6880
+ def delete: (console_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_state
6881
+ def get: (token: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_invite_preview
6882
+ end
6883
+
6884
+ class SharedConsolesParticipantsNamespace
6885
+ def initialize: (Transport) -> void
6886
+ def delete: (console_id: String, participant_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_state
6887
+ end
6888
+
6889
+ class SharedConsolesNamespace
6890
+ attr_reader invites: SharedConsolesInvitesNamespace
6891
+ attr_reader participants: SharedConsolesParticipantsNamespace
6892
+ def initialize: (Transport) -> void
6893
+ def create: (?org_id: String?, ?body: create_shared_console?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_created
6894
+ def delete: (console_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
6895
+ def get: (console_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_state
6896
+ def handover: (console_id: String, ?org_id: String?, ?body: { "participantId" => String }?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_state
6897
+ def join: (console_id: String, ?org_id: String?, ?body: { "token" => String }?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_joined
6898
+ def leave: (console_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_state
6899
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[shared_console_summary]
6900
+ def request_driver: (console_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> shared_console_state
6901
+ end
6902
+
6627
6903
  class SlackChannelsNamespace
6628
6904
  def initialize: (Transport) -> void
6629
6905
  def create: (?org_id: String?, ?body: slack_channel_create?, ?request_options: Hash[Symbol, untyped]?) -> slack_channel
@@ -6813,6 +7089,7 @@ module Infrawrench
6813
7089
  attr_reader docker: DockerNamespace
6814
7090
  attr_reader environment_diff: EnvironmentDiffNamespace
6815
7091
  attr_reader expiring: ExpiringNamespace
7092
+ attr_reader incidents: IncidentsNamespace
6816
7093
  attr_reader invitations: InvitationsNamespace
6817
7094
  attr_reader invoices: InvoicesNamespace
6818
7095
  attr_reader jira: JiraNamespace
@@ -6840,6 +7117,7 @@ module Infrawrench
6840
7117
  attr_reader search: SearchNamespace
6841
7118
  attr_reader session_recordings: SessionRecordingsNamespace
6842
7119
  attr_reader sftp: SftpNamespace
7120
+ attr_reader shared_consoles: SharedConsolesNamespace
6843
7121
  attr_reader slack: SlackNamespace
6844
7122
  attr_reader sql: SqlNamespace
6845
7123
  attr_reader ssh_fanout: SshFanoutNamespace
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infrawrench-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.0
4
+ version: 1.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infrawrench LLC
@@ -9,9 +9,9 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2026-08-11 00:00:00.000000000 Z
12
+ date: 2026-08-12 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v1.13.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.15.0). Covers the published
15
15
  API surface only — operations marked x-internal in the spec are not generated. No
16
16
  runtime dependencies.
17
17
  email:
@@ -58,5 +58,5 @@ requirements: []
58
58
  rubygems_version: 3.5.22
59
59
  signing_key:
60
60
  specification_version: 4
61
- summary: Generated Ruby client for the Infrawrench API (v1.13.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.15.0).
62
62
  test_files: []