infrawrench-sdk 1.54.0 → 1.55.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: 463e94dc51095c54a6662ad50cb3087ced6c2db018add5bb39336b8999f9768b
4
- data.tar.gz: 7b047ad353bcdde716b235c88174cd268fd15a765126c1fafa3e67977110bb6a
3
+ metadata.gz: 8fc4c8f39d0367833ba8cb129d5f738efe4e2f26df0968afe58382a5c748a918
4
+ data.tar.gz: 5f05dadf135c2b6ab268b36bc7d982d4d41aae8a2ec5756f5e41f8bfb56614fd
5
5
  SHA512:
6
- metadata.gz: c386b384a041000683d50fe9afd269693d350a5ed51a22694d56f95befe05e4e13fda12e12e0918712407abf6ceb0bd74cc4006d0daa02777a5889af5f902198
7
- data.tar.gz: 646702db4dfc50a3ea83928cb3aa0f16ee2fde6e3aadcc913db382f41c2f21e30011cf1ea999216685c4fe103fdd1d06f8d2e30c327c552336c3f63ff60cbca6
6
+ metadata.gz: 78601f4ae638adfb83788ea4f89dfbe78265462206145bdb78b575e7afe9483691f8640d0322e725d6fedf6e43569ec26f45bf5418f3d6fe05f7fd58955cab6f
7
+ data.tar.gz: bfc444ab1e485fed0801b337d2673e8afde9b9a99b9d8f91b3690d51251c1585e5c16525c8f0bdf340f7743f613e081955c42fc076acffa5511d00560052a9d9
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.54.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.55.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
- 813 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 823 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.54.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.55.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.54.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.55.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.54.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v1.54.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.55.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.55.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.54.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.55.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.54.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.55.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -4469,6 +4469,444 @@ module Infrawrench
4469
4469
  end
4470
4470
  end
4471
4471
 
