infrawrench-sdk 1.17.0 → 1.19.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: 359ea68464e3400d21793fcb623a2f4d3652d4438d0943d15d3a89ed08ba2d40
4
- data.tar.gz: d85bcd64441a864f5cc4fa8433242a907fe169f89663e66dd8d81595d42fbe52
3
+ metadata.gz: a8c13955007c104a26094f09c6b0f8e78248c945e6495c5352539c87fe356bb4
4
+ data.tar.gz: a7be9b98ed78ff3e0662f5ca6162c1d1012806f360566a2b6778a1a470deb5c5
5
5
  SHA512:
6
- metadata.gz: e2ce4ad9fff0121b54795ee4185628084ae0d7832d9970633a3a0f82ca1f98787c098f17a326ca62b62f88452a4836555fe91abd77302be4ccf00ba45953e002
7
- data.tar.gz: 8b216cbe55353f50c523ca02ed4e5c86db7a396f63313b629eed0a5747af7d8ec11640a018fab31a4a975537e38bdd5f6935ba3ad41b58aedf0342f62092ca77
6
+ metadata.gz: 1392500234ef4cbcab3e12991e2f7ff7399c9d8238e43505f5c110e61d184bb3cf43b44dd166ef63e0ff5cdd28582463eb99a0c4303f36e1d4f7d1b2ab300622
7
+ data.tar.gz: 56ceb83f3f133c285f9ffa3848e4202df1abeddaa642c8e9f37a2fc0b0ec58fcfca753bd5c33c6b3a20933dbf10f20962e16abf9fd3b433ba28e3c8331ca7ccc
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.17.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.19.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
- 601 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 625 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.17.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.19.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.17.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.19.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.17.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.17.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.19.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.19.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.17.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.19.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.17.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.19.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1535,6 +1535,161 @@ module Infrawrench
1535
1535
  end
1536
1536
  end
1537
1537
 
