context.dev 1.32.0 → 1.34.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 +21 -0
- data/README.md +1 -1
- data/lib/context_dev/internal/transport/base_client.rb +4 -1
- data/lib/context_dev/models/web_web_crawl_md_response.rb +238 -5
- data/lib/context_dev/models/web_web_scrape_html_response.rb +258 -1
- data/lib/context_dev/models/web_web_scrape_md_response.rb +256 -1
- data/lib/context_dev/version.rb +1 -1
- data/rbi/context_dev/models/web_web_crawl_md_response.rbi +426 -7
- data/rbi/context_dev/models/web_web_scrape_html_response.rbi +485 -0
- data/rbi/context_dev/models/web_web_scrape_md_response.rbi +474 -0
- data/sig/context_dev/models/web_web_crawl_md_response.rbs +198 -3
- data/sig/context_dev/models/web_web_scrape_html_response.rbs +232 -1
- data/sig/context_dev/models/web_web_scrape_md_response.rbs +219 -0
- metadata +2 -2
|
@@ -208,6 +208,15 @@ module ContextDev
|
|
|
208
208
|
sig { returns(Integer) }
|
|
209
209
|
attr_accessor :crawl_depth
|
|
210
210
|
|
|
211
|
+
# Final URL scraped after redirects or scraper fallback, when known. Falls back to
|
|
212
|
+
# sourceUrl when unavailable.
|
|
213
|
+
sig { returns(String) }
|
|
214
|
+
attr_accessor :final_url
|
|
215
|
+
|
|
216
|
+
# Original URL requested by the caller.
|
|
217
|
+
sig { returns(String) }
|
|
218
|
+
attr_accessor :source_url
|
|
219
|
+
|
|
211
220
|
# HTTP status code of the response
|
|
212
221
|
sig { returns(Integer) }
|
|
213
222
|
attr_accessor :status_code
|
|
@@ -216,34 +225,282 @@ module ContextDev
|
|
|
216
225
|
sig { returns(T::Boolean) }
|
|
217
226
|
attr_accessor :success
|
|
218
227
|
|
|
219
|
-
#
|
|
228
|
+
# Best page title extracted from the page (empty string if unavailable).
|
|
220
229
|
sig { returns(String) }
|
|
221
230
|
attr_accessor :title
|
|
222
231
|
|
|
223
|
-
# The URL
|
|
232
|
+
# The crawl URL fetched for this page.
|
|
224
233
|
sig { returns(String) }
|
|
225
234
|
attr_accessor :url
|
|
226
235
|
|
|
236
|
+
# Additional non-social meta tags not promoted to top-level metadata fields.
|
|
237
|
+
sig do
|
|
238
|
+
returns(
|
|
239
|
+
T.nilable(
|
|
240
|
+
T::Hash[
|
|
241
|
+
Symbol,
|
|
242
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::AdditionalMeta::Variants
|
|
243
|
+
]
|
|
244
|
+
)
|
|
245
|
+
)
|
|
246
|
+
end
|
|
247
|
+
attr_reader :additional_meta
|
|
248
|
+
|
|
249
|
+
sig do
|
|
250
|
+
params(
|
|
251
|
+
additional_meta:
|
|
252
|
+
T::Hash[
|
|
253
|
+
Symbol,
|
|
254
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::AdditionalMeta::Variants
|
|
255
|
+
]
|
|
256
|
+
).void
|
|
257
|
+
end
|
|
258
|
+
attr_writer :additional_meta
|
|
259
|
+
|
|
260
|
+
# Resolved alternate links from link rel=alternate tags.
|
|
261
|
+
sig do
|
|
262
|
+
returns(
|
|
263
|
+
T.nilable(
|
|
264
|
+
T::Array[
|
|
265
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Alternate
|
|
266
|
+
]
|
|
267
|
+
)
|
|
268
|
+
)
|
|
269
|
+
end
|
|
270
|
+
attr_reader :alternates
|
|
271
|
+
|
|
272
|
+
sig do
|
|
273
|
+
params(
|
|
274
|
+
alternates:
|
|
275
|
+
T::Array[
|
|
276
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Alternate::OrHash
|
|
277
|
+
]
|
|
278
|
+
).void
|
|
279
|
+
end
|
|
280
|
+
attr_writer :alternates
|
|
281
|
+
|
|
282
|
+
# Author metadata, when present.
|
|
283
|
+
sig { returns(T.nilable(String)) }
|
|
284
|
+
attr_reader :author
|
|
285
|
+
|
|
286
|
+
sig { params(author: String).void }
|
|
287
|
+
attr_writer :author
|
|
288
|
+
|
|
289
|
+
# Resolved canonical URL, when present.
|
|
290
|
+
sig { returns(T.nilable(String)) }
|
|
291
|
+
attr_reader :canonical_url
|
|
292
|
+
|
|
293
|
+
sig { params(canonical_url: String).void }
|
|
294
|
+
attr_writer :canonical_url
|
|
295
|
+
|
|
296
|
+
# Best description extracted from standard, Open Graph, or Twitter metadata.
|
|
297
|
+
sig { returns(T.nilable(String)) }
|
|
298
|
+
attr_reader :description
|
|
299
|
+
|
|
300
|
+
sig { params(description: String).void }
|
|
301
|
+
attr_writer :description
|
|
302
|
+
|
|
303
|
+
# Resolved favicon URL, when present.
|
|
304
|
+
sig { returns(T.nilable(String)) }
|
|
305
|
+
attr_reader :favicon
|
|
306
|
+
|
|
307
|
+
sig { params(favicon: String).void }
|
|
308
|
+
attr_writer :favicon
|
|
309
|
+
|
|
310
|
+
# Primary resolved preview image from Open Graph, Twitter, or image metadata.
|
|
311
|
+
sig { returns(T.nilable(String)) }
|
|
312
|
+
attr_reader :image
|
|
313
|
+
|
|
314
|
+
sig { params(image: String).void }
|
|
315
|
+
attr_writer :image
|
|
316
|
+
|
|
317
|
+
# JSON-LD structured data blocks parsed from the page.
|
|
318
|
+
sig { returns(T.nilable(T::Array[T::Hash[Symbol, T.anything]])) }
|
|
319
|
+
attr_reader :json_ld
|
|
320
|
+
|
|
321
|
+
sig { params(json_ld: T::Array[T::Hash[Symbol, T.anything]]).void }
|
|
322
|
+
attr_writer :json_ld
|
|
323
|
+
|
|
324
|
+
# Keywords extracted from the page's keywords meta tag.
|
|
325
|
+
sig { returns(T.nilable(T::Array[String])) }
|
|
326
|
+
attr_reader :keywords
|
|
327
|
+
|
|
328
|
+
sig { params(keywords: T::Array[String]).void }
|
|
329
|
+
attr_writer :keywords
|
|
330
|
+
|
|
331
|
+
# Language extracted from html lang or language meta tags.
|
|
332
|
+
sig { returns(T.nilable(String)) }
|
|
333
|
+
attr_reader :language
|
|
334
|
+
|
|
335
|
+
sig { params(language: String).void }
|
|
336
|
+
attr_writer :language
|
|
337
|
+
|
|
338
|
+
# Modified timestamp/date from page metadata, when present.
|
|
339
|
+
sig { returns(T.nilable(String)) }
|
|
340
|
+
attr_reader :modified_time
|
|
341
|
+
|
|
342
|
+
sig { params(modified_time: String).void }
|
|
343
|
+
attr_writer :modified_time
|
|
344
|
+
|
|
345
|
+
# Open Graph metadata with the og: prefix removed and keys camel-cased.
|
|
346
|
+
sig do
|
|
347
|
+
returns(
|
|
348
|
+
T.nilable(
|
|
349
|
+
T::Hash[
|
|
350
|
+
Symbol,
|
|
351
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::OpenGraph::Variants
|
|
352
|
+
]
|
|
353
|
+
)
|
|
354
|
+
)
|
|
355
|
+
end
|
|
356
|
+
attr_reader :open_graph
|
|
357
|
+
|
|
358
|
+
sig do
|
|
359
|
+
params(
|
|
360
|
+
open_graph:
|
|
361
|
+
T::Hash[
|
|
362
|
+
Symbol,
|
|
363
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::OpenGraph::Variants
|
|
364
|
+
]
|
|
365
|
+
).void
|
|
366
|
+
end
|
|
367
|
+
attr_writer :open_graph
|
|
368
|
+
|
|
369
|
+
# Published timestamp/date from page metadata, when present.
|
|
370
|
+
sig { returns(T.nilable(String)) }
|
|
371
|
+
attr_reader :published_time
|
|
372
|
+
|
|
373
|
+
sig { params(published_time: String).void }
|
|
374
|
+
attr_writer :published_time
|
|
375
|
+
|
|
376
|
+
# Robots meta directive, when present.
|
|
377
|
+
sig { returns(T.nilable(String)) }
|
|
378
|
+
attr_reader :robots
|
|
379
|
+
|
|
380
|
+
sig { params(robots: String).void }
|
|
381
|
+
attr_writer :robots
|
|
382
|
+
|
|
383
|
+
# Site or application name from page metadata.
|
|
384
|
+
sig { returns(T.nilable(String)) }
|
|
385
|
+
attr_reader :site_name
|
|
386
|
+
|
|
387
|
+
sig { params(site_name: String).void }
|
|
388
|
+
attr_writer :site_name
|
|
389
|
+
|
|
390
|
+
# Twitter card metadata with the twitter: prefix removed and keys camel-cased.
|
|
391
|
+
sig do
|
|
392
|
+
returns(
|
|
393
|
+
T.nilable(
|
|
394
|
+
T::Hash[
|
|
395
|
+
Symbol,
|
|
396
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Twitter::Variants
|
|
397
|
+
]
|
|
398
|
+
)
|
|
399
|
+
)
|
|
400
|
+
end
|
|
401
|
+
attr_reader :twitter
|
|
402
|
+
|
|
403
|
+
sig do
|
|
404
|
+
params(
|
|
405
|
+
twitter:
|
|
406
|
+
T::Hash[
|
|
407
|
+
Symbol,
|
|
408
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Twitter::Variants
|
|
409
|
+
]
|
|
410
|
+
).void
|
|
411
|
+
end
|
|
412
|
+
attr_writer :twitter
|
|
413
|
+
|
|
227
414
|
sig do
|
|
228
415
|
params(
|
|
229
416
|
crawl_depth: Integer,
|
|
417
|
+
final_url: String,
|
|
418
|
+
source_url: String,
|
|
230
419
|
status_code: Integer,
|
|
231
420
|
success: T::Boolean,
|
|
232
421
|
title: String,
|
|
233
|
-
url: String
|
|
422
|
+
url: String,
|
|
423
|
+
additional_meta:
|
|
424
|
+
T::Hash[
|
|
425
|
+
Symbol,
|
|
426
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::AdditionalMeta::Variants
|
|
427
|
+
],
|
|
428
|
+
alternates:
|
|
429
|
+
T::Array[
|
|
430
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Alternate::OrHash
|
|
431
|
+
],
|
|
432
|
+
author: String,
|
|
433
|
+
canonical_url: String,
|
|
434
|
+
description: String,
|
|
435
|
+
favicon: String,
|
|
436
|
+
image: String,
|
|
437
|
+
json_ld: T::Array[T::Hash[Symbol, T.anything]],
|
|
438
|
+
keywords: T::Array[String],
|
|
439
|
+
language: String,
|
|
440
|
+
modified_time: String,
|
|
441
|
+
open_graph:
|
|
442
|
+
T::Hash[
|
|
443
|
+
Symbol,
|
|
444
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::OpenGraph::Variants
|
|
445
|
+
],
|
|
446
|
+
published_time: String,
|
|
447
|
+
robots: String,
|
|
448
|
+
site_name: String,
|
|
449
|
+
twitter:
|
|
450
|
+
T::Hash[
|
|
451
|
+
Symbol,
|
|
452
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Twitter::Variants
|
|
453
|
+
]
|
|
234
454
|
).returns(T.attached_class)
|
|
235
455
|
end
|
|
236
456
|
def self.new(
|
|
237
457
|
# Depth relative to the start URL. 0 = start URL, 1 = one link away.
|
|
238
458
|
crawl_depth:,
|
|
459
|
+
# Final URL scraped after redirects or scraper fallback, when known. Falls back to
|
|
460
|
+
# sourceUrl when unavailable.
|
|
461
|
+
final_url:,
|
|
462
|
+
# Original URL requested by the caller.
|
|
463
|
+
source_url:,
|
|
239
464
|
# HTTP status code of the response
|
|
240
465
|
status_code:,
|
|
241
466
|
# true if the page was fetched and parsed successfully
|
|
242
467
|
success:,
|
|
243
|
-
#
|
|
468
|
+
# Best page title extracted from the page (empty string if unavailable).
|
|
244
469
|
title:,
|
|
245
|
-
# The URL
|
|
246
|
-
url
|
|
470
|
+
# The crawl URL fetched for this page.
|
|
471
|
+
url:,
|
|
472
|
+
# Additional non-social meta tags not promoted to top-level metadata fields.
|
|
473
|
+
additional_meta: nil,
|
|
474
|
+
# Resolved alternate links from link rel=alternate tags.
|
|
475
|
+
alternates: nil,
|
|
476
|
+
# Author metadata, when present.
|
|
477
|
+
author: nil,
|
|
478
|
+
# Resolved canonical URL, when present.
|
|
479
|
+
canonical_url: nil,
|
|
480
|
+
# Best description extracted from standard, Open Graph, or Twitter metadata.
|
|
481
|
+
description: nil,
|
|
482
|
+
# Resolved favicon URL, when present.
|
|
483
|
+
favicon: nil,
|
|
484
|
+
# Primary resolved preview image from Open Graph, Twitter, or image metadata.
|
|
485
|
+
image: nil,
|
|
486
|
+
# JSON-LD structured data blocks parsed from the page.
|
|
487
|
+
json_ld: nil,
|
|
488
|
+
# Keywords extracted from the page's keywords meta tag.
|
|
489
|
+
keywords: nil,
|
|
490
|
+
# Language extracted from html lang or language meta tags.
|
|
491
|
+
language: nil,
|
|
492
|
+
# Modified timestamp/date from page metadata, when present.
|
|
493
|
+
modified_time: nil,
|
|
494
|
+
# Open Graph metadata with the og: prefix removed and keys camel-cased.
|
|
495
|
+
open_graph: nil,
|
|
496
|
+
# Published timestamp/date from page metadata, when present.
|
|
497
|
+
published_time: nil,
|
|
498
|
+
# Robots meta directive, when present.
|
|
499
|
+
robots: nil,
|
|
500
|
+
# Site or application name from page metadata.
|
|
501
|
+
site_name: nil,
|
|
502
|
+
# Twitter card metadata with the twitter: prefix removed and keys camel-cased.
|
|
503
|
+
twitter: nil
|
|
247
504
|
)
|
|
248
505
|
end
|
|
249
506
|
|
|
@@ -251,15 +508,177 @@ module ContextDev
|
|
|
251
508
|
override.returns(
|
|
252
509
|
{
|
|
253
510
|
crawl_depth: Integer,
|
|
511
|
+
final_url: String,
|
|
512
|
+
source_url: String,
|
|
254
513
|
status_code: Integer,
|
|
255
514
|
success: T::Boolean,
|
|
256
515
|
title: String,
|
|
257
|
-
url: String
|
|
516
|
+
url: String,
|
|
517
|
+
additional_meta:
|
|
518
|
+
T::Hash[
|
|
519
|
+
Symbol,
|
|
520
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::AdditionalMeta::Variants
|
|
521
|
+
],
|
|
522
|
+
alternates:
|
|
523
|
+
T::Array[
|
|
524
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Alternate
|
|
525
|
+
],
|
|
526
|
+
author: String,
|
|
527
|
+
canonical_url: String,
|
|
528
|
+
description: String,
|
|
529
|
+
favicon: String,
|
|
530
|
+
image: String,
|
|
531
|
+
json_ld: T::Array[T::Hash[Symbol, T.anything]],
|
|
532
|
+
keywords: T::Array[String],
|
|
533
|
+
language: String,
|
|
534
|
+
modified_time: String,
|
|
535
|
+
open_graph:
|
|
536
|
+
T::Hash[
|
|
537
|
+
Symbol,
|
|
538
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::OpenGraph::Variants
|
|
539
|
+
],
|
|
540
|
+
published_time: String,
|
|
541
|
+
robots: String,
|
|
542
|
+
site_name: String,
|
|
543
|
+
twitter:
|
|
544
|
+
T::Hash[
|
|
545
|
+
Symbol,
|
|
546
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Twitter::Variants
|
|
547
|
+
]
|
|
258
548
|
}
|
|
259
549
|
)
|
|
260
550
|
end
|
|
261
551
|
def to_hash
|
|
262
552
|
end
|
|
553
|
+
|
|
554
|
+
module AdditionalMeta
|
|
555
|
+
extend ContextDev::Internal::Type::Union
|
|
556
|
+
|
|
557
|
+
Variants = T.type_alias { T.any(String, T::Array[String]) }
|
|
558
|
+
|
|
559
|
+
sig do
|
|
560
|
+
override.returns(
|
|
561
|
+
T::Array[
|
|
562
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::AdditionalMeta::Variants
|
|
563
|
+
]
|
|
564
|
+
)
|
|
565
|
+
end
|
|
566
|
+
def self.variants
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
StringArray =
|
|
570
|
+
T.let(
|
|
571
|
+
ContextDev::Internal::Type::ArrayOf[String],
|
|
572
|
+
ContextDev::Internal::Type::Converter
|
|
573
|
+
)
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
class Alternate < ContextDev::Internal::Type::BaseModel
|
|
577
|
+
OrHash =
|
|
578
|
+
T.type_alias do
|
|
579
|
+
T.any(
|
|
580
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Alternate,
|
|
581
|
+
ContextDev::Internal::AnyHash
|
|
582
|
+
)
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
# Resolved alternate URL.
|
|
586
|
+
sig { returns(String) }
|
|
587
|
+
attr_accessor :href
|
|
588
|
+
|
|
589
|
+
# Language or locale for the alternate URL, when present.
|
|
590
|
+
sig { returns(T.nilable(String)) }
|
|
591
|
+
attr_reader :hreflang
|
|
592
|
+
|
|
593
|
+
sig { params(hreflang: String).void }
|
|
594
|
+
attr_writer :hreflang
|
|
595
|
+
|
|
596
|
+
# Alternate resource title, when present.
|
|
597
|
+
sig { returns(T.nilable(String)) }
|
|
598
|
+
attr_reader :title
|
|
599
|
+
|
|
600
|
+
sig { params(title: String).void }
|
|
601
|
+
attr_writer :title
|
|
602
|
+
|
|
603
|
+
# Alternate resource MIME type, when present.
|
|
604
|
+
sig { returns(T.nilable(String)) }
|
|
605
|
+
attr_reader :type
|
|
606
|
+
|
|
607
|
+
sig { params(type: String).void }
|
|
608
|
+
attr_writer :type
|
|
609
|
+
|
|
610
|
+
sig do
|
|
611
|
+
params(
|
|
612
|
+
href: String,
|
|
613
|
+
hreflang: String,
|
|
614
|
+
title: String,
|
|
615
|
+
type: String
|
|
616
|
+
).returns(T.attached_class)
|
|
617
|
+
end
|
|
618
|
+
def self.new(
|
|
619
|
+
# Resolved alternate URL.
|
|
620
|
+
href:,
|
|
621
|
+
# Language or locale for the alternate URL, when present.
|
|
622
|
+
hreflang: nil,
|
|
623
|
+
# Alternate resource title, when present.
|
|
624
|
+
title: nil,
|
|
625
|
+
# Alternate resource MIME type, when present.
|
|
626
|
+
type: nil
|
|
627
|
+
)
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
sig do
|
|
631
|
+
override.returns(
|
|
632
|
+
{ href: String, hreflang: String, title: String, type: String }
|
|
633
|
+
)
|
|
634
|
+
end
|
|
635
|
+
def to_hash
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
module OpenGraph
|
|
640
|
+
extend ContextDev::Internal::Type::Union
|
|
641
|
+
|
|
642
|
+
Variants = T.type_alias { T.any(String, T::Array[String]) }
|
|
643
|
+
|
|
644
|
+
sig do
|
|
645
|
+
override.returns(
|
|
646
|
+
T::Array[
|
|
647
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::OpenGraph::Variants
|
|
648
|
+
]
|
|
649
|
+
)
|
|
650
|
+
end
|
|
651
|
+
def self.variants
|
|
652
|
+
end
|
|
653
|
+
|
|
654
|
+
StringArray =
|
|
655
|
+
T.let(
|
|
656
|
+
ContextDev::Internal::Type::ArrayOf[String],
|
|
657
|
+
ContextDev::Internal::Type::Converter
|
|
658
|
+
)
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
module Twitter
|
|
662
|
+
extend ContextDev::Internal::Type::Union
|
|
663
|
+
|
|
664
|
+
Variants = T.type_alias { T.any(String, T::Array[String]) }
|
|
665
|
+
|
|
666
|
+
sig do
|
|
667
|
+
override.returns(
|
|
668
|
+
T::Array[
|
|
669
|
+
ContextDev::Models::WebWebCrawlMdResponse::Result::Metadata::Twitter::Variants
|
|
670
|
+
]
|
|
671
|
+
)
|
|
672
|
+
end
|
|
673
|
+
def self.variants
|
|
674
|
+
end
|
|
675
|
+
|
|
676
|
+
StringArray =
|
|
677
|
+
T.let(
|
|
678
|
+
ContextDev::Internal::Type::ArrayOf[String],
|
|
679
|
+
ContextDev::Internal::Type::Converter
|
|
680
|
+
)
|
|
681
|
+
end
|
|
263
682
|
end
|
|
264
683
|
end
|
|
265
684
|
|