infrawrench-sdk 1.49.0 → 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4438c29461185776f7972e88665ed0bda6d8ecc7d2c6f2412d4206b8eefbc01a
4
- data.tar.gz: ae989fb1b658cae07ee0b0e7f1e48216dbc0285867488f87110bc30c401a7fca
3
+ metadata.gz: d35adcdc4eca80c83fa1cf3e3656700d8081d672d86d2ee986ce6075a7df8247
4
+ data.tar.gz: 521fd468ba1c5c3d0889c8a465d4bb2c6cba14629f2d138ca38b4cdaefad15ea
5
5
  SHA512:
6
- metadata.gz: c134ebdac71c070e737b24e89fcecaddaeaf23521e75e102edde67883dc3c8245ad6ba67ff8f93341c4ae73c310d155db440acd82f918ff2ad3f34547c9a4cf6
7
- data.tar.gz: b70bf1764cad3a726c433b4e665d85dec2db1d0c42803775ae6d4ab247bad7135fe21059e462c3b60a54a8600f266ce913a06b9e789fe16b7bf879bda9d195ad
6
+ metadata.gz: 3e5647ba003ebcd6c47b70e4b5da3cb641a88b115fac2059e0bba92c3521244648e12803368d3ef9c6b6e275afaef824cfcffbf263f3fe41e1758b018e9cc668
7
+ data.tar.gz: 382ea9059ded328bcc3d02e0b8d9e9d5d196724c611eadb5c6e59ae0a8541f830e16bbc73afa22f1415b296db386e7088a3795e9a8af6625af1794afef13e307
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # infrawrench-sdk
2
2
 
3
- Generated Ruby client for the Infrawrench API (API version `1.49.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.52.0`).
4
4
 
5
5
  **Do not edit this gem by hand** — it is regenerated from `openapi.json` and is
6
6
  not checked into the repository. Run
@@ -41,7 +41,7 @@ Every method takes an optional trailing `request_options:` hash (`:headers`,
41
41
  Responses are the plain `Hash`/`Array` that `JSON.parse` returns, with String
42
42
  keys spelled exactly as the wire spells them. There are no model classes — see
43
43
  [`sig/infrawrench/sdk.rbs`](./sig/infrawrench/sdk.rbs) for the shape of every one of the
44
- 763 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 782 schemas, as RBS type aliases that steep and TypeProf can read.
45
45
 
46
46
  Non-2xx responses raise `Infrawrench::ApiError`, which carries `#status`,
47
47
  the parsed `#body`, and the machine-readable `#code` when the API sends one —
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.49.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.52.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.49.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.52.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -17,8 +17,8 @@ require_relative "lib/infrawrench/version"
17
17
  Gem::Specification.new do |spec|
18
18
  spec.name = "infrawrench-sdk"
19
19
  spec.version = Infrawrench::VERSION
20
- spec.summary = "Generated Ruby client for the Infrawrench API (v1.49.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.49.0). Covers the published API surface only — operations marked x-internal in the spec are not generated. No runtime dependencies."
20
+ spec.summary = "Generated Ruby client for the Infrawrench API (v1.52.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.52.0). Covers the published API surface only — operations marked x-internal in the spec are not generated. No runtime dependencies."
22
22
  spec.authors = ["Infrawrench LLC", "Astrid Gealer"]
23
23
  spec.email = ["astrid@infrawrench.com"]
24
24
  spec.homepage = "https://infrawrench.com/docs/team-and-billing/client-sdks"
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.49.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.52.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.49.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.52.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -4675,9 +4675,10 @@ module Infrawrench
4675
4675
 
4676
4676
  # Create a cost export
4677
4677
  #
4678
- # Credentials are required on create. They are encrypted at rest and no
4679
- # route ever returns them; responses carry a redacted `credentialHint`
4680
- # instead.
4678
+ # Credentials are required on create for S3 and HTTPS destinations. They are
4679
+ # encrypted at rest and no route ever returns them; responses carry a
4680
+ # redacted `credentialHint` instead. A warehouse destination takes none: it
4681
+ # loads with the connected account's credentials.
4681
4682
  #
4682
4683
  # _Requires permission: `org:settings:write`._
4683
4684
  #
@@ -4831,6 +4832,86 @@ module Infrawrench
4831
4832
  request_options: request_options
4832
4833
  )
4833
4834
  end