1538
+ # `client.backups.policies`
1539
+ class BackupsPoliciesNamespace
1540
+ # @api private
1541
+ # @param transport [Transport]
1542
+ def initialize(transport)
1543
+ @transport = transport
1544
+ end
1545
+
1546
+ # Create a backup policy
1547
+ #
1548
+ # A policy must demand at least one of `maxRpoHours` and `minRetentionDays`
1549
+ # — one that demands nothing could never produce a finding and would read as
1550
+ # protection while providing none. An empty `resourceTypeIds` selects every
1551
+ # stateful resource type.
1552
+ #
1553
+ # POST /api/org/{orgId}/backups/policies
1554
+ #
1555
+ # Raises on 400: Bad request
1556
+ #
1557
+ # Raises on 409: Conflict
1558
+ #
1559
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1560
+ # constructed with.
1561
+ # @param body [Hash, nil] Request body, shaped as `BackupPolicyCreate`.
1562
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1563
+ # @return [Hash] Parsed JSON, shaped as `BackupPolicy` — see `sig/infrawrench/sdk.rbs`.
1564
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1565
+ def create(org_id: nil, body: nil, request_options: nil)
1566
+ @transport.request(
1567
+ http_method: "POST",
1568
+ path: "/api/org/{orgId}/backups/policies",
1569
+ path_params: { "orgId" => org_id },
1570
+ body: body,
1571
+ request_options: request_options
1572
+ )
1573
+ end
1574
+
1575
+ # Delete a backup policy
1576
+ #
1577
+ # Removes the objective. To stop a policy judging without losing it, set
1578
+ # `enabled` to false instead.
1579
+ #
1580
+ # DELETE /api/org/{orgId}/backups/policies/{policyId}
1581
+ #
1582
+ # Raises on 404: Not found
1583
+ #
1584
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1585
+ # constructed with.
1586
+ # @param policy_id [String]
1587
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1588
+ # @return [nil] This endpoint returns no content.
1589
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1590
+ def delete(policy_id:, org_id: nil, request_options: nil)
1591
+ @transport.request(
1592
+ http_method: "DELETE",
1593
+ path: "/api/org/{orgId}/backups/policies/{policyId}",
1594
+ path_params: { "orgId" => org_id, "policyId" => policy_id },
1595
+ accept: :empty,
1596
+ request_options: request_options
1597
+ )
1598
+ end
1599
+
1600
+ # List the organization's backup policies
1601
+ #
1602
+ # The recovery objectives coverage is judged against. A policy selects
1603
+ # resources by type and/or tag and demands a maximum RPO, a minimum
1604
+ # retention, or both.
1605
+ #
1606
+ # GET /api/org/{orgId}/backups/policies
1607
+ #
1608
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1609
+ # constructed with.
1610
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1611
+ # @return [Hash] Parsed JSON, shaped as `BackupPolicyList` — see `sig/infrawrench/sdk.rbs`.
1612
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1613
+ def get(org_id: nil, request_options: nil)
1614
+ @transport.request(
1615
+ http_method: "GET",
1616
+ path: "/api/org/{orgId}/backups/policies",
1617
+ path_params: { "orgId" => org_id },
1618
+ request_options: request_options
1619
+ )
1620
+ end
1621
+
1622
+ # Update a backup policy
1623
+ #
1624
+ # Omitted fields are left alone; an explicit `null` clears `tagKey`,
1625
+ # `tagValue`, `maxRpoHours` or `minRetentionDays`. The result is validated
1626
+ # after merging, so a patch that would leave the policy demanding nothing is
1627
+ # rejected.
1628
+ #
1629
+ # PATCH /api/org/{orgId}/backups/policies/{policyId}
1630
+ #
1631
+ # Raises on 400: Bad request
1632
+ #
1633
+ # Raises on 404: Not found
1634
+ #
1635
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1636
+ # constructed with.
1637
+ # @param policy_id [String]
1638
+ # @param body [Hash, nil] Request body, shaped as `BackupPolicyUpdate`.
1639
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1640
+ # @return [Hash] Parsed JSON, shaped as `BackupPolicy` — see `sig/infrawrench/sdk.rbs`.
1641
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1642
+ def update(policy_id:, org_id: nil, body: nil, request_options: nil)
1643
+ @transport.request(
1644
+ http_method: "PATCH",
1645
+ path: "/api/org/{orgId}/backups/policies/{policyId}",
1646
+ path_params: { "orgId" => org_id, "policyId" => policy_id },
1647
+ body: body,
1648
+ request_options: request_options
1649
+ )
1650
+ end
1651
+ end
1652
+
1653
+ # `client.backups`
1654
+ class BackupsNamespace
1655
+ # @return [BackupsPoliciesNamespace] `client.backups.policies`
1656
+ attr_reader :policies
1657
+
1658
+ # @api private
1659
+ # @param transport [Transport]
1660
+ def initialize(transport)
1661
+ @transport = transport
1662
+ @policies = BackupsPoliciesNamespace.new(@transport)
1663
+ end
1664
+
1665
+ # List backup coverage across synced resources
1666
+ #
1667
+ # What protects the organization's stateful resources, what does not, and
1668
+ # which backups protect nothing. Derived from already-synced inventory using
1669
+ # the `backupRole` and `backupPolicy` declarations plugins carry on their
1670
+ # resource types — no provider API calls are made and results reflect the
1671
+ # last sync. Findings are recomputed on every read rather than stored.
1672
+ # Orphaned backups carry a trailing-30-day spend quote when billing data is
1673
+ # available.
1674
+ #
1675
+ # GET /api/org/{orgId}/backups
1676
+ #
1677
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1678
+ # constructed with.
1679
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1680
+ # @return [Hash] Parsed JSON, shaped as `BackupCoverageResponse` — see
1681
+ # `sig/infrawrench/sdk.rbs`.
1682
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1683
+ def get(org_id: nil, request_options: nil)
1684
+ @transport.request(
1685
+ http_method: "GET",
1686
+ path: "/api/org/{orgId}/backups",
1687
+ path_params: { "orgId" => org_id },
1688
+ request_options: request_options
1689
+ )
1690
+ end
1691
+ end
1692
+
1538
1693
  # `client.bastions`
