infrawrench-sdk 1.97.0 → 1.99.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.
@@ -1,7 +1,7 @@
1
- # infrawrench-sdk v1.97.0 | MIT | Copyright (c) 2026 Infrawrench Services, Inc.
1
+ # infrawrench-sdk v1.99.0 | MIT | Copyright (c) 2026 Infrawrench Services, Inc.
2
2
  # https://github.com/Infrawrench/Infrawrench
3
3
  #
4
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.97.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.99.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -138,22 +138,18 @@ module Infrawrench
138
138
  "admin" => bool | nil,
139
139
  "mfa" => bool | nil,
140
140
  "parent" => String | nil,
141
- "owner" => access_principal_owner,
141
+ "owner" => access_principal_owner | nil,
142
142
  "revokeActionId" => String | nil
143
143
  }
144
144
 
145
- # Who owns the resource, from the resource-ownership record. Null when nobody
146
- # is named.
147
- #
148
145
  # Spec schema: `AccessPrincipalOwner`.
149
146
  type access_principal_owner = {
150
- "userId" => String | nil,
151
- "displayName" => String,
152
- "isLabel" => bool,
153
- "ticketUrl" => String | nil,
154
- "purpose" => String | nil
155
- }
156
- | nil
147
+ "userId" => String | nil,
148
+ "displayName" => String,
149
+ "isLabel" => bool,
150
+ "ticketUrl" => String | nil,
151
+ "purpose" => String | nil
152
+ }
157
153
 
158
154
  # Spec schema: `AccessRequest`.
159
155
  type access_request = {
@@ -486,7 +482,7 @@ module Infrawrench
486
482
  ?"surface" => "terminal" | "t3-code" | "nibblets",
487
483
  ?"serviceAccountIds" => Array[String],
488
484
  ?"t3Access" => "t3-connect" | "tailscale",
489
- ?"t3Policy" => t3_code_policy & untyped,
485
+ ?"t3Policy" => untyped,
490
486
  ?"t3PolicyRestartPending" => bool,
491
487
  ?"serviceInstalls" => Array[agent_service_install],
492
488
  ?"agentLinkId" => String | nil,
@@ -500,17 +496,16 @@ module Infrawrench
500
496
 
501
497
  # Spec schema: `AgentSettings`.
502
498
  type agent_settings = {
503
- "accountId" => String,
504
- "pluginId" => String,
505
- "resourceTypeId" => String,
506
- "tool" => "codex" | "claude-code",
507
- ?"surface" => "terminal" | "t3-code" | "nibblets",
508
- "fields" => Hash[String, String],
509
- ?"serviceAccountIds" => Array[String],
510
- ?"t3Access" => "t3-connect" | "tailscale",
511
- ?"t3Policy" => t3_code_policy
512
- }
513
- | nil
499
+ "accountId" => String,
500
+ "pluginId" => String,
501
+ "resourceTypeId" => String,
502
+ "tool" => "codex" | "claude-code",
503
+ ?"surface" => "terminal" | "t3-code" | "nibblets",
504
+ "fields" => Hash[String, String],
505
+ ?"serviceAccountIds" => Array[String],
506
+ ?"t3Access" => "t3-connect" | "tailscale",
507
+ ?"t3Policy" => untyped
508
+ }
514
509
 
515
510
  # Spec schema: `AgentT3PolicyApplyRequest`.
516
511
  type agent_t3_policy_apply_request = { "restart" => bool, ?"sessionId" => String }
@@ -776,8 +771,8 @@ module Infrawrench
776
771
  "conditions" => Array[alert_condition],
777
772
  "destinations" => Array[alert_destination],
778
773
  "continueOnMatch" => bool,
779
- "quietHours" => quiet_hours,
780
- "escalation" => escalation_policy
774
+ "quietHours" => quiet_hours | nil,
775
+ "escalation" => escalation_policy | nil
781
776
  }
782
777
 
783
778
  # Spec schema: `AlertRuleInput`.
@@ -788,8 +783,8 @@ module Infrawrench
788
783
  ?"conditions" => Array[alert_condition],
789
784
  ?"destinations" => Array[alert_destination],
790
785
  ?"continueOnMatch" => bool,
791
- ?"quietHours" => quiet_hours,
792
- ?"escalation" => escalation_policy
786
+ ?"quietHours" => quiet_hours | nil,
787
+ ?"escalation" => escalation_policy | nil
793
788
  }
794
789
 
795
790
  # Spec schema: `AlertRulesResponse`.
@@ -852,9 +847,6 @@ module Infrawrench
852
847
  # Spec schema: `AllocationRuleInput`.
853
848
  type allocation_rule_input = { "costCentreId" => String, "priority" => Integer, "match" => allocation_rule_match }
854
849
 
855
- # All set fields must match (AND). A rule with no fields is a catch-all that
856
- # claims everything reaching it.
857
- #
858
850
  # Spec schema: `AllocationRuleMatch`.
859
851
  type allocation_rule_match = {
860
852
  ?"tagKey" => String,
@@ -926,7 +918,7 @@ module Infrawrench
926
918
  "action" => String,
927
919
  "entityType" => String,
928
920
  "entityId" => String,
929
- "metadata" => json_object & (Hash[String, untyped] | nil),
921
+ "metadata" => json_object | nil,
930
922
  "ipAddress" => String | nil,
931
923
  "createdAt" => String,
932
924
  "userName" => String | nil,
@@ -953,7 +945,7 @@ module Infrawrench
953
945
  # JSON text.
954
946
  #
955
947
  # Spec schema: `AwsPricingCell`.
956
- type aws_pricing_cell = String | Numeric | bool | nil | nil
948
+ type aws_pricing_cell = String | Numeric | bool | nil
957
949
 
958
950
  # Spec schema: `AwsPricingQueryRequest`.
959
951
  type aws_pricing_query_request = { "sql" => String, ?"maxRows" => Integer }
@@ -1171,7 +1163,7 @@ module Infrawrench
1171
1163
  "numberIncludesYear" => bool,
1172
1164
  "numberStart" => Integer,
1173
1165
  "taxRates" => Array[billing_profile_tax_rate],
1174
- "bank" => billing_profile_bank,
1166
+ "bank" => billing_profile_bank | nil,
1175
1167
  "footer" => String | nil,
1176
1168
  "logo" => String | nil,
1177
1169
  "managedAccountIds" => Array[String],
@@ -1182,27 +1174,25 @@ module Infrawrench
1182
1174
 
1183
1175
  # Spec schema: `BillingProfileBank`.
1184
1176
  type billing_profile_bank = {
1185
- "accountName" => String | nil,
1186
- "bankName" => String | nil,
1187
- "iban" => String | nil,
1188
- "bic" => String | nil,
1189
- "accountNumber" => String | nil,
1190
- "routingNumber" => String | nil,
1191
- "instructions" => String | nil
1192
- }
1193
- | nil
1177
+ "accountName" => String | nil,
1178
+ "bankName" => String | nil,
1179
+ "iban" => String | nil,
1180
+ "bic" => String | nil,
1181
+ "accountNumber" => String | nil,
1182
+ "routingNumber" => String | nil,
1183
+ "instructions" => String | nil
1184
+ }
1194
1185
 
1195
1186
  # Spec schema: `BillingProfileBankInput`.
1196
1187
  type billing_profile_bank_input = {
1197
- ?"accountName" => String | nil,
1198
- ?"bankName" => String | nil,
1199
- ?"iban" => String | nil,
1200
- ?"bic" => String | nil,
1201
- ?"accountNumber" => String | nil,
1202
- ?"routingNumber" => String | nil,
1203
- ?"instructions" => String | nil
1204
- }
1205
- | nil
1188
+ ?"accountName" => String | nil,
1189
+ ?"bankName" => String | nil,
1190
+ ?"iban" => String | nil,
1191
+ ?"bic" => String | nil,
1192
+ ?"accountNumber" => String | nil,
1193
+ ?"routingNumber" => String | nil,
1194
+ ?"instructions" => String | nil
1195
+ }
1206
1196
 
1207
1197
  # Spec schema: `BillingProfileInput`.
1208
1198
  type billing_profile_input = {
@@ -1219,7 +1209,7 @@ module Infrawrench
1219
1209
  ?"numberIncludesYear" => bool,
1220
1210
  ?"numberStart" => Integer,
1221
1211
  ?"taxRates" => Array[billing_profile_tax_rate],
1222
- ?"bank" => billing_profile_bank_input,
1212
+ ?"bank" => billing_profile_bank_input | nil,
1223
1213
  ?"footer" => String | nil,
1224
1214
  ?"logo" => String | nil
1225
1215
  }
@@ -1270,9 +1260,6 @@ module Infrawrench
1270
1260
  ?"managedAccountIds" => Array[String]
1271
1261
  }
1272
1262
 
1273
- # All set fields must match (AND); a rule with no fields matches all spend.
1274
- # The same vocabulary allocation rules use, plus chargeType.
1275
- #
1276
1263
  # Spec schema: `BillingRuleMatch`.
1277
1264
  type billing_rule_match = {
1278
1265
  ?"tagKey" => String,
@@ -1299,11 +1286,15 @@ module Infrawrench
1299
1286
  type billing_rule_tier = { "upTo" => Numeric | nil, "percent" => Numeric }
1300
1287
 
1301
1288
  # Spec schema: `BillingStatus`.
1302
- type billing_status = { "complimentary" => bool, "subscription" => subscription, "capacity" => capacity_status }
1289
+ type billing_status = {
1290
+ "complimentary" => bool,
1291
+ "subscription" => subscription | nil,
1292
+ "capacity" => capacity_status
1293
+ }
1303
1294
 
1304
1295
  # Spec schema: `BlastRadiusDependant`.
1305
1296
  type blast_radius_dependant = {
1306
- "node" => blast_radius_node & Hash[String, untyped],
1297
+ "node" => blast_radius_node,
1307
1298
  "depth" => Integer,
1308
1299
  ?"via" => {
1309
1300
  "fieldKey" => String,
@@ -1323,7 +1314,7 @@ module Infrawrench
1323
1314
  "estimatedCost" => Numeric,
1324
1315
  "currency" => String,
1325
1316
  "days" => Integer,
1326
- "resourceId" => resource_id & (String | nil)
1317
+ "resourceId" => resource_id | nil
1327
1318
  }
1328
1319
 
1329
1320
  # Spec schema: `BlastRadiusGap`.
@@ -1336,21 +1327,18 @@ module Infrawrench
1336
1327
  "reason" => String
1337
1328
  }
1338
1329
 
1339
- # The resource itself, when it participates in the dependency graph.
1340
- #
1341
1330
  # Spec schema: `BlastRadiusNode`.
1342
1331
  type blast_radius_node = {
1343
- "id" => resource_id,
1344
- "displayName" => String,
1345
- "pluginId" => String,
1346
- "pluginDisplayName" => String,
1347
- "pluginLogoSvg" => String,
1348
- "resourceTypeId" => String,
1349
- "resourceTypeLabel" => String,
1350
- "accountId" => String,
1351
- "accountName" => String
1352
- }
1353
- | nil
1332
+ "id" => resource_id,
1333
+ "displayName" => String,
1334
+ "pluginId" => String,
1335
+ "pluginDisplayName" => String,
1336
+ "pluginLogoSvg" => String,
1337
+ "resourceTypeId" => String,
1338
+ "resourceTypeLabel" => String,
1339
+ "accountId" => String,
1340
+ "accountName" => String
1341
+ }
1354
1342
 
1355
1343
  # Spec schema: `BlastRadiusReference`.
1356
1344
  type blast_radius_reference = {
@@ -1373,7 +1361,7 @@ module Infrawrench
1373
1361
  # Spec schema: `BlastRadiusReport`.
1374
1362
  type blast_radius_report = {
1375
1363
  "resourceId" => resource_id,
1376
- "resource" => blast_radius_node,
1364
+ "resource" => blast_radius_node | nil,
1377
1365
  "dependants" => Array[blast_radius_dependant],
1378
1366
  "directCount" => Integer,
1379
1367
  "transitiveCount" => Integer,
@@ -1398,26 +1386,39 @@ module Infrawrench
1398
1386
  "periodEnd" => String | nil,
1399
1387
  "actualUsage" => Numeric | nil,
1400
1388
  "forecastUsage" => Numeric | nil,
1401
- "note" => budget_alert_note
1389
+ "note" => budget_alert_note | nil
1402
1390
  }
1403
1391
 
1404
1392
  # Somebody's explanation of this firing. Null while there is none.
1405
1393
  #
1406
1394
  # Spec schema: `BudgetAlertNote`.
1407
1395
  type budget_alert_note = {
1408
- "text" => String,
1409
- "notedAt" => String,
1410
- "notedByUserId" => String | nil,
1411
- "notedByName" => String | nil,
1412
- "annotationId" => String | nil
1413
- }
1414
- | nil
1396
+ "text" => String,
1397
+ "notedAt" => String,
1398
+ "notedByUserId" => String | nil,
1399
+ "notedByName" => String | nil,
1400
+ "annotationId" => String | nil
1401
+ }
1415
1402
 
1416
1403
  # Spec schema: `BudgetAlertNoteInput`.
1417
1404
  type budget_alert_note_input = { "note" => String }
1418
1405
 
1419
1406
  # Spec schema: `BudgetAlertNoteResult`.
1420
- type budget_alert_note_result = budget_alert_event & { "followUp" => { "slack" => Integer, "msTeams" => Integer } }
1407
+ type budget_alert_note_result = {
1408
+ "id" => String,
1409
+ "month" => String,
1410
+ "thresholdType" => "actual" | "forecast",
1411
+ "thresholdPercent" => Integer,
1412
+ "actualAmountCents" => Integer,
1413
+ "forecastAmountCents" => Integer | nil,
1414
+ "triggeredAt" => String,
1415
+ "periodStart" => String | nil,
1416
+ "periodEnd" => String | nil,
1417
+ "actualUsage" => Numeric | nil,
1418
+ "forecastUsage" => Numeric | nil,
1419
+ "note" => budget_alert_note | nil,
1420
+ "followUp" => { "slack" => Integer, "msTeams" => Integer }
1421
+ }
1421
1422
 
1422
1423
  # The basis `actualCents` and `forecastCents` were measured on.
1423
1424
  #
@@ -1426,15 +1427,7 @@ module Infrawrench
1426
1427
 
1427
1428
  # Spec schema: `BudgetCostFilter`.
1428
1429
  type budget_cost_filter = {
1429
- "dimension" => "provider"
1430
- | "account"
1431
- | "service"
1432
- | "region"
1433
- | "resource"
1434
- | "tag"
1435
- | "charge_type"
1436
- | "commitment"
1437
- | "virtual_tag",
1430
+ "dimension" => cost_dimension,
1438
1431
  "op" => cost_filter_operator,
1439
1432
  "values" => Array[String],
1440
1433
  ?"tagKey" => String
@@ -1457,7 +1450,7 @@ module Infrawrench
1457
1450
  "savedFilterId" => String | nil,
1458
1451
  "scenarioModelId" => String | nil,
1459
1452
  "thresholds" => Array[budget_threshold],
1460
- "costBasis" => budget_cost_basis & untyped,
1453
+ "costBasis" => budget_cost_basis,
1461
1454
  "useAdjustedSpend" => bool,
1462
1455
  "emailRecipients" => alert_email_recipients,
1463
1456
  "createdByUserId" => String | nil,
@@ -1467,7 +1460,7 @@ module Infrawrench
1467
1460
  "measure" => budget_measure,
1468
1461
  "usageUnit" => String | nil,
1469
1462
  "usageAmount" => Numeric | nil,
1470
- "period" => budget_period,
1463
+ "period" => budget_period | nil,
1471
1464
  "parentBudgetId" => String | nil
1472
1465
  }
1473
1466
 
@@ -1487,12 +1480,12 @@ module Infrawrench
1487
1480
  ?"savedFilterId" => String,
1488
1481
  ?"scenarioModelId" => String,
1489
1482
  "thresholds" => Array[budget_threshold],
1490
- ?"costBasis" => budget_cost_basis & untyped,
1483
+ ?"costBasis" => budget_cost_basis,
1491
1484
  ?"useAdjustedSpend" => bool,
1492
1485
  ?"measure" => budget_measure,
1493
1486
  ?"usageUnit" => String,
1494
1487
  ?"usageAmount" => Numeric,
1495
- ?"period" => budget_period & (budget_recurring_period | budget_explicit_periods),
1488
+ ?"period" => budget_period,
1496
1489
  ?"parentBudgetId" => String,
1497
1490
  ?"emailRecipients" => alert_email_recipients
1498
1491
  }
@@ -1515,7 +1508,7 @@ module Infrawrench
1515
1508
  # measured.
1516
1509
  #
1517
1510
  # Spec schema: `BudgetPeriod`.
1518
- type budget_period = budget_recurring_period | budget_explicit_periods | nil
1511
+ type budget_period = budget_recurring_period | budget_explicit_periods
1519
1512
 
1520
1513
  # Spec schema: `BudgetRecurringPeriod`.
1521
1514
  type budget_recurring_period = {
@@ -1554,13 +1547,13 @@ module Infrawrench
1554
1547
  "thresholdType" => "actual" | "forecast",
1555
1548
  "thresholdPercent" => Integer,
1556
1549
  "triggeredAt" => String,
1557
- ?"note" => budget_alert_note
1550
+ ?"note" => budget_alert_note | nil
1558
1551
  }],
1559
1552
  "placements" => Array[{ "widgetId" => String, "dashboardId" => String, "dashboardName" => String }],
1560
1553
  "measure" => budget_measure,
1561
1554
  "usageUnit" => String | nil,
1562
1555
  "usageAmount" => Numeric | nil,
1563
- "period" => budget_period,
1556
+ "period" => budget_period | nil,
1564
1557
  "parentBudgetId" => String | nil,
1565
1558
  "periodStart" => String | nil,
1566
1559
  "periodEnd" => String | nil,
@@ -1588,15 +1581,12 @@ module Infrawrench
1588
1581
  "createdByUserId" => String | nil,
1589
1582
  "createdAt" => String,
1590
1583
  "updatedAt" => String,
1591
- "coverage" => business_metric_coverage,
1592
- "importer" => business_metric_importer_summary
1584
+ "coverage" => business_metric_coverage | nil,
1585
+ "importer" => business_metric_importer_summary | nil
1593
1586
  }
1594
1587
 
1595
- # Null when the metric has no values at all; not an error, but every unit-cost
1596
- # chart drawn from it is one continuous gap.
1597
- #
1598
1588
  # Spec schema: `BusinessMetricCoverage`.
1599
- type business_metric_coverage = { "firstDay" => String, "lastDay" => String, "reportedDays" => Integer } | nil
1589
+ type business_metric_coverage = { "firstDay" => String, "lastDay" => String, "reportedDays" => Integer }
1600
1590
 
1601
1591
  # Spec schema: `BusinessMetricForecastValue`.
1602
1592
  type business_metric_forecast_value = { "day" => String, "value" => Numeric, "updatedAt" => String }
@@ -1656,28 +1646,27 @@ module Infrawrench
1656
1646
 
1657
1647
  # Spec schema: `BusinessMetricImporter`.
1658
1648
  type business_metric_importer = {
1659
- "id" => String,
1660
- "metricId" => String,
1661
- "accountId" => String,
1662
- "accountName" => String | nil,
1663
- "pluginId" => String | nil,
1664
- "sourceLabel" => String | nil,
1665
- "params" => Hash[String, String],
1666
- "schedule" => business_metric_import_schedule,
1667
- "backfillDays" => Integer,
1668
- "timezone" => String,
1669
- "aggregation" => business_metric_import_aggregation,
1670
- "enabled" => bool,
1671
- "nextRunAt" => String | nil,
1672
- "lastRunAt" => String | nil,
1673
- "lastStatus" => "success" | "error" | nil,
1674
- "lastError" => String | nil,
1675
- "consecutiveFailures" => Integer,
1676
- "createdByUserId" => String | nil,
1677
- "createdAt" => String,
1678
- "updatedAt" => String
1679
- }
1680
- | nil
1649
+ "id" => String,
1650
+ "metricId" => String,
1651
+ "accountId" => String,
1652
+ "accountName" => String | nil,
1653
+ "pluginId" => String | nil,
1654
+ "sourceLabel" => String | nil,
1655
+ "params" => Hash[String, String],
1656
+ "schedule" => business_metric_import_schedule,
1657
+ "backfillDays" => Integer,
1658
+ "timezone" => String,
1659
+ "aggregation" => business_metric_import_aggregation,
1660
+ "enabled" => bool,
1661
+ "nextRunAt" => String | nil,
1662
+ "lastRunAt" => String | nil,
1663
+ "lastStatus" => "success" | "error" | nil,
1664
+ "lastError" => String | nil,
1665
+ "consecutiveFailures" => Integer,
1666
+ "createdByUserId" => String | nil,
1667
+ "createdAt" => String,
1668
+ "updatedAt" => String
1669
+ }
1681
1670
 
1682
1671
  # Spec schema: `BusinessMetricImporterInput`.
1683
1672
  type business_metric_importer_input = {
@@ -1686,25 +1675,21 @@ module Infrawrench
1686
1675
  ?"schedule" => business_metric_import_schedule & untyped,
1687
1676
  ?"backfillDays" => Integer,
1688
1677
  ?"timezone" => String,
1689
- ?"aggregation" => business_metric_import_aggregation,
1678
+ ?"aggregation" => business_metric_import_aggregation & untyped,
1690
1679
  ?"enabled" => bool
1691
1680
  }
1692
1681
 
1693
- # The scheduled importer feeding this metric, or null when its values are only
1694
- # pushed.
1695
- #
1696
1682
  # Spec schema: `BusinessMetricImporterSummary`.
1697
1683
  type business_metric_importer_summary = {
1698
- "accountId" => String,
1699
- "accountName" => String | nil,
1700
- "pluginId" => String | nil,
1701
- "sourceLabel" => String | nil,
1702
- "enabled" => bool,
1703
- "lastRunAt" => String | nil,
1704
- "lastStatus" => "success" | "error" | nil,
1705
- "lastError" => String | nil
1706
- }
1707
- | nil
1684
+ "accountId" => String,
1685
+ "accountName" => String | nil,
1686
+ "pluginId" => String | nil,
1687
+ "sourceLabel" => String | nil,
1688
+ "enabled" => bool,
1689
+ "lastRunAt" => String | nil,
1690
+ "lastStatus" => "success" | "error" | nil,
1691
+ "lastError" => String | nil
1692
+ }
1708
1693
 
1709
1694
  # Spec schema: `BusinessMetricInput`.
1710
1695
  type business_metric_input = {
@@ -1741,22 +1726,7 @@ module Infrawrench
1741
1726
  "key" => String,
1742
1727
  "values" => Array[String],
1743
1728
  "truncated" => bool,
1744
- "mapping" => business_metric_label_target
1745
- & ({
1746
- "kind" => "dimension",
1747
- "dimension" => "provider"
1748
- | "account"
1749
- | "service"
1750
- | "region"
1751
- | "resource"
1752
- | "tag"
1753
- | "charge_type"
1754
- | "commitment"
1755
- | "virtual_tag",
1756
- ?"tagKey" => String
1757
- }
1758
- | { "kind" => "cost_centre" }
1759
- | nil)
1729
+ "mapping" => business_metric_label_target | nil
1760
1730
  }
1761
1731
 
1762
1732
  # Where a label's values live on the cost side. A `dimension` target matches
@@ -1764,19 +1734,7 @@ module Infrawrench
1764
1734
  # id or, case-insensitively, by name.
1765
1735
  #
1766
1736
  # Spec schema: `BusinessMetricLabelTarget`.
1767
- type business_metric_label_target = {
1768
- "kind" => "dimension",
1769
- "dimension" => "provider"
1770
- | "account"
1771
- | "service"
1772
- | "region"
1773
- | "resource"
1774
- | "tag"
1775
- | "charge_type"
1776
- | "commitment"
1777
- | "virtual_tag",
1778
- ?"tagKey" => String
1779
- }
1737
+ type business_metric_label_target = { "kind" => "dimension", "dimension" => cost_dimension, ?"tagKey" => String }
1780
1738
  | { "kind" => "cost_centre" }
1781
1739
 
1782
1740
  # A value's labels, e.g. `{ "customer": "acme", "plan": "pro" }`. At most 8,
@@ -1790,15 +1748,7 @@ module Infrawrench
1790
1748
 
1791
1749
  # Spec schema: `BusinessMetricScopeTerm`.
1792
1750
  type business_metric_scope_term = {
1793
- "dimension" => "provider"
1794
- | "account"
1795
- | "service"
1796
- | "region"
1797
- | "resource"
1798
- | "tag"
1799
- | "charge_type"
1800
- | "commitment"
1801
- | "virtual_tag",
1751
+ "dimension" => cost_dimension,
1802
1752
  "op" => cost_filter_operator,
1803
1753
  "values" => Array[String],
1804
1754
  ?"tagKey" => String
@@ -1985,22 +1935,19 @@ module Infrawrench
1985
1935
  "generatedAt" => String
1986
1936
  }
1987
1937
 
1988
- # Monthly (730 h) footprint, or null.
1989
- #
1990
1938
  # Spec schema: `CarbonFootprint`.
1991
1939
  type carbon_footprint = {
1992
- "vcpus" => Numeric,
1993
- "count" => Integer,
1994
- "region" => String,
1995
- "grid" => String,
1996
- "gridIntensity" => Numeric,
1997
- "gridZone" => String,
1998
- "gridBasis" => "ccf" | "ember-2024",
1999
- "pue" => Numeric,
2000
- "kwh" => Numeric,
2001
- "kgCo2e" => Numeric
2002
- }
2003
- | nil
1940
+ "vcpus" => Numeric,
1941
+ "count" => Integer,
1942
+ "region" => String,
1943
+ "grid" => String,
1944
+ "gridIntensity" => Numeric,
1945
+ "gridZone" => String,
1946
+ "gridBasis" => "ccf" | "ember-2024",
1947
+ "pue" => Numeric,
1948
+ "kwh" => Numeric,
1949
+ "kgCo2e" => Numeric
1950
+ }
2004
1951
 
2005
1952
  # Spec schema: `CarbonGroup`.
