infrawrench-sdk 1.58.0 → 1.60.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: 4f2aaa8ec40402e14481ecf164ad3b726f3272d70147edee5fe7424c3b24f81d
4
- data.tar.gz: ac8b606bbc89540e3623a46218b64bb14f84175c962321b7ec2e969d4064d500
3
+ metadata.gz: 556a352a9021aed9e685ed978754c3ff101ae2e612d0078d89dd739caec08a1a
4
+ data.tar.gz: 3fcaae344285b5a84663210dbae2029c0b6eaa6e7b4e4affd465ff603311da51
5
5
  SHA512:
6
- metadata.gz: b792405dc4c76badabd8fd21e04286271332bcb222a0e38656c9324bd05f869ceadf61581650f8a5b3312ab5f61c63a81787716a21aee46d3110c3ca92d9a71f
7
- data.tar.gz: ee1738f77ca46c0e5fee8a98064a845dbe19949b22e22b5b4f986bdf8e3fde3c4ace6bee5919d2278d04b1cb53f87b5155097f6649fa6d3af1acd094da4137f4
6
+ metadata.gz: f95293d9e2352821f5c9d351e47972e2356c81226870e4a6de503f4dbf654fff4fb68a4f05b3576ef8e0e7cc5037a93be7b3f6dcfe5cfe4f739f789ad5aadf47
7
+ data.tar.gz: 5e4cb57cdc55f36ff778c7f338e47ad85f70bcba11d8617ecf5768e8f2983a82b0d0fb7f511707706dedc38d8fc40caca954ed51ac5a14fe28448bd789e3497e
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.58.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.60.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
- 841 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 858 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.58.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.60.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.58.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.60.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.58.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.58.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.60.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.60.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.58.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.60.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.58.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.60.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -3235,6 +3235,160 @@ module Infrawrench
3235
3235
  end
3236
3236
  end
3237
3237
 
3238
+ # `client.business_metrics.importer`
3239
+ class BusinessMetricsImporterNamespace
3240
+ # @api private
3241
+ # @param transport [Transport]
3242
+ def initialize(transport)
3243
+ @transport = transport
3244
+ end
3245
+
3246
+ # Delete a metric's importer
3247
+ #
3248
+ # Stops importing and drops the run history. Values already imported stay.
3249
+ #
3250
+ # _Requires permission: `costs:write`._
3251
+ #
3252
+ # DELETE /api/org/{orgId}/business-metrics/{id}/importer
3253
+ #
3254
+ # Raises on 404: Not found
3255
+ #
3256
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3257
+ # constructed with.
3258
+ # @param id [String] Metric id or key
3259
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3260
+ # @return [Hash] Parsed JSON, shaped as `Ok` — see `sig/infrawrench/sdk.rbs`.
3261
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3262
+ def delete(id:, org_id: nil, request_options: nil)
3263
+ @transport.request(
3264
+ http_method: "DELETE",
3265
+ path: "/api/org/{orgId}/business-metrics/{id}/importer",
3266
+ path_params: { "orgId" => org_id, "id" => id },
3267
+ request_options: request_options
3268
+ )
3269
+ end
3270
+
3271
+ # Get a metric's importer
3272
+ #
3273
+ # `importer` is null when the metric's values are only pushed.
3274
+ #
3275
+ # _Requires permission: `costs:read`._
3276
+ #
3277
+ # GET /api/org/{orgId}/business-metrics/{id}/importer
3278
+ #
3279
+ # Raises on 404: Not found
3280
+ #
3281
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3282
+ # constructed with.
3283
+ # @param id [String] Metric id or key
3284
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3285
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
3286
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3287
+ def get(id:, org_id: nil, request_options: nil)
3288
+ @transport.request(
3289
+ http_method: "GET",
3290
+ path: "/api/org/{orgId}/business-metrics/{id}/importer",
3291
+ path_params: { "orgId" => org_id, "id" => id },
3292
+ request_options: request_options
3293
+ )
3294
+ end
3295
+
3296
+ # Run a metric's importer now
3297
+ #
3298
+ # Runs synchronously and returns the finished run, failed or not. With no
3299
+ # body it reads the importer's own window; `from`/`to` backfill a wider one
3300
+ # (at most 730 days).
3301
+ #
3302
+ # _Requires permission: `resources:execute`._
3303
+ #
3304
+ # POST /api/org/{orgId}/business-metrics/{id}/importer/run
3305
+ #
3306
+ # Raises on 400: Bad request
3307
+ #
3308
+ # Raises on 404: Not found
3309
+ #
3310
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3311
+ # constructed with.
3312
+ # @param id [String] Metric id or key
3313
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
3314
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3315
+ # @return [Hash] Parsed JSON, shaped as `BusinessMetricImportRun` — see
3316
+ # `sig/infrawrench/sdk.rbs`.
3317
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3318
+ def run(id:, org_id: nil, body: nil, request_options: nil)
3319
+ @transport.request(
3320
+ http_method: "POST",
3321
+ path: "/api/org/{orgId}/business-metrics/{id}/importer/run",
3322
+ path_params: { "orgId" => org_id, "id" => id },
3323
+ body: body,
3324
+ request_options: request_options
3325
+ )
3326
+ end
3327
+
3328
+ # List a metric's import runs
3329
+ #
3330
+ # Newest first; the most recent 50 are kept.
3331
+ #
3332
+ # _Requires permission: `costs:read`._
3333
+ #
3334
+ # GET /api/org/{orgId}/business-metrics/{id}/importer/runs
3335
+ #
3336
+ # Raises on 400: Bad request
3337
+ #
3338
+ # Raises on 404: Not found
3339
+ #
3340
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3341
+ # constructed with.
3342
+ # @param id [String] Metric id or key
3343
+ # @param limit [Integer, nil] Default 20.
3344
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3345
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
3346
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3347
+ def runs(id:, org_id: nil, limit: nil, request_options: nil)
3348
+ @transport.request(
3349
+ http_method: "GET",
3350
+ path: "/api/org/{orgId}/business-metrics/{id}/importer/runs",
3351
+ path_params: { "orgId" => org_id, "id" => id },
3352
+ query: { "limit" => limit },
3353
+ request_options: request_options
3354
+ )
3355
+ end
3356
+
3357
+ # Create or replace a metric's importer
3358
+ #
3359
+ # One importer per metric. A full replace: omitted fields take their
3360
+ # defaults. Each run restates whole days (every label a day carried is
3361
+ # replaced by what the source returned), never touches days the source
3362
+ # returned nothing for, and ignores points outside the window. Changing the
3363
+ # account, the params or the schedule makes it due immediately.
3364
+ #
3365
+ # _Requires permission: `resources:execute`._
3366
+ #
3367
+ # PUT /api/org/{orgId}/business-metrics/{id}/importer
3368
+ #
3369
+ # Raises on 400: Bad request
3370
+ #
3371
+ # Raises on 404: Not found
3372
+ #
3373
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3374
+ # constructed with.
3375
+ # @param id [String] Metric id or key
3376
+ # @param body [Hash] Request body, shaped as `BusinessMetricImporterInput`.
3377
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3378
+ # @return [Hash] Parsed JSON, shaped as `BusinessMetricImporter & Hash` — see
3379
+ # `sig/infrawrench/sdk.rbs`.
3380
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3381
+ def update(id:, body:, org_id: nil, request_options: nil)
3382
+ @transport.request(
3383
+ http_method: "PUT",
3384
+ path: "/api/org/{orgId}/business-metrics/{id}/importer",
3385
+ path_params: { "orgId" => org_id, "id" => id },
3386
+ body: body,
3387
+ request_options: request_options
3388
+ )
3389
+ end
3390
+ end
3391
+
3238
3392
  # `client.business_metrics.values`
