infrawrench-sdk 0.26.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: 2d2602cdedc66b61d3b3bad751fb661d7e437c502c5144c9ec9cd814d86eb894
4
- data.tar.gz: 39e5b7420a43d1de53ef24f23397d6a709ef55359150a05eaf1628996197aa25
3
+ metadata.gz: bfbc2c017e0fefb9e4b1daa4f2a8ac2794717bff63f25e59ade00168e87e434b
4
+ data.tar.gz: 77ce3e6830114def58a200abd701bb2f5361c74fd0ed6253d89554ee4d3dc97f
5
5
  SHA512:
6
- metadata.gz: 1903b58cb24c797955629ed23a4f63622be421c10ce59a989fbfbf704f7a88f6e2f651a839e364f0c804d1446b43d788063ce8469758ecfb250db7123bbb1753
7
- data.tar.gz: 8b6f32ed8a863ebfdc267678d1cb2667da2a6e16caf67cc16f24ebafb1bc51d1716c9604d41a847c0403e5477fb098d220cfff13713a521050dbe4bb9f6f06b1
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.26.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.26.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.26.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.26.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v0.26.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.26.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.26.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
  #
@@ -2697,19 +2840,106 @@ module Infrawrench
2697
2840
  end
2698
2841
  end
2699
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
+
2700
2923
  # `client.digest`
2701
2924
  class DigestNamespace
2925
+ # @return [DigestRecipientsNamespace] `client.digest.recipients`
2926
+ attr_reader :recipients
2927
+
2702
2928
  # @api private
2703
2929
  # @param transport [Transport]
2704
2930
  def initialize(transport)
2705
2931
  @transport = transport
2932
+ @recipients = DigestRecipientsNamespace.new(@transport)
2706
2933
  end
2707
2934
 
2708
2935
  # Get the organization's weekly digest settings
2709
2936
  #
2710
- # The weekly digest is a Monday-morning summary of last week's spend (with
2711
- # week-over-week movers), sync incidents, and resource churn, delivered to
2712
- # 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.
2713
2943
  #
2714
2944
  # GET /api/org/{orgId}/digest
2715
2945
  #
@@ -2730,8 +2960,10 @@ module Infrawrench
2730
2960
  # Compose and send last week's digest now
2731
2961
  #
2732
2962
  # Ignores the schedule and the enabled flag — composes the digest for the
2733
- # last complete week and posts it to every opted-in channel. Fails when no
2734
- # 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.
2735
2967
  #
2736
2968
  # POST /api/org/{orgId}/digest/send
2737
2969
  #
@@ -2751,11 +2983,14 @@ module Infrawrench
2751
2983
  )
2752
2984
  end
2753
2985
 
2754
- # Enable or disable the weekly digest
2986
+ # Update the weekly digest settings
2755
2987
  #
2756
- # Enabling schedules the first digest for next Monday morning (07:00 UTC)
2757
- # rather than sending immediately — use POST /digest/send for an immediate
2758
- # 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.
2759
2994
  #
2760
2995
  # PUT /api/org/{orgId}/digest
2761
2996
  #
@@ -5609,7 +5844,7 @@ module Infrawrench
5609
5844
  #
5610
5845
  # The suspended run resumes within a few seconds of the decision landing.
5611
5846
  #
5612
- # _Requires permission: `dashboards:write`._
5847
+ # _Requires permission: `workflows:approve`._
5613
5848
  #
5614
5849
  # POST /api/org/{orgId}/workflow-approvals/{id}/approve
5615
5850
  #
@@ -5636,7 +5871,7 @@ module Infrawrench
5636
5871
  #
5637
5872
  # Denial fails the waiting `infra.waitForApproval(...)` call in the run.
5638
5873
  #
5639
- # _Requires permission: `dashboards:write`._
5874
+ # _Requires permission: `workflows:approve`._
5640
5875
  #
5641
5876
  # POST /api/org/{orgId}/workflow-approvals/{id}/deny
5642
5877
  #
@@ -5665,7 +5900,7 @@ module Infrawrench
5665
5900
  # runs, newest first. Filter with `status=pending` to build an approvals
5666
5901
  # inbox.
5667
5902
  #
5668
- # _Requires permission: `dashboards:read`._
5903
+ # _Requires permission: `workflows:read`._
5669
5904
  #
5670
5905
  # GET /api/org/{orgId}/workflow-approvals
5671
5906
  #
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v0.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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
 
@@ -925,14 +937,54 @@ module Infrawrench
925
937
  # Spec schema: `DescribeResponse`.
926
938
  type describe_response = { "text" => String }
927
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
+
928
949
  # Spec schema: `DigestSendResult`.
929
- 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
+ }
930
958
 
931
959
  # Spec schema: `DigestSettings`.
932
- 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
+ }
933
976
 
934
977
  # Spec schema: `DigestSettingsUpdate`.
935
- 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 }
936
988
 
937
989
  # Spec schema: `DockerCommandRequest`.
938
990
  type docker_command_request = { "accountId" => String, "op" => String, ?"params" => json_object }
