context.dev 2.2.0 → 2.3.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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +1 -1
  4. data/lib/context_dev/client.rb +7 -2
  5. data/lib/context_dev/internal/type/base_model.rb +5 -5
  6. data/lib/context_dev/models/monitor_create_params.rb +28 -3
  7. data/lib/context_dev/models/monitor_create_response.rb +96 -4
  8. data/lib/context_dev/models/monitor_list_account_runs_response.rb +19 -98
  9. data/lib/context_dev/models/monitor_list_response.rb +100 -4
  10. data/lib/context_dev/models/monitor_list_runs_response.rb +19 -96
  11. data/lib/context_dev/models/monitor_retrieve_change_response.rb +10 -10
  12. data/lib/context_dev/models/monitor_retrieve_response.rb +97 -4
  13. data/lib/context_dev/models/monitor_update_params.rb +28 -3
  14. data/lib/context_dev/models/monitor_update_response.rb +96 -4
  15. data/lib/context_dev/models/parse_handle_params.rb +110 -0
  16. data/lib/context_dev/models/parse_handle_response.rb +132 -0
  17. data/lib/context_dev/models/web_web_crawl_md_params.rb +16 -6
  18. data/lib/context_dev/models/web_web_scrape_html_params.rb +16 -6
  19. data/lib/context_dev/models/web_web_scrape_md_params.rb +16 -6
  20. data/lib/context_dev/models/web_web_scrape_md_response.rb +11 -1
  21. data/lib/context_dev/models/webhook_delivery.rb +109 -0
  22. data/lib/context_dev/models.rb +4 -0
  23. data/lib/context_dev/resources/monitors.rb +3 -2
  24. data/lib/context_dev/resources/parse.rb +63 -0
  25. data/lib/context_dev/resources/web.rb +19 -4
  26. data/lib/context_dev/version.rb +1 -1
  27. data/lib/context_dev.rb +4 -0
  28. data/rbi/context_dev/client.rbi +6 -2
  29. data/rbi/context_dev/models/monitor_create_params.rbi +85 -5
  30. data/rbi/context_dev/models/monitor_create_response.rbi +234 -6
  31. data/rbi/context_dev/models/monitor_list_account_runs_response.rbi +27 -192
  32. data/rbi/context_dev/models/monitor_list_response.rbi +235 -5
  33. data/rbi/context_dev/models/monitor_list_runs_response.rbi +27 -192
  34. data/rbi/context_dev/models/monitor_retrieve_change_response.rbi +12 -15
  35. data/rbi/context_dev/models/monitor_retrieve_response.rbi +234 -6
  36. data/rbi/context_dev/models/monitor_update_params.rbi +85 -5
  37. data/rbi/context_dev/models/monitor_update_response.rbi +234 -6
  38. data/rbi/context_dev/models/parse_handle_params.rbi +163 -0
  39. data/rbi/context_dev/models/parse_handle_response.rbi +377 -0
  40. data/rbi/context_dev/models/web_web_crawl_md_params.rbi +26 -7
  41. data/rbi/context_dev/models/web_web_scrape_html_params.rbi +26 -7
  42. data/rbi/context_dev/models/web_web_scrape_md_params.rbi +26 -7
  43. data/rbi/context_dev/models/web_web_scrape_md_response.rbi +12 -0
  44. data/rbi/context_dev/models/webhook_delivery.rbi +172 -0
  45. data/rbi/context_dev/models.rbi +4 -0
  46. data/rbi/context_dev/resources/monitors.rbi +3 -2
  47. data/rbi/context_dev/resources/parse.rbi +65 -0
  48. data/rbi/context_dev/resources/web.rbi +22 -7
  49. data/sig/context_dev/client.rbs +2 -0
  50. data/sig/context_dev/models/monitor_create_params.rbs +32 -3
  51. data/sig/context_dev/models/monitor_create_response.rbs +85 -6
  52. data/sig/context_dev/models/monitor_list_account_runs_response.rbs +15 -68
  53. data/sig/context_dev/models/monitor_list_response.rbs +85 -6
  54. data/sig/context_dev/models/monitor_list_runs_response.rbs +15 -68
  55. data/sig/context_dev/models/monitor_retrieve_change_response.rbs +8 -10
  56. data/sig/context_dev/models/monitor_retrieve_response.rbs +85 -6
  57. data/sig/context_dev/models/monitor_update_params.rbs +32 -3
  58. data/sig/context_dev/models/monitor_update_response.rbs +85 -6
  59. data/sig/context_dev/models/parse_handle_params.rbs +96 -0
  60. data/sig/context_dev/models/parse_handle_response.rbs +159 -0
  61. data/sig/context_dev/models/web_web_crawl_md_params.rbs +13 -2
  62. data/sig/context_dev/models/web_web_scrape_html_params.rbs +13 -2
  63. data/sig/context_dev/models/web_web_scrape_md_params.rbs +13 -2
  64. data/sig/context_dev/models/web_web_scrape_md_response.rbs +5 -0
  65. data/sig/context_dev/models/webhook_delivery.rbs +81 -0
  66. data/sig/context_dev/models.rbs +4 -0
  67. data/sig/context_dev/resources/parse.rbs +22 -0
  68. metadata +14 -2