3239
3393
  class BusinessMetricsValuesNamespace
3240
3394
  # @api private
@@ -3311,6 +3465,8 @@ module Infrawrench
3311
3465
  class BusinessMetricsNamespace
3312
3466
  # @return [BusinessMetricsGetNamespace] `client.business_metrics.get`
3313
3467
  attr_reader :get
3468
+ # @return [BusinessMetricsImporterNamespace] `client.business_metrics.importer`
3469
+ attr_reader :importer
3314
3470
  # @return [BusinessMetricsValuesNamespace] `client.business_metrics.values`
3315
3471
  attr_reader :values
3316
3472
 
@@ -3319,6 +3475,7 @@ module Infrawrench
3319
3475
  def initialize(transport)
3320
3476
  @transport = transport
3321
3477
  @get = BusinessMetricsGetNamespace.new(@transport)
3478
+ @importer = BusinessMetricsImporterNamespace.new(@transport)
3322
3479
  @values = BusinessMetricsValuesNamespace.new(@transport)
3323
3480
  end
3324
3481
 
@@ -3379,6 +3536,92 @@ module Infrawrench
3379
3536
  )
3380
3537
  end
3381
3538
 
3539
+ # List an importer picker's choices
3540
+ #
3541
+ # Choices for one `select` field of a source's form, given the values picked
3542
+ # so far. Needs `resources:execute` and `costs:write`: it calls the provider
3543
+ # with the account's credentials.
3544
+ #
3545
+ # _Requires permission: `resources:execute`._
3546
+ #
3547
+ # POST /api/org/{orgId}/business-metrics/importer-options
3548
+ #
3549
+ # Raises on 400: Bad request
3550
+ #
3551
+ # Raises on 404: Not found
3552
+ #
3553
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3554
+ # constructed with.
3555
+ # @param body [Hash] Request body, shaped as `Hash`.
3556
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3557
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
3558
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3559
+ def importer_options(body:, org_id: nil, request_options: nil)
3560
+ @transport.request(
3561
+ http_method: "POST",
3562
+ path: "/api/org/{orgId}/business-metrics/importer-options",
3563
+ path_params: { "orgId" => org_id },
3564
+ body: body,
3565
+ request_options: request_options
3566
+ )
3567
+ end
3568
+
3569
+ # Preview an importer
3570
+ #
3571
+ # Run a source over a window and return the values it would write, writing
3572
+ # nothing; or, with `dryRun`, validate the query with the provider without
3573
+ # reading data. Read-only queries only, with the same row limit and timeout
3574
+ # as a scheduled run.
3575
+ #
3576
+ # _Requires permission: `resources:execute`._
3577
+ #
3578
+ # POST /api/org/{orgId}/business-metrics/importer-preview
3579
+ #
3580
+ # Raises on 400: Bad request
3581
+ #
3582
+ # Raises on 404: Not found
3583
+ #
3584
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3585
+ # constructed with.
3586
+ # @param body [Hash] Request body, shaped as `BusinessMetricImportPreviewRequest`.
3587
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3588
+ # @return [Hash] Parsed JSON, shaped as `BusinessMetricImportPreview` — see
3589
+ # `sig/infrawrench/sdk.rbs`.
3590
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3591
+ def importer_preview(body:, org_id: nil, request_options: nil)
3592
+ @transport.request(
3593
+ http_method: "POST",
3594
+ path: "/api/org/{orgId}/business-metrics/importer-preview",
3595
+ path_params: { "orgId" => org_id },
3596
+ body: body,
3597
+ request_options: request_options
3598
+ )
3599
+ end
3600
+
3601
+ # List importer sources
3602
+ #
3603
+ # Connected accounts whose plugin can feed a business metric on a schedule,
3604
+ # each with the plugin's importer form: which fields to fill and which are
3605
+ # pickers.
3606
+ #
3607
+ # _Requires permission: `costs:read`._
3608
+ #
3609
+ # GET /api/org/{orgId}/business-metrics/importer-sources
3610
+ #
3611
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
3612
+ # constructed with.
3613
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
3614
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
3615
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
3616
+ def importer_sources(org_id: nil, request_options: nil)
3617
+ @transport.request(
3618
+ http_method: "GET",
3619
+ path: "/api/org/{orgId}/business-metrics/importer-sources",
3620
+ path_params: { "orgId" => org_id },
3621
+ request_options: request_options
3622
+ )
3623
+ end
3624
+
3382
3625
  # Query unit costs or margin
