infrawrench-sdk 1.4.0 → 1.7.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.4.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.7.0 | MIT | Copyright (c) 2026 Infrawrench LLC
2
2
  # https://github.com/Infrawrench/Infrawrench
3
3
  #
4
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.4.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.7.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -315,6 +315,7 @@ module Infrawrench
315
315
  type alert_trigger = "syncIncidents"
316
316
  | "budgetAlerts"
317
317
  | "anomalyAlerts"
318
+ | "costChangeAlerts"
318
319
  | "metricAlerts"
319
320
  | "resourceDrift"
320
321
  | "workflowPages"
@@ -462,9 +463,21 @@ module Infrawrench
462
463
  "triggeredAt" => String
463
464
  }
464
465
 
466
+ # The basis `actualCents` and `forecastCents` were measured on.
467
+ #
468
+ # Spec schema: `BudgetCostBasis`.
469
+ type budget_cost_basis = "cash" | "amortized"
470
+
465
471
  # Spec schema: `BudgetCostFilter`.
466
472
  type budget_cost_filter = {
467
- "dimension" => "provider" | "account" | "service" | "region" | "resource" | "tag",
473
+ "dimension" => "provider"
474
+ | "account"
475
+ | "service"
476
+ | "region"
477
+ | "resource"
478
+ | "tag"
479
+ | "charge_type"
480
+ | "commitment",
468
481
  "op" => "in" | "not_in",
469
482
  "values" => Array[String],
470
483
  ?"tagKey" => String
@@ -478,7 +491,9 @@ module Infrawrench
478
491
  "amountCents" => Integer,
479
492
  "currency" => String,
480
493
  "filters" => Array[budget_cost_filter],
494
+ "savedFilterId" => String | nil,
481
495
  "thresholds" => Array[budget_threshold],
496
+ "costBasis" => budget_cost_basis & untyped,
482
497
  "createdByUserId" => String | nil,
483
498
  "deletedAt" => String | nil,
484
499
  "createdAt" => String,
@@ -491,7 +506,9 @@ module Infrawrench
491
506
  "amountCents" => Integer,
492
507
  ?"currency" => String,
493
508
  ?"filters" => Array[budget_cost_filter],
494
- "thresholds" => Array[budget_threshold]
509
+ ?"savedFilterId" => String,
510
+ "thresholds" => Array[budget_threshold],
511
+ ?"costBasis" => budget_cost_basis & untyped
495
512
  }
496
513
 
497
514
  # Spec schema: `BudgetThreshold`.
@@ -505,6 +522,8 @@ module Infrawrench
505
522
  "currency" => String,
506
523
  "filters" => Array[budget_cost_filter],
507
524
  "thresholds" => Array[budget_threshold],
525
+ "costBasis" => budget_cost_basis,
526
+ "savedFilterId" => String | nil,
508
527
  "month" => String,
509
528
  "actualCents" => Integer,
510
529
  "forecastCents" => Integer | nil,
@@ -593,6 +612,123 @@ module Infrawrench
593
612
  ?"fields" => Array[json_object]
594
613
  }
595
614
 
615
+ # Spec schema: `CommitmentCoverage`.
616
+ type commitment_coverage = {
617
+ "available" => bool,
618
+ "currencies" => Array[commitment_coverage_currency],
619
+ "excludedAccountIds" => Array[String]
620
+ }
621
+
622
+ # Spec schema: `CommitmentCoverageCurrency`.
623
+ type commitment_coverage_currency = {
624
+ "currency" => String,
625
+ "coveredAmount" => Numeric,
626
+ "uncoveredAmount" => Numeric,
627
+ "uncoveredEligibleAmount" => Numeric,
628
+ "broadRatio" => Numeric | nil,
629
+ "narrowRatio" => Numeric | nil
630
+ }
631
+
632
+ # Spec schema: `CommitmentHolding`.
633
+ type commitment_holding = {
634
+ "accountId" => String,
635
+ "accountName" => String,
636
+ "pluginId" => plugin_id,
637
+ "commitmentId" => String,
638
+ "kind" => "reservation" | "savings_plan" | "committed_use",
639
+ "description" => String,
640
+ "scope" => String | nil,
641
+ "region" => String | nil,
642
+ "startDate" => String | nil,
643
+ "endDate" => String | nil,
644
+ "termDays" => Integer | nil,
645
+ "paymentOption" => "all_upfront" | "partial_upfront" | "no_upfront" | "monthly" | nil,
646
+ "currency" => String | nil,
647
+ "upfrontAmount" => Numeric | nil,
648
+ "recurringAmount" => Numeric | nil,
649
+ "recurringPeriod" => "hour" | "month" | nil,
650
+ "hourlyCommitmentAmount" => Numeric | nil,
651
+ "unitCommitments" => Array[commitment_unit_amount] | nil,
652
+ "state" => "active" | "expired" | "queued",
653
+ "providerUtilization" => Array[commitment_provider_utilization] | nil,
654
+ "lastSeenAt" => String,
655
+ "utilization" => commitment_utilization
656
+ }
657
+
658
+ # Spec schema: `CommitmentPlanner`.
659
+ type commitment_planner = {
660
+ "available" => bool,
661
+ "windowDayCount" => Integer,
662
+ "recommendations" => Array[commitment_recommendation],
663
+ "rejected" => Array[commitment_rejected_cell]
664
+ }
665
+
666
+ # Spec schema: `CommitmentPollFailure`.
667
+ type commitment_poll_failure = {
668
+ "accountId" => String,
669
+ "accountName" => String,
670
+ "pluginId" => plugin_id,
671
+ "message" => String,
672
+ "failureCount" => Integer
673
+ }
674
+
675
+ # Spec schema: `CommitmentProviderUtilization`.
676
+ type commitment_provider_utilization = { "grainDays" => Integer, "percentage" => Numeric }
677
+
678
+ # Spec schema: `CommitmentRecommendation`.
679
+ type commitment_recommendation = {
680
+ "pluginId" => plugin_id,
681
+ "service" => String,
682
+ "region" => String,
683
+ "currency" => String,
684
+ "recommendedDailyCommitment" => Numeric,
685
+ "recommendedHourlyCommitment" => Numeric,
686
+ "annualCommitment" => Numeric,
687
+ "p50DailySpend" => Numeric,
688
+ "savingBasis" => "range" | "upper_bound",
689
+ ?"discountRateMin" => Numeric,
690
+ "discountRateMax" => Numeric,
691
+ ?"estimatedAnnualSavingMin" => Numeric,
692
+ "estimatedAnnualSavingMax" => Numeric,
693
+ "breakEvenUtilization" => Numeric,
694
+ "annualLossIfUsageHalves" => Numeric
695
+ }
696
+
697
+ # Spec schema: `CommitmentRejectedCell`.
698
+ type commitment_rejected_cell = {
699
+ "pluginId" => plugin_id,
700
+ "service" => String,
701
+ "region" => String,
702
+ "currency" => String,
703
+ "gate" => "presence" | "not_in_decline" | "floor" | "materiality"
704
+ }
705
+
706
+ # Spec schema: `CommitmentUnitAmount`.
707
+ type commitment_unit_amount = { "unit" => String, "amount" => Numeric }
708
+
709
+ # Spec schema: `CommitmentUtilization`.
710
+ type commitment_utilization = {
711
+ "utilization" => Numeric | nil,
712
+ ?"reason" => "unit_denominated" | "no_active_days" | "no_data_days" | "unattributed_rows",
713
+ "obligationAmount" => Numeric | nil,
714
+ "deliveredAmount" => Numeric,
715
+ "activeDays" => Integer,
716
+ "measuredDays" => Integer,
717
+ "missingDays" => Integer,
718
+ "windowDays" => Integer
719
+ }
720
+
721
+ # Spec schema: `CommitmentsFeed`.
722
+ type commitments_feed = {
723
+ "holdings" => Array[commitment_holding],
724
+ "coverage" => commitment_coverage,
725
+ "planner" => commitment_planner,
726
+ "failures" => Array[commitment_poll_failure],
727
+ "pendingAccountIds" => Array[String],
728
+ "utilizationWindowDays" => Integer,
729
+ "plannerWindowDays" => Integer
730
+ }
731
+
596
732
  # Spec schema: `ConnectEnvDeployRequest`.
