infrawrench-sdk 1.14.0 → 1.16.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: c947d74d37069573fb9534ab1665a9ebcef67ad271943d690f1474ef27eb1913
4
- data.tar.gz: 7b44c470da3df84fe8d0dbb39a253a0c30ab8a9bfb980bd2c4b1958c370b7b63
3
+ metadata.gz: ed2bbb041647f781da0b26a0d376c2cedcf6a4904aa085405ee8c7bd5d477de9
4
+ data.tar.gz: fc6adc2c9b7edd3188848c118b52f322ce2e54bd1d613fc927cc718401759df8
5
5
  SHA512:
6
- metadata.gz: 2e314cc1ca73c8c0603ab5109e692215734058d3d5b412abe75e43debcc22952443e76820c0fdb90dcd9d66fe63a02c42e52496049b3d148a74e0d8161ad180c
7
- data.tar.gz: '087ba4da5d3ab0ec9cf77f7aebdef7ee8af0dbc0911ea86b1ffbf0692e481107bf7061de81b627bd606ab56334470c6603e04fe4e6e3d0f0358f1eac8a8c3347'
6
+ metadata.gz: cfa7d9ba7d12d044aca5221751c60b316d4ac51133f6c17967417deaea411f688dafbce45af8c18836fd421cf9f1469b1972eb068c5fb085501efb3f7d14ff62
7
+ data.tar.gz: 1eb649eb2e24e58172ec86e6b84a4d90c2c8739bb7d01804defc426845bc566261a69f241f9b6af1cc7db1ea4ee888274ff2415a645c50efcc441d068962cc9d
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.14.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.16.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
- 573 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 596 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.14.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.16.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.14.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.16.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.14.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.14.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.16.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.16.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.14.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.16.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.14.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.16.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -246,6 +246,173 @@ module Infrawrench
246
246
  end
247
247
  end
248
248
 
249
+ # `client.access_review.dismissals`
250
+ class AccessReviewDismissalsNamespace
251
+ # @api private
252
+ # @param transport [Transport]
253
+ def initialize(transport)
254
+ @transport = transport
255
+ end
256
+
257
+ # Dismiss an access review finding
258
+ #
259
+ # Accept a finding — that break-glass role really is meant to be admin, that
260
+ # shared key really is rotated out of band. The finding leaves `findings`
261
+ # and stops feeding the security alerts, but the rule keeps being evaluated
262
+ # and the finding is reported back under `dismissed` for as long as it still
263
+ # matches. The principal itself stays in `principals` either way.
264
+ # Idempotent: dismissing an already-dismissed finding rewrites the note and
265
+ # the author.
266
+ #
267
+ # _Requires permission: `resources:write`._
268
+ #
269
+ # POST /api/org/{orgId}/access-review/dismissals
270
+ #
271
+ # Raises on 400: Bad request
272
+ #
273
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
274
+ # constructed with.
275
+ # @param body [Hash, nil] Request body, shaped as `AccessReviewDismissalCreate`.
276
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
277
+ # @return [Hash] Parsed JSON, shaped as `AccessReviewDismissal` — see
278
+ # `sig/infrawrench/sdk.rbs`.
279
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
280
+ def create(org_id: nil, body: nil, request_options: nil)
281
+ @transport.request(
282
+ http_method: "POST",
283
+ path: "/api/org/{orgId}/access-review/dismissals",
284
+ path_params: { "orgId" => org_id },
285
+ body: body,
286
+ request_options: request_options
287
+ )
288
+ end
289
+
290
+ # Restore a dismissed access review finding
291
+ #
292
+ # Undo a dismissal, putting the finding back on the list and back into the
293
+ # security alerts. The finding is identified by query parameters rather than
294
+ # path segments because resource ids are provider-native and routinely
295
+ # contain slashes.
296
+ #
297
+ # _Requires permission: `resources:write`._
298
+ #
299
+ # DELETE /api/org/{orgId}/access-review/dismissals
300
+ #
301
+ # Raises on 400: Bad request
302
+ #
303
+ # Raises on 404: Not found
304
+ #
305
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
306
+ # constructed with.
307
+ # @param resource_id [String] Infrawrench resource id the finding is on.
308
+ # @param rule_id [String] Which rule was raised. Half of a dismissal's key, alongside the
309
+ # resource id. The `access-review:` prefix is reserved so these can share the posture
310
+ # dismissal store without colliding with plugin-declared posture rule ids.
311
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
312
+ # @return [nil] This endpoint returns no content.
313
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
314
+ def delete(resource_id:, rule_id:, org_id: nil, request_options: nil)
315
+ @transport.request(
316
+ http_method: "DELETE",
317
+ path: "/api/org/{orgId}/access-review/dismissals",
318
+ path_params: { "orgId" => org_id },
319
+ query: { "resourceId" => resource_id, "ruleId" => rule_id },
320
+ accept: :empty,
321
+ request_options: request_options
322
+ )
323
+ end
324
+ end
325
+
326
+ # `client.access_review`
327
+ class AccessReviewNamespace
328
+ # @return [AccessReviewDismissalsNamespace] `client.access_review.dismissals`
329
+ attr_reader :dismissals
330
+
331
+ # @api private
332
+ # @param transport [Transport]
333
+ def initialize(transport)
334
+ @transport = transport
335
+ @dismissals = AccessReviewDismissalsNamespace.new(@transport)
336
+ end
337
+
338
+ # Export the access review as compliance evidence
339
+ #
340
+ # The same review as a downloadable file, one row per finding. `format=csv`
341
+ # (the default) returns RFC 4180 CSV with every cell quoted and spreadsheet
342
+ # formulas neutralised; `format=json` returns the full response body
343
+ # pretty-printed.
344
+ #
345
+ # Dismissed findings are included and labelled in both formats, with the
346
+ # note and the person who accepted them: an evidence pack answers what you
347
+ # found *and* what you decided. Exports are recorded in the audit log.
348
+ #
349
+ # _Requires permission: `resources:read`._
350
+ #
351
+ # GET /api/org/{orgId}/access-review/export
352
+ #
353
+ # Raises on 400: Bad request
354
+ #
355
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
356
+ # constructed with.
357
+ # @param format [String, nil] Defaults to "csv".
358
+ # @param stale_days [Integer, nil] Staleness window in days. Defaults to 90.
359
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
360
+ # @return [Hash] Parsed JSON, shaped as `AccessReviewResponse` — see
361
+ # `sig/infrawrench/sdk.rbs`.
362
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
363
+ def export(org_id: nil, format: nil, stale_days: nil, request_options: nil)
364
+ @transport.request(
365
+ http_method: "GET",
366
+ path: "/api/org/{orgId}/access-review/export",
367
+ path_params: { "orgId" => org_id },
368
+ query: { "format" => format, "staleDays" => stale_days },
369
+ request_options: request_options
370
+ )
371
+ end
372
+
373
+ # Review the principals inside your connected clouds
374
+ #
375
+ # Every IAM user and role, service account, app registration, group, role
376
+ # binding and long-lived API key your connected accounts have synced, with
377
+ # the findings that have evidence against them: unused beyond the staleness
378
+ # window, holding administrative or wildcard permissions, past the rotation
379
+ # budget their plugin declares, carrying no recorded owner, or signing in
380
+ # without a second factor.
381
+ #
382
+ # This is about principals in **your** clouds — it is neither your
383
+ # Infrawrench team's roles (`/team`) nor the credentials Infrawrench stores
384
+ # for you (`/credential-hygiene`).
385
+ #
386
+ # No provider API calls are made: everything is computed from already-synced
387
+ # fields, so a principal whose provider does not report last use is reported
388
+ # with `activity: "unknown"` and is never called stale. Findings the
389
+ # organization has dismissed are reported separately under `dismissed` and
390
+ # are excluded from `findings`, `counts`, `byRule` and the security alerts.
391
+ #
392
+ # _Requires permission: `resources:read`._
393
+ #
394
+ # GET /api/org/{orgId}/access-review
395
+ #
396
+ # Raises on 400: Bad request
397
+ #
398
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
399
+ # constructed with.
400
+ # @param stale_days [Integer, nil] Staleness window in days. Defaults to 90.
401
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
402
+ # @return [Hash] Parsed JSON, shaped as `AccessReviewResponse` — see
403
+ # `sig/infrawrench/sdk.rbs`.
404
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
405
+ def get(org_id: nil, stale_days: nil, request_options: nil)
406
+ @transport.request(
407
+ http_method: "GET",
408
+ path: "/api/org/{orgId}/access-review",
409
+ path_params: { "orgId" => org_id },
410
+ query: { "staleDays" => stale_days },
411
+ request_options: request_options
412
+ )
413
+ end
414
+ end
415
+
249
416
  # `client.accounts.credentials`
