infrawrench-sdk 1.69.0 → 1.71.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: 46cb020003e6f0ccd4c0df6c8eaa6941ace890215f3818597b2d3a188d151f7c
4
- data.tar.gz: e392a0ed1b80a61ee7f0dc476c785ad97fc69ee6d58160f79ae402579fd808ee
3
+ metadata.gz: bc94257e74cd0c9ef10d24dce87c39018f4bbe86652683ed2314e430091348b0
4
+ data.tar.gz: 75b878e22ce2e3f54836c9fe7ec31741ebb29540d19c9f412a8f8979c606a221
5
5
  SHA512:
6
- metadata.gz: dda0c71d25b1d8a63605f0bda392441bfaf6bf7037ea86bc241c2e445512612004db1f07cb6d8f64f04c34d7f23dfcefc2fb6b0f3f2585b311df1bd12a872c42
7
- data.tar.gz: f0d91cee4b944347d3899857752f0a75d25927924e6bd0fddf99bf9611b0a94d031bad2f8a67400ddf4cb364cdd0fb78e0ad9c8bd33cd222da4e44af96256768
6
+ metadata.gz: bcc9f360f638857f2f8e87c4ab2ba826494475c83a7ad62e9b5b776c4493eed7c448eb5d192fd45195838ea627984c13d5359d0d4e8f92b9cd852995c85f96c8
7
+ data.tar.gz: f05fcf6d900349cbbca3799e36e4fabf3376cf2b27fd0e20fb9ce3e79b467003618a507265332ce8ea37aa7382bee00d907730c98b2a0ffb378f6c7650e5c0ce
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.69.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.71.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
- 900 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 916 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.69.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.71.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.69.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.71.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.69.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.69.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.71.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.71.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.69.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.71.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.69.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.71.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -16903,6 +16903,236 @@ module Infrawrench
16903
16903
  end
16904
16904
  end
16905
16905
 
