kernel 0.69.0__tar.gz → 0.70.0__tar.gz
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.
- kernel-0.70.0/.release-please-manifest.json +3 -0
- {kernel-0.69.0 → kernel-0.70.0}/CHANGELOG.md +18 -0
- {kernel-0.69.0 → kernel-0.70.0}/PKG-INFO +1 -1
- {kernel-0.69.0 → kernel-0.70.0}/api.md +5 -2
- {kernel-0.69.0 → kernel-0.70.0}/pyproject.toml +1 -1
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_version.py +1 -1
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/lib/browser_routing/routing.py +20 -2
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browser_pools.py +28 -8
- kernel-0.70.0/src/kernel/resources/browsers/telemetry.py +403 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/extensions.py +81 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/projects/projects.py +6 -4
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/__init__.py +3 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool.py +6 -2
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_acquire_params.py +7 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_create_params.py +6 -2
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_update_params.py +6 -2
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/__init__.py +3 -0
- kernel-0.70.0/src/kernel/types/browsers/telemetry_events_params.py +52 -0
- kernel-0.70.0/src/kernel/types/browsers/telemetry_events_response.py +36 -0
- kernel-0.70.0/src/kernel/types/browsers/telemetry_stream_params.py +20 -0
- kernel-0.70.0/src/kernel/types/extension_get_response.py +30 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/browser_viewport.py +4 -3
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared_params/browser_viewport.py +4 -3
- kernel-0.70.0/tests/api_resources/browsers/test_telemetry.py +237 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_browser_pools.py +6 -4
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_extensions.py +85 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_browser_routing.py +47 -2
- kernel-0.69.0/.release-please-manifest.json +0 -3
- kernel-0.69.0/src/kernel/resources/browsers/telemetry.py +0 -195
- kernel-0.69.0/tests/api_resources/browsers/test_telemetry.py +0 -122
- {kernel-0.69.0 → kernel-0.70.0}/.gitignore +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/CONTRIBUTING.md +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/LICENSE +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/README.md +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/SECURITY.md +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/bin/check-release-environment +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/bin/publish-pypi +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/examples/.keep +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/examples/browser_routing.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/examples/browser_telemetry.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/noxfile.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/release-please-config.json +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/requirements-dev.lock +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/requirements.lock +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_base_client.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_client.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_compat.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_constants.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_exceptions.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_files.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_models.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_qs.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_resource.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_streaming.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_types.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_compat.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_datetime_parse.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_json.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_logs.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_path.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_proxy.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_reflection.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_resources_proxy.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_streams.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_sync.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_transform.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_typing.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/_utils/_utils.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/app_framework.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/lib/.keep +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/lib/browser_routing/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/lib/browser_routing/raw_http.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/lib/browser_routing/util.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/pagination.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/py.typed +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/api_keys.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/apps.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/auth/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/auth/auth.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/auth/connections.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/browsers.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/computer.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/fs/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/fs/fs.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/fs/watch.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/logs.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/playwright.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/process.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/browsers/replays.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/credential_providers.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/credentials.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/deployments.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/invocations.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/organization/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/organization/limits.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/organization/organization.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/profiles.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/projects/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/projects/limits.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/resources/proxies.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/api_key.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/api_key_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/api_key_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/api_key_retrieve_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/api_key_rotate_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/api_key_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/app_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/app_list_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/connection_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/connection_follow_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/connection_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/connection_login_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/connection_submit_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/connection_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/login_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/managed_auth.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/auth/submit_fields_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_create_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_curl_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_curl_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_list_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_load_extensions_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_acquire_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_delete_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_ref.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_pool_release_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_retrieve_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_retrieve_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_update_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browser_usage.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_api_call_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_call_stack.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_captcha_solve_result_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_cdp_connect_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_cdp_disconnect_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_console_error_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_console_log_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_event_context.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_event_source.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_http_headers.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_interaction_click_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_interaction_key_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_live_view_connect_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_live_view_disconnect_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_monitor_disconnected_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_monitor_init_failed_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_monitor_reconnected_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_monitor_screenshot_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_network_idle_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_network_loading_failed_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_network_request_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_network_response_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_layout_settled_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_layout_shift_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_lcp_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_load_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_navigation_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_navigation_settled_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_page_tab_opened_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_service_crashed_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_system_oom_kill_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_telemetry_categories_config.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_telemetry_categories_config_param.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_telemetry_category_config.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_telemetry_category_config_param.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_telemetry_config.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/browser_telemetry_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_batch_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_capture_screenshot_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_click_mouse_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_drag_mouse_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_get_mouse_position_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_move_mouse_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_press_key_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_read_clipboard_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_scroll_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_set_cursor_visibility_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_set_cursor_visibility_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_type_text_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/computer_write_clipboard_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_create_directory_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_delete_directory_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_delete_file_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_download_dir_zip_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_file_info_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_file_info_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_list_files_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_list_files_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_move_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_read_file_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_set_file_permissions_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_upload_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_upload_zip_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/f_write_file_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/fs/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/fs/watch_events_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/fs/watch_start_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/fs/watch_start_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/log_stream_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/playwright_execute_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/playwright_execute_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_exec_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_exec_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_kill_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_kill_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_resize_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_resize_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_spawn_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_spawn_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_status_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_stdin_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_stdin_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/process_stdout_stream_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/replay_list_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/replay_start_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/replay_start_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/browsers/telemetry_stream_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/created_api_key.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_provider.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_provider_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_provider_item.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_provider_list_items_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_provider_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_provider_test_result.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_provider_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_totp_code_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/credential_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_create_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_follow_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_follow_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_list_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_retrieve_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/deployment_state_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/extension_download_from_chrome_store_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/extension_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/extension_list_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/extension_upload_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/extension_upload_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_create_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_follow_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_follow_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_list_browsers_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_list_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_retrieve_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_state_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/invocation_update_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/organization/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/organization/limit_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/organization/org_limits.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/profile.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/profile_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/profile_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/project.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/project_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/project_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/project_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/projects/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/projects/limit_update_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/projects/project_limits.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/proxy_check_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/proxy_check_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/proxy_create_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/proxy_create_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/proxy_list_params.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/proxy_list_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/proxy_retrieve_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/app_action.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/browser_extension.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/browser_profile.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/error_detail.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/error_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/error_model.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/heartbeat_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared/log_event.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared_params/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared_params/browser_extension.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/shared_params/browser_profile.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/tags.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/src/kernel/types/tags_param.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/auth/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/auth/test_connections.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/fs/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/fs/test_watch.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/test_computer.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/test_fs.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/test_logs.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/test_playwright.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/test_process.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/browsers/test_replays.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/organization/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/organization/test_limits.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/projects/__init__.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/projects/test_limits.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_api_keys.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_apps.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_browsers.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_credential_providers.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_credentials.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_deployments.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_invocations.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_profiles.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_projects.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/api_resources/test_proxies.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/conftest.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/sample_file.txt +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_client.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_extract_files.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_files.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_models.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_pagination.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_qs.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_required_args.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_response.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_streaming.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_transform.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_utils/test_json.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_utils/test_path.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_utils/test_proxy.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/test_utils/test_typing.py +0 -0
- {kernel-0.69.0 → kernel-0.70.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.70.0 (2026-06-24)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.69.0...v0.70.0](https://github.com/kernel/kernel-python-sdk/compare/v0.69.0...v0.70.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* Add GET /browsers/{id}/telemetry/events (read from S2) ([57eb393](https://github.com/kernel/kernel-python-sdk/commit/57eb393ea1eb5fb0d2e5211845f338610198a0fd))
|
|
10
|
+
* Align browser-pool timeout/viewport/fill-rate contract with implementation; reject save_changes on update ([4fddd6b](https://github.com/kernel/kernel-python-sdk/commit/4fddd6bb3f2ccb86ec3cc492311d5fe9c061ba49))
|
|
11
|
+
* api: support per-acquire start_url override on browser pool acquire ([3e11311](https://github.com/kernel/kernel-python-sdk/commit/3e11311f835d558c4fa6ab0c0fb8a9c7e3536a13))
|
|
12
|
+
* **api:** add GET /extensions/{id_or_name}/metadata ([681a8fc](https://github.com/kernel/kernel-python-sdk/commit/681a8fcd7d8ec5c3373a66c81fb405a6844308eb))
|
|
13
|
+
* **api:** resolve GET /org/projects/{id} by ID or name ([52eb598](https://github.com/kernel/kernel-python-sdk/commit/52eb598c7bfd6e696f0d510585439ba5658dc161))
|
|
14
|
+
* Forward replay param through telemetry stream passthrough ([a8001d2](https://github.com/kernel/kernel-python-sdk/commit/a8001d239ae583fa177164e1ce900e767797c853))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* don't misroute telemetry/events to the browser VM ([9bcc418](https://github.com/kernel/kernel-python-sdk/commit/9bcc418b4294295c0d8377adfc921c3748d42019))
|
|
20
|
+
|
|
3
21
|
## 0.69.0 (2026-06-18)
|
|
4
22
|
|
|
5
23
|
Full Changelog: [v0.68.0...v0.69.0](https://github.com/kernel/kernel-python-sdk/compare/v0.68.0...v0.69.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.70.0
|
|
4
4
|
Summary: The official Python library for the kernel API
|
|
5
5
|
Project-URL: Homepage, https://github.com/kernel/kernel-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/kernel/kernel-python-sdk
|
|
@@ -146,13 +146,15 @@ from kernel.types.browsers import (
|
|
|
146
146
|
BrowserTelemetryCategoryConfig,
|
|
147
147
|
BrowserTelemetryConfig,
|
|
148
148
|
BrowserTelemetryEvent,
|
|
149
|
+
TelemetryEventsResponse,
|
|
149
150
|
TelemetryStreamResponse,
|
|
150
151
|
)
|
|
151
152
|
```
|
|
152
153
|
|
|
153
154
|
Methods:
|
|
154
155
|
|
|
155
|
-
- <code title="get /browsers/{id}/telemetry/
|
|
156
|
+
- <code title="get /browsers/{id}/telemetry/events">client.browsers.telemetry.<a href="./src/kernel/resources/browsers/telemetry.py">events</a>(id, \*\*<a href="src/kernel/types/browsers/telemetry_events_params.py">params</a>) -> <a href="./src/kernel/types/browsers/telemetry_events_response.py">SyncOffsetPagination[TelemetryEventsResponse]</a></code>
|
|
157
|
+
- <code title="get /browsers/{id}/telemetry/stream">client.browsers.telemetry.<a href="./src/kernel/resources/browsers/telemetry.py">stream</a>(id, \*\*<a href="src/kernel/types/browsers/telemetry_stream_params.py">params</a>) -> <a href="./src/kernel/types/browsers/telemetry_stream_response.py">TelemetryStreamResponse</a></code>
|
|
156
158
|
|
|
157
159
|
## Replays
|
|
158
160
|
|
|
@@ -342,7 +344,7 @@ Methods:
|
|
|
342
344
|
Types:
|
|
343
345
|
|
|
344
346
|
```python
|
|
345
|
-
from kernel.types import ExtensionListResponse, ExtensionUploadResponse
|
|
347
|
+
from kernel.types import ExtensionListResponse, ExtensionGetResponse, ExtensionUploadResponse
|
|
346
348
|
```
|
|
347
349
|
|
|
348
350
|
Methods:
|
|
@@ -351,6 +353,7 @@ Methods:
|
|
|
351
353
|
- <code title="delete /extensions/{id_or_name}">client.extensions.<a href="./src/kernel/resources/extensions.py">delete</a>(id_or_name) -> None</code>
|
|
352
354
|
- <code title="get /extensions/{id_or_name}">client.extensions.<a href="./src/kernel/resources/extensions.py">download</a>(id_or_name) -> BinaryAPIResponse</code>
|
|
353
355
|
- <code title="get /extensions/from_chrome_store">client.extensions.<a href="./src/kernel/resources/extensions.py">download_from_chrome_store</a>(\*\*<a href="src/kernel/types/extension_download_from_chrome_store_params.py">params</a>) -> BinaryAPIResponse</code>
|
|
356
|
+
- <code title="get /extensions/{id_or_name}/metadata">client.extensions.<a href="./src/kernel/resources/extensions.py">get</a>(id_or_name) -> <a href="./src/kernel/types/extension_get_response.py">ExtensionGetResponse</a></code>
|
|
354
357
|
- <code title="post /extensions">client.extensions.<a href="./src/kernel/resources/extensions.py">upload</a>(\*\*<a href="src/kernel/types/extension_upload_params.py">params</a>) -> <a href="./src/kernel/types/extension_upload_response.py">ExtensionUploadResponse</a></code>
|
|
355
358
|
|
|
356
359
|
# BrowserPools
|
|
@@ -41,7 +41,10 @@ _BROWSER_POOL_RELEASE_PATH = re.compile(r"^/(?:v\d+/)?browser_pools/[^/]+/releas
|
|
|
41
41
|
def browser_routing_config_from_env() -> BrowserRoutingConfig:
|
|
42
42
|
raw = os.environ.get("KERNEL_BROWSER_ROUTING_SUBRESOURCES")
|
|
43
43
|
if raw is None:
|
|
44
|
-
|
|
44
|
+
# Path prefixes eligible for direct-to-VM routing. "telemetry/stream" is
|
|
45
|
+
# the live SSE endpoint (VM); "telemetry/events" is a historical read
|
|
46
|
+
# served by the control plane (S2) and must NOT be here.
|
|
47
|
+
return BrowserRoutingConfig(subresources=("curl", "telemetry/stream"))
|
|
45
48
|
if raw.strip() == "":
|
|
46
49
|
return BrowserRoutingConfig()
|
|
47
50
|
|
|
@@ -188,6 +191,21 @@ def _session_id_from_browser_pool_release_request(request: httpx.Request, path:
|
|
|
188
191
|
return normalized or None
|
|
189
192
|
|
|
190
193
|
|
|
194
|
+
def _matches_direct_vm_prefix(tail: str, prefixes: tuple[str, ...]) -> bool:
|
|
195
|
+
"""Whether tail (the path after browsers/{id}/) is covered by an allow prefix,
|
|
196
|
+
matching on segment boundaries: "telemetry/stream" matches "telemetry/stream"
|
|
197
|
+
and "telemetry/stream/...", but not "telemetry/events" or "telemetry/streamfoo".
|
|
198
|
+
Keeps historical control-plane reads (e.g. telemetry/events, served from S2)
|
|
199
|
+
off the VM.
|
|
200
|
+
"""
|
|
201
|
+
tail = tail.strip("/")
|
|
202
|
+
for prefix in prefixes:
|
|
203
|
+
prefix = prefix.strip("/")
|
|
204
|
+
if prefix and (tail == prefix or tail.startswith(prefix + "/")):
|
|
205
|
+
return True
|
|
206
|
+
return False
|
|
207
|
+
|
|
208
|
+
|
|
191
209
|
def rewrite_direct_vm_options(
|
|
192
210
|
options: FinalRequestOptions,
|
|
193
211
|
*,
|
|
@@ -199,7 +217,7 @@ def rewrite_direct_vm_options(
|
|
|
199
217
|
return options
|
|
200
218
|
|
|
201
219
|
session_id, subresource, suffix = match
|
|
202
|
-
if
|
|
220
|
+
if not _matches_direct_vm_prefix(f"{subresource}{suffix}", config.subresources):
|
|
203
221
|
return options
|
|
204
222
|
|
|
205
223
|
route = cache.get(session_id)
|
|
@@ -96,7 +96,9 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
96
96
|
|
|
97
97
|
extensions: List of browser extensions to load into the session. Provide each by id or name.
|
|
98
98
|
|
|
99
|
-
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10
|
|
99
|
+
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10. The cap is 25 for
|
|
100
|
+
most organizations but can be raised per-organization, so only the lower bound
|
|
101
|
+
is enforced here.
|
|
100
102
|
|
|
101
103
|
headless: If true, launches the browser using a headless image. Defaults to false.
|
|
102
104
|
|
|
@@ -122,7 +124,7 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
122
124
|
mechanisms.
|
|
123
125
|
|
|
124
126
|
timeout_seconds: Default idle timeout in seconds for browsers acquired from this pool before they
|
|
125
|
-
are destroyed. Defaults to 600 seconds
|
|
127
|
+
are destroyed. Defaults to 600 seconds. Minimum 10, maximum 259200 (72 hours).
|
|
126
128
|
|
|
127
129
|
viewport: Initial browser window size in pixels with optional refresh rate. If omitted,
|
|
128
130
|
image defaults apply (1920x1080@25). For GPU images, the default is
|
|
@@ -243,7 +245,9 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
243
245
|
|
|
244
246
|
extensions: List of browser extensions to load into the session. Provide each by id or name.
|
|
245
247
|
|
|
246
|
-
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10
|
|
248
|
+
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10. The cap is 25 for
|
|
249
|
+
most organizations but can be raised per-organization, so only the lower bound
|
|
250
|
+
is enforced here.
|
|
247
251
|
|
|
248
252
|
headless: If true, launches the browser using a headless image. Defaults to false.
|
|
249
253
|
|
|
@@ -273,7 +277,7 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
273
277
|
mechanisms.
|
|
274
278
|
|
|
275
279
|
timeout_seconds: Default idle timeout in seconds for browsers acquired from this pool before they
|
|
276
|
-
are destroyed. Defaults to 600 seconds
|
|
280
|
+
are destroyed. Defaults to 600 seconds. Minimum 10, maximum 259200 (72 hours).
|
|
277
281
|
|
|
278
282
|
viewport: Initial browser window size in pixels with optional refresh rate. If omitted,
|
|
279
283
|
image defaults apply (1920x1080@25). For GPU images, the default is
|
|
@@ -423,6 +427,7 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
423
427
|
*,
|
|
424
428
|
acquire_timeout_seconds: int | Omit = omit,
|
|
425
429
|
name: str | Omit = omit,
|
|
430
|
+
start_url: str | Omit = omit,
|
|
426
431
|
tags: TagsParam | Omit = omit,
|
|
427
432
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
428
433
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
@@ -448,6 +453,10 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
448
453
|
project. Applies to this lease only and is cleared when the browser is released
|
|
449
454
|
back to the pool.
|
|
450
455
|
|
|
456
|
+
start_url: Optional URL to navigate the acquired browser to. Overrides the pool's start_url
|
|
457
|
+
for this acquire only. Best-effort: failures to navigate do not fail the
|
|
458
|
+
acquire.
|
|
459
|
+
|
|
451
460
|
tags: Optional user-defined key-value tags for the acquired browser session, used to
|
|
452
461
|
find and group sessions later. Applies to this lease only and are cleared when
|
|
453
462
|
the browser is released back to the pool. Up to 50 pairs.
|
|
@@ -468,6 +477,7 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
468
477
|
{
|
|
469
478
|
"acquire_timeout_seconds": acquire_timeout_seconds,
|
|
470
479
|
"name": name,
|
|
480
|
+
"start_url": start_url,
|
|
471
481
|
"tags": tags,
|
|
472
482
|
},
|
|
473
483
|
browser_pool_acquire_params.BrowserPoolAcquireParams,
|
|
@@ -621,7 +631,9 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
621
631
|
|
|
622
632
|
extensions: List of browser extensions to load into the session. Provide each by id or name.
|
|
623
633
|
|
|
624
|
-
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10
|
|
634
|
+
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10. The cap is 25 for
|
|
635
|
+
most organizations but can be raised per-organization, so only the lower bound
|
|
636
|
+
is enforced here.
|
|
625
637
|
|
|
626
638
|
headless: If true, launches the browser using a headless image. Defaults to false.
|
|
627
639
|
|
|
@@ -647,7 +659,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
647
659
|
mechanisms.
|
|
648
660
|
|
|
649
661
|
timeout_seconds: Default idle timeout in seconds for browsers acquired from this pool before they
|
|
650
|
-
are destroyed. Defaults to 600 seconds
|
|
662
|
+
are destroyed. Defaults to 600 seconds. Minimum 10, maximum 259200 (72 hours).
|
|
651
663
|
|
|
652
664
|
viewport: Initial browser window size in pixels with optional refresh rate. If omitted,
|
|
653
665
|
image defaults apply (1920x1080@25). For GPU images, the default is
|
|
@@ -768,7 +780,9 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
768
780
|
|
|
769
781
|
extensions: List of browser extensions to load into the session. Provide each by id or name.
|
|
770
782
|
|
|
771
|
-
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10
|
|
783
|
+
fill_rate_per_minute: Percentage of the pool to fill per minute. Defaults to 10. The cap is 25 for
|
|
784
|
+
most organizations but can be raised per-organization, so only the lower bound
|
|
785
|
+
is enforced here.
|
|
772
786
|
|
|
773
787
|
headless: If true, launches the browser using a headless image. Defaults to false.
|
|
774
788
|
|
|
@@ -798,7 +812,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
798
812
|
mechanisms.
|
|
799
813
|
|
|
800
814
|
timeout_seconds: Default idle timeout in seconds for browsers acquired from this pool before they
|
|
801
|
-
are destroyed. Defaults to 600 seconds
|
|
815
|
+
are destroyed. Defaults to 600 seconds. Minimum 10, maximum 259200 (72 hours).
|
|
802
816
|
|
|
803
817
|
viewport: Initial browser window size in pixels with optional refresh rate. If omitted,
|
|
804
818
|
image defaults apply (1920x1080@25). For GPU images, the default is
|
|
@@ -948,6 +962,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
948
962
|
*,
|
|
949
963
|
acquire_timeout_seconds: int | Omit = omit,
|
|
950
964
|
name: str | Omit = omit,
|
|
965
|
+
start_url: str | Omit = omit,
|
|
951
966
|
tags: TagsParam | Omit = omit,
|
|
952
967
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
953
968
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
@@ -973,6 +988,10 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
973
988
|
project. Applies to this lease only and is cleared when the browser is released
|
|
974
989
|
back to the pool.
|
|
975
990
|
|
|
991
|
+
start_url: Optional URL to navigate the acquired browser to. Overrides the pool's start_url
|
|
992
|
+
for this acquire only. Best-effort: failures to navigate do not fail the
|
|
993
|
+
acquire.
|
|
994
|
+
|
|
976
995
|
tags: Optional user-defined key-value tags for the acquired browser session, used to
|
|
977
996
|
find and group sessions later. Applies to this lease only and are cleared when
|
|
978
997
|
the browser is released back to the pool. Up to 50 pairs.
|
|
@@ -993,6 +1012,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
993
1012
|
{
|
|
994
1013
|
"acquire_timeout_seconds": acquire_timeout_seconds,
|
|
995
1014
|
"name": name,
|
|
1015
|
+
"start_url": start_url,
|
|
996
1016
|
"tags": tags,
|
|
997
1017
|
},
|
|
998
1018
|
browser_pool_acquire_params.BrowserPoolAcquireParams,
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import List
|
|
6
|
+
from typing_extensions import Literal
|
|
7
|
+
|
|
8
|
+
import httpx
|
|
9
|
+
|
|
10
|
+
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
|
|
11
|
+
from ..._utils import path_template, maybe_transform, strip_not_given, async_maybe_transform
|
|
12
|
+
from ..._compat import cached_property
|
|
13
|
+
from ..._resource import SyncAPIResource, AsyncAPIResource
|
|
14
|
+
from ..._response import (
|
|
15
|
+
to_raw_response_wrapper,
|
|
16
|
+
to_streamed_response_wrapper,
|
|
17
|
+
async_to_raw_response_wrapper,
|
|
18
|
+
async_to_streamed_response_wrapper,
|
|
19
|
+
)
|
|
20
|
+
from ..._streaming import Stream, AsyncStream
|
|
21
|
+
from ...pagination import SyncOffsetPagination, AsyncOffsetPagination
|
|
22
|
+
from ..._base_client import AsyncPaginator, make_request_options
|
|
23
|
+
from ...types.browsers import telemetry_events_params, telemetry_stream_params
|
|
24
|
+
from ...types.browsers.telemetry_events_response import TelemetryEventsResponse
|
|
25
|
+
from ...types.browsers.telemetry_stream_response import TelemetryStreamResponse
|
|
26
|
+
|
|
27
|
+
__all__ = ["TelemetryResource", "AsyncTelemetryResource"]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class TelemetryResource(SyncAPIResource):
|
|
31
|
+
"""Stream live telemetry events from a browser session."""
|
|
32
|
+
|
|
33
|
+
@cached_property
|
|
34
|
+
def with_raw_response(self) -> TelemetryResourceWithRawResponse:
|
|
35
|
+
"""
|
|
36
|
+
This property can be used as a prefix for any HTTP method call to return
|
|
37
|
+
the raw response object instead of the parsed content.
|
|
38
|
+
|
|
39
|
+
For more information, see https://www.github.com/kernel/kernel-python-sdk#accessing-raw-response-data-eg-headers
|
|
40
|
+
"""
|
|
41
|
+
return TelemetryResourceWithRawResponse(self)
|
|
42
|
+
|
|
43
|
+
@cached_property
|
|
44
|
+
def with_streaming_response(self) -> TelemetryResourceWithStreamingResponse:
|
|
45
|
+
"""
|
|
46
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
47
|
+
|
|
48
|
+
For more information, see https://www.github.com/kernel/kernel-python-sdk#with_streaming_response
|
|
49
|
+
"""
|
|
50
|
+
return TelemetryResourceWithStreamingResponse(self)
|
|
51
|
+
|
|
52
|
+
def events(
|
|
53
|
+
self,
|
|
54
|
+
id: str,
|
|
55
|
+
*,
|
|
56
|
+
category: List[
|
|
57
|
+
Literal[
|
|
58
|
+
"console",
|
|
59
|
+
"network",
|
|
60
|
+
"page",
|
|
61
|
+
"interaction",
|
|
62
|
+
"control",
|
|
63
|
+
"connection",
|
|
64
|
+
"system",
|
|
65
|
+
"screenshot",
|
|
66
|
+
"captcha",
|
|
67
|
+
"monitor",
|
|
68
|
+
]
|
|
69
|
+
]
|
|
70
|
+
| Omit = omit,
|
|
71
|
+
limit: int | Omit = omit,
|
|
72
|
+
offset: int | Omit = omit,
|
|
73
|
+
since: str | Omit = omit,
|
|
74
|
+
until: str | Omit = omit,
|
|
75
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
76
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
77
|
+
extra_headers: Headers | None = None,
|
|
78
|
+
extra_query: Query | None = None,
|
|
79
|
+
extra_body: Body | None = None,
|
|
80
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
81
|
+
) -> SyncOffsetPagination[TelemetryEventsResponse]:
|
|
82
|
+
"""
|
|
83
|
+
Reads a page of telemetry events for the browser session in ascending sequence
|
|
84
|
+
order. To page through results, pass the X-Next-Offset value from the previous
|
|
85
|
+
response as offset and repeat while X-Has-More is true. Returns an empty list
|
|
86
|
+
when telemetry data is unavailable.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
category: Restrict results to these event categories. Repeat the parameter for multiple
|
|
90
|
+
values.
|
|
91
|
+
|
|
92
|
+
limit: Maximum number of events per page. Defaults to 20.
|
|
93
|
+
|
|
94
|
+
offset: Opaque pagination cursor: pass the X-Next-Offset value from the previous
|
|
95
|
+
response to fetch the next page. When set, paging continues from this cursor and
|
|
96
|
+
since is ignored, while until still bounds the page. It is not an event's seq
|
|
97
|
+
field, so do not derive it from the response body.
|
|
98
|
+
|
|
99
|
+
since: Start of the window: an RFC-3339 timestamp, or a duration like 5m meaning that
|
|
100
|
+
long ago. Defaults to 5m. Ignored when offset is set.
|
|
101
|
+
|
|
102
|
+
until: End of the window (exclusive): an RFC-3339 timestamp, or a duration like 5m
|
|
103
|
+
meaning that long ago.
|
|
104
|
+
|
|
105
|
+
extra_headers: Send extra headers
|
|
106
|
+
|
|
107
|
+
extra_query: Add additional query parameters to the request
|
|
108
|
+
|
|
109
|
+
extra_body: Add additional JSON properties to the request
|
|
110
|
+
|
|
111
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
112
|
+
"""
|
|
113
|
+
if not id:
|
|
114
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
115
|
+
return self._get_api_list(
|
|
116
|
+
path_template("/browsers/{id}/telemetry/events", id=id),
|
|
117
|
+
page=SyncOffsetPagination[TelemetryEventsResponse],
|
|
118
|
+
options=make_request_options(
|
|
119
|
+
extra_headers=extra_headers,
|
|
120
|
+
extra_query=extra_query,
|
|
121
|
+
extra_body=extra_body,
|
|
122
|
+
timeout=timeout,
|
|
123
|
+
query=maybe_transform(
|
|
124
|
+
{
|
|
125
|
+
"category": category,
|
|
126
|
+
"limit": limit,
|
|
127
|
+
"offset": offset,
|
|
128
|
+
"since": since,
|
|
129
|
+
"until": until,
|
|
130
|
+
},
|
|
131
|
+
telemetry_events_params.TelemetryEventsParams,
|
|
132
|
+
),
|
|
133
|
+
),
|
|
134
|
+
model=TelemetryEventsResponse,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
def stream(
|
|
138
|
+
self,
|
|
139
|
+
id: str,
|
|
140
|
+
*,
|
|
141
|
+
replay: str | Omit = omit,
|
|
142
|
+
last_event_id: str | Omit = omit,
|
|
143
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
144
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
145
|
+
extra_headers: Headers | None = None,
|
|
146
|
+
extra_query: Query | None = None,
|
|
147
|
+
extra_body: Body | None = None,
|
|
148
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
149
|
+
) -> Stream[TelemetryStreamResponse]:
|
|
150
|
+
"""Streams browser telemetry events as a server-sent events (SSE) stream.
|
|
151
|
+
|
|
152
|
+
The
|
|
153
|
+
stream closes when the browser session terminates. Each event frame includes an
|
|
154
|
+
id: field containing a monotonically increasing sequence number; pass it as
|
|
155
|
+
Last-Event-ID on reconnect to resume without gaps. The event: field is never
|
|
156
|
+
set; all frames carry JSON in the data: field. A keepalive comment frame is sent
|
|
157
|
+
every 15 seconds when no events arrive. Returns 404 if the browser session does
|
|
158
|
+
not exist. If telemetry was not enabled on the session, the stream opens but no
|
|
159
|
+
events are delivered. Fresh connections only see new events; pass replay=all to
|
|
160
|
+
start from the oldest retained event instead.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
replay: Pass `all` to start from the oldest retained event instead of only new events;
|
|
164
|
+
any other value is treated as from-now. The buffer is bounded, so the first
|
|
165
|
+
event id may be greater than 1 if older events were evicted.
|
|
166
|
+
|
|
167
|
+
extra_headers: Send extra headers
|
|
168
|
+
|
|
169
|
+
extra_query: Add additional query parameters to the request
|
|
170
|
+
|
|
171
|
+
extra_body: Add additional JSON properties to the request
|
|
172
|
+
|
|
173
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
174
|
+
"""
|
|
175
|
+
if not id:
|
|
176
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
177
|
+
extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
|
|
178
|
+
extra_headers = {**strip_not_given({"Last-Event-ID": last_event_id}), **(extra_headers or {})}
|
|
179
|
+
return self._get(
|
|
180
|
+
path_template("/browsers/{id}/telemetry/stream", id=id),
|
|
181
|
+
options=make_request_options(
|
|
182
|
+
extra_headers=extra_headers,
|
|
183
|
+
extra_query=extra_query,
|
|
184
|
+
extra_body=extra_body,
|
|
185
|
+
timeout=timeout,
|
|
186
|
+
query=maybe_transform({"replay": replay}, telemetry_stream_params.TelemetryStreamParams),
|
|
187
|
+
),
|
|
188
|
+
cast_to=TelemetryStreamResponse,
|
|
189
|
+
stream=True,
|
|
190
|
+
stream_cls=Stream[TelemetryStreamResponse],
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class AsyncTelemetryResource(AsyncAPIResource):
|
|
195
|
+
"""Stream live telemetry events from a browser session."""
|
|
196
|
+
|
|
197
|
+
@cached_property
|
|
198
|
+
def with_raw_response(self) -> AsyncTelemetryResourceWithRawResponse:
|
|
199
|
+
"""
|
|
200
|
+
This property can be used as a prefix for any HTTP method call to return
|
|
201
|
+
the raw response object instead of the parsed content.
|
|
202
|
+
|
|
203
|
+
For more information, see https://www.github.com/kernel/kernel-python-sdk#accessing-raw-response-data-eg-headers
|
|
204
|
+
"""
|
|
205
|
+
return AsyncTelemetryResourceWithRawResponse(self)
|
|
206
|
+
|
|
207
|
+
@cached_property
|
|
208
|
+
def with_streaming_response(self) -> AsyncTelemetryResourceWithStreamingResponse:
|
|
209
|
+
"""
|
|
210
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
211
|
+
|
|
212
|
+
For more information, see https://www.github.com/kernel/kernel-python-sdk#with_streaming_response
|
|
213
|
+
"""
|
|
214
|
+
return AsyncTelemetryResourceWithStreamingResponse(self)
|
|
215
|
+
|
|
216
|
+
def events(
|
|
217
|
+
self,
|
|
218
|
+
id: str,
|
|
219
|
+
*,
|
|
220
|
+
category: List[
|
|
221
|
+
Literal[
|
|
222
|
+
"console",
|
|
223
|
+
"network",
|
|
224
|
+
"page",
|
|
225
|
+
"interaction",
|
|
226
|
+
"control",
|
|
227
|
+
"connection",
|
|
228
|
+
"system",
|
|
229
|
+
"screenshot",
|
|
230
|
+
"captcha",
|
|
231
|
+
"monitor",
|
|
232
|
+
]
|
|
233
|
+
]
|
|
234
|
+
| Omit = omit,
|
|
235
|
+
limit: int | Omit = omit,
|
|
236
|
+
offset: int | Omit = omit,
|
|
237
|
+
since: str | Omit = omit,
|
|
238
|
+
until: str | Omit = omit,
|
|
239
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
240
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
241
|
+
extra_headers: Headers | None = None,
|
|
242
|
+
extra_query: Query | None = None,
|
|
243
|
+
extra_body: Body | None = None,
|
|
244
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
245
|
+
) -> AsyncPaginator[TelemetryEventsResponse, AsyncOffsetPagination[TelemetryEventsResponse]]:
|
|
246
|
+
"""
|
|
247
|
+
Reads a page of telemetry events for the browser session in ascending sequence
|
|
248
|
+
order. To page through results, pass the X-Next-Offset value from the previous
|
|
249
|
+
response as offset and repeat while X-Has-More is true. Returns an empty list
|
|
250
|
+
when telemetry data is unavailable.
|
|
251
|
+
|
|
252
|
+
Args:
|
|
253
|
+
category: Restrict results to these event categories. Repeat the parameter for multiple
|
|
254
|
+
values.
|
|
255
|
+
|
|
256
|
+
limit: Maximum number of events per page. Defaults to 20.
|
|
257
|
+
|
|
258
|
+
offset: Opaque pagination cursor: pass the X-Next-Offset value from the previous
|
|
259
|
+
response to fetch the next page. When set, paging continues from this cursor and
|
|
260
|
+
since is ignored, while until still bounds the page. It is not an event's seq
|
|
261
|
+
field, so do not derive it from the response body.
|
|
262
|
+
|
|
263
|
+
since: Start of the window: an RFC-3339 timestamp, or a duration like 5m meaning that
|
|
264
|
+
long ago. Defaults to 5m. Ignored when offset is set.
|
|
265
|
+
|
|
266
|
+
until: End of the window (exclusive): an RFC-3339 timestamp, or a duration like 5m
|
|
267
|
+
meaning that long ago.
|
|
268
|
+
|
|
269
|
+
extra_headers: Send extra headers
|
|
270
|
+
|
|
271
|
+
extra_query: Add additional query parameters to the request
|
|
272
|
+
|
|
273
|
+
extra_body: Add additional JSON properties to the request
|
|
274
|
+
|
|
275
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
276
|
+
"""
|
|
277
|
+
if not id:
|
|
278
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
279
|
+
return self._get_api_list(
|
|
280
|
+
path_template("/browsers/{id}/telemetry/events", id=id),
|
|
281
|
+
page=AsyncOffsetPagination[TelemetryEventsResponse],
|
|
282
|
+
options=make_request_options(
|
|
283
|
+
extra_headers=extra_headers,
|
|
284
|
+
extra_query=extra_query,
|
|
285
|
+
extra_body=extra_body,
|
|
286
|
+
timeout=timeout,
|
|
287
|
+
query=maybe_transform(
|
|
288
|
+
{
|
|
289
|
+
"category": category,
|
|
290
|
+
"limit": limit,
|
|
291
|
+
"offset": offset,
|
|
292
|
+
"since": since,
|
|
293
|
+
"until": until,
|
|
294
|
+
},
|
|
295
|
+
telemetry_events_params.TelemetryEventsParams,
|
|
296
|
+
),
|
|
297
|
+
),
|
|
298
|
+
model=TelemetryEventsResponse,
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
async def stream(
|
|
302
|
+
self,
|
|
303
|
+
id: str,
|
|
304
|
+
*,
|
|
305
|
+
replay: str | Omit = omit,
|
|
306
|
+
last_event_id: str | Omit = omit,
|
|
307
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
308
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
309
|
+
extra_headers: Headers | None = None,
|
|
310
|
+
extra_query: Query | None = None,
|
|
311
|
+
extra_body: Body | None = None,
|
|
312
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
313
|
+
) -> AsyncStream[TelemetryStreamResponse]:
|
|
314
|
+
"""Streams browser telemetry events as a server-sent events (SSE) stream.
|
|
315
|
+
|
|
316
|
+
The
|
|
317
|
+
stream closes when the browser session terminates. Each event frame includes an
|
|
318
|
+
id: field containing a monotonically increasing sequence number; pass it as
|
|
319
|
+
Last-Event-ID on reconnect to resume without gaps. The event: field is never
|
|
320
|
+
set; all frames carry JSON in the data: field. A keepalive comment frame is sent
|
|
321
|
+
every 15 seconds when no events arrive. Returns 404 if the browser session does
|
|
322
|
+
not exist. If telemetry was not enabled on the session, the stream opens but no
|
|
323
|
+
events are delivered. Fresh connections only see new events; pass replay=all to
|
|
324
|
+
start from the oldest retained event instead.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
replay: Pass `all` to start from the oldest retained event instead of only new events;
|
|
328
|
+
any other value is treated as from-now. The buffer is bounded, so the first
|
|
329
|
+
event id may be greater than 1 if older events were evicted.
|
|
330
|
+
|
|
331
|
+
extra_headers: Send extra headers
|
|
332
|
+
|
|
333
|
+
extra_query: Add additional query parameters to the request
|
|
334
|
+
|
|
335
|
+
extra_body: Add additional JSON properties to the request
|
|
336
|
+
|
|
337
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
338
|
+
"""
|
|
339
|
+
if not id:
|
|
340
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
341
|
+
extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
|
|
342
|
+
extra_headers = {**strip_not_given({"Last-Event-ID": last_event_id}), **(extra_headers or {})}
|
|
343
|
+
return await self._get(
|
|
344
|
+
path_template("/browsers/{id}/telemetry/stream", id=id),
|
|
345
|
+
options=make_request_options(
|
|
346
|
+
extra_headers=extra_headers,
|
|
347
|
+
extra_query=extra_query,
|
|
348
|
+
extra_body=extra_body,
|
|
349
|
+
timeout=timeout,
|
|
350
|
+
query=await async_maybe_transform({"replay": replay}, telemetry_stream_params.TelemetryStreamParams),
|
|
351
|
+
),
|
|
352
|
+
cast_to=TelemetryStreamResponse,
|
|
353
|
+
stream=True,
|
|
354
|
+
stream_cls=AsyncStream[TelemetryStreamResponse],
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
class TelemetryResourceWithRawResponse:
|
|
359
|
+
def __init__(self, telemetry: TelemetryResource) -> None:
|
|
360
|
+
self._telemetry = telemetry
|
|
361
|
+
|
|
362
|
+
self.events = to_raw_response_wrapper(
|
|
363
|
+
telemetry.events,
|
|
364
|
+
)
|
|
365
|
+
self.stream = to_raw_response_wrapper(
|
|
366
|
+
telemetry.stream,
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
class AsyncTelemetryResourceWithRawResponse:
|
|
371
|
+
def __init__(self, telemetry: AsyncTelemetryResource) -> None:
|
|
372
|
+
self._telemetry = telemetry
|
|
373
|
+
|
|
374
|
+
self.events = async_to_raw_response_wrapper(
|
|
375
|
+
telemetry.events,
|
|
376
|
+
)
|
|
377
|
+
self.stream = async_to_raw_response_wrapper(
|
|
378
|
+
telemetry.stream,
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
class TelemetryResourceWithStreamingResponse:
|
|
383
|
+
def __init__(self, telemetry: TelemetryResource) -> None:
|
|
384
|
+
self._telemetry = telemetry
|
|
385
|
+
|
|
386
|
+
self.events = to_streamed_response_wrapper(
|
|
387
|
+
telemetry.events,
|
|
388
|
+
)
|
|
389
|
+
self.stream = to_streamed_response_wrapper(
|
|
390
|
+
telemetry.stream,
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
class AsyncTelemetryResourceWithStreamingResponse:
|
|
395
|
+
def __init__(self, telemetry: AsyncTelemetryResource) -> None:
|
|
396
|
+
self._telemetry = telemetry
|
|
397
|
+
|
|
398
|
+
self.events = async_to_streamed_response_wrapper(
|
|
399
|
+
telemetry.events,
|
|
400
|
+
)
|
|
401
|
+
self.stream = async_to_streamed_response_wrapper(
|
|
402
|
+
telemetry.stream,
|
|
403
|
+
)
|