250
417
  class AccountsCredentialsNamespace
251
418
  # @api private
@@ -6395,6 +6562,334 @@ module Infrawrench
6395
6562
  end
6396
6563
  end
6397
6564
 
6565
+ # `client.incidents.get`
6566
+ class IncidentsGetNamespace
6567
+ # @api private
6568
+ # @param transport [Transport]
6569
+ def initialize(transport)
6570
+ @transport = transport
6571
+ end
6572
+
6573
+ # List declared incidents
6574
+ #
6575
+ # Every incident the organization has declared, newest first, each with the
6576
+ # artefacts its declaration created — including the ones that failed.
6577
+ #
6578
+ # _Requires permission: `incidents:read`._
6579
+ #
6580
+ # GET /api/org/{orgId}/incidents
6581
+ #
6582
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6583
+ # constructed with.
6584
+ # @param status [String, nil] `open`, `mitigated`, `resolved`, or `all` (the default).
6585
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6586
+ # @return [Hash] Parsed JSON, shaped as `IncidentList` — see `sig/infrawrench/sdk.rbs`.
6587
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6588
+ def get(org_id: nil, status: nil, request_options: nil)
6589
+ @transport.request(
6590
+ http_method: "GET",
6591
+ path: "/api/org/{orgId}/incidents",
6592
+ path_params: { "orgId" => org_id },
6593
+ query: { "status" => status },
6594
+ request_options: request_options
6595
+ )
6596
+ end
6597
+
6598
+ # Read one incident
6599
+ #
6600
+ # The incident with its artefacts and its operator notes.
6601
+ #
6602
+ # _Requires permission: `incidents:read`._
6603
+ #
6604
+ # GET /api/org/{orgId}/incidents/{incidentId}
6605
+ #
6606
+ # Raises on 404: Not found
6607
+ #
6608
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6609
+ # constructed with.
6610
+ # @param incident_id [String]
6611
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6612
+ # @return [Hash] Parsed JSON, shaped as `IncidentDetail` — see `sig/infrawrench/sdk.rbs`.
6613
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6614
+ def get_org_org_id_incidents_incident_id(incident_id:, org_id: nil, request_options: nil)
6615
+ @transport.request(
6616
+ http_method: "GET",
6617
+ path: "/api/org/{orgId}/incidents/{incidentId}",
6618
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6619
+ request_options: request_options
6620
+ )
6621
+ end
6622
+ end
6623
+
6624
+ # `client.incidents.notes`
6625
+ class IncidentsNotesNamespace
6626
+ # @api private
6627
+ # @param transport [Transport]
6628
+ def initialize(transport)
6629
+ @transport = transport
6630
+ end
6631
+
6632
+ # Add an operator note
6633
+ #
6634
+ # The running commentary no join can reconstruct. `occurredAt` may be
6635
+ # backdated so a note typed at 04:00 lands on the timeline where it belongs.
6636
+ #
6637
+ # _Requires permission: `incidents:write`._
6638
+ #
6639
+ # POST /api/org/{orgId}/incidents/{incidentId}/notes
6640
+ #
6641
+ # Raises on 400: Bad request
6642
+ #
6643
+ # Raises on 404: Not found
6644
+ #
6645
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6646
+ # constructed with.
6647
+ # @param incident_id [String]
6648
+ # @param body [Hash, nil] Request body, shaped as `IncidentNoteCreate`.
6649
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6650
+ # @return [Hash] Parsed JSON, shaped as `IncidentNote` — see `sig/infrawrench/sdk.rbs`.
6651
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6652
+ def create(incident_id:, org_id: nil, body: nil, request_options: nil)
6653
+ @transport.request(
6654
+ http_method: "POST",
6655
+ path: "/api/org/{orgId}/incidents/{incidentId}/notes",
6656
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6657
+ body: body,
6658
+ request_options: request_options
6659
+ )
6660
+ end
6661
+
6662
+ # Delete an operator note
6663
+ #
6664
+ # _Requires permission: `incidents:write`._
6665
+ #
6666
+ # DELETE /api/org/{orgId}/incidents/{incidentId}/notes/{noteId}
6667
+ #
6668
+ # Raises on 404: Not found
6669
+ #
6670
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6671
+ # constructed with.
6672
+ # @param incident_id [String]
6673
+ # @param note_id [String]
6674
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6675
+ # @return [nil] This endpoint returns no content.
6676
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6677
+ def delete(incident_id:, note_id:, org_id: nil, request_options: nil)
6678
+ @transport.request(
6679
+ http_method: "DELETE",
6680
+ path: "/api/org/{orgId}/incidents/{incidentId}/notes/{noteId}",
6681
+ path_params: { "orgId" => org_id, "incidentId" => incident_id, "noteId" => note_id },
6682
+ accept: :empty,
6683
+ request_options: request_options
6684
+ )
6685
+ end
6686
+ end
6687
+
6688
+ # `client.incidents`
6689
+ class IncidentsNamespace
6690
+ # @return [IncidentsGetNamespace] `client.incidents.get`
6691
+ attr_reader :get
6692
+ # @return [IncidentsNotesNamespace] `client.incidents.notes`
6693
+ attr_reader :notes
6694
+
6695
+ # @api private
6696
+ # @param transport [Transport]
6697
+ def initialize(transport)
6698
+ @transport = transport
6699
+ @get = IncidentsGetNamespace.new(@transport)
6700
+ @notes = IncidentsNotesNamespace.new(@transport)
6701
+ end
6702
+
6703
+ # Declare an incident
6704
+ #
6705
+ # Record the incident and perform the opted-in side effects. The incident
6706
+ # row is written first and alone: a 201 means it exists, and the `artifacts`
6707
+ # array on the response says what else happened. No side effect can lose the
6708
+ # declaration, and none is swallowed. Audit-logged.
6709
+ #
6710
+ # _Requires permission: `incidents:write`._
6711
+ #
6712
+ # POST /api/org/{orgId}/incidents
6713
+ #
6714
+ # Raises on 400: Bad request
6715
+ #
6716
+ # Raises on 403: Forbidden
6717
+ #
6718
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6719
+ # constructed with.
6720
+ # @param body [Hash, nil] Request body, shaped as `IncidentDeclare`.
6721
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6722
+ # @return [Hash] Parsed JSON, shaped as `Incident` — see `sig/infrawrench/sdk.rbs`.
6723
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6724
+ def create(org_id: nil, body: nil, request_options: nil)
6725
+ @transport.request(
6726
+ http_method: "POST",
6727
+ path: "/api/org/{orgId}/incidents",
6728
+ path_params: { "orgId" => org_id },
6729
+ body: body,
6730
+ request_options: request_options
6731
+ )
6732
+ end
6733
+
6734
+ # Delete an incident
6735
+ #
6736
+ # Removes the incident, its notes and its artefact records. It does not lift
6737
+ # a freeze or close a status-page update — resolve for that; deleting is for
6738
+ # a mis-declaration. Audit-logged.
6739
+ #
6740
+ # _Requires permission: `incidents:write`._
6741
+ #
6742
+ # DELETE /api/org/{orgId}/incidents/{incidentId}
6743
+ #
6744
+ # Raises on 404: Not found
6745
+ #
6746
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6747
+ # constructed with.
6748
+ # @param incident_id [String]
6749
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6750
+ # @return [nil] This endpoint returns no content.
6751
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6752
+ def delete(incident_id:, org_id: nil, request_options: nil)
6753
+ @transport.request(
6754
+ http_method: "DELETE",
6755
+ path: "/api/org/{orgId}/incidents/{incidentId}",
6756
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6757
+ accept: :empty,
6758
+ request_options: request_options
6759
+ )
6760
+ end
6761
+
6762
+ # Export a pre-filled postmortem
6763
+ #
6764
+ # Markdown with the timeline, the affected resources, the duration, the time
6765
+ # to mitigate and the notes already filled in. The analysis headings —
6766
+ # impact, root cause, action items — are deliberately left blank: a
6767
+ # generated document that guesses at a root cause is worse than one that
6768
+ # leaves a heading.
6769
+ #
6770
+ # _Requires permission: `incidents:read`._
6771
+ #
6772
+ # GET /api/org/{orgId}/incidents/{incidentId}/postmortem
6773
+ #
6774
+ # Raises on 404: Not found
6775
+ #
6776
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6777
+ # constructed with.
6778
+ # @param incident_id [String]
6779
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6780
+ # @return [Hash] Parsed JSON, shaped as `IncidentPostmortem` — see
6781
+ # `sig/infrawrench/sdk.rbs`.
6782
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6783
+ def postmortem(incident_id:, org_id: nil, request_options: nil)
6784
+ @transport.request(
6785
+ http_method: "GET",
6786
+ path: "/api/org/{orgId}/incidents/{incidentId}/postmortem",
6787
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6788
+ request_options: request_options
6789
+ )
6790
+ end
6791
+
6792
+ # Retry the artefacts that failed
6793
+ #
6794
+ # Re-runs only the side effects whose artefact is in a failure state,
6795
+ # replacing each failure rather than queueing a second attempt beside it. A
6796
+ # `failed` artefact is **re-created**; a `close_failed` one is **re-closed**
6797
+ # — re-creating the latter would open a second change freeze or post a
6798
+ # duplicate public notice. A status-page retry reuses the components
6799
+ # recorded on the artefact's `request`, so the announcement keeps its
6800
+ # original scope. Its own endpoint rather than a flag on PATCH, because it
6801
+ # writes into three external systems. Audit-logged.
6802
+ #
6803
+ # _Requires permission: `incidents:write`._
6804
+ #
6805
+ # POST /api/org/{orgId}/incidents/{incidentId}/retry-artifacts
6806
+ #
6807
+ # Raises on 404: Not found
6808
+ #
6809
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6810
+ # constructed with.
6811
+ # @param incident_id [String]
6812
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6813
+ # @return [Hash] Parsed JSON, shaped as `Incident` — see `sig/infrawrench/sdk.rbs`.
6814
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6815
+ def retry_artifacts(incident_id:, org_id: nil, request_options: nil)
6816
+ @transport.request(
6817
+ http_method: "POST",
6818
+ path: "/api/org/{orgId}/incidents/{incidentId}/retry-artifacts",
6819
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6820
+ request_options: request_options
6821
+ )
6822
+ end
6823
+
6824
+ # Assemble the incident's timeline
6825
+ #
6826
+ # Merged on read from what is already recorded between the incident's start
6827
+ # and its resolution: resource changes, deployments, cost anomalies,
6828
+ # provider status incidents, audit entries, change freezes and workflow runs
6829
+ # (all via the same union the Moment screen uses), plus probe state
6830
+ # transitions, metric-alert firings, the incident's own life events, its
6831
+ # artefacts and its operator notes. Nothing is copied — a correction
6832
+ # upstream shows up here on the next read.
6833
+ #
6834
+ # Probe transitions are an approximation: `synthetic_probes` keeps only a
6835
+ # single `lastStateChangeAt`, so a probe that flapped twice inside the
6836
+ # window contributes its most recent flip and no more.
6837
+ #
6838
+ # _Requires permission: `incidents:read`._
6839
+ #
6840
+ # GET /api/org/{orgId}/incidents/{incidentId}/timeline
6841
+ #
6842
+ # Raises on 404: Not found
6843
+ #
6844
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6845
+ # constructed with.
6846
+ # @param incident_id [String]
6847
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6848
+ # @return [Hash] Parsed JSON, shaped as `IncidentTimeline` — see `sig/infrawrench/sdk.rbs`.
6849
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6850
+ def timeline(incident_id:, org_id: nil, request_options: nil)
6851
+ @transport.request(
6852
+ http_method: "GET",
6853
+ path: "/api/org/{orgId}/incidents/{incidentId}/timeline",
6854
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6855
+ request_options: request_options
6856
+ )
6857
+ end
6858
+
6859
+ # Edit or transition an incident
6860
+ #
6861
+ # Omitted fields keep their value. Setting `status` stamps the matching
6862
+ # timestamp, and resolving undoes exactly what this incident created — the
6863
+ # freeze whose id is on its own artefact, not whatever freeze happens to be
6864
+ # in effect. Resolving an incident that was never marked mitigated
6865
+ # back-fills `mitigatedAt` from `resolvedAt`. Audit-logged.
6866
+ #
6867
+ # _Requires permission: `incidents:write`._
6868
+ #
6869
+ # PATCH /api/org/{orgId}/incidents/{incidentId}
6870
+ #
6871
+ # Raises on 400: Bad request
6872
+ #
6873
+ # Raises on 404: Not found
6874
+ #
6875
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6876
+ # constructed with.
6877
+ # @param incident_id [String]
6878
+ # @param body [Hash, nil] Request body, shaped as `IncidentPatch`.
6879
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6880
+ # @return [Hash] Parsed JSON, shaped as `Incident` — see `sig/infrawrench/sdk.rbs`.
6881
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6882
+ def update(incident_id:, org_id: nil, body: nil, request_options: nil)
6883
+ @transport.request(
6884
+ http_method: "PATCH",
6885
+ path: "/api/org/{orgId}/incidents/{incidentId}",
6886
+ path_params: { "orgId" => org_id, "incidentId" => incident_id },
6887
+ body: body,
6888
+ request_options: request_options
6889
+ )
6890
+ end
6891
+ end
6892
+
6398
6893
  # `client.invitations.by_token`