@@ -133,6 +133,26 @@ module ContextDev
133
133
  end
134
134
  attr_writer :webhook
135
135
 
136
+ # Present while webhook deliveries are failing consecutively; null when deliveries
137
+ # are healthy or no webhook is configured. Cleared on the next successful delivery
138
+ # and when the webhook URL changes.
139
+ sig do
140
+ returns(
141
+ T.nilable(ContextDev::Models::MonitorRetrieveResponse::WebhookFailure)
142
+ )
143
+ end
144
+ attr_reader :webhook_failure
145
+
146
+ sig do
147
+ params(
148
+ webhook_failure:
149
+ T.nilable(
150
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::OrHash
151
+ )
152
+ ).void
153
+ end
154
+ attr_writer :webhook_failure
155
+
136
156
  # A web monitor. `mode` is the constant `web`; behavior is described by `target`
137
157
  # (page/sitemap/extract) and `change_detection` (exact/semantic).
138
158
  sig do
@@ -175,6 +195,10 @@ module ContextDev
175
195
  webhook:
176
196
  T.nilable(
177
197
  ContextDev::Models::MonitorRetrieveResponse::Webhook::OrHash
198
+ ),
199
+ webhook_failure:
200
+ T.nilable(
201
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::OrHash
178
202
  )
179
203
  ).returns(T.attached_class)
180
204
  end
@@ -213,7 +237,11 @@ module ContextDev
213
237
  next_run_at: nil,
214
238
  # User-defined tags for grouping and filtering monitors and their changes.
215
239
  tags: nil,
216
- webhook: nil
240
+ webhook: nil,
241
+ # Present while webhook deliveries are failing consecutively; null when deliveries
242
+ # are healthy or no webhook is configured. Cleared on the next successful delivery
243
+ # and when the webhook URL changes.
244
+ webhook_failure: nil
217
245
  )
218
246
  end
219
247
 
@@ -244,7 +272,11 @@ module ContextDev
244
272
  next_run_at: T.nilable(Time),
245
273
  tags: T::Array[String],
246
274
  webhook:
247
- T.nilable(ContextDev::Models::MonitorRetrieveResponse::Webhook)
275
+ T.nilable(ContextDev::Models::MonitorRetrieveResponse::Webhook),
276
+ webhook_failure:
277
+ T.nilable(
278
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure
279
+ )
248
280
  }
249
281
  )
250
282
  end
@@ -1001,10 +1033,35 @@ module ContextDev
1001
1033
  )
1002
1034
  end
1003
1035
 
1004
- # Webhook URL called when a change is detected.
1036
+ # Webhook URL events are delivered to.
1005
1037
  sig { returns(String) }
1006
1038
  attr_accessor :url
1007
1039
 
