infrawrench-sdk 1.0.0 → 1.2.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: e45c71379c84999b88d2b1d309a67f3725e4ba2cabed2b1ca4fd36db8a7d677a
4
- data.tar.gz: 0bd88d1530add69a8816f15cfdfd2f4feab6013a515832da475d74fba4bbf849
3
+ metadata.gz: 44bdb9fdba2323135ddce49dcf7722b06efd664d30ddf5059eb926272b4bfcd3
4
+ data.tar.gz: c42f98392e673f3a5b1a8e6a17566374c5ed41eb38aa841deb13fd60070371ca
5
5
  SHA512:
6
- metadata.gz: 1e4e457b41335197e2e971665f566eee1278aa3cdf68e6658aa93d75628c4dea104674960494ec4c5b8b3b733e64d8f40101433ae93c86a249cb1d4c8945b76d
7
- data.tar.gz: 5e14b2e4d27d57e22c0dee347909d41908cc36fc87f894a5af9ca56f56079f21c80a93c8cd09f4818fd3fb71c88922653831983e9318ea3d0623cea097167c7a
6
+ metadata.gz: 532efd679fa7560bf54a06fc1fd2f32fe335171c84782d621cced4cefe50618453947e2084626fd2afc70b880dbb9f0428339926ba59541c3558aa885e5ce594
7
+ data.tar.gz: 3fe95ccc73285960fd722fa4e1fef67b3d70dcc35acb2891addc4fb49817e7060f300313afd7a7ad58ddfb73b43d9481d12903625128d1d85d3814106fcd360a
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.0.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.2.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
- 409 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 435 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.0.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.2.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.0.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.2.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.0.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.0.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.2.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.2.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.0.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.2.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.0.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.2.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -2001,6 +2001,124 @@ module Infrawrench
2001
2001
  end
2002
2002
  end
2003
2003
 