6399
6894
  class InvitationsByTokenNamespace
6400
6895
  # @api private
@@ -13224,6 +13719,8 @@ module Infrawrench
13224
13719
  attr_reader :transport
13225
13720
  # @return [AccessRequestsNamespace] `client.access_requests`
13226
13721
  attr_reader :access_requests
13722
+ # @return [AccessReviewNamespace] `client.access_review`
13723
+ attr_reader :access_review
13227
13724
  # @return [AccountsNamespace] `client.accounts`
13228
13725
  attr_reader :accounts
13229
13726
  # @return [AgentsNamespace] `client.agents`
@@ -13304,6 +13801,8 @@ module Infrawrench
13304
13801
  attr_reader :environment_diff
13305
13802
  # @return [ExpiringNamespace] `client.expiring`
13306
13803
  attr_reader :expiring
13804
+ # @return [IncidentsNamespace] `client.incidents`
13805
+ attr_reader :incidents
13307
13806
  # @return [InvitationsNamespace] `client.invitations`
13308
13807
  attr_reader :invitations
13309
13808
  # @return [InvoicesNamespace] `client.invoices`
@@ -13393,6 +13892,7 @@ module Infrawrench
13393
13892
  def initialize(**options)
13394
13893
  @transport = Transport.new(**options)
