infrawrench-sdk 0.25.0 → 0.27.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: 007df63dcd655a2601d597b0d804ef854fc3b5509b8b0a21a9f286b8b5997783
4
- data.tar.gz: 9fc7e36443cd20a65a900d62c5e8b910f321011408f92de93e640b63d023461f
3
+ metadata.gz: bfbc2c017e0fefb9e4b1daa4f2a8ac2794717bff63f25e59ade00168e87e434b
4
+ data.tar.gz: 77ce3e6830114def58a200abd701bb2f5361c74fd0ed6253d89554ee4d3dc97f
5
5
  SHA512:
6
- metadata.gz: 02d2b41b61b2c73e9537a06d040d647a5a04e446cb1637fc45108405ac09255c2576974426558082ea58e828cd52bcbcb6baf9640fc5d045f3dd911f2a710fff
7
- data.tar.gz: 237e0d8d2d8558a681036f38a09adbd29c155cd34c876934db18c486eaa5b653e179b53c807ad126ef916ade3cf29bcbc025576dd57766e8a2601a4aa20711ab
6
+ metadata.gz: 788ed975c54ffa008b118feab4d6284be292e267cfdfefe4f0ff27f2cf3675fea67e85fa28f31c72c7db83ca766f077e4434a3ff89ce03561df8eec44e753645
7
+ data.tar.gz: 864e4ace06f40692888a6fb892339ea4619966d56d98b8a2440c749d37f03a159f9cb344c6ab67ff3d96a61d76138ba32ea6ad751d63e676e6c4fac99ac4087d
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # infrawrench-sdk
2
2
 
