infrawrench-sdk 0.44.0 → 1.0.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: 8f5dfafa6b96212083edc49351fd3ca496d1a818f8b5f2fd0e216f5976eb5ba9
4
- data.tar.gz: 385ece28397adb31bb938363fd233189b00a403920d88a6a7cdc58ffc9bbbae4
3
+ metadata.gz: e45c71379c84999b88d2b1d309a67f3725e4ba2cabed2b1ca4fd36db8a7d677a
4
+ data.tar.gz: 0bd88d1530add69a8816f15cfdfd2f4feab6013a515832da475d74fba4bbf849
5
5
  SHA512:
6
- metadata.gz: a4b4548e3d276d10f97a7eadc8207740be2074ca395ed9e353c59d624d6cbd07e3867b44907223986626dd7e97ec9bb57afd39a65332c16f1eae88729d5de69f
7
- data.tar.gz: a887d736ae783d6b565190c6b910f373baaf8f34c0a47a459c2b616cd9798862e5d355de4218701f5314492c75d54f17706709ddbdfc455be6034c51201ba182
6
+ metadata.gz: 1e4e457b41335197e2e971665f566eee1278aa3cdf68e6658aa93d75628c4dea104674960494ec4c5b8b3b733e64d8f40101433ae93c86a249cb1d4c8945b76d
7
+ data.tar.gz: 5e14b2e4d27d57e22c0dee347909d41908cc36fc87f894a5af9ca56f56079f21c80a93c8cd09f4818fd3fb71c88922653831983e9318ea3d0623cea097167c7a
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # infrawrench-sdk
2
2
 