2006
1953
  type carbon_group = {
@@ -2061,8 +2008,8 @@ module Infrawrench
2061
2008
  "windowDays" => Integer,
2062
2009
  "effectiveWindowDays" => Integer,
2063
2010
  "eventDay" => String,
2064
- "before" => change_cost_impact_window,
2065
- "after" => change_cost_impact_window,
2011
+ "before" => change_cost_impact_window | nil,
2012
+ "after" => change_cost_impact_window | nil,
2066
2013
  "series" => Array[change_cost_impact_series],
2067
2014
  "confidence" => change_cost_impact_confidence,
2068
2015
  "reasons" => Array[change_cost_impact_reason],
@@ -2127,7 +2074,7 @@ module Infrawrench
2127
2074
  type change_cost_impact_status = "measured" | "insufficient_data" | "unknown"
2128
2075
 
2129
2076
  # Spec schema: `ChangeCostImpactWindow`.
2130
- type change_cost_impact_window = { "from" => String, "to" => String } | nil
2077
+ type change_cost_impact_window = { "from" => String, "to" => String }
2131
2078
 
2132
2079
  # Spec schema: `ChangeCostImpactsRequest`.
2133
2080
  type change_cost_impacts_request = { "changeIds" => Array[String], ?"windowDays" => Integer, ?"costBasis" => change_cost_basis }
@@ -2166,7 +2113,7 @@ module Infrawrench
2166
2113
  type change_freeze_input = { "name" => String, ?"reason" => String, ?"startsAt" => String, ?"endsAt" => String }
2167
2114
 
2168
2115
  # Spec schema: `ChangeFreezeStatus`.
2169
- type change_freeze_status = { "freeze" => change_freeze & (Hash[String, untyped] | nil) }
2116
+ type change_freeze_status = { "freeze" => change_freeze | nil }
2170
2117
 
2171
2118
  # Spec schema: `ChatAskQuestionAnswer`.
2172
2119
  type chat_ask_question_answer = { "questionId" => String, ?"optionId" => String, ?"text" => String }
@@ -2177,9 +2124,145 @@ module Infrawrench
2177
2124
  # Spec schema: `ChatAskQuestionResult`.
2178
2125
  type chat_ask_question_result = { "ok" => bool, "allResolved" => bool }
2179
2126
 
2127
+ # Spec schema: `ChatContentBlock`.
2128
+ type chat_content_block = {
2129
+ "type" => "text",
2130
+ "text" => String,
2131
+ ?"signature" => String,
2132
+ ?"provider" => "anthropic" | "gemini"
2133
+ }
2134
+ | {
2135
+ "type" => "thinking",
2136
+ "thinking" => String,
2137
+ "signature" => String,
2138
+ ?"provider" => "anthropic" | "gemini"
2139
+ }
2140
+ | {
2141
+ "type" => "tool_use",
2142
+ "id" => String,
2143
+ "name" => String,
2144
+ "input" => Hash[String, untyped],
2145
+ ?"signature" => String,
2146
+ ?"provider" => "anthropic" | "gemini"
2147
+ }
2148
+ | {
2149
+ "type" => "tool_result",
2150
+ "tool_use_id" => String,
2151
+ "content" => String | Array[{ "type" => "text", "text" => String }],
2152
+ ?"is_error" => bool
2153
+ }
2154
+
2155
+ # Spec schema: `ChatConversation`.
2156
+ type chat_conversation = {
2157
+ "id" => String,
2158
+ "organizationId" => String,
2159
+ "userId" => String | nil,
2160
+ "costCanvasId" => String | nil,
2161
+ "title" => String,
2162
+ "model" => String,
2163
+ "systemPrompt" => String | nil,
2164
+ "archivedAt" => String | nil,
2165
+ "createdAt" => String,
2166
+ "updatedAt" => String
2167
+ }
2168
+
2169
+ # Spec schema: `ChatConversationCreateInput`.
2170
+ type chat_conversation_create_input = {
2171
+ ?"model" => "gemini-3.7-flash" | "claude-sonnet-5" | "claude-opus-5" | "claude-haiku-4-5",
2172
+ ?"title" => String,
2173
+ ?"systemPrompt" => String
2174
+ }
2175
+
2176
+ # Spec schema: `ChatConversationCreated`.
2177
+ type chat_conversation_created = { "id" => String }
2178
+
2179
+ # Spec schema: `ChatConversationDetail`.
2180
+ type chat_conversation_detail = {
2181
+ "conversation" => chat_conversation,
2182
+ "messages" => Array[chat_message],
2183
+ "pendingActions" => Array[chat_pending_action],
2184
+ "pendingSecretRequests" => Array[chat_pending_secret_request]
2185
+ }
2186
+
2187
+ # Spec schema: `ChatConversationList`.
2188
+ type chat_conversation_list = { "conversations" => Array[chat_conversation_summary] }
2189
+
2190
+ # Spec schema: `ChatConversationModelInput`.
2191
+ type chat_conversation_model_input = { "model" => "gemini-3.7-flash" | "claude-sonnet-5" | "claude-opus-5" | "claude-haiku-4-5" }
2192
+
2193
+ # Spec schema: `ChatConversationSummary`.
2194
+ type chat_conversation_summary = {
2195
+ "id" => String,
2196
+ "title" => String,
2197
+ "model" => String,
2198
+ "createdAt" => String,
2199
+ "updatedAt" => String
2200
+ }
2201
+
2202
+ # Spec schema: `ChatMessage`.
2203
+ type chat_message = {
2204
+ "id" => String,
2205
+ "conversationId" => String,
2206
+ "role" => "user" | "assistant",
2207
+ "content" => Array[chat_content_block],
2208
+ "inputTokens" => Integer,
2209
+ "outputTokens" => Integer,
2210
+ "cacheReadTokens" => Integer,
2211
+ "cacheWriteTokens" => Integer,
2212
+ "stopReason" => String | nil,
2213
+ "createdAt" => String
2214
+ }
2215
+
2216
+ # Spec schema: `ChatPendingAction`.
2217
+ type chat_pending_action = {
2218
+ "id" => String,
2219
+ "conversationId" => String,
2220
+ "messageId" => String,
2221
+ "toolUseId" => String,
2222
+ "toolName" => String,
2223
+ "toolInput" => Hash[String, untyped],
2224
+ "status" => "pending" | "approved" | "rejected" | "executed" | "errored",
2225
+ "result" => String | nil,
2226
+ "isError" => bool,
2227
+ "summary" => String | nil,
2228
+ "resolvedAt" => String | nil,
2229
+ "createdAt" => String
2230
+ }
2231
+
2232
+ # Spec schema: `ChatPendingDecisionInput`.
2233
+ type chat_pending_decision_input = { "action" => "approve" | "reject", ?"reason" => String }
2234
+
2235
+ # Spec schema: `ChatPendingDecisionResult`.
2236
+ type chat_pending_decision_result = { "ok" => bool, "allResolved" => bool }
2237
+
2238
+ # Spec schema: `ChatPendingSecretRequest`.
2239
+ type chat_pending_secret_request = {
2240
+ "id" => String,
2241
+ "conversationId" => String,
2242
+ "messageId" => String,
2243
+ "toolUseId" => String,
2244
+ "secretId" => String | nil,
2245
+ "name" => String,
2246
+ "title" => String | nil,
2247
+ "description" => String | nil,
2248
+ "status" => "pending" | "submitting" | "stored",
2249
+ "resolvedAt" => String | nil,
2250
+ "createdAt" => String,
2251
+ "updatedAt" => String
2252
+ }
2253
+
2180
2254
  # Spec schema: `ChatSecretRequestResult`.
2181
2255
  type chat_secret_request_result = { "ok" => bool, "allResolved" => bool }
2182
2256
 
2257
+ # Spec schema: `ChatSpendStatus`.
2258
+ type chat_spend_status = {
2259
+ "monthToDateMicros" => Numeric,
2260
+ "monthlyCapMicros" => Numeric | nil,
2261
+ "exceeded" => bool,
2262
+ "freeTier" => bool,
2263
+ "complimentary" => bool
2264
+ }
2265
+
2183
2266
  # Spec schema: `ChildResourceRef`.
2184
2267
  type child_resource_ref = {
2185
2268
  "id" => resource_id,
@@ -2320,7 +2403,7 @@ module Infrawrench
2320
2403
  }
2321
2404
 
2322
2405
  # Spec schema: `ComplianceControlOwner`.
2323
- type compliance_control_owner = { "userId" => String | nil, "displayName" => String, "isLabel" => bool } | nil
2406
+ type compliance_control_owner = { "userId" => String | nil, "displayName" => String, "isLabel" => bool }
2324
2407
 
2325
2408
  # Spec schema: `ComplianceControlRow`.
2326
2409
  type compliance_control_row = {
@@ -2333,7 +2416,7 @@ module Infrawrench
2333
2416
  "missingSources" => Array[String],
2334
2417
  "applicable" => bool,
2335
2418
  "justification" => String | nil,
2336
- "owner" => compliance_control_owner,
2419
+ "owner" => compliance_control_owner | nil,
2337
2420
  "notes" => String | nil,
2338
2421
  "settingUpdatedAt" => String | nil
2339
2422
  }
@@ -2441,7 +2524,7 @@ module Infrawrench
2441
2524
  # Spec schema: `ComplianceStatus`.
2442
2525
  type compliance_status = {
2443
2526
  "framework" => compliance_framework_summary,
2444
- "period" => { "from" => String, "to" => String },
2527
+ "period" => { "from" => untyped, "to" => untyped },
2445
2528
  "controls" => Array[compliance_control_row],
2446
2529
  "sources" => Array[compliance_evidence_source_result],
2447
2530
  "counts" => compliance_status_counts,
@@ -2552,16 +2635,7 @@ module Infrawrench
2552
2635
  "id" => String,
2553
2636
  "name" => String,
2554
2637
  "filters" => Array[cost_alert_filter],
2555
- "groupBy" => "provider"
2556
- | "account"
2557
- | "service"
2558
- | "region"
2559
- | "resource"
2560
- | "tag"
2561
- | "charge_type"
2562
- | "commitment"
2563
- | "virtual_tag"
2564
- | nil,
2638
+ "groupBy" => cost_dimension | nil,
2565
2639
  "groupByTagKey" => String | nil,
2566
2640
  "cadence" => cost_change_cadence,
2567
2641
  "thresholdPercent" => Integer | nil,
@@ -2597,15 +2671,7 @@ module Infrawrench
2597
2671
 
2598
2672
  # Spec schema: `CostAlertFilter`.
2599
2673
  type cost_alert_filter = {
2600
- "dimension" => "provider"
2601
- | "account"
2602
- | "service"
2603
- | "region"
2604
- | "resource"
2605
- | "tag"
2606
- | "charge_type"
2607
- | "commitment"
2608
- | "virtual_tag",
2674
+ "dimension" => cost_dimension,
2609
2675
  "op" => cost_filter_operator,
2610
2676
  "values" => Array[String],
2611
2677
  ?"tagKey" => String
@@ -2615,16 +2681,7 @@ module Infrawrench
2615
2681
  type cost_alert_input = {
2616
2682
  "name" => String,
2617
2683
  ?"filters" => Array[cost_alert_filter],
2618
- ?"groupBy" => "provider"
2619
- | "account"
2620
- | "service"
2621
- | "region"
2622
- | "resource"
2623
- | "tag"
2624
- | "charge_type"
2625
- | "commitment"
2626
- | "virtual_tag"
2627
- | nil,
2684
+ ?"groupBy" => cost_dimension | nil,
2628
2685
  ?"groupByTagKey" => String,
2629
2686
  "cadence" => cost_change_cadence,
2630
2687
  ?"thresholdPercent" => Integer | nil,
@@ -2678,7 +2735,7 @@ module Infrawrench
2678
2735
  "annotationId" => String | nil
2679
2736
  }
2680
2737
  | nil,
2681
- "feedback" => cost_anomaly_feedback,
2738
+ "feedback" => cost_anomaly_feedback | nil,
2682
2739
  "suppressionId" => String | nil
2683
2740
  }
2684
2741
 
@@ -2710,20 +2767,19 @@ module Infrawrench
2710
2767
  #
2711
2768
  # Spec schema: `CostAnomalyFeedback`.
2712
2769
  type cost_anomaly_feedback = {
2713
- "verdict" => "expected" | "unexpected",
2714
- "reason" => cost_anomaly_feedback_reason,
2715
- "note" => String | nil,
2716
- "at" => String,
2717
- "byUserId" => String | nil,
2718
- "byName" => String | nil,
2719
- "suppressionId" => String | nil
2720
- }
2721
- | nil
2770
+ "verdict" => "expected" | "unexpected",
2771
+ "reason" => cost_anomaly_feedback_reason | nil,
2772
+ "note" => String | nil,
2773
+ "at" => String,
2774
+ "byUserId" => String | nil,
2775
+ "byName" => String | nil,
2776
+ "suppressionId" => String | nil
2777
+ }
2722
2778
 
2723
2779
  # Spec schema: `CostAnomalyFeedbackInput`.
2724
2780
  type cost_anomaly_feedback_input = {
2725
2781
  "verdict" => "expected" | "unexpected",
2726
- ?"reason" => cost_anomaly_feedback_reason,
2782
+ ?"reason" => cost_anomaly_feedback_reason | nil,
2727
2783
  ?"note" => String | nil,
2728
2784
  ?"explain" => bool,
2729
2785
  ?"suppress" => {
@@ -2737,10 +2793,9 @@ module Infrawrench
2737
2793
 
2738
2794
  # Spec schema: `CostAnomalyFeedbackReason`.
2739
2795
  type cost_anomaly_feedback_reason = "planned_launch" | "migration" | "seasonal" | "pricing_change" | "data_issue" | "other"
2740
- | nil
2741
2796
 
2742
2797
  # Spec schema: `CostAnomalyFeedbackResult`.
2743
- type cost_anomaly_feedback_result = { "anomaly" => cost_anomaly, "suppression" => cost_anomaly_suppression }
2798
+ type cost_anomaly_feedback_result = { "anomaly" => cost_anomaly, "suppression" => cost_anomaly_suppression | nil }
2744
2799
 
2745
2800
  # Spec schema: `CostAnomalyPrecisionReport`.
2746
2801
  type cost_anomaly_precision_report = {
@@ -2760,7 +2815,7 @@ module Infrawrench
2760
2815
  "unexpected" => Integer,
2761
2816
  "precision" => Numeric | nil
2762
2817
  },
2763
- "reasons" => Array[{ "reason" => cost_anomaly_feedback_reason & String, "count" => Integer }]
2818
+ "reasons" => Array[{ "reason" => cost_anomaly_feedback_reason, "count" => Integer }]
2764
2819
  }
2765
2820
 
2766
2821
  # How the suppression repeats. `one_off` covers every day from `startsOn` to
@@ -2795,34 +2850,41 @@ module Infrawrench
2795
2850
  "newSourceMinCents" => Integer,
2796
2851
  "smsAlerts" => "off" | "new_source" | "all",
2797
2852
  ?"feedbackTuning" => bool,
2798
- ?"emailRecipients" => alert_email_recipients
2853
+ ?"emailRecipients" => alert_email_recipients & untyped
2799
2854
  }
2800
2855
 
2801
2856
  # Spec schema: `CostAnomalySettingsView`.
2802
- type cost_anomaly_settings_view = cost_anomaly_settings & { "smsConfigured" => bool }
2857
+ type cost_anomaly_settings_view = {
2858
+ "sigmas" => Numeric,
2859
+ "minDeltaCents" => Integer,
2860
+ "newSourceMinCents" => Integer,
2861
+ "smsAlerts" => "off" | "new_source" | "all",
2862
+ ?"feedbackTuning" => bool,
2863
+ ?"emailRecipients" => alert_email_recipients & untyped,
2864
+ "smsConfigured" => bool
2865
+ }
2803
2866
 
2804
2867
  # Spec schema: `CostAnomalySuppression`.
2805
2868
  type cost_anomaly_suppression = {
2806
- "id" => String,
2807
- "scope" => cost_anomaly_suppression_scope,
2808
- "scopeKey" => String,
2809
- "tagKey" => String | nil,
2810
- "scopeLabel" => String | nil,
2811
- "recurrence" => cost_anomaly_recurrence,
2812
- "anchorDay" => String,
2813
- "startsOn" => String,
2814
- "expiresOn" => String,
2815
- "reason" => cost_anomaly_feedback_reason,
2816
- "note" => String | nil,
2817
- "sourceAnomalyId" => String | nil,
2818
- "createdByUserId" => String | nil,
2819
- "createdByName" => String | nil,
2820
- "createdAt" => String,
2821
- "updatedAt" => String,
2822
- "active" => bool,
2823
- "suppressedCount" => Integer
2824
- }
2825
- | nil
2869
+ "id" => String,
2870
+ "scope" => cost_anomaly_suppression_scope,
2871
+ "scopeKey" => String,
2872
+ "tagKey" => String | nil,
2873
+ "scopeLabel" => String | nil,
2874
+ "recurrence" => cost_anomaly_recurrence,
2875
+ "anchorDay" => String,
2876
+ "startsOn" => String,
2877
+ "expiresOn" => String,
2878
+ "reason" => cost_anomaly_feedback_reason | nil,
2879
+ "note" => String | nil,
2880
+ "sourceAnomalyId" => String | nil,
2881
+ "createdByUserId" => String | nil,
2882
+ "createdByName" => String | nil,
2883
+ "createdAt" => String,
2884
+ "updatedAt" => String,
2885
+ "active" => bool,
2886
+ "suppressedCount" => Integer
2887
+ }
2826
2888
 
2827
2889
  # Spec schema: `CostAnomalySuppressionInput`.
2828
2890
  type cost_anomaly_suppression_input = {
@@ -2833,7 +2895,7 @@ module Infrawrench
2833
2895
  "anchorDay" => String,
2834
2896
  ?"startsOn" => String,
2835
2897
  "expiresOn" => String,
2836
- ?"reason" => cost_anomaly_feedback_reason,
2898
+ ?"reason" => cost_anomaly_feedback_reason | nil,
2837
2899
  ?"note" => String | nil
2838
2900
  }
2839
2901
 
@@ -2894,7 +2956,49 @@ module Infrawrench
2894
2956
  "metric" => cost_canvas_kpi_metric,
2895
2957
  ?"comparePreviousPeriod" => bool
2896
2958
  }
2897
- | { "id" => String, "kind" => "chart", "title" => String, "config" => json_object }
2959
+ | {
2960
+ "id" => String,
2961
+ "kind" => "chart",
2962
+ "title" => String,
2963
+ "config" => {
2964
+ "version" => Numeric,
2965
+ "chartType" => "stacked_bar" | "multi_bar" | "line" | "area" | "pie" | "donut" | "table",
2966
+ "binning" => cost_binning,
2967
+ "dateRange" => cost_date_range,
2968
+ "groupBy" => "none"
2969
+ | "provider"
2970
+ | "account"
2971
+ | "service"
2972
+ | "region"
2973
+ | "resource"
2974
+ | "tag"
2975
+ | "charge_type"
2976
+ | "commitment"
2977
+ | "virtual_tag",
2978
+ ?"groupByTagKey" => String,
2979
+ ?"filters" => Array[cost_report_filter],
2980
+ ?"savedFilterId" => String,
2981
+ ?"topN" => Integer,
2982
+ ?"comparePreviousPeriod" => bool,
2983
+ ?"showForecast" => bool,
2984
+ ?"scenarioModelId" => String,
2985
+ ?"costBasis" => "cash" | "amortized" | "blended",
2986
+ ?"unitCostMetricId" => String,
2987
+ ?"unitCostMode" => unit_cost_mode & untyped,
2988
+ ?"unitCostScale" => Numeric,
2989
+ ?"unitCostUsageUnit" => String,
2990
+ ?"unitCostLabelFilters" => Array[unit_cost_label_filter],
2991
+ ?"unitCostGroupByLabel" => String,
2992
+ ?"adjusted" => bool,
2993
+ ?"measure" => cost_measure,
2994
+ ?"usageUnit" => String,
2995
+ ?"cumulative" => bool,
2996
+ ?"xAxis" => cost_dimension,
2997
+ ?"xAxisTagKey" => String,
2998
+ ?"segmentByDate" => bool,
2999
+ ?"comparisonStyle" => "line" | "bars"
3000
+ }
3001
+ }
2898
3002
  | { "id" => String, "kind" => "table", "title" => String, "query" => cost_canvas_table_query }
2899
3003
  | { "id" => String, "kind" => "budgets", "title" => String, ?"budgetIds" => Array[String] }