4835
+
4836
+ # List options for a warehouse target field
4837
+ #
4838
+ # Reads the provider live with the account's credentials (warehouses,
4839
+ # databases or catalogs, schemas, tables). A provider refusal is a 400
4840
+ # carrying its message.
4841
+ #
4842
+ # _Requires permission: `org:settings:write`._
4843
+ #
4844
+ # POST /api/org/{orgId}/cost-exports/warehouse-options
4845
+ #
4846
+ # Raises on 400: Bad request
4847
+ #
4848
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4849
+ # constructed with.
4850
+ # @param body [Hash] Request body, shaped as `Hash`.
4851
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4852
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
4853
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4854
+ def warehouse_options(body:, org_id: nil, request_options: nil)
4855
+ @transport.request(
4856
+ http_method: "POST",
4857
+ path: "/api/org/{orgId}/cost-exports/warehouse-options",
4858
+ path_params: { "orgId" => org_id },
4859
+ body: body,
4860
+ request_options: request_options
4861
+ )
4862
+ end
4863
+
4864
+ # Least-privilege setup for a warehouse target
4865
+ #
4866
+ # The GRANT statements the connected role or principal needs for a target,
4867
+ # plus any non-SQL steps (for Databricks, CAN USE on the SQL warehouse).
4868
+ #
4869
+ # _Requires permission: `org:settings:write`._
4870
+ #
4871
+ # POST /api/org/{orgId}/cost-exports/warehouse-setup
4872
+ #
4873
+ # Raises on 400: Bad request
4874
+ #
4875
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4876
+ # constructed with.
4877
+ # @param body [Hash] Request body, shaped as `Hash`.
4878
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4879
+ # @return [Hash] Parsed JSON, shaped as `CostExportWarehouseSetup` — see
4880
+ # `sig/infrawrench/sdk.rbs`.
4881
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4882
+ def warehouse_setup(body:, org_id: nil, request_options: nil)
4883
+ @transport.request(
4884
+ http_method: "POST",
4885
+ path: "/api/org/{orgId}/cost-exports/warehouse-setup",
4886
+ path_params: { "orgId" => org_id },
4887
+ body: body,
4888
+ request_options: request_options
4889
+ )
4890
+ end
4891
+
4892
+ # List warehouse destination types
4893
+ #
4894
+ # Plugins that can load an export into a table in their own warehouse
4895
+ # (Snowflake, Databricks), each with the organization's connected accounts
4896
+ # and the target fields to fill.
4897
+ #
4898
+ # _Requires permission: `org:settings:write`._
4899
+ #
4900
+ # GET /api/org/{orgId}/cost-exports/warehouse-sinks
4901
+ #
4902
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4903
+ # constructed with.
4904
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4905
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
4906
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4907
+ def warehouse_sinks(org_id: nil, request_options: nil)
4908
+ @transport.request(
4909
+ http_method: "GET",
4910
+ path: "/api/org/{orgId}/cost-exports/warehouse-sinks",
4911
+ path_params: { "orgId" => org_id },
4912
+ request_options: request_options
4913
+ )
4914
+ end
4834
4915
  end
4835
4916
 
4836
4917
  # `client.cost_report_folders`
@@ -5961,6 +6042,46 @@ module Infrawrench
5961
6042
  )
5962
6043
  end
5963
6044
 
6045
+ # Download cost rows as a FOCUS 1.3 CSV
6046
+ #
6047
+ # The rows a cost query selects, written as a CSV in the FinOps Open Cost
6048
+ # and Usage Specification (FOCUS) v1.3 layout: one row per account, service,
6049
+ # region, resource, tag set, charge type and commitment per day, with
6050
+ # `BilledCost` (cash) and `EffectiveCost` (amortized) side by side,
6051
+ # `ChargeCategory`, `ServiceCategory`/`ServiceSubcategory`, `Tags` as a JSON
6052
+ # object and the commitment columns where the provider reports a commitment.
6053
+ # Custom columns follow, prefixed `x_`. The same mapping a `focus-1.3`
6054
+ # scheduled export writes (see /cost-exports).
6055
+ #
6056
+ # Takes the cost query's filter in either spelling (`filters` or `query`,
6057
+ # never both), an optional saved filter, and charge types. The range spans
6058
+ # at most 366 days; for anything longer, or for a recurring feed, use a
6059
+ # scheduled export. Validation errors are a 400 before any CSV is written;
6060
+ # the body is then streamed.
6061
+ #
6062
+ # _Requires permission: `costs:read`._
6063
+ #
6064
+ # POST /api/org/{orgId}/costs/focus-export
6065
+ #
6066
+ # Raises on 400: Bad request
6067
+ #
6068
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
6069
+ # constructed with.
6070
+ # @param body [Hash] Request body, shaped as `FocusExportRequest`.
6071
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
6072
+ # @return [String] Raw response bytes.
6073
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
6074
+ def focus_export(body:, org_id: nil, request_options: nil)
6075
+ @transport.request(
6076
+ http_method: "POST",
6077
+ path: "/api/org/{orgId}/costs/focus-export",
6078
+ path_params: { "orgId" => org_id },
6079
+ body: body,
6080
+ accept: :binary,
6081
+ request_options: request_options
6082
+ )
6083
+ end
6084
+
5964
6085
  # Query aggregated cost series