3
- Generated Ruby client for the Infrawrench API (API version `0.44.0`).
3
+ Generated Ruby client for the Infrawrench API (API version `1.0.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
- 399 schemas, as RBS type aliases that steep and TypeProf can read.
44
+ 409 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 v0.44.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.0.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 0.44.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.0.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 (v0.44.0)."
21
- spec.description = "Generated Ruby client for the Infrawrench API (v0.44.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.0.0)."
21
+ spec.description = "Generated Ruby client for the Infrawrench API (v1.0.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 v0.44.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.0.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 0.44.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.0.0).
7
7
  #
8
8
  # DO NOT EDIT. Regenerate with:
9
9
  # pnpm --filter @infrawrench/web generate:sdk
@@ -882,6 +882,185 @@ module Infrawrench
882
882
  end
883
883
  end
884
884
 
885
+ # `client.alert_rules.deliveries`
886
+ class AlertRulesDeliveriesNamespace
887
+ # @api private
888
+ # @param transport [Transport]
889
+ def initialize(transport)
890
+ @transport = transport
891
+ end
892
+
893
+ # Acknowledge an alert, cancelling its escalation
894
+ #
895
+ # A conditional update: only a delivery still in `awaiting_ack` can move, so
896
+ # two people pressing at once produce one acknowledgement and an alert that
897
+ # already escalated cannot be retroactively silenced.
898
+ #
899
+ # POST /api/org/{orgId}/alert-rules/deliveries/{id}/ack
900
+ #
901
+ # Raises on 401: Unauthenticated
902
+ #
903
+ # Raises on 403: Forbidden
904
+ #
905
+ # Raises on 404: Not found
906
+ #
907
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
908
+ # constructed with.
909
+ # @param id [String]
910
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
911
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
912
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
913
+ def ack(id:, org_id: nil, request_options: nil)
914
+ @transport.request(
915
+ http_method: "POST",
916
+ path: "/api/org/{orgId}/alert-rules/deliveries/{id}/ack",
917
+ path_params: { "orgId" => org_id, "id" => id },
918
+ request_options: request_options
919
+ )
920
+ end
921
+
922
+ # Drop held or awaiting-acknowledgement deliveries
923
+ #
924
+ # POST /api/org/{orgId}/alert-rules/deliveries/cancel
925
+ #
926
+ # Raises on 400: Bad request
927
+ #
928
+ # Raises on 403: Forbidden
929
+ #
930
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
931
+ # constructed with.
932
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
933
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
934
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
935
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
936
+ def cancel(org_id: nil, body: nil, request_options: nil)
937
+ @transport.request(
938
+ http_method: "POST",
939
+ path: "/api/org/{orgId}/alert-rules/deliveries/cancel",
940
+ path_params: { "orgId" => org_id },
941
+ body: body,
942
+ request_options: request_options
943
+ )
944
+ end
945
+
946
+ # List recent held and escalating alerts
947
+ #
948
+ # Only alerts a rule created follow-up work for appear here: one held by
949
+ # quiet hours, or one waiting on an acknowledgement. An alert that went
950
+ # straight out leaves no row.
951
+ #
952
+ # GET /api/org/{orgId}/alert-rules/deliveries
953
+ #
954
+ # Raises on 403: Forbidden
955
+ #
956
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
957
+ # constructed with.
958
+ # @param limit [Integer, nil]
959
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
960
+ # @return [Array<Hash>] Parsed JSON, shaped as `Array<AlertDelivery>` — see
961
+ # `sig/infrawrench/sdk.rbs`.
962
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
963
+ def list(org_id: nil, limit: nil, request_options: nil)
964
+ @transport.request(
965
+ http_method: "GET",
966
+ path: "/api/org/{orgId}/alert-rules/deliveries",
967
+ path_params: { "orgId" => org_id },
968
+ query: { "limit" => limit },
969
+ request_options: request_options
970
+ )
971
+ end
972
+ end
973
+
974
+ # `client.alert_rules`
975
+ class AlertRulesNamespace
976
+ # @return [AlertRulesDeliveriesNamespace] `client.alert_rules.deliveries`
977
+ attr_reader :deliveries
978
+
979
+ # @api private
980
+ # @param transport [Transport]
981
+ def initialize(transport)
982
+ @transport = transport
983
+ @deliveries = AlertRulesDeliveriesNamespace.new(@transport)
984
+ end
985
+
986
+ # Persist the default rule so it can be edited
987
+ #
988
+ # A no-op when the organization already has rules.
989
+ #
990
+ # POST /api/org/{orgId}/alert-rules/adopt-defaults
991
+ #
992
+ # Raises on 403: Forbidden
993
+ #
994
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
995
+ # constructed with.
996
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
997
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
998
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
999
+ def adopt_defaults(org_id: nil, request_options: nil)
1000
+ @transport.request(
1001
+ http_method: "POST",
1002
+ path: "/api/org/{orgId}/alert-rules/adopt-defaults",
1003
+ path_params: { "orgId" => org_id },
1004
+ request_options: request_options
1005
+ )
1006
+ end
1007
+
1008
+ # Get the organization's alert routing rules
1009
+ #
1010
+ # Returns the rules in evaluation order, plus the channels and accounts a
1011
+ # rule can name so a client can render destinations by name. An organization
1012
+ # that has saved no rules gets the synthesized default with `usingDefaults:
1013
+ # true`.
1014
+ #
1015
+ # GET /api/org/{orgId}/alert-rules
1016
+ #
1017
+ # Raises on 403: Forbidden
1018
+ #
1019
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1020
+ # constructed with.
1021
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1022
+ # @return [Hash] Parsed JSON, shaped as `AlertRulesResponse` — see
1023
+ # `sig/infrawrench/sdk.rbs`.
1024
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1025
+ def get(org_id: nil, request_options: nil)
1026
+ @transport.request(
1027
+ http_method: "GET",
1028
+ path: "/api/org/{orgId}/alert-rules",
1029
+ path_params: { "orgId" => org_id },
1030
+ request_options: request_options
1031
+ )
1032
+ end
1033
+
1034
+ # Replace the organization's alert routing rules
1035
+ #
1036
+ # Whole-list replacement in one transaction. Order is part of the meaning —
1037
+ # a rule is only correct relative to the ones above it — so a reorder
1038
+ # applied as several requests would leave a window in which alerts route
1039
+ # somewhere nobody asked for. Positions are re-derived from array order.
1040
+ #
1041
+ # PUT /api/org/{orgId}/alert-rules
1042
+ #
1043
+ # Raises on 400: Bad request
1044
+ #
1045
+ # Raises on 403: Forbidden
1046
+ #
1047
+ # @param org_id [String, nil] Organization id. Defaults to the `org_id` the client was
1048
+ # constructed with.
1049
+ # @param body [Hash, nil] Request body, shaped as `Hash`.
1050
+ # @param request_options [Hash, nil] Per-call `:headers`, `:timeout` and `:open_timeout`.
1051
+ # @return [Hash] Parsed JSON, shaped as `Hash` — see `sig/infrawrench/sdk.rbs`.
1052
+ # @raise [Infrawrench::ApiError] On any non-2xx response.
1053
+ def update(org_id: nil, body: nil, request_options: nil)
1054
+ @transport.request(
1055
+ http_method: "PUT",
1056
+ path: "/api/org/{orgId}/alert-rules",
1057
+ path_params: { "orgId" => org_id },
1058
+ body: body,
1059
+ request_options: request_options
1060
+ )
1061
+ end
1062
+ end
1063
+
885
1064
  # `client.api_keys`
886
1065
  class ApiKeysNamespace
887
1066
  # @api private
@@ -4708,10 +4887,11 @@ module Infrawrench
4708
4887
  @transport = transport
4709
4888
  end
4710
4889
 
4711
- # Route alerts to a Teams channel
4890
+ # Connect a Teams channel as an alert destination
4712
4891
  #
4713
4892
  # Adds a channel by webhook URL, or updates the one already holding that
4714
- # URL. Each trigger defaults to enabled. Responds 400 when the URL is not
4893
+ # URL. Which alerts reach it is decided by /alert-rules connecting a
4894
+ # channel routes nothing to it on its own. Responds 400 when the URL is not
4715
4895
  # https or its host is not Microsoft-operated.
4716
4896
  #
4717
4897
  # POST /api/org/{orgId}/msteams/webhooks
@@ -4734,7 +4914,7 @@ module Infrawrench
4734
4914
  )