13395
13894
  @access_requests = AccessRequestsNamespace.new(@transport)
13895
+ @access_review = AccessReviewNamespace.new(@transport)
13396
13896
  @accounts = AccountsNamespace.new(@transport)
13397
13897
  @agents = AgentsNamespace.new(@transport)
13398
13898
  @alert_rules = AlertRulesNamespace.new(@transport)
@@ -13433,6 +13933,7 @@ module Infrawrench
13433
13933
  @docker = DockerNamespace.new(@transport)
13434
13934
  @environment_diff = EnvironmentDiffNamespace.new(@transport)
13435
13935
  @expiring = ExpiringNamespace.new(@transport)
13936
+ @incidents = IncidentsNamespace.new(@transport)
13436
13937
  @invitations = InvitationsNamespace.new(@transport)
13437
13938
  @invoices = InvoicesNamespace.new(@transport)
13438
13939
  @jira = JiraNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.14.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.16.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.14.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.16.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.14.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.16.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.14.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.16.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.14.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.16.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.14.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.16.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.14.0"
18
+ VERSION = "1.16.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.14.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.16.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.14.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.16.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.14.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.16.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.14.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.16.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -104,6 +104,57 @@ module Infrawrench
104
104
  ?"missing" => Array[String]
105
105
  }
106
106
 