16906
+ # `client.savings.events.update`
16907
+ class SavingsEventsUpdateNamespace
16908
+ # @api private
16909
+ # @param transport [Transport]
16910
+ def initialize(transport)
16911
+ @transport = transport
16912
+ end
16913
+
16914
+ # Annotate a saving
16915
+ #
16916
+ # Add context to any event: a note, an explicit cost centre, a horizon
16917
+ # override, or an end date. The facts of an automatic event (what was done,
16918
+ # when, the projection) stay as observed.
16919
+ #
16920
+ # PATCH /api/org/{orgId}/savings/events/{id}
16921
+ #
16922
+ # Raises on 400: Bad request
16923
+ #
16924
+ # Raises on 404: Not found
16925
+ #
16926
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
16927
+ # constructed with.
16928
+ # @param id [String]
16929
+ # @param body [Hash] Request body, shaped as `SavingsEventAnnotation`.
16930
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
16931
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
16932
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
16933
+ def patch_org_org_id_savings_events_id(id:, body:, org_id: nil, request_options: nil)
16934
+ @transport.request(
16935
+ http_method: "PATCH",
16936
+ path: "/api/org/{orgId}/savings/events/{id}",
16937
+ path_params: { "orgId" => org_id, "id" => id },
16938
+ body: body,
16939
+ request_options: request_options
16940
+ )
16941
+ end
16942
+
16943
+ # Rewrite a manual saving
16944
+ #
16945
+ # Full replace of a manual entry. Automatic events are a 400; use PATCH.
16946
+ #
16947
+ # PUT /api/org/{orgId}/savings/events/{id}
16948
+ #
16949
+ # Raises on 400: Bad request
16950
+ #
16951
+ # Raises on 404: Not found
16952
+ #
16953
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
16954
+ # constructed with.
16955
+ # @param id [String]
16956
+ # @param body [Hash] Request body, shaped as `SavingsEventInput`.
16957
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
16958
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
16959
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
16960
+ def update(id:, body:, org_id: nil, request_options: nil)
16961
+ @transport.request(
16962
+ http_method: "PUT",
16963
+ path: "/api/org/{orgId}/savings/events/{id}",
16964
+ path_params: { "orgId" => org_id, "id" => id },
16965
+ body: body,
16966
+ request_options: request_options
16967
+ )
16968
+ end
16969
+ end
16970
+
16971
+ # `client.savings.events`
16972
+ class SavingsEventsNamespace
16973
+ # @return [SavingsEventsUpdateNamespace] `client.savings.events.update`
16974
+ attr_reader :update
16975
+
16976
+ # @api private
16977
+ # @param transport [Transport]
16978
+ def initialize(transport)
16979
+ @transport = transport
16980
+ @update = SavingsEventsUpdateNamespace.new(@transport)
16981
+ end
16982
+
16983
+ # Log a saving
16984
+ #
16985
+ # Record a saving by hand, with the monthly amount and the day it began.
16986
+ # Leaves an org-wide cost annotation on that day. Requires `costs:write`.
16987
+ #
16988
+ # POST /api/org/{orgId}/savings/events
16989
+ #
16990
+ # Raises on 400: Bad request
16991
+ #
16992
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
16993
+ # constructed with.
16994
+ # @param body [Hash] Request body, shaped as `SavingsEventInput`.
16995
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
16996
+ # @return [Hash] Parsed JSON, shaped as `SavingsEvent` — see `sig/infrawrench/sdk.rbs`.
16997
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
16998
+ def create(body:, org_id: nil, request_options: nil)
16999
+ @transport.request(
17000
+ http_method: "POST",
17001
+ path: "/api/org/{orgId}/savings/events",
17002
+ path_params: { "orgId" => org_id },
17003
+ body: body,
17004
+ request_options: request_options
17005
+ )
17006
+ end
17007
+
17008
+ # Remove a saving
17009
+ #
17010
+ # Hard delete, together with the cost annotation the event left on the
17011
+ # charts.
17012
+ #
17013
+ # DELETE /api/org/{orgId}/savings/events/{id}
17014
+ #
17015
+ # Raises on 404: Not found
17016
+ #
17017
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17018
+ # constructed with.
17019
+ # @param id [String]
17020
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17021
+ # @return [Hash] Parsed JSON, shaped as `Ok` — see `sig/infrawrench/sdk.rbs`.
17022
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17023
+ def delete(id:, org_id: nil, request_options: nil)
17024
+ @transport.request(
17025
+ http_method: "DELETE",
17026
+ path: "/api/org/{orgId}/savings/events/{id}",
17027
+ path_params: { "orgId" => org_id, "id" => id },
17028
+ request_options: request_options
17029
+ )
17030
+ end
17031
+ end
17032
+
17033
+ # `client.savings.settings`
17034
+ class SavingsSettingsNamespace
17035
+ # @api private
17036
+ # @param transport [Transport]
17037
+ def initialize(transport)
17038
+ @transport = transport
17039
+ end
17040
+
17041
+ # Get realized savings settings
17042
+ #
17043
+ # The org's horizon, shortfall threshold and baseline window; defaults when
17044
+ # never saved.
17045
+ #
17046
+ # GET /api/org/{orgId}/savings/settings
17047
+ #
17048
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17049
+ # constructed with.
17050
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17051
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsSettings` — see
17052
+ # `sig/infrawrench/sdk.rbs`.
17053
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17054
+ def get(org_id: nil, request_options: nil)
17055
+ @transport.request(
17056
+ http_method: "GET",
17057
+ path: "/api/org/{orgId}/savings/settings",
17058
+ path_params: { "orgId" => org_id },
17059
+ request_options: request_options
17060
+ )
17061
+ end
17062
+
17063
+ # Update realized savings settings
17064
+ #
17065
+ # Requires `costs:write`. Changes every figure in the report, retroactively.
17066
+ #
17067
+ # PUT /api/org/{orgId}/savings/settings
17068
+ #
17069
+ # Raises on 400: Bad request
17070
+ #
17071
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17072
+ # constructed with.
17073
+ # @param body [Hash] Request body, shaped as `RealizedSavingsSettings`.
17074
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17075
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsSettings` — see
17076
+ # `sig/infrawrench/sdk.rbs`.
17077
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17078
+ def update(body:, org_id: nil, request_options: nil)
17079
+ @transport.request(
17080
+ http_method: "PUT",
17081
+ path: "/api/org/{orgId}/savings/settings",
17082
+ path_params: { "orgId" => org_id },
17083
+ body: body,
17084
+ request_options: request_options
17085
+ )
17086
+ end
17087
+ end
17088
+
17089
+ # `client.savings`
17090
+ class SavingsNamespace
17091
+ # @return [SavingsEventsNamespace] `client.savings.events`
17092
+ attr_reader :events
17093
+ # @return [SavingsSettingsNamespace] `client.savings.settings`
17094
+ attr_reader :settings
17095
+
17096
+ # @api private
17097
+ # @param transport [Transport]
17098
+ def initialize(transport)
17099
+ @transport = transport
17100
+ @events = SavingsEventsNamespace.new(@transport)
17101
+ @settings = SavingsSettingsNamespace.new(@transport)
17102
+ end
17103
+
17104
+ # Realized savings report
17105
+ #
17106
+ # What the actions taken actually saved, against each resource's own
17107
+ # trailing daily spend before the action, accrued day by day (one-off
17108
+ # actions up to the horizon). Recomputed on every read, so figures improve
17109
+ # as restated billing lands. Days collection has not covered are not
17110
+ # accrued. Per-currency throughout; never converted or merged.
17111
+ #
17112
+ # GET /api/org/{orgId}/savings/realized
17113
+ #
17114
+ # Raises on 400: Bad request
17115
+ #
17116
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
17117
+ # constructed with.
17118
+ # @param from [String, nil] Inclusive first day. Defaults to the first of the month 11
17119
+ # months back.
17120
+ # @param to [String, nil] Inclusive last day. Defaults to yesterday.
17121
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
17122
+ # @return [Hash] Parsed JSON, shaped as `RealizedSavingsReport` — see
17123
+ # `sig/infrawrench/sdk.rbs`.
17124
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
17125
+ def realized(org_id: nil, from: nil, to: nil, request_options: nil)
17126
+ @transport.request(
17127
+ http_method: "GET",
17128
+ path: "/api/org/{orgId}/savings/realized",
17129
+ path_params: { "orgId" => org_id },
17130
+ query: { "from" => from, "to" => to },
17131
+ request_options: request_options
17132
+ )
17133
+ end
17134
+ end
17135
+
16906
17136
  # `client.schedules`