597
733
  type connect_env_deploy_request = {
598
734
  "sourceAccountId" => String,
@@ -649,6 +785,9 @@ module Infrawrench
649
785
  "supportsCosts" => bool,
650
786
  "periodNative" => bool,
651
787
  "dimensions" => Array["service" | "region" | "resource" | "tag"],
788
+ "chargeTypes" => bool,
789
+ "amortization" => bool,
790
+ "estimated" => bool,
652
791
  "costLastPolledAt" => String | nil,
653
792
  "costBackfilledAt" => String | nil,
654
793
  "costPollFailureCount" => Integer,
@@ -656,6 +795,93 @@ module Infrawrench
656
795
  "coverage" => { "firstDay" => String, "lastDay" => String } | nil
657
796
  }
658
797
 
798
+ # A change-based cost alert: fires when spend on its scope moves more than the
799
+ # configured threshold versus the prior period. The third alert family
800
+ # alongside budgets (absolute monthly total) and anomaly detection
801
+ # (statistical outliers against a learned baseline).
802
+ #
803
+ # Spec schema: `CostAlert`.
804
+ type cost_alert = {
805
+ "id" => String,
806
+ "name" => String,
807
+ "filters" => Array[cost_alert_filter],
808
+ "groupBy" => "provider"
809
+ | "account"
810
+ | "service"
811
+ | "region"
812
+ | "resource"
813
+ | "tag"
814
+ | "charge_type"
815
+ | "commitment"
816
+ | nil,
817
+ "groupByTagKey" => String | nil,
818
+ "cadence" => cost_change_cadence,
819
+ "thresholdPercent" => Integer | nil,
820
+ "thresholdAmountCents" => Integer | nil,
821
+ "direction" => cost_change_direction,
822
+ "enabled" => bool,
823
+ "lastEvaluatedAt" => String | nil,
824
+ "lastFiredAt" => String | nil,
825
+ "createdAt" => String,
826
+ "updatedAt" => String
827
+ }
828
+
829
+ # Spec schema: `CostAlertEvent`.
830
+ type cost_alert_event = {
831
+ "id" => String,
832
+ "alertId" => String,
833
+ "alertName" => String,
834
+ "periodKey" => String,
835
+ "windowFrom" => String,
836
+ "windowTo" => String,
837
+ "previousFrom" => String,
838
+ "previousTo" => String,
839
+ "groupKey" => String,
840
+ "currency" => String,
841
+ "previousAmountCents" => Integer,
842
+ "currentAmountCents" => Integer,
843
+ "changePercent" => Integer | nil,
844
+ "direction" => "increase" | "decrease",
845
+ "firedAt" => String,
846
+ "notifiedAt" => String | nil
847
+ }
848
+
849
+ # Spec schema: `CostAlertFilter`.
850
+ type cost_alert_filter = {
851
+ "dimension" => "provider"
852
+ | "account"
853
+ | "service"
854
+ | "region"
855
+ | "resource"
856
+ | "tag"
857
+ | "charge_type"
858
+ | "commitment",
859
+ "op" => "in" | "not_in",
860
+ "values" => Array[String],
861
+ ?"tagKey" => String
862
+ }
863
+
864
+ # Spec schema: `CostAlertInput`.
865
+ type cost_alert_input = {
866
+ "name" => String,
867
+ ?"filters" => Array[cost_alert_filter],
868
+ ?"groupBy" => "provider"
869
+ | "account"
870
+ | "service"
871
+ | "region"
872
+ | "resource"
873
+ | "tag"
874
+ | "charge_type"
875
+ | "commitment"
876
+ | nil,
877
+ ?"groupByTagKey" => String,
878
+ "cadence" => cost_change_cadence,
879
+ ?"thresholdPercent" => Integer | nil,
880
+ ?"thresholdAmountCents" => Integer | nil,
881
+ "direction" => cost_change_direction,
882
+ ?"enabled" => bool
883
+ }
884
+
659
885
  # Spec schema: `CostAnomaly`.