1040
+ # Events delivered to this endpoint. `change.detected` fires only when a run
1041
+ # detects a change; `run.completed` fires on every completed run — including runs
1042
+ # that detected no change — and embeds the change when one was detected. Defaults
1043
+ # to `["change.detected"]` when omitted.
1044
+ sig do
1045
+ returns(
1046
+ T.nilable(
1047
+ T::Array[
1048
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event::TaggedSymbol
1049
+ ]
1050
+ )
1051
+ )
1052
+ end
1053
+ attr_reader :events
1054
+
1055
+ sig do
1056
+ params(
1057
+ events:
1058
+ T::Array[
1059
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event::OrSymbol
1060
+ ]
1061
+ ).void
1062
+ end
1063
+ attr_writer :events
1064
+
1008
1065
  # Signing secret used to verify webhook authenticity. Each delivery includes an
1009
1066
  # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
1010
1067
  # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
@@ -1016,10 +1073,24 @@ module ContextDev
1016
1073
  sig { params(secret: String).void }
1017
1074
  attr_writer :secret
1018
1075
 
1019
- sig { params(url: String, secret: String).returns(T.attached_class) }
1076
+ sig do
1077
+ params(
1078
+ url: String,
1079
+ events:
1080
+ T::Array[
1081
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event::OrSymbol
1082
+ ],
1083
+ secret: String
1084
+ ).returns(T.attached_class)
1085
+ end
1020
1086
  def self.new(
1021
- # Webhook URL called when a change is detected.
1087
+ # Webhook URL events are delivered to.
1022
1088
  url:,
1089
+ # Events delivered to this endpoint. `change.detected` fires only when a run
1090
+ # detects a change; `run.completed` fires on every completed run — including runs
1091
+ # that detected no change — and embeds the change when one was detected. Defaults
1092
+ # to `["change.detected"]` when omitted.
1093
+ events: nil,
1023
1094
  # Signing secret used to verify webhook authenticity. Each delivery includes an
1024
1095
  # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
1025
1096
  # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
@@ -1029,9 +1100,166 @@ module ContextDev
1029
1100
  )
1030
1101
  end
1031
1102
 
1032
- sig { override.returns({ url: String, secret: String }) }
1103
+ sig do
1104
+ override.returns(
1105
+ {
1106
+ url: String,
1107
+ events:
1108
+ T::Array[
1109
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event::TaggedSymbol
1110
+ ],
1111
+ secret: String
1112
+ }
1113
+ )
1114
+ end
1115
+ def to_hash
1116
+ end
1117
+
1118
+ module Event
1119
+ extend ContextDev::Internal::Type::Enum
1120
+
1121
+ TaggedSymbol =
1122
+ T.type_alias do
1123
+ T.all(
1124
+ Symbol,
1125
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event
1126
+ )
1127
+ end
1128
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1129
+
1130
+ CHANGE_DETECTED =
1131
+ T.let(
1132
+ :"change.detected",
1133
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event::TaggedSymbol
1134
+ )
1135
+ RUN_COMPLETED =
1136
+ T.let(
1137
+ :"run.completed",
1138
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event::TaggedSymbol
1139
+ )
1140
+
1141
+ sig do
1142
+ override.returns(
1143
+ T::Array[
1144
+ ContextDev::Models::MonitorRetrieveResponse::Webhook::Event::TaggedSymbol
1145
+ ]
1146
+ )
1147
+ end
1148
+ def self.values
1149
+ end
1150
+ end
1151
+ end
1152
+
1153
+ class WebhookFailure < ContextDev::Internal::Type::BaseModel
1154
+ OrHash =
1155
+ T.type_alias do
1156
+ T.any(
1157
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure,
1158
+ ContextDev::Internal::AnyHash
1159
+ )
1160
+ end
1161
+
1162
+ # Number of consecutive delivery attempts that did not succeed.
1163
+ sig { returns(Integer) }
1164
+ attr_accessor :consecutive_failures
1165
+
1166
+ sig { returns(Time) }
1167
+ attr_accessor :last_failed_at
1168
+
1169
+ # Human-readable description of the most recent failure.
1170
+ sig { returns(String) }
1171
+ attr_accessor :last_message
1172
+
1173
+ # Outcome of the most recent failed delivery. rejected means a non-2xx response;
1174
+ # failed means no HTTP response was received; skipped_unsafe_url means the URL
1175
+ # failed the public-endpoint safety check.
1176
+ sig do
1177
+ returns(
1178
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus::TaggedSymbol
1179
+ )
1180
+ end
1181
+ attr_accessor :last_status
1182
+
1183
+ # Present while webhook deliveries are failing consecutively; null when deliveries
1184
+ # are healthy or no webhook is configured. Cleared on the next successful delivery
1185
+ # and when the webhook URL changes.
1186
+ sig do
1187
+ params(
1188
+ consecutive_failures: Integer,
1189
+ last_failed_at: Time,
1190
+ last_message: String,
1191
+ last_status:
1192
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus::OrSymbol
1193
+ ).returns(T.attached_class)
1194
+ end
1195
+ def self.new(
1196
+ # Number of consecutive delivery attempts that did not succeed.
1197
+ consecutive_failures:,
1198
+ last_failed_at:,
1199
+ # Human-readable description of the most recent failure.
1200
+ last_message:,
1201
+ # Outcome of the most recent failed delivery. rejected means a non-2xx response;
1202
+ # failed means no HTTP response was received; skipped_unsafe_url means the URL
1203
+ # failed the public-endpoint safety check.
1204
+ last_status:
1205
+ )
1206
+ end
1207
+
1208
+ sig do
1209
+ override.returns(
1210
+ {
1211
+ consecutive_failures: Integer,
1212
+ last_failed_at: Time,
1213
+ last_message: String,
1214
+ last_status:
1215
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus::TaggedSymbol
1216
+ }
1217
+ )
1218
+ end
1033
1219
  def to_hash