2900
3004
  | {
@@ -2916,7 +3020,7 @@ module Infrawrench
2916
3020
  # Spec schema: `CostCanvasKpiMetric`.
2917
3021
  type cost_canvas_kpi_metric = {
2918
3022
  "type" => "spend",
2919
- "dateRange" => cost_date_range & untyped,
3023
+ "dateRange" => cost_date_range,
2920
3024
  ?"filters" => Array[cost_report_filter],
2921
3025
  ?"savedFilterId" => String,
2922
3026
  ?"costBasis" => "cash" | "amortized" | "blended",
@@ -2925,7 +3029,7 @@ module Infrawrench
2925
3029
  | {
2926
3030
  "type" => "unit_cost",
2927
3031
  "businessMetricId" => String,
2928
- "dateRange" => cost_date_range & untyped,
3032
+ "dateRange" => cost_date_range,
2929
3033
  ?"filters" => Array[cost_report_filter],
2930
3034
  ?"savedFilterId" => String,
2931
3035
  ?"costBasis" => "cash" | "amortized" | "blended"
@@ -2973,16 +3077,12 @@ module Infrawrench
2973
3077
  "blocks" => Array[json_object]
2974
3078
  }
2975
3079
 
2976
- # The structured query spec. It holds queries, never numbers: running the
2977
- # canvas re-executes every block, so a refresh needs no model call. Validated
2978
- # strictly on write; there is no field that takes a query string or SQL.
2979
- #
2980
3080
  # Spec schema: `CostCanvasSpec`.
2981
3081
  type cost_canvas_spec = { "version" => Numeric, "blocks" => Array[cost_canvas_block] }
2982
3082
 
2983
3083
  # Spec schema: `CostCanvasTableQuery`.
2984
3084
  type cost_canvas_table_query = {
2985
- "dateRange" => cost_date_range & untyped,
3085
+ "dateRange" => cost_date_range,
2986
3086
  "binning" => "none" | "daily" | "weekly" | "monthly",
2987
3087
  "groupBy" => "provider"
2988
3088
  | "account"
@@ -2991,7 +3091,8 @@ module Infrawrench
2991
3091
  | "resource"
2992
3092
  | "tag"
2993
3093
  | "charge_type"
2994
- | "commitment",
3094
+ | "commitment"
3095
+ | "virtual_tag",
2995
3096
  ?"groupByTagKey" => String,
2996
3097
  ?"filters" => Array[cost_report_filter],
2997
3098
  ?"savedFilterId" => String,
@@ -3037,9 +3138,9 @@ module Infrawrench
3037
3138
  | "support"
3038
3139
  | "other"
3039
3140
 
3040
- # The window. Absent follows the source (a report's own range, the last 30
3041
- # days for savings); refused for a budget and for commitment coverage and
3042
- # utilization.
3141
+ # A relative preset resolves against today every time the report runs, so a
3142
+ # saved report keeps meaning 'the last 30 days'; an absolute range pins it to
3143
+ # fixed dates.
3043
3144
  #
3044
3145
  # Spec schema: `CostDateRange`.
3045
3146
  type cost_date_range = {
@@ -3079,18 +3180,17 @@ module Infrawrench
3079
3180
  "unitCostWindowDays" => Integer,
3080
3181
  "unitCostMinReportedDays" => Integer,
3081
3182
  "unitCostMinSpendCents" => Integer,
3082
- ?"emailRecipients" => alert_email_recipients
3183
+ ?"emailRecipients" => alert_email_recipients & untyped
3083
3184
  }
3084
3185
 
3085
3186
  # Spec schema: `CostEstimate`.
3086
3187
  type cost_estimate = {
3087
- "monthlyAmount" => Numeric,
3088
- "currency" => String,
3089
- "lineItems" => Array[cost_estimate_line_item],
3090
- ?"partial" => bool,
3091
- ?"notes" => Array[String]
3092
- }
3093
- | nil
3188
+ "monthlyAmount" => Numeric,
3189
+ "currency" => String,
3190
+ "lineItems" => Array[cost_estimate_line_item],
3191
+ ?"partial" => bool,
3192
+ ?"notes" => Array[String]
3193
+ }
3094
3194
 
3095
3195
  # Spec schema: `CostEstimateLineItem`.
3096
3196
  type cost_estimate_line_item = {
@@ -3156,15 +3256,7 @@ module Infrawrench
3156
3256
 
3157
3257
  # Spec schema: `CostExportFilter`.
3158
3258
  type cost_export_filter = {
3159
- "dimension" => "provider"
3160
- | "account"
3161
- | "service"
3162
- | "region"
3163
- | "resource"
3164
- | "tag"
3165
- | "charge_type"
3166
- | "commitment"
3167
- | "virtual_tag",
3259
+ "dimension" => cost_dimension,
3168
3260
  "op" => cost_filter_operator,
3169
3261
  "values" => Array[String],
3170
3262
  ?"tagKey" => String
@@ -3223,7 +3315,7 @@ module Infrawrench
3223
3315
  ?"savedFilterId" => String,
3224
3316
  ?"chargeTypes" => Array[cost_charge_type],
3225
3317
  ?"costBasis" => cost_basis,
3226
- ?"dimensions" => Array["provider" | "account" | "service" | "region" | "resource" | "charge_type" | "commitment"],
3318
+ ?"dimensions" => Array[String],
3227
3319
  ?"tagKeys" => Array[String],
3228
3320
  ?"virtualTagKeys" => Array[String]
3229
3321
  },
@@ -3250,15 +3342,7 @@ module Infrawrench
3250
3342
  # Spec schema: `CostExportQuery`.
3251
3343
  type cost_export_query = {
3252
3344
  "version" => Numeric,
3253
- "dimensions" => Array["provider"
3254
- | "account"
3255
- | "service"
3256
- | "region"
3257
- | "resource"
3258
- | "tag"
3259
- | "charge_type"
3260
- | "commitment"
3261
- | "virtual_tag"],
3345
+ "dimensions" => Array[cost_dimension],
3262
3346
  "tagKeys" => Array[String],
3263
3347
  ?"virtualTagKeys" => Array[String],
3264
3348
  "filters" => Array[cost_export_filter],
@@ -3369,13 +3453,13 @@ module Infrawrench
3369
3453
  # badly a straight line fits the last 30 days.
3370
3454
  #
3371
3455
  # Spec schema: `CostForecastConfidenceLevel`.
3372
- type cost_forecast_confidence_level = Numeric | Numeric | Numeric
3456
+ type cost_forecast_confidence_level = Numeric
3373
3457
 
3374
3458
  # Spec schema: `CostForecastInput`.
3375
3459
  type cost_forecast_input = {
3376
3460
  "name" => String,
3377
3461
  ?"description" => String | nil,
3378
- "scenarioModelIds" => Array[String],
3462
+ ?"scenarioModelIds" => Array[String],
3379
3463
  ?"driverMetricId" => String | nil,
3380
3464
  ?"isDefault" => bool
3381
3465
  }
@@ -3455,7 +3539,7 @@ module Infrawrench
3455
3539
  "version" => Numeric,
3456
3540
  "chartType" => "stacked_bar" | "multi_bar" | "line" | "area" | "pie" | "donut" | "table",
3457
3541
  "binning" => cost_binning,
3458
- "dateRange" => cost_date_range & untyped,
3542
+ "dateRange" => cost_date_range,
3459
3543
  "groupBy" => "none"
3460
3544
  | "provider"
3461
3545
  | "account"
@@ -3474,20 +3558,20 @@ module Infrawrench
3474
3558
  ?"showForecast" => bool,
3475
3559
  ?"scenarioModelId" => String,
3476
3560
  ?"costBasis" => "cash" | "amortized" | "blended",
3561
+ ?"unitCostMetricId" => String,
3562
+ ?"unitCostMode" => unit_cost_mode & untyped,
3563
+ ?"unitCostScale" => Numeric,
3564
+ ?"unitCostUsageUnit" => String,
3565
+ ?"unitCostLabelFilters" => Array[unit_cost_label_filter],
3566
+ ?"unitCostGroupByLabel" => String,
3567
+ ?"adjusted" => bool,
3477
3568
  ?"measure" => cost_measure,
3478
3569
  ?"usageUnit" => String,
3479
3570
  ?"cumulative" => bool,
3480
- ?"xAxis" => cost_dimension & untyped,
3571
+ ?"xAxis" => cost_dimension,
3481
3572
  ?"xAxisTagKey" => String,
3482
3573
  ?"segmentByDate" => bool,
3483
- ?"comparisonStyle" => "line" | "bars",
3484
- ?"unitCostMetricId" => String,
3485
- ?"unitCostMode" => "unit_cost" | "margin" | "usage_unit_cost" | "raw_metric",
3486
- ?"unitCostScale" => Numeric | Numeric | Numeric | Numeric | Numeric,
3487
- ?"unitCostUsageUnit" => String,
3488
- ?"unitCostLabelFilters" => Array[{ "key" => String, "op" => "in" | "not_in", "values" => Array[String] }],
3489
- ?"unitCostGroupByLabel" => String,
3490
- ?"adjusted" => bool
3574
+ ?"comparisonStyle" => "line" | "bars"
3491
3575
  }
3492
3576
 
3493
3577
  # What the Y axis sums. `cost` (the default) is money per currency. `usage`
@@ -3533,11 +3617,12 @@ module Infrawrench
3533
3617
  ?"scenarioModelId" => String,
3534
3618
  ?"costBasis" => cost_basis,
3535
3619
  ?"chargeTypes" => Array[cost_charge_type],
3620
+ ?"displayCurrency" => String,
3536
3621
  ?"adjusted" => bool,
3537
3622
  ?"measure" => cost_measure,
3538
3623
  ?"usageUnit" => String,
3539
3624
  ?"cumulative" => bool,
3540
- ?"xAxis" => cost_dimension & untyped,
3625
+ ?"xAxis" => cost_dimension,
3541
3626
  ?"xAxisTagKey" => String,
3542
3627
  ?"segmentByDate" => bool
3543
3628
  }
@@ -3592,17 +3677,20 @@ module Infrawrench
3592
3677
  }
3593
3678
 
3594
3679
  # Spec schema: `CostReportAnomalyAlert`.
3595
- type cost_report_anomaly_alert = cost_report_anomaly_alert_input
3596
- & {
3597
- "id" => String,
3598
- "reportId" => String,
3599
- "reportName" => String,
3600
- "createdAt" => String,
3601
- "updatedAt" => String,
3602
- "lastEvaluatedAt" => String | nil,
3603
- "lastError" => String | nil,
3604
- "recent" => Array[cost_report_anomaly]
3605
- }
3680
+ type cost_report_anomaly_alert = {
3681
+ "enabled" => bool,
3682
+ "sigmas" => Numeric,
3683
+ "minDeltaCents" => Integer,
3684
+ "destinations" => Array[alert_destination],
3685
+ "id" => String,
3686
+ "reportId" => String,
3687
+ "reportName" => String,
3688
+ "createdAt" => String,
3689
+ "updatedAt" => String,
3690
+ "lastEvaluatedAt" => String | nil,
3691
+ "lastError" => String | nil,
3692
+ "recent" => Array[cost_report_anomaly]
3693
+ }
3606
3694
 
3607
3695
  # Spec schema: `CostReportAnomalyAlertInput`.
3608
3696
  type cost_report_anomaly_alert_input = {
@@ -3656,15 +3744,7 @@ module Infrawrench
3656
3744
 
3657
3745
  # Spec schema: `CostReportFilter`.
3658
3746
  type cost_report_filter = {
3659
- "dimension" => "provider"
3660
- | "account"
3661
- | "service"
3662
- | "region"
3663
- | "resource"
3664
- | "tag"
3665
- | "charge_type"
3666
- | "commitment"
3667
- | "virtual_tag",
3747
+ "dimension" => cost_dimension,
3668
3748
  "op" => cost_filter_operator,
3669
3749
  "values" => Array[String],
3670
3750
  ?"tagKey" => String
@@ -3727,14 +3807,17 @@ module Infrawrench
3727
3807
  "label" => String,
3728
3808
  "kind" => "one_off" | "recurring" | "rate_change",
3729
3809
  "startDate" => String,
3730
- "endDate" => String | nil,
3731
- "amountCents" => Integer | nil,
3732
- "currency" => String | nil,
3733
- "period" => "daily" | "monthly" | nil,
3734
- "percent" => Numeric | nil,
3735
- "scope" => Array[cost_scenario_scope_term]
3810
+ ?"endDate" => String | nil,
3811
+ ?"amountCents" => Integer | nil,
3812
+ ?"currency" => String | nil,
3813
+ ?"period" => "daily" | "monthly" | nil,
3814
+ ?"percent" => Numeric | nil,
3815
+ ?"scope" => Array[cost_scenario_scope_term]
3736
3816
  }
3737
3817
 
3818
+ # Spec schema: `CostScenarioInUse`.
3819
+ type cost_scenario_in_use = { "error" => String, "referents" => Array[cost_scenario_referent] }
3820
+
3738
3821
  # Spec schema: `CostScenarioModel`.
3739
3822
  type cost_scenario_model = {
3740
3823
  "id" => String,
@@ -3752,9 +3835,12 @@ module Infrawrench
3752
3835
  "name" => String,
3753
3836
  ?"description" => String,
3754
3837
  "currency" => String,
3755
- "adjustments" => Array[cost_scenario_adjustment]
3838
+ ?"adjustments" => Array[cost_scenario_adjustment]
3756
3839
  }
3757
3840
 
3841
+ # Spec schema: `CostScenarioNameConflict`.
3842
+ type cost_scenario_name_conflict = { "error" => String }
3843
+
3758
3844
  # Spec schema: `CostScenarioReferent`.
3759
3845
  type cost_scenario_referent = {
3760
3846
  "kind" => "budget" | "cost_report" | "cost_graph_widget" | "cost_forecast",
@@ -3783,15 +3869,7 @@ module Infrawrench
3783
3869
 
3784
3870
  # Spec schema: `CostScenarioScopeTerm`.
3785
3871
  type cost_scenario_scope_term = {
3786
- "dimension" => "provider"
3787
- | "account"
3788
- | "service"
3789
- | "region"
3790
- | "resource"
3791
- | "tag"
3792
- | "charge_type"
3793
- | "commitment"
3794
- | "virtual_tag",
3872
+ "dimension" => cost_dimension,
3795
3873
  "op" => cost_filter_operator,
3796
3874
  "values" => Array[String],
3797
3875
  ?"tagKey" => String
@@ -3856,7 +3934,7 @@ module Infrawrench
3856
3934
 
3857
3935
  # Spec schema: `CreateAccountRequest`.
3858
3936
  type create_account_request = {
3859
- "pluginId" => String,
3937
+ "pluginId" => plugin_id,
3860
3938
  "displayName" => String,
3861
3939
  "credentials" => Hash[String, String],
3862
3940
  ?"bastionId" => String | nil
@@ -3870,7 +3948,7 @@ module Infrawrench
3870
3948
  ?"repo" => String,
3871
3949
  ?"projectName" => String,
3872
3950
  ?"workspaceName" => String,
3873
- "settings" => agent_settings & Hash[String, untyped],
3951
+ "settings" => agent_settings,
3874
3952
  ?"nibbletsLink" => { "scopes" => Array[String] }
3875
3953
  }
3876
3954
 
@@ -3953,7 +4031,7 @@ module Infrawrench
3953
4031
  }
3954
4032
 
3955
4033
  # Spec schema: `CreateResourceResponse`.
3956
- type create_resource_response = { "id" => resource_id, "displayName" => String, ?"warnings" => Array[String] }
4034
+ type create_resource_response = { "id" => resource_id, "displayName" => String, ?"warnings" => Array[resource_warning] }
3957
4035
 
3958
4036
  # Spec schema: `CreateSharedConsole`.
3959
4037
  type create_shared_console = {
@@ -4086,11 +4164,7 @@ module Infrawrench
4086
4164
  }
4087
4165
 
4088
4166
  # Spec schema: `CurrencySettingsInput`.
4089
- type currency_settings_input = {
4090
- "displayCurrency" => String | nil,
4091
- ?"autoRates" => bool,
4092
- ?"rateBasis" => "daily" | "month_end"
4093
- }
4167
+ type currency_settings_input = { "displayCurrency" => untyped, ?"autoRates" => untyped, ?"rateBasis" => untyped }
4094
4168
 
4095
4169
  # Spec schema: `CustomCostDeleted`.
4096
4170
  type custom_cost_deleted = { "ok" => bool, "zeroedRows" => Integer }
@@ -4215,7 +4289,7 @@ module Infrawrench
4215
4289
  # Spec schema: `CustomGraphRenderResult`.
4216
4290
  type custom_graph_render_result = {
4217
4291
  "ok" => bool,
4218
- "spec" => json_object & (Hash[String, untyped] | nil),
4292
+ "spec" => json_object | nil,
4219
4293
  "error" => String | nil,
4220
4294
  "logs" => Array[{ "level" => "info" | "warn" | "error", "message" => String }],
4221
4295
  "renderedAt" => String,
@@ -4423,9 +4497,9 @@ module Infrawrench
4423
4497
 
4424
4498
  # Spec schema: `DependencyGraphEdge`.
4425
4499
  type dependency_graph_edge = {
4426
- "consumerResourceId" => resource_id & untyped,
4500
+ "consumerResourceId" => resource_id,
4427
4501
  "consumerFieldKey" => String,
4428
- "providerResourceId" => resource_id & untyped,
4502
+ "providerResourceId" => resource_id,
4429
4503
  "providerOutputKey" => String,
4430
4504
  ?"kind" => "output-ref" | "declared" | "containment" | "field-match",
4431
4505
  ?"label" => String
@@ -4529,7 +4603,7 @@ module Infrawrench
4529
4603
  "env" => String,
4530
4604
  "enabled" => bool,
4531
4605
  "lastSha" => String | nil,
4532
- "lastRunAt" => String | nil | nil
4606
+ "lastRunAt" => String | nil
4533
4607
  }
4534
4608
 
4535
4609
  # Spec schema: `DeployTriggerInput`.
@@ -4566,10 +4640,10 @@ module Infrawrench
4566
4640
  "image" => String | nil,
4567
4641
  "status" => deploy_status,
4568
4642
  "origin" => "web" | "cli" | "trigger",
4569
- "stage" => deploy_stage | nil | nil,
4643
+ "stage" => deploy_stage | nil,
4570
4644
  "durationMs" => Integer | nil,
4571
4645
  "buildSeconds" => Integer | nil,
4572
- "buildRunner" => "cloud-build" | "ssh" | nil | nil,
4646
+ "buildRunner" => "cloud-build" | "ssh" | nil,
4573
4647
  "startedAt" => String
4574
4648
  }
4575
4649
 
@@ -4645,10 +4719,6 @@ module Infrawrench
4645
4719
  # Spec schema: `DigestTransportResult`.
4646
4720
  type digest_transport_result = { "attempted" => Integer, "succeeded" => Integer }
4647
4721
 
4648
- # Provider discounts: `commitment_discount` lines and negative
4649
- # `other`/`adjustment` lines (enterprise agreements, private pricing, Savings
4650
- # Plan negation).
4651
- #
4652
4722
  # Spec schema: `DiscountTreatment`.
4653
4723
  type discount_treatment = { "mode" => "pass_through" | "partial" | "retain", ?"passThroughPercent" => Numeric | nil }
4654
4724
 
@@ -4729,7 +4799,7 @@ module Infrawrench
4729
4799
  "fixedVersion" => String | nil,
4730
4800
  "fixAvailable" => bool | nil,
4731
4801
  "exploitAvailable" => bool | nil,
4732
- "kev" => vulnerability_kev_entry,
4802
+ "kev" => vulnerability_kev_entry | nil,
4733
4803
  "artifact" => {
4734
4804
  "kind" => "image" | "function" | "host" | "repository" | "package",
4735
4805
  "name" => String,
@@ -4744,12 +4814,7 @@ module Infrawrench
4744
4814
  "url" => String | nil,
4745
4815
  "collectedAt" => String,
4746
4816
  "running" => Array[vulnerability_running_ref],
4747
- "services" => Array[{
4748
- "id" => String,
4749
- "name" => String,
4750
- "slug" => String,
4751
- "tier" => Numeric | Numeric | Numeric | Numeric | nil
4752
- }],
4817
+ "services" => Array[{ "id" => String, "name" => String, "slug" => String, "tier" => Numeric | nil }],
4753
4818
  "dismissal" => vulnerability_dismissal
4754
4819
  }
4755
4820
 
@@ -4798,40 +4863,34 @@ module Infrawrench
4798
4863
  type dns_record_target = {
4799
4864
  "value" => String,
4800
4865
  "classification" => "owned" | "dangling" | "external" | "not-analysed",
4801
- "resource" => dns_target_resource,
4802
- "service" => dns_target_service
4866
+ "resource" => dns_target_resource | nil,
4867
+ "service" => dns_target_service | nil
4803
4868
  }
4804
4869
 
4805
4870
  # Spec schema: `DnsSkippedNamespace`.
4806
4871
  type dns_skipped_namespace = { "pluginId" => plugin_id, "pluginName" => String, "label" => String, "reason" => String }
4807
4872
 
4808
- # Set only when classification is "owned".
4809
- #
4810
4873
  # Spec schema: `DnsTargetResource`.
4811
4874
  type dns_target_resource = {
4812
- "resourceId" => String,
4813
- "displayName" => String,
4814
- "pluginId" => plugin_id,
4815
- "resourceTypeId" => String,
4816
- "resourceTypeName" => String,
4817
- "accountId" => String
4818
- }
4819
- | nil
4875
+ "resourceId" => String,
4876
+ "displayName" => String,
4877
+ "pluginId" => plugin_id,
4878
+ "resourceTypeId" => String,
4879
+ "resourceTypeName" => String,
4880
+ "accountId" => String
4881
+ }
4820
4882
 
4821
- # Set only when classification is "dangling".
4822
- #
4823
4883
  # Spec schema: `DnsTargetService`.
4824
4884
  type dns_target_service = {
4825
- "pluginId" => plugin_id,
4826
- "pluginName" => String,
4827
- "resourceTypeId" => String,
4828
- "ruleId" => String,
4829
- "label" => String,
4830
- "severity" => "critical" | "high" | "medium" | "low",
4831
- "reason" => String,
4832
- "claimLabel" => String
4833
- }
4834
- | nil
4885
+ "pluginId" => plugin_id,
4886
+ "pluginName" => String,
4887
+ "resourceTypeId" => String,
4888
+ "ruleId" => String,
4889
+ "label" => String,
4890
+ "severity" => "critical" | "high" | "medium" | "low",
4891
+ "reason" => String,
4892
+ "claimLabel" => String
4893
+ }
4835
4894
 
4836
4895
  # Spec schema: `DnsZone`.
4837
4896
  type dns_zone = {
@@ -4862,7 +4921,7 @@ module Infrawrench
4862
4921
  # was nothing to measure.
4863
4922
  #
4864
4923
  # Spec schema: `DoraBand`.
4865
- type dora_band = "elite" | "high" | "medium" | "low" | nil
4924
+ type dora_band = "elite" | "high" | "medium" | "low"
4866
4925
 
4867
4926
  # Spec schema: `DoraChange`.
4868
4927
  type dora_change = {
@@ -4879,8 +4938,8 @@ module Infrawrench
4879
4938
  "url" => String | nil,
4880
4939
  "isRollback" => bool,
4881
4940
  "leadTimeHours" => Numeric | nil,
4882
- "failure" => dora_failure,
4883
- "scope" => Hash[String, dora_scope_value & (Hash[String, untyped] | nil)]
4941
+ "failure" => dora_failure | nil,
4942
+ "scope" => Hash[String, dora_scope_value | nil]
4884
4943
  }
4885
4944
 
4886
4945
  # Spec schema: `DoraChangeList`.
@@ -4905,22 +4964,21 @@ module Infrawrench
4905
4964
 
4906
4965
  # Spec schema: `DoraFailure`.
4907
4966
  type dora_failure = {
4908
- "kind" => "incident" | "rollback" | "failed_deploy" | "reverted",
4909
- "refId" => String,
4910
- "title" => String,
4911
- "at" => String
4912
- }
4913
- | nil
4967
+ "kind" => "incident" | "rollback" | "failed_deploy" | "reverted",
4968
+ "refId" => String,
4969
+ "title" => String,
4970
+ "at" => String
4971
+ }
4914
4972
 
4915
4973
  # Spec schema: `DoraReport`.
4916
4974
  type dora_report = {
4917
4975
  "from" => String,
4918
4976
  "to" => String,
4919
4977
  "bucket" => "day" | "week",
4920
- "filter" => dora_scope_filter,
4978
+ "filter" => dora_scope_filter | nil,
4921
4979
  "groupBy" => String,
4922
4980
  "summary" => dora_summary,
4923
- "previous" => dora_summary & untyped,
4981
+ "previous" => dora_summary,
4924
4982
  "trend" => Array[{
4925
4983
  "start" => String,
4926
4984
  "deploys" => Integer,
@@ -4953,7 +5011,7 @@ module Infrawrench
4953
5011
  type dora_restore_list = { "restores" => Array[dora_restore] }
4954
5012
 
4955
5013
  # Spec schema: `DoraScopeFilter`.
4956
- type dora_scope_filter = { "dimension" => String, "value" => String | nil } | nil
5014
+ type dora_scope_filter = { "dimension" => String, "value" => String | nil }
4957
5015
 
4958
5016
  # Spec schema: `DoraScopeValue`.
4959
5017
  type dora_scope_value = { "key" => String, "label" => String }
@@ -4990,27 +5048,27 @@ module Infrawrench
4990
5048
  type dora_summary = {
4991
5049
  "deploymentFrequency" => {
4992
5050
  "value" => Numeric | nil,
4993
- "band" => dora_band,
5051
+ "band" => dora_band | nil,
4994
5052
  "sample" => Integer,
4995
5053
  "deploys" => Integer,
4996
5054
  "days" => Numeric
4997
5055
  },
4998
5056
  "leadTime" => {
4999
5057
  "value" => Numeric | nil,
5000
- "band" => dora_band,
5058
+ "band" => dora_band | nil,
5001
5059
  "sample" => Integer,
5002
5060
  "p90Hours" => Numeric | nil
5003
5061
  },
5004
5062
  "changeFailureRate" => {
5005
5063
  "value" => Numeric | nil,
5006
- "band" => dora_band,
5064
+ "band" => dora_band | nil,
5007
5065
  "sample" => Integer,
5008
5066
  "changes" => Integer,
5009
5067
  "failures" => Integer
5010
5068
  },
5011
5069
  "timeToRestore" => {
5012
5070
  "value" => Numeric | nil,
5013
- "band" => dora_band,
5071
+ "band" => dora_band | nil,
5014
5072
  "sample" => Integer,
5015
5073
  "restores" => Integer
5016
5074
  }
@@ -5091,7 +5149,7 @@ module Infrawrench
5091
5149
  "accountName" => String | nil,
5092
5150
  "currency" => String | nil,
5093
5151
  "amount" => Numeric | nil,
5094
- "detail" => Hash[String, String | Numeric | nil | nil],
5152
+ "detail" => Hash[String, String | Numeric | nil],
5095
5153
  "firedAt" => String,
5096
5154
  "notifiedAt" => String | nil,
5097
5155
  ?"remediation" => finding_remediation
@@ -5105,16 +5163,24 @@ module Infrawrench
5105
5163
  }
5106
5164
 
5107
5165
  # Spec schema: `EnvironmentCaptureDraftMember`.
5108
- type environment_capture_draft_member = environment_template_member
5109
- & {
5110
- "fieldMeta" => Hash[String, {
5111
- "label" => String,
5112
- "kind" => String,
5113
- "required" => bool,
5114
- ?"options" => Array[{ "id" => String, "label" => String }],
5115
- "parameterisable" => bool
5116
- }]
5117
- }
5166
+ type environment_capture_draft_member = {
5167
+ "key" => String,
5168
+ "pluginId" => plugin_id,
5169
+ "resourceTypeId" => String,
5170
+ "accountId" => String,
5171
+ "sourceName" => String,
5172
+ ?"sourceResourceId" => String,
5173
+ ?"nameFieldKey" => String,
5174
+ ?"parentMember" => String,
5175
+ "fields" => Hash[String, environment_template_field_value],
5176
+ "fieldMeta" => Hash[String, {
5177
+ "label" => String,
5178
+ "kind" => String,
5179
+ "required" => bool,
5180
+ ?"options" => Array[{ "id" => String, "label" => String }],
5181
+ "parameterisable" => bool
5182
+ }]
5183
+ }
5118
5184
 
5119
5185
  # Spec schema: `EnvironmentCaptureRequest`.
5120
5186
  type environment_capture_request = {
@@ -5147,8 +5213,8 @@ module Infrawrench
5147
5213
  "resourceTypeId" => String,
5148
5214
  "resourceTypeName" => String,
5149
5215
  "status" => "only-in-a" | "only-in-b" | "changed",
5150
- "a" => environment_diff_resource_ref,
5151
- "b" => environment_diff_resource_ref & untyped,
5216
+ "a" => environment_diff_resource_ref | nil,
5217
+ "b" => environment_diff_resource_ref | nil,
5152
5218
  "changes" => Array[environment_diff_field_change],
5153
5219
  "suppressedCount" => Integer
5154
5220
  }
@@ -5156,16 +5222,13 @@ module Infrawrench
5156
5222
  # Spec schema: `EnvironmentDiffFieldChange`.
5157
5223
  type environment_diff_field_change = { "field" => String, ?"a" => untyped, ?"b" => untyped }
5158
5224
 
5159
- # Null when the resource exists only on B.
5160
- #
5161
5225
  # Spec schema: `EnvironmentDiffResourceRef`.
5162
5226
  type environment_diff_resource_ref = {
5163
- "resourceId" => String,
5164
- "accountId" => String,
5165
- "displayName" => String,
5166
- "externalId" => String | nil
5167
- }
5168
- | nil
5227
+ "resourceId" => String,
5228
+ "accountId" => String,
5229
+ "displayName" => String,
5230
+ "externalId" => String | nil
5231
+ }
5169
5232
 
5170
5233
  # Spec schema: `EnvironmentDiffResponse`.
5171
5234
  type environment_diff_response = {
@@ -5339,7 +5402,7 @@ module Infrawrench
5339
5402
  # routed only to Teams or push will always escalate.
5340
5403
  #
5341
5404
  # Spec schema: `EscalationPolicy`.
5342
- type escalation_policy = { "afterMinutes" => Integer, "destinations" => Array[alert_destination] } | nil
5405
+ type escalation_policy = { "afterMinutes" => Integer, "destinations" => Array[alert_destination] }
5343
5406
 
5344
5407
  # `data` of a `account.sync.failing` event, version 1. An account's sync kept
5345
5408
  # failing past the org's paging threshold.
@@ -5786,7 +5849,7 @@ module Infrawrench
5786
5849
  "redeliveryOf" => String | nil,
5787
5850
  "attempts" => Array[event_delivery_attempt],
5788
5851
  "createdAt" => String,
5789
- "payload" => Hash[String, untyped]
5852
+ "payload" => untyped
5790
5853
  }
5791
5854
 
5792
5855
  # Spec schema: `EventDeliveryAttempt`.
@@ -5817,7 +5880,7 @@ module Infrawrench
5817
5880
  "destination" => event_destination,
5818
5881
  "destinationLabel" => String,
5819
5882
  "eventTypes" => Array[String],
5820
- "minSeverity" => event_severity & (String | nil),
5883
+ "minSeverity" => event_severity | nil,
5821
5884
  "accountIds" => Array[String],
5822
5885
  "environments" => Array[String],
5823
5886
  "secretHint" => String | nil,
@@ -5838,7 +5901,7 @@ module Infrawrench
5838
5901
  ?"enabled" => bool,
5839
5902
  "destination" => event_destination,
5840
5903
  ?"eventTypes" => Array[String],
5841
- ?"minSeverity" => event_severity & (String | nil),
5904
+ ?"minSeverity" => event_severity | nil,
5842
5905
  ?"accountIds" => Array[String],
5843
5906
  ?"environments" => Array[String]
5844
5907
  }
@@ -5872,7 +5935,7 @@ module Infrawrench
5872
5935
  "category" => "cost" | "security" | "reliability" | "access" | "operations" | "system",
5873
5936
  "defaultSeverity" => event_severity,
5874
5937
  "carriesCost" => bool,
5875
- "schema" => Hash[String, untyped]
5938
+ "schema" => untyped
5876
5939
  }
5877
5940
 
5878
5941
  # An account's sync kept failing past the org's paging threshold.
@@ -6350,9 +6413,23 @@ module Infrawrench
6350
6413
  "updatedAt" => String
6351
6414
  }
6352
6415
 
6353
- # Spec schema: `ExchangeRateImportRefusal`.
6354
- type exchange_rate_import_refusal = exchange_rate_import_result & { "error" => String }
6355
-
6416
+ # Spec schema: `ExchangeRateImportRefusal`.
6417
+ type exchange_rate_import_refusal = {
6418
+ "dryRun" => bool,
6419
+ "applied" => bool,
6420
+ "rows" => Array[{
6421
+ "line" => Integer,
6422
+ "action" => "create" | "update" | "unchanged" | "error",
6423
+ ?"rate" => exchange_rate_input & untyped,
6424
+ ?"previousRate" => String,
6425
+ ?"previousEffectiveTo" => String | nil,
6426
+ ?"error" => String
6427
+ }],
6428
+ "counts" => { "create" => Integer, "update" => Integer, "unchanged" => Integer, "error" => Integer },
6429
+ "fileError" => String | nil,
6430
+ "error" => String
6431
+ }
6432
+
6356
6433
  # Spec schema: `ExchangeRateImportRequest`.
6357
6434
  type exchange_rate_import_request = { "csv" => String, ?"dryRun" => bool, ?"skipInvalid" => bool }
6358
6435
 
@@ -6438,8 +6515,6 @@ module Infrawrench
6438
6515
  "generatedAt" => String
6439
6516
  }
6440
6517
 
6441
- # Item count per severity; every bucket present, zeros included.
6442
- #
6443
6518
  # Spec schema: `ExpirySeverityCounts`.
6444
6519
  type expiry_severity_counts = {
6445
6520
  "expired" => Integer,
@@ -6555,12 +6630,12 @@ module Infrawrench
6555
6630
  "sourceKind" => github_issue_source_kind,
6556
6631
  "sourceId" => String,
6557
6632
  "title" => String,
6558
- ?"details" => Array[{ "label" => String, ?"value" => String | Numeric | nil | nil }],
6633
+ ?"details" => Array[{ "label" => String, ?"value" => String | Numeric | nil }],
6559
6634
  ?"note" => String,
6560
6635
  ?"resourceId" => String,
6561
6636
  ?"monthlyCost" => { "amount" => Numeric, "currency" => String },
6562
6637
  ?"remediation" => Array[String],
6563
- ?"repo" => github_repo_ref & Hash[String, untyped],
6638
+ ?"repo" => github_repo_ref,
6564
6639
  ?"labels" => Array[String],
6565
6640
  ?"assignees" => Array[String],
6566
6641
  ?"appUrl" => String
@@ -6598,13 +6673,20 @@ module Infrawrench
6598
6673
  }
6599
6674
 
6600
6675
  # Spec schema: `FxFeedRates`.
6601
- type fx_feed_rates = fx_feed_status
6602
- & {
6603
- "date" => String,
6604
- "base" => String,
6605
- "rateDate" => String | nil,
6606
- "rates" => Array[{ "currency" => String, "rate" => Numeric }]
6607
- }
6676
+ type fx_feed_rates = {
6677
+ "source" => "ecb",
6678
+ "sourceName" => String,
6679
+ "sourceUrl" => String,
6680
+ "latestRateDate" => String | nil,
6681
+ "earliestRateDate" => String | nil,
6682
+ "currencies" => Array[String],
6683
+ "lastSuccessAt" => String | nil,
6684
+ "lastError" => String | nil,
6685
+ "date" => String,
6686
+ "base" => String,
6687
+ "rateDate" => String | nil,
6688
+ "rates" => Array[{ "currency" => String, "rate" => Numeric }]
6689
+ }
6608
6690
 
6609
6691
  # Spec schema: `FxFeedStatus`.
6610
6692
  type fx_feed_status = {
@@ -6631,21 +6713,48 @@ module Infrawrench
6631
6713
  "privateKey" => String
6632
6714
  }
6633
6715
 