660
886
  type cost_anomaly = {
661
887
  "id" => String,
@@ -683,6 +909,16 @@ module Infrawrench
683
909
  # Spec schema: `CostAnomalySettingsView`.
684
910
  type cost_anomaly_settings_view = cost_anomaly_settings & { "smsConfigured" => bool }
685
911
 
912
+ # Which number to sum. `cash` is what the provider charged on the day it
913
+ # charged it — the default, and what every query returned before this existed.
914
+ # `amortized` spreads a commitment's up-front fee across the term it buys, so
915
+ # a year of capacity bought on one day is counted on the days it covers.
916
+ # Providers that report no amortized amount fall back to their cash amount, so
917
+ # an amortized query over a mixed estate never drops their spend.
918
+ #
919
+ # Spec schema: `CostBasis`.
920
+ type cost_basis = "cash" | "amortized"
921
+
686
922
  # Spec schema: `CostCentre`.
687
923
  type cost_centre = {
688
924
  "id" => String,
@@ -695,8 +931,50 @@ module Infrawrench
695
931
  # Spec schema: `CostCentreInput`.
696
932
  type cost_centre_input = { "name" => String, ?"description" => String }
697
933
 
934
+ # Which window is compared to which, in complete UTC days (the accruing
935
+ # current day never counts). daily: one complete day vs the same weekday one
936
+ # week earlier. weekly: the last 7 complete days vs the 7 before them.
937
+ # monthly: month-to-date vs the same number of days at the start of the prior
938
+ # month — never MTD vs the full prior month.
939
+ #
940
+ # Spec schema: `CostChangeCadence`.
941
+ type cost_change_cadence = "daily" | "weekly" | "monthly"
942
+
943
+ # Spec schema: `CostChangeDirection`.
944
+ type cost_change_direction = "increase" | "decrease" | "both"
945
+
946
+ # Spec schema: `CostChargeType`.
947
+ type cost_charge_type = "usage"
948
+ | "commitment_covered_usage"
949
+ | "commitment_fee"
950
+ | "commitment_discount"
951
+ | "credit"
952
+ | "tax"
953
+ | "refund"
954
+ | "adjustment"
955
+ | "support"
956
+ | "other"
957
+
958
+ # A relative preset resolves against today every time the report runs, so a
959
+ # saved report keeps meaning 'the last 30 days'; an absolute range pins it to
960
+ # fixed dates.
961
+ #
962
+ # Spec schema: `CostDateRange`.
963
+ type cost_date_range = {
964
+ "kind" => "relative",
965
+ "preset" => "7d" | "30d" | "90d" | "mtd" | "last_month" | "qtd" | "ytd" | "12m"
966
+ }
967
+ | { "kind" => "absolute", "from" => String, "to" => String }
968
+
698
969
  # Spec schema: `CostDimension`.
699
- type cost_dimension = "provider" | "account" | "service" | "region" | "resource" | "tag"
970
+ type cost_dimension = "provider"
971
+ | "account"
972
+ | "service"
973
+ | "region"
974
+ | "resource"
975
+ | "tag"
976
+ | "charge_type"
977
+ | "commitment"
700
978
 
701
979
  # Spec schema: `CostDimensionValues`.
702
980
  type cost_dimension_values = { "values" => Array[String | { "value" => String, "label" => String }] }
@@ -730,6 +1008,123 @@ module Infrawrench
730
1008
  ?"parentResourceId" => resource_id
731
1009
  }
732
1010
 
1011
+ # Spec schema: `CostExport`.
1012
+ type cost_export = {
1013
+ "id" => String,
1014
+ "name" => String,
1015
+ "format" => "csv" | "ndjson",
1016
+ "query" => cost_export_query,
1017
+ "cadence" => "daily" | "weekly" | "monthly",
1018
+ "hour" => Integer,
1019
+ "timezone" => String,
1020
+ "restatementDays" => Integer,
1021
+ "enabled" => bool,
1022
+ "destination" => cost_export_destination,
1023
+ "hasCredentials" => bool,
1024
+ "credentialHint" => String | nil,
1025
+ "lastRunAt" => String | nil,
1026
+ "lastStatus" => "pending" | "succeeded" | "failed",
1027
+ "lastError" => String | nil,
1028
+ "lastObjectCount" => Integer | nil,
1029
+ "lastRowCount" => Integer | nil,
1030
+ "nextRunAt" => String | nil,
1031
+ "createdByUserId" => String | nil,
1032
+ "createdAt" => String,
1033
+ "updatedAt" => String
1034
+ }
1035
+
1036
+ # Spec schema: `CostExportDestination`.
1037
+ type cost_export_destination = {
1038
+ "kind" => "s3",
1039
+ "bucket" => String,
1040
+ "prefix" => String,
1041
+ "region" => String,
1042
+ "endpoint" => String,
1043
+ "forcePathStyle" => bool
1044
+ }
1045
+ | { "kind" => "http", "method" => "POST" | "PUT", "urlHint" => String }
1046
+
1047
+ # Spec schema: `CostExportFilter`.
1048
+ type cost_export_filter = {
1049
+ "dimension" => "provider"
1050
+ | "account"
1051
+ | "service"
1052
+ | "region"
1053
+ | "resource"
1054
+ | "tag"
1055
+ | "charge_type"
1056
+ | "commitment",
1057
+ "op" => "in" | "not_in",
1058
+ "values" => Array[String],
1059
+ ?"tagKey" => String
1060
+ }
1061
+
1062
+ # Spec schema: `CostExportInput`.
1063
+ type cost_export_input = {
1064
+ "name" => String,
1065
+ "format" => "csv" | "ndjson",
1066
+ "query" => cost_export_query,
1067
+ "cadence" => "daily" | "weekly" | "monthly",
1068
+ "hour" => Integer,
1069
+ "timezone" => String,
1070
+ "restatementDays" => Integer,
1071
+ "enabled" => bool,
1072
+ "destination" => cost_export_destination,
1073
+ ?"accessKeyId" => String,
1074
+ ?"secretAccessKey" => String,
1075
+ ?"url" => String
1076
+ }
1077
+
1078
+ # Spec schema: `CostExportObject`.
1079
+ type cost_export_object = {
1080
+ "periodStart" => String,
1081
+ "from" => String,
1082
+ "to" => String,
1083
+ "key" => String,
1084
+ "rowCount" => Integer,
1085
+ "byteCount" => Integer
1086
+ }
1087
+
1088
+ # The rows a run selects. Reuses the same `CostFilter` and dimension
1089
+ # vocabulary the dashboards, budgets and cost reports store, so a filter means
1090
+ # the same thing everywhere.
1091
+ #
1092
+ # Spec schema: `CostExportQuery`.
1093
+ type cost_export_query = {
1094
+ "version" => Numeric,
1095
+ "dimensions" => Array["provider"
1096
+ | "account"
1097
+ | "service"
1098
+ | "region"
1099
+ | "resource"
1100
+ | "tag"
1101
+ | "charge_type"
1102
+ | "commitment"],
1103
+ "tagKeys" => Array[String],
1104
+ "filters" => Array[cost_export_filter],
1105
+ ?"chargeTypes" => Array["usage"
1106
+ | "commitment_covered_usage"
1107
+ | "commitment_fee"
1108
+ | "commitment_discount"
1109
+ | "credit"
1110
+ | "tax"
1111
+ | "refund"
1112
+ | "adjustment"
1113
+ | "support"
1114
+ | "other"],
1115
+ ?"costBasis" => "cash" | "amortized"
1116
+ }
1117
+
1118
+ # Spec schema: `CostExportRunResult`.
1119
+ type cost_export_run_result = {
1120
+ "exportId" => String,
1121
+ "status" => "pending" | "succeeded" | "failed",
1122
+ "objects" => Array[cost_export_object],
1123
+ "rowCount" => Integer,
1124
+ "collectionWatermark" => String | nil,
1125
+ "error" => String | nil
1126
+ }
1127
+
733
1128
  # Spec schema: `CostFilter`.
734
1129
  type cost_filter = {
735
1130
  "dimension" => cost_dimension,
@@ -738,6 +1133,33 @@ module Infrawrench
738
1133
  ?"tagKey" => String
739
1134
  }
740
1135
 
1136
+ # The saved graph. Identical to the config an ad-hoc `cost_graph` dashboard
1137
+ # widget stores inline — a report is that config given a name and an id.
1138
+ #
1139
+ # Spec schema: `CostGraphConfig`.
1140
+ type cost_graph_config = {
1141
+ "version" => Numeric,
1142
+ "chartType" => "stacked_bar" | "multi_bar" | "line" | "area" | "pie",
1143
+ "binning" => "daily" | "weekly" | "monthly" | "cumulative",
1144
+ "dateRange" => cost_date_range,
1145
+ "groupBy" => "none"
1146
+ | "provider"
1147
+ | "account"
1148
+ | "service"
1149
+ | "region"
1150
+ | "resource"
1151
+ | "tag"
1152
+ | "charge_type"
1153
+ | "commitment",
1154
+ ?"groupByTagKey" => String,
1155
+ ?"filters" => Array[cost_report_filter],
1156
+ ?"savedFilterId" => String,
1157
+ ?"topN" => Integer,
1158
+ ?"comparePreviousPeriod" => bool,
1159
+ ?"showForecast" => bool,
1160
+ ?"costBasis" => "cash" | "amortized"
1161
+ }
1162
+
741
1163
  # Spec schema: `CostPushRequest`.
742
1164
  type cost_push_request = { "source" => String, "rows" => Array[pushed_cost_row] }
743
1165
 
@@ -749,12 +1171,24 @@ module Infrawrench
749
1171
  "from" => String,
750
1172
  "to" => String,
751
1173
  "binning" => "daily" | "weekly" | "monthly" | "cumulative",
752
- "groupBy" => "none" | "provider" | "account" | "service" | "region" | "resource" | "tag",
1174
+ "groupBy" => "none"
1175
+ | "provider"
1176
+ | "account"
1177
+ | "service"
1178
+ | "region"
1179
+ | "resource"
1180
+ | "tag"
1181
+ | "charge_type"
1182
+ | "commitment",
753
1183
  ?"groupByTagKey" => String,
754
1184
  ?"filters" => Array[cost_filter],
1185
+ ?"query" => String,
1186
+ ?"savedFilterId" => String,
755
1187
  ?"topN" => Integer,
756
1188
  ?"comparePreviousPeriod" => bool,
757
- ?"forecast" => bool
1189
+ ?"forecast" => bool,
1190
+ ?"costBasis" => cost_basis,
1191
+ ?"chargeTypes" => Array[cost_charge_type]
758
1192
  }