3383
3626
  #
3384
3627
  # Divide spend by the metric, bucketed as asked. Three properties of the
@@ -7397,6 +7640,293 @@ module Infrawrench
7397
7640
  end
7398
7641
  end
7399
7642
 
7643
+ # `client.custom_cost_sources.uploads`
7644
+ class CustomCostSourcesUploadsNamespace
7645
+ # @api private
7646
+ # @param transport [Transport]
7647
+ def initialize(transport)
7648
+ @transport = transport
7649
+ end
7650
+
7651
+ # Finish an upload
7652
+ #
7653
+ # Applies `replace` (zeroing this source's rows from other uploads in the
7654
+ # range) and records what the upload holds.
7655
+ #
7656
+ # _Requires permission: `costs:write`._
7657
+ #
7658
+ # POST /api/org/{orgId}/custom-cost-sources/{id}/uploads/{uploadId}/complete
7659
+ #
7660
+ # Raises on 400: Already complete
7661
+ #
7662
+ # Raises on 404: Not found
7663
+ #
7664
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7665
+ # constructed with.
7666
+ # @param id [String]
7667
+ # @param upload_id [String]
7668
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7669
+ # @return [Hash] Parsed JSON, shaped as `CustomCostUpload` — see `sig/infrawrench/sdk.rbs`.
7670
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7671
+ def complete(id:, upload_id:, org_id: nil, request_options: nil)
7672
+ @transport.request(
7673
+ http_method: "POST",
7674
+ path: "/api/org/{orgId}/custom-cost-sources/{id}/uploads/{uploadId}/complete",
7675
+ path_params: { "orgId" => org_id, "id" => id, "uploadId" => upload_id },
7676
+ request_options: request_options
7677
+ )
7678
+ end
7679
+
7680
+ # Start an upload
7681
+ #
7682
+ # Declares the upload's date range and what happens to spend already held in
7683
+ # it. Then send rows with `…/rows` (up to 5,000 per call) and finish with
7684
+ # `…/complete`.
7685
+ #
7686
+ # _Requires permission: `costs:write`._
7687
+ #
7688
+ # POST /api/org/{orgId}/custom-cost-sources/{id}/uploads
7689
+ #
7690
+ # Raises on 400: Bad request
7691
+ #
7692
+ # Raises on 404: Not found
7693
+ #
7694
+ # Raises on 409: The range overlaps earlier uploads and no `mode` was given
7695
+ #
7696
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7697
+ # constructed with.
7698
+ # @param id [String]
7699
+ # @param body [Hash] Request body, shaped as `CustomCostUploadCreate`.
7700
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7701
+ # @return [Hash] Parsed JSON, shaped as `CustomCostUpload` — see `sig/infrawrench/sdk.rbs`.
7702
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7703
+ def create(id:, body:, org_id: nil, request_options: nil)
7704
+ @transport.request(
7705
+ http_method: "POST",
7706
+ path: "/api/org/{orgId}/custom-cost-sources/{id}/uploads",
7707
+ path_params: { "orgId" => org_id, "id" => id },
7708
+ body: body,
7709
+ request_options: request_options
7710
+ )
7711
+ end
7712
+
7713
+ # Delete an upload and the rows it wrote
7714
+ #
7715
+ # _Requires permission: `costs:write`._
7716
+ #
7717
+ # DELETE /api/org/{orgId}/custom-cost-sources/{id}/uploads/{uploadId}
7718
+ #
7719
+ # Raises on 404: Not found
7720
+ #
7721
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7722
+ # constructed with.
7723
+ # @param id [String]
7724
+ # @param upload_id [String]
7725
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7726
+ # @return [Hash] Parsed JSON, shaped as `CustomCostDeleted` — see `sig/infrawrench/sdk.rbs`.
7727
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7728
+ def delete(id:, upload_id:, org_id: nil, request_options: nil)
7729
+ @transport.request(
7730
+ http_method: "DELETE",
7731
+ path: "/api/org/{orgId}/custom-cost-sources/{id}/uploads/{uploadId}",
7732
+ path_params: { "orgId" => org_id, "id" => id, "uploadId" => upload_id },
7733
+ request_options: request_options
7734
+ )
7735
+ end
7736
+
7737
+ # List a source's uploads
7738
+ #
7739
+ # _Requires permission: `costs:read`._
7740
+ #
7741
+ # GET /api/org/{orgId}/custom-cost-sources/{id}/uploads
7742
+ #
7743
+ # Raises on 404: Not found
7744
+ #
7745
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7746
+ # constructed with.
7747
+ # @param id [String]
7748
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7749
+ # @return [Array<Hash>] Parsed JSON, shaped as `Array<CustomCostUpload>` — see
7750
+ # `sig/infrawrench/sdk.rbs`.
7751
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7752
+ def list(id:, org_id: nil, request_options: nil)
7753
+ @transport.request(
7754
+ http_method: "GET",
7755
+ path: "/api/org/{orgId}/custom-cost-sources/{id}/uploads",
7756
+ path_params: { "orgId" => org_id, "id" => id },
7757
+ request_options: request_options
7758
+ )
7759
+ end
7760
+
7761
+ # Send a chunk of rows to an open upload
7762
+ #
7763
+ # The chunk is validated whole: a 400 means none of it was written.
7764
+ #
7765
+ # _Requires permission: `costs:write`._
7766
+ #
7767
+ # POST /api/org/{orgId}/custom-cost-sources/{id}/uploads/{uploadId}/rows
7768
+ #
7769
+ # Raises on 400: Bad request
7770
+ #
7771
+ # Raises on 404: Not found
7772
+ #
7773
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7774
+ # constructed with.
7775
+ # @param id [String]
7776
+ # @param upload_id [String]
7777
+ # @param body [Hash] Request body, shaped as `Hash`.
7778
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7779
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
7780
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7781
+ def rows(id:, upload_id:, body:, org_id: nil, request_options: nil)
7782
+ @transport.request(
7783
+ http_method: "POST",
7784
+ path: "/api/org/{orgId}/custom-cost-sources/{id}/uploads/{uploadId}/rows",
7785
+ path_params: { "orgId" => org_id, "id" => id, "uploadId" => upload_id },
7786
+ body: body,
7787
+ request_options: request_options
7788
+ )
7789
+ end
7790
+ end
7791
+
7792
+ # `client.custom_cost_sources`
7793
+ class CustomCostSourcesNamespace
7794
+ # @return [CustomCostSourcesUploadsNamespace] `client.custom_cost_sources.uploads`
7795
+ attr_reader :uploads
7796
+
7797
+ # @api private
7798
+ # @param transport [Transport]
7799
+ def initialize(transport)
7800
+ @transport = transport
7801
+ @uploads = CustomCostSourcesUploadsNamespace.new(@transport)
7802
+ end
7803
+
7804
+ # Create a custom cost source
7805
+ #
7806
+ # A named provider for spend Infrawrench has no plugin for. Fill it by
7807
+ # uploading files (CSV or FOCUS) from Settings, `infrawrench costs push
7808
+ # --format csv|focus`, or the upload endpoints below.
7809
+ #
7810
+ # _Requires permission: `costs:write`._
7811
+ #
7812
+ # POST /api/org/{orgId}/custom-cost-sources
7813
+ #
7814
+ # Raises on 400: Bad request
7815
+ #
7816
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7817
+ # constructed with.
7818
+ # @param body [Hash] Request body, shaped as `CustomCostSourceInput`.
7819
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7820
+ # @return [Hash] Parsed JSON, shaped as `CustomCostSource` — see `sig/infrawrench/sdk.rbs`.
7821
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7822
+ def create(body:, org_id: nil, request_options: nil)
7823
+ @transport.request(
7824
+ http_method: "POST",
7825
+ path: "/api/org/{orgId}/custom-cost-sources",
7826
+ path_params: { "orgId" => org_id },
7827
+ body: body,
7828
+ request_options: request_options
7829
+ )
7830
+ end
7831
+
7832
+ # Delete a custom cost source and all of its spend
7833
+ #
7834
+ # Zeroes every cost row the source holds, then deletes it with its upload
7835
+ # history. The spend disappears from every report, budget and export.
7836
+ #
7837
+ # _Requires permission: `costs:write`._
7838
+ #
7839
+ # DELETE /api/org/{orgId}/custom-cost-sources/{id}
7840
+ #
7841
+ # Raises on 404: Not found
7842
+ #
7843
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7844
+ # constructed with.
7845
+ # @param id [String]
7846
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7847
+ # @return [Hash] Parsed JSON, shaped as `CustomCostDeleted` — see `sig/infrawrench/sdk.rbs`.
7848
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7849
+ def delete(id:, org_id: nil, request_options: nil)
7850
+ @transport.request(
7851
+ http_method: "DELETE",
7852
+ path: "/api/org/{orgId}/custom-cost-sources/{id}",
7853
+ path_params: { "orgId" => org_id, "id" => id },
7854
+ request_options: request_options
7855
+ )
7856
+ end
7857
+
7858
+ # Get a custom cost source
7859
+ #
7860
+ # _Requires permission: `costs:read`._
7861
+ #
7862
+ # GET /api/org/{orgId}/custom-cost-sources/{id}
7863
+ #
7864
+ # Raises on 404: Not found
7865
+ #
7866
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7867
+ # constructed with.
7868
+ # @param id [String]
7869
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7870
+ # @return [Hash] Parsed JSON, shaped as `CustomCostSource` — see `sig/infrawrench/sdk.rbs`.
7871
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7872
+ def get(id:, org_id: nil, request_options: nil)
7873
+ @transport.request(
7874
+ http_method: "GET",
7875
+ path: "/api/org/{orgId}/custom-cost-sources/{id}",
7876
+ path_params: { "orgId" => org_id, "id" => id },
7877
+ request_options: request_options
7878
+ )
7879
+ end
7880
+
7881
+ # List custom cost sources
7882
+ #
7883
+ # _Requires permission: `costs:read`._
7884
+ #
7885
+ # GET /api/org/{orgId}/custom-cost-sources
7886
+ #
7887
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7888
+ # constructed with.
7889
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7890
+ # @return [Array<Hash>] Parsed JSON, shaped as `Array<CustomCostSource>` — see
7891
+ # `sig/infrawrench/sdk.rbs`.
7892
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7893
+ def list(org_id: nil, request_options: nil)
7894
+ @transport.request(
7895
+ http_method: "GET",
7896
+ path: "/api/org/{orgId}/custom-cost-sources",
7897
+ path_params: { "orgId" => org_id },
7898
+ request_options: request_options
7899
+ )
7900
+ end
7901
+
7902
+ # Update a custom cost source
7903
+ #
7904
+ # _Requires permission: `costs:write`._
7905
+ #
7906
+ # PUT /api/org/{orgId}/custom-cost-sources/{id}
7907
+ #
7908
+ # Raises on 400: Bad request
7909
+ #
7910
+ # Raises on 404: Not found
7911
+ #
7912
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
7913
+ # constructed with.
7914
+ # @param id [String]
7915
+ # @param body [Hash] Request body, shaped as `CustomCostSourceInput`.
7916
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
7917
+ # @return [Hash] Parsed JSON, shaped as `CustomCostSource` — see `sig/infrawrench/sdk.rbs`.
7918
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
7919
+ def update(id:, body:, org_id: nil, request_options: nil)
7920
+ @transport.request(
7921
+ http_method: "PUT",
7922
+ path: "/api/org/{orgId}/custom-cost-sources/{id}",
7923
+ path_params: { "orgId" => org_id, "id" => id },
7924
+ body: body,
7925
+ request_options: request_options
7926
+ )
7927
+ end
7928
+ end
7929
+
7400
7930
  # `client.custom_graphs`