4472
+ # `client.cost_canvases.notifications`
4473
+ class CostCanvasesNotificationsNamespace
4474
+ # @api private
4475
+ # @param transport [Transport]
4476
+ def initialize(transport)
4477
+ @transport = transport
4478
+ end
4479
+
4480
+ # Create a canvas delivery schedule
4481
+ #
4482
+ # _Requires permission: `org:settings:write`._
4483
+ #
4484
+ # POST /api/org/{orgId}/cost-canvases/{id}/notifications
4485
+ #
4486
+ # Raises on 400: Bad request
4487
+ #
4488
+ # Raises on 404: Not found
4489
+ #
4490
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4491
+ # constructed with.
4492
+ # @param id [String]
4493
+ # @param body [Hash] Request body, shaped as `DashboardNotificationInput`.
4494
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4495
+ # @return [Hash] Parsed JSON, shaped as `CostCanvasNotification` — see
4496
+ # `sig/infrawrench/sdk.rbs`.
4497
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4498
+ def create(id:, body:, org_id: nil, request_options: nil)
4499
+ @transport.request(
4500
+ http_method: "POST",
4501
+ path: "/api/org/{orgId}/cost-canvases/{id}/notifications",
4502
+ path_params: { "orgId" => org_id, "id" => id },
4503
+ body: body,
4504
+ request_options: request_options
4505
+ )
4506
+ end
4507
+
4508
+ # Delete a canvas delivery schedule
4509
+ #
4510
+ # _Requires permission: `org:settings:write`._
4511
+ #
4512
+ # DELETE /api/org/{orgId}/cost-canvases/{id}/notifications/{notificationId}
4513
+ #
4514
+ # Raises on 404: Not found
4515
+ #
4516
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4517
+ # constructed with.
4518
+ # @param id [String]
4519
+ # @param notification_id [String]
4520
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4521
+ # @return [Hash] Parsed JSON, shaped as `Ok` — see `sig/infrawrench/sdk.rbs`.
4522
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4523
+ def delete(id:, notification_id:, org_id: nil, request_options: nil)
4524
+ @transport.request(
4525
+ http_method: "DELETE",
4526
+ path: "/api/org/{orgId}/cost-canvases/{id}/notifications/{notificationId}",
4527
+ path_params: { "orgId" => org_id, "id" => id, "notificationId" => notification_id },
4528
+ request_options: request_options
4529
+ )
4530
+ end
4531
+
4532
+ # List a canvas's delivery schedules
4533
+ #
4534
+ # _Requires permission: `costs:read`._
4535
+ #
4536
+ # GET /api/org/{orgId}/cost-canvases/{id}/notifications
4537
+ #
4538
+ # Raises on 404: Not found
4539
+ #
4540
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4541
+ # constructed with.
4542
+ # @param id [String]
4543
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4544
+ # @return [Array<Hash>] Parsed JSON, shaped as `Array<CostCanvasNotification>` — see
4545
+ # `sig/infrawrench/sdk.rbs`.
4546
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4547
+ def list(id:, org_id: nil, request_options: nil)
4548
+ @transport.request(
4549
+ http_method: "GET",
4550
+ path: "/api/org/{orgId}/cost-canvases/{id}/notifications",
4551
+ path_params: { "orgId" => org_id, "id" => id },
4552
+ request_options: request_options
4553
+ )
4554
+ end
4555
+
4556
+ # Send a canvas delivery now
4557
+ #
4558
+ # _Requires permission: `org:settings:write`._
4559
+ #
4560
+ # POST
4561
+ # /api/org/{orgId}/cost-canvases/{id}/notifications/{notificationId}/send
4562
+ #
4563
+ # Raises on 400: Bad request
4564
+ #
4565
+ # Raises on 404: Not found
4566
+ #
4567
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4568
+ # constructed with.
4569
+ # @param id [String]
4570
+ # @param notification_id [String]
4571
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4572
+ # @return [Hash] Parsed JSON, shaped as `DashboardNotificationSendResult` — see
4573
+ # `sig/infrawrench/sdk.rbs`.
4574
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4575
+ def post_org_org_id_cost_canvases_id_notifications_notification_id_send(
4576
+ id:,
4577
+ notification_id:,
4578
+ org_id: nil,
4579
+ request_options: nil
4580
+ )
4581
+ @transport.request(
4582
+ http_method: "POST",
4583
+ path: "/api/org/{orgId}/cost-canvases/{id}/notifications/{notificationId}/send",
4584
+ path_params: { "orgId" => org_id, "id" => id, "notificationId" => notification_id },
4585
+ request_options: request_options
4586
+ )
4587
+ end
4588
+
4589
+ # List the destinations a canvas schedule can deliver to
4590
+ #
4591
+ # _Requires permission: `org:settings:write`._
4592
+ #
4593
+ # GET /api/org/{orgId}/cost-canvases/{id}/notifications/targets
4594
+ #
4595
+ # Raises on 404: Not found
4596
+ #
4597
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4598
+ # constructed with.
4599
+ # @param id [String]
4600
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4601
+ # @return [Hash] Parsed JSON, shaped as `ReportDeliveryTargets` — see
4602
+ # `sig/infrawrench/sdk.rbs`.
4603
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4604
+ def targets(id:, org_id: nil, request_options: nil)
4605
+ @transport.request(
4606
+ http_method: "GET",
4607
+ path: "/api/org/{orgId}/cost-canvases/{id}/notifications/targets",
4608
+ path_params: { "orgId" => org_id, "id" => id },
4609
+ request_options: request_options
4610
+ )
4611
+ end
4612
+
4613
+ # Replace a canvas delivery schedule
4614
+ #
4615
+ # _Requires permission: `org:settings:write`._
4616
+ #
4617
+ # PUT /api/org/{orgId}/cost-canvases/{id}/notifications/{notificationId}
4618
+ #
4619
+ # Raises on 400: Bad request
4620
+ #
4621
+ # Raises on 404: Not found
4622
+ #
4623
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4624
+ # constructed with.
4625
+ # @param id [String]
4626
+ # @param notification_id [String]
4627
+ # @param body [Hash] Request body, shaped as `DashboardNotificationInput`.
4628
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4629
+ # @return [Hash] Parsed JSON, shaped as `CostCanvasNotification` — see
4630
+ # `sig/infrawrench/sdk.rbs`.
4631
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4632
+ def update(id:, notification_id:, body:, org_id: nil, request_options: nil)
4633
+ @transport.request(
4634
+ http_method: "PUT",
4635
+ path: "/api/org/{orgId}/cost-canvases/{id}/notifications/{notificationId}",
4636
+ path_params: { "orgId" => org_id, "id" => id, "notificationId" => notification_id },
4637
+ body: body,
4638
+ request_options: request_options
4639
+ )
4640
+ end
4641
+ end
4642
+
4643
+ # `client.cost_canvases`
4644
+ class CostCanvasesNamespace
4645
+ # @return [CostCanvasesNotificationsNamespace] `client.cost_canvases.notifications`
4646
+ attr_reader :notifications
4647
+
4648
+ # @api private
4649
+ # @param transport [Transport]
4650
+ def initialize(transport)
4651
+ @transport = transport
4652
+ @notifications = CostCanvasesNotificationsNamespace.new(@transport)
4653
+ end
4654
+
4655
+ # Open the caller's editing conversation for a canvas
4656
+ #
4657
+ # _Requires permission: `costs:write`._
4658
+ #
4659
+ # POST /api/org/{orgId}/cost-canvases/{id}/conversation
4660
+ #
4661
+ # Raises on 404: Not found
4662
+ #
4663
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4664
+ # constructed with.
4665
+ # @param id [String]
4666
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
4667
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4668
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
4669
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4670
+ def conversation(id:, org_id: nil, body: nil, request_options: nil)
4671
+ @transport.request(
4672
+ http_method: "POST",
4673
+ path: "/api/org/{orgId}/cost-canvases/{id}/conversation",
4674
+ path_params: { "orgId" => org_id, "id" => id },
4675
+ body: body,
4676
+ request_options: request_options
4677
+ )
4678
+ end
4679
+
4680
+ # Create a cost canvas from a spec
4681
+ #
4682
+ # _Requires permission: `costs:write`._
4683
+ #
4684
+ # POST /api/org/{orgId}/cost-canvases
4685
+ #
4686
+ # Raises on 400: Bad request
4687
+ #
4688
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4689
+ # constructed with.
4690
+ # @param body [Hash] Request body, shaped as `CostCanvasInput`.
4691
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4692
+ # @return [Hash] Parsed JSON, shaped as `CostCanvas` — see `sig/infrawrench/sdk.rbs`.
4693
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4694
+ def create(body:, org_id: nil, request_options: nil)
4695
+ @transport.request(
4696
+ http_method: "POST",
4697
+ path: "/api/org/{orgId}/cost-canvases",
4698
+ path_params: { "orgId" => org_id },
4699
+ body: body,
4700
+ request_options: request_options
4701
+ )
4702
+ end
4703
+
4704
+ # Delete a cost canvas
4705
+ #
4706
+ # Soft delete. Its dashboard cards and delivery schedules go with it.
4707
+ #
4708
+ # _Requires permission: `costs:write`._
4709
+ #
4710
+ # DELETE /api/org/{orgId}/cost-canvases/{id}
4711
+ #
4712
+ # Raises on 404: Not found
4713
+ #
4714
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4715
+ # constructed with.
4716
+ # @param id [String]
4717
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4718
+ # @return [Hash] Parsed JSON, shaped as `Ok` — see `sig/infrawrench/sdk.rbs`.
4719
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4720
+ def delete(id:, org_id: nil, request_options: nil)
4721
+ @transport.request(
4722
+ http_method: "DELETE",
4723
+ path: "/api/org/{orgId}/cost-canvases/{id}",
4724
+ path_params: { "orgId" => org_id, "id" => id },
4725
+ request_options: request_options
4726
+ )
4727
+ end
4728
+
4729
+ # Start a canvas from a description
4730
+ #
4731
+ # Creates an empty canvas and a chat conversation linked to it. Send
4732
+ # `prompt` as the conversation's first message (`POST
4733
+ # /chat/conversations/{id}/messages`); the agent writes the spec. Needs
4734
+ # `chat:write` as well as `costs:write`.
4735
+ #
4736
+ # _Requires permission: `costs:write`._
4737
+ #
4738
+ # POST /api/org/{orgId}/cost-canvases/draft
4739
+ #
4740
+ # Raises on 400: Bad request
4741
+ #
4742
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4743
+ # constructed with.
4744
+ # @param body [Hash] Request body, shaped as `CostCanvasDraftInput`.
4745
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4746
+ # @return [Hash] Parsed JSON, shaped as `CostCanvas` — see `sig/infrawrench/sdk.rbs`.
4747
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4748
+ def draft(body:, org_id: nil, request_options: nil)
4749
+ @transport.request(
4750
+ http_method: "POST",
4751
+ path: "/api/org/{orgId}/cost-canvases/draft",
4752
+ path_params: { "orgId" => org_id },
4753
+ body: body,
4754
+ request_options: request_options
4755
+ )
4756
+ end
4757
+
4758
+ # Get a cost canvas
4759
+ #
4760
+ # _Requires permission: `costs:read`._
4761
+ #
4762
+ # GET /api/org/{orgId}/cost-canvases/{id}
4763
+ #
4764
+ # Raises on 404: Not found
4765
+ #
4766
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4767
+ # constructed with.
4768
+ # @param id [String]
4769
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4770
+ # @return [Hash] Parsed JSON, shaped as `CostCanvas` — see `sig/infrawrench/sdk.rbs`.
4771
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4772
+ def get(id:, org_id: nil, request_options: nil)
4773
+ @transport.request(
4774
+ http_method: "GET",
4775
+ path: "/api/org/{orgId}/cost-canvases/{id}",
4776
+ path_params: { "orgId" => org_id, "id" => id },
4777
+ request_options: request_options
4778
+ )
4779
+ end
4780
+
4781
+ # List cost canvases
4782
+ #
4783
+ # _Requires permission: `costs:read`._
4784
+ #
4785
+ # GET /api/org/{orgId}/cost-canvases
4786
+ #
4787
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4788
+ # constructed with.
4789
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4790
+ # @return [Array<Hash>] Parsed JSON, shaped as `Array<CostCanvas>` — see
4791
+ # `sig/infrawrench/sdk.rbs`.
4792
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4793
+ def list(org_id: nil, request_options: nil)
4794
+ @transport.request(
4795
+ http_method: "GET",
4796
+ path: "/api/org/{orgId}/cost-canvases",
4797
+ path_params: { "orgId" => org_id },
4798
+ request_options: request_options
4799
+ )
4800
+ end
4801
+
4802
+ # Export a cost canvas as a PDF
4803
+ #
4804
+ # _Requires permission: `costs:read`._
4805
+ #
4806
+ # GET /api/org/{orgId}/cost-canvases/{id}/pdf
4807
+ #
4808
+ # Raises on 404: Not found
4809
+ #
4810
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4811
+ # constructed with.
4812
+ # @param id [String]
4813
+ # @param tz [String, nil] IANA zone the document's generated-at line is written in, e.g.
4814
+ # `Europe/Berlin`. UTC when absent or unknown.
4815
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4816
+ # @return [String] Raw response bytes.
4817
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4818
+ def pdf(id:, org_id: nil, tz: nil, request_options: nil)
4819
+ @transport.request(
4820
+ http_method: "GET",
4821
+ path: "/api/org/{orgId}/cost-canvases/{id}/pdf",
4822
+ path_params: { "orgId" => org_id, "id" => id },
4823
+ query: { "tz" => tz },
4824
+ accept: :binary,
4825
+ request_options: request_options
4826
+ )
4827
+ end
4828
+
4829
+ # Run an unsaved canvas spec
4830
+ #
4831
+ # _Requires permission: `costs:read`._
4832
+ #
4833
+ # POST /api/org/{orgId}/cost-canvases/preview
4834
+ #
4835
+ # Raises on 400: Bad request
4836
+ #
4837
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4838
+ # constructed with.
4839
+ # @param body [Hash] Request body, shaped as `Hash`.
4840
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4841
+ # @return [Hash] Parsed JSON, shaped as `CostCanvasRunResult` — see
4842
+ # `sig/infrawrench/sdk.rbs`.
4843
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4844
+ def preview(body:, org_id: nil, request_options: nil)
4845
+ @transport.request(
4846
+ http_method: "POST",
4847
+ path: "/api/org/{orgId}/cost-canvases/preview",
4848
+ path_params: { "orgId" => org_id },
4849
+ body: body,
4850
+ request_options: request_options
4851
+ )
4852
+ end
4853
+
4854
+ # Run (refresh) a cost canvas
4855
+ #
4856
+ # Re-executes every block's query. Deterministic; no model call.
4857
+ #
4858
+ # _Requires permission: `costs:read`._
4859
+ #
4860
+ # POST /api/org/{orgId}/cost-canvases/{id}/run
4861
+ #
4862
+ # Raises on 404: Not found
4863
+ #
4864
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4865
+ # constructed with.
4866
+ # @param id [String]
4867
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
4868
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4869
+ # @return [Hash] Parsed JSON, shaped as `CostCanvasRunResult` — see
4870
+ # `sig/infrawrench/sdk.rbs`.
4871
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4872
+ def run(id:, org_id: nil, body: nil, request_options: nil)
4873
+ @transport.request(
4874
+ http_method: "POST",
4875
+ path: "/api/org/{orgId}/cost-canvases/{id}/run",
4876
+ path_params: { "orgId" => org_id, "id" => id },
4877
+ body: body,
4878
+ request_options: request_options
4879
+ )
4880
+ end
4881
+
4882
+ # Replace a cost canvas
4883
+ #
4884
+ # _Requires permission: `costs:write`._
4885
+ #
4886
+ # PUT /api/org/{orgId}/cost-canvases/{id}
4887
+ #
4888
+ # Raises on 400: Bad request
4889
+ #
4890
+ # Raises on 404: Not found
4891
+ #
4892
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
4893
+ # constructed with.
4894
+ # @param id [String]
4895
+ # @param body [Hash] Request body, shaped as `CostCanvasInput`.
4896
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
4897
+ # @return [Hash] Parsed JSON, shaped as `CostCanvas` — see `sig/infrawrench/sdk.rbs`.
4898
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
4899
+ def update(id:, body:, org_id: nil, request_options: nil)
4900
+ @transport.request(
4901
+ http_method: "PUT",
4902
+ path: "/api/org/{orgId}/cost-canvases/{id}",
4903
+ path_params: { "orgId" => org_id, "id" => id },
4904
+ body: body,
4905
+ request_options: request_options
4906
+ )
4907
+ end
4908
+ end
4909
+
4472
4910
  # `client.cost_centres.rules`