4735
4915
  end
4736
4916
 
4737
- # Stop routing alerts to a Teams channel
4917
+ # Disconnect a Teams channel
4738
4918
  #
4739
4919
  # DELETE /api/org/{orgId}/msteams/webhooks/{id}
4740
4920
  #
@@ -4755,7 +4935,7 @@ module Infrawrench
4755
4935
  )
4756
4936
  end
4757
4937
 
4758
- # Rename a Teams channel or change which alerts it receives
4938
+ # Rename a Teams channel
4759
4939
  #
4760
4940
  # The webhook URL is immutable — remove the channel and re-add it to change
4761
4941
  # it.
@@ -4798,8 +4978,8 @@ module Infrawrench
4798
4978
 
4799
4979
  # List the organization's Teams channels
4800
4980
  #
4801
- # Returns the Teams channels alerts are routed to and which triggers each
4802
- # takes. Webhook URLs are never included.
4981
+ # Returns the Teams channels alerts can be routed to. Which alerts reach
4982
+ # each one is decided by /alert-rules. Webhook URLs are never included.
4803
4983
  #
4804
4984
  # GET /api/org/{orgId}/msteams/status
4805
4985
  #
@@ -4819,9 +4999,9 @@ module Infrawrench
4819
4999
 
4820
5000
  # Post a test card to every configured Teams channel
4821
5001
  #