1034
1220
  end
1221
+
1222
+ # Outcome of the most recent failed delivery. rejected means a non-2xx response;
1223
+ # failed means no HTTP response was received; skipped_unsafe_url means the URL
1224
+ # failed the public-endpoint safety check.
1225
+ module LastStatus
1226
+ extend ContextDev::Internal::Type::Enum
1227
+
1228
+ TaggedSymbol =
1229
+ T.type_alias do
1230
+ T.all(
1231
+ Symbol,
1232
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus
1233
+ )
1234
+ end
1235
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1236
+
1237
+ REJECTED =
1238
+ T.let(
1239
+ :rejected,
1240
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus::TaggedSymbol
1241
+ )
1242
+ FAILED =
1243
+ T.let(
1244
+ :failed,
1245
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus::TaggedSymbol
1246
+ )
1247
+ SKIPPED_UNSAFE_URL =
1248
+ T.let(
1249
+ :skipped_unsafe_url,
1250
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus::TaggedSymbol
1251
+ )
1252
+
1253
+ sig do
1254
+ override.returns(
1255
+ T::Array[
1256
+ ContextDev::Models::MonitorRetrieveResponse::WebhookFailure::LastStatus::TaggedSymbol
1257
+ ]
1258
+ )
1259
+ end
1260
+ def self.values
1261
+ end
1262
+ end
1035
1263
  end
1036
1264
  end
1037
1265
  end
@@ -670,21 +670,101 @@ module ContextDev
670
670
  )
671
671
  end
672
672
 
673
- # Webhook URL called when a change is detected.
673
+ # Webhook URL events are delivered to.
674
674
  sig { returns(String) }
675
675
  attr_accessor :url
676
676
 
677
+ # Events delivered to this endpoint. `change.detected` fires only when a run
678
+ # detects a change; `run.completed` fires on every completed run — including runs
679
+ # that detected no change — and embeds the change when one was detected. Defaults
680
+ # to `["change.detected"]` when omitted.
681
+ sig do
682
+ returns(
683
+ T.nilable(
684
+ T::Array[
685
+ ContextDev::MonitorUpdateParams::Webhook::Event::OrSymbol
686
+ ]
687
+ )
688
+ )
689
+ end
690
+ attr_reader :events
691
+
692
+ sig do
693
+ params(
694
+ events:
695
+ T::Array[
696
+ ContextDev::MonitorUpdateParams::Webhook::Event::OrSymbol
697
+ ]
698
+ ).void
699
+ end
700
+ attr_writer :events
701
+
677
702
  # Set to null to remove the webhook.