16907
17137
  class SchedulesNamespace
16908
17138
  # @api private
@@ -20511,6 +20741,8 @@ module Infrawrench
20511
20741
  attr_reader :runbooks
20512
20742
  # @return [SavedCostFiltersNamespace] `client.saved_cost_filters`
20513
20743
  attr_reader :saved_cost_filters
20744
+ # @return [SavingsNamespace] `client.savings`
20745
+ attr_reader :savings
20514
20746
  # @return [SchedulesNamespace] `client.schedules`
20515
20747
  attr_reader :schedules
20516
20748
  # @return [SearchNamespace] `client.search`
@@ -20648,6 +20880,7 @@ module Infrawrench
20648
20880
  @rightsizing = RightsizingNamespace.new(@transport)
20649
20881
  @runbooks = RunbooksNamespace.new(@transport)
20650
20882
  @saved_cost_filters = SavedCostFiltersNamespace.new(@transport)
20883
+ @savings = SavingsNamespace.new(@transport)
20651
20884
  @schedules = SchedulesNamespace.new(@transport)
20652
20885
  @search = SearchNamespace.new(@transport)
20653
20886
  @session_recordings = SessionRecordingsNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.69.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.71.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.69.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.71.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.69.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.71.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.69.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.71.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.69.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.71.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.69.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.71.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.69.0"
18
+ VERSION = "1.71.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.69.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.71.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.69.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.71.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.69.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.71.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.69.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.71.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -3600,10 +3600,17 @@ module Infrawrench
3600
3600
  # `cost_graph` stores its whole config inline — a one-off card. `cost_report`