7401
7931
  class CustomGraphsNamespace
7402
7932
  # @api private
@@ -18954,6 +19484,8 @@ module Infrawrench
18954
19484
  attr_reader :credits
18955
19485
  # @return [CurrencyNamespace] `client.currency`
18956
19486
  attr_reader :currency
19487
+ # @return [CustomCostSourcesNamespace] `client.custom_cost_sources`
19488
+ attr_reader :custom_cost_sources
18957
19489
  # @return [CustomGraphsNamespace] `client.custom_graphs`
18958
19490
  attr_reader :custom_graphs
18959
19491
  # @return [DashboardNotificationsNamespace] `client.dashboard_notifications`
@@ -19127,6 +19659,7 @@ module Infrawrench
19127
19659
  @credential_hygiene = CredentialHygieneNamespace.new(@transport)
19128
19660
  @credits = CreditsNamespace.new(@transport)
19129
19661
  @currency = CurrencyNamespace.new(@transport)
19662
+ @custom_cost_sources = CustomCostSourcesNamespace.new(@transport)
19130
19663
  @custom_graphs = CustomGraphsNamespace.new(@transport)
19131
19664
  @dashboard_notifications = DashboardNotificationsNamespace.new(@transport)
19132
19665
  @dashboards = DashboardsNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.58.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.60.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.58.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.60.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.58.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.60.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.58.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.60.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.58.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.60.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.58.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.60.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.58.0"