3
- Generated Ruby client for the Infrawrench API (API version `0.25.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `0.27.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
- 246 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 254 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 v0.25.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v0.27.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 0.25.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 0.27.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 (v0.25.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v0.25.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 (v0.27.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v0.27.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 v0.25.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v0.27.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 0.25.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 0.27.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1269,12 +1269,78 @@ module Infrawrench
1269
1269
  end
1270
1270
  end
1271
1271
 
1272
+ # `client.changes.alert_settings`
1273
+ class ChangesAlertSettingsNamespace
1274
+ # @api private
1275
+ # @param transport [Transport]
1276
+ def initialize(transport)
1277
+ @transport = transport
1278
+ end
1279
+
1280
+ # Get the organization's resource-drift alert filter
1281
+ #
1282
+ # Drift notifications are batched: at most one message per organization per
1283
+ # `cooldownMinutes`, covering every change since the previous one. These
1284
+ # settings decide which changes count and how often a message may go out.
1285
+ # Who receives it is the `resourceDrift` opt-in on push preferences, Slack
1286
+ # channels and Teams webhooks — off by default on all three.
1287
+ #
1288
+ # GET /api/org/{orgId}/changes/alert-settings
1289
+ #
1290
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1291
+ # constructed with.
1292
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1293
+ # @return [Hash] Parsed JSON, shaped as `DriftAlertSettings` — see
1294
+ # `sig/infrawrench/sdk.rbs`.
1295
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1296
+ def get(org_id: nil, request_options: nil)
1297
+ @transport.request(
1298
+ http_method: "GET",
1299
+ path: "/api/org/{orgId}/changes/alert-settings",
1300
+ path_params: { "orgId" => org_id },
1301
+ request_options: request_options
1302
+ )
1303
+ end
1304
+
1305
+ # Update the organization's resource-drift alert filter
1306
+ #
1307
+ # Every field is optional so a single toggle can be saved on its own.
1308
+ # `cooldownMinutes` is floored at 5: below the poller's own cycle the
1309
+ # notification rate would follow the sync rate again, which is what the
1310
+ # batching exists to prevent.
1311
+ #
1312
+ # PUT /api/org/{orgId}/changes/alert-settings
1313
+ #
1314
+ # Raises on 400: Bad request
1315
+ #
1316
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1317
+ # constructed with.
1318
+ # @param body [Hash, nil] Request body, shaped as `DriftAlertSettingsUpdate`.
1319
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1320
+ # @return [Hash] Parsed JSON, shaped as `DriftAlertSettings` — see
1321
+ # `sig/infrawrench/sdk.rbs`.
1322
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1323
+ def update(org_id: nil, body: nil, request_options: nil)
1324
+ @transport.request(
1325
+ http_method: "PUT",
1326
+ path: "/api/org/{orgId}/changes/alert-settings",
1327
+ path_params: { "orgId" => org_id },
1328
+ body: body,
1329
+ request_options: request_options
1330
+ )
1331
+ end
1332
+ end
1333
+
1272
1334
  # `client.changes`
1273
1335
  class ChangesNamespace
1336
+ # @return [ChangesAlertSettingsNamespace] `client.changes.alert_settings`
1337
+ attr_reader :alert_settings
1338
+
1274
1339
  # @api private
1275
1340
  # @param transport [Transport]
1276
1341
  def initialize(transport)
1277
1342
  @transport = transport
1343
+ @alert_settings = ChangesAlertSettingsNamespace.new(@transport)
1278
1344
  end
1279
1345
 
1280
1346
  # Org-wide change timeline (paginated, filterable)
@@ -1449,20 +1515,97 @@ module Infrawrench
1449
1515
  end
1450
1516
  end
1451
1517
 
1518
+ # `client.costs.anomaly_settings`
1519
+ class CostsAnomalySettingsNamespace
1520
+ # @api private
1521
+ # @param transport [Transport]
1522
+ def initialize(transport)
1523
+ @transport = transport
1524
+ end
1525
+
1526
+ # Get the organization's anomaly detection thresholds
1527
+ #
1528
+ # The tunable part of cost anomaly detection. Everything else about the
1529
+ # model — the 28-day baseline, the 7-day notification cooldown, the minimum
1530
+ # history a baseline needs — is fixed. An organization that has never
1531
+ # changed a threshold reads back the defaults. The response also carries the
1532
+ # derived, read-only `smsConfigured`.
1533
+ #
1534
+ # _Requires permission: `costs:read`._
1535
+ #
1536
+ # GET /api/org/{orgId}/costs/anomaly-settings
1537
+ #
1538
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1539
+ # constructed with.
1540
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1541
+ # @return [Hash] Parsed JSON, shaped as `CostAnomalySettingsView` — see
1542
+ # `sig/infrawrench/sdk.rbs`.
1543
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1544
+ def get(org_id: nil, request_options: nil)
1545
+ @transport.request(
1546
+ http_method: "GET",
1547
+ path: "/api/org/{orgId}/costs/anomaly-settings",
1548
+ path_params: { "orgId" => org_id },
1549
+ request_options: request_options
1550
+ )
1551
+ end
1552
+
1553
+ # Update the organization's anomaly detection thresholds
1554
+ #
1555
+ # Takes effect on the next detection pass (which runs after each cost
1556
+ # collection). Anomalies already stored are not re-judged. All four fields
1557
+ # are required — this is a PUT of the whole settings object, not a patch —
1558
+ # and `smsAlerts` deliberately has no server-side default, so a client that
1559
+ # omits it is rejected rather than silently switching an organization's SMS
1560
+ # paging back off. `smsConfigured` is derived and is not accepted here.
1561
+ #
1562
+ # _Requires permission: `costs:write`._
1563
+ #
1564
+ # PUT /api/org/{orgId}/costs/anomaly-settings
1565
+ #
1566
+ # Raises on 400: Bad request
1567
+ #
1568
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1569
+ # constructed with.
1570
+ # @param body [Hash] Request body, shaped as `CostAnomalySettings`.
1571
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1572
+ # @return [Hash] Parsed JSON, shaped as `CostAnomalySettingsView` — see
1573
+ # `sig/infrawrench/sdk.rbs`.
1574
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1575
+ def update(body:, org_id: nil, request_options: nil)
1576
+ @transport.request(
1577
+ http_method: "PUT",
1578
+ path: "/api/org/{orgId}/costs/anomaly-settings",
1579
+ path_params: { "orgId" => org_id },
1580
+ body: body,
1581
+ request_options: request_options
1582
+ )
1583
+ end
1584
+ end
1585
+
1452
1586
  # `client.costs`
1453
1587
  class CostsNamespace
1588
+ # @return [CostsAnomalySettingsNamespace] `client.costs.anomaly_settings`
1589
+ attr_reader :anomaly_settings
1590
+
1454
1591
  # @api private
1455
1592
  # @param transport [Transport]
1456
1593
  def initialize(transport)
1457
1594
  @transport = transport
1595
+ @anomaly_settings = CostsAnomalySettingsNamespace.new(@transport)
1458
1596
  end
1459
1597
 
1460
1598
  # List recently detected cost anomalies
1461
1599
  #
1462
- # Spend anomalies detected by the daily background pass: days where a
1463
- # provider's or service's spend exceeded its trailing 28-day baseline by a
1464
- # statistical threshold (mean + N·stddev, with an absolute floor to ignore
1465
- # penny-scale noise). Newest day first, capped at 200 rows.
1600
+ # Spend anomalies detected by the daily background pass. Two kinds share the
1601
+ # list: a `spike`, where a provider's or service's spend exceeded its
1602
+ # trailing 28-day baseline by a statistical threshold (mean + N·stddev, with
1603
+ # an absolute floor to ignore penny-scale noise), and a `new_source`, where
1604
+ # a provider or service with no spend at all across that window suddenly
1605
+ # billed a material amount. Thresholds are per organization — see GET
1606
+ # /costs/anomaly-settings. Newest day first, capped at 200 rows.
1607
+ #
1608
+ # _Requires permission: `costs:read`._
1466
1609
  #
1467
1610
  # GET /api/org/{orgId}/costs/anomalies
1468
1611
  #
@@ -2295,7 +2438,8 @@ module Infrawrench
2295
2438
  @transport = transport
2296
2439
  end
2297
2440
 
2298
- # The org's resource dependency graph, built from output references
2441
+ # The org's resource dependency graph, from synced cloud data and output
2442
+ # references
2299
2443
  #
2300
2444
  # _Requires permission: `resources:read`._
2301
2445
  #
@@ -2696,19 +2840,106 @@ module Infrawrench
2696
2840
  end
2697
2841
  end
2698
2842
 
2843
+ # `client.digest.recipients`
2844
+ class DigestRecipientsNamespace
2845
+ # @api private
2846
+ # @param transport [Transport]
2847
+ def initialize(transport)
2848
+ @transport = transport
2849
+ end
2850
+
2851
+ # Add a digest email recipient
2852
+ #
2853
+ # Adding an address the organization already has is a no-op that returns the
2854
+ # existing entry, so a double submit cannot double-deliver.
2855
+ #
2856
+ # POST /api/org/{orgId}/digest/recipients
2857
+ #
2858
+ # Raises on 400: Bad request
2859
+ #
2860
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
2861
+ # constructed with.
2862
+ # @param body [Hash, nil] Request body, shaped as `DigestEmailRecipientCreate`.
2863
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
2864
+ # @return [Hash] Parsed JSON, shaped as `DigestEmailRecipient` — see
2865
+ # `sig/infrawrench/sdk.rbs`.
2866
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
2867
+ def create(org_id: nil, body: nil, request_options: nil)
2868
+ @transport.request(
2869
+ http_method: "POST",
2870
+ path: "/api/org/{orgId}/digest/recipients",
2871
+ path_params: { "orgId" => org_id },
2872
+ body: body,
2873
+ request_options: request_options
2874
+ )
2875
+ end
2876
+
2877
+ # Remove a digest email recipient
2878
+ #
2879
+ # DELETE /api/org/{orgId}/digest/recipients/{recipientId}
2880
+ #
2881
+ # Raises on 404: Not found
2882
+ #
2883
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
2884
+ # constructed with.
2885
+ # @param recipient_id [String] Recipient id
2886
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
2887
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
2888
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
2889
+ def delete(recipient_id:, org_id: nil, request_options: nil)
2890
+ @transport.request(
2891
+ http_method: "DELETE",
2892
+ path: "/api/org/{orgId}/digest/recipients/{recipientId}",
2893
+ path_params: { "orgId" => org_id, "recipientId" => recipient_id },
2894
+ request_options: request_options
2895
+ )
2896
+ end
2897
+
2898
+ # List the organization's digest email recipients
2899
+ #
2900
+ # Email is a digest-only transport, so its destinations are an
2901
+ # organization-level address list rather than a per-channel trigger.
2902
+ # Addresses need not belong to Infrawrench users — a finance alias is a
2903
+ # valid recipient.
2904
+ #
2905
+ # GET /api/org/{orgId}/digest/recipients
2906
+ #
2907
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
2908
+ # constructed with.
2909
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
2910
+ # @return [Hash] Parsed JSON, shaped as `DigestEmailRecipientList` — see
2911
+ # `sig/infrawrench/sdk.rbs`.
2912
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
2913
+ def get(org_id: nil, request_options: nil)
2914
+ @transport.request(
2915
+ http_method: "GET",
2916
+ path: "/api/org/{orgId}/digest/recipients",
2917
+ path_params: { "orgId" => org_id },
2918
+ request_options: request_options
2919
+ )
2920
+ end
2921
+ end
2922
+
2699
2923
  # `client.digest`
2700
2924
  class DigestNamespace
2925
+ # @return [DigestRecipientsNamespace] `client.digest.recipients`
2926
+ attr_reader :recipients
2927
+
2701
2928
  # @api private
2702
2929
  # @param transport [Transport]
2703
2930
  def initialize(transport)
2704
2931
  @transport = transport
2932
+ @recipients = DigestRecipientsNamespace.new(@transport)
2705
2933
  end
2706
2934
 
2707
2935
  # Get the organization's weekly digest settings
2708
2936
  #
2709
- # The weekly digest is a Monday-morning summary of last week's spend (with
2710
- # week-over-week movers), sync incidents, and resource churn, delivered to
2711
- # the Slack channels and Teams webhooks opted into the weeklyDigest trigger.
2937
+ # The weekly digest is a summary of the last complete Monday-to-Sunday
2938
+ # week's spend (with week-over-week movers), sync incidents, and resource
2939
+ # churn, delivered to the Slack channels and Teams webhooks opted into the
2940
+ # weeklyDigest trigger and to the organization's digest email recipients.
2941
+ # The response also carries the outcome of the most recent delivery attempt
2942
+ # so a silently failing digest is visible.
2712
2943
  #
2713
2944
  # GET /api/org/{orgId}/digest
2714
2945
  #
@@ -2729,8 +2960,10 @@ module Infrawrench
2729
2960
  # Compose and send last week's digest now
2730
2961
  #
2731
2962
  # Ignores the schedule and the enabled flag — composes the digest for the
2732
- # last complete week and posts it to every opted-in channel. Fails when no
2733
- # Slack channel or Teams webhook has the weeklyDigest trigger on.
2963
+ # last complete week and sends it to every opted-in channel and email
2964
+ # recipient. This is also the manual recovery for a partial delivery, which
2965
+ # is never retried automatically. Fails when nothing is routed to receive
2966
+ # the digest, or when every destination rejected it.
2734
2967
  #
2735
2968
  # POST /api/org/{orgId}/digest/send
2736
2969
  #
@@ -2750,11 +2983,14 @@ module Infrawrench
2750
2983
  )
2751
2984
  end
2752
2985
 
2753
- # Enable or disable the weekly digest
2986
+ # Update the weekly digest settings
2754
2987
  #
2755
- # Enabling schedules the first digest for next Monday morning (07:00 UTC)
2756
- # rather than sending immediately — use POST /digest/send for an immediate
2757
- # one.
2988
+ # Every field is optional. Enabling schedules the first digest for the next
2989
+ # configured send time rather than sending immediately — use POST
2990
+ # /digest/send for an immediate one. The week boundary follows `timezone`,
2991
+ # so the reported window is always the organization's own local
2992
+ # Monday-to-Sunday week. Changing the schedule clears any parked failure
2993
+ # state but never replays a week that already went out.
2758
2994
  #
2759
2995
  # PUT /api/org/{orgId}/digest
2760
2996
  #
@@ -5608,7 +5844,7 @@ module Infrawrench
5608
5844
  #
5609
5845
  # The suspended run resumes within a few seconds of the decision landing.
5610
5846
  #
5611
- # _Requires permission: `dashboards:write`._
5847
+ # _Requires permission: `workflows:approve`._
5612
5848
  #
5613
5849
  # POST /api/org/{orgId}/workflow-approvals/{id}/approve
5614
5850
  #
@@ -5635,7 +5871,7 @@ module Infrawrench
5635
5871
  #
5636
5872
  # Denial fails the waiting `infra.waitForApproval(...)` call in the run.
5637
5873
  #
5638
- # _Requires permission: `dashboards:write`._
5874
+ # _Requires permission: `workflows:approve`._
5639
5875
  #
5640
5876
  # POST /api/org/{orgId}/workflow-approvals/{id}/deny
5641
5877
  #
@@ -5664,7 +5900,7 @@ module Infrawrench
5664
5900
  # runs, newest first. Filter with `status=pending` to build an approvals
5665
5901
  # inbox.
5666
5902
  #
5667
- # _Requires permission: `dashboards:read`._
5903
+ # _Requires permission: `workflows:read`._
5668
5904
  #
5669
5905
  # GET /api/org/{orgId}/workflow-approvals
5670
5906
  #
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v0.25.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v0.27.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 0.25.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 0.27.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 v0.25.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v0.27.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 0.25.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 0.27.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 v0.25.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v0.27.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 0.25.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 0.27.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 = "0.25.0"
18
+ VERSION = "0.27.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v0.25.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v0.27.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 0.25.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 0.27.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 v0.25.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v0.27.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 0.25.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 0.27.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -452,6 +452,7 @@ module Infrawrench
452
452
  type cost_anomaly = {
453
453
  "id" => String,
454
454
  "day" => String,
455
+ "kind" => "spike" | "new_source",
455
456
  "dimension" => "provider" | "service",
456
457
  "dimensionKey" => String,
457
458
  "currency" => String,
@@ -462,6 +463,17 @@ module Infrawrench
462
463
  "notifiedAt" => String | nil
463
464
  }
464
465
 
466
+ # Spec schema: `CostAnomalySettings`.
467
+ type cost_anomaly_settings = {
468
+ "sigmas" => Numeric,
469
+ "minDeltaCents" => Integer,
470
+ "newSourceMinCents" => Integer,
471
+ "smsAlerts" => "off" | "new_source" | "all"
472
+ }
473
+
474
+ # Spec schema: `CostAnomalySettingsView`.
475
+ type cost_anomaly_settings_view = cost_anomaly_settings & { "smsConfigured" => bool }
476
+
465
477
  # Spec schema: `CostDimension`.
466
478
  type cost_dimension = "provider" | "account" | "service" | "region" | "resource" | "tag"
467
479
 
@@ -776,7 +788,9 @@ module Infrawrench
776
788
  "consumerResourceId" => resource_id & untyped,
777
789
  "consumerFieldKey" => String,
778
790
  "providerResourceId" => resource_id & untyped,
779
- "providerOutputKey" => String
791
+ "providerOutputKey" => String,
792
+ ?"kind" => "output-ref" | "declared" | "containment" | "field-match",
793
+ ?"label" => String
780
794
  }
781
795
 
782
796
  # Spec schema: `DependencyGraphNode`.
@@ -793,7 +807,11 @@ module Infrawrench
793
807
  }