3601
3601
  # points at a saved cost report by id, so editing the report updates every
3602
3602
  # dashboard showing it. `cost_canvas` points at a cost canvas by id
3603
- # (`{version: 1, canvasId}`) the same way.
3603
+ # (`{version: 1, canvasId}`) the same way. `realized_savings` shows the org's
3604
+ # realized savings report; its config is only a view choice (`grouping`: month
3605
+ # | kind | costCentre | account, and `months` back, 1–36).
3604
3606
  #
3605
3607
  # Spec schema: `DashboardWidgetKind`.
3606
- type dashboard_widget_kind = "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas"
3608
+ type dashboard_widget_kind = "cost_graph"
3609
+ | "cost_report"
3610
+ | "budget"
3611
+ | "custom_graph"
3612
+ | "cost_canvas"
3613
+ | "realized_savings"
3607
3614
 
3608
3615
  # Spec schema: `DashboardWithPins`.
3609
3616
  type dashboard_with_pins = {
@@ -4091,7 +4098,8 @@ module Infrawrench
4091
4098
  "amount" => Numeric | nil,
4092
4099
  "detail" => Hash[String, String | Numeric | nil | nil],
4093
4100
  "firedAt" => String,
4094
- "notifiedAt" => String | nil
4101
+ "notifiedAt" => String | nil,
4102
+ ?"remediation" => finding_remediation
4095
4103
  }
4096
4104
 
4097
4105
  # Spec schema: `EnvironmentCaptureDraft`.
@@ -4471,6 +4479,23 @@ module Infrawrench
4471
4479
  # Spec schema: `FileGithubIssueResult`.
4472
4480
  type file_github_issue_result = { "action" => "created" | "commented", "link" => github_issue_link }
4473
4481
 
4482
+ # Idle commitments only: the provider's commands for inspecting and acting on
4483
+ # the commitment. Null for the other kinds.
4484
+ #
4485
+ # Spec schema: `FindingRemediation`.
4486
+ type finding_remediation = {
4487
+ "commands" => Array[remediation_command],
4488
+ "placeholders" => Array[remediation_placeholder],
4489
+ "iac" => {
4490
+ "address" => String,
4491
+ "stateLabel" => String | nil,
4492
+ "attributeChanges" => Array[{ "attribute" => String, "from" => String | nil, "to" => String | nil }],
4493
+ "commands" => Array[remediation_command]
4494
+ }
4495
+ | nil
4496
+ }
4497
+ | nil
4498
+
4474
4499
  # Spec schema: `FocusExportRequest`.
4475
4500
  type focus_export_request = {
4476
4501
  "from" => String,
@@ -6132,7 +6157,12 @@ module Infrawrench
6132
6157
  # Spec schema: `OrgConfigDashboardCard`.
6133
6158
  type org_config_dashboard_card = {
6134
6159
  "kind" => "widget",
6135
- "widgetKind" => "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas",
6160
+ "widgetKind" => "cost_graph"
6161
+ | "cost_report"
6162
+ | "budget"
6163
+ | "custom_graph"
6164
+ | "cost_canvas"
6165
+ | "realized_savings",
6136
6166
  ?"title" => String,
6137
6167
  ?"config" => json_object,
6138
6168
  ?"budgetKey" => String,
@@ -6348,7 +6378,8 @@ module Infrawrench
6348
6378
  "reason" => String,
6349
6379
  "cost" => orphan_cost_annotation,
6350
6380
  "owner" => resource_owner_annotation,
6351
- "lastSyncedAt" => String | nil
6381
+ "lastSyncedAt" => String | nil,
6382
+ ?"remediation" => finding_remediation & Hash[String, untyped]
6352
6383
  }
6353
6384
 
6354
6385
  # Spec schema: `OversizedAccountGroup`.
@@ -6381,7 +6412,8 @@ module Infrawrench
6381
6412
  "currentMonthlyKgCo2e" => Numeric | nil,
6382
6413
  "monthlyKgCo2eSaving" => Numeric | nil,
6383
6414
  "resizeNote" => String | nil,
6384
- "lastSyncedAt" => String | nil
6415
+ "lastSyncedAt" => String | nil,
6416
+ ?"remediation" => finding_remediation & Hash[String, untyped]
6385
6417
  }