6716
+ # Spec schema: `GithubAppRepos`.
6717
+ type github_app_repos = {
6718
+ "repos" => Array[{
6719
+ "installationId" => Integer,
6720
+ "id" => Integer,
6721
+ "fullName" => String,
6722
+ "defaultBranch" => String,
6723
+ "private" => bool
6724
+ }]
6725
+ }
6726
+
6727
+ # Spec schema: `GithubAppStatus`.
6728
+ type github_app_status = {
6729
+ "configured" => bool,
6730
+ "appSlug" => String | nil,
6731
+ "installations" => Array[{ "installationId" => Integer, "accountLogin" => String | nil }]
6732
+ }
6733
+
6634
6734
  # Spec schema: `GithubAssignee`.
6635
6735
  type github_assignee = { "login" => String, "avatarUrl" => String | nil }
6636
6736
 
6637
6737
  # Spec schema: `GithubIacSource`.
6638
- type github_iac_source = github_iac_source_input & { "id" => String }
6738
+ type github_iac_source = {
6739
+ "id" => String,
6740
+ "iacAccountId" => String | nil,
6741
+ "repo" => github_repo_ref,
6742
+ "baseBranch" => String | nil,
6743
+ "directory" => String
6744
+ }
6639
6745
 
6640
6746
  # Spec schema: `GithubIacSourceInput`.
6641
6747
  type github_iac_source_input = {
6642
6748
  ?"id" => String,
6643
6749
  "iacAccountId" => String | nil,
6644
- "repo" => github_repo_ref & Hash[String, untyped],
6750
+ "repo" => github_repo_ref,
6645
6751
  "baseBranch" => String | nil,
6646
6752
  "directory" => String
6647
6753
  }
6648
6754
 
6755
+ # Spec schema: `GithubInstallUrl`.
6756
+ type github_install_url = { "url" => String }
6757
+
6649
6758
  # What an installation has **accepted**. An installation made before issue
6650
6759
  # filing existed shows `issues: none` until an owner of the GitHub account
6651
6760
  # approves the app's updated permissions.
@@ -6677,7 +6786,7 @@ module Infrawrench
6677
6786
  "pullRequestNumber" => Integer | nil,
6678
6787
  "pullRequestUrl" => String | nil,
6679
6788
  "status" => String | nil,
6680
- "statusCategory" => issue_status_category,
6789
+ "statusCategory" => issue_status_category | nil,
6681
6790
  "assignee" => String | nil,
6682
6791
  "issueUpdatedAt" => String | nil,
6683
6792
  "statusSyncedAt" => String | nil,
@@ -6687,13 +6796,19 @@ module Infrawrench
6687
6796
  }
6688
6797
 
6689
6798
  # Spec schema: `GithubIssueRoute`.
6690
- type github_issue_route = github_issue_route_input & { "id" => String }
6799
+ type github_issue_route = {
6800
+ "id" => String,
6801
+ "match" => github_issue_route_match,
6802
+ "repo" => github_repo_ref,
6803
+ "labels" => Array[String],
6804
+ "assignees" => Array[String]
6805
+ }
6691
6806
 
6692
6807
  # Spec schema: `GithubIssueRouteInput`.
6693
6808
  type github_issue_route_input = {
6694
6809
  ?"id" => String,
6695
6810
  "match" => github_issue_route_match,
6696
- "repo" => github_repo_ref & Hash[String, untyped],
6811
+ "repo" => github_repo_ref,
6697
6812
  "labels" => Array[String],
6698
6813
  "assignees" => Array[String]
6699
6814
  }
@@ -6709,7 +6824,7 @@ module Infrawrench
6709
6824
 
6710
6825
  # Spec schema: `GithubIssueRouteResolution`.
6711
6826
  type github_issue_route_resolution = {
6712
- "repo" => github_repo_ref,
6827
+ "repo" => github_repo_ref | nil,
6713
6828
  "labels" => Array[String],
6714
6829
  "assignees" => Array[String],
6715
6830
  "routeId" => String | nil
@@ -6718,7 +6833,7 @@ module Infrawrench
6718
6833
  # Spec schema: `GithubIssueSettings`.
6719
6834
  type github_issue_settings = {
6720
6835
  "enabled" => bool,
6721
- "defaultRepo" => github_repo_ref,
6836
+ "defaultRepo" => github_repo_ref | nil,
6722
6837
  "labels" => Array[String],
6723
6838
  "assignees" => Array[String],
6724
6839
  "routes" => Array[github_issue_route],
@@ -6732,7 +6847,7 @@ module Infrawrench
6732
6847
  # Spec schema: `GithubIssueSettingsInput`.
6733
6848
  type github_issue_settings_input = {
6734
6849
  "enabled" => bool,
6735
- "defaultRepo" => github_repo_ref,
6850
+ "defaultRepo" => github_repo_ref | nil,
6736
6851
  "labels" => Array[String],
6737
6852
  "assignees" => Array[String],
6738
6853
  "routes" => Array[github_issue_route_input],
@@ -6767,9 +6882,6 @@ module Infrawrench
6767
6882
  # Spec schema: `GithubLabel`.
6768
6883
  type github_label = { "name" => String, "color" => String, "description" => String | nil }
6769
6884
 
6770
- # The installation has not accepted the permission this needs. An owner of the
6771
- # GitHub account approves it from `manageUrl`.
6772
- #
6773
6885
  # Spec schema: `GithubPermissionRequired`.
6774
6886
  type github_permission_required = {
6775
6887
  "error" => String,
@@ -6791,7 +6903,7 @@ module Infrawrench
6791
6903
  # Spec schema: `GithubPullRequestPreview`.
6792
6904
  type github_pull_request_preview = {
6793
6905
  "eligible" => bool,
6794
- "repo" => github_repo_ref & Hash[String, untyped],
6906
+ "repo" => github_repo_ref,
6795
6907
  "baseBranch" => String,
6796
6908
  "path" => String,
6797
6909
  "terraformAddress" => String,
@@ -6804,11 +6916,11 @@ module Infrawrench
6804
6916
  # Spec schema: `GithubPullRequestResult`.
6805
6917
  type github_pull_request_result = {
6806
6918
  "pullRequest" => { "number" => Integer, "url" => String },
6807
- "link" => github_issue_link & (Hash[String, untyped] | nil)
6919
+ "link" => github_issue_link | nil
6808
6920
  }
6809
6921
 
6810
6922
  # Spec schema: `GithubRepoRef`.
6811
- type github_repo_ref = { "installationId" => Integer, "fullName" => String } | nil
6923
+ type github_repo_ref = { "installationId" => Integer, "fullName" => String }
6812
6924
 
6813
6925
  # What happens to an open issue when its finding goes away: close it with a
6814
6926
  # comment, only comment, or leave it alone.
@@ -6834,7 +6946,7 @@ module Infrawrench
6834
6946
  "entityType" => "api-key" | "ssh-key" | "member",
6835
6947
  "entityId" => String,
6836
6948
  "entityName" => String,
6837
- "facts" => Hash[String, String | Numeric | bool | nil | nil]
6949
+ "facts" => Hash[String, String | Numeric | bool | nil]
6838
6950
  }
6839
6951
 
6840
6952
  # Spec schema: `HygieneReport`.
@@ -7011,18 +7123,13 @@ module Infrawrench
7011
7123
  "thresholds" => Array[idle_rule_threshold_view]
7012
7124
  }
7013
7125
 
7014
- # Monthly figure at the provider's published list price, for idle rows a
7015
- # plugin could price. An estimate: show it only when `cost` (billed spend) is
7016
- # null.
7017
- #
7018
7126
  # Spec schema: `IdleSavingsEstimate`.
7019
7127
  type idle_savings_estimate = {
7020
- "monthlyAmount" => Numeric,
7021
- "currency" => String,
7022
- "basis" => "list-price",
7023
- ?"note" => String
7024
- }
7025
- | nil
7128
+ "monthlyAmount" => Numeric,
7129
+ "currency" => String,
7130
+ "basis" => "list-price",
7131
+ ?"note" => String
7132
+ }
7026
7133
 
7027
7134
  # Spec schema: `ImportSshKeyRequest`.
7028
7135
  type import_ssh_key_request = { "name" => String, "publicKey" => String }
@@ -7080,7 +7187,7 @@ module Infrawrench
7080
7187
  "refId" => String | String | nil,
7081
7188
  "refSecondary" => String | nil,
7082
7189
  "error" => String | nil,
7083
- "request" => incident_artifact_request,
7190
+ "request" => incident_artifact_request | nil,
7084
7191
  "createdAt" => String,
7085
7192
  "updatedAt" => String
7086
7193
  }
@@ -7091,7 +7198,7 @@ module Infrawrench
7091
7198
  # page.
7092
7199
  #
7093
7200
  # Spec schema: `IncidentArtifactRequest`.
7094
- type incident_artifact_request = { ?"statusPageId" => String | nil, ?"componentIds" => Array[String] } | nil
7201
+ type incident_artifact_request = { ?"statusPageId" => String | nil, ?"componentIds" => Array[String] }
7095
7202
 
7096
7203
  # Spec schema: `IncidentDeclare`.
7097
7204
  type incident_declare = {
@@ -7108,12 +7215,7 @@ module Infrawrench
7108
7215
  type incident_detail = {
7109
7216
  "incident" => incident,
7110
7217
  "notes" => Array[incident_note],
7111
- "affectedServices" => Array[{
7112
- "id" => String,
7113
- "name" => String,
7114
- "slug" => String,
7115
- "tier" => Numeric | Numeric | Numeric | Numeric | nil
7116
- }]
7218
+ "affectedServices" => Array[{ "id" => String, "name" => String, "slug" => String, "tier" => Numeric | nil }]
7117
7219
  }
7118
7220
 
7119
7221
  # Spec schema: `IncidentList`.
@@ -7221,63 +7323,81 @@ module Infrawrench
7221
7323
  type invite_response = { "id" => String, "token" => String }
7222
7324
 
7223
7325
  # Spec schema: `Invoice`.
7224
- type invoice = invoice_summary
7225
- & {
7226
- ?"totals" => invoice_totals & Hash[String, untyped],
7227
- "notes" => String | nil,
7228
- "lines" => Array[invoice_line],
7229
- "derivation" => invoice_derivation,
7230
- "billing" => invoice_billing,
7231
- "live" => bool,
7232
- "computedAt" => String,
7233
- "approvedByUserId" => String | nil,
7234
- "sentByUserId" => String | nil,
7235
- "voidedByUserId" => String | nil,
7236
- "createdByUserId" => String | nil
7237
- }
7238
-
7239
- # Addressee, recipients, terms and remittance details. Null on invoices
7240
- # approved before billing profiles existed.
7326
+ type invoice = {
7327
+ "id" => String,
7328
+ "managedAccountId" => String,
7329
+ "managedAccountName" => String,
7330
+ "number" => String | nil,
7331
+ "status" => invoice_status,
7332
+ "periodFrom" => String,
7333
+ "periodTo" => String,
7334
+ "currency" => String,
7335
+ "totals" => invoice_totals,
7336
+ "issuedAt" => String | nil,
7337
+ "sentAt" => String | nil,
7338
+ "delivery" => invoice_delivery | nil,
7339
+ "voidedAt" => String | nil,
7340
+ "voidReason" => String | nil,
7341
+ "supersedesInvoiceId" => String | nil,
7342
+ "supersededByInvoiceId" => String | nil,
7343
+ "createdAt" => String,
7344
+ "updatedAt" => String,
7345
+ "notes" => String | nil,
7346
+ "lines" => Array[invoice_line],
7347
+ "derivation" => invoice_derivation,
7348
+ "billing" => invoice_billing | nil,
7349
+ "live" => bool,
7350
+ "computedAt" => String,
7351
+ "approvedByUserId" => String | nil,
7352
+ "sentByUserId" => String | nil,
7353
+ "voidedByUserId" => String | nil,
7354
+ "createdByUserId" => String | nil
7355
+ }
7356
+
7357
+ # Who the invoice is addressed to and how to pay it: the customer and its
7358
+ # billing profile resolved together. Live on a draft; written once at approval
7359
+ # and read back verbatim after.
7241
7360
  #
7242
7361
  # Spec schema: `InvoiceBilling`.
7243
7362
  type invoice_billing = {
7244
- "profileId" => String | nil,
7245
- "profileName" => String | nil,
7246
- "legalName" => String,
7247
- "attention" => String | nil,
7248
- "address" => String | nil,
7249
- "taxId" => String | nil,
7250
- "poNumber" => String | nil,
7251
- "to" => Array[String],
7252
- "cc" => Array[String],
7253
- "paymentTermsDays" => Integer | nil,
7254
- "issueDate" => String,
7255
- "dueDate" => String | nil,
7256
- "taxRates" => Array[billing_profile_tax_rate],
7257
- "bank" => billing_profile_bank,
7258
- "footer" => String | nil,
7259
- "logoId" => String | nil,
7260
- "numberPrefix" => String,
7261
- "numberIncludesYear" => bool
7262
- }
7263
- | nil
7363
+ "profileId" => String | nil,
7364
+ "profileName" => String | nil,
7365
+ "legalName" => String,
7366
+ "attention" => String | nil,
7367
+ "address" => String | nil,
7368
+ "taxId" => String | nil,
7369
+ "poNumber" => String | nil,
7370
+ "to" => Array[String],
7371
+ "cc" => Array[String],
7372
+ "paymentTermsDays" => Integer | nil,
7373
+ "issueDate" => String,
7374
+ "dueDate" => String | nil,
7375
+ "taxRates" => Array[billing_profile_tax_rate],
7376
+ "bank" => billing_profile_bank | nil,
7377
+ "footer" => String | nil,
7378
+ "logoId" => String | nil,
7379
+ "numberPrefix" => String,
7380
+ "numberIncludesYear" => bool
7381
+ }
7264
7382
 
7265
- # The last delivery attempt, or null when none has been made; including on an
7266
- # invoice marked sent by a deployment with no mail provider. “A person
7267
- # released this” and “we delivered it” are different claims, and this field is
7268
- # only ever the second.
7383
+ # What became of the last attempt to email this invoice to its customer.
7384
+ # Separate from the figures in every sense: delivery records where a frozen
7385
+ # document went and cannot restate what it says.
7386
+ #
7387
+ # **A partial delivery is terminal.** The mail provider has no idempotency
7388
+ # key, so retrying after some addresses succeeded would put a second copy of
7389
+ # the same bill in inboxes that already have it.
7269
7390
  #
7270
7391
  # Spec schema: `InvoiceDelivery`.
7271
7392
  type invoice_delivery = {
7272
- "status" => "pending" | "succeeded" | "partial" | "failed" | "no_targets",
7273
- "recipients" => Array[String],
7274
- "delivered" => Integer,
7275
- "attemptedAt" => String,
7276
- "deliveredAt" => String | nil,
7277
- "attempts" => Integer,
7278
- "error" => String | nil
7279
- }
7280
- | nil
7393
+ "status" => "pending" | "succeeded" | "partial" | "failed" | "no_targets",
7394
+ "recipients" => Array[String],
7395
+ "delivered" => Integer,
7396
+ "attemptedAt" => String,
7397
+ "deliveredAt" => String | nil,
7398
+ "attempts" => Integer,
7399
+ "error" => String | nil
7400
+ }
7281
7401
 
7282
7402
  # Everything needed to re-derive the invoice by hand. Not decoration: an
7283
7403
  # invoice a customer cannot reconcile is an invoice a customer does not pay.
@@ -7300,9 +7420,9 @@ module Infrawrench
7300
7420
  "accounts" => Array[{ "id" => String, "label" => String }]
7301
7421
  },
7302
7422
  "missingScope" => Array[String],
7303
- ?"pricing" => managed_account_pricing & Hash[String, untyped],
7423
+ ?"pricing" => managed_account_pricing & untyped,
7304
7424
  ?"effects" => Array[pricing_effect],
7305
- ?"rerateCoverage" => rerate_coverage & untyped,
7425
+ ?"rerateCoverage" => rerate_coverage | nil,
7306
7426
  ?"warnings" => Array[String],
7307
7427
  ?"expressionFailures" => Array[pricing_expression_failure]
7308
7428
  }
@@ -7367,10 +7487,10 @@ module Infrawrench
7367
7487
  "periodFrom" => String,
7368
7488
  "periodTo" => String,
7369
7489
  "currency" => String,
7370
- "totals" => invoice_totals,
7490
+ "totals" => invoice_totals | nil,
7371
7491
  "issuedAt" => String | nil,
7372
7492
  "sentAt" => String | nil,
7373
- "delivery" => invoice_delivery,
7493
+ "delivery" => invoice_delivery | nil,
7374
7494
  "voidedAt" => String | nil,
7375
7495
  "voidReason" => String | nil,
7376
7496
  "supersedesInvoiceId" => String | nil,
@@ -7379,18 +7499,17 @@ module Infrawrench
7379
7499
  "updatedAt" => String
7380
7500
  }
7381
7501
 
7382
- # **Null for a draft**, null, not zero. A draft's figures are recomputed on
7383
- # read and the list does not recompute; fetch the invoice by id for a draft's
7384
- # current numbers.
7502
+ # `collected + adjustment === adjusted` holds for every currency. That
7503
+ # identity is what makes an invoice reconcilable back to the spend that
7504
+ # produced it, and it is checked before anything is frozen.
7385
7505
  #
7386
7506
  # Spec schema: `InvoiceTotals`.
7387
7507
  type invoice_totals = {
7388
- "collected" => Hash[String, Numeric],
7389
- "adjustment" => Hash[String, Numeric],
7390
- "adjusted" => Hash[String, Numeric],
7391
- "billed" => Hash[String, Numeric]
7392
- }
7393
- | nil
7508
+ "collected" => Hash[String, Numeric],
7509
+ "adjustment" => Hash[String, Numeric],
7510
+ "adjusted" => Hash[String, Numeric],
7511
+ "billed" => Hash[String, Numeric]
7512
+ }
7394
7513
 
7395
7514
  # Spec schema: `InvoiceUpdate`.
7396
7515
  type invoice_update = { "periodFrom" => String, "periodTo" => String, ?"notes" => String | nil }
@@ -7399,25 +7518,7 @@ module Infrawrench
7399
7518
  type invoice_void_request = { "reason" => String, ?"supersede" => bool }
7400
7519
 
7401
7520
  # Spec schema: `InvoiceVoidResponse`.
7402
- type invoice_void_response = {
7403
- "invoice" => invoice,
7404
- "replacement" => invoice
7405
- & invoice_summary
7406
- & ({
7407
- ?"totals" => invoice_totals & Hash[String, untyped],
7408
- "notes" => String | nil,
7409
- "lines" => Array[invoice_line],
7410
- "derivation" => invoice_derivation,
7411
- "billing" => invoice_billing,
7412
- "live" => bool,
7413
- "computedAt" => String,
7414
- "approvedByUserId" => String | nil,
7415
- "sentByUserId" => String | nil,
7416
- "voidedByUserId" => String | nil,
7417
- "createdByUserId" => String | nil
7418
- }
7419
- | nil)
7420
- }
7521
+ type invoice_void_response = { "invoice" => invoice, "replacement" => invoice | nil }
7421
7522
 
7422
7523
  # Spec schema: `InvokeActionRequest`.
7423
7524
  type invoke_action_request = {
@@ -7433,7 +7534,7 @@ module Infrawrench
7433
7534
  # type, and GitHub's state and close reason all map onto these four.
7434
7535
  #
7435
7536
  # Spec schema: `IssueStatusCategory`.
7436
- type issue_status_category = "todo" | "in_progress" | "done" | "canceled" | nil
7537
+ type issue_status_category = "todo" | "in_progress" | "done" | "canceled"
7437
7538
 
7438
7539
  # Spec schema: `IssueStatusRefreshResult`.
7439
7540
  type issue_status_refresh_result = { "checked" => Integer, "changed" => Integer }
@@ -7450,16 +7551,15 @@ module Infrawrench
7450
7551
 
7451
7552
  # Spec schema: `JiraIntegration`.
7452
7553
  type jira_integration = {
7453
- "siteUrl" => String,
7454
- "accountEmail" => String,
7455
- "tokenHint" => String,
7456
- "defaultProjectKey" => String | nil,
7457
- "defaultIssueTypeId" => String | nil,
7458
- "acknowledgeOnDone" => bool,
7459
- "webhook" => issue_webhook_state,
7460
- "updatedAt" => String
7461
- }
7462
- | nil
7554
+ "siteUrl" => String,
7555
+ "accountEmail" => String,
7556
+ "tokenHint" => String,
7557
+ "defaultProjectKey" => String | nil,
7558
+ "defaultIssueTypeId" => String | nil,
7559
+ "acknowledgeOnDone" => bool,
7560
+ "webhook" => issue_webhook_state,
7561
+ "updatedAt" => String
7562
+ }
7463
7563
 
7464
7564
  # Spec schema: `JiraIntegrationInput`.
7465
7565
  type jira_integration_input = {
@@ -7479,7 +7579,7 @@ module Infrawrench
7479
7579
  "issueKey" => String,
7480
7580
  "issueUrl" => String,
7481
7581
  "status" => String | nil,
7482
- "statusCategory" => issue_status_category,
7582
+ "statusCategory" => issue_status_category | nil,
7483
7583
  "assignee" => String | nil,
7484
7584
  "issueUpdatedAt" => String | nil,
7485
7585
  "statusSyncedAt" => String | nil,
@@ -7631,7 +7731,7 @@ module Infrawrench
7631
7731
  "requireTicket" => bool,
7632
7732
  "createdAt" => String,
7633
7733
  "updatedAt" => String,
7634
- ?"labels" => jit_provider_labels & (Hash[String, untyped] | nil),
7734
+ ?"labels" => jit_provider_labels | nil,
7635
7735
  ?"canRequest" => bool
7636
7736
  }
7637
7737
 
@@ -7660,10 +7760,13 @@ module Infrawrench
7660
7760
 
7661
7761
  # Spec schema: `JitPrincipalOption`.
7662
7762
  type jit_principal_option = { "id" => String, "name" => String, "kind" => "user" | "group", ?"email" => String | nil }
7663
- | nil
7664
7763
 
7665
7764
  # Spec schema: `JitPrincipalResolution`.
7666
- type jit_principal_resolution = { "principal" => jit_principal_option, "canPick" => bool, "labels" => jit_provider_labels }
7765
+ type jit_principal_resolution = {
7766
+ "principal" => jit_principal_option | nil,
7767
+ "canPick" => bool,
7768
+ "labels" => jit_provider_labels
7769
+ }
7667
7770
 
7668
7771
  # Spec schema: `JitProviderLabels`.
7669
7772
  type jit_provider_labels = {
@@ -7701,7 +7804,7 @@ module Infrawrench
7701
7804
  type kpi_widget_config = {
7702
7805
  "version" => Numeric,
7703
7806
  "source" => kpi_widget_source,
7704
- ?"dateRange" => cost_date_range,
7807
+ ?"dateRange" => cost_date_range & untyped,
7705
7808
  "comparePreviousPeriod" => bool,
7706
7809
  ?"upIsGood" => bool
7707
7810
  }
@@ -7747,7 +7850,7 @@ module Infrawrench
7747
7850
  # Spec schema: `KubernetesEfficiencyConfig`.
7748
7851
  type kubernetes_efficiency_config = {
7749
7852
  "version" => Numeric,
7750
- "dateRange" => cost_date_range & untyped,
7853
+ "dateRange" => cost_date_range,
7751
7854
  "granularity" => "day" | "week" | "month",
7752
7855
  "filters" => Array[kubernetes_efficiency_filter],
7753
7856
  "groupBy" => "cluster" | "namespace" | "workload" | "label" | "node_pool" | "category",
@@ -7911,7 +8014,7 @@ module Infrawrench
7911
8014
  "namespaces" => Array[kubernetes_network_row],
7912
8015
  "workloads" => Array[kubernetes_network_row],
7913
8016
  "topTalkers" => Array[network_flow_pair],
7914
- "collection" => network_flow_account_status & (Hash[String, untyped] | nil)
8017
+ "collection" => network_flow_account_status | nil
7915
8018
  }
7916
8019
 
7917
8020
  # Spec schema: `KubernetesNetworkRow`.
@@ -8034,13 +8137,12 @@ module Infrawrench
8034
8137
 
8035
8138
  # Spec schema: `LinearIntegration`.
8036
8139
  type linear_integration = {
8037
- "keyHint" => String,
8038
- "defaultTeamId" => String | nil,
8039
- "acknowledgeOnDone" => bool,
8040
- "webhook" => issue_webhook_state,
8041
- "updatedAt" => String
8042
- }
8043
- | nil
8140
+ "keyHint" => String,
8141
+ "defaultTeamId" => String | nil,
8142
+ "acknowledgeOnDone" => bool,
8143
+ "webhook" => issue_webhook_state,
8144
+ "updatedAt" => String
8145
+ }
8044
8146
 
8045
8147
  # Spec schema: `LinearIntegrationInput`.
8046
8148
  type linear_integration_input = { ?"apiKey" => String, ?"defaultTeamId" => String | nil, ?"acknowledgeOnDone" => bool }
@@ -8053,7 +8155,7 @@ module Infrawrench
8053
8155
  "issueIdentifier" => String,
8054
8156
  "issueUrl" => String,
8055
8157
  "status" => String | nil,
8056
- "statusCategory" => issue_status_category,
8158
+ "statusCategory" => issue_status_category | nil,
8057
8159
  "assignee" => String | nil,
8058
8160
  "issueUpdatedAt" => String | nil,
8059
8161
  "statusSyncedAt" => String | nil,
@@ -8091,7 +8193,7 @@ module Infrawrench
8091
8193
  type linear_webhook_input = { "mode" => "auto" } | { "mode" => "manual", "signingSecret" => String }
8092
8194
 
8093
8195
  # Spec schema: `LinuxAppHostCheck`.
8094
- type linux_app_host_check = { "preflight" => linux_app_host_preflight, "plan" => linux_app_install_plan }
8196
+ type linux_app_host_check = { "preflight" => linux_app_host_preflight, "plan" => linux_app_install_plan | nil }
8095
8197
 
8096
8198
  # Spec schema: `LinuxAppHostPreflight`.
8097
8199
  type linux_app_host_preflight = {
@@ -8121,15 +8223,14 @@ module Infrawrench
8121
8223
 
8122
8224
  # Spec schema: `LinuxAppInstallPlan`.
8123
8225
  type linux_app_install_plan = {
8124
- "packageManager" => "apt-get" | "dnf" | "yum" | "apk" | "pacman" | "zypper",
8125
- "privilege" => "root" | "sudo" | "sudo-password" | "none",
8126
- "requirements" => Array[linux_app_requirement_id],
8127
- "packages" => Array[String],
8128
- "commands" => Array[String],
8129
- "canInstall" => bool,
8130
- ?"blockedReason" => String
8131
- }
8132
- | nil
8226
+ "packageManager" => "apt-get" | "dnf" | "yum" | "apk" | "pacman" | "zypper",
8227
+ "privilege" => "root" | "sudo" | "sudo-password" | "none",
8228
+ "requirements" => Array[linux_app_requirement_id],
8229
+ "packages" => Array[String],
8230
+ "commands" => Array[String],
8231
+ "canInstall" => bool,
8232
+ ?"blockedReason" => String
8233
+ }
8133
8234
 
8134
8235
  # Spec schema: `LinuxAppRequirement`.