794
808
 
795
809
  # Spec schema: `DependencyGraphResponse`.
796
- type dependency_graph_response = { "nodes" => Array[dependency_graph_node], "edges" => Array[dependency_graph_edge] }
810
+ type dependency_graph_response = {
811
+ "nodes" => Array[dependency_graph_node],
812
+ "edges" => Array[dependency_graph_edge],
813
+ "truncated" => bool
814
+ }
797
815
 
798
816
  # Spec schema: `DeployCreatedResource`.
799
817
  type deploy_created_resource = {
@@ -919,14 +937,54 @@ module Infrawrench
919
937
  # Spec schema: `DescribeResponse`.
920
938
  type describe_response = { "text" => String }
921
939
 
940
+ # Spec schema: `DigestEmailRecipient`.
941
+ type digest_email_recipient = { "id" => String, "email" => String }
942
+
943
+ # Spec schema: `DigestEmailRecipientCreate`.
944
+ type digest_email_recipient_create = { "email" => String }
945
+
946
+ # Spec schema: `DigestEmailRecipientList`.
947
+ type digest_email_recipient_list = { "recipients" => Array[digest_email_recipient] }
948
+
922
949
  # Spec schema: `DigestSendResult`.
923
- type digest_send_result = { "ok" => bool, "attempted" => Integer, "succeeded" => Integer }
950
+ type digest_send_result = {
951
+ "ok" => bool,
952
+ "attempted" => Integer,
953
+ "succeeded" => Integer,
954
+ "slack" => digest_transport_result,
955
+ "teams" => digest_transport_result,
956
+ "email" => digest_transport_result
957
+ }
924
958
 
925
959
  # Spec schema: `DigestSettings`.
926
- type digest_settings = { "enabled" => bool, "lastSentWeekStart" => String | nil, "lastSentAt" => String | nil }
960
+ type digest_settings = {
961
+ "enabled" => bool,
962
+ "lastSentWeekStart" => String | nil,
963
+ "lastSentAt" => String | nil,
964
+ "timezone" => String,
965
+ "sendDay" => Integer,
966
+ "sendHour" => Integer,
967
+ "narrativeEnabled" => bool,
968
+ "narrativeAvailable" => bool,
969
+ "emailAvailable" => bool,
970
+ "attemptCount" => Integer,
971
+ "lastAttemptAt" => String | nil,
972
+ "lastStatus" => "pending" | "succeeded" | "partial" | "failed" | "no_targets" | nil,
973
+ "lastError" => String | nil,
974
+ "nextAttemptAt" => String | nil
975
+ }
927
976
 
928
977
  # Spec schema: `DigestSettingsUpdate`.
929
- type digest_settings_update = { "enabled" => bool }
978
+ type digest_settings_update = {
979
+ ?"enabled" => bool,
980
+ ?"timezone" => String,
981
+ ?"sendDay" => Integer,
982
+ ?"sendHour" => Integer,
983
+ ?"narrativeEnabled" => bool
984
+ }
985
+
986
+ # Spec schema: `DigestTransportResult`.
987
+ type digest_transport_result = { "attempted" => Integer, "succeeded" => Integer }
930
988
 
931
989
  # Spec schema: `DockerCommandRequest`.
932
990
  type docker_command_request = { "accountId" => String, "op" => String, ?"params" => json_object }
@@ -934,6 +992,27 @@ module Infrawrench
934
992
  # Spec schema: `DockerCommandResponse`.
935
993
  type docker_command_response = { ?"result" => json_object | untyped | nil }
936
994
 
995
+ # Spec schema: `DriftAlertSettings`.
996
+ type drift_alert_settings = {
997
+ "notifyCreated" => bool,
998
+ "notifyUpdated" => bool,
999
+ "notifyDeleted" => bool,
1000
+ "cooldownMinutes" => Integer,
1001
+ "minChanges" => Integer,
1002
+ "accountIds" => Array[String],
1003
+ "lastNotifiedAt" => String | nil
1004
+ }
1005
+
1006
+ # Spec schema: `DriftAlertSettingsUpdate`.
1007
+ type drift_alert_settings_update = {
1008
+ ?"notifyCreated" => bool,
1009
+ ?"notifyUpdated" => bool,
1010
+ ?"notifyDeleted" => bool,
1011
+ ?"cooldownMinutes" => Integer,
1012
+ ?"minChanges" => Integer,
1013
+ ?"accountIds" => Array[String]
1014
+ }
1015
+
937
1016
  # Spec schema: `EditableField`.
938
1017
  type editable_field = {
939
1018
  "key" => String,
@@ -1112,6 +1191,7 @@ module Infrawrench
1112
1191
  "syncIncidents" => bool,
1113
1192
  "budgetAlerts" => bool,
1114
1193
  "anomalyAlerts" => bool,
1194
+ "resourceDrift" => bool,
1115
1195
  "workflowPages" => bool,
1116
1196
  "weeklyDigest" => bool
1117
1197
  }
@@ -1123,6 +1203,7 @@ module Infrawrench
1123
1203
  ?"syncIncidents" => bool,
1124
1204
  ?"budgetAlerts" => bool,
1125
1205
  ?"anomalyAlerts" => bool,
1206
+ ?"resourceDrift" => bool,
1126
1207
  ?"workflowPages" => bool,
1127
1208
  ?"weeklyDigest" => bool
1128
1209
  }