4473
4911
  class CostCentresRulesNamespace
4474
4912
  # @api private
@@ -18083,6 +18521,8 @@ module Infrawrench
18083
18521
  attr_reader :cost_alerts
18084
18522
  # @return [CostAnnotationsNamespace] `client.cost_annotations`
18085
18523
  attr_reader :cost_annotations
18524
+ # @return [CostCanvasesNamespace] `client.cost_canvases`
18525
+ attr_reader :cost_canvases
18086
18526
  # @return [CostCentresNamespace] `client.cost_centres`
18087
18527
  attr_reader :cost_centres
18088
18528
  # @return [CostExportsNamespace] `client.cost_exports`
@@ -18265,6 +18705,7 @@ module Infrawrench
18265
18705
  @connect = ConnectNamespace.new(@transport)
18266
18706
  @cost_alerts = CostAlertsNamespace.new(@transport)
18267
18707
  @cost_annotations = CostAnnotationsNamespace.new(@transport)
18708
+ @cost_canvases = CostCanvasesNamespace.new(@transport)
18268
18709
  @cost_centres = CostCentresNamespace.new(@transport)
18269
18710
  @cost_exports = CostExportsNamespace.new(@transport)
18270
18711
  @cost_report_folders = CostReportFoldersNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.54.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.55.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.54.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.55.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.54.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.55.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.54.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.55.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.54.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.55.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.54.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.55.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.54.0"