8135
8236
  type linux_app_requirement = {
@@ -8148,10 +8249,18 @@ module Infrawrench
8148
8249
  type linux_app_requirement_id = "gzip" | "xkb" | "dbus" | "fonts" | "mesa" | "icons"
8149
8250
 
8150
8251
  # Spec schema: `LinuxAppSetupEvent`.
8151
- type linux_app_setup_event = { ?"line" => String, ?"outcome" => linux_app_install_outcome, ?"error" => String }
8252
+ type linux_app_setup_event = Hash[String, untyped]
8152
8253
 
8153
8254
  # Spec schema: `LinuxAppSetupRequest`.
8154
- type linux_app_setup_request = linux_app_host_target & { ?"requirements" => Array[linux_app_requirement_id] }
8255
+ type linux_app_setup_request = {
8256
+ "accountId" => String,
8257
+ "resourceId" => String,
8258
+ "sshKeyId" => String,
8259
+ "host" => String,
8260
+ "username" => String,
8261
+ ?"port" => Integer,
8262
+ ?"requirements" => Array[linux_app_requirement_id]
8263
+ }
8155
8264
 
8156
8265
  # Spec schema: `LiteralAssociationRequest`.
8157
8266
  type literal_association_request = { "resourceId" => resource_id, "fieldKey" => String, "plaintextValue" => String }
@@ -8249,7 +8358,7 @@ module Infrawrench
8249
8358
  "billingCurrency" => String,
8250
8359
  "costBasis" => "cash" | "amortized" | "blended",
8251
8360
  "applyBillingRules" => bool,
8252
- "pricing" => managed_account_pricing & Hash[String, untyped],
8361
+ "pricing" => managed_account_pricing,
8253
8362
  "notes" => String | nil,
8254
8363
  "billingProfileId" => String | nil,
8255
8364
  "costCentreIds" => Array[String],
@@ -8295,7 +8404,13 @@ module Infrawrench
8295
8404
  # month.
8296
8405
  #
8297
8406
  # Spec schema: `ManagedAccountAssignmentPreviewRequest`.
8298
- type managed_account_assignment_preview_request = managed_account_assignment & { ?"periodFrom" => String, ?"periodTo" => String }
8407
+ type managed_account_assignment_preview_request = {
8408
+ "managedAccountId" => String | nil,
8409
+ ?"costCentreIds" => Array[String],
8410
+ ?"accountIds" => Array[String],
8411
+ ?"periodFrom" => String,
8412
+ ?"periodTo" => String
8413
+ }
8299
8414
 
8300
8415
  # Spec schema: `ManagedAccountAssignmentResult`.
8301
8416
  type managed_account_assignment_result = {
@@ -8317,28 +8432,28 @@ module Infrawrench
8317
8432
  "billingCurrency" => String,
8318
8433
  ?"costBasis" => "cash" | "amortized" | "blended",
8319
8434
  ?"applyBillingRules" => bool,
8320
- ?"pricing" => managed_account_pricing & Hash[String, untyped],
8435
+ ?"pricing" => managed_account_pricing & untyped,
8321
8436
  ?"notes" => String | nil,
8322
8437
  ?"billingProfileId" => String | nil,
8323
8438
  ?"costCentreIds" => Array[String],
8324
8439
  ?"accountIds" => Array[String]
8325
8440
  }
8326
8441
 
8327
- # Customer settings to try instead of the saved ones.
8442
+ # How a customer's invoice is priced beyond the billing rules. Applied when an
8443
+ # invoice is computed; collected spend is never rewritten.
8328
8444
  #
8329
8445
  # Spec schema: `ManagedAccountPricing`.
8330
8446
  type managed_account_pricing = {
8331
- "rerate" => {
8332
- "enabled" => bool,
8333
- "scope" => Array[{ "pluginId" => String, ?"service" => String | nil }],
8334
- "fallbackUpliftPercent" => Numeric,
8335
- "uplifts" => Array[{ "pluginId" => String, ?"service" => String | nil, "percent" => Numeric }]
8336
- },
8337
- "discounts" => discount_treatment,
8338
- "credits" => discount_treatment & untyped,
8339
- "commitmentBenefits" => discount_treatment & untyped
8340
- }
8341
- | nil
8447
+ "rerate" => {
8448
+ "enabled" => bool,
8449
+ "scope" => Array[{ "pluginId" => String, ?"service" => String | nil }],
8450
+ "fallbackUpliftPercent" => Numeric,
8451
+ "uplifts" => Array[{ "pluginId" => String, ?"service" => String | nil, "percent" => Numeric }]
8452
+ },
8453
+ "discounts" => discount_treatment & untyped,
8454
+ "credits" => discount_treatment & untyped,
8455
+ "commitmentBenefits" => discount_treatment & untyped
8456
+ }
8342
8457
 
8343
8458
  # Spec schema: `Manifest`.
8344
8459
  type manifest = { "manifest" => String }
@@ -8347,7 +8462,7 @@ module Infrawrench
8347
8462
  type me_response = {
8348
8463
  "userId" => String,
8349
8464
  "email" => String,
8350
- "role" => role_summary,
8465
+ "role" => role_summary | nil,
8351
8466
  "permissions" => Array[permission],
8352
8467
  ?"costVisibility" => cost_visibility_summary
8353
8468
  }
@@ -8367,11 +8482,11 @@ module Infrawrench
8367
8482
 
8368
8483
  # Spec schema: `MetricAlertRule`.
8369
8484
  type metric_alert_rule = {
8485
+ "pluginId" => untyped,
8486
+ "resourceTypeId" => untyped,
8487
+ "tagKey" => untyped,
8488
+ "tagValue" => untyped,
8370
8489
  "name" => String,
8371
- "pluginId" => String | nil,
8372
- "resourceTypeId" => String | nil,
8373
- "tagKey" => String | nil,
8374
- "tagValue" => String | nil,
8375
8490
  "metricKey" => String,
8376
8491
  "comparator" => ">" | ">=" | "<" | "<=",
8377
8492
  "threshold" => Numeric,
@@ -8386,11 +8501,11 @@ module Infrawrench
8386
8501
 
8387
8502
  # Spec schema: `MetricAlertRuleInput`.
8388
8503
  type metric_alert_rule_input = {
8504
+ "pluginId" => untyped,
8505
+ "resourceTypeId" => untyped,
8506
+ "tagKey" => untyped,
8507
+ "tagValue" => untyped,
8389
8508
  "name" => String,
8390
- "pluginId" => String | nil,
8391
- "resourceTypeId" => String | nil,
8392
- "tagKey" => String | nil,
8393
- "tagValue" => String | nil,
8394
8509
  "metricKey" => String,
8395
8510
  "comparator" => ">" | ">=" | "<" | "<=",
8396
8511
  "threshold" => Numeric,
@@ -8401,11 +8516,11 @@ module Infrawrench
8401
8516
 
8402
8517
  # Spec schema: `MetricAlertRuleWithStatus`.
8403
8518
  type metric_alert_rule_with_status = {
8519
+ "pluginId" => untyped,
8520
+ "resourceTypeId" => untyped,
8521
+ "tagKey" => untyped,
8522
+ "tagValue" => untyped,
8404
8523
  "name" => String,
8405
- "pluginId" => String | nil,
8406
- "resourceTypeId" => String | nil,
8407
- "tagKey" => String | nil,
8408
- "tagValue" => String | nil,
8409
8524
  "metricKey" => String,
8410
8525
  "comparator" => ">" | ">=" | "<" | "<=",
8411
8526
  "threshold" => Numeric,
@@ -8467,25 +8582,24 @@ module Infrawrench
8467
8582
  ?"resourceId" => String | nil,
8468
8583
  ?"resourceTypeId" => String | nil,
8469
8584
  ?"resourceName" => String | nil,
8470
- ?"link" => moment_event_link
8585
+ ?"link" => moment_event_link | nil
8471
8586
  }
8472
8587
 
8473
8588
  # Spec schema: `MomentEventLink`.
8474
8589
  type moment_event_link = {
8475
- "kind" => "resource"
8476
- | "changes"
8477
- | "incident"
8478
- | "costs"
8479
- | "workflow-run"
8480
- | "deployment"
8481
- | "audit"
8482
- | "freeze"
8483
- | "expiring",
8484
- ?"id" => String | nil,
8485
- ?"parentId" => String | nil,
8486
- ?"url" => String | nil
8487
- }
8488
- | nil
8590
+ "kind" => "resource"
8591
+ | "changes"
8592
+ | "incident"
8593
+ | "costs"
8594
+ | "workflow-run"
8595
+ | "deployment"
8596
+ | "audit"
8597
+ | "freeze"
8598
+ | "expiring",
8599
+ ?"id" => String | nil,
8600
+ ?"parentId" => String | nil,
8601
+ ?"url" => String | nil
8602
+ }
8489
8603
 
8490
8604
  # One of the indexed feeds the moment union draws from.
8491
8605
  #
@@ -8645,7 +8759,7 @@ module Infrawrench
8645
8759
  # Spec schema: `NetworkFlowReportConfig`.
8646
8760
  type network_flow_report_config = {
8647
8761
  "version" => Numeric,
8648
- "dateRange" => cost_date_range & untyped,
8762
+ "dateRange" => cost_date_range,
8649
8763
  "granularity" => network_flow_report_granularity,
8650
8764
  "groupBy" => network_flow_report_group_by,
8651
8765
  "filters" => network_flow_report_filters,
@@ -8874,6 +8988,9 @@ module Infrawrench
8874
8988
  # Spec schema: `NetworkFlowSettings`.
8875
8989
  type network_flow_settings = { "enabled" => bool, "initialLookbackDays" => Integer }
8876
8990
 
8991
+ # Spec schema: `NetworkFlowSettingsInput`.
8992
+ type network_flow_settings_input = { "enabled" => bool, ?"initialLookbackDays" => Integer }
8993
+
8877
8994
  # Spec schema: `NetworkFlowSource`.
8878
8995
  type network_flow_source = {
8879
8996
  "id" => String,
@@ -8956,8 +9073,8 @@ module Infrawrench
8956
9073
  "scheduleId" => String,
8957
9074
  "scheduleName" => String,
8958
9075
  "enabled" => bool,
8959
- "shift" => on_call_shift,
8960
- "next" => on_call_participant
9076
+ "shift" => on_call_shift | nil,
9077
+ "next" => on_call_participant | nil
8961
9078
  }
8962
9079
 
8963
9080
  # Spec schema: `OnCallNowResponse`.
@@ -8985,12 +9102,8 @@ module Infrawrench
8985
9102
  ?"reason" => String | nil
8986
9103
  }
8987
9104
 
8988
- # The next person in the rotation, where an escalation goes. Resolved from the
8989
- # rotation and never from a cover: a cover is somebody standing in for one
8990
- # shift.
8991
- #
8992
9105
  # Spec schema: `OnCallParticipant`.
8993
- type on_call_participant = { "userId" => String, "name" => String | nil, "email" => String | nil } | nil
9106
+ type on_call_participant = { "userId" => String, "name" => String | nil, "email" => String | nil }
8994
9107
 
8995
9108
  # Spec schema: `OnCallSchedule`.
8996
9109
  type on_call_schedule = {
@@ -9000,7 +9113,7 @@ module Infrawrench
9000
9113
  "rotationDays" => Integer,
9001
9114
  "handoffTime" => String,
9002
9115
  "startDate" => String,
9003
- "participants" => Array[on_call_participant & Hash[String, untyped]],
9116
+ "participants" => Array[on_call_participant],
9004
9117
  "enabled" => bool,
9005
9118
  "createdAt" => String,
9006
9119
  "updatedAt" => String
@@ -9033,21 +9146,17 @@ module Infrawrench
9033
9146
 
9034
9147
  # Spec schema: `OnCallShift`.
9035
9148
  type on_call_shift = {
9036
- "startsAt" => String,
9037
- "endsAt" => String,
9038
- "userId" => String,
9039
- "name" => String | nil,
9040
- "email" => String | nil,
9041
- "source" => "rotation" | "override",
9042
- "rotationIndex" => Integer | nil
9043
- }
9044
- | nil
9149
+ "startsAt" => String,
9150
+ "endsAt" => String,
9151
+ "userId" => String,
9152
+ "name" => String | nil,
9153
+ "email" => String | nil,
9154
+ "source" => "rotation" | "override",
9155
+ "rotationIndex" => Integer | nil
9156
+ }
9045
9157
 
9046
9158
  # Spec schema: `OnCallShiftsResponse`.
9047
- type on_call_shifts_response = {
9048
- "shifts" => Array[on_call_shift & Hash[String, untyped]],
9049
- "overrides" => Array[on_call_override]
9050
- }
9159
+ type on_call_shifts_response = { "shifts" => Array[on_call_shift], "overrides" => Array[on_call_override] }
9051
9160
 
9052
9161
  # What everyone in the organization can do with the object. `editor` is the
9053
9162
  # default for an object nobody has shared.
@@ -9094,7 +9203,13 @@ module Infrawrench
9094
9203
  }
9095
9204
 
9096
9205
  # Spec schema: `OrgConfigApplyResult`.
9097
- type org_config_apply_result = org_config_plan & { "applied" => bool }
9206
+ type org_config_apply_result = {
9207
+ "mode" => "merge" | "replace",
9208
+ "changes" => Array[org_config_change],
9209
+ "unresolved" => Array[org_config_unresolved],
9210
+ "counts" => { "create" => Integer, "update" => Integer, "delete" => Integer, "unchanged" => Integer },
9211
+ "applied" => bool
9212
+ }
9098
9213
 
9099
9214
  # Spec schema: `OrgConfigBudget`.
9100
9215
  type org_config_budget = {
@@ -9304,7 +9419,7 @@ module Infrawrench
9304
9419
  ?"comparator" => "<" | "<=" | ">" | ">=",
9305
9420
  ?"threshold" => Numeric,
9306
9421
  "targetPercent" => Numeric,
9307
- ?"windowDays" => Numeric | Numeric | Numeric,
9422
+ ?"windowDays" => Numeric,
9308
9423
  ?"alertsEnabled" => bool,
9309
9424
  ?"suggestFreeze" => bool,
9310
9425
  ?"enabled" => bool
@@ -9368,7 +9483,7 @@ module Infrawrench
9368
9483
  # Spec schema: `OrgScorecard`.
9369
9484
  type org_scorecard = {
9370
9485
  "score" => Integer | nil,
9371
- "grade" => org_scorecard_grade,
9486
+ "grade" => org_scorecard_grade | nil,
9372
9487
  "pillars" => Array[org_scorecard_pillar],
9373
9488
  "failedPillars" => Array[org_scorecard_pillar_id],
9374
9489
  "trend" => Array[org_scorecard_trend_point],
@@ -9379,7 +9494,7 @@ module Infrawrench
9379
9494
  type org_scorecard_fact = { "label" => String, "value" => String, ?"bad" => bool }
9380
9495
 
9381
9496
  # Spec schema: `OrgScorecardGrade`.
9382
- type org_scorecard_grade = "A" | "B" | "C" | "D" | "F" | nil
9497
+ type org_scorecard_grade = "A" | "B" | "C" | "D" | "F"
9383
9498
 
9384
9499
  # Spec schema: `OrgScorecardHistory`.
9385
9500
  type org_scorecard_history = { "trend" => Array[org_scorecard_trend_point] }
@@ -9412,7 +9527,7 @@ module Infrawrench
9412
9527
  type org_scorecard_trend_point = {
9413
9528
  "day" => String,
9414
9529
  "score" => Integer,
9415
- "grade" => org_scorecard_grade & String,
9530
+ "grade" => org_scorecard_grade,
9416
9531
  "pillars" => Hash[String, Integer]
9417
9532
  }
9418
9533
 
@@ -9459,12 +9574,8 @@ module Infrawrench
9459
9574
  "resources" => Array[orphaned_resource]
9460
9575
  }
9461
9576
 
9462
- # Best-effort trailing spend matched from collected per-resource cost rows;
9463
- # null when the provider reports no per-resource cost. The flag itself never
9464
- # depends on billing data.
9465
- #
9466
9577
  # Spec schema: `OrphanCostAnnotation`.
9467
- type orphan_cost_annotation = { "amount" => Numeric, "currency" => String } | nil
9578
+ type orphan_cost_annotation = { "amount" => Numeric, "currency" => String }
9468
9579
 
9469
9580
  # Present when a metric-based idle rule flagged the row rather than the type's
9470
9581
  # orphan rule: the rule, the metric evidence and the lookback window.
@@ -9500,12 +9611,12 @@ module Infrawrench
9500
9611
  "displayName" => String,
9501
9612
  "externalId" => String | nil,
9502
9613
  "reason" => String,
9503
- "cost" => orphan_cost_annotation,
9504
- "owner" => resource_owner_annotation,
9614
+ "cost" => orphan_cost_annotation | nil,
9615
+ "owner" => resource_owner_annotation | nil,
9505
9616
  "lastSyncedAt" => String | nil,
9506
- ?"remediation" => finding_remediation & Hash[String, untyped],
9617
+ ?"remediation" => finding_remediation & untyped,
9507
9618
  ?"idle" => orphan_idle_detail,
9508
- ?"estimate" => idle_savings_estimate
9619
+ ?"estimate" => idle_savings_estimate | nil
9509
9620
  }
9510
9621
 
9511
9622
  # Spec schema: `OversizedAccountGroup`.
@@ -9539,7 +9650,7 @@ module Infrawrench
9539
9650
  "monthlyKgCo2eSaving" => Numeric | nil,
9540
9651
  "resizeNote" => String | nil,
9541
9652
  "lastSyncedAt" => String | nil,
9542
- ?"remediation" => finding_remediation & Hash[String, untyped]
9653
+ ?"remediation" => finding_remediation & untyped
9543
9654
  }
9544
9655
 
9545
9656
  # Spec schema: `OversizedSizeSummary`.
@@ -9703,7 +9814,12 @@ module Infrawrench
9703
9814
  type patch_platform_agent = { ?"label" => String, ?"scopes" => Array[String], ?"providers" => Array[String] }
9704
9815
 
9705
9816
  # Spec schema: `PeerPane`.
9706
- type peer_pane = peer_pane_stub & { "schema" => json_object }
9817
+ type peer_pane = {
9818
+ "tabLabel" => String,
9819
+ "pluginLogoSvg" => String,
9820
+ "peerPluginId" => String,
9821
+ "schema" => json_object
9822
+ }
9707
9823
 
9708
9824
  # Spec schema: `PeerPaneStub`.
9709
9825
  type peer_pane_stub = { "tabLabel" => String, "pluginLogoSvg" => String, "peerPluginId" => String }
@@ -10019,10 +10135,6 @@ module Infrawrench
10019
10135
  | "xai"
10020
10136
  | "xata"
10021
10137
 
10022
- # Present only when this server can connect the plugin through provider OAuth
10023
- # (the plugin supports it and the server has a client configured). See `POST
10024
- # /provider-oauth/{pluginId}/authorize`.
10025
- #
10026
10138
  # Spec schema: `PluginOAuthSummary`.
10027
10139
  type plugin_oauth_summary = {
10028
10140
  "access" => "read-only" | "read-write" | "full",
@@ -10038,8 +10150,8 @@ module Infrawrench
10038
10150
  "displayName" => String,
10039
10151
  "logoSvg" => String,
10040
10152
  "credentialFields" => Array[credential_field],
10041
- "preflight" => preflight_declaration,
10042
- ?"oauth" => plugin_oauth_summary,
10153
+ "preflight" => untyped,
10154
+ ?"oauth" => plugin_oauth_summary & untyped,
10043
10155
  ?"sshTunnel" => { "label" => String, "defaultPort" => Integer, "credentials" => Hash[String, String] },
10044
10156
  ?"jumpHost" => bool,
10045
10157
  ?"kvBrowser" => "keys" | "documents"
@@ -10104,8 +10216,6 @@ module Infrawrench
10104
10216
  "generatedAt" => String
10105
10217
  }
10106
10218
 
10107
- # Live finding count per severity; every bucket present, zeros included.
10108
- #
10109
10219
  # Spec schema: `PostureSeverityCounts`.
10110
10220
  type posture_severity_counts = { "critical" => Integer, "high" => Integer, "medium" => Integer, "low" => Integer }
10111
10221
 
@@ -10122,8 +10232,8 @@ module Infrawrench
10122
10232
  "resourceTypeId" => String | nil,
10123
10233
  "changedAttributes" => Array[String],
10124
10234
  "count" => Integer | nil,
10125
- "before" => pr_check_estimate_side,
10126
- "after" => pr_check_estimate_side,
10235
+ "before" => pr_check_estimate_side | nil,
10236
+ "after" => pr_check_estimate_side | nil,
10127
10237
  "monthlyDelta" => Numeric | nil,
10128
10238
  "currency" => String | nil,
10129
10239
  "unpricedReason" => String | nil,
@@ -10145,10 +10255,10 @@ module Infrawrench
10145
10255
  }
10146
10256
 
10147
10257
  # Spec schema: `PrCheckConclusion`.
10148
- type pr_check_conclusion = "success" | "neutral" | "failure" | nil
10258
+ type pr_check_conclusion = "success" | "neutral" | "failure"
10149
10259
 
10150
10260
  # Spec schema: `PrCheckEstimateSide`.
10151
- type pr_check_estimate_side = { "monthlyAmount" => Numeric, "currency" => String, "partial" => bool } | nil
10261
+ type pr_check_estimate_side = { "monthlyAmount" => Numeric, "currency" => String, "partial" => bool }
10152
10262
 
10153
10263
  # What an installation has **accepted** of the permissions checks need:
10154
10264
  # `checks: write`, `pull_requests` (read, or write for the comment) and
@@ -10170,8 +10280,8 @@ module Infrawrench
10170
10280
 
10171
10281
  # Spec schema: `PrCheckPreview`.
10172
10282
  type pr_check_preview = {
10173
- "report" => pr_check_report & Hash[String, untyped],
10174
- "conclusion" => pr_check_conclusion & String,
10283
+ "report" => pr_check_report,
10284
+ "conclusion" => pr_check_conclusion,
10175
10285
  "title" => String,
10176
10286
  "markdown" => String
10177
10287
  }
@@ -10189,36 +10299,45 @@ module Infrawrench
10189
10299
 
10190
10300
  # Spec schema: `PrCheckReport`.
10191
10301
  type pr_check_report = {
10192
- "generatedAt" => String,
10193
- "files" => Array[{
10194
- "path" => String,
10195
- "kind" => "terraform" | "infrafile" | "kubernetes",
10196
- "status" => "added" | "modified" | "removed" | "renamed",
10197
- "analysed" => bool,
10198
- "note" => String | nil
10199
- }],
10200
- "changes" => Array[pr_check_change],
10201
- "totals" => {
10202
- "monthlyDelta" => Numeric | nil,
10203
- "currency" => String | nil,
10204
- "partial" => bool,
10205
- "pricedChanges" => Integer,
10206
- "unpricedChanges" => Integer,
10207
- "otherCurrencyChanges" => Integer
10208
- },
10209
- "blast" => {
10210
- "touchedResources" => Integer,
10211
- "dependants" => Integer,
10212
- "highestSeverity" => "none" | "low" | "medium" | "high" | "unknown" | nil
10213
- },
10214
- "notes" => Array[String],
10215
- "truncated" => bool
10216
- }
10217
- | nil
10302
+ "generatedAt" => String,
10303
+ "files" => Array[{
10304
+ "path" => String,
10305
+ "kind" => "terraform" | "infrafile" | "kubernetes",
10306
+ "status" => "added" | "modified" | "removed" | "renamed",
10307
+ "analysed" => bool,
10308
+ "note" => String | nil
10309
+ }],
10310
+ "changes" => Array[pr_check_change],
10311
+ "totals" => {
10312
+ "monthlyDelta" => Numeric | nil,
10313
+ "currency" => String | nil,
10314
+ "partial" => bool,
10315
+ "pricedChanges" => Integer,
10316
+ "unpricedChanges" => Integer,
10317
+ "otherCurrencyChanges" => Integer
10318
+ },
10319
+ "blast" => {
10320
+ "touchedResources" => Integer,
10321
+ "dependants" => Integer,
10322
+ "highestSeverity" => "none" | "low" | "medium" | "high" | "unknown" | nil
10323
+ },
10324
+ "notes" => Array[String],
10325
+ "truncated" => bool
10326
+ }
10218
10327
 
10219
10328
  # Spec schema: `PrCheckRepository`.
10220
- type pr_check_repository = pr_check_repository_input
10221
- & { "id" => String, "createdAt" => String, "updatedAt" => String }
10329
+ type pr_check_repository = {
10330
+ "installationId" => Integer,
10331
+ "repo" => String,
10332
+ "enabled" => bool,
10333
+ "commentEnabled" => bool,
10334
+ "costThreshold" => Numeric | nil,
10335
+ "thresholdConclusion" => pr_check_threshold_conclusion,
10336
+ "directories" => Array[String],
10337
+ "id" => String,
10338
+ "createdAt" => String,
10339
+ "updatedAt" => String
10340
+ }
10222
10341
 
10223
10342
  # Spec schema: `PrCheckRepositoryInput`.
10224
10343
  type pr_check_repository_input = {
@@ -10241,10 +10360,10 @@ module Infrawrench
10241
10360
  "pullUrl" => String | nil,
10242
10361
  "headSha" => String,
10243
10362
  "status" => "running" | "completed" | "failed",
10244
- "conclusion" => pr_check_conclusion,
10363
+ "conclusion" => pr_check_conclusion | nil,
10245
10364
  "checkRunUrl" => String | nil,
10246
10365
  "commentUrl" => String | nil,
10247
- "report" => pr_check_report,
10366
+ "report" => pr_check_report | nil,
10248
10367
  "error" => String | nil,
10249
10368
  "createdAt" => String,
10250
10369
  "completedAt" => String | nil
@@ -10282,15 +10401,11 @@ module Infrawrench
10282
10401
  "helpLink" => { "label" => String, "url" => String } | nil
10283
10402
  }
10284
10403
 
10285
- # Declared when the plugin supports credential preflight (per-capability
10286
- # permission checks). `null` for plugins without it.
10287
- #
10288
10404
  # Spec schema: `PreflightDeclaration`.
10289
10405
  type preflight_declaration = {
10290
- "capabilities" => Array[preflight_capability],
10291
- ?"templateFormat" => { "label" => String, "language" => "json" | "yaml" | "text" }
10292
- }
10293
- | nil
10406
+ "capabilities" => Array[preflight_capability],
10407
+ ?"templateFormat" => { "label" => String, "language" => "json" | "yaml" | "text" }
10408
+ }
10294
10409
 
10295
10410
  # Spec schema: `PreflightPermission`.
10296
10411
  type preflight_permission = { "id" => String, "label" => String }
@@ -10318,12 +10433,8 @@ module Infrawrench
10318
10433
  | "africa"
10319
10434
  | "oceania"
10320
10435
 
10321
- # Monthly amount in the org's display currency (converted at the org's stated
10322
- # rate), or in the native currency when no display currency is configured;
10323
- # null when there is no rate. Sorting and `maxMonthlyPrice` use it.
10324
- #
10325
10436
  # Spec schema: `PriceCatalogComparable`.
10326
- type price_catalog_comparable = { "amount" => Numeric, "currency" => String } | nil
10437
+ type price_catalog_comparable = { "amount" => Numeric, "currency" => String }
10327
10438
 
10328
10439
  # Spec schema: `PriceCatalogCompareProvider`.
10329
10440
  type price_catalog_compare_provider = {
@@ -10333,14 +10444,14 @@ module Infrawrench
10333
10444
  "regionLabel" => String | nil,
10334
10445
  "state" => price_catalog_provider_state,
10335
10446
  "error" => String | nil,
10336
- "best" => price_catalog_row & (Hash[String, untyped] | nil),
10447
+ "best" => price_catalog_row | nil,
10337
10448
  "alternatives" => Array[price_catalog_row]
10338
10449
  }
10339
10450
 
10340
10451
  # Spec schema: `PriceCatalogCompareResponse`.
10341
10452
  type price_catalog_compare_response = {
10342
10453
  "target" => price_catalog_compare_target,
10343
- "reference" => price_catalog_row & (Hash[String, untyped] | nil),
10454
+ "reference" => price_catalog_row | nil,
10344
10455
  "area" => price_catalog_area,
10345
10456
  "rateType" => price_rate_type,
10346
10457
  "providers" => Array[price_catalog_compare_provider],
@@ -10411,7 +10522,7 @@ module Infrawrench
10411
10522
  "regionLabel" => String,
10412
10523
  "price" => price_catalog_price,
10413
10524
  "monthlyAmount" => Numeric | nil,
10414
- "comparable" => price_catalog_comparable,
10525
+ "comparable" => price_catalog_comparable | nil,
10415
10526
  "otherPrices" => Array[price_catalog_price],
10416
10527
  "estimate" => { "resourceTypeId" => String, "fields" => Hash[String, String] } | nil
10417
10528
  }
