ghostcrawl 2.2.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 +7 -0
- data/LICENSE +46 -0
- data/README.md +127 -0
- data/_generated/ghostcrawl.rb +0 -0
- data/_generated/ghostcrawl_client.rb +27 -0
- data/_generated/models/audit_event_out.rb +802 -0
- data/_generated/models/audit_event_out_actor_ip_member1.rb +62 -0
- data/_generated/models/audit_event_out_actor_token_id_member1.rb +62 -0
- data/_generated/models/audit_event_out_actor_user_agent_member1.rb +62 -0
- data/_generated/models/audit_event_out_actor_user_id_member1.rb +62 -0
- data/_generated/models/audit_event_out_metadata.rb +62 -0
- data/_generated/models/audit_event_out_org_id_member1.rb +62 -0
- data/_generated/models/audit_event_out_target_id_member1.rb +62 -0
- data/_generated/models/audit_event_out_target_kind_member1.rb +62 -0
- data/_generated/models/audit_events_response.rb +173 -0
- data/_generated/models/audit_events_response_next_cursor_member1.rb +62 -0
- data/_generated/models/batch_scrape_request.rb +623 -0
- data/_generated/models/batch_scrape_request_behavior_actions_member1.rb +62 -0
- data/_generated/models/batch_scrape_request_behavior_actions_member2.rb +62 -0
- data/_generated/models/batch_scrape_request_extraction_strategy_member1.rb +62 -0
- data/_generated/models/batch_scrape_request_identity_country_member1.rb +62 -0
- data/_generated/models/batch_scrape_request_language_member1.rb +62 -0
- data/_generated/models/batch_scrape_request_output_format.rb +9 -0
- data/_generated/models/batch_scrape_request_profile_member1.rb +62 -0
- data/_generated/models/cdp_frame_request.rb +103 -0
- data/_generated/models/cdp_url_request.rb +82 -0
- data/_generated/models/checkout_request.rb +124 -0
- data/_generated/models/contact_request.rb +143 -0
- data/_generated/models/cookie_dict.rb +739 -0
- data/_generated/models/cookie_dict_domain_member1.rb +62 -0
- data/_generated/models/cookie_dict_expires_member1.rb +62 -0
- data/_generated/models/cookie_dict_http_only_member1.rb +62 -0
- data/_generated/models/cookie_dict_path_member1.rb +62 -0
- data/_generated/models/cookie_dict_same_site_member1.rb +62 -0
- data/_generated/models/cookie_dict_secure_member1.rb +62 -0
- data/_generated/models/cookie_dict_url_member1.rb +62 -0
- data/_generated/models/cookies_delete_body.rb +355 -0
- data/_generated/models/cookies_delete_body_domain_member1.rb +62 -0
- data/_generated/models/cookies_delete_body_name_member1.rb +62 -0
- data/_generated/models/cookies_delete_body_path_member1.rb +62 -0
- data/_generated/models/cookies_set_body.rb +102 -0
- data/_generated/models/deep_crawl_body.rb +339 -0
- data/_generated/models/deep_crawl_body_webhook_url_member1.rb +62 -0
- data/_generated/models/dom_snapshot_body.rb +82 -0
- data/_generated/models/download_body.rb +102 -0
- data/_generated/models/error_code.rb +31 -0
- data/_generated/models/eval_body.rb +102 -0
- data/_generated/models/extend_body.rb +155 -0
- data/_generated/models/extend_body_ttl_seconds_member1.rb +62 -0
- data/_generated/models/extract_request.rb +631 -0
- data/_generated/models/extract_request_behavior_actions_member1.rb +62 -0
- data/_generated/models/extract_request_behavior_actions_member2.rb +62 -0
- data/_generated/models/extract_request_engine.rb +12 -0
- data/_generated/models/extract_request_identity_country_member1.rb +62 -0
- data/_generated/models/extract_request_language_member1.rb +62 -0
- data/_generated/models/extract_request_prompt_member1.rb +62 -0
- data/_generated/models/extract_request_url_member1.rb +62 -0
- data/_generated/models/extract_request_urls_member1.rb +62 -0
- data/_generated/models/filter_spec.rb +62 -0
- data/_generated/models/h_t_t_p_validation_error.rb +84 -0
- data/_generated/models/har_body.rb +82 -0
- data/_generated/models/identity_payload.rb +144 -0
- data/_generated/models/identity_request.rb +833 -0
- data/_generated/models/identity_request_claim_browser_member1.rb +62 -0
- data/_generated/models/identity_request_claim_os_member1.rb +62 -0
- data/_generated/models/identity_request_device_model_member1.rb +62 -0
- data/_generated/models/identity_request_locale_member1.rb +62 -0
- data/_generated/models/identity_request_proxy_member1.rb +62 -0
- data/_generated/models/identity_request_source_member1.rb +62 -0
- data/_generated/models/identity_request_timezone_member1.rb +62 -0
- data/_generated/models/identity_request_viewport_member1.rb +62 -0
- data/_generated/models/identity_response.rb +357 -0
- data/_generated/models/identity_response_expires_at_member1.rb +62 -0
- data/_generated/models/identity_response_identity_id_member1.rb +62 -0
- data/_generated/models/identity_response_workspace_id_member1.rb +62 -0
- data/_generated/models/map_body.rb +238 -0
- data/_generated/models/map_body_search_member1.rb +62 -0
- data/_generated/models/map_response.rb +195 -0
- data/_generated/models/map_response_truncated_to_server_max_member1.rb +62 -0
- data/_generated/models/me_response.rb +233 -0
- data/_generated/models/me_response_created_at_member1.rb +62 -0
- data/_generated/models/models.rb +145 -0
- data/_generated/models/policy_upsert_request.rb +417 -0
- data/_generated/models/policy_upsert_request_max_crawl_pages_member1.rb +62 -0
- data/_generated/models/policy_upsert_request_max_llm_calls_member1.rb +62 -0
- data/_generated/models/policy_upsert_request_max_llm_tokens_member1.rb +62 -0
- data/_generated/models/problem_details.rb +226 -0
- data/_generated/models/profile_create_request.rb +175 -0
- data/_generated/models/profile_create_request_storage_state_id_member1.rb +62 -0
- data/_generated/models/profile_update_request.rb +246 -0
- data/_generated/models/profile_update_request_name_member1.rb +62 -0
- data/_generated/models/profile_update_request_storage_state_id_member1.rb +62 -0
- data/_generated/models/registry_token_request.rb +82 -0
- data/_generated/models/retry_delivery_response.rb +145 -0
- data/_generated/models/rotate_secret_response.rb +145 -0
- data/_generated/models/schedule_create_request.rb +256 -0
- data/_generated/models/schedule_create_request_job_params.rb +64 -0
- data/_generated/models/schedule_create_request_notify_webhook_member1.rb +62 -0
- data/_generated/models/scorer_spec.rb +102 -0
- data/_generated/models/scrape_request.rb +1142 -0
- data/_generated/models/scrape_request_batch_identity_mode.rb +10 -0
- data/_generated/models/scrape_request_behavior_actions_member1.rb +62 -0
- data/_generated/models/scrape_request_behavior_actions_member2.rb +62 -0
- data/_generated/models/scrape_request_engine.rb +12 -0
- data/_generated/models/scrape_request_format.rb +11 -0
- data/_generated/models/scrape_request_identity_country_member1.rb +62 -0
- data/_generated/models/scrape_request_identity_member1.rb +62 -0
- data/_generated/models/scrape_request_language_member1.rb +62 -0
- data/_generated/models/scrape_request_profile_member1.rb +62 -0
- data/_generated/models/scrape_request_proxy_member1.rb +62 -0
- data/_generated/models/scrape_request_screenshot_selector_member1.rb +62 -0
- data/_generated/models/scrape_request_session_member1.rb +62 -0
- data/_generated/models/scrape_request_url_member1.rb +62 -0
- data/_generated/models/scrape_request_urls_member1.rb +62 -0
- data/_generated/models/scroll_body.rb +284 -0
- data/_generated/models/scroll_body_direction.rb +11 -0
- data/_generated/models/scroll_body_distance_px_member1.rb +62 -0
- data/_generated/models/scroll_body_selector_member1.rb +62 -0
- data/_generated/models/search_request.rb +469 -0
- data/_generated/models/search_request_country_member1.rb +62 -0
- data/_generated/models/search_request_engine_member1.rb +62 -0
- data/_generated/models/search_request_freshness_member1.rb +62 -0
- data/_generated/models/search_request_vertical_member1.rb +62 -0
- data/_generated/models/session_create_request.rb +174 -0
- data/_generated/models/session_create_request_engine.rb +10 -0
- data/_generated/models/session_create_request_profile_member1.rb +62 -0
- data/_generated/models/storage_state_attach_request.rb +58 -0
- data/_generated/models/storage_state_detach_request.rb +58 -0
- data/_generated/models/takeover_action_body.rb +84 -0
- data/_generated/models/team_response.rb +142 -0
- data/_generated/models/tenant_context.rb +183 -0
- data/_generated/models/upload_body.rb +162 -0
- data/_generated/models/validation_error.rb +142 -0
- data/_generated/models/validation_error_ctx.rb +62 -0
- data/_generated/models/viewport_exact.rb +104 -0
- data/_generated/models/wait_body.rb +194 -0
- data/_generated/models/wait_body_selector_member1.rb +62 -0
- data/_generated/models/webhook_create_request.rb +125 -0
- data/_generated/models/webhook_create_response.rb +104 -0
- data/_generated/models/webhook_delivery_list_response.rb +195 -0
- data/_generated/models/webhook_delivery_list_response_next_cursor_member1.rb +62 -0
- data/_generated/models/webhook_delivery_public.rb +680 -0
- data/_generated/models/webhook_delivery_public_delivered_at_member1.rb +62 -0
- data/_generated/models/webhook_delivery_public_error_class_member1.rb +62 -0
- data/_generated/models/webhook_delivery_public_replay_of_member1.rb +62 -0
- data/_generated/models/webhook_delivery_public_response_body_preview_member1.rb +62 -0
- data/_generated/models/webhook_delivery_public_response_status_member1.rb +62 -0
- data/_generated/models/webhook_list_response.rb +195 -0
- data/_generated/models/webhook_list_response_next_cursor_member1.rb +62 -0
- data/_generated/models/webhook_public.rb +316 -0
- data/_generated/models/webhook_public_secret_rotated_at_member1.rb +62 -0
- data/_generated/v1/audit/audit.rb +0 -0
- data/_generated/v1/audit/audit_request_builder.rb +31 -0
- data/_generated/v1/audit/events/events.rb +0 -0
- data/_generated/v1/audit/events/events_request_builder.rb +93 -0
- data/_generated/v1/billing/billing.rb +0 -0
- data/_generated/v1/billing/billing_request_builder.rb +49 -0
- data/_generated/v1/billing/checkout/checkout.rb +0 -0
- data/_generated/v1/billing/checkout/checkout_request_builder.rb +74 -0
- data/_generated/v1/billing/portal/portal.rb +0 -0
- data/_generated/v1/billing/portal/portal_request_builder.rb +68 -0
- data/_generated/v1/billing/subscription/subscription.rb +0 -0
- data/_generated/v1/billing/subscription/subscription_request_builder.rb +68 -0
- data/_generated/v1/billing/usage/usage.rb +0 -0
- data/_generated/v1/billing/usage/usage_request_builder.rb +90 -0
- data/_generated/v1/binary/binary.rb +0 -0
- data/_generated/v1/binary/binary_request_builder.rb +31 -0
- data/_generated/v1/binary/download/download.rb +0 -0
- data/_generated/v1/binary/download/download_request_builder.rb +77 -0
- data/_generated/v1/budgets/budgets.rb +0 -0
- data/_generated/v1/budgets/budgets_request_builder.rb +37 -0
- data/_generated/v1/budgets/policy/item/item/item.rb +0 -0
- data/_generated/v1/budgets/policy/item/item/with_scope_item_request_builder.rb +74 -0
- data/_generated/v1/budgets/policy/item/item.rb +0 -0
- data/_generated/v1/budgets/policy/item/with_scope_type_item_request_builder.rb +43 -0
- data/_generated/v1/budgets/policy/policy.rb +0 -0
- data/_generated/v1/budgets/policy/policy_request_builder.rb +125 -0
- data/_generated/v1/budgets/usage/usage.rb +0 -0
- data/_generated/v1/budgets/usage/usage_request_builder.rb +77 -0
- data/_generated/v1/cdp/cdp.rb +0 -0
- data/_generated/v1/cdp/cdp_request_builder.rb +37 -0
- data/_generated/v1/cdp/frame/frame.rb +0 -0
- data/_generated/v1/cdp/frame/frame_request_builder.rb +74 -0
- data/_generated/v1/cdp/url/url.rb +0 -0
- data/_generated/v1/cdp/url/url_request_builder.rb +74 -0
- data/_generated/v1/contact/contact.rb +1 -0
- data/_generated/v1/contact/contact_post_response.rb +65 -0
- data/_generated/v1/contact/contact_request_builder.rb +71 -0
- data/_generated/v1/crawl/crawl.rb +0 -0
- data/_generated/v1/crawl/crawl_request_builder.rb +31 -0
- data/_generated/v1/crawl/deep/deep.rb +0 -0
- data/_generated/v1/crawl/deep/deep_request_builder.rb +86 -0
- data/_generated/v1/crawl/deep/item/item.rb +0 -0
- data/_generated/v1/crawl/deep/item/with_run_item_request_builder.rb +71 -0
- data/_generated/v1/crawl_runs/crawl_runs.rb +1 -0
- data/_generated/v1/crawl_runs/crawl_runs_post_request_body.rb +65 -0
- data/_generated/v1/crawl_runs/crawl_runs_request_builder.rb +133 -0
- data/_generated/v1/crawl_runs/item/cancel/cancel.rb +0 -0
- data/_generated/v1/crawl_runs/item/cancel/cancel_request_builder.rb +71 -0
- data/_generated/v1/crawl_runs/item/item.rb +0 -0
- data/_generated/v1/crawl_runs/item/resume/resume.rb +0 -0
- data/_generated/v1/crawl_runs/item/resume/resume_request_builder.rb +71 -0
- data/_generated/v1/crawl_runs/item/with_run_item_request_builder.rb +88 -0
- data/_generated/v1/datasets/datasets.rb +1 -0
- data/_generated/v1/datasets/datasets_post_request_body.rb +65 -0
- data/_generated/v1/datasets/datasets_request_builder.rb +125 -0
- data/_generated/v1/datasets/item/item.rb +0 -0
- data/_generated/v1/datasets/item/rows/append/append.rb +1 -0
- data/_generated/v1/datasets/item/rows/append/append_post_request_body.rb +74 -0
- data/_generated/v1/datasets/item/rows/append/append_request_builder.rb +79 -0
- data/_generated/v1/datasets/item/rows/rows.rb +0 -0
- data/_generated/v1/datasets/item/rows/rows_request_builder.rb +86 -0
- data/_generated/v1/datasets/item/with_name_item_request_builder.rb +104 -0
- data/_generated/v1/discovery/discovery.rb +0 -0
- data/_generated/v1/discovery/discovery_request_builder.rb +65 -0
- data/_generated/v1/engines/engines.rb +0 -0
- data/_generated/v1/engines/engines_request_builder.rb +31 -0
- data/_generated/v1/engines/manifest/manifest.rb +0 -0
- data/_generated/v1/engines/manifest/manifest_request_builder.rb +84 -0
- data/_generated/v1/extract/extract.rb +1 -0
- data/_generated/v1/extract/extract_post_response.rb +65 -0
- data/_generated/v1/extract/extract_request_builder.rb +79 -0
- data/_generated/v1/identity/identity.rb +0 -0
- data/_generated/v1/identity/identity_request_builder.rb +72 -0
- data/_generated/v1/kv/item/item.rb +1 -0
- data/_generated/v1/kv/item/with_key_item_request_builder.rb +133 -0
- data/_generated/v1/kv/item/with_key_put_request_body.rb +68 -0
- data/_generated/v1/kv/kv.rb +0 -0
- data/_generated/v1/kv/kv_request_builder.rb +37 -0
- data/_generated/v1/map/map.rb +0 -0
- data/_generated/v1/map/map_request_builder.rb +72 -0
- data/_generated/v1/me/export/export.rb +1 -0
- data/_generated/v1/me/export/export_get_response.rb +68 -0
- data/_generated/v1/me/export/export_request_builder.rb +68 -0
- data/_generated/v1/me/me.rb +0 -0
- data/_generated/v1/me/me_request_builder.rb +78 -0
- data/_generated/v1/me/usage/get_period_query_parameter_type.rb +13 -0
- data/_generated/v1/me/usage/usage.rb +2 -0
- data/_generated/v1/me/usage/usage_get_response.rb +68 -0
- data/_generated/v1/me/usage/usage_request_builder.rb +76 -0
- data/_generated/v1/page/cookies/cookies.rb +0 -0
- data/_generated/v1/page/cookies/cookies_request_builder.rb +150 -0
- data/_generated/v1/page/dom_snapshot/dom_snapshot.rb +0 -0
- data/_generated/v1/page/dom_snapshot/dom_snapshot_request_builder.rb +74 -0
- data/_generated/v1/page/download/download.rb +0 -0
- data/_generated/v1/page/download/download_request_builder.rb +74 -0
- data/_generated/v1/page/eval/eval.rb +0 -0
- data/_generated/v1/page/eval/eval_request_builder.rb +74 -0
- data/_generated/v1/page/har/har.rb +0 -0
- data/_generated/v1/page/har/har_request_builder.rb +74 -0
- data/_generated/v1/page/page.rb +0 -0
- data/_generated/v1/page/page_request_builder.rb +73 -0
- data/_generated/v1/page/scroll/scroll.rb +0 -0
- data/_generated/v1/page/scroll/scroll_request_builder.rb +74 -0
- data/_generated/v1/page/upload/upload.rb +0 -0
- data/_generated/v1/page/upload/upload_request_builder.rb +74 -0
- data/_generated/v1/page/wait/wait.rb +0 -0
- data/_generated/v1/page/wait/wait_request_builder.rb +74 -0
- data/_generated/v1/pricing/pricing.rb +0 -0
- data/_generated/v1/pricing/pricing_request_builder.rb +31 -0
- data/_generated/v1/pricing/public/public.rb +0 -0
- data/_generated/v1/pricing/public/public_request_builder.rb +65 -0
- data/_generated/v1/profiles/item/item.rb +0 -0
- data/_generated/v1/profiles/item/with_name_item_request_builder.rb +134 -0
- data/_generated/v1/profiles/profiles.rb +0 -0
- data/_generated/v1/profiles/profiles_request_builder.rb +126 -0
- data/_generated/v1/proxy_providers/proxy_providers.rb +0 -0
- data/_generated/v1/proxy_providers/proxy_providers_request_builder.rb +65 -0
- data/_generated/v1/queues/item/ack/ack.rb +1 -0
- data/_generated/v1/queues/item/ack/ack_post_request_body.rb +71 -0
- data/_generated/v1/queues/item/ack/ack_request_builder.rb +76 -0
- data/_generated/v1/queues/item/item.rb +0 -0
- data/_generated/v1/queues/item/pop/pop.rb +0 -0
- data/_generated/v1/queues/item/pop/pop_request_builder.rb +79 -0
- data/_generated/v1/queues/item/push/push.rb +1 -0
- data/_generated/v1/queues/item/push/push_post_request_body.rb +71 -0
- data/_generated/v1/queues/item/push/push_request_builder.rb +76 -0
- data/_generated/v1/queues/item/stats/stats.rb +0 -0
- data/_generated/v1/queues/item/stats/stats_request_builder.rb +71 -0
- data/_generated/v1/queues/item/with_name_item_request_builder.rb +52 -0
- data/_generated/v1/queues/queues.rb +0 -0
- data/_generated/v1/queues/queues_request_builder.rb +37 -0
- data/_generated/v1/recordings/item/item.rb +0 -0
- data/_generated/v1/recordings/item/recording_item_request_builder.rb +104 -0
- data/_generated/v1/recordings/item/visual/frames/frames.rb +0 -0
- data/_generated/v1/recordings/item/visual/frames/frames_request_builder.rb +93 -0
- data/_generated/v1/recordings/item/visual/start/start.rb +0 -0
- data/_generated/v1/recordings/item/visual/start/start_request_builder.rb +80 -0
- data/_generated/v1/recordings/item/visual/stop/stop.rb +0 -0
- data/_generated/v1/recordings/item/visual/stop/stop_request_builder.rb +80 -0
- data/_generated/v1/recordings/item/visual/visual.rb +0 -0
- data/_generated/v1/recordings/item/visual/visual_request_builder.rb +95 -0
- data/_generated/v1/recordings/recordings.rb +0 -0
- data/_generated/v1/recordings/recordings_request_builder.rb +90 -0
- data/_generated/v1/registry/registry.rb +0 -0
- data/_generated/v1/registry/registry_request_builder.rb +31 -0
- data/_generated/v1/registry/token/token.rb +0 -0
- data/_generated/v1/registry/token/token_request_builder.rb +74 -0
- data/_generated/v1/schedules/item/item.rb +0 -0
- data/_generated/v1/schedules/item/runs/runs.rb +0 -0
- data/_generated/v1/schedules/item/runs/runs_request_builder.rb +71 -0
- data/_generated/v1/schedules/item/with_schedule_item_request_builder.rb +104 -0
- data/_generated/v1/schedules/schedules.rb +0 -0
- data/_generated/v1/schedules/schedules_request_builder.rb +113 -0
- data/_generated/v1/scrape/batch/batch.rb +0 -0
- data/_generated/v1/scrape/batch/batch_request_builder.rb +82 -0
- data/_generated/v1/scrape/scrape.rb +0 -0
- data/_generated/v1/scrape/scrape_request_builder.rb +86 -0
- data/_generated/v1/screenshot_blobs/item/item.rb +0 -0
- data/_generated/v1/screenshot_blobs/item/with_ref_item_request_builder.rb +68 -0
- data/_generated/v1/screenshot_blobs/screenshot_blobs.rb +0 -0
- data/_generated/v1/screenshot_blobs/screenshot_blobs_request_builder.rb +37 -0
- data/_generated/v1/search/search.rb +0 -0
- data/_generated/v1/search/search_request_builder.rb +79 -0
- data/_generated/v1/sessions/create/create.rb +0 -0
- data/_generated/v1/sessions/create/create_request_builder.rb +74 -0
- data/_generated/v1/sessions/item/budget_stream/budget_stream.rb +0 -0
- data/_generated/v1/sessions/item/budget_stream/budget_stream_request_builder.rb +71 -0
- data/_generated/v1/sessions/item/extend/extend.rb +0 -0
- data/_generated/v1/sessions/item/extend/extend_request_builder.rb +77 -0
- data/_generated/v1/sessions/item/item.rb +0 -0
- data/_generated/v1/sessions/item/pin/pin.rb +0 -0
- data/_generated/v1/sessions/item/pin/pin_request_builder.rb +71 -0
- data/_generated/v1/sessions/item/profile_item_request_builder.rb +76 -0
- data/_generated/v1/sessions/item/recording/recording.rb +0 -0
- data/_generated/v1/sessions/item/recording/recording_request_builder.rb +43 -0
- data/_generated/v1/sessions/item/recording/start/start.rb +0 -0
- data/_generated/v1/sessions/item/recording/start/start_request_builder.rb +74 -0
- data/_generated/v1/sessions/item/recording/stop/stop.rb +0 -0
- data/_generated/v1/sessions/item/recording/stop/stop_request_builder.rb +74 -0
- data/_generated/v1/sessions/item/release/release.rb +0 -0
- data/_generated/v1/sessions/item/release/release_request_builder.rb +71 -0
- data/_generated/v1/sessions/item/takeover/takeover.rb +0 -0
- data/_generated/v1/sessions/item/takeover/takeover_request_builder.rb +77 -0
- data/_generated/v1/sessions/item/takeover_release/takeover_release.rb +0 -0
- data/_generated/v1/sessions/item/takeover_release/takeover_release_request_builder.rb +71 -0
- data/_generated/v1/sessions/item/takeover_token/takeover_token.rb +0 -0
- data/_generated/v1/sessions/item/takeover_token/takeover_token_request_builder.rb +71 -0
- data/_generated/v1/sessions/sessions.rb +0 -0
- data/_generated/v1/sessions/sessions_request_builder.rb +96 -0
- data/_generated/v1/storage_states/detach/detach.rb +0 -0
- data/_generated/v1/storage_states/detach/detach_request_builder.rb +74 -0
- data/_generated/v1/storage_states/item/attach/attach.rb +0 -0
- data/_generated/v1/storage_states/item/attach/attach_request_builder.rb +77 -0
- data/_generated/v1/storage_states/item/item.rb +0 -0
- data/_generated/v1/storage_states/item/with_id_or_name_item_request_builder.rb +104 -0
- data/_generated/v1/storage_states/storage_states.rb +1 -0
- data/_generated/v1/storage_states/storage_states_post_request_body.rb +65 -0
- data/_generated/v1/storage_states/storage_states_request_builder.rb +127 -0
- data/_generated/v1/updates/updates.rb +0 -0
- data/_generated/v1/updates/updates_request_builder.rb +75 -0
- data/_generated/v1/v1.rb +0 -0
- data/_generated/v1/v1_request_builder.rb +208 -0
- data/_generated/v1/webhooks/item/deliveries/deliveries.rb +0 -0
- data/_generated/v1/webhooks/item/deliveries/deliveries_request_builder.rb +97 -0
- data/_generated/v1/webhooks/item/deliveries/item/item.rb +0 -0
- data/_generated/v1/webhooks/item/deliveries/item/retry_escaped/retry_escaped.rb +0 -0
- data/_generated/v1/webhooks/item/deliveries/item/retry_escaped/retry_request_builder.rb +78 -0
- data/_generated/v1/webhooks/item/deliveries/item/with_delivery_item_request_builder.rb +40 -0
- data/_generated/v1/webhooks/item/item.rb +0 -0
- data/_generated/v1/webhooks/item/rotate_secret/rotate_secret.rb +0 -0
- data/_generated/v1/webhooks/item/rotate_secret/rotate_secret_request_builder.rb +72 -0
- data/_generated/v1/webhooks/item/with_webhook_item_request_builder.rb +111 -0
- data/_generated/v1/webhooks/webhooks.rb +0 -0
- data/_generated/v1/webhooks/webhooks_request_builder.rb +128 -0
- data/lib/ghostcrawl/client.rb +761 -0
- data/lib/ghostcrawl/error_codes.rb +104 -0
- data/lib/ghostcrawl/errors.rb +137 -0
- data/lib/ghostcrawl/version.rb +5 -0
- data/lib/ghostcrawl.rb +17 -0
- metadata +460 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Mirrors ghostcrawl/errors/codes.json (the single source of truth). Do not hand-diverge the set.
|
|
4
|
+
#
|
|
5
|
+
# Two channels:
|
|
6
|
+
# PROBLEM — OUR failure -> non-2xx application/problem+json
|
|
7
|
+
# RESULT — TARGET failure -> HTTP 200 + result_error{code,retryable}
|
|
8
|
+
module Ghostcrawl
|
|
9
|
+
# Canonical error-code constants + lookup tables. The 23 codes, their HTTP
|
|
10
|
+
# status, retryability, and channel mirror the server-side catalog so that
|
|
11
|
+
# every typed error the SDK raises carries a stable, documented +code+.
|
|
12
|
+
module ErrorCodes
|
|
13
|
+
# --- PROBLEM channel (our failure -> non-2xx) ----------------------------
|
|
14
|
+
BAD_REQUEST = "bad_request"
|
|
15
|
+
UNAUTHORIZED = "unauthorized"
|
|
16
|
+
FORBIDDEN = "forbidden"
|
|
17
|
+
PAYMENT_REQUIRED = "payment_required"
|
|
18
|
+
NOT_FOUND = "not_found"
|
|
19
|
+
CONFLICT = "conflict"
|
|
20
|
+
BYO_PROXY_INVALID = "byo_proxy_invalid"
|
|
21
|
+
TIER_UNAVAILABLE = "tier_unavailable"
|
|
22
|
+
RATE_LIMITED = "rate_limited"
|
|
23
|
+
QUOTA_BACKEND_UNAVAILABLE = "quota_backend_unavailable"
|
|
24
|
+
POOL_EXHAUSTED = "pool_exhausted"
|
|
25
|
+
EGRESS_INTEGRITY_FAILED = "egress_integrity_failed"
|
|
26
|
+
RENDER_HUNG = "render_hung"
|
|
27
|
+
ENGINE_CRASHED = "engine_crashed"
|
|
28
|
+
RENDER_TIMEOUT = "render_timeout"
|
|
29
|
+
FLEET_TIMEOUT = "fleet_timeout"
|
|
30
|
+
SERVICE_UNAVAILABLE = "service_unavailable"
|
|
31
|
+
INTERNAL_ERROR = "internal_error"
|
|
32
|
+
|
|
33
|
+
# --- RESULT channel (target failure -> HTTP 200 + result_error) ----------
|
|
34
|
+
TARGET_HTTP_ERROR = "target_http_error"
|
|
35
|
+
NAVIGATION_FAILED = "navigation_failed"
|
|
36
|
+
BLOCKED = "blocked"
|
|
37
|
+
CAPTCHA_REQUIRED = "captcha_required"
|
|
38
|
+
EMPTY_CONTENT = "empty_content"
|
|
39
|
+
|
|
40
|
+
# Full catalog: code => {http:, retryable:, channel:}. Mirrors codes.json.
|
|
41
|
+
CATALOG = {
|
|
42
|
+
BAD_REQUEST => { http: 400, retryable: false, channel: "problem" },
|
|
43
|
+
UNAUTHORIZED => { http: 401, retryable: false, channel: "problem" },
|
|
44
|
+
FORBIDDEN => { http: 403, retryable: false, channel: "problem" },
|
|
45
|
+
PAYMENT_REQUIRED => { http: 402, retryable: false, channel: "problem" },
|
|
46
|
+
NOT_FOUND => { http: 404, retryable: false, channel: "problem" },
|
|
47
|
+
CONFLICT => { http: 409, retryable: false, channel: "problem" },
|
|
48
|
+
BYO_PROXY_INVALID => { http: 422, retryable: false, channel: "problem" },
|
|
49
|
+
TIER_UNAVAILABLE => { http: 400, retryable: false, channel: "problem" },
|
|
50
|
+
RATE_LIMITED => { http: 429, retryable: true, channel: "problem" },
|
|
51
|
+
QUOTA_BACKEND_UNAVAILABLE => { http: 503, retryable: true, channel: "problem" },
|
|
52
|
+
POOL_EXHAUSTED => { http: 503, retryable: true, channel: "problem" },
|
|
53
|
+
EGRESS_INTEGRITY_FAILED => { http: 503, retryable: true, channel: "problem" },
|
|
54
|
+
RENDER_HUNG => { http: 503, retryable: true, channel: "problem" },
|
|
55
|
+
ENGINE_CRASHED => { http: 503, retryable: true, channel: "problem" },
|
|
56
|
+
RENDER_TIMEOUT => { http: 504, retryable: true, channel: "problem" },
|
|
57
|
+
FLEET_TIMEOUT => { http: 504, retryable: true, channel: "problem" },
|
|
58
|
+
SERVICE_UNAVAILABLE => { http: 503, retryable: true, channel: "problem" },
|
|
59
|
+
INTERNAL_ERROR => { http: 500, retryable: true, channel: "problem" },
|
|
60
|
+
TARGET_HTTP_ERROR => { http: 200, retryable: false, channel: "result" },
|
|
61
|
+
NAVIGATION_FAILED => { http: 200, retryable: false, channel: "result" },
|
|
62
|
+
BLOCKED => { http: 200, retryable: true, channel: "result" },
|
|
63
|
+
CAPTCHA_REQUIRED => { http: 200, retryable: true, channel: "result" },
|
|
64
|
+
EMPTY_CONTENT => { http: 200, retryable: false, channel: "result" }
|
|
65
|
+
}.freeze
|
|
66
|
+
|
|
67
|
+
# code => retryable? boolean lookup, derived from {CATALOG}.
|
|
68
|
+
RETRYABLE = CATALOG.transform_values { |meta| meta[:retryable] }.freeze
|
|
69
|
+
|
|
70
|
+
# Codes carried on a successful (HTTP 200) response that signal a target-side
|
|
71
|
+
# failure — the RESULT channel. A top-level +code+ is only treated as an
|
|
72
|
+
# error when it appears in this set.
|
|
73
|
+
RESULT_CODES = CATALOG.select { |_code, meta| meta[:channel] == "result" }.keys.freeze
|
|
74
|
+
|
|
75
|
+
# Whether +code+ is a known RESULT-channel (HTTP-200 target-failure) code.
|
|
76
|
+
# @param code [String, nil]
|
|
77
|
+
# @return [Boolean]
|
|
78
|
+
def self.result_channel?(code)
|
|
79
|
+
RESULT_CODES.include?(code)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Fallback status -> canonical code map, used when the response body carries
|
|
83
|
+
# no +code+ (the common Kiota case where the body is dropped before the
|
|
84
|
+
# adapter raises). Keeps every typed error keyed to a canonical code.
|
|
85
|
+
# @param status [Integer] HTTP status code
|
|
86
|
+
# @return [String] canonical error code
|
|
87
|
+
def self.code_for_status(status)
|
|
88
|
+
case status
|
|
89
|
+
when 400 then BAD_REQUEST
|
|
90
|
+
when 401 then UNAUTHORIZED
|
|
91
|
+
when 402 then PAYMENT_REQUIRED
|
|
92
|
+
when 403 then FORBIDDEN
|
|
93
|
+
when 404 then NOT_FOUND
|
|
94
|
+
when 409 then CONFLICT
|
|
95
|
+
when 422 then BYO_PROXY_INVALID
|
|
96
|
+
when 429 then RATE_LIMITED
|
|
97
|
+
when 503 then SERVICE_UNAVAILABLE
|
|
98
|
+
when 504 then FLEET_TIMEOUT
|
|
99
|
+
else
|
|
100
|
+
status.to_i >= 500 ? INTERNAL_ERROR : BAD_REQUEST
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
require_relative "error_codes"
|
|
5
|
+
|
|
6
|
+
module Ghostcrawl
|
|
7
|
+
# Base error for all GhostCrawl API errors.
|
|
8
|
+
class GhostcrawlError < StandardError
|
|
9
|
+
# @return [Integer] HTTP status code
|
|
10
|
+
attr_reader :status_code
|
|
11
|
+
# @return [String] raw response body
|
|
12
|
+
attr_reader :body
|
|
13
|
+
# @return [String, nil] canonical error code (see {Ghostcrawl::ErrorCodes})
|
|
14
|
+
attr_reader :code
|
|
15
|
+
# @return [Boolean] whether the operation is safe to retry
|
|
16
|
+
attr_reader :retryable
|
|
17
|
+
# @return [String, nil] request id (the problem+json +instance+) for support
|
|
18
|
+
attr_reader :request_id
|
|
19
|
+
|
|
20
|
+
def initialize(message, status_code: 0, body: nil, code: nil, retryable: false, request_id: nil)
|
|
21
|
+
super(message)
|
|
22
|
+
@status_code = status_code
|
|
23
|
+
@body = body
|
|
24
|
+
@code = code
|
|
25
|
+
@retryable = retryable
|
|
26
|
+
@request_id = request_id
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Raised on 401 — missing or invalid API key.
|
|
31
|
+
class AuthenticationError < GhostcrawlError; end
|
|
32
|
+
|
|
33
|
+
# Raised on 402 — usage or spend limit reached.
|
|
34
|
+
class PaymentRequiredError < GhostcrawlError; end
|
|
35
|
+
|
|
36
|
+
# Raised on 422 — bad request parameters.
|
|
37
|
+
class InvalidRequestError < GhostcrawlError; end
|
|
38
|
+
|
|
39
|
+
# Raised on 429 — rate limit reached.
|
|
40
|
+
class RateLimitError < GhostcrawlError; end
|
|
41
|
+
|
|
42
|
+
# Raised on 5xx server errors.
|
|
43
|
+
class APIError < GhostcrawlError; end
|
|
44
|
+
|
|
45
|
+
# Raised when a request succeeds at the transport layer (HTTP 200) but the
|
|
46
|
+
# target page could not be scraped — the RESULT channel. Carries the canonical
|
|
47
|
+
# result-error +code+ (e.g. "blocked", "captcha_required") plus the target's
|
|
48
|
+
# own HTTP status when one is available.
|
|
49
|
+
class ScrapeError < GhostcrawlError
|
|
50
|
+
# @return [Integer, nil] the target site's HTTP status, when reported
|
|
51
|
+
attr_reader :target_status
|
|
52
|
+
|
|
53
|
+
def initialize(message, status_code: 200, body: nil, code: nil, retryable: false,
|
|
54
|
+
request_id: nil, target_status: nil)
|
|
55
|
+
super(message, status_code: status_code, body: body, code: code,
|
|
56
|
+
retryable: retryable, request_id: request_id)
|
|
57
|
+
@target_status = target_status
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Translates a low-level transport exception (raised by the Kiota Faraday
|
|
62
|
+
# adapter) into a typed {GhostcrawlError}. The adapter raises a bare
|
|
63
|
+
# +MicrosoftKiotaAbstractions::ApiError+ whose message embeds the HTTP status
|
|
64
|
+
# code (e.g. "...status code...:402"), and a typed +HTTPValidationError+ for
|
|
65
|
+
# 422 responses. Neither subclasses {GhostcrawlError}, so the documented
|
|
66
|
+
# +rescue Ghostcrawl::GhostcrawlError+ contract would otherwise never fire.
|
|
67
|
+
#
|
|
68
|
+
# @param err [StandardError] the original transport exception
|
|
69
|
+
# @return [GhostcrawlError] never returns normally — always raises
|
|
70
|
+
# @api private
|
|
71
|
+
def self.raise_translated(err)
|
|
72
|
+
# A typed HTTPValidationError is the adapter's 422 mapping — it carries no
|
|
73
|
+
# ":<code>" in its message, so key off the class name.
|
|
74
|
+
validation = err.class.name.to_s.include?("HTTPValidationError")
|
|
75
|
+
status = validation ? 422 : extract_status(err)
|
|
76
|
+
body = err.message
|
|
77
|
+
|
|
78
|
+
# The problem+json body is frequently dropped by the Kiota runtime before it
|
|
79
|
+
# raises (no spec error-mapping for the status). Try to read a canonical
|
|
80
|
+
# +code+ and +instance+ (request id) from whatever message/body text exists;
|
|
81
|
+
# otherwise fall back to a status -> code map so the caller still gets a
|
|
82
|
+
# canonical, documented code + retryability keyed off the status line.
|
|
83
|
+
problem = parse_problem_body(body)
|
|
84
|
+
code = problem["code"] || ErrorCodes.code_for_status(status)
|
|
85
|
+
request_id = problem["instance"]
|
|
86
|
+
retryable = ErrorCodes::RETRYABLE.fetch(code, false)
|
|
87
|
+
|
|
88
|
+
# Keep the existing status -> class selection for back-compat; just enrich
|
|
89
|
+
# the raised instance with the canonical code/retryable/request_id.
|
|
90
|
+
klass =
|
|
91
|
+
case status
|
|
92
|
+
when 401, 403 then AuthenticationError
|
|
93
|
+
when 402 then PaymentRequiredError
|
|
94
|
+
when 400, 422 then InvalidRequestError
|
|
95
|
+
when 429 then RateLimitError
|
|
96
|
+
when 500..599 then APIError
|
|
97
|
+
else GhostcrawlError
|
|
98
|
+
end
|
|
99
|
+
raise klass.new(friendly_message(status, err), status_code: status, body: body,
|
|
100
|
+
code: code, retryable: retryable,
|
|
101
|
+
request_id: request_id)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Best-effort parse of a problem+json body/message string. Returns the parsed
|
|
105
|
+
# Hash when the text is a JSON object, or an empty Hash otherwise — never
|
|
106
|
+
# raises, so callers can read +["code"]+/+["instance"]+ unconditionally.
|
|
107
|
+
# @api private
|
|
108
|
+
def self.parse_problem_body(body)
|
|
109
|
+
return {} if body.nil?
|
|
110
|
+
|
|
111
|
+
parsed = JSON.parse(body.to_s)
|
|
112
|
+
parsed.is_a?(Hash) ? parsed : {}
|
|
113
|
+
rescue StandardError
|
|
114
|
+
{}
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# @api private
|
|
118
|
+
def self.extract_status(err)
|
|
119
|
+
# The Faraday adapter appends ":<code>" to its ApiError message.
|
|
120
|
+
m = err.message.to_s.match(/:(\d{3})\b/)
|
|
121
|
+
m ? m[1].to_i : 0
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @api private
|
|
125
|
+
def self.friendly_message(status, err)
|
|
126
|
+
return "validation error (HTTP 422)" if err.class.name.to_s.include?("HTTPValidationError")
|
|
127
|
+
|
|
128
|
+
case status
|
|
129
|
+
when 401, 403 then "authentication failed — check your API key (HTTP #{status})"
|
|
130
|
+
when 402 then "payment required — usage or spend limit reached (HTTP 402)"
|
|
131
|
+
when 400, 422 then "invalid request parameters (HTTP #{status})"
|
|
132
|
+
when 429 then "rate limit reached — retry after a short delay (HTTP 429)"
|
|
133
|
+
when 500..599 then "server error (HTTP #{status})"
|
|
134
|
+
else err.message.to_s
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
data/lib/ghostcrawl.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "ghostcrawl/version"
|
|
4
|
+
require_relative "ghostcrawl/error_codes"
|
|
5
|
+
require_relative "ghostcrawl/errors"
|
|
6
|
+
require_relative "ghostcrawl/client"
|
|
7
|
+
|
|
8
|
+
# GhostCrawl SDK — collect web data at scale.
|
|
9
|
+
module Ghostcrawl
|
|
10
|
+
# Convenience constructor.
|
|
11
|
+
# @param token [String, nil] API key
|
|
12
|
+
# @param base_url [String, nil] optional base URL override
|
|
13
|
+
# @return [Client]
|
|
14
|
+
def self.new(token: nil, base_url: nil)
|
|
15
|
+
Client.new(token: token, base_url: base_url)
|
|
16
|
+
end
|
|
17
|
+
end
|