107
+ # Spec schema: `AccessFinding`.
108
+ type access_finding = {
109
+ "resourceId" => String,
110
+ "ruleId" => "access-review:stale-principal"
111
+ | "access-review:admin-principal"
112
+ | "access-review:key-past-rotation"
113
+ | "access-review:no-recorded-owner"
114
+ | "access-review:no-mfa",
115
+ "title" => String,
116
+ "severity" => "critical" | "high" | "medium" | "low",
117
+ "reason" => String,
118
+ "principal" => access_principal
119
+ }
120
+
121
+ # Spec schema: `AccessPrincipal`.
122
+ type access_principal = {
123
+ "resourceId" => String,
124
+ "pluginId" => plugin_id,
125
+ "pluginName" => String,
126
+ "resourceTypeId" => String,
127
+ "resourceTypeName" => String,
128
+ "accountId" => String,
129
+ "accountName" => String,
130
+ "displayName" => String,
131
+ "externalId" => String | nil,
132
+ "role" => "user" | "group" | "role" | "service-account" | "key" | "binding",
133
+ "lastUsedAt" => String | nil,
134
+ "daysSinceLastUsed" => Integer | nil,
135
+ "activity" => "active" | "stale" | "unknown",
136
+ "createdAt" => String | nil,
137
+ "ageDays" => Integer | nil,
138
+ "admin" => bool | nil,
139
+ "mfa" => bool | nil,
140
+ "parent" => String | nil,
141
+ "owner" => access_principal_owner,
142
+ "revokeActionId" => String | nil
143
+ }
144
+
145
+ # Who owns the resource, from the resource-ownership record. Null when nobody
146
+ # is named.
147
+ #
148
+ # Spec schema: `AccessPrincipalOwner`.
149
+ type access_principal_owner = {
150
+ "userId" => String | nil,
151
+ "displayName" => String,
152
+ "isLabel" => bool,
153
+ "ticketUrl" => String | nil,
154
+ "purpose" => String | nil
155
+ }
156
+ | nil
157
+
107
158
  # Spec schema: `AccessRequest`.