2004
+ # `client.config`
2005
+ class ConfigNamespace
2006
+ # @api private
2007
+ # @param transport [Transport]
2008
+ def initialize(transport)
2009
+ @transport = transport
2010
+ end
2011
+
2012
+ # Apply a configuration document
2013
+ #
2014
+ # Applies the document in a single transaction and returns the plan that was
2015
+ # executed — all or nothing, so a failure never leaves the organization
2016
+ # halfway between two configurations.
2017
+ #
2018
+ # Requires the write permission of every section the document carries, so
2019
+ # this cannot be used to reach past a role that withholds one.
2020
+ #
2021
+ # _Requires permission: `config:write`._
2022
+ #
2023
+ # POST /api/org/{orgId}/config/apply
2024
+ #
2025
+ # Raises on 400: Bad request
2026
+ #
2027
+ # Raises on 402: Payment required — the organization's plan does not include
2028
+ # this
2029
+ #
2030
+ # Raises on 403: Forbidden
2031
+ #
2032
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
2033
+ # constructed with.
2034
+ # @param body [Hash] Request body, shaped as `OrgConfigRequest`.
2035
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
2036
+ # @return [Hash] Parsed JSON, shaped as `OrgConfigApplyResult` — see
2037
+ # `sig/infrawrench/sdk.rbs`.
2038
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
2039
+ def apply(body:, org_id: nil, request_options: nil)
2040
+ @transport.request(
2041
+ http_method: "POST",
2042
+ path: "/api/org/{orgId}/config/apply",
2043
+ path_params: { "orgId" => org_id },
2044
+ body: body,
2045
+ request_options: request_options
2046
+ )
2047
+ end
2048
+
2049
+ # Export the organization's configuration as one document
2050
+ #
2051
+ # Dashboards, workflows, custom graphs, budgets, metric alerts, synthetic
2052
+ # probes, cost centres, the tag policy and the org-wide alert settings,
2053
+ # addressed by stable keys rather than row ids so the result applies to any
2054
+ # organization.
2055
+ #
2056
+ # Credentials, accounts, resources and workflow signing secrets are never
2057
+ # included. Ordering is stable, so re-exporting an unchanged organization
2058
+ # produces the same bytes — commit it to git and the diff is the change.
2059
+ #
2060
+ # Requires the read permission of every section exported; it refuses rather
2061
+ # than silently omitting one, because a partial document applied in
2062
+ # `replace` mode would delete what the exporter could not see.
2063
+ #
2064
+ # _Requires permission: `config:read`._
2065
+ #
2066
+ # GET /api/org/{orgId}/config/export
2067
+ #
2068
+ # Raises on 400: Bad request
2069
+ #
2070
+ # Raises on 403: Forbidden
2071
+ #
2072
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
2073
+ # constructed with.
2074
+ # @param sections [String, nil] Comma-separated subset of sections to export. Defaults to
2075
+ # all of: budgets, customGraphs, workflows, dashboards, metricAlerts, probes, costCentres,
2076
+ # tagPolicy, alertSettings.
2077
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
2078
+ # @return [Hash] Parsed JSON, shaped as `OrgConfigDocument` — see `sig/infrawrench/sdk.rbs`.
2079
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
2080
+ def export(org_id: nil, sections: nil, request_options: nil)
2081
+ @transport.request(
2082
+ http_method: "GET",
2083
+ path: "/api/org/{orgId}/config/export",
2084
+ path_params: { "orgId" => org_id },
2085
+ query: { "sections" => sections },
2086
+ request_options: request_options
2087
+ )
2088
+ end
2089
+
2090
+ # Preview what applying a document would do
2091
+ #
2092
+ # The dry run: validates the document, resolves its cross-references against
2093
+ # this organization, and returns the create/update/delete/unchanged plan
2094
+ # without writing anything. Read-only, so a reviewer with read access can
2095
+ # run it on a pull request.
2096
+ #
2097
+ # _Requires permission: `config:read`._
2098
+ #
2099
+ # POST /api/org/{orgId}/config/plan
2100
+ #
2101
+ # Raises on 400: Bad request
2102
+ #
2103
+ # Raises on 403: Forbidden
2104
+ #
2105
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
2106
+ # constructed with.
2107
+ # @param body [Hash] Request body, shaped as `OrgConfigRequest`.
2108
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
2109
+ # @return [Hash] Parsed JSON, shaped as `OrgConfigPlan` — see `sig/infrawrench/sdk.rbs`.
2110
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
2111
+ def plan(body:, org_id: nil, request_options: nil)
2112
+ @transport.request(
2113
+ http_method: "POST",
2114
+ path: "/api/org/{orgId}/config/plan",
2115
+ path_params: { "orgId" => org_id },
2116
+ body: body,
2117
+ request_options: request_options
2118
+ )
2119
+ end
2120
+ end
2121
+
2004
2122
  # `client.connect`
2005
2123
  class ConnectNamespace
2006
2124
  # @api private
@@ -4063,6 +4181,74 @@ module Infrawrench
4063
4181
  end
4064
4182
  end
4065
4183
 
4184
+ # `client.environment_diff`
4185
+ class EnvironmentDiffNamespace
4186
+ # @api private
4187
+ # @param transport [Transport]
4188
+ def initialize(transport)
4189
+ @transport = transport
4190
+ end
4191
+
4192
+ # Compare two accounts' resource inventories
4193
+ #
4194
+ # Compares two accounts of the same provider — typically staging against
4195
+ # production — over already-synced state: which resource types exist in one
4196
+ # and not the other, the per-type count deltas, and the fields on which two
4197
+ # corresponding resources disagree (instance class, engine version, feature
4198
+ # flags).
4199
+ #
4200
+ # Resources are paired by resource type plus name with environment words
4201
+ # removed, so `api-staging` lines up with `api-prod` without any naming
4202
+ # convention to configure. By default the comparison hides divergences that
4203
+ # are artefacts of being two different resources — ids, links, network
4204
+ # addresses and timestamps — because every resource has different ones; pass
4205
+ # `includeIdentityFields=true` to see them.
4206
+ #
4207
+ # Read-only and cheap: no provider API calls are made, so results reflect
4208
+ # the last sync.
4209
+ #
4210
+ # _Requires permission: `resources:read`._
4211
+ #
4212
+ # GET /api/org/{orgId}/environment-diff
4213
+ #
4214
+ # Raises on 400: Bad request
4215
+ #
4216
+ # Raises on 404: Not found
4217
+ #
4218
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4219
+ # constructed with.
4220
+ # @param a [String] Baseline account id — by convention the environment that works.
4221
+ # @param b [String] Compared account id. Must differ from `a` and use the same provider.
4222
+ # @param resource_type_id [String, nil] Compare one resource type only.
4223
+ # @param include_identity_fields [String, nil] Compare identity and timestamp fields too,
4224
+ # instead of filtering them out.
4225
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4226
+ # @return [Hash] Parsed JSON, shaped as `EnvironmentDiffResponse` — see
4227
+ # `sig/infrawrench/sdk.rbs`.
4228
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4229
+ def get(
4230
+ a:,
4231
+ b:,
4232
+ org_id: nil,
4233
+ resource_type_id: nil,
4234
+ include_identity_fields: nil,
4235
+ request_options: nil
4236
+ )
4237
+ @transport.request(
4238
+ http_method: "GET",
4239
+ path: "/api/org/{orgId}/environment-diff",
4240
+ path_params: { "orgId" => org_id },
4241
+ query: {
4242
+ "a" => a,
4243
+ "b" => b,
4244
+ "resourceTypeId" => resource_type_id,
4245
+ "includeIdentityFields" => include_identity_fields
4246
+ },
4247
+ request_options: request_options
4248
+ )
4249
+ end
4250
+ end
4251
+
4066
4252
  # `client.expiring.settings`