5965
6086
  #
5966
6087
  # Aggregates collected provider spend into per-bucket, per-group series for
@@ -11785,6 +11906,251 @@ module Infrawrench
11785
11906
  end
11786
11907
  end
11787
11908
 
11909
+ # `client.price_catalog`
11910
+ class PriceCatalogNamespace
11911
+ # @api private
11912
+ # @param transport [Transport]
11913
+ def initialize(transport)
11914
+ @transport = transport
11915
+ end
11916
+
11917
+ # Compare equivalent instances across providers
11918
+ #
11919
+ # The cheapest product per provider that meets every stated spec (at least
11920
+ # the vCPUs, memory and GPUs asked for), in each provider's region for the
11921
+ # area. Give the target as specs, or name a reference product and its specs
11922
+ # are used.
11923
+ #
11924
+ # _Requires permission: `resources:read`._
11925
+ #
11926
+ # GET /api/org/{orgId}/price-catalog/compare
11927
+ #
11928
+ # Raises on 400: Bad request
11929
+ #
11930
+ # Raises on 401: Unauthenticated
11931
+ #
11932
+ # Raises on 402: Payment required — the organization's plan does not include
11933
+ # this
11934
+ #
11935
+ # Raises on 403: Forbidden
11936
+ #
11937
+ # Raises on 404: Not found
11938
+ #
11939
+ # Raises on 409: Conflict
11940
+ #
11941
+ # Raises on 500: Server error
11942
+ #
11943
+ # Raises on 503: A backing service this endpoint depends on is not available
11944
+ #
11945
+ # Raises on reauth: Recent sign-in required. Send the user through sign-in
11946
+ # again and retry; the request itself was well-formed.
11947
+ #
11948
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
11949
+ # constructed with.
11950
+ # @param vcpus [String, nil] Minimum vCPUs.
11951
+ # @param memory_gb [String, nil] Minimum memory, GB.
11952
+ # @param gpu_count [String, nil] Minimum GPUs.
11953
+ # @param gpu_model [String, nil]
11954
+ # @param reference_plugin_id [String, nil]
11955
+ # @param reference_sku [String, nil]
11956
+ # @param area [String, nil]
11957
+ # @param rate_type [String, nil]
11958
+ # @param plugin_ids [String, nil] Comma-separated plugin ids.
11959
+ # @param alternatives [String, nil] Runners-up per provider, 0 to 10. Default 2.
11960
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
11961
+ # @return [Hash] Parsed JSON, shaped as `PriceCatalogCompareResponse` — see
11962
+ # `sig/infrawrench/sdk.rbs`.
11963
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
11964
+ def compare(
11965
+ org_id: nil,
11966
+ vcpus: nil,
11967
+ memory_gb: nil,
11968
+ gpu_count: nil,
11969
+ gpu_model: nil,
11970
+ reference_plugin_id: nil,
11971
+ reference_sku: nil,
11972
+ area: nil,
11973
+ rate_type: nil,
11974
+ plugin_ids: nil,
11975
+ alternatives: nil,
11976
+ request_options: nil
11977
+ )
11978
+ @transport.request(
11979
+ http_method: "GET",
11980
+ path: "/api/org/{orgId}/price-catalog/compare",
11981
+ path_params: { "orgId" => org_id },
11982
+ query: {
11983
+ "vcpus" => vcpus,
11984
+ "memoryGb" => memory_gb,
11985
+ "gpuCount" => gpu_count,
11986
+ "gpuModel" => gpu_model,
11987
+ "referencePluginId" => reference_plugin_id,
11988
+ "referenceSku" => reference_sku,
11989
+ "area" => area,
11990
+ "rateType" => rate_type,
11991
+ "pluginIds" => plugin_ids,
11992
+ "alternatives" => alternatives
11993
+ },
11994
+ request_options: request_options
11995
+ )
11996
+ end
11997
+
11998
+ # List the providers that publish a price catalog
11999
+ #
12000
+ # Every plugin that declares a price catalog, with its source, refresh
12001
+ # cadence, services, regions and whether its price API needs credentials. A
12002
+ # credentialed provider the org has no account on reports `no-account`.
12003
+ #
12004
+ # _Requires permission: `resources:read`._
12005
+ #
12006
+ # GET /api/org/{orgId}/price-catalog/providers
12007
+ #
12008
+ # Raises on 400: Bad request
12009
+ #
12010
+ # Raises on 401: Unauthenticated
12011
+ #
12012
+ # Raises on 402: Payment required — the organization's plan does not include
12013
+ # this
12014
+ #
12015
+ # Raises on 403: Forbidden
12016
+ #
12017
+ # Raises on 404: Not found
12018
+ #
12019
+ # Raises on 409: Conflict
12020
+ #
12021
+ # Raises on 500: Server error
12022
+ #
12023
+ # Raises on 503: A backing service this endpoint depends on is not available
12024
+ #
12025
+ # Raises on reauth: Recent sign-in required. Send the user through sign-in
12026
+ # again and retry; the request itself was well-formed.
12027
+ #
12028
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
12029
+ # constructed with.
12030
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
12031
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
12032
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
12033
+ def providers(org_id: nil, request_options: nil)
12034
+ @transport.request(
12035
+ http_method: "GET",
12036
+ path: "/api/org/{orgId}/price-catalog/providers",
12037
+ path_params: { "orgId" => org_id },
12038
+ request_options: request_options
12039
+ )
12040
+ end
12041
+
12042
+ # Search provider list prices
12043
+ #
12044
+ # Search instance types across every catalog provider: one row per product
12045
+ # priced at the requested rate type in the region chosen for each provider.
12046
+ # Filters narrow by provider, service, specs, GPU and price; rows sort by
12047
+ # monthly price by default.
12048
+ #
12049
+ # _Requires permission: `resources:read`._
12050
+ #
12051
+ # GET /api/org/{orgId}/price-catalog/search
12052
+ #
12053
+ # Raises on 400: Bad request
12054
+ #
12055
+ # Raises on 401: Unauthenticated
12056
+ #
12057
+ # Raises on 402: Payment required — the organization's plan does not include
12058
+ # this
12059
+ #
12060
+ # Raises on 403: Forbidden
12061
+ #
12062
+ # Raises on 404: Not found
12063
+ #
12064
+ # Raises on 409: Conflict
12065
+ #
12066
+ # Raises on 500: Server error
12067
+ #
12068
+ # Raises on 503: A backing service this endpoint depends on is not available
12069
+ #
12070
+ # Raises on reauth: Recent sign-in required. Send the user through sign-in
12071
+ # again and retry; the request itself was well-formed.
12072
+ #
12073
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
12074
+ # constructed with.
12075
+ # @param q [String, nil] Free text over SKU, name, series and GPU model.
12076
+ # @param plugin_ids [String, nil] Comma-separated plugin ids.
12077
+ # @param service_ids [String, nil] Comma-separated service ids (from the providers list).
12078
+ # @param families [String, nil] Comma-separated product families.
12079
+ # @param region [String, nil] Exact provider region, for providers that declare it.
12080
+ # @param area [String, nil]
12081
+ # @param min_vcpus [String, nil] Minimum vCPUs.
12082
+ # @param max_vcpus [String, nil] Maximum vCPUs.
12083
+ # @param min_memory_gb [String, nil] Minimum memory, GB.
12084
+ # @param max_memory_gb [String, nil] Maximum memory, GB.
12085
+ # @param gpu [String, nil]
12086
+ # @param gpu_model [String, nil] Case-insensitive substring, e.g. `H100`.
12087
+ # @param min_gpus [String, nil] Minimum GPU count.
12088
+ # @param max_monthly_price [String, nil] Upper bound on the comparable monthly price.
12089
+ # @param rate_type [String, nil]
12090
+ # @param term [String, nil] `1yr` or `3yr` for commitments.
12091
+ # @param sort [String, nil]
12092
+ # @param order [String, nil]
12093
+ # @param limit [String, nil] Rows per page, 1 to 500. Default 100.
12094
+ # @param offset [String, nil] Rows to skip.
12095
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
12096
+ # @return [Hash] Parsed JSON, shaped as `PriceCatalogSearchResponse` — see
12097
+ # `sig/infrawrench/sdk.rbs`.
12098
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
12099
+ def search(
12100
+ org_id: nil,
12101
+ q: nil,
12102
+ plugin_ids: nil,
12103
+ service_ids: nil,
12104
+ families: nil,
12105
+ region: nil,
12106
+ area: nil,
12107
+ min_vcpus: nil,
12108
+ max_vcpus: nil,
12109
+ min_memory_gb: nil,
12110
+ max_memory_gb: nil,
12111
+ gpu: nil,
12112
+ gpu_model: nil,
12113
+ min_gpus: nil,
12114
+ max_monthly_price: nil,
12115
+ rate_type: nil,
12116
+ term: nil,
12117
+ sort: nil,
12118
+ order: nil,
12119
+ limit: nil,
12120
+ offset: nil,
12121
+ request_options: nil
12122
+ )
12123
+ @transport.request(
12124
+ http_method: "GET",
12125
+ path: "/api/org/{orgId}/price-catalog/search",
12126
+ path_params: { "orgId" => org_id },
12127
+ query: {
12128
+ "q" => q,
12129
+ "pluginIds" => plugin_ids,
12130
+ "serviceIds" => service_ids,
12131
+ "families" => families,
12132
+ "region" => region,
12133
+ "area" => area,
12134
+ "minVcpus" => min_vcpus,
12135
+ "maxVcpus" => max_vcpus,
12136
+ "minMemoryGb" => min_memory_gb,
12137
+ "maxMemoryGb" => max_memory_gb,
12138
+ "gpu" => gpu,
12139
+ "gpuModel" => gpu_model,
12140
+ "minGpus" => min_gpus,
12141
+ "maxMonthlyPrice" => max_monthly_price,
12142
+ "rateType" => rate_type,
12143
+ "term" => term,
12144
+ "sort" => sort,
12145
+ "order" => order,
12146
+ "limit" => limit,
12147
+ "offset" => offset
12148
+ },
12149
+ request_options: request_options
12150
+ )
12151
+ end
12152
+ end
12153
+
11788
12154
  # `client.probes`