1539
1694
  class BastionsNamespace
1540
1695
  # @api private
@@ -2732,6 +2887,44 @@ module Infrawrench
2732
2887
  @revert = ChangesRevertNamespace.new(@transport)
2733
2888
  end
2734
2889
 
2890
+ # Cost impact of a page of changes
2891
+ #
2892
+ # For each change, compares the resource's per-day spend over the window
2893
+ # before it against the window after, and reports the difference as a
2894
+ # run-rate delta.
2895
+ #
2896
+ # A POST because it takes a list of ids, not because it writes: nothing is
2897
+ # stored. The answer is recomputed on every call, deliberately — provider
2898
+ # cost arrives late and is then restated, so a stored number would be a
2899
+ # wrong number that never corrects itself.
2900
+ #
2901
+ # Both windows exclude the change's own day (spend on it is half old shape,
2902
+ # half new) and today (an accruing day always reads as a dip), and are
2903
+ # clamped symmetrically to the days cost collection actually covers.
2904
+ #
2905
+ # _Requires permission: `costs:read`._
2906
+ #
2907
+ # POST /api/org/{orgId}/changes/cost-impacts
2908
+ #
2909
+ # Raises on 400: Bad request
2910
+ #
2911
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
2912
+ # constructed with.
2913
+ # @param body [Hash, nil] Request body, shaped as `ChangeCostImpactsRequest`.
2914
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
2915
+ # @return [Hash] Parsed JSON, shaped as `ChangeCostImpactsResponse` — see
2916
+ # `sig/infrawrench/sdk.rbs`.
2917
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
2918
+ def cost_impacts(org_id: nil, body: nil, request_options: nil)
2919
+ @transport.request(
2920
+ http_method: "POST",
2921
+ path: "/api/org/{orgId}/changes/cost-impacts",
2922
+ path_params: { "orgId" => org_id },
2923
+ body: body,
2924
+ request_options: request_options
2925
+ )
2926
+ end
2927
+
2735
2928
  # Org-wide change timeline (paginated, filterable)
2736
2929
  #
2737
2930
  # Change events recorded by the resource poller: each poll cycle diffs the
@@ -3252,6 +3445,43 @@ module Infrawrench
3252
3445
  @transport = transport
3253
3446
  end
3254
3447
 
3448
+ # Pin a change's or deploy's cost impact onto the cost charts
3449
+ #
3450
+ # Writes the finding as a cost annotation, so the step in the run rate is
3451
+ # explained on the graph where it shows. Re-posting the same subject
3452
+ # **rewords the existing note** rather than adding a second — which is what
3453
+ # makes it safe to pin a finding again once the provider has finished
3454
+ # restating. The note's date and report scope are never rewritten: they may
3455
+ # have been edited deliberately.
3456
+ #
3457
+ # A subject with no measurable impact is a 400, not a note reading
3458
+ # `$0.00/day`.
3459
+ #
3460
+ # _Requires permission: `costs:write`._
3461
+ #
3462
+ # POST /api/org/{orgId}/cost-annotations/change-impact
3463
+ #
3464
+ # Raises on 400: Bad request
3465
+ #
3466
+ # Raises on 404: Not found
3467
+ #
3468
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3469
+ # constructed with.
3470
+ # @param body [Hash, nil] Request body, shaped as `ChangeCostImpactAnnotationRequest`.
3471
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3472
+ # @return [Hash] Parsed JSON, shaped as `ChangeCostImpactAnnotationResponse` — see
3473
+ # `sig/infrawrench/sdk.rbs`.
3474
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3475
+ def change_impact(org_id: nil, body: nil, request_options: nil)
3476
+ @transport.request(
3477
+ http_method: "POST",
3478
+ path: "/api/org/{orgId}/cost-annotations/change-impact",
3479
+ path_params: { "orgId" => org_id },
3480
+ body: body,
3481
+ request_options: request_options
3482
+ )
3483
+ end
3484
+
3255
3485
  # Create a cost annotation
