context.dev 2.2.0 → 2.4.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 +4 -4
- data/CHANGELOG.md +22 -0
- data/README.md +9 -9
- data/lib/context_dev/client.rb +7 -2
- data/lib/context_dev/internal/type/base_model.rb +5 -5
- data/lib/context_dev/models/monitor_create_params.rb +28 -3
- data/lib/context_dev/models/monitor_create_response.rb +96 -4
- data/lib/context_dev/models/monitor_list_account_runs_response.rb +19 -98
- data/lib/context_dev/models/monitor_list_response.rb +100 -4
- data/lib/context_dev/models/monitor_list_runs_response.rb +19 -96
- data/lib/context_dev/models/monitor_retrieve_change_response.rb +10 -10
- data/lib/context_dev/models/monitor_retrieve_response.rb +97 -4
- data/lib/context_dev/models/monitor_update_params.rb +28 -3
- data/lib/context_dev/models/monitor_update_response.rb +96 -4
- data/lib/context_dev/models/parse_handle_params.rb +194 -0
- data/lib/context_dev/models/parse_handle_response.rb +132 -0
- data/lib/context_dev/models/web_web_crawl_md_params.rb +16 -6
- data/lib/context_dev/models/web_web_scrape_html_params.rb +16 -6
- data/lib/context_dev/models/web_web_scrape_md_params.rb +16 -6
- data/lib/context_dev/models/web_web_scrape_md_response.rb +11 -1
- data/lib/context_dev/models/webhook_delivery.rb +109 -0
- data/lib/context_dev/models.rb +4 -0
- data/lib/context_dev/resources/monitors.rb +3 -2
- data/lib/context_dev/resources/parse.rb +59 -0
- data/lib/context_dev/resources/web.rb +19 -4
- data/lib/context_dev/version.rb +1 -1
- data/lib/context_dev.rb +4 -0
- data/rbi/context_dev/client.rbi +6 -2
- data/rbi/context_dev/models/monitor_create_params.rbi +85 -5
- data/rbi/context_dev/models/monitor_create_response.rbi +234 -6
- data/rbi/context_dev/models/monitor_list_account_runs_response.rbi +27 -192
- data/rbi/context_dev/models/monitor_list_response.rbi +235 -5
- data/rbi/context_dev/models/monitor_list_runs_response.rbi +27 -192
- data/rbi/context_dev/models/monitor_retrieve_change_response.rbi +12 -15
- data/rbi/context_dev/models/monitor_retrieve_response.rbi +234 -6
- data/rbi/context_dev/models/monitor_update_params.rbi +85 -5
- data/rbi/context_dev/models/monitor_update_response.rbi +234 -6
- data/rbi/context_dev/models/parse_handle_params.rbi +339 -0
- data/rbi/context_dev/models/parse_handle_response.rbi +377 -0
- data/rbi/context_dev/models/web_web_crawl_md_params.rbi +26 -7
- data/rbi/context_dev/models/web_web_scrape_html_params.rbi +26 -7
- data/rbi/context_dev/models/web_web_scrape_md_params.rbi +26 -7
- data/rbi/context_dev/models/web_web_scrape_md_response.rbi +12 -0
- data/rbi/context_dev/models/webhook_delivery.rbi +172 -0
- data/rbi/context_dev/models.rbi +4 -0
- data/rbi/context_dev/resources/monitors.rbi +3 -2
- data/rbi/context_dev/resources/parse.rbi +58 -0
- data/rbi/context_dev/resources/web.rbi +22 -7
- data/sig/context_dev/client.rbs +2 -0
- data/sig/context_dev/models/monitor_create_params.rbs +32 -3
- data/sig/context_dev/models/monitor_create_response.rbs +85 -6
- data/sig/context_dev/models/monitor_list_account_runs_response.rbs +15 -68
- data/sig/context_dev/models/monitor_list_response.rbs +85 -6
- data/sig/context_dev/models/monitor_list_runs_response.rbs +15 -68
- data/sig/context_dev/models/monitor_retrieve_change_response.rbs +8 -10
- data/sig/context_dev/models/monitor_retrieve_response.rbs +85 -6
- data/sig/context_dev/models/monitor_update_params.rbs +32 -3
- data/sig/context_dev/models/monitor_update_response.rbs +85 -6
- data/sig/context_dev/models/parse_handle_params.rbs +244 -0
- data/sig/context_dev/models/parse_handle_response.rbs +159 -0
- data/sig/context_dev/models/web_web_crawl_md_params.rbs +13 -2
- data/sig/context_dev/models/web_web_scrape_html_params.rbs +13 -2
- data/sig/context_dev/models/web_web_scrape_md_params.rbs +13 -2
- data/sig/context_dev/models/web_web_scrape_md_response.rbs +5 -0
- data/sig/context_dev/models/webhook_delivery.rbs +81 -0
- data/sig/context_dev/models.rbs +4 -0
- data/sig/context_dev/resources/parse.rbs +19 -0
- metadata +14 -2
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ContextDev
|
|
4
|
+
module Resources
|
|
5
|
+
class Parse
|
|
6
|
+
# Some parameter documentations has been truncated, see
|
|
7
|
+
# {ContextDev::Models::ParseHandleParams} for more details.
|
|
8
|
+
#
|
|
9
|
+
# Converts raw text, source code, web/data, PDF, Microsoft Office, and image bytes
|
|
10
|
+
# into LLM-usable Markdown. The base request costs 1 credit. When OCR runs
|
|
11
|
+
# (requires ocr=true), the entire call costs 5 credits; ocr=true requests where no
|
|
12
|
+
# OCR ends up running still cost 1 credit.
|
|
13
|
+
#
|
|
14
|
+
# @overload handle(body:, extension: nil, include_images: nil, include_links: nil, ocr: nil, pdf: nil, shorten_base64_images: nil, use_main_content_only: nil, request_options: {})
|
|
15
|
+
#
|
|
16
|
+
# @param body [Pathname, StringIO, IO, String, ContextDev::FilePart] Body param
|
|
17
|
+
#
|
|
18
|
+
# @param extension [Symbol, ContextDev::Models::ParseHandleParams::Extension] Query param: Optional file extension hint. Case-insensitive; a leading dot is ac
|
|
19
|
+
#
|
|
20
|
+
# @param include_images [Boolean] Query param: Include image references in Markdown output
|
|
21
|
+
#
|
|
22
|
+
# @param include_links [Boolean] Query param: Preserve hyperlinks in Markdown output
|
|
23
|
+
#
|
|
24
|
+
# @param ocr [Boolean] Query param: Gates all OCR. When true, PDFs get embedded-image OCR (recognized t
|
|
25
|
+
#
|
|
26
|
+
# @param pdf [ContextDev::Models::ParseHandleParams::Pdf] Query param: PDF page-range controls. Use start/end to limit parsing (and OCR wh
|
|
27
|
+
#
|
|
28
|
+
# @param shorten_base64_images [Boolean] Query param: Shorten base64-encoded image data in the Markdown output
|
|
29
|
+
#
|
|
30
|
+
# @param use_main_content_only [Boolean] Query param: Extract only the main content from HTML-like inputs
|
|
31
|
+
#
|
|
32
|
+
# @param request_options [ContextDev::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
33
|
+
#
|
|
34
|
+
# @return [ContextDev::Models::ParseHandleResponse]
|
|
35
|
+
#
|
|
36
|
+
# @see ContextDev::Models::ParseHandleParams
|
|
37
|
+
def handle(params)
|
|
38
|
+
parsed, options = ContextDev::ParseHandleParams.dump_request(params)
|
|
39
|
+
query = ContextDev::Internal::Util.encode_query_params(parsed.except(:body))
|
|
40
|
+
@client.request(
|
|
41
|
+
method: :post,
|
|
42
|
+
path: "parse",
|
|
43
|
+
query: query,
|
|
44
|
+
headers: {"content-type" => "application/octet-stream"},
|
|
45
|
+
body: parsed[:body],
|
|
46
|
+
model: ContextDev::Models::ParseHandleResponse,
|
|
47
|
+
options: options
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @api private
|
|
52
|
+
#
|
|
53
|
+
# @param client [ContextDev::Client]
|
|
54
|
+
def initialize(client:)
|
|
55
|
+
@client = client
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -289,7 +289,7 @@ module ContextDev
|
|
|
289
289
|
#
|
|
290
290
|
# @param max_pages [Integer] Maximum number of pages to crawl. Hard cap: 500.
|
|
291
291
|
#
|
|
292
|
-
# @param pdf [ContextDev::Models::WebWebCrawlMdParams::Pdf] PDF parsing controls. Use start/end to limit text extraction and
|
|
292
|
+
# @param pdf [ContextDev::Models::WebWebCrawlMdParams::Pdf] PDF parsing controls. Use start/end to limit text extraction and embedded-image
|
|
293
293
|
#
|
|
294
294
|
# @param settle_animations [Boolean] When true, waits briefly for CSS and transition animations to settle before extr
|
|
295
295
|
#
|
|
@@ -342,7 +342,7 @@ module ContextDev
|
|
|
342
342
|
#
|
|
343
343
|
# @param max_age_ms [Integer] Return a cached result if a prior scrape for the same parameters exists and is y
|
|
344
344
|
#
|
|
345
|
-
# @param pdf [ContextDev::Models::WebWebScrapeHTMLParams::Pdf] PDF parsing controls. Use start/end to limit text extraction and
|
|
345
|
+
# @param pdf [ContextDev::Models::WebWebScrapeHTMLParams::Pdf] PDF parsing controls. Use start/end to limit text extraction and embedded-image
|
|
346
346
|
#
|
|
347
347
|
# @param settle_animations [Boolean] When true, waits briefly for CSS and transition animations to settle before extr
|
|
348
348
|
#
|
|
@@ -426,7 +426,22 @@ module ContextDev
|
|
|
426
426
|
# Some parameter documentations has been truncated, see
|
|
427
427
|
# {ContextDev::Models::WebWebScrapeMdParams} for more details.
|
|
428
428
|
#
|
|
429
|
-
# Scrapes the given URL into LLM usable Markdown.
|
|
429
|
+
# Scrapes the given URL into LLM usable Markdown. Inspect key_metadata on JSON
|
|
430
|
+
# responses from a recognized API key; use error_code to distinguish stable
|
|
431
|
+
# failure categories.
|
|
432
|
+
#
|
|
433
|
+
# ### Billing & errors
|
|
434
|
+
#
|
|
435
|
+
# | HTTP status | Billed? | Meaning |
|
|
436
|
+
# | ----------- | -------------- | ---------------------------------------------------------------------------------------- |
|
|
437
|
+
# | 200 | Yes — 1 credit | Successful scrape, including a zero-length result when includeSelectors matched nothing |
|
|
438
|
+
# | 400 | No | Invalid input, skipped PDF, or the page could not be scraped |
|
|
439
|
+
# | 401 / 403 | No | Invalid/disabled key, insufficient permissions, or credits exhausted; inspect error_code |
|
|
440
|
+
# | 404 | No | Target page returned or fingerprinted as not found |
|
|
441
|
+
# | 408 | No | Request timed out |
|
|
442
|
+
# | 415 | No | Unsupported content type |
|
|
443
|
+
# | 429 | No | Per-minute rate limit exceeded; honor Retry-After |
|
|
444
|
+
# | 500 | No | Internal error |
|
|
430
445
|
#
|
|
431
446
|
# @overload web_scrape_md(url:, country: nil, exclude_selectors: nil, headers: nil, include_frames: nil, include_images: nil, include_links: nil, include_selectors: nil, max_age_ms: nil, pdf: nil, settle_animations: nil, shorten_base64_images: nil, timeout_ms: nil, use_main_content_only: nil, wait_for_ms: nil, request_options: {})
|
|
432
447
|
#
|
|
@@ -448,7 +463,7 @@ module ContextDev
|
|
|
448
463
|
#
|
|
449
464
|
# @param max_age_ms [Integer] Return a cached result if a prior scrape for the same parameters exists and is y
|
|
450
465
|
#
|
|
451
|
-
# @param pdf [ContextDev::Models::WebWebScrapeMdParams::Pdf] PDF parsing controls. Use start/end to limit text extraction and
|
|
466
|
+
# @param pdf [ContextDev::Models::WebWebScrapeMdParams::Pdf] PDF parsing controls. Use start/end to limit text extraction and embedded-image
|
|
452
467
|
#
|
|
453
468
|
# @param settle_animations [Boolean] When true, waits briefly for CSS and transition animations to settle before conv
|
|
454
469
|
#
|
data/lib/context_dev/version.rb
CHANGED
data/lib/context_dev.rb
CHANGED
|
@@ -86,6 +86,8 @@ require_relative "context_dev/models/monitor_run_params"
|
|
|
86
86
|
require_relative "context_dev/models/monitor_run_response"
|
|
87
87
|
require_relative "context_dev/models/monitor_update_params"
|
|
88
88
|
require_relative "context_dev/models/monitor_update_response"
|
|
89
|
+
require_relative "context_dev/models/parse_handle_params"
|
|
90
|
+
require_relative "context_dev/models/parse_handle_response"
|
|
89
91
|
require_relative "context_dev/models/utility_prefetch_params"
|
|
90
92
|
require_relative "context_dev/models/utility_prefetch_response"
|
|
91
93
|
require_relative "context_dev/models/web_extract_competitors_params"
|
|
@@ -96,6 +98,7 @@ require_relative "context_dev/models/web_extract_params"
|
|
|
96
98
|
require_relative "context_dev/models/web_extract_response"
|
|
97
99
|
require_relative "context_dev/models/web_extract_styleguide_params"
|
|
98
100
|
require_relative "context_dev/models/web_extract_styleguide_response"
|
|
101
|
+
require_relative "context_dev/models/webhook_delivery"
|
|
99
102
|
require_relative "context_dev/models/web_screenshot_params"
|
|
100
103
|
require_relative "context_dev/models/web_screenshot_response"
|
|
101
104
|
require_relative "context_dev/models/web_search_params"
|
|
@@ -115,5 +118,6 @@ require_relative "context_dev/resources/ai"
|
|
|
115
118
|
require_relative "context_dev/resources/brand"
|
|
116
119
|
require_relative "context_dev/resources/industry"
|
|
117
120
|
require_relative "context_dev/resources/monitors"
|
|
121
|
+
require_relative "context_dev/resources/parse"
|
|
118
122
|
require_relative "context_dev/resources/utility"
|
|
119
123
|
require_relative "context_dev/resources/web"
|
data/rbi/context_dev/client.rbi
CHANGED
|
@@ -13,6 +13,9 @@ module ContextDev
|
|
|
13
13
|
sig { returns(String) }
|
|
14
14
|
attr_reader :api_key
|
|
15
15
|
|
|
16
|
+
sig { returns(ContextDev::Resources::Parse) }
|
|
17
|
+
attr_reader :parse
|
|
18
|
+
|
|
16
19
|
sig { returns(ContextDev::Resources::Web) }
|
|
17
20
|
attr_reader :web
|
|
18
21
|
|
|
@@ -29,8 +32,9 @@ module ContextDev
|
|
|
29
32
|
attr_reader :utility
|
|
30
33
|
|
|
31
34
|
# Monitor pages, sitemaps, and extracted website data for exact or semantic
|
|
32
|
-
# changes.
|
|
33
|
-
# MonitorsChangeDetectedWebhookPayload
|
|
35
|
+
# changes. Webhook payloads are documented by the
|
|
36
|
+
# MonitorsChangeDetectedWebhookPayload and MonitorsRunCompletedWebhookPayload
|
|
37
|
+
# schemas.
|
|
34
38
|
sig { returns(ContextDev::Resources::Monitors) }
|
|
35
39
|
attr_reader :monitors
|
|
36
40
|
|
|
@@ -631,20 +631,100 @@ module ContextDev
|
|
|
631
631
|
)
|
|
632
632
|
end
|
|
633
633
|
|
|
634
|
-
# Webhook URL
|
|
634
|
+
# Webhook URL events are delivered to.
|
|
635
635
|
sig { returns(String) }
|
|
636
636
|
attr_accessor :url
|
|
637
637
|
|
|
638
|
-
|
|
638
|
+
# Events delivered to this endpoint. `change.detected` fires only when a run
|
|
639
|
+
# detects a change; `run.completed` fires on every completed run — including runs
|
|
640
|
+
# that detected no change — and embeds the change when one was detected. Defaults
|
|
641
|
+
# to `["change.detected"]` when omitted.
|
|
642
|
+
sig do
|
|
643
|
+
returns(
|
|
644
|
+
T.nilable(
|
|
645
|
+
T::Array[
|
|
646
|
+
ContextDev::MonitorCreateParams::Webhook::Event::OrSymbol
|
|
647
|
+
]
|
|
648
|
+
)
|
|
649
|
+
)
|
|
650
|
+
end
|
|
651
|
+
attr_reader :events
|
|
652
|
+
|
|
653
|
+
sig do
|
|
654
|
+
params(
|
|
655
|
+
events:
|
|
656
|
+
T::Array[
|
|
657
|
+
ContextDev::MonitorCreateParams::Webhook::Event::OrSymbol
|
|
658
|
+
]
|
|
659
|
+
).void
|
|
660
|
+
end
|
|
661
|
+
attr_writer :events
|
|
662
|
+
|
|
663
|
+
sig do
|
|
664
|
+
params(
|
|
665
|
+
url: String,
|
|
666
|
+
events:
|
|
667
|
+
T::Array[
|
|
668
|
+
ContextDev::MonitorCreateParams::Webhook::Event::OrSymbol
|
|
669
|
+
]
|
|
670
|
+
).returns(T.attached_class)
|
|
671
|
+
end
|
|
639
672
|
def self.new(
|
|
640
|
-
# Webhook URL
|
|
641
|
-
url
|
|
673
|
+
# Webhook URL events are delivered to.
|
|
674
|
+
url:,
|
|
675
|
+
# Events delivered to this endpoint. `change.detected` fires only when a run
|
|
676
|
+
# detects a change; `run.completed` fires on every completed run — including runs
|
|
677
|
+
# that detected no change — and embeds the change when one was detected. Defaults
|
|
678
|
+
# to `["change.detected"]` when omitted.
|
|
679
|
+
events: nil
|
|
642
680
|
)
|
|
643
681
|
end
|
|
644
682
|
|
|
645
|
-
sig
|
|
683
|
+
sig do
|
|
684
|
+
override.returns(
|
|
685
|
+
{
|
|
686
|
+
url: String,
|
|
687
|
+
events:
|
|
688
|
+
T::Array[
|
|
689
|
+
ContextDev::MonitorCreateParams::Webhook::Event::OrSymbol
|
|
690
|
+
],
|
|
691
|
+
secret: String
|
|
692
|
+
}
|
|
693
|
+
)
|
|
694
|
+
end
|
|
646
695
|
def to_hash
|
|
647
696
|
end
|
|
697
|
+
|
|
698
|
+
module Event
|
|
699
|
+
extend ContextDev::Internal::Type::Enum
|
|
700
|
+
|
|
701
|
+
TaggedSymbol =
|
|
702
|
+
T.type_alias do
|
|
703
|
+
T.all(Symbol, ContextDev::MonitorCreateParams::Webhook::Event)
|
|
704
|
+
end
|
|
705
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
706
|
+
|
|
707
|
+
CHANGE_DETECTED =
|
|
708
|
+
T.let(
|
|
709
|
+
:"change.detected",
|
|
710
|
+
ContextDev::MonitorCreateParams::Webhook::Event::TaggedSymbol
|
|
711
|
+
)
|
|
712
|
+
RUN_COMPLETED =
|
|
713
|
+
T.let(
|
|
714
|
+
:"run.completed",
|
|
715
|
+
ContextDev::MonitorCreateParams::Webhook::Event::TaggedSymbol
|
|
716
|
+
)
|
|
717
|
+
|
|
718
|
+
sig do
|
|
719
|
+
override.returns(
|
|
720
|
+
T::Array[
|
|
721
|
+
ContextDev::MonitorCreateParams::Webhook::Event::TaggedSymbol
|
|
722
|
+
]
|
|
723
|
+
)
|
|
724
|
+
end
|
|
725
|
+
def self.values
|
|
726
|
+
end
|
|
727
|
+
end
|
|
648
728
|
end
|
|
649
729
|
end
|
|
650
730
|
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::MonitorCreateResponse::WebhookFailure)
|
|
137
|
+
)
|
|
138
|
+
end
|
|
139
|
+
attr_reader :webhook_failure
|
|
140
|
+
|
|
141
|
+
sig do
|
|
142
|
+
params(
|
|
143
|
+
webhook_failure:
|
|
144
|
+
T.nilable(
|
|
145
|
+
ContextDev::Models::MonitorCreateResponse::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::MonitorCreateResponse::Webhook::OrHash
|
|
192
|
+
),
|
|
193
|
+
webhook_failure:
|
|
194
|
+
T.nilable(
|
|
195
|
+
ContextDev::Models::MonitorCreateResponse::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::MonitorCreateResponse::Webhook)
|
|
267
|
+
T.nilable(ContextDev::Models::MonitorCreateResponse::Webhook),
|
|
268
|
+
webhook_failure:
|
|
269
|
+
T.nilable(
|
|
270
|
+
ContextDev::Models::MonitorCreateResponse::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
|
|
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::MonitorCreateResponse::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::MonitorCreateResponse::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
|
|
1068
|
+
sig do
|
|
1069
|
+
params(
|
|
1070
|
+
url: String,
|
|
1071
|
+
events:
|
|
1072
|
+
T::Array[
|
|
1073
|
+
ContextDev::Models::MonitorCreateResponse::Webhook::Event::OrSymbol
|
|
1074
|
+
],
|
|
1075
|
+
secret: String
|
|
1076
|
+
).returns(T.attached_class)
|
|
1077
|
+
end
|
|
1012
1078
|
def self.new(
|
|
1013
|
-
# Webhook URL
|
|
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
|
|
1095
|
+
sig do
|
|
1096
|
+
override.returns(
|
|
1097
|
+
{
|
|
1098
|
+
url: String,
|
|
1099
|
+
events:
|
|
1100
|
+
T::Array[
|
|
1101
|
+
ContextDev::Models::MonitorCreateResponse::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::MonitorCreateResponse::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::MonitorCreateResponse::Webhook::Event::TaggedSymbol
|
|
1126
|
+
)
|
|
1127
|
+
RUN_COMPLETED =
|
|
1128
|
+
T.let(
|
|
1129
|
+
:"run.completed",
|
|
1130
|
+
ContextDev::Models::MonitorCreateResponse::Webhook::Event::TaggedSymbol
|
|
1131
|
+
)
|
|
1132
|
+
|
|
1133
|
+
sig do
|
|
1134
|
+
override.returns(
|
|
1135
|
+
T::Array[
|
|
1136
|
+
ContextDev::Models::MonitorCreateResponse::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::MonitorCreateResponse::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::MonitorCreateResponse::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::MonitorCreateResponse::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::MonitorCreateResponse::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::MonitorCreateResponse::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::MonitorCreateResponse::WebhookFailure::LastStatus::TaggedSymbol
|
|
1233
|
+
)
|
|
1234
|
+
FAILED =
|
|
1235
|
+
T.let(
|
|
1236
|
+
:failed,
|
|
1237
|
+
ContextDev::Models::MonitorCreateResponse::WebhookFailure::LastStatus::TaggedSymbol
|
|
1238
|
+
)
|
|
1239
|
+
SKIPPED_UNSAFE_URL =
|
|
1240
|
+
T.let(
|
|
1241
|
+
:skipped_unsafe_url,
|
|
1242
|
+
ContextDev::Models::MonitorCreateResponse::WebhookFailure::LastStatus::TaggedSymbol
|
|
1243
|
+
)
|
|
1244
|
+
|
|
1245
|
+
sig do
|
|
1246
|
+
override.returns(
|
|
1247
|
+
T::Array[
|
|
1248
|
+
ContextDev::Models::MonitorCreateResponse::WebhookFailure::LastStatus::TaggedSymbol
|
|
1249
|
+
]
|
|
1250
|
+
)
|
|
1251
|
+
end
|
|
1252
|
+
def self.values
|
|
1253
|
+
end
|
|
1254
|
+
end
|
|
1027
1255
|
end
|
|
1028
1256
|
end
|
|
1029
1257
|
end
|