4822
- # Ignores trigger opt-ins — every channel gets the test. Fails with the
4823
- # error Microsoft returned when nothing could be delivered (HTTP 404 usually
4824
- # means the Workflow was deleted or turned off).
5002
+ # Ignores routing rules — every channel gets the test. Fails with the error
5003
+ # Microsoft returned when nothing could be delivered (HTTP 404 usually means
5004
+ # the Workflow was deleted or turned off).
4825
5005
  #
4826
5006
  # POST /api/org/{orgId}/msteams/test
4827
5007
  #
@@ -7326,10 +7506,13 @@ module Infrawrench
7326
7506
  @transport = transport
7327
7507
  end
7328
7508
 
7329
- # Route alerts to a Slack channel
7509
+ # Connect a Slack channel as an alert destination
7330
7510
  #
7331
- # Adds a channel, or updates the trigger opt-ins of one already added. Each
7332
- # trigger defaults to enabled.
7511
+ # Adds a channel as a possible destination, or refreshes the cached name of
7512
+ # one already added. Which alerts reach it is decided by /alert-rules; an
7513
+ # organization with no rules falls back to the default (everything except
7514
+ # drift, everywhere), so a freshly added channel starts receiving alerts
7515
+ # without a second step.
7333
7516
  #
7334
7517
  # POST /api/org/{orgId}/slack/channels
7335
7518
  #
@@ -7353,7 +7536,7 @@ module Infrawrench
7353
7536
  )
7354
7537
  end
7355
7538
 
7356
- # Stop routing alerts to a channel
7539
+ # Disconnect a channel
7357
7540
  #
7358
7541
  # DELETE /api/org/{orgId}/slack/channels/{id}
7359
7542
  #
@@ -7374,7 +7557,7 @@ module Infrawrench
7374
7557
  )
7375
7558
  end
7376
7559
 
7377
- # Change which alerts a channel receives
7560
+ # Refresh a channel's cached name
7378
7561
  #
7379
7562
  # PATCH /api/org/{orgId}/slack/channels/{id}
7380
7563
  #
@@ -7518,9 +7701,9 @@ module Infrawrench
7518
7701
 
7519
7702
  # Post a test message to every configured channel
7520
7703
  #
7521
- # Ignores trigger opt-ins — every channel gets the test. Fails with the
7522
- # Slack error when nothing could be delivered (`not_in_channel` means the
7523
- # bot needs inviting to a private channel).
7704
+ # Ignores routing rules — every channel gets the test. Fails with the Slack
7705
+ # error when nothing could be delivered (`not_in_channel` means the bot
7706
+ # needs inviting to a private channel).
7524
7707
  #
7525
7708
  # POST /api/org/{orgId}/slack/test
7526
7709
  #
@@ -9039,6 +9222,8 @@ module Infrawrench
9039
9222
  attr_reader :accounts
9040
9223
  # @return [AgentsNamespace] `client.agents`
9041
9224
  attr_reader :agents
9225
+ # @return [AlertRulesNamespace] `client.alert_rules`
9226
+ attr_reader :alert_rules
9042
9227
  # @return [ApiKeysNamespace] `client.api_keys`
9043
9228
  attr_reader :api_keys
9044
9229
  # @return [ArtifactsNamespace] `client.artifacts`
@@ -9160,6 +9345,7 @@ module Infrawrench
9160
9345
  @access_requests = AccessRequestsNamespace.new(@transport)
9161
9346
  @accounts = AccountsNamespace.new(@transport)
9162
9347
  @agents = AgentsNamespace.new(@transport)
9348
+ @alert_rules = AlertRulesNamespace.new(@transport)
9163
9349
  @api_keys = ApiKeysNamespace.new(@transport)
9164
9350
  @artifacts = ArtifactsNamespace.new(@transport)
9165
9351
  @associations = AssociationsNamespace.new(@transport)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v0.44.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.0.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 0.44.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.0.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 v0.44.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.0.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 0.44.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.0.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 v0.44.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.0.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 0.44.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.0.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 = "0.44.0"