18
+ VERSION = "1.55.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v1.54.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.55.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.54.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.55.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.54.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.55.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.54.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.55.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -1797,6 +1797,135 @@ module Infrawrench
1797
1797
  # Spec schema: `CostBasis`.
1798
1798
  type cost_basis = "cash" | "amortized"
1799
1799
 
1800
+ # Spec schema: `CostCanvas`.
1801
+ type cost_canvas = {
1802
+ "id" => String,
1803
+ "name" => String,
1804
+ "description" => String | nil,
1805
+ "spec" => cost_canvas_spec,
1806
+ "prompt" => String | nil,
1807
+ "conversationId" => String | nil,
1808
+ "createdByUserId" => String | nil,
1809
+ "createdAt" => String,
1810
+ "updatedAt" => String,
1811
+ "placements" => Array[cost_canvas_placement]
1812
+ }
1813
+
1814
+ # Spec schema: `CostCanvasBlock`.
1815
+ type cost_canvas_block = { "id" => String, "kind" => "text", "text" => String }
1816
+ | {
1817
+ "id" => String,
1818
+ "kind" => "kpi",
1819
+ "title" => String,
1820
+ "metric" => cost_canvas_kpi_metric,
1821
+ ?"comparePreviousPeriod" => bool
1822
+ }
1823
+ | { "id" => String, "kind" => "chart", "title" => String, "config" => json_object }
1824
+ | { "id" => String, "kind" => "table", "title" => String, "query" => cost_canvas_table_query }
1825
+ | { "id" => String, "kind" => "budgets", "title" => String, ?"budgetIds" => Array[String] }
1826
+ | {
1827
+ "id" => String,
1828
+ "kind" => "anomalies",
1829
+ "title" => String,
1830
+ ?"days" => Integer,
1831
+ ?"limit" => Integer
1832
+ }
1833
+ | { "id" => String, "kind" => "cost_report", ?"title" => String, "reportId" => String }
1834
+ | { "id" => String, "kind" => "custom_graph", ?"title" => String, "graphId" => String }
1835
+
1836
+ # Spec schema: `CostCanvasDraftInput`.
1837
+ type cost_canvas_draft_input = { "prompt" => String, ?"name" => String, ?"model" => String }
1838
+
1839
+ # Spec schema: `CostCanvasInput`.
1840
+ type cost_canvas_input = { "name" => String, ?"description" => String, "spec" => cost_canvas_spec }
1841
+
1842
+ # Spec schema: `CostCanvasKpiMetric`.
1843
+ type cost_canvas_kpi_metric = {
1844
+ "type" => "spend",
1845
+ "dateRange" => cost_date_range,
1846
+ ?"filters" => Array[cost_report_filter],
1847
+ ?"savedFilterId" => String,
1848
+ ?"costBasis" => "cash" | "amortized",
1849
+ ?"adjusted" => bool
1850
+ }
1851
+ | {
1852
+ "type" => "unit_cost",
1853
+ "businessMetricId" => String,
1854
+ "dateRange" => cost_date_range,
1855
+ ?"filters" => Array[cost_report_filter],
1856
+ ?"savedFilterId" => String,
1857
+ ?"costBasis" => "cash" | "amortized"
1858
+ }
1859
+ | {
1860
+ "type" => "forecast",
1861
+ ?"filters" => Array[cost_report_filter],
1862
+ ?"savedFilterId" => String
1863
+ }
1864
+ | { "type" => "budget", "budgetId" => String }
1865
+ | { "type" => "anomaly_count", "days" => Integer }
1866
+
1867
+ # Spec schema: `CostCanvasNotification`.
1868
+ type cost_canvas_notification = {
1869
+ "id" => String,
1870
+ "costCanvasId" => String,
1871
+ "cadence" => "daily" | "weekly" | "monthly",
1872
+ "sendDay" => Integer,
1873
+ "sendDayOfMonth" => Integer,
1874
+ "hour" => Integer,
1875
+ "timezone" => String,
1876
+ "slackChannelIds" => Array[String],
1877
+ "teamsWebhookIds" => Array[String],
1878
+ "emailRecipients" => Array[String],
1879
+ "enabled" => bool,
1880
+ "attachPdf" => bool,
1881
+ "nextSendAt" => String | nil,
1882
+ "lastSentAt" => String | nil,
1883
+ "lastStatus" => "pending" | "succeeded" | "partial" | "failed" | "no_targets" | nil,
1884
+ "lastError" => String | nil,
1885
+ "createdByUserId" => String | nil,
1886
+ "createdAt" => String,
1887
+ "updatedAt" => String
1888
+ }
1889
+
1890
+ # Spec schema: `CostCanvasPlacement`.
1891
+ type cost_canvas_placement = { "widgetId" => String, "dashboardId" => String, "dashboardName" => String }
1892
+
1893
+ # Spec schema: `CostCanvasRunResult`.
1894
+ type cost_canvas_run_result = {
1895
+ "canvasId" => String | nil,
1896
+ "name" => String,
1897
+ "ranAt" => String,
1898
+ "displayCurrency" => String | nil,
1899
+ "blocks" => Array[json_object]
1900
+ }
1901
+
1902
+ # The structured query spec. It holds queries, never numbers: running the
1903
+ # canvas re-executes every block, so a refresh needs no model call. Validated
1904
+ # strictly on write; there is no field that takes a query string or SQL.
1905
+ #
1906
+ # Spec schema: `CostCanvasSpec`.
1907
+ type cost_canvas_spec = { "version" => Numeric, "blocks" => Array[cost_canvas_block] }
1908
+
1909
+ # Spec schema: `CostCanvasTableQuery`.
1910
+ type cost_canvas_table_query = {
1911
+ "dateRange" => cost_date_range,
1912
+ "binning" => "none" | "daily" | "weekly" | "monthly",
1913
+ "groupBy" => "provider"
1914
+ | "account"
1915
+ | "service"
1916
+ | "region"
1917
+ | "resource"
1918
+ | "tag"
1919
+ | "charge_type"
1920
+ | "commitment",
1921
+ ?"groupByTagKey" => String,
1922
+ ?"filters" => Array[cost_report_filter],
1923
+ ?"savedFilterId" => String,
1924
+ ?"costBasis" => "cash" | "amortized",
1925
+ ?"adjusted" => bool,
1926
+ ?"topN" => Integer
1927
+ }
1928
+
1800
1929
  # Spec schema: `CostCentre`.