@@ -10477,10 +10588,10 @@ module Infrawrench
10477
10588
 
10478
10589
  # Spec schema: `PricingPreviewRequest`.
10479
10590
  type pricing_preview_request = {
10480
- ?"rule" => billing_rule_input & (Hash[String, untyped] | nil),
10591
+ ?"rule" => untyped,
10481
10592
  ?"ruleId" => String | nil,
10482
10593
  ?"managedAccountId" => String | nil,
10483
- ?"pricing" => managed_account_pricing,
10594
+ ?"pricing" => untyped,
10484
10595
  ?"month" => String | nil
10485
10596
  }
10486
10597
 
@@ -10494,7 +10605,7 @@ module Infrawrench
10494
10605
  "before" => Hash[String, Numeric],
10495
10606
  "after" => Hash[String, Numeric],
10496
10607
  "effects" => Array[pricing_effect],
10497
- "coverage" => rerate_coverage,
10608
+ "coverage" => rerate_coverage | nil,
10498
10609
  "warnings" => Array[String],
10499
10610
  "expressionFailures" => Array[pricing_expression_failure],
10500
10611
  "changes" => Array[{
@@ -10732,13 +10843,12 @@ module Infrawrench
10732
10843
  #
10733
10844
  # Spec schema: `QuietHours`.
10734
10845
  type quiet_hours = {
10735
- "timezone" => String,
10736
- "startMinute" => Integer,
10737
- "endMinute" => Integer,
10738
- "days" => Array[Integer],
10739
- "urgentOverride" => alert_severity & (String | nil)
10740
- }
10741
- | nil
10846
+ "timezone" => String,
10847
+ "startMinute" => Integer,
10848
+ "endMinute" => Integer,
10849
+ "days" => Array[Integer],
10850
+ "urgentOverride" => alert_severity | nil
10851
+ }
10742
10852
 
10743
10853
  # Spec schema: `QuotaAccountStatus`.
10744
10854
  type quota_account_status = {
@@ -10930,16 +11040,15 @@ module Infrawrench
10930
11040
 
10931
11041
  # Spec schema: `RerateCoverage`.
10932
11042
  type rerate_coverage = {
10933
- "byCurrency" => Hash[String, { "listPriced" => Numeric, "listTotal" => Numeric, "fallback" => Numeric }],
10934
- "services" => Array[{
10935
- "pluginId" => String,
10936
- "service" => String,
10937
- "currency" => String,
10938
- "listPriced" => Numeric,
10939
- "fallback" => Numeric
10940
- }]
10941
- }
10942
- | nil
11043
+ "byCurrency" => Hash[String, { "listPriced" => Numeric, "listTotal" => Numeric, "fallback" => Numeric }],
11044
+ "services" => Array[{
11045
+ "pluginId" => String,
11046
+ "service" => String,
11047
+ "currency" => String,
11048
+ "listPriced" => Numeric,
11049
+ "fallback" => Numeric
11050
+ }]
11051
+ }
10943
11052
 
10944
11053
  # Spec schema: `Resource`.
10945
11054
  type resource = {
@@ -10951,26 +11060,22 @@ module Infrawrench
10951
11060
  "externalId" => String | nil,
10952
11061
  "fieldsJson" => json_object,
10953
11062
  "outputsJson" => json_object,
10954
- "parentResourceId" => resource_id & (String | nil)
11063
+ "parentResourceId" => resource_id | nil
10955
11064
  }
10956
11065
 
10957
- # Estimated monthly CO2e of the same configuration, beside its price. Null for
10958
- # a peer resource or when the size catalogue could not be read.
10959
- #
10960
11066
  # Spec schema: `ResourceCarbonEstimate`.
10961
11067
  type resource_carbon_estimate = {
10962
- "estimate" => carbon_footprint,
10963
- "reason" => "unsupported-provider" | "unknown-region" | "unknown-size" | nil,
10964
- "inScope" => bool,
10965
- "role" => "instance" | "aggregate",
10966
- "assumptions" => {
10967
- "cpuUtilization" => Numeric,
10968
- "coefficientSource" => String,
10969
- "coefficientVintage" => String,
10970
- "scope" => String
10971
- }
11068
+ "estimate" => carbon_footprint | nil,
11069
+ "reason" => "unsupported-provider" | "unknown-region" | "unknown-size" | nil,
11070
+ "inScope" => bool,
11071
+ "role" => "instance" | "aggregate",
11072
+ "assumptions" => {
11073
+ "cpuUtilization" => Numeric,
11074
+ "coefficientSource" => String,
11075
+ "coefficientVintage" => String,
11076
+ "scope" => String
10972
11077
  }
10973
- | nil
11078
+ }
10974
11079
 
10975
11080
  # Spec schema: `ResourceChangeEntry`.
10976
11081
  type resource_change_entry = {
@@ -10988,7 +11093,20 @@ module Infrawrench
10988
11093
  }
10989
11094
 
10990
11095
  # Spec schema: `ResourceChangeFeedEntry`.
10991
- type resource_change_feed_entry = resource_change_entry & { "accountName" => String | nil }
11096
+ type resource_change_feed_entry = {
11097
+ "id" => String,
11098
+ "resourceId" => resource_id,
11099
+ "accountId" => String,
11100
+ "pluginId" => String,
11101
+ "resourceTypeId" => String,
11102
+ "displayName" => String,
11103
+ "changeKind" => resource_change_kind,
11104
+ "diff" => Array[resource_field_change],
11105
+ ?"origin" => "schedule" | nil,
11106
+ "createdAt" => String,
11107
+ ?"revertedAt" => String | nil,
11108
+ "accountName" => String | nil
11109
+ }
10992
11110
 
10993
11111
  # Spec schema: `ResourceChangeFeedResponse`.
10994
11112
  type resource_change_feed_response = { "entries" => Array[resource_change_feed_entry], "total" => Integer }
@@ -11088,24 +11206,19 @@ module Infrawrench
11088
11206
  type resource_lease_list = { "leases" => Array[resource_lease] }
11089
11207
 
11090
11208
  # Spec schema: `ResourceLeaseLookup`.
11091
- type resource_lease_lookup = { "lease" => resource_lease & (Hash[String, untyped] | nil) }
11209
+ type resource_lease_lookup = { "lease" => resource_lease | nil }
11092
11210
 
11093
11211
  # Spec schema: `ResourceLeaseUpdate`.
11094
11212
  type resource_lease_update = { ?"expiresAt" => String, ?"autoDelete" => bool, ?"note" => String | nil }
11095
11213
 
11096
- # Who owns this resource, or null when nobody has claimed it. Present only
11097
- # when the owner can be named: a resource carrying a purpose but no owner
11098
- # reads as null, because the question this answers is who to tell.
11099
- #
11100
11214
  # Spec schema: `ResourceOwnerAnnotation`.
11101
11215
  type resource_owner_annotation = {
11102
- "userId" => String | nil,
11103
- "displayName" => String,
11104
- "isLabel" => bool,
11105
- "ticketUrl" => String | nil,
11106
- "purpose" => String | nil
11107
- }
11108
- | nil
11216
+ "userId" => String | nil,
11217
+ "displayName" => String,
11218
+ "isLabel" => bool,
11219
+ "ticketUrl" => String | nil,
11220
+ "purpose" => String | nil
11221
+ }
11109
11222
 
11110
11223
  # Spec schema: `ResourceOwnership`.
11111
11224
  type resource_ownership = {
@@ -11126,7 +11239,7 @@ module Infrawrench
11126
11239
  }
11127
11240
 
11128
11241
  # Spec schema: `ResourceOwnershipEnvelope`.
11129
- type resource_ownership_envelope = { "ownership" => resource_ownership & (Hash[String, untyped] | nil) }
11242
+ type resource_ownership_envelope = { "ownership" => resource_ownership | nil }
11130
11243
 
11131
11244
  # Spec schema: `ResourceOwnershipListResponse`.
11132
11245
  type resource_ownership_list_response = { "ownership" => Array[resource_ownership] }
@@ -11165,8 +11278,8 @@ module Infrawrench
11165
11278
  "version" => Numeric,
11166
11279
  "filters" => resource_report_filters,
11167
11280
  "columns" => Array[String],
11168
- "sort" => resource_report_sort,
11169
- "costRange" => cost_date_range & untyped,
11281
+ "sort" => untyped,
11282
+ "costRange" => cost_date_range,
11170
11283
  "costBasis" => cost_basis,
11171
11284
  "pageSize" => Integer
11172
11285
  }
@@ -11230,7 +11343,7 @@ module Infrawrench
11230
11343
  "offset" => Integer,
11231
11344
  "limit" => Integer,
11232
11345
  "truncated" => bool,
11233
- "sort" => resource_report_sort & Hash[String, untyped],
11346
+ "sort" => resource_report_sort,
11234
11347
  "cost" => {
11235
11348
  "available" => bool,
11236
11349
  "reason" => String | nil,
@@ -11240,10 +11353,8 @@ module Infrawrench
11240
11353
  | nil
11241
11354
  }
11242
11355
 
11243
- # Null sorts by name, ascending.
11244
- #
11245
11356
  # Spec schema: `ResourceReportSort`.
11246
- type resource_report_sort = { "column" => String, "direction" => "asc" | "desc" } | nil
11357
+ type resource_report_sort = { "column" => String, "direction" => "asc" | "desc" }
11247
11358
 
11248
11359
  # Spec schema: `ResourceReportTagFilter`.
11249
11360
  type resource_report_tag_filter = {
@@ -12501,7 +12612,7 @@ module Infrawrench
12501
12612
  type resource_type_summary = {
12502
12613
  "id" => String,
12503
12614
  "displayName" => String,
12504
- ?"pluralDisplayName" => String,
12615
+ "pluralDisplayName" => String,
12505
12616
  ?"iconKey" => String,
12506
12617
  ?"showcase" => Array[{ "key" => String, "label" => String }],
12507
12618
  ?"parentTypeId" => String,
@@ -12519,6 +12630,9 @@ module Infrawrench
12519
12630
  ?"schedulable" => bool
12520
12631
  }
12521
12632
 
12633
+ # Spec schema: `ResourceWarning`.
12634
+ type resource_warning = { "code" => String, "message" => String }
12635
+
12522
12636
  # Spec schema: `RestoreDrill`.
12523
12637
  type restore_drill = {
12524
12638
  "id" => String,
@@ -12613,7 +12727,14 @@ module Infrawrench
12613
12727
  }
12614
12728
 
12615
12729
  # Spec schema: `Role`.
12616
- type role = role_summary & { "permissions" => Array[permission] }
12730
+ type role = {
12731
+ "id" => String,
12732
+ "name" => String,
12733
+ "description" => String | nil,
12734
+ "isSystem" => bool,
12735
+ "systemKey" => String | nil,
12736
+ "permissions" => Array[permission]
12737
+ }
12617
12738
 
12618
12739
  # Spec schema: `RoleChangeRequest`.
12619
12740
  type role_change_request = { ?"role" => organization_role, ?"roleId" => String }
@@ -12632,13 +12753,12 @@ module Infrawrench
12632
12753
 
12633
12754
  # Spec schema: `RoleSummary`.
12634
12755
  type role_summary = {
12635
- "id" => String,
12636
- "name" => String,
12637
- "description" => String | nil,
12638
- "isSystem" => bool,
12639
- "systemKey" => String | nil
12640
- }
12641
- | nil
12756
+ "id" => String,
12757
+ "name" => String,
12758
+ "description" => String | nil,
12759
+ "isSystem" => bool,
12760
+ "systemKey" => String | nil
12761
+ }
12642
12762
 
12643
12763
  # Spec schema: `RoleUpdateRequest`.
12644
12764
  type role_update_request = { ?"name" => String, ?"description" => String | nil, ?"permissions" => Array[permission] }
@@ -12762,6 +12882,9 @@ module Infrawrench
12762
12882
  "updatedAt" => String
12763
12883
  }
12764
12884
 
12885
+ # Spec schema: `SavedCostFilterInUse`.
12886
+ type saved_cost_filter_in_use = { "error" => String, "referents" => Array[saved_cost_filter_referent] }
12887
+
12765
12888
  # Spec schema: `SavedCostFilterInput`.
12766
12889
  type saved_cost_filter_input = {
12767
12890
  "name" => String,
@@ -12770,6 +12893,9 @@ module Infrawrench
12770
12893
  ?"query" => String
12771
12894
  }
12772
12895
 
12896
+ # Spec schema: `SavedCostFilterNameConflict`.
12897
+ type saved_cost_filter_name_conflict = { "error" => String }
12898
+
12773
12899
  # Spec schema: `SavedCostFilterReferent`.
12774
12900
  type saved_cost_filter_referent = {
12775
12901
  "kind" => "budget" | "cost_report" | "cost_graph_widget" | "cost_visibility_scope",
@@ -12781,15 +12907,7 @@ module Infrawrench
12781
12907
 
12782
12908
  # Spec schema: `SavedCostFilterTerm`.
12783
12909
  type saved_cost_filter_term = {
12784
- "dimension" => "provider"
12785
- | "account"
12786
- | "service"
12787
- | "region"
12788
- | "resource"
12789
- | "tag"
12790
- | "charge_type"
12791
- | "commitment"
12792
- | "virtual_tag",
12910
+ "dimension" => cost_dimension,
12793
12911
  "op" => cost_filter_operator,
12794
12912
  "values" => Array[String],
12795
12913
  ?"tagKey" => String
@@ -12890,7 +13008,7 @@ module Infrawrench
12890
13008
  "horizonEndsOn" => String | nil,
12891
13009
  "attributedCostCentreId" => String | nil,
12892
13010
  "attributedCostCentreName" => String | nil,
12893
- "shortfall" => savings_shortfall,
13011
+ "shortfall" => savings_shortfall | nil,
12894
13012
  "editable" => "full" | "annotate" | "none"
12895
13013
  }
12896
13014
 
@@ -12919,10 +13037,10 @@ module Infrawrench
12919
13037
  "resourceTypeId" => String | nil,
12920
13038
  "resourceTypeName" => String | nil,
12921
13039
  "tags" => Hash[String, String],
12922
- "monthlySavings" => savings_finding_money,
13040
+ "monthlySavings" => savings_finding_money | nil,
12923
13041
  "status" => savings_finding_status,
12924
13042
  "statusChangedAt" => String | nil,
12925
- "statusChangedBy" => savings_finding_actor,
13043
+ "statusChangedBy" => savings_finding_actor | nil,
12926
13044
  "statusNote" => String | nil,
12927
13045
  "resolution" => "manual" | "resolved" | nil,
12928
13046
  "detectedAt" => String,
@@ -12931,10 +13049,8 @@ module Infrawrench
12931
13049
  "realizedSavings" => { "eventId" => String, "title" => String } | nil
12932
13050
  }
12933
13051
 
12934
- # Null for the initial Ready and automatic changes.
12935
- #
12936
13052
  # Spec schema: `SavingsFindingActor`.
12937
- type savings_finding_actor = { "userId" => String, "name" => String | nil } | nil
13053
+ type savings_finding_actor = { "userId" => String, "name" => String | nil }
12938
13054
 
12939
13055
  # Empty lists and blank fields are dropped on write.
12940
13056
  #
@@ -12958,11 +13074,8 @@ module Infrawrench
12958
13074
  # Spec schema: `SavingsFindingKind`.
12959
13075
  type savings_finding_kind = "orphan" | "oversized" | "extended_support" | "seat"
12960
13076
 
12961
- # What acting on it saves per month; null when the finder has no price (and,
12962
- # for orphans, when the caller lacks `costs:read`, as on `/orphans`).
12963
- #
12964
13077
  # Spec schema: `SavingsFindingMoney`.
12965
- type savings_finding_money = { "amount" => Numeric, "currency" => String } | nil
13078
+ type savings_finding_money = { "amount" => Numeric, "currency" => String }
12966
13079
 
12967
13080
  # Spec schema: `SavingsFindingSort`.
12968
13081
  type savings_finding_sort = {
@@ -12981,12 +13094,12 @@ module Infrawrench
12981
13094
  "key" => String,
12982
13095
  "status" => savings_finding_status,
12983
13096
  "statusChangedAt" => String,
12984
- "statusChangedBy" => savings_finding_actor,
13097
+ "statusChangedBy" => savings_finding_actor | nil,
12985
13098
  "statusNote" => String | nil,
12986
13099
  "resolution" => "manual" | "resolved" | nil
12987
13100
  }
12988
13101
 
12989
- # Status tab. Defaults to `all` (or the view's).
13102
+ # A status, `open` (Ready or In progress), or `all`.
12990
13103
  #
12991
13104
  # Spec schema: `SavingsFindingStatusFilter`.
12992
13105
  type savings_finding_status_filter = "open" | "ready" | "in_progress" | "completed" | "archived" | "all"
@@ -13012,27 +13125,26 @@ module Infrawrench
13012
13125
  "completed" => Integer,
13013
13126
  "archived" => Integer
13014
13127
  },
13015
- "potentialMonthly" => Array[savings_finding_money & Hash[String, untyped]],
13128
+ "potentialMonthly" => Array[savings_finding_money],
13016
13129
  "unpricedOpenCount" => Integer,
13017
- "realized" => Array[savings_finding_money & Hash[String, untyped]] | nil,
13130
+ "realized" => Array[savings_finding_money] | nil,
13018
13131
  "realizedWindowDays" => Integer,
13019
13132
  "savingsRate" => Array[{ "currency" => String, "rate" => Numeric }] | nil
13020
13133
  }
13021
13134
 
13022
13135
  # Spec schema: `SavingsShortfall`.
13023
13136
  type savings_shortfall = {
13024
- "kind" => "below_projection" | "grew_back",
13025
- "realizedPerDay" => Numeric,
13026
- "projectedPerDay" => Numeric | nil
13027
- }
13028
- | nil
13137
+ "kind" => "below_projection" | "grew_back",
13138
+ "realizedPerDay" => Numeric,
13139
+ "projectedPerDay" => Numeric | nil
13140
+ }
13029
13141
 
13030
13142
  # Spec schema: `SavingsView`.
13031
13143
  type savings_view = {
13032
13144
  "id" => String,
13033
13145
  "name" => String,
13034
13146
  "description" => String | nil,
13035
- "status" => savings_finding_status_filter & untyped,
13147
+ "status" => savings_finding_status_filter,
13036
13148
  "filter" => savings_finding_filter,
13037
13149
  "sort" => savings_finding_sort,
13038
13150
  "createdByUserId" => String | nil,
@@ -13062,7 +13174,7 @@ module Infrawrench
13062
13174
  "description" => String | nil,
13063
13175
  "checks" => Array[scorecard_check],
13064
13176
  "levels" => Array[scorecard_level],
13065
- "applicableTiers" => Array[Numeric | Numeric | Numeric | Numeric],
13177
+ "applicableTiers" => Array[Numeric],
13066
13178
  "alertOnLevelDrop" => bool,
13067
13179
  "enabled" => bool,
13068
13180
  "isDefault" => bool,
@@ -13111,7 +13223,7 @@ module Infrawrench
13111
13223
  ?"description" => String | nil,
13112
13224
  ?"checks" => Array[scorecard_check],
13113
13225
  ?"levels" => Array[scorecard_level],
13114
- ?"applicableTiers" => Array[Numeric | Numeric | Numeric | Numeric],
13226
+ ?"applicableTiers" => Array[Numeric],
13115
13227
  ?"alertOnLevelDrop" => bool,
13116
13228
  ?"enabled" => bool
13117
13229
  }
@@ -13132,7 +13244,7 @@ module Infrawrench
13132
13244
  "id" => String,
13133
13245
  "name" => String,
13134
13246
  "slug" => String,
13135
- "tier" => Numeric | Numeric | Numeric | Numeric | nil,
13247
+ "tier" => Numeric | nil,
13136
13248
  "ownerTeam" => String | nil
13137
13249
  }],
13138
13250
  "results" => Array[scorecard_result]
@@ -13156,7 +13268,7 @@ module Infrawrench
13156
13268
  ?"description" => String | nil,
13157
13269
  ?"checks" => Array[scorecard_check],
13158
13270
  ?"levels" => Array[scorecard_level],
13159
- ?"applicableTiers" => Array[Numeric | Numeric | Numeric | Numeric],
13271
+ ?"applicableTiers" => Array[Numeric],
13160
13272
  ?"alertOnLevelDrop" => bool,
13161
13273
  ?"enabled" => bool
13162
13274
  }
@@ -13164,7 +13276,6 @@ module Infrawrench
13164
13276
  # Spec schema: `SearchHit`.
13165
13277
  type search_hit = {
13166
13278
  "id" => resource_id,
13167
- ?"kind" => search_result_kind,
13168
13279
  "pluginId" => String,
13169
13280
  "pluginDisplayName" => String,
13170
13281
  "pluginLogoSvg" => String,
@@ -13173,7 +13284,8 @@ module Infrawrench
13173
13284
  "accountId" => String,
13174
13285
  "accountName" => String,
13175
13286
  "displayName" => String,
13176
- ?"subtitle" => String
13287
+ ?"subtitle" => String,
13288
+ ?"kind" => search_result_kind
13177
13289
  }
13178
13290
 
13179
13291
  # What a search hit is. `resource` and `workflow` are the original kinds; the
@@ -13252,7 +13364,7 @@ module Infrawrench
13252
13364
  },
13253
13365
  ?"targetSeatType" => String,
13254
13366
  ?"reason" => String,
13255
- ?"remediation" => finding_remediation & Hash[String, untyped]
13367
+ ?"remediation" => finding_remediation
13256
13368
  }
13257
13369
 
13258
13370
  # Spec schema: `SeatLimitResponse`.
@@ -13364,7 +13476,7 @@ module Infrawrench
13364
13476
  "name" => String,
13365
13477
  "slug" => String,
13366
13478
  "description" => String | nil,
13367
- "tier" => Numeric | Numeric | Numeric | Numeric | nil,
13479
+ "tier" => Numeric | nil,
13368
13480
  "ownerTeam" => String | nil,
13369
13481
  "ownerUserIds" => Array[String],
13370
13482
  "links" => Array[service_link],
@@ -13387,7 +13499,7 @@ module Infrawrench
13387
13499
  "name" => String,
13388
13500
  ?"slug" => String,
13389
13501
  ?"description" => String | nil,
13390
- ?"tier" => Numeric | Numeric | Numeric | Numeric | nil,
13502
+ ?"tier" => Numeric | nil,
13391
13503
  ?"ownerTeam" => String | nil,
13392
13504
  ?"ownerUserIds" => Array[String],
13393
13505
  ?"links" => Array[service_link],
@@ -13423,19 +13535,18 @@ module Infrawrench
13423
13535
  "externalId" => String | nil,
13424
13536
  "source" => "manual" | "rule",
13425
13537
  "ruleIndex" => Integer | nil,
13426
- "owner" => service_member_owner,
13538
+ "owner" => service_member_owner | nil,
13427
13539
  "missing" => bool
13428
13540
  }
13429
13541
 
13430
13542
  # Spec schema: `ServiceMemberOwner`.
13431
13543
  type service_member_owner = {
13432
- "userId" => String | nil,
13433
- "displayName" => String,
13434
- "isLabel" => bool,
13435
- "ticketUrl" => String | nil,
13436
- "purpose" => String | nil
13437
- }
13438
- | nil
13544
+ "userId" => String | nil,
13545
+ "displayName" => String,
13546
+ "isLabel" => bool,
13547
+ "ticketUrl" => String | nil,
13548
+ "purpose" => String | nil
13549
+ }
13439
13550
 
13440
13551
  # Spec schema: `ServiceMembersRequest`.
13441
13552
  type service_members_request = { "resourceIds" => Array[String] }
@@ -13450,31 +13561,8 @@ module Infrawrench
13450
13561
  "accountId" => String | nil
13451
13562
  }
13452
13563
 
13453
- # Spec schema: `ServicePostureFinding`.
13454
- type service_posture_finding = {
13455
- "resourceId" => String,
13456
- "pluginId" => String,
13457
- "pluginName" => String,
13458
- "resourceTypeId" => String,
13459
- "resourceTypeName" => String,
13460
- "accountId" => String,
13461
- "accountName" => String,
13462
- "displayName" => String,
13463
- "externalId" => String | nil,
13464
- "ruleId" => String,
13465
- "title" => String,
13466
- "severity" => "critical" | "high" | "medium" | "low",
13467
- "category" => String,
13468
- "reason" => String
13469
- }
13470
-
13471
13564
  # Spec schema: `ServiceRef`.
13472
- type service_ref = {
13473
- "id" => String,
13474
- "name" => String,
13475
- "slug" => String,
13476
- "tier" => Numeric | Numeric | Numeric | Numeric | nil
13477
- }
13565
+ type service_ref = { "id" => String, "name" => String, "slug" => String, "tier" => Numeric | nil }
13478
13566
 
13479
13567
  # Spec schema: `ServiceScoreBadge`.
