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.
@@ -17,6 +17,18 @@ module ContextDev
17
17
  sig { returns(String) }
18
18
  attr_accessor :html
19
19
 
20
+ # Metadata extracted from the scraped page HTML.
21
+ sig { returns(ContextDev::Models::WebWebScrapeHTMLResponse::Metadata) }
22
+ attr_reader :metadata
23
+
24
+ sig do
25
+ params(
26
+ metadata:
27
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::OrHash
28
+ ).void
29
+ end
30
+ attr_writer :metadata
31
+
20
32
  # Indicates success
21
33
  sig do
22
34
  returns(
@@ -58,6 +70,8 @@ module ContextDev
58
70
  sig do
59
71
  params(
60
72
  html: String,
73
+ metadata:
74
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::OrHash,
61
75
  success:
62
76
  ContextDev::Models::WebWebScrapeHTMLResponse::Success::OrBoolean,
63
77
  type: ContextDev::Models::WebWebScrapeHTMLResponse::Type::OrSymbol,
@@ -71,6 +85,8 @@ module ContextDev
71
85
  # page is a sitemap or feed served behind an XSL stylesheet (which browsers render
72
86
  # into HTML), this is the underlying XML instead — see the `type` field.
73
87
  html:,
88
+ # Metadata extracted from the scraped page HTML.
89
+ metadata:,
74
90
  # Indicates success
75
91
  success:,
76
92
  # Detected content type of the returned `html` field. Sitemaps and feeds are
@@ -88,6 +104,7 @@ module ContextDev
88
104
  override.returns(
89
105
  {
90
106
  html: String,
107
+ metadata: ContextDev::Models::WebWebScrapeHTMLResponse::Metadata,
91
108
  success:
92
109
  ContextDev::Models::WebWebScrapeHTMLResponse::Success::TaggedBoolean,
93
110
  type:
@@ -101,6 +118,464 @@ module ContextDev
101
118
  def to_hash
102
119
  end
103
120
 
121
+ class Metadata < ContextDev::Internal::Type::BaseModel
122
+ OrHash =
123
+ T.type_alias do
124
+ T.any(
125
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata,
126
+ ContextDev::Internal::AnyHash
127
+ )
128
+ end
129
+
130
+ # Final URL scraped after redirects or scraper fallback, when known. Falls back to
131
+ # sourceUrl when unavailable.
132
+ sig { returns(String) }
133
+ attr_accessor :final_url
134
+
135
+ # Original URL requested by the caller.
136
+ sig { returns(String) }
137
+ attr_accessor :source_url
138
+
139
+ # Additional non-social meta tags not promoted to top-level metadata fields.
140
+ sig do
141
+ returns(
142
+ T.nilable(
143
+ T::Hash[
144
+ Symbol,
145
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::AdditionalMeta::Variants
146
+ ]
147
+ )
148
+ )
149
+ end
150
+ attr_reader :additional_meta
151
+
152
+ sig do
153
+ params(
154
+ additional_meta:
155
+ T::Hash[
156
+ Symbol,
157
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::AdditionalMeta::Variants
158
+ ]
159
+ ).void
160
+ end
161
+ attr_writer :additional_meta
162
+
163
+ # Resolved alternate links from link rel=alternate tags.
164
+ sig do
165
+ returns(
166
+ T.nilable(
167
+ T::Array[
168
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Alternate
169
+ ]
170
+ )
171
+ )
172
+ end
173
+ attr_reader :alternates
174
+
175
+ sig do
176
+ params(
177
+ alternates:
178
+ T::Array[
179
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Alternate::OrHash
180
+ ]
181
+ ).void
182
+ end
183
+ attr_writer :alternates
184
+
185
+ # Author metadata, when present.
186
+ sig { returns(T.nilable(String)) }
187
+ attr_reader :author
188
+
189
+ sig { params(author: String).void }
190
+ attr_writer :author
191
+
192
+ # Resolved canonical URL, when present.
193
+ sig { returns(T.nilable(String)) }
194
+ attr_reader :canonical_url
195
+
196
+ sig { params(canonical_url: String).void }
197
+ attr_writer :canonical_url
198
+
199
+ # Best description extracted from standard, Open Graph, or Twitter metadata.
200
+ sig { returns(T.nilable(String)) }
201
+ attr_reader :description
202
+
203
+ sig { params(description: String).void }
204
+ attr_writer :description
205
+
206
+ # Resolved favicon URL, when present.
207
+ sig { returns(T.nilable(String)) }
208
+ attr_reader :favicon
209
+
210
+ sig { params(favicon: String).void }
211
+ attr_writer :favicon
212
+
213
+ # Primary resolved preview image from Open Graph, Twitter, or image metadata.
214
+ sig { returns(T.nilable(String)) }
215
+ attr_reader :image
216
+
217
+ sig { params(image: String).void }
218
+ attr_writer :image
219
+
220
+ # JSON-LD structured data blocks parsed from the page.
221
+ sig { returns(T.nilable(T::Array[T::Hash[Symbol, T.anything]])) }
222
+ attr_reader :json_ld
223
+
224
+ sig { params(json_ld: T::Array[T::Hash[Symbol, T.anything]]).void }
225
+ attr_writer :json_ld
226
+
227
+ # Keywords extracted from the page's keywords meta tag.
228
+ sig { returns(T.nilable(T::Array[String])) }
229
+ attr_reader :keywords
230
+
231
+ sig { params(keywords: T::Array[String]).void }
232
+ attr_writer :keywords
233
+
234
+ # Language extracted from html lang or language meta tags.
235
+ sig { returns(T.nilable(String)) }
236
+ attr_reader :language
237
+
238
+ sig { params(language: String).void }
239
+ attr_writer :language
240
+
241
+ # Modified timestamp/date from page metadata, when present.
242
+ sig { returns(T.nilable(String)) }
243
+ attr_reader :modified_time
244
+
245
+ sig { params(modified_time: String).void }
246
+ attr_writer :modified_time
247
+
248
+ # Open Graph metadata with the og: prefix removed and keys camel-cased.
249
+ sig do
250
+ returns(
251
+ T.nilable(
252
+ T::Hash[
253
+ Symbol,
254
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::OpenGraph::Variants
255
+ ]
256
+ )
257
+ )
258
+ end
259
+ attr_reader :open_graph
260
+
261
+ sig do
262
+ params(
263
+ open_graph:
264
+ T::Hash[
265
+ Symbol,
266
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::OpenGraph::Variants
267
+ ]
268
+ ).void
269
+ end
270
+ attr_writer :open_graph
271
+
272
+ # Published timestamp/date from page metadata, when present.
273
+ sig { returns(T.nilable(String)) }
274
+ attr_reader :published_time
275
+
276
+ sig { params(published_time: String).void }
277
+ attr_writer :published_time
278
+
279
+ # Robots meta directive, when present.
280
+ sig { returns(T.nilable(String)) }
281
+ attr_reader :robots
282
+
283
+ sig { params(robots: String).void }
284
+ attr_writer :robots
285
+
286
+ # Site or application name from page metadata.
287
+ sig { returns(T.nilable(String)) }
288
+ attr_reader :site_name
289
+
290
+ sig { params(site_name: String).void }
291
+ attr_writer :site_name
292
+
293
+ # Best title extracted from the page.
294
+ sig { returns(T.nilable(String)) }
295
+ attr_reader :title
296
+
297
+ sig { params(title: String).void }
298
+ attr_writer :title
299
+
300
+ # Twitter card metadata with the twitter: prefix removed and keys camel-cased.
301
+ sig do
302
+ returns(
303
+ T.nilable(
304
+ T::Hash[
305
+ Symbol,
306
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Twitter::Variants
307
+ ]
308
+ )
309
+ )
310
+ end
311
+ attr_reader :twitter
312
+
313
+ sig do
314
+ params(
315
+ twitter:
316
+ T::Hash[
317
+ Symbol,
318
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Twitter::Variants
319
+ ]
320
+ ).void
321
+ end
322
+ attr_writer :twitter
323
+
324
+ # Metadata extracted from the scraped page HTML.
325
+ sig do
326
+ params(
327
+ final_url: String,
328
+ source_url: String,
329
+ additional_meta:
330
+ T::Hash[
331
+ Symbol,
332
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::AdditionalMeta::Variants
333
+ ],
334
+ alternates:
335
+ T::Array[
336
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Alternate::OrHash
337
+ ],
338
+ author: String,
339
+ canonical_url: String,
340
+ description: String,
341
+ favicon: String,
342
+ image: String,
343
+ json_ld: T::Array[T::Hash[Symbol, T.anything]],
344
+ keywords: T::Array[String],
345
+ language: String,
346
+ modified_time: String,
347
+ open_graph:
348
+ T::Hash[
349
+ Symbol,
350
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::OpenGraph::Variants
351
+ ],
352
+ published_time: String,
353
+ robots: String,
354
+ site_name: String,
355
+ title: String,
356
+ twitter:
357
+ T::Hash[
358
+ Symbol,
359
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Twitter::Variants
360
+ ]
361
+ ).returns(T.attached_class)
362
+ end
363
+ def self.new(
364
+ # Final URL scraped after redirects or scraper fallback, when known. Falls back to
365
+ # sourceUrl when unavailable.
366
+ final_url:,
367
+ # Original URL requested by the caller.
368
+ source_url:,
369
+ # Additional non-social meta tags not promoted to top-level metadata fields.
370
+ additional_meta: nil,
371
+ # Resolved alternate links from link rel=alternate tags.
372
+ alternates: nil,
373
+ # Author metadata, when present.
374
+ author: nil,
375
+ # Resolved canonical URL, when present.
376
+ canonical_url: nil,
377
+ # Best description extracted from standard, Open Graph, or Twitter metadata.
378
+ description: nil,
379
+ # Resolved favicon URL, when present.
380
+ favicon: nil,
381
+ # Primary resolved preview image from Open Graph, Twitter, or image metadata.
382
+ image: nil,
383
+ # JSON-LD structured data blocks parsed from the page.
384
+ json_ld: nil,
385
+ # Keywords extracted from the page's keywords meta tag.
386
+ keywords: nil,
387
+ # Language extracted from html lang or language meta tags.
388
+ language: nil,
389
+ # Modified timestamp/date from page metadata, when present.
390
+ modified_time: nil,
391
+ # Open Graph metadata with the og: prefix removed and keys camel-cased.
392
+ open_graph: nil,
393
+ # Published timestamp/date from page metadata, when present.
394
+ published_time: nil,
395
+ # Robots meta directive, when present.
396
+ robots: nil,
397
+ # Site or application name from page metadata.
398
+ site_name: nil,
399
+ # Best title extracted from the page.
400
+ title: nil,
401
+ # Twitter card metadata with the twitter: prefix removed and keys camel-cased.
402
+ twitter: nil
403
+ )
404
+ end
405
+
406
+ sig do
407
+ override.returns(
408
+ {
409
+ final_url: String,
410
+ source_url: String,
411
+ additional_meta:
412
+ T::Hash[
413
+ Symbol,
414
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::AdditionalMeta::Variants
415
+ ],
416
+ alternates:
417
+ T::Array[
418
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Alternate
419
+ ],
420
+ author: String,
421
+ canonical_url: String,
422
+ description: String,
423
+ favicon: String,
424
+ image: String,
425
+ json_ld: T::Array[T::Hash[Symbol, T.anything]],
426
+ keywords: T::Array[String],
427
+ language: String,
428
+ modified_time: String,
429
+ open_graph:
430
+ T::Hash[
431
+ Symbol,
432
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::OpenGraph::Variants
433
+ ],
434
+ published_time: String,
435
+ robots: String,
436
+ site_name: String,
437
+ title: String,
438
+ twitter:
439
+ T::Hash[
440
+ Symbol,
441
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Twitter::Variants
442
+ ]
443
+ }
444
+ )
445
+ end
446
+ def to_hash
447
+ end
448
+
449
+ module AdditionalMeta
450
+ extend ContextDev::Internal::Type::Union
451
+
452
+ Variants = T.type_alias { T.any(String, T::Array[String]) }
453
+
454
+ sig do
455
+ override.returns(
456
+ T::Array[
457
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::AdditionalMeta::Variants
458
+ ]
459
+ )
460
+ end
461
+ def self.variants
462
+ end
463
+
464
+ StringArray =
465
+ T.let(
466
+ ContextDev::Internal::Type::ArrayOf[String],
467
+ ContextDev::Internal::Type::Converter
468
+ )
469
+ end
470
+
471
+ class Alternate < ContextDev::Internal::Type::BaseModel
472
+ OrHash =
473
+ T.type_alias do
474
+ T.any(
475
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Alternate,
476
+ ContextDev::Internal::AnyHash
477
+ )
478
+ end
479
+
480
+ # Resolved alternate URL.
481
+ sig { returns(String) }
482
+ attr_accessor :href
483
+
484
+ # Language or locale for the alternate URL, when present.
485
+ sig { returns(T.nilable(String)) }
486
+ attr_reader :hreflang
487
+
488
+ sig { params(hreflang: String).void }
489
+ attr_writer :hreflang
490
+
491
+ # Alternate resource title, when present.
492
+ sig { returns(T.nilable(String)) }
493
+ attr_reader :title
494
+
495
+ sig { params(title: String).void }
496
+ attr_writer :title
497
+
498
+ # Alternate resource MIME type, when present.
499
+ sig { returns(T.nilable(String)) }
500
+ attr_reader :type
501
+
502
+ sig { params(type: String).void }
503
+ attr_writer :type
504
+
505
+ sig do
506
+ params(
507
+ href: String,
508
+ hreflang: String,
509
+ title: String,
510
+ type: String
511
+ ).returns(T.attached_class)
512
+ end
513
+ def self.new(
514
+ # Resolved alternate URL.
515
+ href:,
516
+ # Language or locale for the alternate URL, when present.
517
+ hreflang: nil,
518
+ # Alternate resource title, when present.
519
+ title: nil,
520
+ # Alternate resource MIME type, when present.
521
+ type: nil
522
+ )
523
+ end
524
+
525
+ sig do
526
+ override.returns(
527
+ { href: String, hreflang: String, title: String, type: String }
528
+ )
529
+ end
530
+ def to_hash
531
+ end
532
+ end
533
+
534
+ module OpenGraph
535
+ extend ContextDev::Internal::Type::Union
536
+
537
+ Variants = T.type_alias { T.any(String, T::Array[String]) }
538
+
539
+ sig do
540
+ override.returns(
541
+ T::Array[
542
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::OpenGraph::Variants
543
+ ]
544
+ )
545
+ end
546
+ def self.variants
547
+ end
548
+
549
+ StringArray =
550
+ T.let(
551
+ ContextDev::Internal::Type::ArrayOf[String],
552
+ ContextDev::Internal::Type::Converter
553
+ )
554
+ end
555
+
556
+ module Twitter
557
+ extend ContextDev::Internal::Type::Union
558
+
559
+ Variants = T.type_alias { T.any(String, T::Array[String]) }
560
+
561
+ sig do
562
+ override.returns(
563
+ T::Array[
564
+ ContextDev::Models::WebWebScrapeHTMLResponse::Metadata::Twitter::Variants
565
+ ]
566
+ )
567
+ end
568
+ def self.variants
569
+ end
570
+
571
+ StringArray =
572
+ T.let(
573
+ ContextDev::Internal::Type::ArrayOf[String],
574
+ ContextDev::Internal::Type::Converter
575
+ )
576
+ end
577
+ end
578
+
104
579
  # Indicates success
105
580
  module Success
106
581
  extend ContextDev::Internal::Type::Enum
@@ -182,6 +657,16 @@ module ContextDev
182
657
  :pdf,
183
658
  ContextDev::Models::WebWebScrapeHTMLResponse::Type::TaggedSymbol
184
659
  )
660
+ DOCX =
661
+ T.let(
662
+ :docx,
663
+ ContextDev::Models::WebWebScrapeHTMLResponse::Type::TaggedSymbol
664
+ )
665
+ DOC =
666
+ T.let(
667
+ :doc,
668
+ ContextDev::Models::WebWebScrapeHTMLResponse::Type::TaggedSymbol
669
+ )
185
670
 
186
671
  sig do
187
672
  override.returns(