759
1193
 
760
1194
  # Spec schema: `CostQueryResponse`.
@@ -775,6 +1209,66 @@ module Infrawrench
775
1209
  "points" => Array[cost_series_point]
776
1210
  }
777
1211
 
1212
+ # Spec schema: `CostReport`.
1213
+ type cost_report = {
1214
+ "id" => String,
1215
+ "name" => String,
1216
+ "description" => String | nil,
1217
+ "config" => cost_graph_config,
1218
+ "folderId" => String | nil,
1219
+ "createdByUserId" => String | nil,
1220
+ "createdAt" => String,
1221
+ "updatedAt" => String,
1222
+ "placements" => Array[cost_report_placement]
1223
+ }
1224
+
1225
+ # Spec schema: `CostReportFilter`.
1226
+ type cost_report_filter = {
1227
+ "dimension" => "provider"
1228
+ | "account"
1229
+ | "service"
1230
+ | "region"
1231
+ | "resource"
1232
+ | "tag"
1233
+ | "charge_type"
1234
+ | "commitment",
1235
+ "op" => "in" | "not_in",
1236
+ "values" => Array[String],
1237
+ ?"tagKey" => String
1238
+ }
1239
+
1240
+ # Spec schema: `CostReportFolder`.
1241
+ type cost_report_folder = {
1242
+ "id" => String,
1243
+ "name" => String,
1244
+ "parentFolderId" => String | nil,
1245
+ "createdAt" => String,
1246
+ "updatedAt" => String
1247
+ }
1248
+
1249
+ # Spec schema: `CostReportFolderInput`.
1250
+ type cost_report_folder_input = { "name" => String, ?"parentFolderId" => String | nil }
1251
+
1252
+ # Spec schema: `CostReportInput`.
1253
+ type cost_report_input = {
1254
+ "name" => String,
1255
+ ?"description" => String,
1256
+ "config" => cost_graph_config,
1257
+ ?"folderId" => String | nil
1258
+ }
1259
+
1260
+ # Spec schema: `CostReportPlacement`.
1261
+ type cost_report_placement = { "widgetId" => String, "dashboardId" => String, "dashboardName" => String }
1262
+
1263
+ # Spec schema: `CostReportRunResult`.
1264
+ type cost_report_run_result = {
1265
+ "reportId" => String,
1266
+ "name" => String,
1267
+ "from" => String,
1268
+ "to" => String,
1269
+ "result" => cost_query_response
1270
+ }
1271
+
778
1272
  # Spec schema: `CostSeriesPoint`.
779
1273
  type cost_series_point = { "bucket" => String, "amount" => Numeric }
780
1274
 
@@ -814,6 +1308,37 @@ module Infrawrench
814
1308
  ?"parentResourceId" => resource_id
815
1309
  }
816
1310
 
1311
+ # Spec schema: `CreateJiraIssueInput`.
1312
+ type create_jira_issue_input = {
1313
+ "sourceKind" => jira_source_kind,
1314
+ "sourceId" => String,
1315
+ "projectKey" => String,
1316
+ "issueTypeId" => String,
1317
+ "summary" => String,
1318
+ ?"description" => String,
1319
+ ?"labels" => Array[String]
1320
+ }
1321
+
1322
+ # Spec schema: `CreateJiraIssueResult`.
1323
+ type create_jira_issue_result = { "issue" => { "id" => String, "key" => String, "url" => String }, "link" => jira_issue_link }
1324
+
1325
+ # Spec schema: `CreateLinearIssueInput`.
1326
+ type create_linear_issue_input = {
1327
+ "sourceKind" => linear_source_kind,
1328
+ "sourceId" => String,
1329
+ "teamId" => String,
1330
+ "title" => String,
1331
+ ?"description" => String,
1332
+ ?"labelIds" => Array[String],
1333
+ ?"projectId" => String
1334
+ }
1335
+
1336
+ # Spec schema: `CreateLinearIssueResult`.
1337
+ type create_linear_issue_result = {
1338
+ "issue" => { "id" => String, "identifier" => String, "url" => String },
1339
+ "link" => linear_issue_link
1340
+ }
1341
+
817
1342
  # Spec schema: `CreateOrgRequest`.