678
- sig { params(url: String).returns(T.attached_class) }
703
+ sig do
704
+ params(
705
+ url: String,
706
+ events:
707
+ T::Array[
708
+ ContextDev::MonitorUpdateParams::Webhook::Event::OrSymbol
709
+ ]
710
+ ).returns(T.attached_class)
711
+ end
679
712
  def self.new(
680
- # Webhook URL called when a change is detected.
681
- url:
713
+ # Webhook URL events are delivered to.
714
+ url:,
715
+ # Events delivered to this endpoint. `change.detected` fires only when a run
716
+ # detects a change; `run.completed` fires on every completed run — including runs
717
+ # that detected no change — and embeds the change when one was detected. Defaults
718
+ # to `["change.detected"]` when omitted.
719
+ events: nil
682
720
  )
683
721
  end
684
722
 
685
- sig { override.returns({ url: String, secret: String }) }
723
+ sig do
724
+ override.returns(
725
+ {
726
+ url: String,
727
+ events:
728
+ T::Array[
729
+ ContextDev::MonitorUpdateParams::Webhook::Event::OrSymbol
730
+ ],
731
+ secret: String
732
+ }
733
+ )
734
+ end
686
735
  def to_hash
687
736
  end
737
+
738
+ module Event
739
+ extend ContextDev::Internal::Type::Enum
740
+
741
+ TaggedSymbol =
742
+ T.type_alias do
743
+ T.all(Symbol, ContextDev::MonitorUpdateParams::Webhook::Event)
744
+ end
745
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
746
+
747
+ CHANGE_DETECTED =
748
+ T.let(
749
+ :"change.detected",
750
+ ContextDev::MonitorUpdateParams::Webhook::Event::TaggedSymbol
751
+ )
752
+ RUN_COMPLETED =
753
+ T.let(
754
+ :"run.completed",
755
+ ContextDev::MonitorUpdateParams::Webhook::Event::TaggedSymbol
756
+ )
757
+
758
+ sig do
759
+ override.returns(
760
+ T::Array[
761
+ ContextDev::MonitorUpdateParams::Webhook::Event::TaggedSymbol
762
+ ]
763
+ )
764
+ end
765
+ def self.values
766
+ end
767
+ end
688
768
  end
689
769
  end
690
770
  end
@@ -128,6 +128,26 @@ module ContextDev
128
128
  end
129
129
  attr_writer :webhook
130
130
 
131
+ # Present while webhook deliveries are failing consecutively; null when deliveries
132
+ # are healthy or no webhook is configured. Cleared on the next successful delivery
133
+ # and when the webhook URL changes.
134
+ sig do
135
+ returns(
136
+ T.nilable(ContextDev::Models::MonitorUpdateResponse::WebhookFailure)
137
+ )
138
+ end
139
+ attr_reader :webhook_failure
140
+
141
+ sig do
142
+ params(
143
+ webhook_failure:
144
+ T.nilable(
145
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::OrHash
146
+ )
147
+ ).void
148
+ end
149
+ attr_writer :webhook_failure
150
+
131
151
  # A web monitor. `mode` is the constant `web`; behavior is described by `target`
132
152
  # (page/sitemap/extract) and `change_detection` (exact/semantic).
133
153
  sig do
@@ -169,6 +189,10 @@ module ContextDev
169
189
  webhook:
170
190
  T.nilable(
171
191
  ContextDev::Models::MonitorUpdateResponse::Webhook::OrHash
192
+ ),
193
+ webhook_failure:
194
+ T.nilable(
195
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::OrHash
172
196
  )
173
197
  ).returns(T.attached_class)
174
198
  end
@@ -207,7 +231,11 @@ module ContextDev
207
231
  next_run_at: nil,
208
232
  # User-defined tags for grouping and filtering monitors and their changes.
209
233
  tags: nil,
210
- webhook: nil
234
+ webhook: nil,
235
+ # Present while webhook deliveries are failing consecutively; null when deliveries
236
+ # are healthy or no webhook is configured. Cleared on the next successful delivery
237
+ # and when the webhook URL changes.
238
+ webhook_failure: nil
211
239
  )
212
240
  end
213
241
 
@@ -236,7 +264,11 @@ module ContextDev
236
264
  next_run_at: T.nilable(Time),