@@ -1133,6 +1214,7 @@ module Infrawrench
1133
1214
  ?"syncIncidents" => bool,
1134
1215
  ?"budgetAlerts" => bool,
1135
1216
  ?"anomalyAlerts" => bool,
1217
+ ?"resourceDrift" => bool,
1136
1218
  ?"workflowPages" => bool,
1137
1219
  ?"weeklyDigest" => bool
1138
1220
  }
@@ -1272,6 +1354,9 @@ module Infrawrench
1272
1354
  | "storage:write"
1273
1355
  | "dashboards:read"
1274
1356
  | "dashboards:write"
1357
+ | "workflows:read"
1358
+ | "workflows:write"
1359
+ | "workflows:approve"
1275
1360
  | "deployments:read"
1276
1361
  | "deployments:plan"
1277
1362
  | "deployments:write"
@@ -1607,6 +1692,7 @@ module Infrawrench
1607
1692
  | "azure-app-gateway"
1608
1693
  | "azure-app-registration"
1609
1694
  | "azure-app-service"
1695
+ | "azure-app-service-plan"
1610
1696
  | "azure-container-instance"
1611
1697
  | "azure-container-registry"
1612
1698
  | "azure-cosmos-db"
@@ -1701,6 +1787,7 @@ module Infrawrench
1701
1787
  | "databricks-workspace-object"