6386
6418
 
6387
6419
  # Spec schema: `OversizedSizeSummary`.
@@ -7245,6 +7277,52 @@ module Infrawrench
7245
7277
  # Spec schema: `QuotaTrend`.
7246
7278
  type quota_trend = { "perDay" => Numeric | nil, "daysToExhaustion" => Numeric | nil, "points" => Integer }
7247
7279
 
7280
+ # `billing` — baseline and post-action spend both read from this resource's
7281
+ # cost rows; `estimate` — no per-resource billing, so the list-price estimate
7282
+ # is accrued over elapsed days; `manual` — the logged amount accrued;
7283
+ # `unmeasured` — nothing to measure against (never summed as zero).
7284
+ #
7285
+ # Spec schema: `RealizedSavingsBasis`.
7286
+ type realized_savings_basis = "billing" | "estimate" | "manual" | "unmeasured"
7287
+
7288
+ # Spec schema: `RealizedSavingsBucket`.
7289
+ type realized_savings_bucket = {
7290
+ "key" => String,
7291
+ "label" => String,
7292
+ "currency" => String,
7293
+ "realized" => Numeric,
7294
+ "projected" => Numeric,
7295
+ "events" => Integer
7296
+ }
7297
+
7298
+ # Spec schema: `RealizedSavingsMonth`.
7299
+ type realized_savings_month = { "month" => String, "currency" => String, "realized" => Numeric, "projected" => Numeric }
7300
+
7301
+ # Spec schema: `RealizedSavingsReport`.
7302
+ type realized_savings_report = {
7303
+ "from" => String,
7304
+ "to" => String,
7305
+ "settings" => realized_savings_settings,
7306
+ "totals" => Array[realized_savings_total],
7307
+ "byMonth" => Array[realized_savings_month],
7308
+ "byKind" => Array[realized_savings_bucket],
7309
+ "byCostCentre" => Array[realized_savings_bucket],
7310
+ "byAccount" => Array[realized_savings_bucket],
7311
+ "events" => Array[savings_event_result],
7312
+ "shortfallCount" => Integer,
7313
+ "unmeasuredCount" => Integer
7314
+ }
7315
+
7316
+ # Spec schema: `RealizedSavingsSettings`.
7317
+ type realized_savings_settings = {
7318
+ "horizonMonths" => Integer,
7319
+ "shortfallThresholdPercent" => Integer,
7320
+ "baselineWindowDays" => Integer
7321
+ }
7322
+
7323
+ # Spec schema: `RealizedSavingsTotal`.
7324
+ type realized_savings_total = { "currency" => String, "realized" => Numeric, "projected" => Numeric }
7325
+
7248
7326
  # Spec schema: `ReauthenticationRequired`.
7249
7327
  type reauthentication_required = { "error" => String, "code" => "reauthentication_required" }
7250
7328
 
@@ -7258,6 +7336,18 @@ module Infrawrench
7258
7336
  "notice" => String
7259
7337
  }
7260
7338
 
7339
+ # Spec schema: `RemediationCommand`.
7340
+ type remediation_command = {
7341
+ "tool" => String,
7342
+ "command" => String,
7343
+ "description" => String,
7344
+ "destructive" => bool,
7345
+ ?"placeholders" => Array[remediation_placeholder]
7346
+ }
7347
+
7348
+ # Spec schema: `RemediationPlaceholder`.
7349
+ type remediation_placeholder = { "name" => String, "description" => String }
7350
+
7261
7351
  # Spec schema: `ReorderRequest`.
7262
7352
  type reorder_request = {
7263
7353
  ?"cards" => Array[{ "kind" => "resource" | "workflow" | "widget", "id" => String }],
@@ -8464,6 +8554,116 @@ module Infrawrench
8464
8554
  ?"tagKey" => String
8465
8555
  }