18
+ VERSION = "1.0.0"
19
19
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # infrawrench-sdk v0.44.0 | MIT | Copyright (c) 2026 Infrawrench LLC
3
+ # infrawrench-sdk v1.0.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 0.44.0).
6
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.0.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 v0.44.0 | MIT | Copyright (c) 2026 Infrawrench LLC
1
+ # infrawrench-sdk v1.0.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 0.44.0).
4
+ # Generated from the Infrawrench API OpenAPI 3.1 spec (API version 1.0.0).
5
5
  #
6
6
  # DO NOT EDIT. Regenerate with:
7
7
  # pnpm --filter @infrawrench/web generate:sdk
@@ -230,6 +230,101 @@ module Infrawrench
230
230
  "hiddenFieldKeys" => Array[String]
231
231
  }
232
232
 
233
+ # One clause of a rule. A rule matches when every condition matches; 'or' is
234
+ # expressed by writing a second rule. A condition on a fact the alert does not
235
+ # carry never matches — in either direction, so `accountId notIn [x]` does not
236
+ # match an alert with no account.
237
+ #
238
+ # Spec schema: `AlertCondition`.
239
+ type alert_condition = { "field" => "trigger", "op" => "in" | "notIn", "values" => Array[alert_trigger] }
240
+ | { "field" => "severity", "op" => "gte" | "eq", "severity" => alert_severity }
241
+ | { "field" => "accountId", "op" => "in" | "notIn", "values" => Array[String] }
242
+ | { "field" => "pluginId", "op" => "in" | "notIn", "values" => Array[String] }
243
+ | { "field" => "resourceTypeId", "op" => "in" | "notIn", "values" => Array[String] }
244
+ | { "field" => "amountCents", "op" => "gte" | "lt", "cents" => Integer }
245
+ | { "field" => "key", "op" => "contains" | "notContains" | "eq", "value" => String }
246
+ | { "field" => "text", "op" => "contains" | "notContains", "value" => String }
247
+
248
+ # Spec schema: `AlertDelivery`.
249
+ type alert_delivery = {
250
+ "id" => String,
251
+ "trigger" => alert_trigger,
252
+ "severity" => alert_severity,
253
+ "title" => String,
254
+ "body" => String,
255
+ "ruleName" => String | nil,
256
+ "state" => "held" | "awaiting_ack" | "sent" | "acknowledged" | "escalated" | "expired",
257
+ "createdAt" => String,
258
+ "deliverAfter" => String | nil,
259
+ "escalateAt" => String | nil,
260
+ "acknowledgedAt" => String | nil,
261
+ "acknowledgedByUserId" => String | nil
262
+ }
263
+
264
+ # One place a matched alert goes. `push` reaches the organization's phones,
265
+ # still filtered by each member's own mutes — an organization rule decides
266
+ # whether the org is told, a member decides whether their phone rings.
267
+ #
268
+ # Spec schema: `AlertDestination`.
269
+ type alert_destination = { "kind" => "push" }
270
+ | { "kind" => "slack", "channelId" => String }
271
+ | { "kind" => "msteams", "webhookId" => String }
272
+
273
+ # Spec schema: `AlertRule`.
274
+ type alert_rule = {
275
+ "id" => String,
276
+ "name" => String,
277
+ "enabled" => bool,
278
+ "position" => Integer,
279
+ "conditions" => Array[alert_condition],
280
+ "destinations" => Array[alert_destination],
281
+ "continueOnMatch" => bool,
282
+ "quietHours" => quiet_hours,
283
+ "escalation" => escalation_policy
284
+ }
285
+
286
+ # Spec schema: `AlertRuleInput`.
287
+ type alert_rule_input = {
288
+ ?"id" => String,
289
+ "name" => String,
290
+ ?"enabled" => bool,
291
+ ?"conditions" => Array[alert_condition],
292
+ ?"destinations" => Array[alert_destination],
293
+ ?"continueOnMatch" => bool,
294
+ ?"quietHours" => quiet_hours,
295
+ ?"escalation" => escalation_policy
296
+ }
297
+
298
+ # Spec schema: `AlertRulesResponse`.
299
+ type alert_rules_response = {
300
+ "rules" => Array[alert_rule],
301
+ "usingDefaults" => bool,
302
+ "slackChannels" => Array[{ "id" => String, "name" => String, "isPrivate" => bool }],
303
+ "msTeamsWebhooks" => Array[{ "id" => String, "label" => String }],
304
+ "accounts" => Array[{ "id" => String, "displayName" => String, "pluginId" => String }]
305
+ }
306
+
307
+ # Alert severity, ordered info < warning < critical.
308
+ #
309
+ # Spec schema: `AlertSeverity`.
310
+ type alert_severity = "info" | "warning" | "critical"
311
+
312
+ # A kind of alert that can be routed.
313
+ #
314
+ # Spec schema: `AlertTrigger`.
315
+ type alert_trigger = "syncIncidents"
316
+ | "budgetAlerts"
317
+ | "anomalyAlerts"
318
+ | "metricAlerts"
319
+ | "resourceDrift"
320
+ | "workflowPages"
321
+ | "providerIncidents"
322
+ | "expiryAlerts"
323
+ | "logMatchAlerts"
324
+ | "postureAlerts"
325
+ | "probeAlerts"
326
+ | "weeklyDigest"
327
+
233
328
  # Spec schema: `AllocationRule`.