1801
1930
  type cost_centre = {
1802
1931
  "id" => String,
@@ -1841,7 +1970,7 @@ module Infrawrench
1841
1970
  # Spec schema: `CostDateRange`.
1842
1971
  type cost_date_range = {
1843
1972
  "kind" => "relative",
1844
- "preset" => "7d" | "30d" | "90d" | "mtd" | "last_month" | "qtd" | "ytd" | "12m"
1973
+ "preset" => "7d" | "30d" | "90d" | "mtd" | "last_month" | "qtd" | "ytd" | "6m" | "12m"
1845
1974
  }
1846
1975
  | { "kind" => "absolute", "from" => String, "to" => String }
1847
1976
 
@@ -2717,10 +2846,11 @@ module Infrawrench
2717
2846
 
2718
2847
  # `cost_graph` stores its whole config inline — a one-off card. `cost_report`
2719
2848
  # points at a saved cost report by id, so editing the report updates every
2720
- # dashboard showing it.
2849
+ # dashboard showing it. `cost_canvas` points at a cost canvas by id
2850
+ # (`{version: 1, canvasId}`) the same way.
2721
2851
  #
2722
2852
  # Spec schema: `DashboardWidgetKind`.
2723
- type dashboard_widget_kind = "cost_graph" | "cost_report" | "budget" | "custom_graph"
2853
+ type dashboard_widget_kind = "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas"
2724
2854
 
2725
2855
  # Spec schema: `DashboardWithPins`.
2726
2856
  type dashboard_with_pins = {
@@ -5128,7 +5258,7 @@ module Infrawrench
5128
5258
  # Spec schema: `OrgConfigDashboardCard`.
5129
5259
  type org_config_dashboard_card = {
5130
5260
  "kind" => "widget",
5131
- "widgetKind" => "cost_graph" | "cost_report" | "budget" | "custom_graph",
5261
+ "widgetKind" => "cost_graph" | "cost_report" | "budget" | "custom_graph" | "cost_canvas",
5132
5262
  ?"title" => String,
5133
5263
  ?"config" => json_object,
5134
5264
  ?"budgetKey" => String,
@@ -7631,7 +7761,7 @@ module Infrawrench
7631
7761
  }
7632
7762
 
7633
7763
  # Spec schema: `ShareableObjectType`.
7634
- type shareable_object_type = "cost_report" | "cost_report_folder" | "dashboard"
7764
+ type shareable_object_type = "cost_report" | "cost_report_folder" | "dashboard" | "cost_canvas"
7635
7765
 
7636
7766
  # Spec schema: `SharedConsole`.
7637
7767
  type shared_console = {
@@ -8180,6 +8310,7 @@ module Infrawrench
8180
8310
  | "costs"
8181
8311
  | "savings"
8182
8312
  | "cost-reports"
8313
+ | "cost-canvases"
8183
8314
  | "invoices"
8184
8315
  | "graph"
8185
8316
  | "logs"
@@ -8214,6 +8345,7 @@ module Infrawrench
8214
8345
  ?"conversationId" => String,
8215
8346
  ?"reportId" => String,
8216
8347
  ?"invoiceId" => String,
8348
+ ?"canvasId" => String,
8217
8349
  ?"sessionId" => String,
8218
8350
  ?"windowId" => Integer,
8219
8351
  ?"appId" => String
@@ -8860,6 +8992,31 @@ module Infrawrench
8860
8992
  def update: (id: String, body: cost_annotation_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_annotation
8861
8993
  end
8862
8994
 
8995
+ class CostCanvasesNotificationsNamespace
8996
+ def initialize: (Transport) -> void
8997
+ def create: (id: String, body: dashboard_notification_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas_notification
8998
+ def delete: (id: String, notification_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
8999
+ def list: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[cost_canvas_notification]
9000
+ def post_org_org_id_cost_canvases_id_notifications_notification_id_send: (id: String, notification_id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> dashboard_notification_send_result
9001
+ def targets: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> report_delivery_targets
9002
+ def update: (id: String, notification_id: String, body: dashboard_notification_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas_notification
9003
+ end
9004
+
9005
+ class CostCanvasesNamespace
9006
+ attr_reader notifications: CostCanvasesNotificationsNamespace
9007
+ def initialize: (Transport) -> void
9008
+ def conversation: (id: String, ?org_id: String?, ?body: { ?"model" => String, ?"fresh" => bool }?, ?request_options: Hash[Symbol, untyped]?) -> { "conversationId" => String }
9009
+ def create: (body: cost_canvas_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas
9010
+ def delete: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> ok
9011
+ def draft: (body: cost_canvas_draft_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas
9012
+ def get: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas
9013
+ def list: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[cost_canvas]
9014
+ def pdf: (id: String, ?org_id: String?, ?tz: String?, ?request_options: Hash[Symbol, untyped]?) -> String
9015
+ def preview: (body: { "spec" => cost_canvas_spec, ?"name" => String, ?"includeChartData" => bool }, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas_run_result
9016
+ def run: (id: String, ?org_id: String?, ?body: { ?"includeChartData" => bool }?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas_run_result
9017
+ def update: (id: String, body: cost_canvas_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> cost_canvas
9018
+ end
9019
+
8863
9020
  class CostCentresRulesNamespace
8864
9021
  def initialize: (Transport) -> void
8865
9022
  def create: (body: allocation_rule_input, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> allocation_rule
@@ -9872,6 +10029,7 @@ module Infrawrench
9872
10029
  attr_reader connect: ConnectNamespace
9873
10030
  attr_reader cost_alerts: CostAlertsNamespace
9874
10031
  attr_reader cost_annotations: CostAnnotationsNamespace
10032
+ attr_reader cost_canvases: CostCanvasesNamespace
9875
10033
  attr_reader cost_centres: CostCentresNamespace
9876
10034
  attr_reader cost_exports: CostExportsNamespace
9877
10035
  attr_reader cost_report_folders: CostReportFoldersNamespace
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.54.0
4
+ version: 1.55.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.54.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.55.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.54.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.55.0).
62
62
  test_files: []