11789
12155
  class ProbesNamespace
11790
12156
  # @api private
@@ -17419,6 +17785,8 @@ module Infrawrench
17419
17785
  attr_reader :pages
17420
17786
  # @return [PostureNamespace] `client.posture`
17421
17787
  attr_reader :posture
17788
+ # @return [PriceCatalogNamespace] `client.price_catalog`
17789
+ attr_reader :price_catalog
17422
17790
  # @return [ProbesNamespace] `client.probes`
17423
17791
  attr_reader :probes
17424
17792
  # @return [ProfileNamespace] `client.profile`
@@ -17555,6 +17923,7 @@ module Infrawrench
17555
17923
  @ownership = OwnershipNamespace.new(@transport)
17556
17924
  @pages = PagesNamespace.new(@transport)
17557
17925
  @posture = PostureNamespace.new(@transport)
17926
+ @price_catalog = PriceCatalogNamespace.new(@transport)
17558
17927
  @probes = ProbesNamespace.new(@transport)
17559
17928
  @profile = ProfileNamespace.new(@transport)
17560
17929
  @query_monitors = QueryMonitorsNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.49.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.52.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.49.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.52.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.49.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.52.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.49.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.52.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.49.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.52.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.49.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.52.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -15,5 +15,5 @@
15
15
  # Kept in its own file so the gemspec can read the version without loading the