8466
8556
 
8557
+ # Spec schema: `SavingsEvent`.
8558
+ type savings_event = {
8559
+ "id" => String,
8560
+ "kind" => savings_event_kind,
8561
+ "source" => savings_event_source,
8562
+ "title" => String,
8563
+ "note" => String | nil,
8564
+ "occurredOn" => String,
8565
+ "endedOn" => String | nil,
8566
+ "accountId" => String | nil,
8567
+ "accountName" => String | nil,
8568
+ "pluginId" => String | nil,
8569
+ "resourceTypeId" => String | nil,
8570
+ "resourceId" => String | nil,
8571
+ "resourceName" => String | nil,
8572
+ "costCentreId" => String | nil,
8573
+ "projectedMonthlyAmount" => Numeric | nil,
8574
+ "currency" => String | nil,
8575
+ "horizonMonths" => Integer | nil,
8576
+ "costAnnotationId" => String | nil,
8577
+ "createdByUserId" => String | nil,
8578
+ "createdAt" => String,
8579
+ "updatedAt" => String
8580
+ }
8581
+
8582
+ # Spec schema: `SavingsEventAnnotation`.
8583
+ type savings_event_annotation = {
8584
+ ?"note" => String | nil,
8585
+ ?"costCentreId" => String | nil,
8586
+ ?"horizonMonths" => Integer | nil,
8587
+ ?"endedOn" => String | nil
8588
+ }
8589
+
8590
+ # Spec schema: `SavingsEventInput`.
8591
+ type savings_event_input = {
8592
+ "title" => String,
8593
+ ?"note" => String | nil,
8594
+ "occurredOn" => String,
8595
+ ?"endedOn" => String | nil,
8596
+ "projectedMonthlyAmount" => Numeric,
8597
+ "currency" => String,
8598
+ ?"resourceId" => String | nil,
8599
+ ?"accountId" => String | nil,
8600
+ ?"costCentreId" => String | nil,
8601
+ ?"horizonMonths" => Integer | nil
8602
+ }
8603
+
8604
+ # `rightsizing` — a resize to a smaller size; `orphan_deletion` — a resource
8605
+ # the orphan finder flags was deleted; `sleep_schedule` — a stretch of a
8606
+ # sleep/wake schedule in force; `commitment` — reservation and savings-plan
8607
+ # discounts, derived from billing; `manual` — logged by a person.
8608
+ #
8609
+ # Spec schema: `SavingsEventKind`.
8610
+ type savings_event_kind = "rightsizing" | "orphan_deletion" | "sleep_schedule" | "commitment" | "manual"
8611
+
8612
+ # Spec schema: `SavingsEventResult`.
8613
+ type savings_event_result = {
8614
+ "id" => String,
8615
+ "kind" => savings_event_kind,
8616
+ "source" => savings_event_source,
8617
+ "title" => String,
8618
+ "note" => String | nil,
8619
+ "occurredOn" => String,
8620
+ "endedOn" => String | nil,
8621
+ "accountId" => String | nil,
8622
+ "accountName" => String | nil,
8623
+ "pluginId" => String | nil,
8624
+ "resourceTypeId" => String | nil,
8625
+ "resourceId" => String | nil,
8626
+ "resourceName" => String | nil,
8627
+ "costCentreId" => String | nil,
8628
+ "projectedMonthlyAmount" => Numeric | nil,
8629
+ "currency" => String | nil,
8630
+ "horizonMonths" => Integer | nil,
8631
+ "costAnnotationId" => String | nil,
8632
+ "createdByUserId" => String | nil,
8633
+ "createdAt" => String,
8634
+ "updatedAt" => String,
8635
+ "basis" => realized_savings_basis,
8636
+ "status" => "pending" | "accruing" | "complete" | "ended",
8637
+ "realizedCurrency" => String | nil,
8638
+ "baselinePerDay" => Numeric | nil,
8639
+ "currentPerDay" => Numeric | nil,
8640
+ "realizedToDate" => Numeric | nil,
8641
+ "realizedInRange" => Numeric | nil,
8642
+ "projectedInRange" => Numeric | nil,
8643
+ "accruedDays" => Integer,
8644
+ "horizonEndsOn" => String | nil,
8645
+ "attributedCostCentreId" => String | nil,
8646
+ "attributedCostCentreName" => String | nil,
8647
+ "shortfall" => savings_shortfall,
8648
+ "editable" => "full" | "annotate" | "none"
8649
+ }
8650
+
8651
+ # `in_app` — recorded when Infrawrench performed the action; `detected` —
8652
+ # inferred from an inventory diff on sync (the action was taken in the
8653
+ # provider's console); `manual`; `derived` — computed from billing with no
8654
+ # stored event (commitments).
8655
+ #
8656
+ # Spec schema: `SavingsEventSource`.
8657
+ type savings_event_source = "in_app" | "detected" | "manual" | "derived"
8658
+
8659
+ # Spec schema: `SavingsShortfall`.
8660
+ type savings_shortfall = {
8661
+ "kind" => "below_projection" | "grew_back",
8662
+ "realizedPerDay" => Numeric,
8663
+ "projectedPerDay" => Numeric | nil
8664
+ }
8665
+ | nil
8666
+
8467
8667
  # Spec schema: `ScheduleConflict`.