18
+ VERSION = "1.60.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.58.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.60.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.58.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.60.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.58.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.60.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.58.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.60.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1241,7 +1241,8 @@ module Infrawrench
1241
1241
  "createdByUserId" => String | nil,
1242
1242
  "createdAt" => String,
1243
1243
  "updatedAt" => String,
1244
- "coverage" => business_metric_coverage
1244
+ "coverage" => business_metric_coverage,
1245
+ "importer" => business_metric_importer_summary
1245
1246
  }
1246
1247
 
1247
1248
  # Null when the metric has no values at all — not an error, but every
@@ -1250,6 +1251,108 @@ module Infrawrench
1250
1251
  # Spec schema: `BusinessMetricCoverage`.
1251
1252
  type business_metric_coverage = { "firstDay" => String, "lastDay" => String, "reportedDays" => Integer } | nil
1252
1253
 
1254
+ # How several points the source returns for one day (and label) become that
1255
+ # day's value. A SQL query grouped by day returns one row per day and every
1256
+ # choice agrees.
1257
+ #
1258
+ # Spec schema: `BusinessMetricImportAggregation`.
1259
+ type business_metric_import_aggregation = "sum" | "average" | "min" | "max" | "last" | "count"
1260
+
1261
+ # Spec schema: `BusinessMetricImportPreview`.
1262
+ type business_metric_import_preview = {
1263
+ "from" => String,
1264
+ "to" => String,
1265
+ "values" => Array[{ "date" => String, "value" => Numeric, ?"label" => String }],
1266
+ "pointsRead" => Integer,
1267
+ "days" => Integer,
1268
+ "notes" => Array[String],
1269
+ "durationMs" => Integer,
1270
+ ?"dryRun" => { "valid" => bool, "message" => String, ?"bytesProcessed" => Numeric }
1271
+ }
1272
+
1273
+ # Spec schema: `BusinessMetricImportPreviewRequest`.
1274
+ type business_metric_import_preview_request = {
1275
+ "accountId" => String,
1276
+ "params" => Hash[String, String],
1277
+ ?"from" => String,
1278
+ ?"to" => String,
1279
+ ?"timezone" => String,
1280
+ ?"aggregation" => business_metric_import_aggregation,
1281
+ ?"dryRun" => bool
1282
+ }
1283
+
1284
+ # Spec schema: `BusinessMetricImportRun`.
1285
+ type business_metric_import_run = {
1286
+ "id" => String,
1287
+ "importerId" => String,
1288
+ "trigger" => "schedule" | "manual",
1289
+ "status" => "running" | "success" | "error",
1290
+ "from" => String,
1291
+ "to" => String,
1292
+ "pointsRead" => Integer,
1293
+ "daysWritten" => Integer,
1294
+ "error" => String | nil,
1295
+ "notes" => Array[String],
1296
+ "startedAt" => String,
1297
+ "finishedAt" => String | nil,
1298
+ "durationMs" => Integer | nil
1299
+ }
1300
+
1301
+ # Spec schema: `BusinessMetricImportSchedule`.
1302
+ type business_metric_import_schedule = "every_6_hours" | "every_12_hours" | "daily" | "weekly"
1303
+
1304
+ # Spec schema: `BusinessMetricImporter`.
1305
+ type business_metric_importer = {
1306
+ "id" => String,
1307
+ "metricId" => String,
1308
+ "accountId" => String,
1309
+ "accountName" => String | nil,
1310
+ "pluginId" => String | nil,
1311
+ "sourceLabel" => String | nil,
1312
+ "params" => Hash[String, String],
1313
+ "schedule" => business_metric_import_schedule,
1314
+ "backfillDays" => Integer,
1315
+ "timezone" => String,
1316
+ "aggregation" => business_metric_import_aggregation,
1317
+ "enabled" => bool,
1318
+ "nextRunAt" => String | nil,
1319
+ "lastRunAt" => String | nil,
1320
+ "lastStatus" => "success" | "error" | nil,
1321
+ "lastError" => String | nil,
1322
+ "consecutiveFailures" => Integer,
1323
+ "createdByUserId" => String | nil,
1324
+ "createdAt" => String,
1325
+ "updatedAt" => String
1326
+ }
1327
+ | nil
1328
+
1329
+ # Spec schema: `BusinessMetricImporterInput`.
1330
+ type business_metric_importer_input = {
1331
+ "accountId" => String,
1332
+ "params" => Hash[String, String],
1333
+ ?"schedule" => business_metric_import_schedule & untyped,
1334
+ ?"backfillDays" => Integer,
1335
+ ?"timezone" => String,
1336
+ ?"aggregation" => business_metric_import_aggregation,
1337
+ ?"enabled" => bool
1338
+ }
1339
+
1340
+ # The scheduled importer feeding this metric, or null when its values are only
1341
+ # pushed.
1342
+ #
1343
+ # Spec schema: `BusinessMetricImporterSummary`.
1344
+ type business_metric_importer_summary = {
1345
+ "accountId" => String,
1346
+ "accountName" => String | nil,
1347
+ "pluginId" => String | nil,
1348
+ "sourceLabel" => String | nil,
1349
+ "enabled" => bool,
1350
+ "lastRunAt" => String | nil,
1351
+ "lastStatus" => "success" | "error" | nil,
1352
+ "lastError" => String | nil
1353
+ }
1354
+ | nil
1355
+
1253
1356
  # Spec schema: `BusinessMetricInput`.