237
265
  tags: T::Array[String],
238
266
  webhook:
239
- T.nilable(ContextDev::Models::MonitorUpdateResponse::Webhook)
267
+ T.nilable(ContextDev::Models::MonitorUpdateResponse::Webhook),
268
+ webhook_failure:
269
+ T.nilable(
270
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure
271
+ )
240
272
  }
241
273
  )
242
274
  end
@@ -993,10 +1025,35 @@ module ContextDev
993
1025
  )
994
1026
  end
995
1027
 
996
- # Webhook URL called when a change is detected.
1028
+ # Webhook URL events are delivered to.
997
1029
  sig { returns(String) }
998
1030
  attr_accessor :url
999
1031
 
1032
+ # Events delivered to this endpoint. `change.detected` fires only when a run
1033
+ # detects a change; `run.completed` fires on every completed run — including runs
1034
+ # that detected no change — and embeds the change when one was detected. Defaults
1035
+ # to `["change.detected"]` when omitted.
1036
+ sig do
1037
+ returns(
1038
+ T.nilable(
1039
+ T::Array[
1040
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event::TaggedSymbol
1041
+ ]
1042
+ )
1043
+ )
1044
+ end
1045
+ attr_reader :events
1046
+
1047
+ sig do
1048
+ params(
1049
+ events:
1050
+ T::Array[
1051
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event::OrSymbol
1052
+ ]
1053
+ ).void
1054
+ end
1055
+ attr_writer :events
1056
+
1000
1057
  # Signing secret used to verify webhook authenticity. Each delivery includes an
1001
1058
  # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
1002
1059
  # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
@@ -1008,10 +1065,24 @@ module ContextDev
1008
1065
  sig { params(secret: String).void }
1009
1066
  attr_writer :secret
1010
1067
 
1011
- sig { params(url: String, secret: String).returns(T.attached_class) }
1068
+ sig do
1069
+ params(
1070
+ url: String,
1071
+ events:
1072
+ T::Array[
1073
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event::OrSymbol
1074
+ ],
1075
+ secret: String
1076
+ ).returns(T.attached_class)
1077
+ end
1012
1078
  def self.new(
1013
- # Webhook URL called when a change is detected.
1079
+ # Webhook URL events are delivered to.
1014
1080
  url:,
1081
+ # Events delivered to this endpoint. `change.detected` fires only when a run
1082
+ # detects a change; `run.completed` fires on every completed run — including runs
1083
+ # that detected no change — and embeds the change when one was detected. Defaults
1084
+ # to `["change.detected"]` when omitted.
1085
+ events: nil,
1015
1086
  # Signing secret used to verify webhook authenticity. Each delivery includes an
1016
1087
  # `X-Context-Signature: t=<unix>,v1=<hmac>` header, where the HMAC is SHA-256 over
1017
1088
  # `"{t}.{rawRequestBody}"` keyed by this secret. Recompute it with a constant-time
@@ -1021,9 +1092,166 @@ module ContextDev
1021
1092
  )
1022
1093
  end
1023
1094
 