4067
4253
  class ExpiringSettingsNamespace
4068
4254
  # @api private
@@ -9244,6 +9430,8 @@ module Infrawrench
9244
9430
  attr_reader :change_freezes
9245
9431
  # @return [ChangesNamespace] `client.changes`
9246
9432
  attr_reader :changes
9433
+ # @return [ConfigNamespace] `client.config`
9434
+ attr_reader :config
9247
9435
  # @return [ConnectNamespace] `client.connect`
9248
9436
  attr_reader :connect
9249
9437
  # @return [CostCentresNamespace] `client.cost_centres`
@@ -9268,6 +9456,8 @@ module Infrawrench
9268
9456
  attr_reader :dns
9269
9457
  # @return [DockerNamespace] `client.docker`
9270
9458
  attr_reader :docker
9459
+ # @return [EnvironmentDiffNamespace] `client.environment_diff`
9460
+ attr_reader :environment_diff
9271
9461
  # @return [ExpiringNamespace] `client.expiring`
9272
9462
  attr_reader :expiring
9273
9463
  # @return [InvitationsNamespace] `client.invitations`
@@ -9356,6 +9546,7 @@ module Infrawrench
9356
9546
  @budgets = BudgetsNamespace.new(@transport)
9357
9547
  @change_freezes = ChangeFreezesNamespace.new(@transport)
9358
9548
  @changes = ChangesNamespace.new(@transport)
9549
+ @config = ConfigNamespace.new(@transport)
9359
9550
  @connect = ConnectNamespace.new(@transport)
9360
9551
  @cost_centres = CostCentresNamespace.new(@transport)
9361
9552
  @costs = CostsNamespace.new(@transport)
@@ -9368,6 +9559,7 @@ module Infrawrench
9368
9559
  @digest = DigestNamespace.new(@transport)
9369
9560
  @dns = DnsNamespace.new(@transport)
9370
9561
  @docker = DockerNamespace.new(@transport)
9562
+ @environment_diff = EnvironmentDiffNamespace.new(@transport)
9371
9563
  @expiring = ExpiringNamespace.new(@transport)
9372
9564
  @invitations = InvitationsNamespace.new(@transport)
9373
9565
  @kv = KvNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.0.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.2.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.0.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.2.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.0.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.2.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.0.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.2.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.0.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.2.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.0.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.2.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.0.0"
18
+ VERSION = "1.2.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.0.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.2.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.0.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.2.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.0.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.2.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.0.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.2.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1424,6 +1424,77 @@ module Infrawrench
1424
1424
  ?"enumValues" => Array[String]
1425
1425
  }
1426
1426
 
