kernel 0.67.0__tar.gz → 0.68.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.
Files changed (340) hide show
  1. kernel-0.68.0/.release-please-manifest.json +3 -0
  2. {kernel-0.67.0 → kernel-0.68.0}/CHANGELOG.md +26 -0
  3. {kernel-0.67.0 → kernel-0.68.0}/PKG-INFO +3 -3
  4. {kernel-0.67.0 → kernel-0.68.0}/README.md +2 -2
  5. {kernel-0.67.0 → kernel-0.68.0}/api.md +2 -1
  6. {kernel-0.67.0 → kernel-0.68.0}/pyproject.toml +1 -1
  7. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_version.py +1 -1
  8. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/pagination.py +26 -10
  9. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/api_keys.py +165 -3
  10. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/__init__.py +2 -0
  11. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/api_key.py +6 -0
  12. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/api_key_list_params.py +15 -0
  13. kernel-0.68.0/src/kernel/types/api_key_retrieve_params.py +15 -0
  14. kernel-0.68.0/src/kernel/types/api_key_rotate_params.py +23 -0
  15. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_api_keys.py +138 -9
  16. kernel-0.68.0/tests/test_pagination.py +66 -0
  17. kernel-0.67.0/.release-please-manifest.json +0 -3
  18. {kernel-0.67.0 → kernel-0.68.0}/.gitignore +0 -0
  19. {kernel-0.67.0 → kernel-0.68.0}/CONTRIBUTING.md +0 -0
  20. {kernel-0.67.0 → kernel-0.68.0}/LICENSE +0 -0
  21. {kernel-0.67.0 → kernel-0.68.0}/SECURITY.md +0 -0
  22. {kernel-0.67.0 → kernel-0.68.0}/bin/check-release-environment +0 -0
  23. {kernel-0.67.0 → kernel-0.68.0}/bin/publish-pypi +0 -0
  24. {kernel-0.67.0 → kernel-0.68.0}/examples/.keep +0 -0
  25. {kernel-0.67.0 → kernel-0.68.0}/examples/browser_routing.py +0 -0
  26. {kernel-0.67.0 → kernel-0.68.0}/examples/browser_telemetry.py +0 -0
  27. {kernel-0.67.0 → kernel-0.68.0}/noxfile.py +0 -0
  28. {kernel-0.67.0 → kernel-0.68.0}/release-please-config.json +0 -0
  29. {kernel-0.67.0 → kernel-0.68.0}/requirements-dev.lock +0 -0
  30. {kernel-0.67.0 → kernel-0.68.0}/requirements.lock +0 -0
  31. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/__init__.py +0 -0
  32. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_base_client.py +0 -0
  33. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_client.py +0 -0
  34. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_compat.py +0 -0
  35. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_constants.py +0 -0
  36. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_exceptions.py +0 -0
  37. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_files.py +0 -0
  38. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_models.py +0 -0
  39. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_qs.py +0 -0
  40. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_resource.py +0 -0
  41. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_response.py +0 -0
  42. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_streaming.py +0 -0
  43. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_types.py +0 -0
  44. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/__init__.py +0 -0
  45. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_compat.py +0 -0
  46. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_datetime_parse.py +0 -0
  47. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_json.py +0 -0
  48. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_logs.py +0 -0
  49. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_path.py +0 -0
  50. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_proxy.py +0 -0
  51. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_reflection.py +0 -0
  52. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_resources_proxy.py +0 -0
  53. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_streams.py +0 -0
  54. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_sync.py +0 -0
  55. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_transform.py +0 -0
  56. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_typing.py +0 -0
  57. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/_utils/_utils.py +0 -0
  58. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/app_framework.py +0 -0
  59. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/lib/.keep +0 -0
  60. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/lib/browser_routing/__init__.py +0 -0
  61. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/lib/browser_routing/raw_http.py +0 -0
  62. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/lib/browser_routing/routing.py +0 -0
  63. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/lib/browser_routing/util.py +0 -0
  64. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/py.typed +0 -0
  65. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/__init__.py +0 -0
  66. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/apps.py +0 -0
  67. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/auth/__init__.py +0 -0
  68. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/auth/auth.py +0 -0
  69. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/auth/connections.py +0 -0
  70. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browser_pools.py +0 -0
  71. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/__init__.py +0 -0
  72. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/browsers.py +0 -0
  73. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/computer.py +0 -0
  74. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/fs/__init__.py +0 -0
  75. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/fs/fs.py +0 -0
  76. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/fs/watch.py +0 -0
  77. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/logs.py +0 -0
  78. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/playwright.py +0 -0
  79. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/process.py +0 -0
  80. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/replays.py +0 -0
  81. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/browsers/telemetry.py +0 -0
  82. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/credential_providers.py +0 -0
  83. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/credentials.py +0 -0
  84. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/deployments.py +0 -0
  85. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/extensions.py +0 -0
  86. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/invocations.py +0 -0
  87. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/organization/__init__.py +0 -0
  88. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/organization/limits.py +0 -0
  89. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/organization/organization.py +0 -0
  90. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/profiles.py +0 -0
  91. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/projects/__init__.py +0 -0
  92. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/projects/limits.py +0 -0
  93. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/projects/projects.py +0 -0
  94. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/resources/proxies.py +0 -0
  95. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/api_key_create_params.py +0 -0
  96. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/api_key_update_params.py +0 -0
  97. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/app_list_params.py +0 -0
  98. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/app_list_response.py +0 -0
  99. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/__init__.py +0 -0
  100. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/connection_create_params.py +0 -0
  101. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/connection_follow_response.py +0 -0
  102. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/connection_list_params.py +0 -0
  103. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/connection_login_params.py +0 -0
  104. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/connection_submit_params.py +0 -0
  105. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/connection_update_params.py +0 -0
  106. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/login_response.py +0 -0
  107. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/managed_auth.py +0 -0
  108. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/auth/submit_fields_response.py +0 -0
  109. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_create_params.py +0 -0
  110. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_create_response.py +0 -0
  111. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_curl_params.py +0 -0
  112. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_curl_response.py +0 -0
  113. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_list_params.py +0 -0
  114. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_list_response.py +0 -0
  115. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_load_extensions_params.py +0 -0
  116. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool.py +0 -0
  117. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_acquire_params.py +0 -0
  118. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_acquire_response.py +0 -0
  119. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_create_params.py +0 -0
  120. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_delete_params.py +0 -0
  121. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_list_params.py +0 -0
  122. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_ref.py +0 -0
  123. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_release_params.py +0 -0
  124. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_pool_update_params.py +0 -0
  125. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_retrieve_params.py +0 -0
  126. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_retrieve_response.py +0 -0
  127. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_update_params.py +0 -0
  128. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_update_response.py +0 -0
  129. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browser_usage.py +0 -0
  130. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/__init__.py +0 -0
  131. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_api_call_event.py +0 -0
  132. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_call_stack.py +0 -0
  133. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_captcha_solve_result_event.py +0 -0
  134. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_cdp_connect_event.py +0 -0
  135. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_cdp_disconnect_event.py +0 -0
  136. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_console_error_event.py +0 -0
  137. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_console_log_event.py +0 -0
  138. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_event_context.py +0 -0
  139. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_event_source.py +0 -0
  140. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_http_headers.py +0 -0
  141. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_interaction_click_event.py +0 -0
  142. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_interaction_key_event.py +0 -0
  143. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_interaction_scroll_settled_event.py +0 -0
  144. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_live_view_connect_event.py +0 -0
  145. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_live_view_disconnect_event.py +0 -0
  146. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_monitor_disconnected_event.py +0 -0
  147. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_monitor_init_failed_event.py +0 -0
  148. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_monitor_reconnect_failed_event.py +0 -0
  149. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_monitor_reconnected_event.py +0 -0
  150. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_monitor_screenshot_event.py +0 -0
  151. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_network_idle_event.py +0 -0
  152. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_network_loading_failed_event.py +0 -0
  153. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_network_request_event.py +0 -0
  154. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_network_response_event.py +0 -0
  155. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_dom_content_loaded_event.py +0 -0
  156. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_layout_settled_event.py +0 -0
  157. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_layout_shift_event.py +0 -0
  158. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_lcp_event.py +0 -0
  159. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_load_event.py +0 -0
  160. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_navigation_event.py +0 -0
  161. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_navigation_settled_event.py +0 -0
  162. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_page_tab_opened_event.py +0 -0
  163. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_service_crashed_event.py +0 -0
  164. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_system_oom_kill_event.py +0 -0
  165. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_telemetry_categories_config.py +0 -0
  166. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_telemetry_categories_config_param.py +0 -0
  167. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_telemetry_category_config.py +0 -0
  168. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_telemetry_category_config_param.py +0 -0
  169. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_telemetry_config.py +0 -0
  170. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/browser_telemetry_event.py +0 -0
  171. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_batch_params.py +0 -0
  172. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_capture_screenshot_params.py +0 -0
  173. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_click_mouse_params.py +0 -0
  174. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_drag_mouse_params.py +0 -0
  175. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_get_mouse_position_response.py +0 -0
  176. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_move_mouse_params.py +0 -0
  177. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_press_key_params.py +0 -0
  178. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_read_clipboard_response.py +0 -0
  179. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_scroll_params.py +0 -0
  180. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_set_cursor_visibility_params.py +0 -0
  181. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_set_cursor_visibility_response.py +0 -0
  182. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_type_text_params.py +0 -0
  183. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/computer_write_clipboard_params.py +0 -0
  184. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_create_directory_params.py +0 -0
  185. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_delete_directory_params.py +0 -0
  186. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_delete_file_params.py +0 -0
  187. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_download_dir_zip_params.py +0 -0
  188. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_file_info_params.py +0 -0
  189. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_file_info_response.py +0 -0
  190. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_list_files_params.py +0 -0
  191. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_list_files_response.py +0 -0
  192. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_move_params.py +0 -0
  193. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_read_file_params.py +0 -0
  194. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_set_file_permissions_params.py +0 -0
  195. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_upload_params.py +0 -0
  196. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_upload_zip_params.py +0 -0
  197. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/f_write_file_params.py +0 -0
  198. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/fs/__init__.py +0 -0
  199. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/fs/watch_events_response.py +0 -0
  200. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/fs/watch_start_params.py +0 -0
  201. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/fs/watch_start_response.py +0 -0
  202. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/log_stream_params.py +0 -0
  203. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/playwright_execute_params.py +0 -0
  204. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/playwright_execute_response.py +0 -0
  205. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_exec_params.py +0 -0
  206. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_exec_response.py +0 -0
  207. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_kill_params.py +0 -0
  208. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_kill_response.py +0 -0
  209. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_resize_params.py +0 -0
  210. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_resize_response.py +0 -0
  211. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_spawn_params.py +0 -0
  212. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_spawn_response.py +0 -0
  213. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_status_response.py +0 -0
  214. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_stdin_params.py +0 -0
  215. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_stdin_response.py +0 -0
  216. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/process_stdout_stream_response.py +0 -0
  217. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/replay_list_response.py +0 -0
  218. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/replay_start_params.py +0 -0
  219. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/replay_start_response.py +0 -0
  220. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/browsers/telemetry_stream_response.py +0 -0
  221. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/created_api_key.py +0 -0
  222. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential.py +0 -0
  223. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_create_params.py +0 -0
  224. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_list_params.py +0 -0
  225. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_provider.py +0 -0
  226. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_provider_create_params.py +0 -0
  227. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_provider_item.py +0 -0
  228. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_provider_list_items_response.py +0 -0
  229. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_provider_list_params.py +0 -0
  230. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_provider_test_result.py +0 -0
  231. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_provider_update_params.py +0 -0
  232. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_totp_code_response.py +0 -0
  233. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/credential_update_params.py +0 -0
  234. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_create_params.py +0 -0
  235. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_create_response.py +0 -0
  236. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_follow_params.py +0 -0
  237. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_follow_response.py +0 -0
  238. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_list_params.py +0 -0
  239. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_list_response.py +0 -0
  240. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_retrieve_response.py +0 -0
  241. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/deployment_state_event.py +0 -0
  242. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/extension_download_from_chrome_store_params.py +0 -0
  243. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/extension_list_params.py +0 -0
  244. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/extension_list_response.py +0 -0
  245. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/extension_upload_params.py +0 -0
  246. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/extension_upload_response.py +0 -0
  247. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_create_params.py +0 -0
  248. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_create_response.py +0 -0
  249. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_follow_params.py +0 -0
  250. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_follow_response.py +0 -0
  251. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_list_browsers_response.py +0 -0
  252. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_list_params.py +0 -0
  253. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_list_response.py +0 -0
  254. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_retrieve_response.py +0 -0
  255. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_state_event.py +0 -0
  256. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_update_params.py +0 -0
  257. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/invocation_update_response.py +0 -0
  258. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/organization/__init__.py +0 -0
  259. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/organization/limit_update_params.py +0 -0
  260. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/organization/org_limits.py +0 -0
  261. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/profile.py +0 -0
  262. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/profile_create_params.py +0 -0
  263. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/profile_list_params.py +0 -0
  264. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/project.py +0 -0
  265. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/project_create_params.py +0 -0
  266. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/project_list_params.py +0 -0
  267. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/project_update_params.py +0 -0
  268. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/projects/__init__.py +0 -0
  269. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/projects/limit_update_params.py +0 -0
  270. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/projects/project_limits.py +0 -0
  271. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/proxy_check_params.py +0 -0
  272. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/proxy_check_response.py +0 -0
  273. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/proxy_create_params.py +0 -0
  274. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/proxy_create_response.py +0 -0
  275. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/proxy_list_params.py +0 -0
  276. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/proxy_list_response.py +0 -0
  277. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/proxy_retrieve_response.py +0 -0
  278. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/__init__.py +0 -0
  279. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/app_action.py +0 -0
  280. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/browser_extension.py +0 -0
  281. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/browser_profile.py +0 -0
  282. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/browser_viewport.py +0 -0
  283. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/error_detail.py +0 -0
  284. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/error_event.py +0 -0
  285. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/error_model.py +0 -0
  286. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/heartbeat_event.py +0 -0
  287. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared/log_event.py +0 -0
  288. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared_params/__init__.py +0 -0
  289. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared_params/browser_extension.py +0 -0
  290. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared_params/browser_profile.py +0 -0
  291. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/shared_params/browser_viewport.py +0 -0
  292. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/tags.py +0 -0
  293. {kernel-0.67.0 → kernel-0.68.0}/src/kernel/types/tags_param.py +0 -0
  294. {kernel-0.67.0 → kernel-0.68.0}/tests/__init__.py +0 -0
  295. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/__init__.py +0 -0
  296. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/auth/__init__.py +0 -0
  297. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/auth/test_connections.py +0 -0
  298. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/__init__.py +0 -0
  299. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/fs/__init__.py +0 -0
  300. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/fs/test_watch.py +0 -0
  301. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/test_computer.py +0 -0
  302. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/test_fs.py +0 -0
  303. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/test_logs.py +0 -0
  304. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/test_playwright.py +0 -0
  305. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/test_process.py +0 -0
  306. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/test_replays.py +0 -0
  307. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/browsers/test_telemetry.py +0 -0
  308. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/organization/__init__.py +0 -0
  309. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/organization/test_limits.py +0 -0
  310. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/projects/__init__.py +0 -0
  311. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/projects/test_limits.py +0 -0
  312. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_apps.py +0 -0
  313. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_browser_pools.py +0 -0
  314. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_browsers.py +0 -0
  315. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_credential_providers.py +0 -0
  316. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_credentials.py +0 -0
  317. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_deployments.py +0 -0
  318. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_extensions.py +0 -0
  319. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_invocations.py +0 -0
  320. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_profiles.py +0 -0
  321. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_projects.py +0 -0
  322. {kernel-0.67.0 → kernel-0.68.0}/tests/api_resources/test_proxies.py +0 -0
  323. {kernel-0.67.0 → kernel-0.68.0}/tests/conftest.py +0 -0
  324. {kernel-0.67.0 → kernel-0.68.0}/tests/sample_file.txt +0 -0
  325. {kernel-0.67.0 → kernel-0.68.0}/tests/test_browser_routing.py +0 -0
  326. {kernel-0.67.0 → kernel-0.68.0}/tests/test_client.py +0 -0
  327. {kernel-0.67.0 → kernel-0.68.0}/tests/test_extract_files.py +0 -0
  328. {kernel-0.67.0 → kernel-0.68.0}/tests/test_files.py +0 -0
  329. {kernel-0.67.0 → kernel-0.68.0}/tests/test_models.py +0 -0
  330. {kernel-0.67.0 → kernel-0.68.0}/tests/test_qs.py +0 -0
  331. {kernel-0.67.0 → kernel-0.68.0}/tests/test_required_args.py +0 -0
  332. {kernel-0.67.0 → kernel-0.68.0}/tests/test_response.py +0 -0
  333. {kernel-0.67.0 → kernel-0.68.0}/tests/test_streaming.py +0 -0
  334. {kernel-0.67.0 → kernel-0.68.0}/tests/test_transform.py +0 -0
  335. {kernel-0.67.0 → kernel-0.68.0}/tests/test_utils/test_datetime_parse.py +0 -0
  336. {kernel-0.67.0 → kernel-0.68.0}/tests/test_utils/test_json.py +0 -0
  337. {kernel-0.67.0 → kernel-0.68.0}/tests/test_utils/test_path.py +0 -0
  338. {kernel-0.67.0 → kernel-0.68.0}/tests/test_utils/test_proxy.py +0 -0
  339. {kernel-0.67.0 → kernel-0.68.0}/tests/test_utils/test_typing.py +0 -0
  340. {kernel-0.67.0 → kernel-0.68.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.68.0"
3
+ }
@@ -1,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.68.0 (2026-06-15)
4
+
5
+ Full Changelog: [v0.67.0...v0.68.0](https://github.com/kernel/kernel-python-sdk/compare/v0.67.0...v0.68.0)
6
+
7
+ ### Features
8
+
9
+ * Add API key rotate endpoint ([e383f7d](https://github.com/kernel/kernel-python-sdk/commit/e383f7d4b6af4f2921200d4a0f6922e730f58e08))
10
+ * **api:** surface deleted/expired API keys for audit trail (KERNEL-1350) ([55e32db](https://github.com/kernel/kernel-python-sdk/commit/55e32dbaf07275c63623a31ec6df88c6aa128f8f))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **pagination:** correct type:ignore placement; stop on 0 sentinel ([5d2afd7](https://github.com/kernel/kernel-python-sdk/commit/5d2afd7df0f2d21d754ca936286ac3a92762e9db))
16
+ * **pagination:** fail loudly on contradictory headers; test both classes ([4554697](https://github.com/kernel/kernel-python-sdk/commit/4554697a9d850848b602a2422199fb2ce72d8efc))
17
+ * **pagination:** stop skipping a page per auto-pagination iteration ([c0a3e14](https://github.com/kernel/kernel-python-sdk/commit/c0a3e14b51e39dfdba37bacf023b2f98d4a3be69))
18
+
19
+
20
+ ### Styles
21
+
22
+ * ruff import-sort and format the pagination test ([843fade](https://github.com/kernel/kernel-python-sdk/commit/843fadeb07fb7cebd5d2689eb78511bb8ee0d293))
23
+
24
+
25
+ ### Refactors
26
+
27
+ * **api:** align API key audit surface with browser sibling (KERNEL-1350) ([12868d1](https://github.com/kernel/kernel-python-sdk/commit/12868d18dbb081c0e998299b799ac693dd878d0f))
28
+
3
29
  ## 0.67.0 (2026-06-11)
4
30
 
5
31
  Full Changelog: [v0.66.0...v0.67.0](https://github.com/kernel/kernel-python-sdk/compare/v0.66.0...v0.67.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: kernel
3
- Version: 0.67.0
3
+ Version: 0.68.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
@@ -220,8 +220,8 @@ first_page = await client.deployments.list(
220
220
  )
221
221
 
222
222
  print(
223
- f"the current start offset for this page: {first_page.next_offset}"
224
- ) # => "the current start offset for this page: 1"
223
+ f"the offset where the next page starts: {first_page.next_offset}"
224
+ ) # => "the offset where the next page starts: 2"
225
225
  for deployment in first_page.items:
226
226
  print(deployment.id)
227
227
 
@@ -185,8 +185,8 @@ first_page = await client.deployments.list(
185
185
  )
186
186
 
187
187
  print(
188
- f"the current start offset for this page: {first_page.next_offset}"
189
- ) # => "the current start offset for this page: 1"
188
+ f"the offset where the next page starts: {first_page.next_offset}"
189
+ ) # => "the offset where the next page starts: 2"
190
190
  for deployment in first_page.items:
191
191
  print(deployment.id)
192
192
 
@@ -449,10 +449,11 @@ from kernel.types import APIKey, CreatedAPIKey
449
449
  Methods:
450
450
 
451
451
  - <code title="post /org/api_keys">client.api_keys.<a href="./src/kernel/resources/api_keys.py">create</a>(\*\*<a href="src/kernel/types/api_key_create_params.py">params</a>) -> <a href="./src/kernel/types/created_api_key.py">CreatedAPIKey</a></code>
452
- - <code title="get /org/api_keys/{id}">client.api_keys.<a href="./src/kernel/resources/api_keys.py">retrieve</a>(id) -> <a href="./src/kernel/types/api_key.py">APIKey</a></code>
452
+ - <code title="get /org/api_keys/{id}">client.api_keys.<a href="./src/kernel/resources/api_keys.py">retrieve</a>(id, \*\*<a href="src/kernel/types/api_key_retrieve_params.py">params</a>) -> <a href="./src/kernel/types/api_key.py">APIKey</a></code>
453
453
  - <code title="patch /org/api_keys/{id}">client.api_keys.<a href="./src/kernel/resources/api_keys.py">update</a>(id, \*\*<a href="src/kernel/types/api_key_update_params.py">params</a>) -> <a href="./src/kernel/types/api_key.py">APIKey</a></code>
454
454
  - <code title="get /org/api_keys">client.api_keys.<a href="./src/kernel/resources/api_keys.py">list</a>(\*\*<a href="src/kernel/types/api_key_list_params.py">params</a>) -> <a href="./src/kernel/types/api_key.py">SyncOffsetPagination[APIKey]</a></code>
455
455
  - <code title="delete /org/api_keys/{id}">client.api_keys.<a href="./src/kernel/resources/api_keys.py">delete</a>(id) -> None</code>
456
+ - <code title="post /org/api_keys/{id}/rotate">client.api_keys.<a href="./src/kernel/resources/api_keys.py">rotate</a>(id, \*\*<a href="src/kernel/types/api_key_rotate_params.py">params</a>) -> <a href="./src/kernel/types/created_api_key.py">CreatedAPIKey</a></code>
456
457
 
457
458
  # CredentialProviders
458
459
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kernel"
3
- version = "0.67.0"
3
+ version = "0.68.0"
4
4
  description = "The official Python library for the kernel API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "kernel"
4
- __version__ = "0.67.0" # x-release-please-version
4
+ __version__ = "0.68.0" # x-release-please-version
@@ -40,12 +40,20 @@ class SyncOffsetPagination(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
40
40
  def next_page_info(self) -> Optional[PageInfo]:
41
41
  next_offset = self.next_offset
42
42
  if next_offset is None:
43
- return None # type: ignore[unreachable]
43
+ if self.has_more: # type: ignore[unreachable]
44
+ raise RuntimeError(
45
+ "Server reported X-Has-More: true without an X-Next-Offset header; "
46
+ "refusing to silently truncate pagination"
47
+ )
48
+ return None
44
49
 
45
- length = len(self._get_page_items())
46
- current_count = next_offset + length
50
+ # X-Next-Offset is the next page's absolute start, or 0 on the last page
51
+ # (the API's stop sentinel). Only a positive offset advances; the old code
52
+ # added the current page length on top, skipping a page per iteration.
53
+ if next_offset == 0:
54
+ return None
47
55
 
48
- return PageInfo(params={"offset": current_count})
56
+ return PageInfo(params={"offset": next_offset})
49
57
 
50
58
  @classmethod
51
59
  def build(cls: Type[_BaseModelT], *, response: Response, data: object) -> _BaseModelT: # noqa: ARG003
@@ -83,12 +91,20 @@ class AsyncOffsetPagination(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
83
91
  def next_page_info(self) -> Optional[PageInfo]:
84
92
  next_offset = self.next_offset
85
93
  if next_offset is None:
86
- return None # type: ignore[unreachable]
87
-
88
- length = len(self._get_page_items())
89
- current_count = next_offset + length
90
-
91
- return PageInfo(params={"offset": current_count})
94
+ if self.has_more: # type: ignore[unreachable]
95
+ raise RuntimeError(
96
+ "Server reported X-Has-More: true without an X-Next-Offset header; "
97
+ "refusing to silently truncate pagination"
98
+ )
99
+ return None
100
+
101
+ # X-Next-Offset is the next page's absolute start, or 0 on the last page
102
+ # (the API's stop sentinel). Only a positive offset advances; the old code
103
+ # added the current page length on top, skipping a page per iteration.
104
+ if next_offset == 0:
105
+ return None
106
+
107
+ return PageInfo(params={"offset": next_offset})
92
108
 
93
109
  @classmethod
94
110
  def build(cls: Type[_BaseModelT], *, response: Response, data: object) -> _BaseModelT: # noqa: ARG003
@@ -7,7 +7,13 @@ from typing_extensions import Literal
7
7
 
8
8
  import httpx
9
9
 
10
- from ..types import api_key_list_params, api_key_create_params, api_key_update_params
10
+ from ..types import (
11
+ api_key_list_params,
12
+ api_key_create_params,
13
+ api_key_rotate_params,
14
+ api_key_update_params,
15
+ api_key_retrieve_params,
16
+ )
11
17
  from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
12
18
  from .._utils import path_template, maybe_transform, async_maybe_transform
13
19
  from .._compat import cached_property
@@ -99,6 +105,7 @@ class APIKeysResource(SyncAPIResource):
99
105
  self,
100
106
  id: str,
101
107
  *,
108
+ include_deleted: bool | Omit = omit,
102
109
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
103
110
  # The extra values given here take precedence over values defined on the client or passed to this method.
104
111
  extra_headers: Headers | None = None,
@@ -112,6 +119,9 @@ class APIKeysResource(SyncAPIResource):
112
119
  masked.
113
120
 
114
121
  Args:
122
+ include_deleted: When true, return the API key even if it has been deleted (soft-deleted), for
123
+ audit purposes. Defaults to false, which returns 404 for a deleted key.
124
+
115
125
  extra_headers: Send extra headers
116
126
 
117
127
  extra_query: Add additional query parameters to the request
@@ -125,7 +135,13 @@ class APIKeysResource(SyncAPIResource):
125
135
  return self._get(
126
136
  path_template("/org/api_keys/{id}", id=id),
127
137
  options=make_request_options(
128
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
138
+ extra_headers=extra_headers,
139
+ extra_query=extra_query,
140
+ extra_body=extra_body,
141
+ timeout=timeout,
142
+ query=maybe_transform(
143
+ {"include_deleted": include_deleted}, api_key_retrieve_params.APIKeyRetrieveParams
144
+ ),
129
145
  ),
130
146
  cast_to=APIKey,
131
147
  )
@@ -170,11 +186,13 @@ class APIKeysResource(SyncAPIResource):
170
186
  def list(
171
187
  self,
172
188
  *,
189
+ include_deleted: bool | Omit = omit,
173
190
  limit: int | Omit = omit,
174
191
  offset: int | Omit = omit,
175
192
  query: str | Omit = omit,
176
193
  sort_by: Literal["created_at", "name", "expires_at"] | Omit = omit,
177
194
  sort_direction: Literal["asc", "desc"] | Omit = omit,
195
+ status: Literal["active", "deleted", "all"] | Omit = omit,
178
196
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
179
197
  # The extra values given here take precedence over values defined on the client or passed to this method.
180
198
  extra_headers: Headers | None = None,
@@ -187,6 +205,9 @@ class APIKeysResource(SyncAPIResource):
187
205
  API keys are masked.
188
206
 
189
207
  Args:
208
+ include_deleted: Deprecated: use status=all instead. When true, include deleted (soft-deleted)
209
+ API keys in the results for audit purposes.
210
+
190
211
  limit: Maximum number of results to return
191
212
 
192
213
  offset: Number of results to skip
@@ -198,6 +219,10 @@ class APIKeysResource(SyncAPIResource):
198
219
 
199
220
  sort_direction: Sort direction for API keys.
200
221
 
222
+ status: Filter API keys by status. "active" returns keys that are not deleted (default;
223
+ expired-but-not-deleted keys are still included), "deleted" returns only
224
+ soft-deleted keys, "all" returns both.
225
+
201
226
  extra_headers: Send extra headers
202
227
 
203
228
  extra_query: Add additional query parameters to the request
@@ -216,11 +241,13 @@ class APIKeysResource(SyncAPIResource):
216
241
  timeout=timeout,
217
242
  query=maybe_transform(
218
243
  {
244
+ "include_deleted": include_deleted,
219
245
  "limit": limit,
220
246
  "offset": offset,
221
247
  "query": query,
222
248
  "sort_by": sort_by,
223
249
  "sort_direction": sort_direction,
250
+ "status": status,
224
251
  },
225
252
  api_key_list_params.APIKeyListParams,
226
253
  ),
@@ -262,6 +289,57 @@ class APIKeysResource(SyncAPIResource):
262
289
  cast_to=NoneType,
263
290
  )
264
291
 
292
+ def rotate(
293
+ self,
294
+ id: str,
295
+ *,
296
+ days_to_expire: Optional[int] | Omit = omit,
297
+ expire_in_days: Optional[int] | Omit = omit,
298
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
299
+ # The extra values given here take precedence over values defined on the client or passed to this method.
300
+ extra_headers: Headers | None = None,
301
+ extra_query: Query | None = None,
302
+ extra_body: Body | None = None,
303
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
304
+ ) -> CreatedAPIKey:
305
+ """Rotate an API key.
306
+
307
+ Issues a new key that copies the name and project of the
308
+ rotated key, and schedules the rotated key to expire after a grace period so
309
+ in-flight callers can swap over. The new plaintext key is returned once.
310
+
311
+ Args:
312
+ days_to_expire: Lifetime in days for the new key, up to 3650. Omit to reuse the rotated key's
313
+ original lifetime, or never-expires if it had none.
314
+
315
+ expire_in_days: Grace period in days before the rotated key expires. Use 0 to expire it
316
+ immediately. Omit for the default grace period of 7 days.
317
+
318
+ extra_headers: Send extra headers
319
+
320
+ extra_query: Add additional query parameters to the request
321
+
322
+ extra_body: Add additional JSON properties to the request
323
+
324
+ timeout: Override the client-level default timeout for this request, in seconds
325
+ """
326
+ if not id:
327
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
328
+ return self._post(
329
+ path_template("/org/api_keys/{id}/rotate", id=id),
330
+ body=maybe_transform(
331
+ {
332
+ "days_to_expire": days_to_expire,
333
+ "expire_in_days": expire_in_days,
334
+ },
335
+ api_key_rotate_params.APIKeyRotateParams,
336
+ ),
337
+ options=make_request_options(
338
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
339
+ ),
340
+ cast_to=CreatedAPIKey,
341
+ )
342
+
265
343
 
266
344
  class AsyncAPIKeysResource(AsyncAPIResource):
267
345
  """Create and manage API keys for organization and project-scoped access."""
@@ -336,6 +414,7 @@ class AsyncAPIKeysResource(AsyncAPIResource):
336
414
  self,
337
415
  id: str,
338
416
  *,
417
+ include_deleted: bool | Omit = omit,
339
418
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
340
419
  # The extra values given here take precedence over values defined on the client or passed to this method.
341
420
  extra_headers: Headers | None = None,
@@ -349,6 +428,9 @@ class AsyncAPIKeysResource(AsyncAPIResource):
349
428
  masked.
350
429
 
351
430
  Args:
431
+ include_deleted: When true, return the API key even if it has been deleted (soft-deleted), for
432
+ audit purposes. Defaults to false, which returns 404 for a deleted key.
433
+
352
434
  extra_headers: Send extra headers
353
435
 
354
436
  extra_query: Add additional query parameters to the request
@@ -362,7 +444,13 @@ class AsyncAPIKeysResource(AsyncAPIResource):
362
444
  return await self._get(
363
445
  path_template("/org/api_keys/{id}", id=id),
364
446
  options=make_request_options(
365
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
447
+ extra_headers=extra_headers,
448
+ extra_query=extra_query,
449
+ extra_body=extra_body,
450
+ timeout=timeout,
451
+ query=await async_maybe_transform(
452
+ {"include_deleted": include_deleted}, api_key_retrieve_params.APIKeyRetrieveParams
453
+ ),
366
454
  ),
367
455
  cast_to=APIKey,
368
456
  )
@@ -407,11 +495,13 @@ class AsyncAPIKeysResource(AsyncAPIResource):
407
495
  def list(
408
496
  self,
409
497
  *,
498
+ include_deleted: bool | Omit = omit,
410
499
  limit: int | Omit = omit,
411
500
  offset: int | Omit = omit,
412
501
  query: str | Omit = omit,
413
502
  sort_by: Literal["created_at", "name", "expires_at"] | Omit = omit,
414
503
  sort_direction: Literal["asc", "desc"] | Omit = omit,
504
+ status: Literal["active", "deleted", "all"] | Omit = omit,
415
505
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
416
506
  # The extra values given here take precedence over values defined on the client or passed to this method.
417
507
  extra_headers: Headers | None = None,
@@ -424,6 +514,9 @@ class AsyncAPIKeysResource(AsyncAPIResource):
424
514
  API keys are masked.
425
515
 
426
516
  Args:
517
+ include_deleted: Deprecated: use status=all instead. When true, include deleted (soft-deleted)
518
+ API keys in the results for audit purposes.
519
+
427
520
  limit: Maximum number of results to return
428
521
 
429
522
  offset: Number of results to skip
@@ -435,6 +528,10 @@ class AsyncAPIKeysResource(AsyncAPIResource):
435
528
 
436
529
  sort_direction: Sort direction for API keys.
437
530
 
531
+ status: Filter API keys by status. "active" returns keys that are not deleted (default;
532
+ expired-but-not-deleted keys are still included), "deleted" returns only
533
+ soft-deleted keys, "all" returns both.
534
+
438
535
  extra_headers: Send extra headers
439
536
 
440
537
  extra_query: Add additional query parameters to the request
@@ -453,11 +550,13 @@ class AsyncAPIKeysResource(AsyncAPIResource):
453
550
  timeout=timeout,
454
551
  query=maybe_transform(
455
552
  {
553
+ "include_deleted": include_deleted,
456
554
  "limit": limit,
457
555
  "offset": offset,
458
556
  "query": query,
459
557
  "sort_by": sort_by,
460
558
  "sort_direction": sort_direction,
559
+ "status": status,
461
560
  },
462
561
  api_key_list_params.APIKeyListParams,
463
562
  ),
@@ -499,6 +598,57 @@ class AsyncAPIKeysResource(AsyncAPIResource):
499
598
  cast_to=NoneType,
500
599
  )
501
600
 
601
+ async def rotate(
602
+ self,
603
+ id: str,
604
+ *,
605
+ days_to_expire: Optional[int] | Omit = omit,
606
+ expire_in_days: Optional[int] | Omit = omit,
607
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
608
+ # The extra values given here take precedence over values defined on the client or passed to this method.
609
+ extra_headers: Headers | None = None,
610
+ extra_query: Query | None = None,
611
+ extra_body: Body | None = None,
612
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
613
+ ) -> CreatedAPIKey:
614
+ """Rotate an API key.
615
+
616
+ Issues a new key that copies the name and project of the
617
+ rotated key, and schedules the rotated key to expire after a grace period so
618
+ in-flight callers can swap over. The new plaintext key is returned once.
619
+
620
+ Args:
621
+ days_to_expire: Lifetime in days for the new key, up to 3650. Omit to reuse the rotated key's
622
+ original lifetime, or never-expires if it had none.
623
+
624
+ expire_in_days: Grace period in days before the rotated key expires. Use 0 to expire it
625
+ immediately. Omit for the default grace period of 7 days.
626
+
627
+ extra_headers: Send extra headers
628
+
629
+ extra_query: Add additional query parameters to the request
630
+
631
+ extra_body: Add additional JSON properties to the request
632
+
633
+ timeout: Override the client-level default timeout for this request, in seconds
634
+ """
635
+ if not id:
636
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
637
+ return await self._post(
638
+ path_template("/org/api_keys/{id}/rotate", id=id),
639
+ body=await async_maybe_transform(
640
+ {
641
+ "days_to_expire": days_to_expire,
642
+ "expire_in_days": expire_in_days,
643
+ },
644
+ api_key_rotate_params.APIKeyRotateParams,
645
+ ),
646
+ options=make_request_options(
647
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
648
+ ),
649
+ cast_to=CreatedAPIKey,
650
+ )
651
+
502
652
 
503
653
  class APIKeysResourceWithRawResponse:
504
654
  def __init__(self, api_keys: APIKeysResource) -> None:
@@ -519,6 +669,9 @@ class APIKeysResourceWithRawResponse:
519
669
  self.delete = to_raw_response_wrapper(
520
670
  api_keys.delete,
521
671
  )
672
+ self.rotate = to_raw_response_wrapper(
673
+ api_keys.rotate,
674
+ )
522
675
 
523
676
 
524
677
  class AsyncAPIKeysResourceWithRawResponse:
@@ -540,6 +693,9 @@ class AsyncAPIKeysResourceWithRawResponse:
540
693
  self.delete = async_to_raw_response_wrapper(
541
694
  api_keys.delete,
542
695
  )
696
+ self.rotate = async_to_raw_response_wrapper(
697
+ api_keys.rotate,
698
+ )
543
699
 
544
700
 
545
701
  class APIKeysResourceWithStreamingResponse:
@@ -561,6 +717,9 @@ class APIKeysResourceWithStreamingResponse:
561
717
  self.delete = to_streamed_response_wrapper(
562
718
  api_keys.delete,
563
719
  )
720
+ self.rotate = to_streamed_response_wrapper(
721
+ api_keys.rotate,
722
+ )
564
723
 
565
724
 
566
725
  class AsyncAPIKeysResourceWithStreamingResponse:
@@ -582,3 +741,6 @@ class AsyncAPIKeysResourceWithStreamingResponse:
582
741
  self.delete = async_to_streamed_response_wrapper(
583
742
  api_keys.delete,
584
743
  )
744
+ self.rotate = async_to_streamed_response_wrapper(
745
+ api_keys.rotate,
746
+ )
@@ -39,6 +39,7 @@ from .proxy_create_params import ProxyCreateParams as ProxyCreateParams
39
39
  from .proxy_list_response import ProxyListResponse as ProxyListResponse
40
40
  from .proxy_check_response import ProxyCheckResponse as ProxyCheckResponse
41
41
  from .api_key_create_params import APIKeyCreateParams as APIKeyCreateParams
42
+ from .api_key_rotate_params import APIKeyRotateParams as APIKeyRotateParams
42
43
  from .api_key_update_params import APIKeyUpdateParams as APIKeyUpdateParams
43
44
  from .browser_create_params import BrowserCreateParams as BrowserCreateParams
44
45
  from .browser_curl_response import BrowserCurlResponse as BrowserCurlResponse
@@ -54,6 +55,7 @@ from .deployment_list_params import DeploymentListParams as DeploymentListParams
54
55
  from .deployment_state_event import DeploymentStateEvent as DeploymentStateEvent
55
56
  from .invocation_list_params import InvocationListParams as InvocationListParams
56
57
  from .invocation_state_event import InvocationStateEvent as InvocationStateEvent
58
+ from .api_key_retrieve_params import APIKeyRetrieveParams as APIKeyRetrieveParams
57
59
  from .browser_create_response import BrowserCreateResponse as BrowserCreateResponse
58
60
  from .browser_retrieve_params import BrowserRetrieveParams as BrowserRetrieveParams
59
61
  from .browser_update_response import BrowserUpdateResponse as BrowserUpdateResponse
@@ -28,6 +28,12 @@ class APIKey(BaseModel):
28
28
 
29
29
  created_by: CreatedBy
30
30
 
31
+ deleted_at: Optional[datetime] = None
32
+ """When the API key was deleted (soft-deleted).
33
+
34
+ Null for keys that have not been deleted.
35
+ """
36
+
31
37
  expires_at: Optional[datetime] = None
32
38
  """When the API key expires"""
33
39
 
@@ -8,6 +8,13 @@ __all__ = ["APIKeyListParams"]
8
8
 
9
9
 
10
10
  class APIKeyListParams(TypedDict, total=False):
11
+ include_deleted: bool
12
+ """Deprecated: use status=all instead.
13
+
14
+ When true, include deleted (soft-deleted) API keys in the results for audit
15
+ purposes.
16
+ """
17
+
11
18
  limit: int
12
19
  """Maximum number of results to return"""
13
20
 
@@ -25,3 +32,11 @@ class APIKeyListParams(TypedDict, total=False):
25
32
 
26
33
  sort_direction: Literal["asc", "desc"]
27
34
  """Sort direction for API keys."""
35
+
36
+ status: Literal["active", "deleted", "all"]
37
+ """Filter API keys by status.
38
+
39
+ "active" returns keys that are not deleted (default; expired-but-not-deleted
40
+ keys are still included), "deleted" returns only soft-deleted keys, "all"
41
+ returns both.
42
+ """
@@ -0,0 +1,15 @@
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 TypedDict
6
+
7
+ __all__ = ["APIKeyRetrieveParams"]
8
+
9
+
10
+ class APIKeyRetrieveParams(TypedDict, total=False):
11
+ include_deleted: bool
12
+ """
13
+ When true, return the API key even if it has been deleted (soft-deleted), for
14
+ audit purposes. Defaults to false, which returns 404 for a deleted key.
15
+ """
@@ -0,0 +1,23 @@
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 Optional
6
+ from typing_extensions import TypedDict
7
+
8
+ __all__ = ["APIKeyRotateParams"]
9
+
10
+
11
+ class APIKeyRotateParams(TypedDict, total=False):
12
+ days_to_expire: Optional[int]
13
+ """Lifetime in days for the new key, up to 3650.
14
+
15
+ Omit to reuse the rotated key's original lifetime, or never-expires if it had
16
+ none.
17
+ """
18
+
19
+ expire_in_days: Optional[int]
20
+ """Grace period in days before the rotated key expires.
21
+
22
+ Use 0 to expire it immediately. Omit for the default grace period of 7 days.
23
+ """