1024
- sig { override.returns({ url: String, secret: String }) }
1095
+ sig do
1096
+ override.returns(
1097
+ {
1098
+ url: String,
1099
+ events:
1100
+ T::Array[
1101
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event::TaggedSymbol
1102
+ ],
1103
+ secret: String
1104
+ }
1105
+ )
1106
+ end
1107
+ def to_hash
1108
+ end
1109
+
1110
+ module Event
1111
+ extend ContextDev::Internal::Type::Enum
1112
+
1113
+ TaggedSymbol =
1114
+ T.type_alias do
1115
+ T.all(
1116
+ Symbol,
1117
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event
1118
+ )
1119
+ end
1120
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1121
+
1122
+ CHANGE_DETECTED =
1123
+ T.let(
1124
+ :"change.detected",
1125
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event::TaggedSymbol
1126
+ )
1127
+ RUN_COMPLETED =
1128
+ T.let(
1129
+ :"run.completed",
1130
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event::TaggedSymbol
1131
+ )
1132
+
1133
+ sig do
1134
+ override.returns(
1135
+ T::Array[
1136
+ ContextDev::Models::MonitorUpdateResponse::Webhook::Event::TaggedSymbol
1137
+ ]
1138
+ )
1139
+ end
1140
+ def self.values
1141
+ end
1142
+ end
1143
+ end
1144
+
1145
+ class WebhookFailure < ContextDev::Internal::Type::BaseModel
1146
+ OrHash =
1147
+ T.type_alias do
1148
+ T.any(
1149
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure,
1150
+ ContextDev::Internal::AnyHash
1151
+ )
1152
+ end
1153
+
1154
+ # Number of consecutive delivery attempts that did not succeed.
1155
+ sig { returns(Integer) }
1156
+ attr_accessor :consecutive_failures
1157
+
1158
+ sig { returns(Time) }
1159
+ attr_accessor :last_failed_at
1160
+
1161
+ # Human-readable description of the most recent failure.
1162
+ sig { returns(String) }
1163
+ attr_accessor :last_message
1164
+
1165
+ # Outcome of the most recent failed delivery. rejected means a non-2xx response;
1166
+ # failed means no HTTP response was received; skipped_unsafe_url means the URL
1167
+ # failed the public-endpoint safety check.
1168
+ sig do
1169
+ returns(
1170
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus::TaggedSymbol
1171
+ )
1172
+ end
1173
+ attr_accessor :last_status
1174
+
1175
+ # Present while webhook deliveries are failing consecutively; null when deliveries
1176
+ # are healthy or no webhook is configured. Cleared on the next successful delivery
1177
+ # and when the webhook URL changes.
1178
+ sig do
1179
+ params(
1180
+ consecutive_failures: Integer,
1181
+ last_failed_at: Time,
1182
+ last_message: String,
1183
+ last_status:
1184
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus::OrSymbol
1185
+ ).returns(T.attached_class)
1186
+ end
1187
+ def self.new(
1188
+ # Number of consecutive delivery attempts that did not succeed.
1189
+ consecutive_failures:,
1190
+ last_failed_at:,
1191
+ # Human-readable description of the most recent failure.
1192
+ last_message:,
1193
+ # Outcome of the most recent failed delivery. rejected means a non-2xx response;
1194
+ # failed means no HTTP response was received; skipped_unsafe_url means the URL
1195
+ # failed the public-endpoint safety check.
1196
+ last_status:
1197
+ )
1198
+ end
1199
+
1200
+ sig do
1201
+ override.returns(
1202
+ {
1203
+ consecutive_failures: Integer,
1204
+ last_failed_at: Time,
1205
+ last_message: String,
1206
+ last_status:
1207
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus::TaggedSymbol
1208
+ }
1209
+ )
1210
+ end
1025
1211
  def to_hash
1026
1212
  end
1213
+
1214
+ # Outcome of the most recent failed delivery. rejected means a non-2xx response;
1215
+ # failed means no HTTP response was received; skipped_unsafe_url means the URL
1216
+ # failed the public-endpoint safety check.
1217
+ module LastStatus
1218
+ extend ContextDev::Internal::Type::Enum
1219
+
1220
+ TaggedSymbol =
1221
+ T.type_alias do
1222
+ T.all(
1223
+ Symbol,
1224
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus
1225
+ )
1226
+ end
1227
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1228
+
1229
+ REJECTED =
1230
+ T.let(
1231
+ :rejected,
1232
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus::TaggedSymbol
1233
+ )
1234
+ FAILED =
1235
+ T.let(
1236
+ :failed,
1237
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus::TaggedSymbol
1238
+ )
1239
+ SKIPPED_UNSAFE_URL =
1240
+ T.let(
1241
+ :skipped_unsafe_url,
1242
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus::TaggedSymbol
1243
+ )
1244
+
1245
+ sig do
1246
+ override.returns(
1247
+ T::Array[
1248
+ ContextDev::Models::MonitorUpdateResponse::WebhookFailure::LastStatus::TaggedSymbol
1249
+ ]
1250
+ )
1251
+ end
1252
+ def self.values
1253
+ end
1254
+ end
1027
1255
  end
1028
1256
  end
1029
1257
  end