13480
13568
  type service_score_badge = {
@@ -13527,7 +13615,7 @@ module Infrawrench
13527
13615
  "findings" => {
13528
13616
  "posture" => {
13529
13617
  "counts" => { "critical" => Integer, "high" => Integer, "medium" => Integer, "low" => Integer },
13530
- "items" => Array[service_posture_finding]
13618
+ "items" => Array[posture_finding]
13531
13619
  },
13532
13620
  "orphans" => Array[{ "resourceId" => String, "resourceName" => String, "reason" => String }],
13533
13621
  "backups" => Array[{ "resourceId" => String, "resourceName" => String, "kind" => String, "detail" => String }],
@@ -13551,7 +13639,7 @@ module Infrawrench
13551
13639
  ?"name" => String,
13552
13640
  ?"slug" => String,
13553
13641
  ?"description" => String | nil,
13554
- ?"tier" => Numeric | Numeric | Numeric | Numeric | nil,
13642
+ ?"tier" => Numeric | nil,
13555
13643
  ?"ownerTeam" => String | nil,
13556
13644
  ?"ownerUserIds" => Array[String],
13557
13645
  ?"links" => Array[service_link],
@@ -13623,7 +13711,14 @@ module Infrawrench
13623
13711
  type set_default_dashboard_request = { "dashboardId" => String }
13624
13712
 
13625
13713
  # Spec schema: `SftpDeleteRequest`.
13626
- type sftp_delete_request = sftp_list_request & { "isDir" => bool }
13714
+ type sftp_delete_request = {
13715
+ "accountId" => String,
13716
+ "path" => String,
13717
+ ?"sshKeyId" => String,
13718
+ ?"sshHost" => String,
13719
+ ?"sshUsername" => String,
13720
+ "isDir" => bool
13721
+ }
13627
13722
 
13628
13723
  # Spec schema: `SftpEntry`.
13629
13724
  type sftp_entry = {
@@ -13734,7 +13829,27 @@ module Infrawrench
13734
13829
  type shared_console_state = { "share" => shared_console, "participants" => Array[shared_console_participant] }
13735
13830
 
13736
13831
  # Spec schema: `SharedConsoleSummary`.
13737
- type shared_console_summary = shared_console & { "participants" => Array[shared_console_participant] }
13832
+ type shared_console_summary = {
13833
+ "id" => String,
13834
+ "routingKey" => String,
13835
+ "ownerUserId" => String | nil,
13836
+ "ownerName" => String | nil,
13837
+ "accountId" => String | nil,
13838
+ "resourceId" => String | nil,
13839
+ "host" => String,
13840
+ "port" => Integer,
13841
+ "username" => String,
13842
+ "allowHandover" => bool,
13843
+ "status" => "active" | "revoked" | "ended",
13844
+ "inviteTokenPrefix" => String | nil,
13845
+ "inviteExpiresAt" => String | nil,
13846
+ "inviteConsumedAt" => String | nil,
13847
+ "recordingId" => String | nil,
13848
+ "ptyCols" => Integer,
13849
+ "ptyRows" => Integer,
13850
+ "createdAt" => String,
13851
+ "participants" => Array[shared_console_participant]
13852
+ }
13738
13853
 
13739
13854
  # Spec schema: `ShowbackReport`.
13740
13855
  type showback_report = {
@@ -13819,7 +13934,7 @@ module Infrawrench
13819
13934
  "currency" => String | nil,
13820
13935
  "createdAt" => String,
13821
13936
  "updatedAt" => String,
13822
- ?"remediation" => finding_remediation & Hash[String, untyped]
13937
+ ?"remediation" => finding_remediation & untyped
13823
13938
  }
13824
13939
 
13825
13940
  # Spec schema: `SleepScheduleCreate`.
@@ -13870,7 +13985,7 @@ module Infrawrench
13870
13985
  "name" => String,
13871
13986
  "description" => String | nil,
13872
13987
  "targetPercent" => Numeric,
13873
- "windowDays" => Numeric | Numeric | Numeric,
13988
+ "windowDays" => Numeric,
13874
13989
  "alertsEnabled" => bool,
13875
13990
  "suggestFreeze" => bool,
13876
13991
  "enabled" => bool,
@@ -13884,7 +13999,7 @@ module Infrawrench
13884
13999
  "probeName" => String | nil,
13885
14000
  "resourceName" => String | nil,
13886
14001
  "accountId" => String | nil,
13887
- "pluginId" => plugin_id & (String | nil),
14002
+ "pluginId" => plugin_id | nil,
13888
14003
  "resourceTypeId" => String | nil,
13889
14004
  "status" => "exhausted" | "fast_burn" | "slow_burn" | "ok" | "unknown",
13890
14005
  "sli" => Numeric | nil,
@@ -13902,10 +14017,8 @@ module Infrawrench
13902
14017
  "updatedAt" => String
13903
14018
  }
13904
14019
 
13905
- # The change freeze in effect, if any.
13906
- #
13907
14020
  # Spec schema: `SloActiveFreeze`.
13908
- type slo_active_freeze = { "id" => String, "name" => String, "endsAt" => String | nil } | nil
14021
+ type slo_active_freeze = { "id" => String, "name" => String, "endsAt" => String | nil }
13909
14022
 
13910
14023
  # Spec schema: `SloBucket`.
13911
14024
  type slo_bucket = { "startMs" => Numeric, "good" => Numeric, "total" => Numeric }
@@ -13913,8 +14026,8 @@ module Infrawrench
13913
14026
  # Spec schema: `SloCreate`.
13914
14027
  type slo_create = {
13915
14028
  "name" => String,
13916
- ?"description" => String | nil,
13917
14029
  "sliKind" => "probe_availability" | "probe_latency" | "metric_threshold",
14030
+ ?"description" => String | nil,
13918
14031
  ?"probeId" => String | nil,
13919
14032
  ?"latencyThresholdMs" => Integer | nil,
13920
14033
  ?"resourceId" => String | nil,
@@ -13922,17 +14035,17 @@ module Infrawrench
13922
14035
  ?"comparator" => "<" | "<=" | ">" | ">=" | nil,
13923
14036
  ?"threshold" => Numeric | nil,
13924
14037
  ?"targetPercent" => Numeric,
13925
- ?"windowDays" => Numeric | Numeric | Numeric,
14038
+ ?"windowDays" => Numeric,
13926
14039
  ?"alertsEnabled" => bool,
13927
14040
  ?"suggestFreeze" => bool,
13928
14041
  ?"enabled" => bool
13929
14042
  }
13930
14043
 
13931
14044
  # Spec schema: `SloDetail`.
13932
- type slo_detail = { "slo" => slo, "buckets" => Array[slo_bucket], "activeFreeze" => slo_active_freeze }
14045
+ type slo_detail = { "slo" => slo, "buckets" => Array[slo_bucket], "activeFreeze" => slo_active_freeze | nil }
13933
14046
 
13934
14047
  # Spec schema: `SloFreezeRequest`.
13935
- type slo_freeze_request = { ?"durationHours" => Numeric | Numeric | Numeric | nil, ?"reason" => String }
14048
+ type slo_freeze_request = { ?"durationHours" => Numeric | nil, ?"reason" => String }
13936
14049
 
13937
14050
  # Spec schema: `SloList`.
13938
14051
  type slo_list = { "slos" => Array[slo] }
@@ -13953,8 +14066,8 @@ module Infrawrench
13953
14066
  # Spec schema: `SloUpdate`.
13954
14067
  type slo_update = {
13955
14068
  ?"name" => String,
13956
- ?"description" => String | nil,
13957
14069
  ?"sliKind" => "probe_availability" | "probe_latency" | "metric_threshold",
14070
+ ?"description" => String | nil,
13958
14071
  ?"probeId" => String | nil,
13959
14072
  ?"latencyThresholdMs" => Integer | nil,
13960
14073
  ?"resourceId" => String | nil,
@@ -13962,7 +14075,7 @@ module Infrawrench
13962
14075
  ?"comparator" => "<" | "<=" | ">" | ">=" | nil,
13963
14076
  ?"threshold" => Numeric | nil,
13964
14077
  ?"targetPercent" => Numeric,
13965
- ?"windowDays" => Numeric | Numeric | Numeric,
14078
+ ?"windowDays" => Numeric,
13966
14079
  ?"alertsEnabled" => bool,
13967
14080
  ?"suggestFreeze" => bool,
13968
14081
  ?"enabled" => bool
@@ -13972,7 +14085,13 @@ module Infrawrench
13972
14085
  type sql_estimate_request = { "accountId" => String, "resourceId" => resource_id, "sql" => String }
13973
14086
 
13974
14087
  # Spec schema: `SqlExecuteRequest`.
13975
- type sql_execute_request = sql_query_request & { ?"params" => Array[untyped] }
14088
+ type sql_execute_request = {
14089
+ "accountId" => String,
14090
+ ?"resourceId" => resource_id,
14091
+ ?"resourceTypeId" => String,
14092
+ "sql" => String,
14093
+ ?"params" => untyped
14094
+ }
13976
14095
 
13977
14096
  # Spec schema: `SqlExecuteResponse`.
13978
14097
  type sql_execute_response = { "affectedRows" => Integer }
@@ -14050,6 +14169,17 @@ module Infrawrench
14050
14169
  # Spec schema: `SshFanoutTargetsResponse`.
14051
14170
  type ssh_fanout_targets_response = { "targets" => Array[ssh_fanout_target] }
14052
14171
 
14172
+ # Spec schema: `SshHostKeyTrustRequired`.
14173
+ type ssh_host_key_trust_required = {
14174
+ "error" => "ssh_host_key_trust_required",
14175
+ "message" => String,
14176
+ "kind" => "unknown" | "mismatch",
14177
+ "host" => String,
14178
+ "port" => Integer,
14179
+ "presentedFingerprint" => String,
14180
+ "storedFingerprint" => String | nil
14181
+ }
14182
+
14053
14183
  # Spec schema: `SshInstallAccount`.
14054
14184
  type ssh_install_account = {
14055
14185
  "accountId" => String,
@@ -14148,7 +14278,6 @@ module Infrawrench
14148
14278
  # Spec schema: `StarredItem`.
14149
14279
  type starred_item = {
14150
14280
  "id" => resource_id,
14151
- "kind" => search_result_kind,
14152
14281
  "pluginId" => String,
14153
14282
  "pluginDisplayName" => String,
14154
14283
  "pluginLogoSvg" => String,
@@ -14158,6 +14287,7 @@ module Infrawrench
14158
14287
  "accountName" => String,
14159
14288
  "displayName" => String,
14160
14289
  ?"subtitle" => String,
14290
+ "kind" => search_result_kind,
14161
14291
  "starredAt" => String
14162
14292
  }
14163
14293
 
@@ -14251,12 +14381,11 @@ module Infrawrench
14251
14381
 
14252
14382
  # Spec schema: `Subscription`.
14253
14383
  type subscription = {
14254
- "status" => "trialing" | "active" | "past_due" | "canceled" | "unpaid",
14255
- "seatCount" => Integer,
14256
- "currentPeriodEnd" => String | nil,
14257
- "stripeCustomerId" => String
14258
- }
14259
- | nil
14384
+ "status" => "trialing" | "active" | "past_due" | "canceled" | "unpaid",
14385
+ "seatCount" => Integer,
14386
+ "currentPeriodEnd" => String | nil,
14387
+ "stripeCustomerId" => String
14388
+ }
14260
14389
 
14261
14390
  # Spec schema: `SubscriptionCheckoutRequest`.
14262
14391
  type subscription_checkout_request = { ?"measurement" => revnu_checkout_measurement }
@@ -14264,7 +14393,7 @@ module Infrawrench
14264
14393
  # Two allocation rule ids in the same org whose priorities should be swapped.
14265
14394
  #
14266
14395
  # Spec schema: `SwapAllocationRulesBody`.
14267
- type swap_allocation_rules_body = { "aId" => String, "bId" => String }
14396
+ type swap_allocation_rules_body = { "aId" => untyped, "bId" => untyped }
14268
14397
 
14269
14398
  # Spec schema: `SyncResponse`.
14270
14399
  type sync_response = {
@@ -14281,7 +14410,7 @@ module Infrawrench
14281
14410
  "externalId" => String | nil,
14282
14411
  "fieldsJson" => json_object,
14283
14412
  "outputsJson" => json_object,
14284
- "parentResourceId" => resource_id & (String | nil)
14413
+ "parentResourceId" => resource_id | nil
14285
14414
  }
14286
14415
 
14287
14416
  # Spec schema: `SyntheticProbe`.
@@ -14296,7 +14425,7 @@ module Infrawrench
14296
14425
  "enabled" => bool,
14297
14426
  "accountId" => String | nil,
14298
14427
  "resourceId" => String | nil,
14299
- "pluginId" => plugin_id & (String | nil),
14428
+ "pluginId" => plugin_id | nil,
14300
14429
  "resourceTypeId" => String | nil,
14301
14430
  "outputKey" => String | nil,
14302
14431
  "status" => "up" | "down" | "unknown",
@@ -14338,32 +14467,26 @@ module Infrawrench
14338
14467
  ?"enabled" => bool
14339
14468
  }
14340
14469
 
14341
- # The organization's T3 Code managed policy, installed on every T3 Code server
14342
- # (`/etc/t3code/policy.json`). On save: omit to keep the stored policy, `null`
14343
- # to remove it. A new T3 Code session is refused when the policy does not
14344
- # allow its tool or turns off the T3 Connect it is reached through.
14345
- #
14346
14470
  # Spec schema: `T3CodePolicy`.
14347
14471
  type t3_code_policy = {
14348
- "schemaVersion" => Numeric,
14349
- "organization" => String,
14350
- ?"supportUrl" => String,
14351
- ?"settings" => Hash[String, { ?"value" => untyped, "locked" => bool }],
14352
- ?"limits" => {
14353
- ?"maxRuntimeMode" => "approval-required" | "auto-accept-edits" | "auto" | "full-access",
14354
- ?"clients" => Array["desktop" | "local-browser" | "remote"],
14355
- ?"connect" => bool,
14356
- ?"webhookTasks" => bool,
14357
- ?"telemetry" => bool,
14358
- ?"browserCookieImport" => bool,
14359
- ?"providers" => {
14360
- ?"allowedDrivers" => Array[String],
14361
- ?"instances" => Hash[String, t3_code_policy_provider_instance]
14362
- },
14363
- ?"updates" => { "mode" => "auto" | "off", ?"feedUrl" => String, ?"allowNightly" => bool }
14364
- }
14472
+ "schemaVersion" => Numeric,
14473
+ "organization" => String,
14474
+ ?"supportUrl" => String,
14475
+ ?"settings" => Hash[String, { ?"value" => untyped, "locked" => bool }],
14476
+ ?"limits" => {
14477
+ ?"maxRuntimeMode" => "approval-required" | "auto-accept-edits" | "auto" | "full-access",
14478
+ ?"clients" => Array["desktop" | "local-browser" | "remote"],
14479
+ ?"connect" => bool,
14480
+ ?"webhookTasks" => bool,
14481
+ ?"telemetry" => bool,
14482
+ ?"browserCookieImport" => bool,
14483
+ ?"providers" => {
14484
+ ?"allowedDrivers" => Array[String],
14485
+ ?"instances" => Hash[String, t3_code_policy_provider_instance]
14486
+ },
14487
+ ?"updates" => { "mode" => "auto" | "off", ?"feedUrl" => String, ?"allowNightly" => bool }
14365
14488
  }
14366
- | nil
14489
+ }
14367
14490
 
14368
14491
  # Spec schema: `T3CodePolicyProviderInstance`.
14369
14492
  type t3_code_policy_provider_instance = {
@@ -14489,6 +14612,29 @@ module Infrawrench
14489
14612
  "uri" => String | nil
14490
14613
  }
14491
14614
 
14615
+ # Spec schema: `TunnelSshAttachRequest`.
14616
+ type tunnel_ssh_attach_request = {
14617
+ "tunnel" => { "accountId" => String, "pluginId" => String, "resourceId" => String },
14618
+ "host" => {
14619
+ "accountId" => String,
14620
+ "pluginId" => String,
14621
+ "resourceTypeId" => String,
14622
+ "resourceId" => String
14623
+ },
14624
+ "hostname" => String,
14625
+ "zoneId" => String,
14626
+ ?"serviceType" => "http" | "https" | "ssh" | "tcp",
14627
+ ?"port" => String,
14628
+ "sshUsername" => String,
14629
+ ?"sshKeyId" => String
14630
+ }
14631
+
14632
+ # Spec schema: `TunnelSshAttachResult`.
14633
+ type tunnel_ssh_attach_result = {
14634
+ "steps" => Array[{ "label" => String, "ok" => bool, ?"detail" => String }],
14635
+ ?"connectCommand" => String
14636
+ }
14637
+
14492
14638
  # Spend in the period no customer is billed for. Resolved exactly the way an
14493
14639
  # invoice resolves it: allocation rules claim spend for cost centres first,
14494
14640
  # and each account claims only what no rule did. A cost centre is assigned
@@ -14529,7 +14675,32 @@ module Infrawrench
14529
14675
  }
14530
14676
 
14531
14677
  # Spec schema: `UnitCostExportRequest`.
14532
- type unit_cost_export_request = unit_cost_query_request & { ?"format" => "csv" | "ndjson" }
14678
+ type unit_cost_export_request = {
14679
+ "from" => String,
14680
+ "to" => String,
14681
+ "binning" => "hourly" | "daily" | "weekly" | "monthly" | "quarterly" | "cumulative",
14682
+ ?"mode" => unit_cost_mode & untyped,
14683
+ ?"scale" => unit_cost_scale,
14684
+ ?"labelFilters" => Array[unit_cost_label_filter],
14685
+ ?"groupByLabel" => String,
14686
+ ?"usageUnit" => String,
14687
+ ?"filters" => Array[business_metric_scope_term],
14688
+ ?"query" => String,
14689
+ ?"savedFilterId" => String,
14690
+ ?"costBasis" => "cash" | "amortized" | "blended",
14691
+ ?"chargeTypes" => Array["usage"
14692
+ | "commitment_covered_usage"
14693
+ | "commitment_fee"
14694
+ | "commitment_discount"
14695
+ | "credit"
14696
+ | "tax"
14697
+ | "refund"
14698
+ | "adjustment"
14699
+ | "support"
14700
+ | "other"],
14701
+ ?"displayCurrency" => String,
14702
+ ?"format" => "csv" | "ndjson"
14703
+ }
14533
14704
 
14534
14705
  # Spec schema: `UnitCostLabelFilter`.
14535
14706
  type unit_cost_label_filter = { "key" => String, "op" => "in" | "not_in", "values" => Array[String] }
@@ -14561,7 +14732,7 @@ module Infrawrench
14561
14732
  "from" => String,
14562
14733
  "to" => String,
14563
14734
  "binning" => "hourly" | "daily" | "weekly" | "monthly" | "quarterly" | "cumulative",
14564
- ?"mode" => unit_cost_mode,
14735
+ ?"mode" => unit_cost_mode & untyped,
14565
14736
  ?"scale" => unit_cost_scale,
14566
14737
  ?"labelFilters" => Array[unit_cost_label_filter],
14567
14738
  ?"groupByLabel" => String,
@@ -14570,7 +14741,16 @@ module Infrawrench
14570
14741
  ?"query" => String,
14571
14742
  ?"savedFilterId" => String,
14572
14743
  ?"costBasis" => "cash" | "amortized" | "blended",
14573
- ?"chargeTypes" => Array[String],
14744
+ ?"chargeTypes" => Array["usage"
14745
+ | "commitment_covered_usage"
14746
+ | "commitment_fee"
14747
+ | "commitment_discount"
14748
+ | "credit"
14749
+ | "tax"
14750
+ | "refund"
14751
+ | "adjustment"
14752
+ | "support"
14753
+ | "other"],
14574
14754
  ?"displayCurrency" => String
14575
14755
  }
14576
14756
 
@@ -14608,7 +14788,7 @@ module Infrawrench
14608
14788
  # raw metric. Margin ignores it. Absent is 1.
14609
14789
  #
14610
14790
  # Spec schema: `UnitCostScale`.
14611
- type unit_cost_scale = Numeric | Numeric | Numeric | Numeric | Numeric
14791
+ type unit_cost_scale = Numeric
14612
14792
 
14613
14793
  # Spec schema: `UnitCostSeries`.
14614
14794
  type unit_cost_series = {
@@ -14716,7 +14896,7 @@ module Infrawrench
14716
14896
  "state" => "pending" | "processing" | "ready" | "failed",
14717
14897
  "processedAt" => String | nil,
14718
14898
  "error" => String | nil,
14719
- "stats" => virtual_tag_stats
14899
+ "stats" => virtual_tag_stats | nil
14720
14900
  },
14721
14901
  "createdByUserId" => String | nil,
14722
14902
  "createdAt" => String,
@@ -14762,13 +14942,12 @@ module Infrawrench
14762
14942
 
14763
14943
  # Spec schema: `VirtualTagStats`.
14764
14944
  type virtual_tag_stats = {
14765
- "from" => String | nil,
14766
- "to" => String | nil,
14767
- "currencies" => Array[virtual_tag_currency_stats],
14768
- "metricFallbackDays" => Integer,
14769
- "distinctValues" => Integer
14770
- }
14771
- | nil
14945
+ "from" => String | nil,
14946
+ "to" => String | nil,
14947
+ "currencies" => Array[virtual_tag_currency_stats],
14948
+ "metricFallbackDays" => Integer,
14949
+ "distinctValues" => Integer
14950
+ }
14772
14951
 
14773
14952
  # Spec schema: `VulnerabilityDismissal`.