1427
+ # Spec schema: `EnvironmentDiffEntry`.
1428
+ type environment_diff_entry = {
1429
+ "key" => String,
1430
+ "resourceTypeId" => String,
1431
+ "resourceTypeName" => String,
1432
+ "status" => "only-in-a" | "only-in-b" | "changed",
1433
+ "a" => environment_diff_resource_ref,
1434
+ "b" => environment_diff_resource_ref & untyped,
1435
+ "changes" => Array[environment_diff_field_change],
1436
+ "suppressedCount" => Integer
1437
+ }
1438
+
1439
+ # Spec schema: `EnvironmentDiffFieldChange`.
1440
+ type environment_diff_field_change = { "field" => String, ?"a" => untyped, ?"b" => untyped }
1441
+
1442
+ # Null when the resource exists only on B.
1443
+ #
1444
+ # Spec schema: `EnvironmentDiffResourceRef`.
1445
+ type environment_diff_resource_ref = {
1446
+ "resourceId" => String,
1447
+ "accountId" => String,
1448
+ "displayName" => String,
1449
+ "externalId" => String | nil
1450
+ }
1451
+ | nil
1452
+
1453
+ # Spec schema: `EnvironmentDiffResponse`.
1454
+ type environment_diff_response = {
1455
+ "a" => environment_diff_side_summary,
1456
+ "b" => environment_diff_side_summary,
1457
+ "pluginId" => plugin_id,
1458
+ "pluginName" => String,
1459
+ "types" => Array[environment_diff_type_summary],
1460
+ "entries" => Array[environment_diff_entry],
1461
+ "totals" => environment_diff_totals,
1462
+ "unavailableTypes" => Array[environment_diff_unavailable_type],
1463
+ "includeIdentityFields" => bool,
1464
+ "generatedAt" => String
1465
+ }
1466
+
1467
+ # Spec schema: `EnvironmentDiffSideSummary`.
1468
+ type environment_diff_side_summary = { "accountId" => String, "accountName" => String, "resourceCount" => Integer }
1469
+
1470
+ # Spec schema: `EnvironmentDiffTotals`.
1471
+ type environment_diff_totals = {
1472
+ "onlyInA" => Integer,
1473
+ "onlyInB" => Integer,
1474
+ "changed" => Integer,
1475
+ "identical" => Integer,
1476
+ "typesOnlyInA" => Integer,
1477
+ "typesOnlyInB" => Integer,
1478
+ "suppressedFieldChanges" => Integer
1479
+ }
1480
+
1481
+ # Spec schema: `EnvironmentDiffTypeSummary`.
1482
+ type environment_diff_type_summary = {
1483
+ "resourceTypeId" => String,
1484
+ "resourceTypeName" => String,
1485
+ "countA" => Integer,
1486
+ "countB" => Integer,
1487
+ "delta" => Integer,
1488
+ "onlyInA" => Integer,
1489
+ "onlyInB" => Integer,
1490
+ "changed" => Integer,
1491
+ "identical" => Integer,
1492
+ "missingFrom" => "a" | "b" | nil
1493
+ }
1494
+
1495
+ # Spec schema: `EnvironmentDiffUnavailableType`.
1496
+ type environment_diff_unavailable_type = { "resourceTypeId" => String, "resourceTypeName" => String, "message" => String }
1497
+
1427
1498
  # Spec schema: `Error`.
1428
1499
  type error = { "error" => String }
1429
1500
 
@@ -1934,6 +2005,234 @@ module Infrawrench
1934
2005
  # Spec schema: `Ok`.
1935
2006
  type ok = { "ok" => bool }
1936
2007
 