3256
3486
  #
3257
3487
  # _Requires permission: `costs:write`._
@@ -5918,6 +6148,43 @@ module Infrawrench
5918
6148
  @transport = transport
5919
6149
  end
5920
6150
 
6151
+ # Cost impact of a deployment run
6152
+ #
6153
+ # The same comparison as `POST /changes/cost-impacts`, run over the
6154
+ # resources this deploy provisioned, with a per-resource breakdown that sums
6155
+ # to the total.
6156
+ #
6157
+ # _Requires permission: `costs:read`._
6158
+ #
6159
+ # GET /api/org/{orgId}/deployments/runs/{id}/cost-impact
6160
+ #
6161
+ # Raises on 400: Bad request
6162
+ #
6163
+ # Raises on 404: Not found
6164
+ #
6165
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6166
+ # constructed with.
6167
+ # @param id [String]
6168
+ # @param window_days [Integer, nil]
6169
+ # @param cost_basis [String, nil] Which charge-type basis both windows are read on. `cash`
6170
+ # (the default) is what the provider charged on the day it charged it; `amortized` spreads a
6171
+ # commitment's up-front fee across the term it buys. It is echoed on every response because
6172
+ # a delta whose basis is unstated is unreadable — an amortized 'after' against a cash
6173
+ # 'before' looks exactly like a saving.
6174
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6175
+ # @return [Hash] Parsed JSON, shaped as `DeploymentCostImpact` — see
6176
+ # `sig/infrawrench/sdk.rbs`.
6177
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6178
+ def cost_impact(id:, org_id: nil, window_days: nil, cost_basis: nil, request_options: nil)
6179
+ @transport.request(
6180
+ http_method: "GET",
6181
+ path: "/api/org/{orgId}/deployments/runs/{id}/cost-impact",
6182
+ path_params: { "orgId" => org_id, "id" => id },
6183
+ query: { "windowDays" => window_days, "costBasis" => cost_basis },
6184
+ request_options: request_options
6185
+ )
6186
+ end
6187
+
5921
6188
  # Record a deployment that ran elsewhere
5922
6189
  #
5923
6190
  # The CLI builds on the operator's own machine, so the server never sees
@@ -13886,6 +14153,8 @@ module Infrawrench
13886
14153
  attr_reader :audit_logs
13887
14154
  # @return [AuthNamespace] `client.auth`
13888
14155
  attr_reader :auth
14156
+ # @return [BackupsNamespace] `client.backups`
14157
+ attr_reader :backups
13889
14158
  # @return [BastionsNamespace] `client.bastions`
13890
14159
  attr_reader :bastions
13891
14160
  # @return [BillingNamespace] `client.billing`
@@ -14050,6 +14319,7 @@ module Infrawrench
14050
14319
  @associations = AssociationsNamespace.new(@transport)
14051
14320
  @audit_logs = AuditLogsNamespace.new(@transport)
14052
14321
  @auth = AuthNamespace.new(@transport)
14322
+ @backups = BackupsNamespace.new(@transport)
14053
14323
  @bastions = BastionsNamespace.new(@transport)
14054
14324
  @billing = BillingNamespace.new(@transport)
14055
14325
  @billing_rules = BillingRulesNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.17.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.19.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.17.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.19.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.17.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.19.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.17.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.19.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.17.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.19.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.17.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.19.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.17.0"
18
+ VERSION = "1.19.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.17.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.19.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.17.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.19.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.17.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.19.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.17.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.19.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -546,6 +546,138 @@ module Infrawrench
546
546
  "totpUser" => String | nil
547
547
  }
548
548
 