1254
1357
  type business_metric_input = {
1255
1358
  "key" => String,
@@ -1286,11 +1389,48 @@ module Infrawrench
1286
1389
  ?"tagKey" => String
1287
1390
  }
1288
1391
 
1392
+ # Spec schema: `BusinessMetricSourceAccount`.
1393
+ type business_metric_source_account = {
1394
+ "accountId" => String,
1395
+ "accountName" => String,
1396
+ "pluginId" => String,
1397
+ "pluginName" => String,
1398
+ "source" => {
1399
+ "label" => String,
1400
+ ?"description" => String,
1401
+ "kind" => "sql" | "metric",
1402
+ "fields" => Array[business_metric_source_field],
1403
+ ?"sqlDialect" => String,
1404
+ ?"readOnly" => "enforced" | "validated",
1405
+ ?"supportsDryRun" => bool
1406
+ }
1407
+ }
1408
+
1409
+ # Spec schema: `BusinessMetricSourceField`.
1410
+ type business_metric_source_field = {
1411
+ "key" => String,
1412
+ "label" => String,
1413
+ "type" => "select" | "sql" | "text" | "number",
1414
+ ?"required" => bool,
1415
+ ?"description" => String,
1416
+ ?"placeholder" => String,
1417
+ ?"defaultValue" => String,
1418
+ ?"options" => Array[{ "id" => String, "label" => String, ?"description" => String }],
1419
+ ?"dependsOn" => Array[String],
1420
+ ?"allowCustom" => bool
1421
+ }
1422
+
1289
1423
  # Spec schema: `BusinessMetricValue`.