2008
+ # Org-wide notification tuning. Cooldown claims (`lastNotifiedAt`,
2009
+ # `lastSentWeekStart`) are deliberately absent: they are poller state, and
2010
+ # resetting one from an apply would re-open a quiet period and page people
2011
+ # twice.
2012
+ #
2013
+ # Spec schema: `OrgConfigAlertSettings`.
2014
+ type org_config_alert_settings = {
2015
+ ?"costAnomaly" => {
2016
+ "sigmas" => Numeric,
2017
+ "minDeltaCents" => Integer,
2018
+ "newSourceMinCents" => Integer,
2019
+ "smsAlerts" => "off" | "new_source" | "all"
2020
+ },
2021
+ ?"drift" => {
2022
+ "notifyCreated" => bool,
2023
+ "notifyUpdated" => bool,
2024
+ "notifyDeleted" => bool,
2025
+ "cooldownMinutes" => Integer,
2026
+ "minChanges" => Integer,
2027
+ "accounts" => Array[String]
2028
+ },
2029
+ ?"expiry" => { "enabled" => bool, "leadDays" => Integer },
2030
+ ?"posture" => { "enabled" => bool },
2031
+ ?"digest" => {
2032
+ "enabled" => bool,
2033
+ "timezone" => String,
2034
+ "sendDay" => Integer,
2035
+ "sendHour" => Integer,
2036
+ "narrativeEnabled" => bool,
2037
+ "recipients" => Array[String]
2038
+ }
2039
+ }
2040
+
2041
+ # Spec schema: `OrgConfigApplyResult`.
2042
+ type org_config_apply_result = org_config_plan & { "applied" => bool }
2043
+
2044
+ # Spec schema: `OrgConfigBudget`.
2045
+ type org_config_budget = {
2046
+ "key" => String,
2047
+ "name" => String,
2048
+ "amountCents" => Integer,
2049
+ ?"currency" => String,
2050
+ ?"filters" => Array[org_config_cost_filter],
2051
+ "thresholds" => Array[{ "type" => "actual" | "forecast", "percent" => Integer }]
2052
+ }
2053
+
2054
+ # Spec schema: `OrgConfigChange`.
2055
+ type org_config_change = {
2056
+ "section" => org_config_section,
2057
+ "key" => String,
2058
+ "name" => String,
2059
+ "action" => "create" | "update" | "delete" | "unchanged",
2060
+ ?"fields" => Array[String]
2061
+ }
2062
+
2063
+ # Spec schema: `OrgConfigCostCentre`.
2064
+ type org_config_cost_centre = {
2065
+ "key" => String,
2066
+ "name" => String,
2067
+ ?"description" => String | nil,
2068
+ ?"rules" => Array[{
2069
+ "priority" => Integer,
2070
+ ?"match" => {
2071
+ ?"tagKey" => String,
2072
+ ?"tagValue" => String,
2073
+ ?"account" => String,
2074
+ ?"pluginId" => String,
2075
+ ?"service" => String
2076
+ }
2077
+ }]
2078
+ }
2079
+
2080
+ # Spec schema: `OrgConfigCostFilter`.
2081
+ type org_config_cost_filter = {
2082
+ "dimension" => String,
2083
+ "op" => "in" | "not_in",
2084
+ "values" => Array[String],
2085
+ ?"tagKey" => String
2086
+ }
2087
+
2088
+ # Spec schema: `OrgConfigCustomGraph`.
2089
+ type org_config_custom_graph = { "key" => String, "name" => String, ?"description" => String | nil, "source" => String }
2090
+
2091
+ # Spec schema: `OrgConfigDashboard`.
2092
+ type org_config_dashboard = {
2093
+ "key" => String,
2094
+ "name" => String,
2095
+ ?"isDefault" => bool,
2096
+ ?"cards" => Array[org_config_dashboard_card]
2097
+ }
2098
+
2099
+ # One card. Position is the index in the dashboard's `cards` array — the grid
2100
+ # order all three card kinds share.
2101
+ #
2102
+ # Spec schema: `OrgConfigDashboardCard`.
2103
+ type org_config_dashboard_card = {
2104
+ "kind" => "widget",
2105
+ "widgetKind" => "cost_graph" | "budget" | "custom_graph",
2106
+ ?"title" => String,
2107
+ ?"config" => json_object,
2108
+ ?"budgetKey" => String,
2109
+ ?"graphKey" => String,
2110
+ ?"width" => Integer,
2111
+ ?"height" => Integer
2112
+ }
2113
+ | { "kind" => "workflow", "workflowKey" => String }
2114
+ | {
2115
+ "kind" => "resource",
2116
+ "pluginId" => String,
2117
+ "resourceTypeId" => String,
2118
+ "externalId" => String,
2119
+ "account" => String,
2120
+ ?"width" => Integer,
2121
+ ?"height" => Integer
2122
+ }
2123
+
2124
+ # An organization's configuration. Every section is optional — a document that
2125
+ # omits one leaves it entirely alone, in both apply modes.
2126
+ #
2127
+ # Spec schema: `OrgConfigDocument`.
2128
+ type org_config_document = {
2129
+ ?"version" => Integer,
2130
+ ?"exportedAt" => String,
2131
+ ?"exportedFrom" => { "organizationId" => String, "organizationName" => String },
2132
+ ?"budgets" => Array[org_config_budget],
2133
+ ?"customGraphs" => Array[org_config_custom_graph],
2134
+ ?"workflows" => Array[org_config_workflow],
2135
+ ?"dashboards" => Array[org_config_dashboard],
2136
+ ?"metricAlerts" => Array[org_config_metric_alert],
2137
+ ?"probes" => Array[org_config_probe],
2138
+ ?"costCentres" => Array[org_config_cost_centre],
2139
+ ?"tagPolicy" => {
2140
+ "requiredTags" => Array[{ "key" => String, ?"allowedValues" => Array[String] }],
2141
+ "enforceOnCreate" => bool
2142
+ },
2143
+ ?"alertSettings" => org_config_alert_settings
2144
+ }
2145
+
2146
+ # Spec schema: `OrgConfigMetricAlert`.
2147
+ type org_config_metric_alert = {
2148
+ "key" => String,
2149
+ "name" => String,
2150
+ ?"pluginId" => String | nil,
2151
+ ?"resourceTypeId" => String | nil,
2152
+ ?"tagKey" => String | nil,
2153
+ ?"tagValue" => String | nil,
2154
+ "metricKey" => String,
2155
+ "comparator" => ">" | ">=" | "<" | "<=",
2156
+ "threshold" => Numeric,
2157
+ ?"forMinutes" => Integer,
2158
+ ?"cooldownMinutes" => Integer,
2159
+ ?"enabled" => bool
2160
+ }
2161
+
2162
+ # Spec schema: `OrgConfigPlan`.
2163
+ type org_config_plan = {
2164
+ "mode" => "merge" | "replace",
2165
+ "changes" => Array[org_config_change],
2166
+ "unresolved" => Array[org_config_unresolved],
2167
+ "counts" => { "create" => Integer, "update" => Integer, "delete" => Integer, "unchanged" => Integer }
2168
+ }
2169
+
2170
+ # Spec schema: `OrgConfigProbe`.
2171
+ type org_config_probe = {
2172
+ "key" => String,
2173
+ "name" => String,
2174
+ "url" => String,
2175
+ ?"method" => String,
2176
+ ?"intervalSeconds" => Integer,
2177
+ ?"timeoutMs" => Integer,
2178
+ ?"failureThreshold" => Integer,
2179
+ ?"enabled" => bool
2180
+ }
2181
+
2182
+ # Spec schema: `OrgConfigRequest`.
2183
+ type org_config_request = { "document" => org_config_document, ?"mode" => "merge" | "replace" }
2184
+
2185
+ # Spec schema: `OrgConfigSection`.
2186
+ type org_config_section = "budgets"
2187
+ | "customGraphs"
2188
+ | "workflows"
2189
+ | "dashboards"
2190
+ | "metricAlerts"
2191
+ | "probes"
2192
+ | "costCentres"
2193
+ | "tagPolicy"
2194
+ | "alertSettings"
2195
+
2196
+ # Something the document asked for that this organization could not satisfy —
2197
+ # a pin for a resource nobody has synced, an account name that does not exist
2198
+ # here. Not fatal: the affected card, clause or deletion is dropped and the
2199
+ # rest of the document still applies.
2200
+ #
2201
+ # Spec schema: `OrgConfigUnresolved`.
2202
+ type org_config_unresolved = { "section" => org_config_section, "key" => String, "detail" => String }
2203
+
2204
+ # A workflow. The git-webhook signing secret is deliberately absent — it is
2205
+ # write-only, so a document can neither leak nor set one.
2206
+ #
2207
+ # Spec schema: `OrgConfigWorkflow`.
2208
+ type org_config_workflow = {
2209
+ "key" => String,
2210
+ "name" => String,
2211
+ ?"description" => String | nil,
2212
+ "source" => String,
2213
+ ?"trigger" => org_config_workflow_trigger,
2214
+ ?"metrics" => Array[{ "key" => String, "label" => String, ?"unit" => String | nil, ?"type" => String }],
2215
+ ?"enabled" => bool
2216
+ }
2217
+
2218
+ # Spec schema: `OrgConfigWorkflowTrigger`.
2219
+ type org_config_workflow_trigger = { "kind" => "manual" }
2220
+ | { "kind" => "cron", "expression" => String, ?"timezone" => String }
2221
+ | {
2222
+ "kind" => "git",
2223
+ ?"provider" => String,
2224
+ ?"repo" => String,
2225
+ ?"branch" => String,
2226
+ ?"events" => Array[String],
2227
+ ?"installationId" => Integer
2228
+ }
2229
+ | {
2230
+ "kind" => "budget",
2231
+ "budgetKey" => String,
2232
+ ?"percent" => Numeric,
2233
+ ?"metric" => "actual" | "forecast"
2234
+ }
2235
+
1937
2236
  # Spec schema: `OrgMember`.