1702
1788
  | "dataflow-job"
1703
1789
  | "dataset"
1790
+ | "db-subnet-group"
1704
1791
  | "db-user"
1705
1792
  | "dedicated-inference"
1706
1793
  | "deployed-model"
@@ -1883,6 +1970,7 @@ module Infrawrench
1883
1970
  | "redirect-rule"
1884
1971
  | "redis-instance"
1885
1972
  | "redshift-cluster"
1973
+ | "reserved-ip"
1886
1974
  | "route-table"
1887
1975
  | "route53-health-check"
1888
1976
  | "route53-hosted-zone"
@@ -2118,6 +2206,7 @@ module Infrawrench
2118
2206
  "syncIncidents" => bool,
2119
2207
  "budgetAlerts" => bool,
2120
2208
  "anomalyAlerts" => bool,
2209
+ "resourceDrift" => bool,
2121
2210
  "workflowPages" => bool,
2122
2211
  "weeklyDigest" => bool
2123
2212
  }
@@ -2131,6 +2220,7 @@ module Infrawrench
2131
2220
  ?"syncIncidents" => bool,
2132
2221
  ?"budgetAlerts" => bool,
2133
2222
  ?"anomalyAlerts" => bool,
2223
+ ?"resourceDrift" => bool,
2134
2224
  ?"workflowPages" => bool,