1290
- type business_metric_value = { "day" => String, "value" => Numeric, "source" => "api" | "workflow", "updatedAt" => String }
1424
+ type business_metric_value = {
1425
+ "day" => String,
1426
+ "value" => Numeric,
1427
+ "label" => String | nil,
1428
+ "source" => "api" | "workflow" | "import",
1429
+ "updatedAt" => String
1430
+ }
1291
1431
 
1292
1432
  # Spec schema: `BusinessMetricValuesInput`.
1293
- type business_metric_values_input = { "values" => Array[{ "date" => String, "value" => Numeric }] }
1433
+ type business_metric_values_input = { "values" => Array[{ "date" => String, "value" => Numeric, ?"label" => String }] }
1294
1434
 
1295
1435
  # Spec schema: `CalendarEvent`.
1296
1436
  type calendar_event = {
@@ -2904,6 +3044,86 @@ module Infrawrench
2904
3044
  # Spec schema: `CurrencySettings`.
2905
3045
  type currency_settings = { "displayCurrency" => String | nil }
2906
3046
 
3047
+ # Spec schema: `CustomCostDeleted`.
3048
+ type custom_cost_deleted = { "ok" => bool, "zeroedRows" => Integer }
3049
+
3050
+ # Spec schema: `CustomCostOverlap`.
3051
+ type custom_cost_overlap = { "error" => String, "code" => "overlap", "overlapping" => Array[custom_cost_upload] }
3052
+
3053
+ # One day of spend for one dimension combination. Clients aggregate file lines
3054
+ # to this grain before sending: two rows with the same date, dimensions, tags
3055
+ # and currency in one upload replace each other rather than adding.
3056
+ #
3057
+ # Spec schema: `CustomCostRow`.
3058
+ type custom_cost_row = {
3059
+ "date" => String,
3060
+ "currency" => String,
3061
+ "amount" => Numeric,
3062
+ ?"service" => String,
3063
+ ?"region" => String,
3064
+ ?"resourceId" => String,
3065
+ ?"subAccount" => String,
3066
+ ?"tags" => Hash[String, String],
3067
+ ?"usageAmount" => Numeric,
3068
+ ?"usageUnit" => String,
3069
+ ?"chargeType" => "usage"
3070
+ | "commitment_covered_usage"
3071
+ | "commitment_fee"
3072
+ | "commitment_discount"
3073
+ | "credit"
3074
+ | "tax"
3075
+ | "refund"
3076
+ | "adjustment"
3077
+ | "support"
3078
+ | "other",
3079
+ ?"amortizedAmount" => Numeric,
3080
+ ?"commitmentId" => String
3081
+ }
3082
+
3083
+ # Spec schema: `CustomCostSource`.
3084
+ type custom_cost_source = {
3085
+ "id" => String,
3086
+ "name" => String,
3087
+ "description" => String | nil,
3088
+ "defaultCurrency" => String | nil,
3089
+ "pluginId" => String,
3090
+ "uploadCount" => Integer,
3091
+ "lastUploadAt" => String | nil,
3092
+ "createdAt" => String,
3093
+ "updatedAt" => String
3094
+ }
3095
+
3096
+ # Spec schema: `CustomCostSourceInput`.
3097
+ type custom_cost_source_input = { "name" => String, ?"description" => String | nil, ?"defaultCurrency" => String | nil }
3098
+
3099
+ # Spec schema: `CustomCostUpload`.
3100
+ type custom_cost_upload = {
3101
+ "id" => String,
3102
+ "sourceId" => String,
3103
+ "fileName" => String | nil,
3104
+ "format" => "csv" | "focus" | "rows",
3105
+ "mode" => "append" | "replace",
3106
+ "status" => "uploading" | "complete" | "replaced",
3107
+ "fromDate" => String,
3108
+ "toDate" => String,
3109
+ "rowCount" => Integer,
3110
+ "totals" => Hash[String, Numeric],
3111
+ "uploadedBy" => { "id" => String, "name" => String | nil, "email" => String | nil } | nil,
3112
+ "via" => "web" | "desktop" | "cli" | "api",
3113
+ "createdAt" => String,
3114
+ "completedAt" => String | nil
3115
+ }
3116
+
3117
+ # Spec schema: `CustomCostUploadCreate`.
3118
+ type custom_cost_upload_create = {
3119
+ ?"fileName" => String | nil,
3120
+ "format" => "csv" | "focus" | "rows",
3121
+ ?"mode" => "append" | "replace",
3122
+ ?"via" => "web" | "desktop" | "cli" | "api",
3123
+ "fromDate" => String,
3124
+ "toDate" => String
3125
+ }
3126
+
2907
3127
  # Spec schema: `CustomGraphCheckRequest`.
2908
3128
  type custom_graph_check_request = { "source" => String }
2909
3129
 
@@ -5972,6 +6192,7 @@ module Infrawrench
5972
6192
  | "kubernetes"
5973
6193
  | "linode"
5974
6194
  | "memcached"
6195
+ | "metronome"
5975
6196
  | "mistral"
5976
6197
  | "modal"
5977
6198
  | "mongodb"
@@ -6995,6 +7216,7 @@ module Infrawrench
6995
7216
  | "bigquery-dataset"
6996
7217
  | "bigquery-table"
6997
7218
  | "bigtable-instance"
7219
+ | "billable-metric"
6998
7220
  | "billing-account"
6999
7221
  | "billing-group"
7000
7222
  | "block-volume"
@@ -7062,6 +7284,7 @@ module Infrawrench
7062
7284
  | "custom-enrichment"
7063
7285
  | "custom-hostname"
7064
7286
  | "custom-voice"
7287
+ | "customer"
7065
7288
  | "d1-database"
7066
7289
  | "dashboard"
7067
7290
  | "database"
@@ -9121,6 +9344,15 @@ module Infrawrench
9121
9344
  def get_org_org_id_business_metrics_id: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> business_metric
9122
9345
  end
9123
9346
 
9347
+ class BusinessMetricsImporterNamespace
9348
+ def initialize: (Transport) -> void
9349
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
9350
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "importer" => business_metric_importer }
9351
+ def run: (id: String, ?org_id: String?, ?body: { ?"from" => String, ?"to" => String }?, ?request_options: Hash[Symbol, untyped]?) -> business_metric_import_run
9352
+ def runs: (id: String, ?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> { "runs" => Array[business_metric_import_run] }
9353
+ def update: (id: String, body: business_metric_importer_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> (business_metric_importer & Hash[String, untyped])
9354
+ end
9355
+
9124
9356
  class BusinessMetricsValuesNamespace
9125
9357
  def initialize: (Transport) -> void
9126
9358
  def create: (id: String, body: business_metric_values_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "written" => Integer }
@@ -9129,10 +9361,14 @@ module Infrawrench
9129
9361
 
9130
9362
  class BusinessMetricsNamespace
9131
9363
  attr_reader get: BusinessMetricsGetNamespace
9364
+ attr_reader importer: BusinessMetricsImporterNamespace
9132
9365
  attr_reader values: BusinessMetricsValuesNamespace
9133
9366
  def initialize: (Transport) -> void
9134
9367
  def create: (body: business_metric_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> business_metric
9135
9368
  def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
9369
+ def importer_options: (body: { "accountId" => String, "fieldKey" => String, "params" => Hash[String, String] }, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "options" => Array[{ "id" => String, "label" => String, ?"description" => String }] }
9370
+ def importer_preview: (body: business_metric_import_preview_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> business_metric_import_preview
9371
+ def importer_sources: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "sources" => Array[business_metric_source_account] }
9136
9372
  def unit_costs: (id: String, body: unit_cost_query_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> unit_cost_query_response
9137
9373
  def update: (id: String, body: business_metric_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> business_metric
9138
9374
  end
@@ -9419,6 +9655,25 @@ module Infrawrench
9419
9655
  def update: (body: currency_settings, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> currency_settings
9420
9656
  end
9421
9657
 
9658
+ class CustomCostSourcesUploadsNamespace
9659
+ def initialize: (Transport) -> void
9660
+ def complete: (id: String, upload_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_cost_upload
9661
+ def create: (id: String, body: custom_cost_upload_create, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_cost_upload
9662
+ def delete: (id: String, upload_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_cost_deleted
9663
+ def list: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[custom_cost_upload]
9664
+ def rows: (id: String, upload_id: String, body: { "rows" => Array[custom_cost_row] }, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "written" => Integer }
9665
+ end
9666
+
9667
+ class CustomCostSourcesNamespace
9668
+ attr_reader uploads: CustomCostSourcesUploadsNamespace
9669
+ def initialize: (Transport) -> void
9670
+ def create: (body: custom_cost_source_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_cost_source
9671
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_cost_deleted
9672
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_cost_source
9673
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[custom_cost_source]
9674
+ def update: (id: String, body: custom_cost_source_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_cost_source
9675
+ end
9676
+
9422
9677
  class CustomGraphsNamespace
9423
9678
  def initialize: (Transport) -> void
9424
9679
  def check: (body: custom_graph_check_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> custom_graph_check_result
@@ -10300,6 +10555,7 @@ module Infrawrench
10300
10555
  attr_reader credential_hygiene: CredentialHygieneNamespace
10301
10556
  attr_reader credits: CreditsNamespace
10302
10557
  attr_reader currency: CurrencyNamespace
10558
+ attr_reader custom_cost_sources: CustomCostSourcesNamespace
10303
10559
  attr_reader custom_graphs: CustomGraphsNamespace
10304
10560
  attr_reader dashboard_notifications: DashboardNotificationsNamespace
10305
10561
  attr_reader dashboards: DashboardsNamespace
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.58.0
4
+ version: 1.60.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.58.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.60.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.58.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.60.0).
62
62
  test_files: []