kernel 0.58.0__tar.gz → 0.60.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.60.0/.release-please-manifest.json +3 -0
- {kernel-0.58.0 → kernel-0.60.0}/CHANGELOG.md +31 -0
- {kernel-0.58.0 → kernel-0.60.0}/PKG-INFO +1 -1
- {kernel-0.58.0 → kernel-0.60.0}/api.md +1 -1
- kernel-0.60.0/examples/browser_telemetry.py +32 -0
- {kernel-0.58.0 → kernel-0.60.0}/pyproject.toml +1 -1
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_streaming.py +6 -1
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_version.py +1 -1
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/routing.py +1 -1
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/api_keys.py +27 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browser_pools.py +12 -12
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/browsers.py +6 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/computer.py +4 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/telemetry.py +2 -2
- kernel-0.60.0/src/kernel/types/api_key_list_params.py +27 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_update_params.py +8 -8
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_console_error_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_console_log_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_interaction_click_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_interaction_key_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_disconnected_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_init_failed_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_reconnected_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_screenshot_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_idle_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_loading_failed_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_request_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_response_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_layout_settled_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_layout_shift_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_lcp_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_load_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_navigation_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_navigation_settled_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_tab_opened_event.py +2 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_check_response.py +2 -75
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_create_params.py +2 -73
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_create_response.py +2 -75
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_list_response.py +2 -75
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_retrieve_response.py +2 -75
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_api_keys.py +6 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_browser_pools.py +2 -10
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_browser_routing.py +23 -1
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_streaming.py +26 -0
- kernel-0.58.0/.release-please-manifest.json +0 -3
- kernel-0.58.0/src/kernel/types/api_key_list_params.py +0 -15
- {kernel-0.58.0 → kernel-0.60.0}/.gitignore +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/CONTRIBUTING.md +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/LICENSE +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/README.md +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/SECURITY.md +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/bin/check-release-environment +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/bin/publish-pypi +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/examples/.keep +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/examples/browser_routing.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/noxfile.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/release-please-config.json +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/requirements-dev.lock +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/requirements.lock +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_base_client.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_client.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_compat.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_constants.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_exceptions.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_files.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_models.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_qs.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_resource.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_types.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_compat.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_datetime_parse.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_json.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_logs.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_path.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_proxy.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_reflection.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_resources_proxy.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_streams.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_sync.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_transform.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_typing.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/_utils/_utils.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/app_framework.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/.keep +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/raw_http.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/lib/browser_routing/util.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/pagination.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/py.typed +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/apps.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/auth/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/auth/auth.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/auth/connections.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/fs/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/fs/fs.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/fs/watch.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/logs.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/playwright.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/process.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/browsers/replays.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/credential_providers.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/credentials.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/deployments.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/extensions.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/invocations.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/profiles.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/projects/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/projects/limits.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/projects/projects.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/resources/proxies.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/api_key.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/api_key_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/api_key_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/app_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/app_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_follow_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_login_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_submit_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/connection_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/login_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/managed_auth.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/auth/submit_fields_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_create_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_curl_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_curl_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_load_extensions_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_acquire_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_acquire_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_delete_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_ref.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_pool_release_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_retrieve_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_retrieve_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_update_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browser_usage.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_call_stack.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_event_context.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_event_source.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_http_headers.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_categories_config.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_categories_config_param.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_category_config.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_category_config_param.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_config.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_telemetry_event.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_batch_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_capture_screenshot_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_click_mouse_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_drag_mouse_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_get_mouse_position_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_move_mouse_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_press_key_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_read_clipboard_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_scroll_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_set_cursor_visibility_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_set_cursor_visibility_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_type_text_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/computer_write_clipboard_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_create_directory_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_delete_directory_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_delete_file_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_download_dir_zip_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_file_info_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_file_info_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_list_files_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_list_files_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_move_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_read_file_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_set_file_permissions_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_upload_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_upload_zip_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/f_write_file_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/watch_events_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/watch_start_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/fs/watch_start_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/log_stream_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/playwright_execute_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/playwright_execute_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_exec_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_exec_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_kill_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_kill_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_resize_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_resize_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_spawn_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_spawn_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_status_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_stdin_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_stdin_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/process_stdout_stream_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/replay_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/replay_start_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/replay_start_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/telemetry_stream_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/created_api_key.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_item.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_list_items_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_test_result.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_provider_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_totp_code_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/credential_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_create_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_follow_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_follow_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_retrieve_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/deployment_state_event.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_download_from_chrome_store_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_upload_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/extension_upload_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_create_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_follow_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_follow_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_list_browsers_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_list_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_retrieve_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_state_event.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/invocation_update_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/profile.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/profile_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/profile_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project_create_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project_list_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/project_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/projects/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/projects/limit_update_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/projects/project_limits.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/proxy_check_params.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/app_action.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/browser_extension.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/browser_profile.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/browser_viewport.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/error_detail.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/error_event.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/error_model.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/heartbeat_event.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared/log_event.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/browser_extension.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/browser_profile.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/shared_params/browser_viewport.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/auth/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/auth/test_connections.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/fs/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/fs/test_watch.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_computer.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_fs.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_logs.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_playwright.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_process.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_replays.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/browsers/test_telemetry.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/projects/__init__.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/projects/test_limits.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_apps.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_browsers.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_credential_providers.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_credentials.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_deployments.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_extensions.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_invocations.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_profiles.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_projects.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/api_resources/test_proxies.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/conftest.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/sample_file.txt +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_client.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_extract_files.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_files.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_models.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_qs.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_required_args.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_response.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_transform.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_json.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_path.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_proxy.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/test_utils/test_typing.py +0 -0
- {kernel-0.58.0 → kernel-0.60.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.60.0 (2026-06-03)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.59.0...v0.60.0](https://github.com/kernel/kernel-python-sdk/compare/v0.59.0...v0.60.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* Add API-backed API key management endpoints ([55bd31e](https://github.com/kernel/kernel-python-sdk/commit/55bd31edfed74f3bc4b08f83e07448e2e53378b0))
|
|
10
|
+
* **examples:** add browser-telemetry example ([4c29993](https://github.com/kernel/kernel-python-sdk/commit/4c29993cdda50fcde19ee7bf696a268cd8b0eb0b))
|
|
11
|
+
* Fix browser pool update schema ([903fe13](https://github.com/kernel/kernel-python-sdk/commit/903fe13b84242acea9c27bc451c16fb5cd58e40c))
|
|
12
|
+
* route browser telemetry directly to the VM by default ([cb50725](https://github.com/kernel/kernel-python-sdk/commit/cb5072516416627ffde7198900484c46dda5b9dc))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **streaming:** don't dispatch empty SSE keepalive comment frames ([a0ee2b2](https://github.com/kernel/kernel-python-sdk/commit/a0ee2b2653c581839be11bb29be5b68166e80658))
|
|
18
|
+
|
|
19
|
+
## 0.59.0 (2026-06-03)
|
|
20
|
+
|
|
21
|
+
Full Changelog: [v0.58.0...v0.59.0](https://github.com/kernel/kernel-python-sdk/compare/v0.58.0...v0.59.0)
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* api: surface category field on browser telemetry events ([06a2f7b](https://github.com/kernel/kernel-python-sdk/commit/06a2f7babbc8f6ea31e46f3dfeb8d09dbaae88f0))
|
|
26
|
+
* **api:** move browser telemetry SSE stream to /browsers/{id}/telemetry/stream ([5de851a](https://github.com/kernel/kernel-python-sdk/commit/5de851a5ff708a3e42e276e3cf9e2fe7ef0f2ed6))
|
|
27
|
+
* Support Byteful mobile proxies ([8c0ce1c](https://github.com/kernel/kernel-python-sdk/commit/8c0ce1c1533a538483419f4da0937a6153eb5273))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* **api:** move batch + get_mouse_position into Browser Computer Controls tag ([7cbc848](https://github.com/kernel/kernel-python-sdk/commit/7cbc848fe33394ee05f5eb96d62cdc8b5b9b9d9c))
|
|
33
|
+
|
|
3
34
|
## 0.58.0 (2026-05-27)
|
|
4
35
|
|
|
5
36
|
Full Changelog: [v0.57.0...v0.58.0](https://github.com/kernel/kernel-python-sdk/compare/v0.57.0...v0.58.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.60.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
|
|
@@ -143,7 +143,7 @@ from kernel.types.browsers import (
|
|
|
143
143
|
|
|
144
144
|
Methods:
|
|
145
145
|
|
|
146
|
-
- <code title="get /browsers/{id}/telemetry">client.browsers.telemetry.<a href="./src/kernel/resources/browsers/telemetry.py">stream</a>(id) -> <a href="./src/kernel/types/browsers/telemetry_stream_response.py">TelemetryStreamResponse</a></code>
|
|
146
|
+
- <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_response.py">TelemetryStreamResponse</a></code>
|
|
147
147
|
|
|
148
148
|
## Replays
|
|
149
149
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Example: stream live browser telemetry events from a session."""
|
|
2
|
+
|
|
3
|
+
from kernel import Kernel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main() -> None:
|
|
7
|
+
client = Kernel()
|
|
8
|
+
|
|
9
|
+
# Enable telemetry capture when creating the browser.
|
|
10
|
+
browser = client.browsers.create(telemetry={"enabled": True})
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
# Telemetry is a default direct-to-VM routing subresource, so the stream
|
|
14
|
+
# connects straight to the browser VM automatically.
|
|
15
|
+
stream = client.browsers.telemetry.stream(browser.session_id)
|
|
16
|
+
|
|
17
|
+
# Make a few browser activity calls to generate events. The "api" telemetry
|
|
18
|
+
# category emits an event per VM API call, so events arrive within ~1s.
|
|
19
|
+
for _ in range(3):
|
|
20
|
+
client.browsers.curl(browser.session_id, url="https://example.com", method="GET")
|
|
21
|
+
|
|
22
|
+
# Print a few events, then stop so we don't wait on the 15s keepalive.
|
|
23
|
+
for count, message in enumerate(stream, start=1):
|
|
24
|
+
print(message.seq, message.event.type)
|
|
25
|
+
if count >= 3:
|
|
26
|
+
break
|
|
27
|
+
finally:
|
|
28
|
+
client.browsers.delete_by_id(browser.session_id)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
main()
|
|
@@ -251,7 +251,12 @@ class SSEDecoder:
|
|
|
251
251
|
# See: https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation # noqa: E501
|
|
252
252
|
|
|
253
253
|
if not line:
|
|
254
|
-
|
|
254
|
+
# Whether to dispatch depends only on what was set in the *current* block. last_event_id
|
|
255
|
+
# is sticky across events (per the SSE spec, it is intentionally not reset below), so it
|
|
256
|
+
# must not be part of this check -- otherwise, once any event carries an id, every
|
|
257
|
+
# subsequent comment-only block (e.g. a ``:\n\n`` keepalive) would dispatch an empty
|
|
258
|
+
# event, which then fails to JSON-decode in the typed Stream wrapper.
|
|
259
|
+
if not self._event and not self._data and self._retry is None:
|
|
255
260
|
return None
|
|
256
261
|
|
|
257
262
|
sse = ServerSentEvent(
|
|
@@ -41,7 +41,7 @@ _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
|
-
return BrowserRoutingConfig(subresources=("curl",))
|
|
44
|
+
return BrowserRoutingConfig(subresources=("curl", "telemetry"))
|
|
45
45
|
if raw.strip() == "":
|
|
46
46
|
return BrowserRoutingConfig()
|
|
47
47
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from typing import Optional
|
|
6
|
+
from typing_extensions import Literal
|
|
6
7
|
|
|
7
8
|
import httpx
|
|
8
9
|
|
|
@@ -171,6 +172,9 @@ class APIKeysResource(SyncAPIResource):
|
|
|
171
172
|
*,
|
|
172
173
|
limit: int | Omit = omit,
|
|
173
174
|
offset: int | Omit = omit,
|
|
175
|
+
query: str | Omit = omit,
|
|
176
|
+
sort_by: Literal["created_at", "name", "expires_at"] | Omit = omit,
|
|
177
|
+
sort_direction: Literal["asc", "desc"] | Omit = omit,
|
|
174
178
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
175
179
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
176
180
|
extra_headers: Headers | None = None,
|
|
@@ -187,6 +191,13 @@ class APIKeysResource(SyncAPIResource):
|
|
|
187
191
|
|
|
188
192
|
offset: Number of results to skip
|
|
189
193
|
|
|
194
|
+
query: Case-insensitive substring match against API key name, creator, and project. API
|
|
195
|
+
key identifiers and masked keys match by exact value or prefix.
|
|
196
|
+
|
|
197
|
+
sort_by: Field to sort API keys by.
|
|
198
|
+
|
|
199
|
+
sort_direction: Sort direction for API keys.
|
|
200
|
+
|
|
190
201
|
extra_headers: Send extra headers
|
|
191
202
|
|
|
192
203
|
extra_query: Add additional query parameters to the request
|
|
@@ -207,6 +218,9 @@ class APIKeysResource(SyncAPIResource):
|
|
|
207
218
|
{
|
|
208
219
|
"limit": limit,
|
|
209
220
|
"offset": offset,
|
|
221
|
+
"query": query,
|
|
222
|
+
"sort_by": sort_by,
|
|
223
|
+
"sort_direction": sort_direction,
|
|
210
224
|
},
|
|
211
225
|
api_key_list_params.APIKeyListParams,
|
|
212
226
|
),
|
|
@@ -395,6 +409,9 @@ class AsyncAPIKeysResource(AsyncAPIResource):
|
|
|
395
409
|
*,
|
|
396
410
|
limit: int | Omit = omit,
|
|
397
411
|
offset: int | Omit = omit,
|
|
412
|
+
query: str | Omit = omit,
|
|
413
|
+
sort_by: Literal["created_at", "name", "expires_at"] | Omit = omit,
|
|
414
|
+
sort_direction: Literal["asc", "desc"] | Omit = omit,
|
|
398
415
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
399
416
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
400
417
|
extra_headers: Headers | None = None,
|
|
@@ -411,6 +428,13 @@ class AsyncAPIKeysResource(AsyncAPIResource):
|
|
|
411
428
|
|
|
412
429
|
offset: Number of results to skip
|
|
413
430
|
|
|
431
|
+
query: Case-insensitive substring match against API key name, creator, and project. API
|
|
432
|
+
key identifiers and masked keys match by exact value or prefix.
|
|
433
|
+
|
|
434
|
+
sort_by: Field to sort API keys by.
|
|
435
|
+
|
|
436
|
+
sort_direction: Sort direction for API keys.
|
|
437
|
+
|
|
414
438
|
extra_headers: Send extra headers
|
|
415
439
|
|
|
416
440
|
extra_query: Add additional query parameters to the request
|
|
@@ -431,6 +455,9 @@ class AsyncAPIKeysResource(AsyncAPIResource):
|
|
|
431
455
|
{
|
|
432
456
|
"limit": limit,
|
|
433
457
|
"offset": offset,
|
|
458
|
+
"query": query,
|
|
459
|
+
"sort_by": sort_by,
|
|
460
|
+
"sort_direction": sort_direction,
|
|
434
461
|
},
|
|
435
462
|
api_key_list_params.APIKeyListParams,
|
|
436
463
|
),
|
|
@@ -206,7 +206,6 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
206
206
|
self,
|
|
207
207
|
id_or_name: str,
|
|
208
208
|
*,
|
|
209
|
-
size: int,
|
|
210
209
|
chrome_policy: Dict[str, object] | Omit = omit,
|
|
211
210
|
discard_all_idle: bool | Omit = omit,
|
|
212
211
|
extensions: Iterable[BrowserExtension] | Omit = omit,
|
|
@@ -216,6 +215,7 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
216
215
|
name: str | Omit = omit,
|
|
217
216
|
profile: BrowserProfile | Omit = omit,
|
|
218
217
|
proxy_id: str | Omit = omit,
|
|
218
|
+
size: int | Omit = omit,
|
|
219
219
|
start_url: str | Omit = omit,
|
|
220
220
|
stealth: bool | Omit = omit,
|
|
221
221
|
timeout_seconds: int | Omit = omit,
|
|
@@ -231,10 +231,6 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
231
231
|
Updates the configuration used to create browsers in the pool.
|
|
232
232
|
|
|
233
233
|
Args:
|
|
234
|
-
size: Number of browsers to maintain in the pool. The maximum size is determined by
|
|
235
|
-
your organization's pooled sessions limit (the sum of all pool sizes cannot
|
|
236
|
-
exceed your limit).
|
|
237
|
-
|
|
238
234
|
chrome_policy: Custom Chrome enterprise policy overrides applied to all browsers in this pool.
|
|
239
235
|
Keys are Chrome enterprise policy names; values must match their expected types.
|
|
240
236
|
Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See
|
|
@@ -261,6 +257,10 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
261
257
|
proxy_id: Optional proxy to associate to the browser session. Must reference a proxy
|
|
262
258
|
belonging to the caller's org.
|
|
263
259
|
|
|
260
|
+
size: Number of browsers to maintain in the pool. The maximum size is determined by
|
|
261
|
+
your organization's pooled sessions limit (the sum of all pool sizes cannot
|
|
262
|
+
exceed your limit).
|
|
263
|
+
|
|
264
264
|
start_url: Optional URL to navigate to when a new browser is warmed into the pool.
|
|
265
265
|
Best-effort: failures to navigate do not fail pool fill. Only applied to
|
|
266
266
|
newly-warmed browsers; browsers reused via release/acquire keep whatever URL the
|
|
@@ -300,7 +300,6 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
300
300
|
path_template("/browser_pools/{id_or_name}", id_or_name=id_or_name),
|
|
301
301
|
body=maybe_transform(
|
|
302
302
|
{
|
|
303
|
-
"size": size,
|
|
304
303
|
"chrome_policy": chrome_policy,
|
|
305
304
|
"discard_all_idle": discard_all_idle,
|
|
306
305
|
"extensions": extensions,
|
|
@@ -310,6 +309,7 @@ class BrowserPoolsResource(SyncAPIResource):
|
|
|
310
309
|
"name": name,
|
|
311
310
|
"profile": profile,
|
|
312
311
|
"proxy_id": proxy_id,
|
|
312
|
+
"size": size,
|
|
313
313
|
"start_url": start_url,
|
|
314
314
|
"stealth": stealth,
|
|
315
315
|
"timeout_seconds": timeout_seconds,
|
|
@@ -684,7 +684,6 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
684
684
|
self,
|
|
685
685
|
id_or_name: str,
|
|
686
686
|
*,
|
|
687
|
-
size: int,
|
|
688
687
|
chrome_policy: Dict[str, object] | Omit = omit,
|
|
689
688
|
discard_all_idle: bool | Omit = omit,
|
|
690
689
|
extensions: Iterable[BrowserExtension] | Omit = omit,
|
|
@@ -694,6 +693,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
694
693
|
name: str | Omit = omit,
|
|
695
694
|
profile: BrowserProfile | Omit = omit,
|
|
696
695
|
proxy_id: str | Omit = omit,
|
|
696
|
+
size: int | Omit = omit,
|
|
697
697
|
start_url: str | Omit = omit,
|
|
698
698
|
stealth: bool | Omit = omit,
|
|
699
699
|
timeout_seconds: int | Omit = omit,
|
|
@@ -709,10 +709,6 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
709
709
|
Updates the configuration used to create browsers in the pool.
|
|
710
710
|
|
|
711
711
|
Args:
|
|
712
|
-
size: Number of browsers to maintain in the pool. The maximum size is determined by
|
|
713
|
-
your organization's pooled sessions limit (the sum of all pool sizes cannot
|
|
714
|
-
exceed your limit).
|
|
715
|
-
|
|
716
712
|
chrome_policy: Custom Chrome enterprise policy overrides applied to all browsers in this pool.
|
|
717
713
|
Keys are Chrome enterprise policy names; values must match their expected types.
|
|
718
714
|
Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See
|
|
@@ -739,6 +735,10 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
739
735
|
proxy_id: Optional proxy to associate to the browser session. Must reference a proxy
|
|
740
736
|
belonging to the caller's org.
|
|
741
737
|
|
|
738
|
+
size: Number of browsers to maintain in the pool. The maximum size is determined by
|
|
739
|
+
your organization's pooled sessions limit (the sum of all pool sizes cannot
|
|
740
|
+
exceed your limit).
|
|
741
|
+
|
|
742
742
|
start_url: Optional URL to navigate to when a new browser is warmed into the pool.
|
|
743
743
|
Best-effort: failures to navigate do not fail pool fill. Only applied to
|
|
744
744
|
newly-warmed browsers; browsers reused via release/acquire keep whatever URL the
|
|
@@ -778,7 +778,6 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
778
778
|
path_template("/browser_pools/{id_or_name}", id_or_name=id_or_name),
|
|
779
779
|
body=await async_maybe_transform(
|
|
780
780
|
{
|
|
781
|
-
"size": size,
|
|
782
781
|
"chrome_policy": chrome_policy,
|
|
783
782
|
"discard_all_idle": discard_all_idle,
|
|
784
783
|
"extensions": extensions,
|
|
@@ -788,6 +787,7 @@ class AsyncBrowserPoolsResource(AsyncAPIResource):
|
|
|
788
787
|
"name": name,
|
|
789
788
|
"profile": profile,
|
|
790
789
|
"proxy_id": proxy_id,
|
|
790
|
+
"size": size,
|
|
791
791
|
"start_url": start_url,
|
|
792
792
|
"stealth": stealth,
|
|
793
793
|
"timeout_seconds": timeout_seconds,
|
|
@@ -133,6 +133,7 @@ class BrowsersResource(SyncAPIResource):
|
|
|
133
133
|
|
|
134
134
|
@cached_property
|
|
135
135
|
def computer(self) -> ComputerResource:
|
|
136
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
136
137
|
return ComputerResource(self._client)
|
|
137
138
|
|
|
138
139
|
@cached_property
|
|
@@ -680,6 +681,7 @@ class AsyncBrowsersResource(AsyncAPIResource):
|
|
|
680
681
|
|
|
681
682
|
@cached_property
|
|
682
683
|
def computer(self) -> AsyncComputerResource:
|
|
684
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
683
685
|
return AsyncComputerResource(self._client)
|
|
684
686
|
|
|
685
687
|
@cached_property
|
|
@@ -1250,6 +1252,7 @@ class BrowsersResourceWithRawResponse:
|
|
|
1250
1252
|
|
|
1251
1253
|
@cached_property
|
|
1252
1254
|
def computer(self) -> ComputerResourceWithRawResponse:
|
|
1255
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
1253
1256
|
return ComputerResourceWithRawResponse(self._browsers.computer)
|
|
1254
1257
|
|
|
1255
1258
|
@cached_property
|
|
@@ -1311,6 +1314,7 @@ class AsyncBrowsersResourceWithRawResponse:
|
|
|
1311
1314
|
|
|
1312
1315
|
@cached_property
|
|
1313
1316
|
def computer(self) -> AsyncComputerResourceWithRawResponse:
|
|
1317
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
1314
1318
|
return AsyncComputerResourceWithRawResponse(self._browsers.computer)
|
|
1315
1319
|
|
|
1316
1320
|
@cached_property
|
|
@@ -1372,6 +1376,7 @@ class BrowsersResourceWithStreamingResponse:
|
|
|
1372
1376
|
|
|
1373
1377
|
@cached_property
|
|
1374
1378
|
def computer(self) -> ComputerResourceWithStreamingResponse:
|
|
1379
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
1375
1380
|
return ComputerResourceWithStreamingResponse(self._browsers.computer)
|
|
1376
1381
|
|
|
1377
1382
|
@cached_property
|
|
@@ -1433,6 +1438,7 @@ class AsyncBrowsersResourceWithStreamingResponse:
|
|
|
1433
1438
|
|
|
1434
1439
|
@cached_property
|
|
1435
1440
|
def computer(self) -> AsyncComputerResourceWithStreamingResponse:
|
|
1441
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
1436
1442
|
return AsyncComputerResourceWithStreamingResponse(self._browsers.computer)
|
|
1437
1443
|
|
|
1438
1444
|
@cached_property
|
|
@@ -46,6 +46,8 @@ __all__ = ["ComputerResource", "AsyncComputerResource"]
|
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class ComputerResource(SyncAPIResource):
|
|
49
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
50
|
+
|
|
49
51
|
@cached_property
|
|
50
52
|
def with_raw_response(self) -> ComputerResourceWithRawResponse:
|
|
51
53
|
"""
|
|
@@ -649,6 +651,8 @@ class ComputerResource(SyncAPIResource):
|
|
|
649
651
|
|
|
650
652
|
|
|
651
653
|
class AsyncComputerResource(AsyncAPIResource):
|
|
654
|
+
"""Control mouse, keyboard, and screen on the browser instance."""
|
|
655
|
+
|
|
652
656
|
@cached_property
|
|
653
657
|
def with_raw_response(self) -> AsyncComputerResourceWithRawResponse:
|
|
654
658
|
"""
|
|
@@ -80,7 +80,7 @@ class TelemetryResource(SyncAPIResource):
|
|
|
80
80
|
extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
|
|
81
81
|
extra_headers = {**strip_not_given({"Last-Event-ID": last_event_id}), **(extra_headers or {})}
|
|
82
82
|
return self._get(
|
|
83
|
-
path_template("/browsers/{id}/telemetry", id=id),
|
|
83
|
+
path_template("/browsers/{id}/telemetry/stream", id=id),
|
|
84
84
|
options=make_request_options(
|
|
85
85
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
86
86
|
),
|
|
@@ -149,7 +149,7 @@ class AsyncTelemetryResource(AsyncAPIResource):
|
|
|
149
149
|
extra_headers = {"Accept": "text/event-stream", **(extra_headers or {})}
|
|
150
150
|
extra_headers = {**strip_not_given({"Last-Event-ID": last_event_id}), **(extra_headers or {})}
|
|
151
151
|
return await self._get(
|
|
152
|
-
path_template("/browsers/{id}/telemetry", id=id),
|
|
152
|
+
path_template("/browsers/{id}/telemetry/stream", id=id),
|
|
153
153
|
options=make_request_options(
|
|
154
154
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
155
155
|
),
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing_extensions import Literal, TypedDict
|
|
6
|
+
|
|
7
|
+
__all__ = ["APIKeyListParams"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class APIKeyListParams(TypedDict, total=False):
|
|
11
|
+
limit: int
|
|
12
|
+
"""Maximum number of results to return"""
|
|
13
|
+
|
|
14
|
+
offset: int
|
|
15
|
+
"""Number of results to skip"""
|
|
16
|
+
|
|
17
|
+
query: str
|
|
18
|
+
"""Case-insensitive substring match against API key name, creator, and project.
|
|
19
|
+
|
|
20
|
+
API key identifiers and masked keys match by exact value or prefix.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
sort_by: Literal["created_at", "name", "expires_at"]
|
|
24
|
+
"""Field to sort API keys by."""
|
|
25
|
+
|
|
26
|
+
sort_direction: Literal["asc", "desc"]
|
|
27
|
+
"""Sort direction for API keys."""
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from typing import Dict, Iterable
|
|
6
|
-
from typing_extensions import
|
|
6
|
+
from typing_extensions import TypedDict
|
|
7
7
|
|
|
8
8
|
from .shared_params.browser_profile import BrowserProfile
|
|
9
9
|
from .shared_params.browser_viewport import BrowserViewport
|
|
@@ -13,13 +13,6 @@ __all__ = ["BrowserPoolUpdateParams"]
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class BrowserPoolUpdateParams(TypedDict, total=False):
|
|
16
|
-
size: Required[int]
|
|
17
|
-
"""Number of browsers to maintain in the pool.
|
|
18
|
-
|
|
19
|
-
The maximum size is determined by your organization's pooled sessions limit (the
|
|
20
|
-
sum of all pool sizes cannot exceed your limit).
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
16
|
chrome_policy: Dict[str, object]
|
|
24
17
|
"""Custom Chrome enterprise policy overrides applied to all browsers in this pool.
|
|
25
18
|
|
|
@@ -68,6 +61,13 @@ class BrowserPoolUpdateParams(TypedDict, total=False):
|
|
|
68
61
|
Must reference a proxy belonging to the caller's org.
|
|
69
62
|
"""
|
|
70
63
|
|
|
64
|
+
size: int
|
|
65
|
+
"""Number of browsers to maintain in the pool.
|
|
66
|
+
|
|
67
|
+
The maximum size is determined by your organization's pooled sessions limit (the
|
|
68
|
+
sum of all pool sizes cannot exceed your limit).
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
71
|
start_url: str
|
|
72
72
|
"""Optional URL to navigate to when a new browser is warmed into the pool.
|
|
73
73
|
|
|
@@ -65,6 +65,8 @@ class BrowserConsoleErrorEvent(BaseModel):
|
|
|
65
65
|
Emitted from two distinct CDP sources with different data shapes. Runtime.consoleAPICalled (console.error calls) produces level, text, args, and stack_trace. Runtime.exceptionThrown (uncaught exceptions) produces text, line, column, source_url, and stack_trace. Fields not applicable to the source are absent.
|
|
66
66
|
"""
|
|
67
67
|
|
|
68
|
+
category: Literal["console"]
|
|
69
|
+
|
|
68
70
|
source: BrowserEventSource
|
|
69
71
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
70
72
|
|
|
@@ -42,6 +42,8 @@ class Data(BrowserEventContext):
|
|
|
42
42
|
class BrowserConsoleLogEvent(BaseModel):
|
|
43
43
|
"""A browser console log event (console.log, console.info, console.warn, etc.)."""
|
|
44
44
|
|
|
45
|
+
category: Literal["console"]
|
|
46
|
+
|
|
45
47
|
source: BrowserEventSource
|
|
46
48
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
47
49
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_interaction_click_event.py
RENAMED
|
@@ -35,6 +35,8 @@ class Data(BrowserEventContext):
|
|
|
35
35
|
class BrowserInteractionClickEvent(BaseModel):
|
|
36
36
|
"""A browser user click event captured via injected page script."""
|
|
37
37
|
|
|
38
|
+
category: Literal["interaction"]
|
|
39
|
+
|
|
38
40
|
source: BrowserEventSource
|
|
39
41
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
40
42
|
|
|
@@ -29,6 +29,8 @@ class Data(BrowserEventContext):
|
|
|
29
29
|
class BrowserInteractionKeyEvent(BaseModel):
|
|
30
30
|
"""A browser keyboard event captured via injected page script."""
|
|
31
31
|
|
|
32
|
+
category: Literal["interaction"]
|
|
33
|
+
|
|
32
34
|
source: BrowserEventSource
|
|
33
35
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
34
36
|
|
|
@@ -37,6 +37,8 @@ class BrowserInteractionScrollSettledEvent(BaseModel):
|
|
|
37
37
|
A browser scroll settled event emitted after scroll position stops changing, captured via injected page script.
|
|
38
38
|
"""
|
|
39
39
|
|
|
40
|
+
category: Literal["interaction"]
|
|
41
|
+
|
|
40
42
|
source: BrowserEventSource
|
|
41
43
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
42
44
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_disconnected_event.py
RENAMED
|
@@ -20,6 +20,8 @@ class BrowserMonitorDisconnectedEvent(BaseModel):
|
|
|
20
20
|
Telemetry events may be dropped until monitor_reconnected arrives. Treat any in-progress computed state (network_idle, page_layout_settled) as unreliable until then.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
+
category: Literal["system"]
|
|
24
|
+
|
|
23
25
|
source: BrowserEventSource
|
|
24
26
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
25
27
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_init_failed_event.py
RENAMED
|
@@ -17,6 +17,8 @@ class Data(BaseModel):
|
|
|
17
17
|
class BrowserMonitorInitFailedEvent(BaseModel):
|
|
18
18
|
"""The CDP session could not be initialized."""
|
|
19
19
|
|
|
20
|
+
category: Literal["system"]
|
|
21
|
+
|
|
20
22
|
source: BrowserEventSource
|
|
21
23
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
22
24
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py
RENAMED
|
@@ -23,6 +23,8 @@ class BrowserMonitorReconnectFailedEvent(BaseModel):
|
|
|
23
23
|
The CDP connection to Chrome could not be re-established after exhausting all reconnection attempts. No further telemetry events will arrive on this session.
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
+
category: Literal["system"]
|
|
27
|
+
|
|
26
28
|
source: BrowserEventSource
|
|
27
29
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
28
30
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_reconnected_event.py
RENAMED
|
@@ -19,6 +19,8 @@ class BrowserMonitorReconnectedEvent(BaseModel):
|
|
|
19
19
|
The CDP connection to Chrome was successfully re-established after a disconnection. Events emitted during the gap are lost. Computed state is reset, so navigation and network tracking restart fresh from this point.
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
+
category: Literal["system"]
|
|
23
|
+
|
|
22
24
|
source: BrowserEventSource
|
|
23
25
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
24
26
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_monitor_screenshot_event.py
RENAMED
|
@@ -17,6 +17,8 @@ class Data(BaseModel):
|
|
|
17
17
|
class BrowserMonitorScreenshotEvent(BaseModel):
|
|
18
18
|
"""A periodic screenshot of the browser viewport."""
|
|
19
19
|
|
|
20
|
+
category: Literal["system"]
|
|
21
|
+
|
|
20
22
|
source: BrowserEventSource
|
|
21
23
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
22
24
|
|
|
@@ -15,6 +15,8 @@ class BrowserNetworkIdleEvent(BaseModel):
|
|
|
15
15
|
A browser network idle event emitted after a 500ms quiet period with no in-flight HTTP requests.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
+
category: Literal["network"]
|
|
19
|
+
|
|
18
20
|
source: BrowserEventSource
|
|
19
21
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
20
22
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_network_loading_failed_event.py
RENAMED
|
@@ -39,6 +39,8 @@ class BrowserNetworkLoadingFailedEvent(BaseModel):
|
|
|
39
39
|
If the request was already in flight when CDP attached (no prior network_request was emitted for it), url, frame_id, loader_id, and resource_type are absent; BrowserEventContext is partially populated in that case.
|
|
40
40
|
"""
|
|
41
41
|
|
|
42
|
+
category: Literal["network"]
|
|
43
|
+
|
|
42
44
|
source: BrowserEventSource
|
|
43
45
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
44
46
|
|
|
@@ -55,6 +55,8 @@ class Data(BrowserEventContext):
|
|
|
55
55
|
class BrowserNetworkRequestEvent(BaseModel):
|
|
56
56
|
"""A browser network request sent event."""
|
|
57
57
|
|
|
58
|
+
category: Literal["network"]
|
|
59
|
+
|
|
58
60
|
source: BrowserEventSource
|
|
59
61
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
60
62
|
|
|
@@ -52,6 +52,8 @@ class BrowserNetworkResponseEvent(BaseModel):
|
|
|
52
52
|
Fired after the response body is fully received, not when headers arrive.
|
|
53
53
|
"""
|
|
54
54
|
|
|
55
|
+
category: Literal["network"]
|
|
56
|
+
|
|
55
57
|
source: BrowserEventSource
|
|
56
58
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
57
59
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py
RENAMED
|
@@ -26,6 +26,8 @@ class Data(BrowserEventContext):
|
|
|
26
26
|
class BrowserPageDomContentLoadedEvent(BaseModel):
|
|
27
27
|
"""A browser DOMContentLoaded event (CDP Page.domContentEventFired)."""
|
|
28
28
|
|
|
29
|
+
category: Literal["page"]
|
|
30
|
+
|
|
29
31
|
source: BrowserEventSource
|
|
30
32
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
31
33
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_layout_settled_event.py
RENAMED
|
@@ -15,6 +15,8 @@ class BrowserPageLayoutSettledEvent(BaseModel):
|
|
|
15
15
|
A browser layout settled event emitted 1 second after page load with no intervening layout shifts, indicating visual stability. Each layout shift resets the 1-second timer.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
+
category: Literal["page"]
|
|
19
|
+
|
|
18
20
|
source: BrowserEventSource
|
|
19
21
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
20
22
|
|
{kernel-0.58.0 → kernel-0.60.0}/src/kernel/types/browsers/browser_page_layout_shift_event.py
RENAMED
|
@@ -50,6 +50,8 @@ class BrowserPageLayoutShiftEvent(BaseModel):
|
|
|
50
50
|
A browser cumulative layout shift (CLS) event from the Performance Timeline API.
|
|
51
51
|
"""
|
|
52
52
|
|
|
53
|
+
category: Literal["page"]
|
|
54
|
+
|
|
53
55
|
source: BrowserEventSource
|
|
54
56
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
55
57
|
|
|
@@ -56,6 +56,8 @@ class BrowserPageLcpEvent(BaseModel):
|
|
|
56
56
|
A browser Largest Contentful Paint (LCP) event from the Performance Timeline API.
|
|
57
57
|
"""
|
|
58
58
|
|
|
59
|
+
category: Literal["page"]
|
|
60
|
+
|
|
59
61
|
source: BrowserEventSource
|
|
60
62
|
"""Provenance metadata identifying which producer emitted the event."""
|
|
61
63
|
|