2135
2225
  ?"weeklyDigest" => bool
2136
2226
  }
@@ -2140,6 +2230,7 @@ module Infrawrench
2140
2230
  ?"syncIncidents" => bool,
2141
2231
  ?"budgetAlerts" => bool,
2142
2232
  ?"anomalyAlerts" => bool,
2233
+ ?"resourceDrift" => bool,
2143
2234
  ?"workflowPages" => bool,
2144
2235
  ?"weeklyDigest" => bool
2145
2236
  }
@@ -2490,7 +2581,14 @@ module Infrawrench
2490
2581
  def update: (id: String, body: change_freeze_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> change_freeze
2491
2582
  end
2492
2583
 
2584
+ class ChangesAlertSettingsNamespace
2585
+ def initialize: (Transport) -> void
2586
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> drift_alert_settings
2587
+ def update: (?org_id: String?, ?body: drift_alert_settings_update?, ?request_options: Hash[Symbol, untyped]?) -> drift_alert_settings
2588
+ end
2589
+
2493
2590
  class ChangesNamespace
2591
+ attr_reader alert_settings: ChangesAlertSettingsNamespace
2494
2592
  def initialize: (Transport) -> void
2495
2593
  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
2496
2594
  def resource: (resource_id: String, ?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> resource_change_list_response
@@ -2503,7 +2601,14 @@ module Infrawrench
2503
2601
  def templates: (body: connect_templates_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> connect_templates_response
2504
2602
  end
2505
2603
 
2604
+ class CostsAnomalySettingsNamespace
2605
+ def initialize: (Transport) -> void
2606
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_anomaly_settings_view
2607
+ def update: (body: cost_anomaly_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_anomaly_settings_view
2608
+ end
2609
+
2506
2610
  class CostsNamespace
2611
+ attr_reader anomaly_settings: CostsAnomalySettingsNamespace
2507
2612
  def initialize: (Transport) -> void
2508
2613
  def anomalies: (?org_id: String?, ?days: String?, ?request_options: Hash[Symbol, untyped]?) -> { "anomalies" => Array[cost_anomaly] }
2509
2614
  def dimensions: (dimension: "provider" | "account" | "service" | "region" | "resource" | "tag" | "tag-keys", ?org_id: String?, ?tag_key: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_dimension_values
@@ -2591,7 +2696,15 @@ module Infrawrench
2591
2696
  def repos: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[deploy_repo]
2592
2697
  end
2593
2698
 
2699
+ class DigestRecipientsNamespace
2700
+ def initialize: (Transport) -> void
2701
+ def create: (?org_id: String?, ?body: digest_email_recipient_create?, ?request_options: Hash[Symbol, untyped]?) -> digest_email_recipient
2702
+ def delete: (recipient_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "ok" => bool }
2703
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> digest_email_recipient_list
2704
+ end
2705
+
2594
2706
  class DigestNamespace
2707
+ attr_reader recipients: DigestRecipientsNamespace
2595
2708
  def initialize: (Transport) -> void
2596
2709
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> digest_settings
2597
2710
  def post_org_org_id_digest_send: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> digest_send_result
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: 0.25.0
4
+ version: 0.27.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-07-31 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v0.25.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v0.27.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 (v0.25.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v0.27.0).
62
62
  test_files: []