16
16
  # client — a gemspec that pulls in net/http is a gemspec that can fail to parse.
17
17
  module Infrawrench
18
- VERSION = "1.49.0"
18
+ VERSION = "1.52.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.49.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.52.0 | MIT | Copyright (c) 2026 Infrawrench LLC
4
4
  # https://github.com/Infrawrench/Infrawrench
5
5
  #
6
- # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.49.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.52.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1,7 +1,7 @@
1
- # infrawrench-sdk v1.49.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.52.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.49.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.52.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1888,6 +1888,7 @@ module Infrawrench
1888
1888
  "id" => String,
1889
1889
  "name" => String,
1890
1890
  "format" => "csv" | "ndjson",
1891
+ "schema" => cost_export_schema,
1891
1892
  "query" => cost_export_query,
1892
1893
  "cadence" => "daily" | "weekly" | "monthly",
1893
1894
  "hour" => Integer,
@@ -1918,6 +1919,12 @@ module Infrawrench
1918
1919
  "forcePathStyle" => bool
1919
1920
  }
1920
1921
  | { "kind" => "http", "method" => "POST" | "PUT", "urlHint" => String }
1922
+ | {
1923
+ "kind" => "warehouse",
1924
+ "pluginId" => String,
1925
+ "accountId" => String,
1926
+ "target" => Hash[String, String]
1927
+ }
1921
1928
 
1922
1929
  # Spec schema: `CostExportFilter`.