549
+ # Spec schema: `BackupCoverageResponse`.
550
+ type backup_coverage_response = {
551
+ "findings" => Array[backup_finding],
552
+ "counts" => backup_severity_counts,
553
+ "kindCounts" => backup_kind_counts,
554
+ "totalCount" => Integer,
555
+ "resources" => Array[backup_coverage_row],
556
+ "summary" => backup_coverage_summary,
557
+ "generatedAt" => String
558
+ }
559
+
560
+ # Spec schema: `BackupCoverageRow`.
561
+ type backup_coverage_row = {
562
+ "resourceId" => String,
563
+ "pluginId" => plugin_id,
564
+ "pluginName" => String,
565
+ "resourceTypeId" => String,
566
+ "resourceTypeName" => String,
567
+ "accountId" => String,
568
+ "accountName" => String,
569
+ "displayName" => String,
570
+ "externalId" => String | nil,
571
+ "state" => "protected" | "automated" | "stale" | "unknown" | "unprotected",
572
+ "backupCount" => Integer,
573
+ "latestBackupId" => String | nil,
574
+ "latestBackupName" => String | nil,
575
+ "latestBackupAt" => String | nil,
576
+ "rpoHours" => Numeric | nil,
577
+ "automatedBackups" => bool | nil,
578
+ "retentionDays" => Numeric | nil,
579
+ "rpoPolicyId" => String | nil,
580
+ "rpoPolicyName" => String | nil,
581
+ "retentionPolicyId" => String | nil,
582
+ "retentionPolicyName" => String | nil,
583
+ "maxRpoHours" => Integer | nil,
584
+ "minRetentionDays" => Integer | nil
585
+ }
586
+
587
+ # Spec schema: `BackupCoverageSummary`.
588
+ type backup_coverage_summary = {
589
+ "statefulCount" => Integer,
590
+ "protectedCount" => Integer,
591
+ "unprotectedCount" => Integer,
592
+ "unknownCount" => Integer,
593
+ "backupCount" => Integer,
594
+ "orphanedBackupCount" => Integer,
595
+ "unattributableBackupCount" => Integer,
596
+ "orphanedGb" => Numeric | nil,
597
+ "orphanedMonthlyCost" => Numeric | nil,
598
+ "currency" => String | nil,
599
+ "worstRpoHours" => Numeric | nil
600
+ }
601
+
602
+ # Spec schema: `BackupFinding`.
603
+ type backup_finding = {
604
+ "resourceId" => String,
605
+ "pluginId" => plugin_id,
606
+ "pluginName" => String,
607
+ "resourceTypeId" => String,
608
+ "resourceTypeName" => String,
609
+ "accountId" => String,
610
+ "accountName" => String,
611
+ "displayName" => String,
612
+ "externalId" => String | nil,
613
+ "kind" => "unprotected" | "rpo-breach" | "retention-below-policy" | "orphaned-snapshot",
614
+ "severity" => "critical" | "high" | "medium" | "low",
615
+ "title" => String,
616
+ "detail" => String,
617
+ "policyId" => String | nil,
618
+ "policyName" => String | nil,
619
+ "rpoHours" => Numeric | nil,
620
+ "maxRpoHours" => Integer | nil,
621
+ "retentionDays" => Numeric | nil,
622
+ "minRetentionDays" => Integer | nil,
623
+ "latestBackupId" => String | nil,
624
+ "latestBackupName" => String | nil,
625
+ "latestBackupAt" => String | nil,
626
+ "sizeGb" => Numeric | nil,
627
+ "monthlyCost" => Numeric | nil,
628
+ "currency" => String | nil
629
+ }
630
+
631
+ # Spec schema: `BackupKindCounts`.
632
+ type backup_kind_counts = {
633
+ "unprotected" => Integer,
634
+ "rpo-breach" => Integer,
635
+ "retention-below-policy" => Integer,
636
+ "orphaned-snapshot" => Integer
637
+ }
638
+
639
+ # Spec schema: `BackupPolicy`.
640
+ type backup_policy = {
641
+ "id" => String,
642
+ "name" => String,
643
+ "resourceTypeIds" => Array[String],
644
+ "tagKey" => String | nil,
645
+ "tagValue" => String | nil,
646
+ "maxRpoHours" => Integer | nil,
647
+ "minRetentionDays" => Integer | nil,
648
+ "enabled" => bool,
649
+ "createdAt" => String,
650
+ "updatedAt" => String
651
+ }
652
+
653
+ # Spec schema: `BackupPolicyCreate`.
654
+ type backup_policy_create = {
655
+ "name" => String,
656
+ ?"resourceTypeIds" => Array[String],
657
+ ?"tagKey" => String | nil,
658
+ ?"tagValue" => String | nil,
659
+ ?"maxRpoHours" => Integer | nil,
660
+ ?"minRetentionDays" => Integer | nil,
661
+ ?"enabled" => bool
662
+ }
663
+
664
+ # Spec schema: `BackupPolicyList`.
665
+ type backup_policy_list = { "policies" => Array[backup_policy] }
666
+
667
+ # Spec schema: `BackupPolicyUpdate`.
668
+ type backup_policy_update = {
669
+ ?"name" => String,
670
+ ?"resourceTypeIds" => Array[String],
671
+ ?"tagKey" => String | nil,
672
+ ?"tagValue" => String | nil,
673
+ ?"maxRpoHours" => Integer | nil,
674
+ ?"minRetentionDays" => Integer | nil,
675
+ ?"enabled" => bool
676
+ }
677
+
678
+ # Spec schema: `BackupSeverityCounts`.
679
+ type backup_severity_counts = { "critical" => Integer, "high" => Integer, "medium" => Integer, "low" => Integer }
680
+
549
681
  # Spec schema: `Bastion`.