8468
8668
  type schedule_conflict = { "error" => String }
8469
8669
 
@@ -8786,7 +8986,8 @@ module Infrawrench
8786
8986
  "projectedMonthlySaving" => Numeric | nil,
8787
8987
  "currency" => String | nil,
8788
8988
  "createdAt" => String,
8789
- "updatedAt" => String
8989
+ "updatedAt" => String,
8990
+ ?"remediation" => finding_remediation & Hash[String, untyped]
8790
8991
  }
8791
8992
 
8792
8993
  # Spec schema: `SleepScheduleCreate`.
@@ -10854,6 +11055,32 @@ module Infrawrench
10854
11055
  def update: (id: String, body: saved_cost_filter_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> saved_cost_filter
10855
11056
  end
10856
11057
 
11058
+ class SavingsEventsUpdateNamespace
11059
+ def initialize: (Transport) -> void
11060
+ def patch_org_org_id_savings_events_id: (id: String, body: savings_event_annotation, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11061
+ def update: (id: String, body: savings_event_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11062
+ end
11063
+
11064
+ class SavingsEventsNamespace
11065
+ attr_reader update: SavingsEventsUpdateNamespace
11066
+ def initialize: (Transport) -> void
11067
+ def create: (body: savings_event_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_event
11068
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
11069
+ end
11070
+
11071
+ class SavingsSettingsNamespace
11072
+ def initialize: (Transport) -> void
11073
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_settings
11074
+ def update: (body: realized_savings_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_settings
11075
+ end
11076
+
11077
+ class SavingsNamespace
11078
+ attr_reader events: SavingsEventsNamespace
11079
+ attr_reader settings: SavingsSettingsNamespace
11080
+ def initialize: (Transport) -> void
11081
+ def realized: (?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> realized_savings_report
11082
+ end
11083
+
10857
11084
  class SchedulesNamespace
10858
11085
  def initialize: (Transport) -> void
10859
11086
  def create: (?org_id: String?, ?body: sleep_schedule_create?, ?request_options: Hash[Symbol, untyped]?) -> sleep_schedule
@@ -11204,6 +11431,7 @@ module Infrawrench
11204
11431
  attr_reader rightsizing: RightsizingNamespace
11205
11432
  attr_reader runbooks: RunbooksNamespace
11206
11433
  attr_reader saved_cost_filters: SavedCostFiltersNamespace
11434
+ attr_reader savings: SavingsNamespace
11207
11435
  attr_reader schedules: SchedulesNamespace
11208
11436
  attr_reader search: SearchNamespace
11209
11437
  attr_reader session_recordings: SessionRecordingsNamespace
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.69.0
4
+ version: 1.71.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-10-05 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v1.69.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.71.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.69.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.71.0).
62
62
  test_files: []