818
1343
  type create_org_request = { "displayName" => String }
819
1344
 
@@ -928,6 +1453,12 @@ module Infrawrench
928
1453
  "urgency" => "critical" | "warning" | "ok" | "unknown"
929
1454
  }
930
1455
 
1456
+ # Spec schema: `CurrencyConfig`.
1457
+ type currency_config = { "displayCurrency" => String | nil, "rates" => Array[exchange_rate] }
1458
+
1459
+ # Spec schema: `CurrencySettings`.
1460
+ type currency_settings = { "displayCurrency" => String | nil }
1461
+
931
1462
  # Spec schema: `CustomGraphCheckRequest`.
932
1463
  type custom_graph_check_request = { "source" => String }
933
1464
 
@@ -1046,8 +1577,12 @@ module Infrawrench
1046
1577
  "updatedAt" => String
1047
1578
  }
1048
1579
 
1580
+ # `cost_graph` stores its whole config inline — a one-off card. `cost_report`
1581
+ # points at a saved cost report by id, so editing the report updates every
1582
+ # dashboard showing it.
1583
+ #
1049
1584
  # Spec schema: `DashboardWidgetKind`.
1050
- type dashboard_widget_kind = "cost_graph" | "budget" | "custom_graph"
1585
+ type dashboard_widget_kind = "cost_graph" | "cost_report" | "budget" | "custom_graph"
1051
1586
 
1052
1587
  # Spec schema: `DashboardWithPins`.
1053
1588
  type dashboard_with_pins = {
@@ -1505,6 +2040,26 @@ module Infrawrench
1505
2040
  # Spec schema: `EscalationPolicy`.
1506
2041
  type escalation_policy = { "afterMinutes" => Integer, "destinations" => Array[alert_destination] } | nil
1507
2042
 
2043
+ # Spec schema: `ExchangeRate`.
2044
+ type exchange_rate = {
2045
+ "id" => String,
2046
+ "fromCurrency" => String,
2047
+ "toCurrency" => String,
2048
+ "rate" => String,
2049
+ "effectiveFrom" => String,
2050
+ "createdBy" => String | nil,
2051
+ "createdAt" => String,
2052
+ "updatedAt" => String
2053
+ }
2054
+
2055
+ # Spec schema: `ExchangeRateInput`.
2056
+ type exchange_rate_input = {
2057
+ "fromCurrency" => String,
2058
+ "toCurrency" => String,
2059
+ "rate" => String,
2060
+ "effectiveFrom" => String
2061
+ }
2062
+
1508
2063
  # Spec schema: `ExpiryAlertSettings`.
1509
2064
  type expiry_alert_settings = { "enabled" => bool, "leadDays" => Integer, "lastNotifiedAt" => String | nil }
1510
2065
 
@@ -1683,6 +2238,62 @@ module Infrawrench
1683
2238
  ?"parentResourceId" => resource_id
1684
2239
  }
1685
2240
 
2241
+ # Spec schema: `JiraIntegration`.
2242
+ type jira_integration = {
2243
+ "siteUrl" => String,
2244
+ "accountEmail" => String,
2245
+ "tokenHint" => String,
2246
+ "defaultProjectKey" => String | nil,
2247
+ "defaultIssueTypeId" => String | nil,
2248
+ "updatedAt" => String
2249
+ }
2250
+ | nil
2251
+
2252
+ # Spec schema: `JiraIntegrationInput`.
2253
+ type jira_integration_input = {
2254
+ "siteUrl" => String,
2255
+ "accountEmail" => String,
2256
+ ?"apiToken" => String,
2257
+ ?"defaultProjectKey" => String | nil,
2258
+ ?"defaultIssueTypeId" => String | nil
2259
+ }
2260
+
2261
+ # Spec schema: `JiraIssueLink`.
2262
+ type jira_issue_link = {
2263
+ "id" => String,
2264
+ "sourceKind" => jira_source_kind,
2265
+ "sourceId" => String,
2266
+ "issueKey" => String,
2267
+ "issueUrl" => String,
2268
+ "createdByUserId" => String | nil,
2269
+ "createdAt" => String
2270
+ }
2271
+
2272
+ # Spec schema: `JiraIssueType`.
2273
+ type jira_issue_type = { "id" => String, "name" => String, "subtask" => bool, "description" => String | nil }
2274
+
2275
+ # Spec schema: `JiraProject`.
2276
+ type jira_project = { "id" => String, "key" => String, "name" => String }
2277
+
2278
+ # Which detector produced the finding the issue was filed from.
2279
+ #
2280
+ # Spec schema: `JiraSourceKind`.
2281
+ type jira_source_kind = "cost_anomaly" | "orphan" | "oversized" | "posture_finding" | "expiring" | "probe"
2282
+
2283
+ # Supply all three to test credentials that have not been saved yet; send an
2284
+ # empty object to re-test the stored ones.
2285
+ #
2286
+ # Spec schema: `JiraVerifyInput`.
2287
+ type jira_verify_input = { ?"siteUrl" => String, ?"accountEmail" => String, ?"apiToken" => String }
2288
+
2289
+ # Spec schema: `JiraVerifyResult`.
2290
+ type jira_verify_result = {
2291
+ "ok" => bool,
2292
+ "accountId" => String,
2293
+ "displayName" => String,
2294
+ "emailAddress" => String | nil
2295
+ }
2296
+
1686
2297
  # Free-form JSON object whose shape depends on the plugin.
1687
2298
  #
1688
2299
  # Spec schema: `JsonObject`.
@@ -1703,6 +2314,42 @@ module Infrawrench
1703
2314
  # Spec schema: `LeaseConflict`.
1704
2315
  type lease_conflict = { "error" => String }
1705
2316
 