108
159
  type access_request = {
109
160
  "id" => String,
@@ -137,6 +188,63 @@ module Infrawrench
137
188
  # Spec schema: `AccessRequestCreate`.
138
189
  type access_request_create = { "permissions" => Array[String], "reason" => String, "durationMinutes" => Integer }
139
190
 
191
+ # Spec schema: `AccessReviewDismissal`.
192
+ type access_review_dismissal = {
193
+ "resourceId" => String,
194
+ "ruleId" => String,
195
+ "dismissedAt" => String,
196
+ "dismissedBy" => String | nil,
197
+ "reason" => String | nil
198
+ }
199
+
200
+ # Spec schema: `AccessReviewDismissalCreate`.
201
+ type access_review_dismissal_create = {
202
+ "resourceId" => String,
203
+ "ruleId" => "access-review:stale-principal"
204
+ | "access-review:admin-principal"
205
+ | "access-review:key-past-rotation"
206
+ | "access-review:no-recorded-owner"
207
+ | "access-review:no-mfa",
208
+ ?"reason" => String | nil
209
+ }
210
+
211
+ # Spec schema: `AccessReviewResponse`.
212
+ type access_review_response = {
213
+ "principals" => Array[access_principal],
214
+ "findings" => Array[access_finding],
215
+ "totalCount" => Integer,
216
+ "counts" => access_review_severity_counts,
217
+ "byRule" => access_review_rule_counts,
218
+ "byRole" => access_review_role_counts,
219
+ "dismissed" => Array[dismissed_access_finding],
220
+ "dismissedCount" => Integer,
221
+ "unknownActivityCount" => Integer,
222
+ "staleDays" => Integer,
223
+ "generatedAt" => String
224
+ }
225
+
226
+ # Spec schema: `AccessReviewRoleCounts`.
227
+ type access_review_role_counts = {
228
+ "user" => Integer,
229
+ "group" => Integer,
230
+ "role" => Integer,
231
+ "service-account" => Integer,
232
+ "key" => Integer,
233
+ "binding" => Integer
234
+ }
235
+
236
+ # Spec schema: `AccessReviewRuleCounts`.
237
+ type access_review_rule_counts = {
238
+ "access-review:stale-principal" => Integer,
239
+ "access-review:admin-principal" => Integer,
240
+ "access-review:key-past-rotation" => Integer,
241
+ "access-review:no-recorded-owner" => Integer,
242
+ "access-review:no-mfa" => Integer
243
+ }
244
+
245
+ # Spec schema: `AccessReviewSeverityCounts`.
246
+ type access_review_severity_counts = { "critical" => Integer, "high" => Integer, "medium" => Integer, "low" => Integer }
247
+
140
248
  # Spec schema: `AccessRevokeConflict`.
141
249
  type access_revoke_conflict = { "error" => String }
142
250
 
@@ -328,6 +436,7 @@ module Infrawrench
328
436
  | "postureAlerts"
329
437
  | "probeAlerts"
330
438
  | "quotaAlerts"
439
+ | "incidentAlerts"
331
440
  | "weeklyDigest"
332
441
 
333
442
  # Spec schema: `AllocationRule`.
@@ -2177,6 +2286,21 @@ module Infrawrench
2177
2286
  # Spec schema: `DigestTransportResult`.
2178
2287
  type digest_transport_result = { "attempted" => Integer, "succeeded" => Integer }
2179
2288
 
2289
+ # Spec schema: `DismissedAccessFinding`.
2290
+ type dismissed_access_finding = {
2291
+ "resourceId" => String,
2292
+ "ruleId" => "access-review:stale-principal"
2293
+ | "access-review:admin-principal"
2294
+ | "access-review:key-past-rotation"
2295
+ | "access-review:no-recorded-owner"
2296
+ | "access-review:no-mfa",
2297
+ "title" => String,
2298
+ "severity" => "critical" | "high" | "medium" | "low",
2299
+ "reason" => String,
2300
+ "principal" => access_principal,
2301
+ "dismissal" => access_review_dismissal
2302
+ }
2303
+
2180
2304
  # Spec schema: `DismissedPostureFinding`.
2181
2305
  type dismissed_posture_finding = {
2182
2306
  "resourceId" => String,
@@ -2584,6 +2708,148 @@ module Infrawrench
2584
2708
  "isImported" => bool
2585
2709
  }
2586
2710
 
2711
+ # Spec schema: `Incident`.
2712
+ type incident = {
2713
+ "id" => String,
2714
+ "title" => String,
2715
+ "severity" => "sev1" | "sev2" | "sev3" | "sev4",
2716
+ "status" => "open" | "mitigated" | "resolved",
2717
+ "summary" => String | nil,
2718
+ "startedAt" => String,
2719
+ "mitigatedAt" => String | nil,
2720
+ "resolvedAt" => String | nil,
2721
+ "declaredByUserId" => String | nil,
2722
+ "declaredByName" => String | nil,
2723
+ "resolvedByUserId" => String | nil,
2724
+ "affectedResourceIds" => Array[String],
2725
+ "affectedAccountIds" => Array[String],
2726
+ "issueUrl" => String | nil,
2727
+ "createdAt" => String,
2728
+ "updatedAt" => String,
2729
+ "artifacts" => Array[incident_artifact],
2730
+ "noteCount" => Integer
2731
+ }
2732
+
2733
+ # Spec schema: `IncidentActions`.
2734
+ type incident_actions = {
2735
+ ?"openFreeze" => bool,
2736
+ ?"pinMoment" => bool,
2737
+ ?"postSlack" => bool,
2738
+ ?"statusPageId" => String | nil,
2739
+ ?"statusPageComponentIds" => Array[String]
2740
+ }
2741
+
2742
+ # Spec schema: `IncidentArtifact`.
2743
+ type incident_artifact = {
2744
+ "id" => String,
2745
+ "kind" => "freeze" | "moment" | "slack" | "status-page",
2746
+ "status" => "created" | "failed" | "closed" | "close_failed",
2747
+ "label" => String | nil,
2748
+ "refId" => String | String | nil,
2749
+ "refSecondary" => String | nil,
2750
+ "error" => String | nil,
2751
+ "request" => incident_artifact_request,
2752
+ "createdAt" => String,
2753
+ "updatedAt" => String
2754
+ }
2755
+
2756
+ # What the declaration asked for, recorded so a retry asks for the same thing.
2757
+ # Present on the status-page artefact, where a retry that forgot the
2758
+ # operator's chosen components would publish the outage against the whole
2759
+ # page.
2760
+ #
2761
+ # Spec schema: `IncidentArtifactRequest`.
2762
+ type incident_artifact_request = { ?"statusPageId" => String | nil, ?"componentIds" => Array[String] } | nil
2763
+
2764
+ # Spec schema: `IncidentDeclare`.
2765
+ type incident_declare = {
2766
+ "title" => String,
2767
+ ?"severity" => "sev1" | "sev2" | "sev3" | "sev4",
2768
+ ?"summary" => String | nil,
2769
+ ?"startedAt" => String,
2770
+ ?"affectedResourceIds" => Array[String],
2771
+ ?"affectedAccountIds" => Array[String],
2772
+ ?"actions" => incident_actions
2773
+ }
2774
+
2775
+ # Spec schema: `IncidentDetail`.
2776
+ type incident_detail = { "incident" => incident, "notes" => Array[incident_note] }
2777
+
2778
+ # Spec schema: `IncidentList`.
2779
+ type incident_list = { "incidents" => Array[incident] }
2780
+
2781
+ # Spec schema: `IncidentNote`.
2782
+ type incident_note = {
2783
+ "id" => String,
2784
+ "body" => String,
2785
+ "authorUserId" => String | nil,
2786
+ "authorName" => String | nil,
2787
+ "occurredAt" => String,
2788
+ "createdAt" => String
2789
+ }
2790
+
2791
+ # Spec schema: `IncidentNoteCreate`.
2792
+ type incident_note_create = { "body" => String, ?"occurredAt" => String }
2793
+
2794
+ # Spec schema: `IncidentPatch`.
2795
+ type incident_patch = {
2796
+ ?"title" => String,
2797
+ ?"severity" => "sev1" | "sev2" | "sev3" | "sev4",
2798
+ ?"status" => "open" | "mitigated" | "resolved",
2799
+ ?"summary" => String | nil,
2800
+ ?"affectedResourceIds" => Array[String],
2801
+ ?"affectedAccountIds" => Array[String],
2802
+ ?"issueUrl" => String | nil
2803
+ }
2804
+
2805
+ # Spec schema: `IncidentPostmortem`.
2806
+ type incident_postmortem = { "markdown" => String, "filename" => String }
2807
+
2808
+ # Spec schema: `IncidentTimeline`.
2809
+ type incident_timeline = {
2810
+ "incidentId" => String,
2811
+ "from" => String,
2812
+ "to" => String,
2813
+ "generatedAt" => String,
2814
+ "entries" => Array[incident_timeline_entry],
2815
+ "feeds" => Array[{ "feed" => String, "status" => "ok" | "omitted" | "error", ?"error" => String | nil }],
2816
+ "truncated" => bool
2817
+ }
2818
+
2819
+ # Spec schema: `IncidentTimelineEntry`.
2820
+ type incident_timeline_entry = {
2821
+ "id" => String,
2822
+ "source" => "incident" | "note" | "artifact" | "moment" | "probe" | "metric-alert",
2823
+ "kind" => String,
2824
+ "at" => String,
2825
+ "title" => String,
2826
+ ?"detail" => String | nil,
2827
+ "severity" => "info" | "warning" | "critical",
2828
+ ?"authorName" => String | nil,
2829
+ ?"resourceId" => String | nil,
2830
+ ?"resourceName" => String | nil,
2831
+ ?"pluginId" => String | nil,
2832
+ ?"accountId" => String | nil,
2833
+ ?"link" => {
2834
+ "kind" => "resource"
2835
+ | "changes"
2836
+ | "provider-incident"
2837
+ | "costs"
2838
+ | "workflow-run"
2839
+ | "deployment"
2840
+ | "audit"
2841
+ | "freeze"
2842
+ | "expiring"
2843
+ | "probe"
2844
+ | "metric-alert"
2845
+ | "incident",
2846
+ ?"id" => String | nil,
2847
+ ?"parentId" => String | nil,
2848
+ ?"url" => String | nil
2849
+ }
2850
+ | nil
2851
+ }
2852
+
2587
2853
  # Spec schema: `Invitation`.
2588
2854
  type invitation = {
2589
2855
  "id" => String,
@@ -3793,6 +4059,8 @@ module Infrawrench
3793
4059
  | "freezes:read"
3794
4060
  | "freezes:write"
3795
4061
  | "freezes:override"
4062
+ | "incidents:read"
4063
+ | "incidents:write"
3796
4064
  | "tag-policy:override"
3797
4065
  | "config:read"
3798
4066
  | "config:write"
@@ -5647,12 +5915,14 @@ module Infrawrench
5647
5915
  | "changes"
5648
5916
  | "expiring"
5649
5917
  | "posture"
5918
+ | "access-review"
5650
5919
  | "dns"
5651
5920
  | "environment-diff"
5652
5921
  | "ssh-fanout"
5653
5922
  | "metric-alerts"
5654
5923
  | "probes"
5655
5924
  | "quotas"
5925
+ | "incidents"
5656
5926
  | "workflows"
5657
5927
  | "deployments"
5658
5928
  | "settings"
@@ -5892,6 +6162,19 @@ module Infrawrench
5892
6162
  def withdraw: (request_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5893
6163
  end
5894
6164
 
6165
+ class AccessReviewDismissalsNamespace
6166
+ def initialize: (Transport) -> void
6167
+ def create: (?org_id: String?, ?body: access_review_dismissal_create?, ?request_options: Hash[Symbol, untyped]?) -> access_review_dismissal
6168
+ def delete: (resource_id: String, rule_id: "access-review:stale-principal" | "access-review:admin-principal" | "access-review:key-past-rotation" | "access-review:no-recorded-owner" | "access-review:no-mfa", ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
6169
+ end
6170
+
6171
+ class AccessReviewNamespace
6172
+ attr_reader dismissals: AccessReviewDismissalsNamespace
6173
+ def initialize: (Transport) -> void
6174
+ def export: (?org_id: String?, ?format: "csv" | "json"?, ?stale_days: Integer?, ?request_options: Hash[Symbol, untyped]?) -> access_review_response
6175
+ def get: (?org_id: String?, ?stale_days: Integer?, ?request_options: Hash[Symbol, untyped]?) -> access_review_response
6176
+ end
6177
+
5895
6178
  class AccountsCredentialsNamespace
5896
6179
  def initialize: (Transport) -> void
5897
6180
  def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Hash[String, String]
@@ -6382,6 +6665,30 @@ module Infrawrench
6382
6665
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> expiry_list_response
6383
6666
  end
6384
6667
 
6668
+ class IncidentsGetNamespace
6669
+ def initialize: (Transport) -> void
6670
+ def get: (?org_id: String?, ?status: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_list
6671
+ def get_org_org_id_incidents_incident_id: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_detail
6672
+ end
6673
+
6674
+ class IncidentsNotesNamespace
6675
+ def initialize: (Transport) -> void
6676
+ def create: (incident_id: String, ?org_id: String?, ?body: incident_note_create?, ?request_options: Hash[Symbol, untyped]?) -> incident_note
6677
+ def delete: (incident_id: String, note_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
6678
+ end
6679
+
6680
+ class IncidentsNamespace
6681
+ attr_reader get: IncidentsGetNamespace
6682
+ attr_reader notes: IncidentsNotesNamespace
6683
+ def initialize: (Transport) -> void
6684
+ def create: (?org_id: String?, ?body: incident_declare?, ?request_options: Hash[Symbol, untyped]?) -> incident
6685
+ def delete: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
6686
+ def postmortem: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_postmortem
6687
+ def retry_artifacts: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident
6688
+ def timeline: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_timeline
6689
+ def update: (incident_id: String, ?org_id: String?, ?body: incident_patch?, ?request_options: Hash[Symbol, untyped]?) -> incident
6690
+ end
6691
+
6385
6692
  class InvitationsByTokenNamespace
6386
6693
  def initialize: (Transport) -> void
6387
6694
  def get: (token: String, ?request_options: Hash[Symbol, untyped]?) -> invitation_detail
@@ -6879,6 +7186,7 @@ module Infrawrench
6879
7186
  class APIV1Client
6880
7187
  attr_reader transport: Transport
6881
7188
  attr_reader access_requests: AccessRequestsNamespace
7189
+ attr_reader access_review: AccessReviewNamespace
6882
7190
  attr_reader accounts: AccountsNamespace
6883
7191
  attr_reader agents: AgentsNamespace
6884
7192
  attr_reader alert_rules: AlertRulesNamespace
@@ -6919,6 +7227,7 @@ module Infrawrench
6919
7227
  attr_reader docker: DockerNamespace
6920
7228
  attr_reader environment_diff: EnvironmentDiffNamespace
6921
7229
  attr_reader expiring: ExpiringNamespace
7230
+ attr_reader incidents: IncidentsNamespace
6922
7231
  attr_reader invitations: InvitationsNamespace
6923
7232
  attr_reader invoices: InvoicesNamespace
6924
7233
  attr_reader jira: JiraNamespace
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.14.0
4
+ version: 1.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infrawrench LLC
@@ -11,7 +11,7 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2026-08-12 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v1.14.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.16.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.14.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.16.0).
62
62
  test_files: []