550
682
  type bastion = {
551
683
  "id" => String,
@@ -888,6 +1020,96 @@ module Infrawrench
888
1020
  "slots" => Array[capacity_slot]
889
1021
  }
890
1022
 
1023
+ # Which charge-type basis both windows are read on. `cash` (the default) is
1024
+ # what the provider charged on the day it charged it; `amortized` spreads a
1025
+ # commitment's up-front fee across the term it buys. It is echoed on every
1026
+ # response because a delta whose basis is unstated is unreadable — an
1027
+ # amortized 'after' against a cash 'before' looks exactly like a saving.
1028
+ #
1029
+ # Spec schema: `ChangeCostBasis`.
1030
+ type change_cost_basis = "cash" | "amortized"
1031
+
1032
+ # Spec schema: `ChangeCostImpact`.
1033
+ type change_cost_impact = {
1034
+ "status" => change_cost_impact_status,
1035
+ "costBasis" => change_cost_basis,
1036
+ "windowDays" => Integer,
1037
+ "effectiveWindowDays" => Integer,
1038
+ "eventDay" => String,
1039
+ "before" => change_cost_impact_window,
1040
+ "after" => change_cost_impact_window,
1041
+ "series" => Array[change_cost_impact_series],
1042
+ "confidence" => change_cost_impact_confidence,
1043
+ "reasons" => Array[change_cost_impact_reason],
1044
+ "overlappingChanges" => Integer
1045
+ }
1046
+
1047
+ # Spec schema: `ChangeCostImpactAnnotationRequest`.
1048
+ type change_cost_impact_annotation_request = {
1049
+ "subjectKind" => "change" | "deployment",
1050
+ "subjectId" => String,
1051
+ ?"windowDays" => Integer,
1052
+ ?"costBasis" => change_cost_basis
1053
+ }
1054
+
1055
+ # Spec schema: `ChangeCostImpactAnnotationResponse`.
1056
+ type change_cost_impact_annotation_response = { "annotationId" => String, "text" => String, "impact" => change_cost_impact }
1057
+
1058
+ # How much the delta is worth believing. Derived from the number of comparable
1059
+ # days per side (7+ high, 4+ medium, otherwise low) and dropped one tier when
1060
+ # other recorded changes touched the same resource inside the window.
1061
+ #
1062
+ # Spec schema: `ChangeCostImpactConfidence`.
1063
+ type change_cost_impact_confidence = "high" | "medium" | "low" | "none"
1064
+
1065
+ # Spec schema: `ChangeCostImpactEntry`.
1066
+ type change_cost_impact_entry = { "changeId" => String, "resourceId" => resource_id, "impact" => change_cost_impact }
1067
+
1068
+ # Why the result reads the way it does. Every non-`measured` status carries at
1069
+ # least one, and `measured` carries whatever lowered its confidence.
1070
+ # `period_native_provider` is the notable one: a provider that dates a whole
1071
+ # invoice period to the period's start cannot be read by a day-window
1072
+ # comparison at all.
1073
+ #
1074
+ # Spec schema: `ChangeCostImpactReason`.
1075
+ type change_cost_impact_reason = "no_cost_identity"
1076
+ | "period_native_provider"
1077
+ | "no_cost_data"
1078
+ | "no_coverage_before"
1079
+ | "no_coverage_after"
1080
+ | "short_window"
1081
+ | "window_clamped"
1082
+ | "overlapping_changes"
1083
+
1084
+ # Spec schema: `ChangeCostImpactSeries`.
1085
+ type change_cost_impact_series = {
1086
+ "currency" => String,
1087
+ "beforePerDay" => Numeric,
1088
+ "afterPerDay" => Numeric,
1089
+ "deltaPerDay" => Numeric,
1090
+ "deltaPercent" => Numeric | nil,
1091
+ "beforeTotal" => Numeric,
1092
+ "afterTotal" => Numeric
1093
+ }
1094
+
1095
+ # `measured` — both windows had collected data and the delta is real.
1096
+ # `insufficient_data` — the windows exist but are too short to compare.
1097
+ # `unknown` — nothing here can answer the question. **`unknown` is never
1098
+ # zero**: a resource with no cost data reports that we cannot say, not that
1099
+ # the change was free.
1100
+ #
1101
+ # Spec schema: `ChangeCostImpactStatus`.
1102
+ type change_cost_impact_status = "measured" | "insufficient_data" | "unknown"
1103
+
1104
+ # Spec schema: `ChangeCostImpactWindow`.
1105
+ type change_cost_impact_window = { "from" => String, "to" => String } | nil
1106
+
1107
+ # Spec schema: `ChangeCostImpactsRequest`.
1108
+ type change_cost_impacts_request = { "changeIds" => Array[String], ?"windowDays" => Integer, ?"costBasis" => change_cost_basis }
1109
+
1110
+ # Spec schema: `ChangeCostImpactsResponse`.
1111
+ type change_cost_impacts_response = { "impacts" => Array[change_cost_impact_entry] }
1112
+
891
1113
  # Spec schema: `ChangeFreeze`.