2317
+ # Spec schema: `LinearIntegration`.
2318
+ type linear_integration = { "keyHint" => String, "defaultTeamId" => String | nil, "updatedAt" => String } | nil
2319
+
2320
+ # Spec schema: `LinearIntegrationInput`.
2321
+ type linear_integration_input = { ?"apiKey" => String, ?"defaultTeamId" => String | nil }
2322
+
2323
+ # Spec schema: `LinearIssueLink`.
2324
+ type linear_issue_link = {
2325
+ "id" => String,
2326
+ "sourceKind" => linear_source_kind,
2327
+ "sourceId" => String,
2328
+ "issueIdentifier" => String,
2329
+ "issueUrl" => String,
2330
+ "createdByUserId" => String | nil,
2331
+ "createdAt" => String
2332
+ }
2333
+
2334
+ # Which detector produced the finding the issue was filed from.
2335
+ #
2336
+ # Spec schema: `LinearSourceKind`.
2337
+ type linear_source_kind = "cost_anomaly" | "orphan" | "oversized" | "posture_finding" | "expiring" | "probe"
2338
+
2339
+ # Spec schema: `LinearTeam`.
2340
+ type linear_team = { "id" => String, "key" => String, "name" => String }
2341
+
2342
+ # Supply a key to test one that has not been saved yet; send an empty object
2343
+ # to re-test the stored one.
2344
+ #
2345
+ # Spec schema: `LinearVerifyInput`.
2346
+ type linear_verify_input = { ?"apiKey" => String }
2347
+
2348
+ # The Linear user behind the API key, from the `viewer` query.
2349
+ #
2350
+ # Spec schema: `LinearVerifyResult`.
2351
+ type linear_verify_result = { "ok" => bool, "id" => String, "name" => String, "email" => String | nil }
2352
+
1706
2353
  # Spec schema: `LiteralAssociationRequest`.
1707
2354
  type literal_association_request = { "resourceId" => resource_id, "fieldKey" => String, "plaintextValue" => String }
1708
2355
 
@@ -2105,7 +2752,7 @@ module Infrawrench
2105
2752
  # Spec schema: `OrgConfigDashboardCard`.
2106
2753
  type org_config_dashboard_card = {
2107
2754
  "kind" => "widget",
2108
- "widgetKind" => "cost_graph" | "budget" | "custom_graph",
2755
+ "widgetKind" => "cost_graph" | "cost_report" | "budget" | "custom_graph",
2109
2756
  ?"title" => String,
2110
2757
  ?"config" => json_object,
2111
2758
  ?"budgetKey" => String,
@@ -2468,6 +3115,10 @@ module Infrawrench
2468
3115
  | "bastions:write"
2469
3116
  | "chat:read"
2470
3117
  | "chat:write"
3118
+ | "jira:read"
3119
+ | "jira:write"
3120
+ | "linear:read"
3121
+ | "linear:write"
2471
3122
  | "pages:write"
2472
3123
  | "org:settings:write"
2473
3124
 
@@ -2844,6 +3495,64 @@ module Infrawrench
2844
3495
  ?"resourceIds" => Array[resource_id]
2845
3496
  }
2846
3497
 
3498
+ # Spec schema: `ReportDeliveryTargetOption`.
3499
+ type report_delivery_target_option = { "id" => String, "label" => String }
3500
+
3501
+ # Spec schema: `ReportDeliveryTargets`.
3502
+ type report_delivery_targets = {
3503
+ "slackChannels" => Array[report_delivery_target_option],
3504
+ "teamsWebhooks" => Array[report_delivery_target_option],
3505
+ "emailAvailable" => bool
3506
+ }
3507
+
3508
+ # Spec schema: `ReportNotification`.
3509
+ type report_notification = {
3510
+ "id" => String,
3511
+ "costReportId" => String,
3512
+ "cadence" => "daily" | "weekly" | "monthly",
3513
+ "sendDay" => Integer,
3514
+ "sendDayOfMonth" => Integer,
3515
+ "hour" => Integer,
3516
+ "timezone" => String,
3517
+ "slackChannelIds" => Array[String],
3518
+ "teamsWebhookIds" => Array[String],
3519
+ "emailRecipients" => Array[String],
3520
+ "enabled" => bool,
3521
+ "nextSendAt" => String | nil,
3522
+ "lastSentAt" => String | nil,
3523
+ "lastStatus" => "pending" | "succeeded" | "partial" | "failed" | "no_targets" | nil,
3524
+ "lastError" => String | nil,
3525
+ "createdByUserId" => String | nil,
3526
+ "createdAt" => String,
3527
+ "updatedAt" => String
3528
+ }
3529
+
3530
+ # A full replace, like a report's own PUT. At least one destination is
3531
+ # required — a schedule with nowhere to deliver would only ever record
3532
+ # failures.
3533
+ #
3534
+ # Spec schema: `ReportNotificationInput`.
3535
+ type report_notification_input = {
3536
+ "cadence" => "daily" | "weekly" | "monthly",
3537
+ ?"sendDay" => Integer,
3538
+ ?"sendDayOfMonth" => Integer,
3539
+ "hour" => Integer,
3540
+ "timezone" => String,
3541
+ "slackChannelIds" => Array[String],
3542
+ "teamsWebhookIds" => Array[String],
3543
+ "emailRecipients" => Array[String],
3544
+ "enabled" => bool
3545
+ }
3546
+
3547
+ # Spec schema: `ReportNotificationSendResult`.
3548
+ type report_notification_send_result = {
3549
+ "attempted" => Integer,
3550
+ "succeeded" => Integer,
3551
+ "slack" => { "attempted" => Integer, "succeeded" => Integer },
3552
+ "teams" => { "attempted" => Integer, "succeeded" => Integer },
3553
+ "email" => { "attempted" => Integer, "succeeded" => Integer }
3554
+ }
3555
+
2847
3556
  # Spec schema: `RequiredTag`.
2848
3557
  type required_tag = { "key" => String, ?"allowedValues" => Array[String] }
2849
3558
 
@@ -3465,6 +4174,50 @@ module Infrawrench
3465
4174
  # Spec schema: `RoleUpdateRequest`.
3466
4175
  type role_update_request = { ?"name" => String, ?"description" => String | nil, ?"permissions" => Array[permission] }
3467
4176
 
4177
+ # Spec schema: `SavedCostFilter`.
4178
+ type saved_cost_filter = {
4179
+ "id" => String,
4180
+ "name" => String,
4181
+ "description" => String | nil,
4182
+ "filters" => Array[saved_cost_filter_term],
4183
+ "query" => String,
4184
+ "createdByUserId" => String | nil,
4185
+ "createdAt" => String,
4186
+ "updatedAt" => String
4187
+ }
4188
+
4189
+ # Spec schema: `SavedCostFilterInput`.
4190
+ type saved_cost_filter_input = {
4191
+ "name" => String,
4192
+ ?"description" => String,
4193
+ ?"filters" => Array[saved_cost_filter_term],
4194
+ ?"query" => String
4195
+ }
4196
+
4197
+ # Spec schema: `SavedCostFilterReferent`.
4198
+ type saved_cost_filter_referent = {
4199
+ "kind" => "budget" | "cost_report" | "cost_graph_widget",
4200
+ "id" => String,
4201
+ "name" => String,
4202
+ ?"dashboardId" => String,
4203
+ ?"dashboardName" => String
4204
+ }
4205
+
4206
+ # Spec schema: `SavedCostFilterTerm`.
4207
+ type saved_cost_filter_term = {
4208
+ "dimension" => "provider"
4209
+ | "account"
4210
+ | "service"
4211
+ | "region"
4212
+ | "resource"
4213
+ | "tag"
4214
+ | "charge_type"
4215
+ | "commitment",
4216
+ "op" => "in" | "not_in",
4217
+ "values" => Array[String],
4218
+ ?"tagKey" => String
4219
+ }
4220
+
3468
4221
  # Spec schema: `ScheduleConflict`.