1923
1930
  type cost_export_filter = {
@@ -1938,6 +1945,7 @@ module Infrawrench
1938
1945
  type cost_export_input = {
1939
1946
  "name" => String,
1940
1947
  "format" => "csv" | "ndjson",
1948
+ ?"schema" => cost_export_schema & untyped,
1941
1949
  "query" => cost_export_query,
1942
1950
  "cadence" => "daily" | "weekly" | "monthly",
1943
1951
  "hour" => Integer,
@@ -2000,6 +2008,44 @@ module Infrawrench
2000
2008
  "error" => String | nil
2001
2009
  }
2002
2010
 
2011
+ # Which columns an object carries. `native` is Infrawrench's own layout,
2012
+ # shaped by `query.dimensions` and `query.tagKeys`. `focus-1.3` writes the
2013
+ # FinOps Open Cost and Usage Specification v1.3 columns at the full row grain,
2014
+ # with `BilledCost` (cash) and `EffectiveCost` (amortized) side by side;
2015
+ # `query.dimensions`, `query.tagKeys` and `query.costBasis` do not apply to
2016
+ # it, `query.filters` and `query.chargeTypes` still do.
2017
+ #
2018
+ # Spec schema: `CostExportSchema`.
2019
+ type cost_export_schema = "native" | "focus-1.3"
2020
+
2021
+ # Spec schema: `CostExportWarehouseOption`.
2022
+ type cost_export_warehouse_option = { "id" => String, "label" => String, ?"description" => String }
2023
+
2024
+ # Spec schema: `CostExportWarehouseSetup`.
2025
+ type cost_export_warehouse_setup = { "sql" => String, "notes" => Array[String] }
2026
+
2027
+ # Spec schema: `CostExportWarehouseSink`.
2028
+ type cost_export_warehouse_sink = {
2029
+ "pluginId" => String,
2030
+ "displayName" => String,
2031
+ "label" => String,
2032
+ "description" => String | nil,
2033
+ "targetFields" => Array[cost_export_warehouse_target_field],
2034
+ "accounts" => Array[{ "id" => String, "name" => String }]
2035
+ }
2036
+
2037
+ # Spec schema: `CostExportWarehouseTargetField`.
2038
+ type cost_export_warehouse_target_field = {
2039
+ "key" => String,
2040
+ "label" => String,
2041
+ "description" => String | nil,
2042
+ "dependsOn" => Array[String],
2043
+ "optional" => bool,
2044
+ "allowCustom" => bool,
2045
+ "placeholder" => String | nil,
2046
+ "emptyLabel" => String | nil
2047
+ }
2048
+
2003
2049
  # Spec schema: `CostFilter`.
2004
2050
  type cost_filter = {
2005
2051
  "dimension" => cost_dimension,
@@ -3458,6 +3504,16 @@ module Infrawrench
3458
3504
  # Spec schema: `FieldActionResponse`.
3459
3505
  type field_action_response = { "value" => String, ?"option" => { "id" => String, "label" => String } }
3460
3506
 
3507
+ # Spec schema: `FocusExportRequest`.
3508
+ type focus_export_request = {
3509
+ "from" => String,
3510
+ "to" => String,
3511
+ ?"filters" => Array[cost_filter],
3512
+ ?"query" => String,
3513
+ ?"savedFilterId" => String,
3514
+ ?"chargeTypes" => Array[cost_charge_type]
3515
+ }
3516
+
3461
3517
  # Spec schema: `GenerateSshKeyRequest`.
3462
3518
  type generate_ssh_key_request = { "name" => String }
3463
3519
 
@@ -5459,6 +5515,148 @@ module Infrawrench
5459
5515
  # Spec schema: `PreflightRequest`.
5460
5516
  type preflight_request = { "pluginId" => String, "credentials" => Hash[String, String], ?"bastionId" => String | nil }
5461
5517
 
5518
+ # Coarse geography. A provider without the requested region is priced in its
5519
+ # first declared region in this area.
5520
+ #
5521
+ # Spec schema: `PriceCatalogArea`.
5522
+ type price_catalog_area = "north-america"
5523
+ | "south-america"
5524
+ | "europe"
5525
+ | "asia-pacific"
5526
+ | "middle-east"
5527
+ | "africa"
5528
+ | "oceania"
5529
+
5530
+ # Monthly amount in the org's display currency (converted at the org's stated
5531
+ # rate), or in the native currency when no display currency is configured;
5532
+ # null when there is no rate. Sorting and `maxMonthlyPrice` use it.
5533
+ #
5534
+ # Spec schema: `PriceCatalogComparable`.
5535
+ type price_catalog_comparable = { "amount" => Numeric, "currency" => String } | nil
5536
+
5537
+ # Spec schema: `PriceCatalogCompareProvider`.
5538
+ type price_catalog_compare_provider = {
5539
+ "pluginId" => plugin_id,
5540
+ "pluginName" => String,
5541
+ "region" => String | nil,
5542
+ "regionLabel" => String | nil,
5543
+ "state" => price_catalog_provider_state,
5544
+ "error" => String | nil,
5545
+ "best" => price_catalog_row & (Hash[String, untyped] | nil),
5546
+ "alternatives" => Array[price_catalog_row]
5547
+ }
5548
+
5549
+ # Spec schema: `PriceCatalogCompareResponse`.
5550
+ type price_catalog_compare_response = {
5551
+ "target" => price_catalog_compare_target,
5552
+ "reference" => price_catalog_row & (Hash[String, untyped] | nil),
5553
+ "area" => price_catalog_area,
5554
+ "rateType" => price_rate_type,
5555
+ "providers" => Array[price_catalog_compare_provider],
5556
+ "displayCurrency" => String | nil,
5557
+ "mixedCurrencies" => bool,
5558
+ "generatedAt" => String
5559
+ }
5560
+
5561
+ # Spec schema: `PriceCatalogCompareTarget`.
5562
+ type price_catalog_compare_target = {
5563
+ "vcpus" => Numeric | nil,
5564
+ "memoryGb" => Numeric | nil,
5565
+ "gpuCount" => Numeric | nil,
5566
+ "gpuModel" => String | nil
5567
+ }
5568
+
5569
+ # Spec schema: `PriceCatalogPrice`.
5570
+ type price_catalog_price = {
5571
+ "region" => String,
5572
+ "rateType" => price_rate_type,
5573
+ "unit" => "hour" | "month" | "gb-month",
5574
+ "amount" => Numeric,
5575
+ "currency" => String,
5576
+ ?"term" => String,
5577
+ ?"paymentOption" => String,
5578
+ ?"effectiveDate" => String
5579
+ }
5580
+
5581
+ # Spec schema: `PriceCatalogProductFamily`.
5582
+ type price_catalog_product_family = "compute" | "gpu" | "database" | "kubernetes-node" | "storage"
5583
+
5584
+ # `no-account`: the provider's price API needs credentials and the org has no
5585
+ # account on it. `loading`: the first fetch is still running, ask again
5586
+ # shortly.
5587
+ #
5588
+ # Spec schema: `PriceCatalogProviderState`.
5589
+ type price_catalog_provider_state = "ready" | "no-account" | "no-region" | "loading" | "error"
5590
+
5591
+ # Spec schema: `PriceCatalogProviderStatus`.
5592
+ type price_catalog_provider_status = {
5593
+ "pluginId" => plugin_id,
5594
+ "pluginName" => String,
5595
+ "requiresCredentials" => bool,
5596
+ "permission" => String | nil,
5597
+ "source" => { "name" => String, "url" => String },
5598
+ "refreshHours" => Numeric,
5599
+ "services" => Array[{ "id" => String, "label" => String, "family" => price_catalog_product_family }],
5600
+ "regions" => Array[{ "id" => String, "label" => String, "area" => price_catalog_area }],
5601
+ "state" => price_catalog_provider_state,
5602
+ "region" => String | nil,
5603
+ "error" => String | nil,
5604
+ "fetchedAt" => String | nil,
5605
+ "truncated" => bool
5606
+ }
5607
+
5608
+ # Spec schema: `PriceCatalogRow`.
5609
+ type price_catalog_row = {
5610
+ "pluginId" => plugin_id,
5611
+ "pluginName" => String,
5612
+ "serviceId" => String,
5613
+ "serviceLabel" => String,
5614
+ "sku" => String,
5615
+ "name" => String,
5616
+ "family" => price_catalog_product_family,
5617
+ "series" => String | nil,
5618
+ "specs" => price_catalog_specs,
5619
+ "region" => String,
5620
+ "regionLabel" => String,
5621
+ "price" => price_catalog_price,
5622
+ "monthlyAmount" => Numeric | nil,
5623
+ "comparable" => price_catalog_comparable,
5624
+ "otherPrices" => Array[price_catalog_price],
5625
+ "estimate" => { "resourceTypeId" => String, "fields" => Hash[String, String] } | nil
5626
+ }
5627
+
5628
+ # Spec schema: `PriceCatalogSearchResponse`.
5629
+ type price_catalog_search_response = {
5630
+ "rows" => Array[price_catalog_row],
5631
+ "total" => Integer,
5632
+ "offset" => Integer,
5633
+ "limit" => Integer,
5634
+ "area" => price_catalog_area,
5635
+ "rateType" => price_rate_type,
5636
+ "providers" => Array[price_catalog_provider_status],
5637
+ "displayCurrency" => String | nil,
5638
+ "currencies" => Array[String],
5639
+ "mixedCurrencies" => bool,
5640
+ "gpuModels" => Array[String],
5641
+ "generatedAt" => String
5642
+ }
5643
+
5644
+ # Spec schema: `PriceCatalogSpecs`.
5645
+ type price_catalog_specs = {
5646
+ ?"vcpus" => Numeric,
5647
+ ?"memoryGb" => Numeric,
5648
+ ?"gpuCount" => Numeric,
5649
+ ?"gpuModel" => String,
5650
+ ?"gpuMemoryGb" => Numeric,
5651
+ ?"storageGb" => Numeric,
5652
+ ?"storageType" => String,
5653
+ ?"architecture" => String,
5654
+ ?"network" => String
5655
+ }
5656
+
5657
+ # Spec schema: `PriceRateType`.
5658
+ type price_rate_type = "on-demand" | "spot" | "reserved" | "savings-plan"
5659
+
5462
5660
  # Spec schema: `ProbeMetricSeries`.
5463
5661
  type probe_metric_series = {
5464
5662
  "label" => String,
@@ -7681,6 +7879,7 @@ module Infrawrench
7681
7879
  | "probes"
7682
7880
  | "status-pages"
7683
7881
  | "quotas"
7882
+ | "price-catalog"
7684
7883
  | "incidents"
7685
7884
  | "workflows"
7686
7885
  | "deployments"
@@ -8363,6 +8562,9 @@ module Infrawrench
8363
8562
  def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[cost_export]
8364
8563
  def run: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_export_run_result
8365
8564
  def update: (id: String, body: cost_export_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_export
8565
+ def warehouse_options: (body: { "accountId" => String, "field" => String, ?"target" => Hash[String, String] }, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "options" => Array[cost_export_warehouse_option] }
8566
+ def warehouse_setup: (body: { "accountId" => String, ?"target" => Hash[String, String] }, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_export_warehouse_setup
8567
+ def warehouse_sinks: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "sinks" => Array[cost_export_warehouse_sink] }
8366
8568
  end
8367
8569
 
8368
8570
  class CostReportFoldersNamespace
@@ -8447,6 +8649,7 @@ module Infrawrench
8447
8649
  def initialize: (Transport) -> void
8448
8650
  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
8449
8651
  def efficiency_alerts: (?org_id: String?, ?kind: "commitment_expiry" | "commitment_idle" | "unit_cost_regression"?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> { "events" => Array[efficiency_alert_event] }
8652
+ def focus_export: (body: focus_export_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> String
8450
8653
  def query: (body: cost_query_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_query_response
8451
8654
  def rows: (body: cost_push_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_push_response
8452
8655
  def showback: (?org_id: String?, ?from: String?, ?to: String?, ?basis: "cash" | "amortized"?, ?adjusted: "true" | "false"?, ?request_options: Hash[Symbol, untyped]?) -> showback_report
@@ -8884,6 +9087,13 @@ module Infrawrench
8884
9087
  def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> posture_list_response
8885
9088
  end
8886
9089
 
9090
+ class PriceCatalogNamespace
9091
+ def initialize: (Transport) -> void
9092
+ def compare: (?org_id: String?, ?vcpus: String?, ?memory_gb: String?, ?gpu_count: String?, ?gpu_model: String?, ?reference_plugin_id: String?, ?reference_sku: String?, ?area: price_catalog_area?, ?rate_type: price_rate_type?, ?plugin_ids: String?, ?alternatives: String?, ?request_options: Hash[Symbol, untyped]?) -> price_catalog_compare_response
9093
+ def providers: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "providers" => Array[price_catalog_provider_status] }
9094
+ def search: (?org_id: String?, ?q: String?, ?plugin_ids: String?, ?service_ids: String?, ?families: String?, ?region: String?, ?area: price_catalog_area?, ?min_vcpus: String?, ?max_vcpus: String?, ?min_memory_gb: String?, ?max_memory_gb: String?, ?gpu: "any" | "required" | "none"?, ?gpu_model: String?, ?min_gpus: String?, ?max_monthly_price: String?, ?rate_type: price_rate_type?, ?term: String?, ?sort: "price" | "vcpus" | "memory" | "gpus" | "name"?, ?order: "asc" | "desc"?, ?limit: String?, ?offset: String?, ?request_options: Hash[Symbol, untyped]?) -> price_catalog_search_response
9095
+ end
9096
+
8887
9097
  class ProbesNamespace
8888
9098
  def initialize: (Transport) -> void
8889
9099
  def create: (?org_id: String?, ?body: synthetic_probe_create?, ?request_options: Hash[Symbol, untyped]?) -> synthetic_probe
@@ -9361,6 +9571,7 @@ module Infrawrench
9361
9571
  attr_reader ownership: OwnershipNamespace
9362
9572
  attr_reader pages: PagesNamespace
9363
9573
  attr_reader posture: PostureNamespace
9574
+ attr_reader price_catalog: PriceCatalogNamespace
9364
9575
  attr_reader probes: ProbesNamespace
9365
9576
  attr_reader profile: ProfileNamespace
9366
9577
  attr_reader query_monitors: QueryMonitorsNamespace
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infrawrench-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.49.0
4
+ version: 1.52.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infrawrench LLC
@@ -11,7 +11,7 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2026-10-05 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v1.49.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.52.0). Covers the published
15
15
  API surface only — operations marked x-internal in the spec are not generated. No
16
16
  runtime dependencies.
17
17
  email:
@@ -58,5 +58,5 @@ requirements: []
58
58
  rubygems_version: 3.5.22
59
59
  signing_key:
60
60
  specification_version: 4
61
- summary: Generated Ruby client for the Infrawrench API (v1.49.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.52.0).
62
62
  test_files: []