234
329
  type allocation_rule = {
235
330
  "id" => String,
@@ -1332,6 +1427,13 @@ module Infrawrench
1332
1427
  # Spec schema: `Error`.
1333
1428
  type error = { "error" => String }
1334
1429
 
1430
+ # Notify these destinations too if nobody acknowledges within afterMinutes.
1431
+ # Acknowledgement comes from the button on the Slack message, so an alert
1432
+ # routed only to Teams or push will always escalate.
1433
+ #
1434
+ # Spec schema: `EscalationPolicy`.
1435
+ type escalation_policy = { "afterMinutes" => Integer, "destinations" => Array[alert_destination] } | nil
1436
+
1335
1437
  # Spec schema: `ExpiryAlertSettings`.
1336
1438
  type expiry_alert_settings = { "enabled" => bool, "leadDays" => Integer, "lastNotifiedAt" => String | nil }
1337
1439
 
@@ -1810,58 +1912,13 @@ module Infrawrench
1810
1912
  type ms_teams_status = { "webhooks" => Array[ms_teams_webhook] }
1811
1913
 
1812
1914
  # Spec schema: `MsTeamsWebhook`.
1813
- type ms_teams_webhook = {
1814
- "id" => String,
1815
- "label" => String,
1816
- "urlHint" => String,
1817
- "syncIncidents" => bool,
1818
- "budgetAlerts" => bool,
1819
- "anomalyAlerts" => bool,
1820
- "metricAlerts" => bool,
1821
- "resourceDrift" => bool,
1822
- "workflowPages" => bool,
1823
- "providerIncidents" => bool,
1824
- "expiryAlerts" => bool,
1825
- "logMatchAlerts" => bool,
1826
- "postureAlerts" => bool,
1827
- "probeAlerts" => bool,
1828
- "weeklyDigest" => bool
1829
- }
1915
+ type ms_teams_webhook = { "id" => String, "label" => String, "urlHint" => String }
1830
1916
 
1831
1917
  # Spec schema: `MsTeamsWebhookCreate`.
1832
- type ms_teams_webhook_create = {
1833
- "label" => String,
1834
- "url" => String,
1835
- ?"syncIncidents" => bool,
1836
- ?"budgetAlerts" => bool,
1837
- ?"anomalyAlerts" => bool,
1838
- ?"metricAlerts" => bool,
1839
- ?"resourceDrift" => bool,
1840
- ?"workflowPages" => bool,
1841
- ?"providerIncidents" => bool,
1842
- ?"expiryAlerts" => bool,
1843
- ?"logMatchAlerts" => bool,
1844
- ?"postureAlerts" => bool,
1845
- ?"probeAlerts" => bool,
1846
- ?"weeklyDigest" => bool
1847
- }
1918
+ type ms_teams_webhook_create = { "label" => String, "url" => String }
1848
1919
 
1849
1920
  # Spec schema: `MsTeamsWebhookUpdate`.
1850
- type ms_teams_webhook_update = {
1851
- ?"label" => String,
1852
- ?"syncIncidents" => bool,
1853
- ?"budgetAlerts" => bool,
1854
- ?"anomalyAlerts" => bool,
1855
- ?"metricAlerts" => bool,
1856
- ?"resourceDrift" => bool,
1857
- ?"workflowPages" => bool,
1858
- ?"providerIncidents" => bool,
1859
- ?"expiryAlerts" => bool,
1860
- ?"logMatchAlerts" => bool,
1861
- ?"postureAlerts" => bool,
1862
- ?"probeAlerts" => bool,
1863
- ?"weeklyDigest" => bool
1864
- }
1921
+ type ms_teams_webhook_update = { "label" => String }
1865
1922
 
1866
1923
  # Spec schema: `NoSqlCommandRequest`.
1867
1924
  type no_sql_command_request = {
@@ -2460,6 +2517,19 @@ module Infrawrench
2460
2517
  ?"accountId" => String
2461
2518
  }
2462
2519
 
2520
+ # A recurring local-time window during which the rule holds its alerts. Held,
2521
+ # not dropped — a held alert is queued and delivered when the window closes.
2522
+ #
2523
+ # Spec schema: `QuietHours`.
2524
+ type quiet_hours = {
2525
+ "timezone" => String,
2526
+ "startMinute" => Integer,
2527
+ "endMinute" => Integer,
2528
+ "days" => Array[Integer],
2529
+ "urgentOverride" => alert_severity & (String | nil)
2530
+ }
2531
+ | nil
2532
+
2463
2533
  # Spec schema: `ReauthenticationRequired`.
2464
2534
  type reauthentication_required = { "error" => String, "code" => "reauthentication_required" }
2465
2535
 
@@ -3267,19 +3337,7 @@ module Infrawrench
3267
3337
  "installationId" => String,
3268
3338
  "channelId" => String,
3269
3339
  "channelName" => String,
3270
- "isPrivate" => bool,
3271
- "syncIncidents" => bool,
3272
- "budgetAlerts" => bool,
3273
- "anomalyAlerts" => bool,
3274
- "metricAlerts" => bool,
3275
- "resourceDrift" => bool,
3276
- "workflowPages" => bool,
3277
- "providerIncidents" => bool,
3278
- "expiryAlerts" => bool,
3279
- "logMatchAlerts" => bool,
3280
- "postureAlerts" => bool,
3281
- "probeAlerts" => bool,
3282
- "weeklyDigest" => bool
3340
+ "isPrivate" => bool
3283
3341
  }