14774
14953
  type vulnerability_dismissal = {
@@ -14803,7 +14982,7 @@ module Infrawrench
14803
14982
  "fixedVersion" => String | nil,
14804
14983
  "fixAvailable" => bool | nil,
14805
14984
  "exploitAvailable" => bool | nil,
14806
- "kev" => vulnerability_kev_entry,
14985
+ "kev" => vulnerability_kev_entry | nil,
14807
14986
  "artifact" => {
14808
14987
  "kind" => "image" | "function" | "host" | "repository" | "package",
14809
14988
  "name" => String,
@@ -14818,25 +14997,18 @@ module Infrawrench
14818
14997
  "url" => String | nil,
14819
14998
  "collectedAt" => String,
14820
14999
  "running" => Array[vulnerability_running_ref],
14821
- "services" => Array[{
14822
- "id" => String,
14823
- "name" => String,
14824
- "slug" => String,
14825
- "tier" => Numeric | Numeric | Numeric | Numeric | nil
14826
- }]
15000
+ "services" => Array[{ "id" => String, "name" => String, "slug" => String, "tier" => Numeric | nil }]
14827
15001
  }
14828
15002
 
14829
- # CISA Known Exploited Vulnerabilities entry, when listed.
14830
- #
14831
15003
  # Spec schema: `VulnerabilityKevEntry`.
14832
- type vulnerability_kev_entry = { "dateAdded" => String, "dueDate" => String | nil, "knownRansomware" => bool } | nil
15004
+ type vulnerability_kev_entry = { "dateAdded" => String, "dueDate" => String | nil, "knownRansomware" => bool }
14833
15005
 
14834
15006
  # Spec schema: `VulnerabilityListResponse`.
14835
15007
  type vulnerability_list_response = {
14836
15008
  "findings" => Array[vulnerability_finding],
14837
15009
  "totalCount" => Integer,
14838
15010
  "counts" => vulnerability_severity_counts,
14839
- "runningCounts" => vulnerability_severity_counts & untyped,
15011
+ "runningCounts" => vulnerability_severity_counts,
14840
15012
  "dismissed" => Array[dismissed_vulnerability_finding],
14841
15013
  "dismissedCount" => Integer,
14842
15014
  "sources" => Array[vulnerability_source],
@@ -14931,6 +15103,30 @@ module Infrawrench
14931
15103
  "principal" => "user" | "api_key" | "agent"
14932
15104
  }
14933
15105
 
15106
+ # Spec schema: `Workflow`.
15107
+ type workflow = {
15108
+ "id" => String,
15109
+ "organizationId" => String,
15110
+ "name" => String,
15111
+ "description" => String | nil,
15112
+ "source" => String,
15113
+ "trigger" => workflow_trigger,
15114
+ "metricDefs" => Array[workflow_metric_def],
15115
+ "enabled" => bool,
15116
+ "webhookToken" => String | nil,
15117
+ "hasWebhookSecret" => bool,
15118
+ "gitLastSha" => String | nil,
15119
+ "budgetLastFiredKey" => String | nil,
15120
+ "nextRunAt" => String | nil,
15121
+ "lastRunAt" => String | nil,
15122
+ "createdByUserId" => String | nil,
15123
+ "sourceAuthorUserId" => String | nil,
15124
+ "syncVersion" => Integer,
15125
+ "deletedAt" => String | nil,
15126
+ "createdAt" => String,
15127
+ "updatedAt" => String
15128
+ }
15129
+
14934
15130
  # Spec schema: `WorkflowApproval`.
14935
15131
  type workflow_approval = {
14936
15132
  "id" => String,
@@ -14949,9 +15145,94 @@ module Infrawrench
14949
15145
  # Spec schema: `WorkflowApprovalStatus`.
14950
15146
  type workflow_approval_status = "pending" | "approved" | "denied" | "expired"
14951
15147
 
15148
+ # Spec schema: `WorkflowCheckInput`.
15149
+ type workflow_check_input = { ?"source" => String }
15150
+
15151
+ # Spec schema: `WorkflowDiagnostic`.
15152
+ type workflow_diagnostic = {
15153
+ "line" => Integer,
15154
+ "column" => Integer,
15155
+ "code" => Integer,
15156
+ "category" => "error" | "warning" | "suggestion" | "message",
15157
+ "message" => String
15158
+ }
15159
+
15160
+ # Spec schema: `WorkflowInput`.
15161
+ type workflow_input = {
15162
+ ?"name" => String,
15163
+ ?"description" => String | nil,
15164
+ ?"source" => String,
15165
+ ?"trigger" => workflow_trigger,
15166
+ ?"metrics" => Array[workflow_metric_def],
15167
+ ?"enabled" => bool,
15168
+ ?"secretIds" => Array[String],
15169
+ ?"webhookSecret" => String | nil
15170
+ }
15171
+
15172
+ # Spec schema: `WorkflowMetric`.
15173
+ type workflow_metric = {
15174
+ "id" => String,
15175
+ "organizationId" => String,
15176
+ "workflowId" => String,
15177
+ "key" => String,
15178
+ "label" => String,
15179
+ "type" => String,
15180
+ "unit" => String | nil,
15181
+ "value" => untyped,
15182
+ "syncVersion" => Integer,
15183
+ "deletedAt" => String | nil,
15184
+ "updatedAt" => String
15185
+ }
15186
+
15187
+ # Spec schema: `WorkflowMetricDef`.
15188
+ type workflow_metric_def = {
15189
+ "key" => String,
15190
+ "label" => String,
15191
+ "type" => "number" | "string" | "boolean",
15192
+ ?"unit" => String,
15193
+ ?"description" => String
15194
+ }
15195
+
14952
15196
  # Spec schema: `WorkflowPinRequest`.
14953
15197
  type workflow_pin_request = { "dashboardId" => String, "workflowId" => String }
14954
15198
 
15199
+ # Spec schema: `WorkflowRun`.
15200
+ type workflow_run = {
15201
+ "id" => String,
15202
+ "organizationId" => String,
15203
+ "workflowId" => String,
15204
+ "status" => "pending" | "running" | "success" | "failure" | "canceled",
15205
+ "triggerSource" => String,
15206
+ "logs" => Array[workflow_run_log],
15207
+ "output" => untyped,
15208
+ "error" => workflow_run_error | nil,
15209
+ "startedAt" => String | nil,
15210
+ "finishedAt" => String | nil,
15211
+ "durationMs" => Integer | nil,
15212
+ "syncVersion" => Integer,
15213
+ "createdAt" => String
15214
+ }
15215
+
15216
+ # Spec schema: `WorkflowRunError`.
15217
+ type workflow_run_error = { "message" => String, ?"stack" => String }
15218
+
15219
+ # Spec schema: `WorkflowRunLog`.
15220
+ type workflow_run_log = { "at" => Numeric, "level" => "debug" | "info" | "warn" | "error", "message" => String }
15221
+
15222
+ # Spec schema: `WorkflowRunOutcome`.
15223
+ type workflow_run_outcome = { "runId" => String, "result" => workflow_run_result }
15224
+
15225
+ # Spec schema: `WorkflowRunResult`.
15226
+ type workflow_run_result = {
15227
+ "status" => "pending" | "running" | "success" | "failure" | "canceled",
15228
+ "logs" => Array[workflow_run_log],
15229
+ ?"output" => untyped,
15230
+ ?"error" => workflow_run_error,
15231
+ "startedAt" => Numeric,
15232
+ "finishedAt" => Numeric,
15233
+ "durationMs" => Numeric
15234
+ }
15235
+
14955
15236
  # Spec schema: `WorkflowSchedule`.
14956
15237
  type workflow_schedule = {
14957
15238
  "expression" => String,
@@ -14966,7 +15247,7 @@ module Infrawrench
14966
15247
  type workflow_schedule_input = { "expression" => String, ?"timezone" => String | nil, ?"enabled" => bool }
14967
15248
 
14968
15249
  # Spec schema: `WorkflowScheduleResponse`.
14969
- type workflow_schedule_response = { "schedule" => workflow_schedule | nil | nil }
15250
+ type workflow_schedule_response = { "schedule" => workflow_schedule | nil }
14970
15251
 
14971
15252
  # Spec schema: `WorkflowSecret`.
14972
15253
  type workflow_secret = {
@@ -14993,6 +15274,27 @@ module Infrawrench
14993
15274
  # Spec schema: `WorkflowSecretValueWrite`.
14994
15275
  type workflow_secret_value_write = { "value" => String }
14995
15276
 
15277
+ # Spec schema: `WorkflowTrigger`.
15278
+ type workflow_trigger = { "kind" => "manual" }
15279
+ | { "kind" => "cron", "expression" => String, ?"timezone" => String }
15280
+ | {
15281
+ "kind" => "git",
15282
+ ?"provider" => String,
15283
+ ?"repo" => String,
15284
+ ?"branch" => String,
15285
+ ?"events" => Array[String],
15286
+ ?"installationId" => Integer
15287
+ }
15288
+ | {
15289
+ "kind" => "budget",
15290
+ "budgetId" => String,
15291
+ ?"percent" => Numeric,
15292
+ ?"metric" => "actual" | "forecast"
15293
+ }
15294
+
15295
+ # Spec schema: `WorkflowTypecheckResult`.
15296
+ type workflow_typecheck_result = { "diagnostics" => Array[workflow_diagnostic], "hasErrors" => bool, "degraded" => bool }
15297
+
14996
15298
  # Spec schema: `WorkflowTypingsResponse`.
14997
15299
  type workflow_typings_response = { "dts" => String }
14998
15300
 
@@ -15049,7 +15351,7 @@ module Infrawrench
15049
15351
  attr_reader preflight: AccountsPreflightNamespace
15050
15352
  attr_reader sync_type: AccountsSyncTypeNamespace
15051
15353
  def initialize: (Transport) -> void
15052
- def create: (body: (create_account_request & { ?"pluginId" => plugin_id }), ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_account_response
15354
+ def create: (body: create_account_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_account_response
15053
15355
  def credential_options: (body: credential_options_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> credential_options_response
15054
15356
  def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
15055
15357
  def detail: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> account_detail
@@ -15129,8 +15431,8 @@ module Infrawrench
15129
15431
 
15130
15432
  class AgentsSettingsNamespace
15131
15433
  def initialize: (Transport) -> void
15132
- def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> agent_settings
15133
- def update: (body: (agent_settings & Hash[String, untyped]), ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (agent_settings & Hash[String, untyped])
15434
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (agent_settings | nil)
15435
+ def update: (body: agent_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> agent_settings
15134
15436
  end
15135
15437
 
15136
15438
  class AgentsT3PolicyNamespace
@@ -15317,7 +15619,7 @@ module Infrawrench
15317
15619
 
15318
15620
  class BlastRadiusNamespace
15319
15621
  def initialize: (Transport) -> void
15320
- def get: (resource_id: (resource_id & untyped), ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> blast_radius_report
15622
+ def get: (resource_id: resource_id, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> blast_radius_report
15321
15623
  end
15322
15624
 
15323
15625
  class BudgetsEventsNamespace
@@ -15352,10 +15654,10 @@ module Infrawrench
15352
15654
  class BusinessMetricsImporterNamespace
15353
15655
  def initialize: (Transport) -> void
15354
15656
  def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
15355
- def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "importer" => business_metric_importer }
15657
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "importer" => business_metric_importer | nil }
15356
15658
  def run: (id: String, ?org_id: String?, ?body: { ?"from" => String, ?"to" => String }?, ?request_options: Hash[Symbol, untyped]?) -> business_metric_import_run
15357
15659
  def runs: (id: String, ?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> { "runs" => Array[business_metric_import_run] }
15358
- def update: (id: String, body: business_metric_importer_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (business_metric_importer & Hash[String, untyped])
15660
+ def update: (id: String, body: business_metric_importer_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> business_metric_importer
15359
15661
  end
15360
15662
 
15361
15663
  class BusinessMetricsUnitCostsNamespace
@@ -15446,6 +15748,7 @@ module Infrawrench
15446
15748
  class ChatConversationsPendingNamespace
15447
15749
  def initialize: (Transport) -> void
15448
15750
  def answer: (conversation_id: String, pending_id: String, body: chat_ask_question_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> chat_ask_question_result
15751
+ def create: (conversation_id: String, pending_id: String, body: chat_pending_decision_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> chat_pending_decision_result
15449
15752
  end
15450
15753
 
15451
15754
  class ChatConversationsSecretRequestsNamespace
@@ -15457,11 +15760,17 @@ module Infrawrench
15457
15760
  attr_reader pending: ChatConversationsPendingNamespace
15458
15761
  attr_reader secret_requests: ChatConversationsSecretRequestsNamespace
15459
15762
  def initialize: (Transport) -> void
15763
+ def create: (body: chat_conversation_create_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> chat_conversation_created
15764
+ def delete: (conversation_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
15765
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> chat_conversation_list
15766
+ def get_org_org_id_chat_conversations_conversation_id: (conversation_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> chat_conversation_detail
15767
+ def update: (conversation_id: String, body: chat_conversation_model_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
15460
15768
  end
15461
15769
 
15462
15770
  class ChatNamespace
15463
15771
  attr_reader conversations: ChatConversationsNamespace
15464
15772
  def initialize: (Transport) -> void
15773
+ def spend: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> chat_spend_status
15465
15774
  end
15466
15775
 
15467
15776
  class CommitmentsNamespace
@@ -15493,8 +15802,8 @@ module Infrawrench
15493
15802
  attr_reader schedules: ComplianceSchedulesNamespace
15494
15803
  def initialize: (Transport) -> void
15495
15804
  def frameworks: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "frameworks" => Array[compliance_framework_summary] }
15496
- def get: (framework: String, ?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> compliance_status
15497
- def pack: (framework: String, ?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> String
15805
+ def get: (framework: String, ?org_id: String?, ?from: untyped?, ?to: untyped?, ?request_options: Hash[Symbol, untyped]?) -> compliance_status
15806
+ def pack: (framework: String, ?org_id: String?, ?from: untyped?, ?to: untyped?, ?request_options: Hash[Symbol, untyped]?) -> String
15498
15807
  end
15499
15808
 
15500
15809
  class ConfigNamespace
@@ -15694,11 +16003,11 @@ module Infrawrench
15694
16003
 
15695
16004
  class CostsAnomalySuppressionsNamespace
15696
16005
  def initialize: (Transport) -> void
15697
- def create: (body: cost_anomaly_suppression_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (cost_anomaly_suppression & Hash[String, untyped])
16006
+ def create: (body: cost_anomaly_suppression_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_anomaly_suppression
15698
16007
  def delete: (suppression_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
15699
- def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "suppressions" => Array[cost_anomaly_suppression & Hash[String, untyped]] }
15700
- def get_org_org_id_costs_anomaly_suppressions_suppression_id: (suppression_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (cost_anomaly_suppression & Hash[String, untyped])
15701
- def update: (suppression_id: String, body: cost_anomaly_suppression_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (cost_anomaly_suppression & Hash[String, untyped])
16008
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "suppressions" => Array[cost_anomaly_suppression] }
16009
+ def get_org_org_id_costs_anomaly_suppressions_suppression_id: (suppression_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_anomaly_suppression
16010
+ def update: (suppression_id: String, body: cost_anomaly_suppression_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_anomaly_suppression
15702
16011
  end
15703
16012
 
15704
16013
  class CostsEfficiencyAlertSettingsNamespace
@@ -15830,7 +16139,7 @@ module Infrawrench
15830
16139
  def initialize: (Transport) -> void
15831
16140
  def create: (body: pin_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
15832
16141
  def get: (pin_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> pin_full
15833
- def range: (pin_id: String, ?org_id: String?, ?from_ms: (Integer | nil)?, ?to_ms: (Integer | nil)?, ?request_options: Hash[Symbol, untyped]?) -> pin_range_response
16142
+ def range: (pin_id: String, ?org_id: String?, ?from_ms: Integer?, ?to_ms: Integer?, ?request_options: Hash[Symbol, untyped]?) -> pin_range_response
15834
16143
  end
15835
16144
 
15836
16145
  class DashboardsRoleDefaultsNamespace
@@ -15872,7 +16181,7 @@ module Infrawrench
15872
16181
 
15873
16182
  class DependencyGraphNamespace
15874
16183
  def initialize: (Transport) -> void
15875
- def get: (?org_id: String?, ?resource_id: (resource_id & untyped)?, ?request_options: Hash[Symbol, untyped]?) -> dependency_graph_response
16184
+ def get: (?org_id: String?, ?resource_id: resource_id?, ?request_options: Hash[Symbol, untyped]?) -> dependency_graph_response
15876
16185
  end
15877
16186
 
15878
16187
  class DeploymentsRunsNamespace
@@ -15957,7 +16266,7 @@ module Infrawrench
15957
16266
  class EnvironmentsSettingsNamespace
15958
16267
  def initialize: (Transport) -> void
15959
16268
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> environment_settings
15960
- def update: (?org_id: String?, ?body: environment_settings?, ?request_options: Hash[Symbol, untyped]?) -> environment_settings
16269
+ def update: (?org_id: String?, ?body: { ?"maxTtlHours" => Integer, ?"defaultTtlHours" => Integer }?, ?request_options: Hash[Symbol, untyped]?) -> environment_settings
15961
16270
  end
15962
16271
 
15963
16272
  class EnvironmentsTemplatesNamespace
@@ -16028,6 +16337,19 @@ module Infrawrench
16028
16337
  def get: (?org_id: String?, ?refresh: "true" | "false"?, ?request_options: Hash[Symbol, untyped]?) -> extended_support_list_response
16029
16338
  end
16030
16339
 
16340
+ class GithubInstallationsNamespace
16341
+ def initialize: (Transport) -> void
16342
+ def delete: (installation_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
16343
+ end
16344
+
16345
+ class GithubNamespace
16346
+ attr_reader installations: GithubInstallationsNamespace
16347
+ def initialize: (Transport) -> void
16348
+ def install_url: (?org_id: String?, ?return_param: "agents" | "workflows" | "settings/github-issues"?, ?request_options: Hash[Symbol, untyped]?) -> github_install_url
16349
+ def repos: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> github_app_repos
16350
+ def status: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> github_app_status
16351
+ end
16352
+
16031
16353
  class GithubIssuesLinksNamespace
16032
16354
  def initialize: (Transport) -> void
16033
16355
  def list: (?org_id: String?, ?source_kind: github_issue_source_kind?, ?state: "open" | "closed"?, ?source_id: Array[String]?, ?request_options: Hash[Symbol, untyped]?) -> Array[github_issue_link]
@@ -16089,7 +16411,7 @@ module Infrawrench
16089
16411
 
16090
16412
  class IncidentsNotesNamespace
16091
16413
  def initialize: (Transport) -> void
16092
- def create: (incident_id: String, ?org_id: String?, ?body: incident_note_create?, ?request_options: Hash[Symbol, untyped]?) -> incident_note
16414
+ def create: (incident_id: String, body: incident_note_create, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_note
16093
16415
  def delete: (incident_id: String, note_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
16094
16416
  end
16095
16417
 
@@ -16097,12 +16419,12 @@ module Infrawrench
16097
16419
  attr_reader get: IncidentsGetNamespace
16098
16420
  attr_reader notes: IncidentsNotesNamespace
16099
16421
  def initialize: (Transport) -> void
16100
- def create: (?org_id: String?, ?body: incident_declare?, ?request_options: Hash[Symbol, untyped]?) -> incident
16422
+ def create: (body: incident_declare, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident
16101
16423
  def delete: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
16102
16424
  def postmortem: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_postmortem
16103
16425
  def retry_artifacts: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident
16104
16426
  def timeline: (incident_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident_timeline
16105
- def update: (incident_id: String, ?org_id: String?, ?body: incident_patch?, ?request_options: Hash[Symbol, untyped]?) -> incident
16427
+ def update: (incident_id: String, body: incident_patch, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> incident
16106
16428
  end
16107
16429
 
16108
16430
  class InstancePricingNamespace
@@ -16129,7 +16451,7 @@ module Infrawrench
16129
16451
  def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
16130
16452
  def export: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> String
16131
16453
  def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> invoice
16132
- def list: (?org_id: String?, ?managed_account_id: String?, ?status: invoice_status?, ?request_options: Hash[Symbol, untyped]?) -> Array[invoice_summary]
16454
+ def list: (?org_id: String?, ?managed_account_id: untyped?, ?status: invoice_status?, ?request_options: Hash[Symbol, untyped]?) -> Array[invoice_summary]
16133
16455
  def pdf: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> String
16134
16456
  def post_org_org_id_invoices_id_send: (id: String, ?org_id: String?, ?body: invoice_send_request?, ?request_options: Hash[Symbol, untyped]?) -> invoice
16135
16457
  def update: (id: String, body: invoice_update, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> invoice
@@ -16150,7 +16472,7 @@ module Infrawrench
16150
16472
  attr_reader jira: IssueWebhooksJiraNamespace
16151
16473
  attr_reader linear: IssueWebhooksLinearNamespace
16152
16474
  def initialize: (Transport) -> void
16153
- def github: (?request_options: Hash[Symbol, untyped]?) -> nil
16475
+ def github: (?request_options: Hash[Symbol, untyped]?) -> { "ok" => bool }
16154
16476
  end
16155
16477
 
16156
16478
  class JiraLinksNamespace
@@ -16177,9 +16499,9 @@ module Infrawrench
16177
16499
  attr_reader webhook: JiraWebhookNamespace
16178
16500
  def initialize: (Transport) -> void
16179
16501
  def delete: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
16180
- def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "integration" => jira_integration }
16502
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "integration" => jira_integration | nil }
16181
16503
  def issues: (body: create_jira_issue_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_jira_issue_result
16182
- def update: (body: jira_integration_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (jira_integration & Hash[String, untyped])
16504
+ def update: (body: jira_integration_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> jira_integration
16183
16505
  def verify: (?org_id: String?, ?body: jira_verify_input?, ?request_options: Hash[Symbol, untyped]?) -> jira_verify_result
16184
16506
  end
16185
16507
 
@@ -16197,7 +16519,7 @@ module Infrawrench
16197
16519
  def get: (policy_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> jit_policy
16198
16520
  def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[jit_policy]
16199
16521
  def principal: (policy_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> jit_principal_resolution
16200
- def principals: (policy_id: String, ?org_id: String?, ?q: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[jit_principal_option & Hash[String, untyped]]
16522
+ def principals: (policy_id: String, ?org_id: String?, ?q: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[jit_principal_option]
16201
16523
  def update: (policy_id: String, ?org_id: String?, ?body: jit_policy_input?, ?request_options: Hash[Symbol, untyped]?) -> jit_policy
16202
16524
  end
16203
16525
 
@@ -16277,10 +16599,10 @@ module Infrawrench
16277
16599
  attr_reader webhook: LinearWebhookNamespace
16278
16600
  def initialize: (Transport) -> void
16279
16601
  def delete: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
16280
- def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "integration" => linear_integration }
16602
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "integration" => linear_integration | nil }
16281
16603
  def issues: (body: create_linear_issue_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_linear_issue_result
16282
16604
  def teams: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[linear_team]
16283
- def update: (body: linear_integration_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (linear_integration & Hash[String, untyped])
16605
+ def update: (body: linear_integration_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> linear_integration
16284
16606
  def verify: (?org_id: String?, ?body: linear_verify_input?, ?request_options: Hash[Symbol, untyped]?) -> linear_verify_result
16285
16607
  end
16286
16608
 
@@ -16367,7 +16689,7 @@ module Infrawrench
16367
16689
  class NetworkFlowsSettingsNamespace
16368
16690
  def initialize: (Transport) -> void
16369
16691
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> network_flow_settings
16370
- def update: (body: network_flow_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> network_flow_settings
16692
+ def update: (body: network_flow_settings_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> network_flow_settings
16371
16693
  end
16372
16694
 
16373
16695
  class NetworkFlowsNamespace
@@ -16382,18 +16704,18 @@ module Infrawrench
16382
16704
 
16383
16705
  class OnCallOverridesNamespace
16384
16706
  def initialize: (Transport) -> void
16385
- def create: (?org_id: String?, ?body: on_call_override_create?, ?request_options: Hash[Symbol, untyped]?) -> on_call_override
16707
+ def create: (body: on_call_override_create, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> on_call_override
16386
16708
  def delete: (override_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
16387
16709
  def get: (?org_id: String?, ?schedule_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "overrides" => Array[on_call_override] }
16388
16710
  end
16389
16711
 
16390
16712
  class OnCallSchedulesNamespace
16391
16713
  def initialize: (Transport) -> void
16392
- def create: (?org_id: String?, ?body: on_call_schedule_create?, ?request_options: Hash[Symbol, untyped]?) -> on_call_schedule
16714
+ def create: (body: on_call_schedule_create, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> on_call_schedule
16393
16715
  def delete: (schedule_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
16394
16716
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> on_call_schedule_list
16395
16717
  def shifts: (schedule_id: String, ?org_id: String?, ?count: Integer?, ?request_options: Hash[Symbol, untyped]?) -> on_call_shifts_response
16396
- def update: (schedule_id: String, ?org_id: String?, ?body: on_call_schedule_update?, ?request_options: Hash[Symbol, untyped]?) -> on_call_schedule
16718
+ def update: (schedule_id: String, body: on_call_schedule_update, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> on_call_schedule
16397
16719
  end
16398
16720
 
16399
16721
  class OnCallNamespace
@@ -16419,7 +16741,7 @@ module Infrawrench
16419
16741
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> resource_ownership_list_response
16420
16742
  def members: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> owner_candidate_list_response
16421
16743
  def resource: (resource_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> resource_ownership_envelope
16422
- def update: (?org_id: String?, ?body: resource_ownership_patch?, ?request_options: Hash[Symbol, untyped]?) -> (resource_ownership & (Hash[String, untyped] | nil))
16744
+ def update: (?org_id: String?, ?body: resource_ownership_patch?, ?request_options: Hash[Symbol, untyped]?) -> (resource_ownership | nil)
16423
16745
  end
16424
16746
 
16425
16747
  class PagesNamespace
@@ -16446,7 +16768,7 @@ module Infrawrench
16446
16768
  def destinations: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> paging_destinations_response
16447
16769
  def events: (?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> paging_events_response
16448
16770
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> paging_providers_response
16449
- def settings: (account_id: String, ?org_id: String?, ?body: paging_provider_settings_input?, ?request_options: Hash[Symbol, untyped]?) -> paging_provider_settings_result
16771
+ def settings: (account_id: String, body: paging_provider_settings_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> paging_provider_settings_result
16450
16772
  def sync: (account_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> paging_sync_result
16451
16773
  end
16452
16774
 
@@ -16557,11 +16879,11 @@ module Infrawrench
16557
16879
  class QueryMonitorsNamespace
16558
16880
  attr_reader get: QueryMonitorsGetNamespace
16559
16881
  def initialize: (Transport) -> void
16560
- def create: (?org_id: String?, ?body: query_monitor_create?, ?request_options: Hash[Symbol, untyped]?) -> query_monitor
16882
+ def create: (body: query_monitor_create, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> query_monitor
16561
16883
  def delete: (monitor_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
16562
16884
  def targets: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> query_monitor_targets
16563
- def test: (?org_id: String?, ?body: query_monitor_create?, ?request_options: Hash[Symbol, untyped]?) -> query_monitor_test_result
16564
- def update: (monitor_id: String, ?org_id: String?, ?body: query_monitor_update?, ?request_options: Hash[Symbol, untyped]?) -> query_monitor
16885
+ def test: (body: { ?"name" => String, ?"description" => String | nil, ?"accountId" => String, ?"resourceId" => String | nil, ?"resourceTypeId" => String | nil, ?"sql" => String, ?"mode" => "scalar" | "rowCount", ?"operator" => "gt" | "gte" | "lt" | "lte" | "eq" | "neq", ?"threshold" => Numeric, ?"intervalMinutes" => Integer, ?"consecutiveBreaches" => Integer, ?"enabled" => bool }, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> query_monitor_test_result
16886
+ def update: (monitor_id: String, body: query_monitor_update, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> query_monitor
16565
16887
  end
16566
16888
 
16567
16889
  class QuotasSettingsNamespace
@@ -16592,7 +16914,7 @@ module Infrawrench
16592
16914
  def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[resource_report]
16593
16915
  def options: (?org_id: String?, ?types: String?, ?request_options: Hash[Symbol, untyped]?) -> resource_report_options
16594
16916
  def query: (?org_id: String?, ?body: resource_report_query_request?, ?request_options: Hash[Symbol, untyped]?) -> resource_report_rows
16595
- def rows: (id: String, ?org_id: String?, ?offset: (Integer | nil)?, ?limit: Integer?, ?sort: String?, ?direction: "asc" | "desc"?, ?request_options: Hash[Symbol, untyped]?) -> resource_report_rows
16917
+ def rows: (id: String, ?org_id: String?, ?offset: Integer?, ?limit: Integer?, ?sort: String?, ?direction: "asc" | "desc"?, ?request_options: Hash[Symbol, untyped]?) -> resource_report_rows
16596
16918
  def tag_values: (key: String, ?org_id: String?, ?source: "tag" | "virtual_tag"?, ?request_options: Hash[Symbol, untyped]?) -> { "values" => Array[String] }
16597
16919
  def update: (id: String, ?org_id: String?, ?body: resource_report_input?, ?request_options: Hash[Symbol, untyped]?) -> resource_report
16598
16920
  end
@@ -16623,7 +16945,7 @@ module Infrawrench
16623
16945
  attr_reader ssh_install: ResourcesSshInstallNamespace
16624
16946
  def initialize: (Transport) -> void
16625
16947
  def attach: (body: attach_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
16626
- def cost_estimate: (body: cost_estimate_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "estimate" => cost_estimate, "carbon" => resource_carbon_estimate }
16948
+ def cost_estimate: (body: cost_estimate_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "estimate" => cost_estimate | nil, "carbon" => resource_carbon_estimate | nil }
16627
16949
  def create: (body: create_resource_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_resource_response
16628
16950
  def create_config: (body: create_config_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> json_object
16629
16951
  def create_pricing: (body: create_pricing_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Hash[String, json_object]
@@ -16640,6 +16962,7 @@ module Infrawrench
16640
16962
  def nosql_command: (body: no_sql_command_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "result" => json_object }
16641
16963
  def peer_panes: (plugin_id: plugin_id, type_id: resource_type_id, body: peer_panes_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[peer_pane]
16642
16964
  def picker_resources: (body: picker_resources_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[picker_resource]
16965
+ def tunnel_ssh_attach: (body: tunnel_ssh_attach_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> tunnel_ssh_attach_result
16643
16966
  def update: (body: update_resource_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> update_resource_response
16644
16967
  end
16645
16968
 
@@ -16656,13 +16979,13 @@ module Infrawrench
16656
16979
 
16657
16980
  class RunbooksRunsStepsNamespace
16658
16981
  def initialize: (Transport) -> void
16659
- def update: (run_id: String, step_id: String, ?org_id: String?, ?body: runbook_step_update?, ?request_options: Hash[Symbol, untyped]?) -> runbook_run
16982
+ def update: (run_id: String, step_id: String, body: runbook_step_update, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> runbook_run
16660
16983
  end
16661
16984
 
16662
16985
  class RunbooksRunsNamespace
16663
16986
  attr_reader steps: RunbooksRunsStepsNamespace
16664
16987
  def initialize: (Transport) -> void
16665
- def close: (run_id: String, ?org_id: String?, ?body: runbook_run_close?, ?request_options: Hash[Symbol, untyped]?) -> runbook_run
16988
+ def close: (run_id: String, body: runbook_run_close, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> runbook_run
16666
16989
  def create: (runbook_id: String, ?org_id: String?, ?body: runbook_run_start?, ?request_options: Hash[Symbol, untyped]?) -> runbook_run
16667
16990
  def get: (?org_id: String?, ?runbook_id: String?, ?incident_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> runbook_run_list
16668
16991
  def get_org_org_id_runbooks_runs_run_id: (run_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> runbook_run
@@ -16672,9 +16995,9 @@ module Infrawrench
16672
16995
  attr_reader get: RunbooksGetNamespace
16673
16996
  attr_reader runs: RunbooksRunsNamespace
16674
16997
  def initialize: (Transport) -> void
16675
- def create: (?org_id: String?, ?body: runbook_create?, ?request_options: Hash[Symbol, untyped]?) -> runbook
16998
+ def create: (body: runbook_create, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> runbook
16676
16999
  def delete: (runbook_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
16677
- def update: (runbook_id: String, ?org_id: String?, ?body: runbook_update?, ?request_options: Hash[Symbol, untyped]?) -> runbook
17000
+ def update: (runbook_id: String, body: runbook_update, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> runbook
16678
17001
  end
16679
17002
 
16680
17003
  class SavedCostFiltersNamespace
@@ -16702,7 +17025,7 @@ module Infrawrench
16702
17025
 
16703
17026
  class SavingsFindingsNamespace
16704
17027
  def initialize: (Transport) -> void
16705
- def get: (?org_id: String?, ?view: String?, ?status: savings_finding_status_filter?, ?kind: String?, ?provider: String?, ?account: String?, ?region: String?, ?tag: String?, ?min_savings: String?, ?detected_from: String?, ?detected_to: String?, ?q: String?, ?sort: String?, ?refresh: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_findings_response
17028
+ def get: (?org_id: String?, ?view: String?, ?status: savings_finding_status_filter?, ?kind: String?, ?provider: String?, ?account: String?, ?region: String?, ?tag: Array[String]?, ?min_savings: String?, ?detected_from: String?, ?detected_to: String?, ?q: String?, ?sort: String?, ?refresh: String?, ?request_options: Hash[Symbol, untyped]?) -> savings_findings_response
16706
17029
  def status: (body: savings_finding_status_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "updated" => Array[savings_finding_status_change], "missing" => Array[String] }
16707
17030
  end
16708
17031
 
@@ -16894,7 +17217,7 @@ module Infrawrench
16894
17217
  def initialize: (Transport) -> void
16895
17218
  def create: (?org_id: String?, ?body: slo_create?, ?request_options: Hash[Symbol, untyped]?) -> slo
16896
17219
  def delete: (slo_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> nil
16897
- def post_org_org_id_slos_slo_id_freeze: (slo_id: String, ?org_id: String?, ?body: slo_freeze_request?, ?request_options: Hash[Symbol, untyped]?) -> (slo_active_freeze & Hash[String, untyped])
17220
+ def post_org_org_id_slos_slo_id_freeze: (slo_id: String, ?org_id: String?, ?body: slo_freeze_request?, ?request_options: Hash[Symbol, untyped]?) -> slo_active_freeze
16898
17221
  def sources: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> slo_sources
16899
17222
  def update: (slo_id: String, ?org_id: String?, ?body: slo_update?, ?request_options: Hash[Symbol, untyped]?) -> slo
16900
17223
  end
@@ -17030,7 +17353,7 @@ module Infrawrench
17030
17353
  def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
17031
17354
  def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> virtual_tag
17032
17355
  def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[virtual_tag]
17033
- def preview: (body: virtual_tag_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (virtual_tag_stats & Hash[String, untyped])
17356
+ def preview: (body: virtual_tag_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> virtual_tag_stats
17034
17357
  def reprocess: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> virtual_tag
17035
17358
  def update: (id: String, body: virtual_tag_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> virtual_tag
17036
17359
  end
@@ -17097,7 +17420,16 @@ module Infrawrench
17097
17420
  attr_reader schedule: WorkflowsScheduleNamespace
17098
17421
  attr_reader secrets: WorkflowsSecretsNamespace
17099
17422
  def initialize: (Transport) -> void
17423
+ def check: (id: String, body: workflow_check_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> workflow_typecheck_result
17424
+ def create: (body: workflow_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> workflow
17425
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
17426
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> workflow
17427
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[workflow]
17428
+ def metrics: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[workflow_metric]
17429
+ def run: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> workflow_run_outcome
17430
+ def runs: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[workflow_run]
17100
17431
  def typings: (id: String, ?org_id: String?, ?enrich: "1" | "true"?, ?request_options: Hash[Symbol, untyped]?) -> workflow_typings_response
17432
+ def update: (id: String, body: workflow_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> workflow
17101
17433
  end
17102
17434
 
17103
17435
  class APIV1Client
@@ -17167,6 +17499,7 @@ module Infrawrench
17167
17499
  attr_reader event_subscriptions: EventSubscriptionsNamespace
17168
17500
  attr_reader expiring: ExpiringNamespace
17169
17501
  attr_reader extended_support: ExtendedSupportNamespace
17502
+ attr_reader github: GithubNamespace
17170
17503
  attr_reader github_issues: GithubIssuesNamespace
17171
17504
  attr_reader iac: IacNamespace
17172
17505
  attr_reader idle_findings: IdleFindingsNamespace