3469
4222
  type schedule_conflict = { "error" => String }
3470
4223
 
@@ -4053,6 +4806,7 @@ module Infrawrench
4053
4806
  | "agents"
4054
4807
  | "costs"
4055
4808
  | "savings"
4809
+ | "cost-reports"
4056
4810
  | "graph"
4057
4811
  | "logs"
4058
4812
  | "changes"
@@ -4070,7 +4824,8 @@ module Infrawrench
4070
4824
  ?"dashboardId" => String,
4071
4825
  ?"accountId" => String,
4072
4826
  ?"resourceId" => resource_id,
4073
- ?"conversationId" => String
4827
+ ?"conversationId" => String,
4828
+ ?"reportId" => String
4074
4829
  }
4075
4830
 
4076
4831
  # Spec schema: `TagComplianceReport`.
@@ -4400,6 +5155,11 @@ module Infrawrench
4400
5155
  def resource: (resource_id: String, ?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> resource_change_list_response
4401
5156
  end
4402
5157
 
5158
+ class CommitmentsNamespace
5159
+ def initialize: (Transport) -> void
5160
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> commitments_feed
5161
+ end
5162
+
4403
5163
  class ConfigNamespace
4404
5164
  def initialize: (Transport) -> void
4405
5165
  def apply: (body: org_config_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> org_config_apply_result
@@ -4414,6 +5174,21 @@ module Infrawrench
4414
5174
  def templates: (body: connect_templates_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> connect_templates_response
4415
5175
  end
4416
5176
 
5177
+ class CostAlertsGetNamespace
5178
+ def initialize: (Transport) -> void
5179
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "alerts" => Array[cost_alert] }
5180
+ def get_org_org_id_cost_alerts_id: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_alert
5181
+ end
5182
+
5183
+ class CostAlertsNamespace
5184
+ attr_reader get: CostAlertsGetNamespace
5185
+ def initialize: (Transport) -> void
5186
+ def create: (body: cost_alert_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_alert
5187
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5188
+ def events: (?org_id: String?, ?alert_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> { "events" => Array[cost_alert_event] }
5189
+ def update: (id: String, body: cost_alert_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_alert
5190
+ end
5191
+
4417
5192
  class CostCentresRulesNamespace
4418
5193
  def initialize: (Transport) -> void
4419
5194
  def create: (body: allocation_rule_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> allocation_rule
@@ -4432,6 +5207,50 @@ module Infrawrench
4432
5207
  def update: (id: String, body: cost_centre_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_centre
4433
5208
  end
4434
5209
 
5210
+ class CostExportsNamespace
5211
+ def initialize: (Transport) -> void
5212
+ def create: (body: cost_export_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_export
5213
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5214
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_export
5215
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[cost_export]
5216
+ def run: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_export_run_result
5217
+ def update: (id: String, body: cost_export_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_export
5218
+ end
5219
+
5220
+ class CostReportFoldersNamespace
5221
+ def initialize: (Transport) -> void
5222
+ def create: (body: cost_report_folder_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_report_folder
5223
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5224
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[cost_report_folder]
5225
+ def update: (id: String, body: cost_report_folder_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_report_folder
5226
+ end
5227
+
5228
+ class CostReportNotificationsNamespace
5229
+ def initialize: (Transport) -> void
5230
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[report_notification]
5231
+ end
5232
+
5233
+ class CostReportsNotificationsNamespace
5234
+ def initialize: (Transport) -> void
5235
+ def create: (id: String, body: report_notification_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> report_notification
5236
+ def delete: (id: String, notification_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5237
+ def list: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[report_notification]
5238
+ def post_org_org_id_cost_reports_id_notifications_notification_id_send: (id: String, notification_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> report_notification_send_result
5239
+ def targets: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> report_delivery_targets
5240
+ def update: (id: String, notification_id: String, body: report_notification_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> report_notification
5241
+ end
5242
+
5243
+ class CostReportsNamespace
5244
+ attr_reader notifications: CostReportsNotificationsNamespace
5245
+ def initialize: (Transport) -> void
5246
+ def create: (body: cost_report_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_report
5247
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5248
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_report
5249
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[cost_report]
5250
+ def run: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_report_run_result
5251
+ def update: (id: String, body: cost_report_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_report
5252
+ end
5253
+
4435
5254
  class CostsAnomalySettingsNamespace
4436
5255
  def initialize: (Transport) -> void
4437
5256
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_anomaly_settings_view
@@ -4442,12 +5261,12 @@ module Infrawrench
4442
5261
  attr_reader anomaly_settings: CostsAnomalySettingsNamespace
4443
5262
  def initialize: (Transport) -> void
4444
5263
  def anomalies: (?org_id: String?, ?days: String?, ?request_options: Hash[Symbol, untyped]?) -> { "anomalies" => Array[cost_anomaly] }
4445
- def dimensions: (dimension: "provider" | "account" | "service" | "region" | "resource" | "tag" | "tag-keys", ?org_id: String?, ?tag_key: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_dimension_values
5264
+ def dimensions: (dimension: "provider" | "account" | "service" | "region" | "resource" | "tag" | "charge_type" | "commitment" | "tag-keys", ?org_id: String?, ?tag_key: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_dimension_values
4446
5265
  def query: (body: cost_query_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_query_response
4447
5266
  def rows: (body: cost_push_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_push_response
4448
- def showback: (?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> showback_report
5267
+ def showback: (?org_id: String?, ?from: String?, ?to: String?, ?basis: "cash" | "amortized"?, ?request_options: Hash[Symbol, untyped]?) -> showback_report
4449
5268
  def status: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "accounts" => Array[cost_account_status] }
4450
- def untagged: (?org_id: String?, ?from: String?, ?to: String?, ?request_options: Hash[Symbol, untyped]?) -> untagged_spend_report
5269
+ def untagged: (?org_id: String?, ?from: String?, ?to: String?, ?basis: "cash" | "amortized"?, ?request_options: Hash[Symbol, untyped]?) -> untagged_spend_report
4451
5270
  end
4452
5271
 
4453
5272
  class CredentialHygieneNamespace
@@ -4460,6 +5279,19 @@ module Infrawrench
4460
5279
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> credit_burndown
4461
5280
  end
4462
5281
 
5282
+ class CurrencyRatesNamespace
5283
+ def initialize: (Transport) -> void
5284
+ def delete: (rate_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "ok" => bool }
5285
+ def update: (body: exchange_rate_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> exchange_rate
5286
+ end
5287
+
5288
+ class CurrencyNamespace
5289
+ attr_reader rates: CurrencyRatesNamespace
5290
+ def initialize: (Transport) -> void
5291
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> currency_config
5292
+ def update: (body: currency_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> currency_settings
5293
+ end
5294
+
4463
5295
  class CustomGraphsNamespace
4464
5296
  def initialize: (Transport) -> void
4465
5297
  def check: (body: custom_graph_check_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_graph_check_result
@@ -4592,6 +5424,23 @@ module Infrawrench
4592
5424
  def accept: (body: accept_invitation_request, ?request_options: Hash[Symbol, untyped]?) -> accept_invitation_response
4593
5425
  end
4594
5426
 
5427
+ class JiraProjectsNamespace
5428
+ def initialize: (Transport) -> void
5429
+ def issue_types: (key: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[jira_issue_type]
5430
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[jira_project]
5431
+ end
5432
+
5433
+ class JiraNamespace
5434
+ attr_reader projects: JiraProjectsNamespace
5435
+ def initialize: (Transport) -> void
5436
+ def delete: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5437
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "integration" => jira_integration }
5438
+ def issues: (body: create_jira_issue_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_jira_issue_result
5439
+ def links: (?org_id: String?, ?source_kind: jira_source_kind?, ?source_id: Array[String]?, ?request_options: Hash[Symbol, untyped]?) -> Array[jira_issue_link]
5440
+ def update: (body: jira_integration_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (jira_integration & Hash[String, untyped])
5441
+ def verify: (?org_id: String?, ?body: jira_verify_input?, ?request_options: Hash[Symbol, untyped]?) -> jira_verify_result
5442
+ end
5443
+
4595
5444
  class KvNamespace
4596
5445
  def initialize: (Transport) -> void
4597
5446
  def command: (body: kv_command_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> kv_command_response
@@ -4607,6 +5456,17 @@ module Infrawrench
4607
5456
  def update: (lease_id: String, ?org_id: String?, ?body: resource_lease_update?, ?request_options: Hash[Symbol, untyped]?) -> resource_lease
4608
5457
  end
4609
5458
 
5459
+ class LinearNamespace
5460
+ def initialize: (Transport) -> void
5461
+ def delete: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5462
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "integration" => linear_integration }
5463
+ def issues: (body: create_linear_issue_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> create_linear_issue_result
5464
+ def links: (?org_id: String?, ?source_kind: linear_source_kind?, ?source_id: Array[String]?, ?request_options: Hash[Symbol, untyped]?) -> Array[linear_issue_link]
5465
+ def teams: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[linear_team]
5466
+ def update: (body: linear_integration_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (linear_integration & Hash[String, untyped])
5467
+ def verify: (?org_id: String?, ?body: linear_verify_input?, ?request_options: Hash[Symbol, untyped]?) -> linear_verify_result
5468
+ end
5469
+
4610
5470
  class LogWorkspacesNamespace
4611
5471
  def initialize: (Transport) -> void
4612
5472
  def create: (body: log_workspace_query_create, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> log_workspace_query
@@ -4781,6 +5641,16 @@ module Infrawrench
4781
5641
  def get: (?org_id: String?, ?refresh: "true" | "false"?, ?request_options: Hash[Symbol, untyped]?) -> rightsizing_list_response
4782
5642
  end
4783
5643
 
5644
+ class SavedCostFiltersNamespace
5645
+ def initialize: (Transport) -> void
5646
+ def create: (body: saved_cost_filter_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> saved_cost_filter
5647
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
5648
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> saved_cost_filter
5649
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[saved_cost_filter]
5650
+ def referents: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "referents" => Array[saved_cost_filter_referent] }
5651
+ def update: (id: String, body: saved_cost_filter_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> saved_cost_filter
5652
+ end
5653
+
4784
5654
  class SchedulesNamespace
4785
5655
  def initialize: (Transport) -> void
4786
5656
  def create: (?org_id: String?, ?body: sleep_schedule_create?, ?request_options: Hash[Symbol, untyped]?) -> sleep_schedule
@@ -4981,12 +5851,19 @@ module Infrawrench
4981
5851
  attr_reader budgets: BudgetsNamespace
4982
5852
  attr_reader change_freezes: ChangeFreezesNamespace
4983
5853
  attr_reader changes: ChangesNamespace
5854
+ attr_reader commitments: CommitmentsNamespace
4984
5855
  attr_reader config: ConfigNamespace
4985
5856
  attr_reader connect: ConnectNamespace
5857
+ attr_reader cost_alerts: CostAlertsNamespace
4986
5858
  attr_reader cost_centres: CostCentresNamespace
5859
+ attr_reader cost_exports: CostExportsNamespace
5860
+ attr_reader cost_report_folders: CostReportFoldersNamespace
5861
+ attr_reader cost_report_notifications: CostReportNotificationsNamespace
5862
+ attr_reader cost_reports: CostReportsNamespace
4987
5863
  attr_reader costs: CostsNamespace
4988
5864
  attr_reader credential_hygiene: CredentialHygieneNamespace
4989
5865
  attr_reader credits: CreditsNamespace
5866
+ attr_reader currency: CurrencyNamespace
4990
5867
  attr_reader custom_graphs: CustomGraphsNamespace
4991
5868
  attr_reader dashboards: DashboardsNamespace
4992
5869
  attr_reader dependency_graph: DependencyGraphNamespace
@@ -4997,8 +5874,10 @@ module Infrawrench
4997
5874
  attr_reader environment_diff: EnvironmentDiffNamespace
4998
5875
  attr_reader expiring: ExpiringNamespace
4999
5876
  attr_reader invitations: InvitationsNamespace
5877
+ attr_reader jira: JiraNamespace
5000
5878
  attr_reader kv: KvNamespace
5001
5879
  attr_reader leases: LeasesNamespace
5880
+ attr_reader linear: LinearNamespace
5002
5881
  attr_reader log_workspaces: LogWorkspacesNamespace
5003
5882
  attr_reader metric_alerts: MetricAlertsNamespace
5004
5883
  attr_reader moment: MomentNamespace
@@ -5012,6 +5891,7 @@ module Infrawrench
5012
5891
  attr_reader profile: ProfileNamespace
5013
5892
  attr_reader resources: ResourcesNamespace
5014
5893
  attr_reader rightsizing: RightsizingNamespace
5894
+ attr_reader saved_cost_filters: SavedCostFiltersNamespace
5015
5895
  attr_reader schedules: SchedulesNamespace
5016
5896
  attr_reader search: SearchNamespace
5017
5897
  attr_reader session_recordings: SessionRecordingsNamespace