1938
2237
  type org_member = {
1939
2238
  "id" => String,
@@ -2144,6 +2443,8 @@ module Infrawrench
2144
2443
  | "freezes:write"
2145
2444
  | "freezes:override"
2146
2445
  | "tag-policy:override"
2446
+ | "config:read"
2447
+ | "config:write"
2147
2448
  | "audit:read"
2148
2449
  | "access:read"
2149
2450
  | "access:request"
@@ -3749,6 +4050,7 @@ module Infrawrench
3749
4050
  | "expiring"
3750
4051
  | "posture"
3751
4052
  | "dns"
4053
+ | "environment-diff"
3752
4054
  | "ssh-fanout"
3753
4055
  | "metric-alerts"
3754
4056
  | "probes"
@@ -4068,6 +4370,13 @@ module Infrawrench
4068
4370
  def resource: (resource_id: String, ?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> resource_change_list_response
4069
4371
  end
4070
4372
 
4373
+ class ConfigNamespace
4374
+ def initialize: (Transport) -> void
4375
+ def apply: (body: org_config_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> org_config_apply_result
4376
+ def export: (?org_id: String?, ?sections: String?, ?request_options: Hash[Symbol, untyped]?) -> org_config_document
4377
+ def plan: (body: org_config_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> org_config_plan
4378
+ end
4379
+
4071
4380
  class ConnectNamespace
4072
4381
  def initialize: (Transport) -> void
4073
4382
  def env_deploy: (body: connect_env_deploy_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
@@ -4225,6 +4534,11 @@ module Infrawrench
4225
4534
  def command: (body: docker_command_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> docker_command_response
4226
4535
  end
4227
4536
 
4537
+ class EnvironmentDiffNamespace
4538
+ def initialize: (Transport) -> void
4539
+ def get: (a: String, b: String, ?org_id: String?, ?resource_type_id: String?, ?include_identity_fields: "true" | "false"?, ?request_options: Hash[Symbol, untyped]?) -> environment_diff_response
4540
+ end
4541
+
4228
4542
  class ExpiringSettingsNamespace
4229
4543
  def initialize: (Transport) -> void
4230
4544
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> expiry_alert_settings
@@ -4636,6 +4950,7 @@ module Infrawrench
4636
4950
  attr_reader budgets: BudgetsNamespace
4637
4951
  attr_reader change_freezes: ChangeFreezesNamespace
4638
4952
  attr_reader changes: ChangesNamespace
4953
+ attr_reader config: ConfigNamespace
4639
4954
  attr_reader connect: ConnectNamespace
4640
4955
  attr_reader cost_centres: CostCentresNamespace
4641
4956
  attr_reader costs: CostsNamespace
@@ -4648,6 +4963,7 @@ module Infrawrench
4648
4963
  attr_reader digest: DigestNamespace
4649
4964
  attr_reader dns: DnsNamespace
4650
4965
  attr_reader docker: DockerNamespace
4966
+ attr_reader environment_diff: EnvironmentDiffNamespace
4651
4967
  attr_reader expiring: ExpiringNamespace
4652
4968
  attr_reader invitations: InvitationsNamespace
4653
4969
  attr_reader kv: KvNamespace
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.0.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infrawrench LLC
@@ -9,9 +9,9 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2026-08-08 00:00:00.000000000 Z
12
+ date: 2026-08-09 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v1.0.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.2.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.0.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.2.0).
62
62
  test_files: []