3284
3342
 
3285
3343
  # Spec schema: `SlackChannelCreate`.
@@ -3287,36 +3345,11 @@ module Infrawrench
3287
3345
  "installationId" => String,
3288
3346
  "channelId" => String,
3289
3347
  "channelName" => String,
3290
- ?"isPrivate" => bool,
3291
- ?"syncIncidents" => bool,
3292
- ?"budgetAlerts" => bool,
3293
- ?"anomalyAlerts" => bool,
3294
- ?"metricAlerts" => bool,
3295
- ?"resourceDrift" => bool,
3296
- ?"workflowPages" => bool,
3297
- ?"providerIncidents" => bool,
3298
- ?"expiryAlerts" => bool,
3299
- ?"logMatchAlerts" => bool,
3300
- ?"postureAlerts" => bool,
3301
- ?"probeAlerts" => bool,
3302
- ?"weeklyDigest" => bool
3348
+ ?"isPrivate" => bool
3303
3349
  }
3304
3350
 
3305
3351
  # Spec schema: `SlackChannelUpdate`.
3306
- type slack_channel_update = {
3307
- ?"syncIncidents" => bool,
3308
- ?"budgetAlerts" => bool,
3309
- ?"anomalyAlerts" => bool,
3310
- ?"metricAlerts" => bool,
3311
- ?"resourceDrift" => bool,
3312
- ?"workflowPages" => bool,
3313
- ?"providerIncidents" => bool,
3314
- ?"expiryAlerts" => bool,
3315
- ?"logMatchAlerts" => bool,
3316
- ?"postureAlerts" => bool,
3317
- ?"probeAlerts" => bool,
3318
- ?"weeklyDigest" => bool
3319
- }
3352
+ type slack_channel_update = { "channelName" => String }
3320
3353
 