892
1114
  type change_freeze = {
893
1115
  "id" => String,
@@ -2197,6 +2419,27 @@ module Infrawrench
2197
2419
  # Spec schema: `DeployTriggerInput`.
2198
2420
  type deploy_trigger_input = { "repo" => String, "branch" => String, "env" => String, ?"answers" => Hash[String, String] }
2199
2421
 
2422
+ # Spec schema: `DeploymentCostImpact`.
2423
+ type deployment_cost_impact = {
2424
+ "runId" => String,
2425
+ "costBasis" => change_cost_basis,
2426
+ "windowDays" => Integer,
2427
+ "eventDay" => String,
2428
+ "resources" => Array[deployment_cost_impact_resource],
2429
+ "total" => Array[{ "currency" => String, "deltaPerDay" => Numeric }],
2430
+ "unknownResources" => Integer,
2431
+ "confidence" => change_cost_impact_confidence & untyped
2432
+ }
2433
+
2434
+ # Spec schema: `DeploymentCostImpactResource`.
2435
+ type deployment_cost_impact_resource = {
2436
+ "resourceId" => resource_id,
2437
+ "displayName" => String,
2438
+ "pluginId" => String,
2439
+ "resourceTypeId" => String,
2440
+ "impact" => change_cost_impact
2441
+ }
2442
+
2200
2443
  # Spec schema: `DeploymentRun`.
2201
2444
  type deployment_run = {
2202
2445
  "id" => String,
@@ -5969,6 +6212,7 @@ module Infrawrench
5969
6212
  | "expiring"
5970
6213
  | "posture"
5971
6214
  | "access-review"
6215
+ | "backups"
5972
6216
  | "dns"
5973
6217
  | "environment-diff"
5974
6218
  | "ssh-fanout"
@@ -6334,6 +6578,20 @@ module Infrawrench
6334
6578
  def orgs: (?request_options: Hash[Symbol, untyped]?) -> Array[org_membership]
6335
6579
  end
6336
6580
 
6581
+ class BackupsPoliciesNamespace
6582
+ def initialize: (Transport) -> void
6583
+ def create: (?org_id: String?, ?body: backup_policy_create?, ?request_options: Hash[Symbol, untyped]?) -> backup_policy
6584
+ def delete: (policy_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
6585
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> backup_policy_list
6586
+ def update: (policy_id: String, ?org_id: String?, ?body: backup_policy_update?, ?request_options: Hash[Symbol, untyped]?) -> backup_policy
6587
+ end
6588
+
6589
+ class BackupsNamespace
6590
+ attr_reader policies: BackupsPoliciesNamespace
6591
+ def initialize: (Transport) -> void
6592
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> backup_coverage_response
6593
+ end
6594
+
6337
6595
  class BastionsNamespace
6338
6596
  def initialize: (Transport) -> void
6339
6597
  def create: (body: create_bastion_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_bastion_response
@@ -6426,6 +6684,7 @@ module Infrawrench
6426
6684
  attr_reader alert_settings: ChangesAlertSettingsNamespace
6427
6685
  attr_reader revert: ChangesRevertNamespace
6428
6686
  def initialize: (Transport) -> void
6687
+ def cost_impacts: (?org_id: String?, ?body: change_cost_impacts_request?, ?request_options: Hash[Symbol, untyped]?) -> change_cost_impacts_response
6429
6688
  def get: (?org_id: String?, ?page: Integer?, ?page_size: Integer?, ?account_id: String?, ?resource_id: String?, ?kind: resource_change_kind?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> resource_change_feed_response
6430
6689
  def resource: (resource_id: String, ?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> resource_change_list_response
6431
6690
  end
@@ -6466,6 +6725,7 @@ module Infrawrench
6466
6725
 
6467
6726
  class CostAnnotationsNamespace
6468
6727
  def initialize: (Transport) -> void
6728
+ def change_impact: (?org_id: String?, ?body: change_cost_impact_annotation_request?, ?request_options: Hash[Symbol, untyped]?) -> change_cost_impact_annotation_response
6469
6729
  def create: (body: cost_annotation_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_annotation
6470
6730
  def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
6471
6731
  def get: (?org_id: String?, ?report_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "annotations" => Array[cost_annotation] }
@@ -6660,6 +6920,7 @@ module Infrawrench
6660
6920
 
6661
6921
  class DeploymentsRunsNamespace
6662
6922
  def initialize: (Transport) -> void
6923
+ def cost_impact: (id: String, ?org_id: String?, ?window_days: Integer?, ?cost_basis: change_cost_basis?, ?request_options: Hash[Symbol, untyped]?) -> deployment_cost_impact
6663
6924
  def create: (?org_id: String?, ?body: deployment_run_input?, ?request_options: Hash[Symbol, untyped]?) -> { "id" => String }
6664
6925
  def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> deployment_run
6665
6926
  def list: (?org_id: String?, ?env: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> Array[deployment_run]
@@ -7255,6 +7516,7 @@ module Infrawrench
7255
7516
  attr_reader associations: AssociationsNamespace
7256
7517
  attr_reader audit_logs: AuditLogsNamespace
7257
7518
  attr_reader auth: AuthNamespace
7519
+ attr_reader backups: BackupsNamespace
7258
7520
  attr_reader bastions: BastionsNamespace
7259
7521
  attr_reader billing: BillingNamespace
7260
7522
  attr_reader billing_rules: BillingRulesNamespace
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.17.0
4
+ version: 1.19.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.17.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.19.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.17.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.19.0).
62
62
  test_files: []