@@ -940,6 +992,27 @@ module Infrawrench
940
992
  # Spec schema: `DockerCommandResponse`.
941
993
  type docker_command_response = { ?"result" => json_object | untyped | nil }
942
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
+
943
1016
  # Spec schema: `EditableField`.
944
1017
  type editable_field = {
945
1018
  "key" => String,
@@ -1118,6 +1191,7 @@ module Infrawrench
1118
1191
  "syncIncidents" => bool,
1119
1192
  "budgetAlerts" => bool,
1120
1193
  "anomalyAlerts" => bool,
1194
+ "resourceDrift" => bool,
1121
1195
  "workflowPages" => bool,
1122
1196
  "weeklyDigest" => bool
1123
1197
  }
@@ -1129,6 +1203,7 @@ module Infrawrench
1129
1203
  ?"syncIncidents" => bool,
1130
1204
  ?"budgetAlerts" => bool,
1131
1205
  ?"anomalyAlerts" => bool,
1206
+ ?"resourceDrift" => bool,
1132
1207
  ?"workflowPages" => bool,
1133
1208
  ?"weeklyDigest" => bool
1134
1209
  }
@@ -1139,6 +1214,7 @@ module Infrawrench
1139
1214
  ?"syncIncidents" => bool,
1140
1215
  ?"budgetAlerts" => bool,
1141
1216
  ?"anomalyAlerts" => bool,
1217
+ ?"resourceDrift" => bool,
1142
1218
  ?"workflowPages" => bool,
1143
1219
  ?"weeklyDigest" => bool
1144
1220
  }
@@ -1278,6 +1354,9 @@ module Infrawrench
1278
1354
  | "storage:write"
1279
1355
  | "dashboards:read"
1280
1356
  | "dashboards:write"
1357
+ | "workflows:read"
1358
+ | "workflows:write"
1359
+ | "workflows:approve"
1281
1360
  | "deployments:read"
1282
1361
  | "deployments:plan"
1283
1362
  | "deployments:write"
@@ -1891,6 +1970,7 @@ module Infrawrench
1891
1970
  | "redirect-rule"
1892
1971
  | "redis-instance"
1893
1972
  | "redshift-cluster"
1973
+ | "reserved-ip"
1894
1974
  | "route-table"
1895
1975
  | "route53-health-check"
1896
1976
  | "route53-hosted-zone"
@@ -2126,6 +2206,7 @@ module Infrawrench
2126
2206
  "syncIncidents" => bool,
2127
2207
  "budgetAlerts" => bool,
2128
2208
  "anomalyAlerts" => bool,
2209
+ "resourceDrift" => bool,
2129
2210
  "workflowPages" => bool,
2130
2211
  "weeklyDigest" => bool
2131
2212
  }
@@ -2139,6 +2220,7 @@ module Infrawrench
2139
2220
  ?"syncIncidents" => bool,
2140
2221
  ?"budgetAlerts" => bool,
2141
2222
  ?"anomalyAlerts" => bool,
2223
+ ?"resourceDrift" => bool,
2142
2224
  ?"workflowPages" => bool,
2143
2225
  ?"weeklyDigest" => bool
2144
2226
  }
@@ -2148,6 +2230,7 @@ module Infrawrench
2148
2230
  ?"syncIncidents" => bool,
2149
2231
  ?"budgetAlerts" => bool,
2150
2232
  ?"anomalyAlerts" => bool,
2233
+ ?"resourceDrift" => bool,
2151
2234
  ?"workflowPages" => bool,
2152
2235
  ?"weeklyDigest" => bool
2153
2236
  }
@@ -2498,7 +2581,14 @@ module Infrawrench
2498
2581
  def update: (id: String, body: change_freeze_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> change_freeze
2499
2582
  end
2500
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
+
2501
2590
  class ChangesNamespace
2591
+ attr_reader alert_settings: ChangesAlertSettingsNamespace
2502
2592
  def initialize: (Transport) -> void
2503
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
2504
2594
  def resource: (resource_id: String, ?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> resource_change_list_response
@@ -2511,7 +2601,14 @@ module Infrawrench
2511
2601
  def templates: (body: connect_templates_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> connect_templates_response
2512
2602
  end
2513
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
+
2514
2610
  class CostsNamespace
2611
+ attr_reader anomaly_settings: CostsAnomalySettingsNamespace
2515
2612
  def initialize: (Transport) -> void
2516
2613
  def anomalies: (?org_id: String?, ?days: String?, ?request_options: Hash[Symbol, untyped]?) -> { "anomalies" => Array[cost_anomaly] }
2517
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
@@ -2599,7 +2696,15 @@ module Infrawrench
2599
2696
  def repos: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[deploy_repo]
2600
2697
  end
2601
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
+
2602
2706
  class DigestNamespace
2707
+ attr_reader recipients: DigestRecipientsNamespace
2603
2708
  def initialize: (Transport) -> void
2604
2709
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> digest_settings
2605
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.26.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.26.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.26.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v0.27.0).
62
62
  test_files: []