3321
3354
  # Spec schema: `SlackInstallation`.
3322
3355
  type slack_installation = { "id" => String, "teamId" => String, "teamName" => String | nil }
@@ -3937,6 +3970,21 @@ module Infrawrench
3937
3970
  def accounts: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> Array[agent_vm_account]
3938
3971
  end
3939
3972
 
3973
+ class AlertRulesDeliveriesNamespace
3974
+ def initialize: (Transport) -> void
3975
+ def ack: (id: String, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "acknowledged" => bool, ?"alreadyAcknowledgedBy" => String | nil, ?"reason" => "not_pending" | "already_escalated" | "already_acknowledged", ?"title" => String }
3976
+ def cancel: (?org_id: String?, ?body: { "ids" => Array[String] }?, ?request_options: Hash[Symbol, untyped]?) -> { "cancelled" => Integer }
3977
+ def list: (?org_id: String?, ?limit: Integer?, ?request_options: Hash[Symbol, untyped]?) -> Array[alert_delivery]
3978
+ end
3979
+
3980
+ class AlertRulesNamespace
3981
+ attr_reader deliveries: AlertRulesDeliveriesNamespace
3982
+ def initialize: (Transport) -> void
3983
+ def adopt_defaults: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> { "rules" => Array[alert_rule], "adopted" => bool }
3984
+ def get: (?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> alert_rules_response
3985
+ def update: (?org_id: String?, ?body: { "rules" => Array[alert_rule_input] }?, ?request_options: Hash[Symbol, untyped]?) -> { "rules" => Array[alert_rule] }
3986
+ end
3987
+
3940
3988
  class ApiKeysNamespace
3941
3989
  def initialize: (Transport) -> void
3942
3990
  def create: (body: create_api_key_request, ?org_id: String?, ?request_options: Hash[Symbol, untyped]?) -> created_api_key
@@ -4577,6 +4625,7 @@ module Infrawrench
4577
4625
  attr_reader access_requests: AccessRequestsNamespace
4578
4626
  attr_reader accounts: AccountsNamespace
4579
4627
  attr_reader agents: AgentsNamespace
4628
+ attr_reader alert_rules: AlertRulesNamespace
4580
4629
  attr_reader api_keys: ApiKeysNamespace
4581
4630
  attr_reader artifacts: ArtifactsNamespace
4582
4631
  attr_reader associations: AssociationsNamespace
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: 0.44.0
4
+ version: 1.0.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-08-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Generated Ruby client for the Infrawrench API (v0.44.0). Covers the published
14
+ description: Generated Ruby client for the Infrawrench API (v1.0.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 (v0.44.0).
61
+ summary: Generated Ruby client for the Infrawrench API (v1.0.0).
62
62
  test_files: []