anchorbrowser 0.6.1__tar.gz → 0.7.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 (200) hide show
  1. anchorbrowser-0.7.0/.release-please-manifest.json +3 -0
  2. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/CHANGELOG.md +17 -0
  3. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/PKG-INFO +1 -1
  4. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/api.md +9 -48
  5. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/pyproject.toml +1 -1
  6. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_base_client.py +134 -11
  7. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_client.py +1 -2
  8. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_models.py +16 -1
  9. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_types.py +9 -0
  10. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_version.py +1 -1
  11. anchorbrowser-0.7.0/src/anchorbrowser/resources/extensions.py +135 -0
  12. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/agent/files.py +0 -83
  13. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/clipboard.py +0 -79
  14. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/mouse.py +1 -114
  15. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/recordings/recordings.py +0 -158
  16. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/sessions.py +0 -246
  17. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/task.py +24 -8
  18. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/__init__.py +2 -8
  19. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/__init__.py +0 -5
  20. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/agent/__init__.py +0 -1
  21. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/task_run_params.py +8 -2
  22. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/task_run_response.py +2 -2
  23. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/agent/test_files.py +1 -85
  24. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/test_clipboard.py +1 -85
  25. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/test_mouse.py +1 -127
  26. anchorbrowser-0.7.0/tests/api_resources/sessions/test_recordings.py +108 -0
  27. anchorbrowser-0.7.0/tests/api_resources/test_extensions.py +80 -0
  28. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/test_sessions.py +0 -263
  29. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/test_task.py +30 -22
  30. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_client.py +185 -2
  31. anchorbrowser-0.6.1/.release-please-manifest.json +0 -3
  32. anchorbrowser-0.6.1/src/anchorbrowser/resources/extensions.py +0 -412
  33. anchorbrowser-0.6.1/src/anchorbrowser/resources/task/run.py +0 -217
  34. anchorbrowser-0.6.1/src/anchorbrowser/types/extension_delete_response.py +0 -12
  35. anchorbrowser-0.6.1/src/anchorbrowser/types/extension_retrieve_response.py +0 -27
  36. anchorbrowser-0.6.1/src/anchorbrowser/types/extension_upload_params.py +0 -17
  37. anchorbrowser-0.6.1/src/anchorbrowser/types/extension_upload_response.py +0 -31
  38. anchorbrowser-0.6.1/src/anchorbrowser/types/session_copy_response.py +0 -12
  39. anchorbrowser-0.6.1/src/anchorbrowser/types/session_list_pages_response.py +0 -25
  40. anchorbrowser-0.6.1/src/anchorbrowser/types/session_paste_params.py +0 -12
  41. anchorbrowser-0.6.1/src/anchorbrowser/types/session_paste_response.py +0 -11
  42. anchorbrowser-0.6.1/src/anchorbrowser/types/sessions/agent/file_list_response.py +0 -32
  43. anchorbrowser-0.6.1/src/anchorbrowser/types/sessions/clipboard_get_response.py +0 -16
  44. anchorbrowser-0.6.1/src/anchorbrowser/types/sessions/mouse_double_click_params.py +0 -18
  45. anchorbrowser-0.6.1/src/anchorbrowser/types/sessions/mouse_double_click_response.py +0 -11
  46. anchorbrowser-0.6.1/src/anchorbrowser/types/sessions/recording_pause_response.py +0 -12
  47. anchorbrowser-0.6.1/src/anchorbrowser/types/sessions/recording_resume_response.py +0 -12
  48. anchorbrowser-0.6.1/tests/api_resources/sessions/test_recordings.py +0 -276
  49. anchorbrowser-0.6.1/tests/api_resources/test_extensions.py +0 -327
  50. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/.gitignore +0 -0
  51. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/CONTRIBUTING.md +0 -0
  52. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/LICENSE +0 -0
  53. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/README.md +0 -0
  54. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/SECURITY.md +0 -0
  55. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/bin/check-release-environment +0 -0
  56. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/bin/publish-pypi +0 -0
  57. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/examples/.keep +0 -0
  58. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/noxfile.py +0 -0
  59. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/release-please-config.json +0 -0
  60. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/requirements-dev.lock +0 -0
  61. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/requirements.lock +0 -0
  62. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/__init__.py +0 -0
  63. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_compat.py +0 -0
  64. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_constants.py +0 -0
  65. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_exceptions.py +0 -0
  66. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_files.py +0 -0
  67. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_qs.py +0 -0
  68. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_resource.py +0 -0
  69. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_response.py +0 -0
  70. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_streaming.py +0 -0
  71. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/__init__.py +0 -0
  72. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_compat.py +0 -0
  73. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_datetime_parse.py +0 -0
  74. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_logs.py +0 -0
  75. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_proxy.py +0 -0
  76. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_reflection.py +0 -0
  77. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_resources_proxy.py +0 -0
  78. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_streams.py +0 -0
  79. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_sync.py +0 -0
  80. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_transform.py +0 -0
  81. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_typing.py +0 -0
  82. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/_utils/_utils.py +0 -0
  83. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/lib/.keep +0 -0
  84. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/lib/agent.py +0 -0
  85. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/lib/browser.py +0 -0
  86. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/py.typed +0 -0
  87. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/__init__.py +0 -0
  88. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/agent.py +0 -0
  89. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/applications/__init__.py +0 -0
  90. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/applications/applications.py +0 -0
  91. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/applications/auth_flows.py +0 -0
  92. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/browser.py +0 -0
  93. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/events.py +0 -0
  94. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/identities.py +0 -0
  95. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/profiles.py +0 -0
  96. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/__init__.py +0 -0
  97. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/agent/__init__.py +0 -0
  98. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/agent/agent.py +0 -0
  99. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/all.py +0 -0
  100. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/keyboard.py +0 -0
  101. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/recordings/__init__.py +0 -0
  102. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/sessions/recordings/primary.py +0 -0
  103. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/resources/tools.py +0 -0
  104. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_create_identity_token_params.py +0 -0
  105. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_create_identity_token_response.py +0 -0
  106. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_create_params.py +0 -0
  107. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_create_response.py +0 -0
  108. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_delete_response.py +0 -0
  109. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_list_identities_params.py +0 -0
  110. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_list_identities_response.py +0 -0
  111. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_list_params.py +0 -0
  112. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_list_response.py +0 -0
  113. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/application_retrieve_response.py +0 -0
  114. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/applications/__init__.py +0 -0
  115. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/applications/auth_flow_create_params.py +0 -0
  116. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/applications/auth_flow_create_response.py +0 -0
  117. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/applications/auth_flow_delete_response.py +0 -0
  118. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/applications/auth_flow_list_response.py +0 -0
  119. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/applications/auth_flow_update_params.py +0 -0
  120. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/applications/auth_flow_update_response.py +0 -0
  121. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/event_signal_params.py +0 -0
  122. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/event_wait_for_params.py +0 -0
  123. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/event_wait_for_response.py +0 -0
  124. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/extension_list_response.py +0 -0
  125. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/extension_manifest.py +0 -0
  126. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/identity_create_params.py +0 -0
  127. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/identity_create_response.py +0 -0
  128. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/identity_delete_response.py +0 -0
  129. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/identity_retrieve_credentials_response.py +0 -0
  130. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/identity_retrieve_response.py +0 -0
  131. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/identity_update_params.py +0 -0
  132. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/identity_update_response.py +0 -0
  133. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/profile_create_params.py +0 -0
  134. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/profile_list_response.py +0 -0
  135. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/profile_retrieve_response.py +0 -0
  136. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_create_params.py +0 -0
  137. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_create_response.py +0 -0
  138. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_drag_and_drop_params.py +0 -0
  139. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_drag_and_drop_response.py +0 -0
  140. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_goto_params.py +0 -0
  141. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_goto_response.py +0 -0
  142. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_retrieve_downloads_response.py +0 -0
  143. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_retrieve_response.py +0 -0
  144. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_scroll_params.py +0 -0
  145. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_scroll_response.py +0 -0
  146. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_upload_file_params.py +0 -0
  147. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/session_upload_file_response.py +0 -0
  148. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/agent/file_upload_params.py +0 -0
  149. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/agent/file_upload_response.py +0 -0
  150. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/all_status_response.py +0 -0
  151. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/clipboard_set_params.py +0 -0
  152. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/clipboard_set_response.py +0 -0
  153. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/keyboard_shortcut_params.py +0 -0
  154. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/keyboard_shortcut_response.py +0 -0
  155. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/keyboard_type_params.py +0 -0
  156. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/keyboard_type_response.py +0 -0
  157. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/mouse_click_params.py +0 -0
  158. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/mouse_click_response.py +0 -0
  159. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/mouse_move_params.py +0 -0
  160. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/mouse_move_response.py +0 -0
  161. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/recording_list_response.py +0 -0
  162. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/sessions/recordings/__init__.py +0 -0
  163. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/shared/__init__.py +0 -0
  164. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/shared/success_response.py +0 -0
  165. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/task_create_params.py +0 -0
  166. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/task_create_response.py +0 -0
  167. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/task_list_params.py +0 -0
  168. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/task_list_response.py +0 -0
  169. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/tool_fetch_webpage_params.py +0 -0
  170. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/tool_fetch_webpage_response.py +0 -0
  171. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/tool_perform_web_task_params.py +0 -0
  172. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/tool_perform_web_task_response.py +0 -0
  173. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/src/anchorbrowser/types/tool_screenshot_webpage_params.py +0 -0
  174. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/__init__.py +0 -0
  175. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/__init__.py +0 -0
  176. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/__init__.py +0 -0
  177. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/recordings/__init__.py +0 -0
  178. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/recordings/test_primary.py +0 -0
  179. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/test_agent.py +0 -0
  180. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/test_all.py +0 -0
  181. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/sessions/test_keyboard.py +0 -0
  182. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/test_events.py +0 -0
  183. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/test_identities.py +0 -0
  184. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/test_profiles.py +0 -0
  185. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/api_resources/test_tools.py +0 -0
  186. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/conftest.py +0 -0
  187. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/sample_file.txt +0 -0
  188. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_deepcopy.py +0 -0
  189. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_extract_files.py +0 -0
  190. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_files.py +0 -0
  191. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_models.py +0 -0
  192. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_qs.py +0 -0
  193. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_required_args.py +0 -0
  194. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_response.py +0 -0
  195. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_streaming.py +0 -0
  196. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_transform.py +0 -0
  197. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_utils/test_datetime_parse.py +0 -0
  198. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_utils/test_proxy.py +0 -0
  199. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/test_utils/test_typing.py +0 -0
  200. {anchorbrowser-0.6.1 → anchorbrowser-0.7.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.7.0"
3
+ }
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.0 (2026-01-14)
4
+
5
+ Full Changelog: [v0.6.2...v0.7.0](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/compare/v0.6.2...v0.7.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** manual updates ([cc4db06](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/commit/cc4db0601ddb4ca2bd37bc56415678d69b1e65df))
10
+
11
+ ## 0.6.2 (2026-01-14)
12
+
13
+ Full Changelog: [v0.6.1...v0.6.2](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/compare/v0.6.1...v0.6.2)
14
+
15
+ ### Features
16
+
17
+ * added cleanup session ([028df9f](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/commit/028df9f2a5c709db205c75a3bf525e599deda75f))
18
+ * **client:** add support for binary request streaming ([d496f05](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/commit/d496f05331dc564dfa14cf68e7ed3fefbb9d204e))
19
+
3
20
  ## 0.6.1 (2026-01-05)
4
21
 
5
22
  Full Changelog: [v0.6.0...v0.6.1](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/compare/v0.6.0...v0.6.1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: anchorbrowser
3
- Version: 0.6.1
3
+ Version: 0.7.0
4
4
  Summary: The official Python library for the anchorbrowser API
5
5
  Project-URL: Homepage, https://github.com/anchorbrowser/AnchorBrowser-SDK-Python
6
6
  Project-URL: Repository, https://github.com/anchorbrowser/AnchorBrowser-SDK-Python
@@ -27,11 +27,8 @@ Types:
27
27
  from anchorbrowser.types import (
28
28
  SessionCreateResponse,
29
29
  SessionRetrieveResponse,
30
- SessionCopyResponse,
31
30
  SessionDragAndDropResponse,
32
31
  SessionGotoResponse,
33
- SessionListPagesResponse,
34
- SessionPasteResponse,
35
32
  SessionRetrieveDownloadsResponse,
36
33
  SessionScrollResponse,
37
34
  SessionUploadFileResponse,
@@ -43,11 +40,8 @@ Methods:
43
40
  - <code title="post /v1/sessions">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">create</a>(\*\*<a href="src/anchorbrowser/types/session_create_params.py">params</a>) -> <a href="./src/anchorbrowser/types/session_create_response.py">SessionCreateResponse</a></code>
44
41
  - <code title="get /v1/sessions/{session_id}">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">retrieve</a>(session_id) -> <a href="./src/anchorbrowser/types/session_retrieve_response.py">SessionRetrieveResponse</a></code>
45
42
  - <code title="delete /v1/sessions/{session_id}">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">delete</a>(session_id) -> <a href="./src/anchorbrowser/types/shared/success_response.py">SuccessResponse</a></code>
46
- - <code title="post /v1/sessions/{sessionId}/copy">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">copy</a>(session_id) -> <a href="./src/anchorbrowser/types/session_copy_response.py">SessionCopyResponse</a></code>
47
43
  - <code title="post /v1/sessions/{sessionId}/drag-and-drop">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">drag_and_drop</a>(session_id, \*\*<a href="src/anchorbrowser/types/session_drag_and_drop_params.py">params</a>) -> <a href="./src/anchorbrowser/types/session_drag_and_drop_response.py">SessionDragAndDropResponse</a></code>
48
44
  - <code title="post /v1/sessions/{sessionId}/goto">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">goto</a>(session_id, \*\*<a href="src/anchorbrowser/types/session_goto_params.py">params</a>) -> <a href="./src/anchorbrowser/types/session_goto_response.py">SessionGotoResponse</a></code>
49
- - <code title="get /v1/sessions/{session_id}/pages">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">list_pages</a>(session_id) -> <a href="./src/anchorbrowser/types/session_list_pages_response.py">SessionListPagesResponse</a></code>
50
- - <code title="post /v1/sessions/{sessionId}/paste">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">paste</a>(session_id, \*\*<a href="src/anchorbrowser/types/session_paste_params.py">params</a>) -> <a href="./src/anchorbrowser/types/session_paste_response.py">SessionPasteResponse</a></code>
51
45
  - <code title="get /v1/sessions/{session_id}/downloads">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">retrieve_downloads</a>(session_id) -> <a href="./src/anchorbrowser/types/session_retrieve_downloads_response.py">SessionRetrieveDownloadsResponse</a></code>
52
46
  - <code title="get /v1/sessions/{sessionId}/screenshot">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">retrieve_screenshot</a>(session_id) -> BinaryAPIResponse</code>
53
47
  - <code title="post /v1/sessions/{sessionId}/scroll">client.sessions.<a href="./src/anchorbrowser/resources/sessions/sessions.py">scroll</a>(session_id, \*\*<a href="src/anchorbrowser/types/session_scroll_params.py">params</a>) -> <a href="./src/anchorbrowser/types/session_scroll_response.py">SessionScrollResponse</a></code>
@@ -71,18 +65,12 @@ Methods:
71
65
  Types:
72
66
 
73
67
  ```python
74
- from anchorbrowser.types.sessions import (
75
- RecordingListResponse,
76
- RecordingPauseResponse,
77
- RecordingResumeResponse,
78
- )
68
+ from anchorbrowser.types.sessions import RecordingListResponse
79
69
  ```
80
70
 
81
71
  Methods:
82
72
 
83
73
  - <code title="get /v1/sessions/{session_id}/recordings">client.sessions.recordings.<a href="./src/anchorbrowser/resources/sessions/recordings/recordings.py">list</a>(session_id) -> <a href="./src/anchorbrowser/types/sessions/recording_list_response.py">RecordingListResponse</a></code>
84
- - <code title="post /v1/sessions/{session_id}/recordings/pause">client.sessions.recordings.<a href="./src/anchorbrowser/resources/sessions/recordings/recordings.py">pause</a>(session_id) -> <a href="./src/anchorbrowser/types/sessions/recording_pause_response.py">RecordingPauseResponse</a></code>
85
- - <code title="post /v1/sessions/{session_id}/recordings/resume">client.sessions.recordings.<a href="./src/anchorbrowser/resources/sessions/recordings/recordings.py">resume</a>(session_id) -> <a href="./src/anchorbrowser/types/sessions/recording_resume_response.py">RecordingResumeResponse</a></code>
86
74
 
87
75
  ### Primary
88
76
 
@@ -95,17 +83,12 @@ Methods:
95
83
  Types:
96
84
 
97
85
  ```python
98
- from anchorbrowser.types.sessions import (
99
- MouseClickResponse,
100
- MouseDoubleClickResponse,
101
- MouseMoveResponse,
102
- )
86
+ from anchorbrowser.types.sessions import MouseClickResponse, MouseMoveResponse
103
87
  ```
104
88
 
105
89
  Methods:
106
90
 
107
91
  - <code title="post /v1/sessions/{sessionId}/mouse/click">client.sessions.mouse.<a href="./src/anchorbrowser/resources/sessions/mouse.py">click</a>(session_id, \*\*<a href="src/anchorbrowser/types/sessions/mouse_click_params.py">params</a>) -> <a href="./src/anchorbrowser/types/sessions/mouse_click_response.py">MouseClickResponse</a></code>
108
- - <code title="post /v1/sessions/{sessionId}/mouse/doubleClick">client.sessions.mouse.<a href="./src/anchorbrowser/resources/sessions/mouse.py">double_click</a>(session_id, \*\*<a href="src/anchorbrowser/types/sessions/mouse_double_click_params.py">params</a>) -> <a href="./src/anchorbrowser/types/sessions/mouse_double_click_response.py">MouseDoubleClickResponse</a></code>
109
92
  - <code title="post /v1/sessions/{sessionId}/mouse/move">client.sessions.mouse.<a href="./src/anchorbrowser/resources/sessions/mouse.py">move</a>(session_id, \*\*<a href="src/anchorbrowser/types/sessions/mouse_move_params.py">params</a>) -> <a href="./src/anchorbrowser/types/sessions/mouse_move_response.py">MouseMoveResponse</a></code>
110
93
 
111
94
  ## Keyboard
@@ -126,12 +109,11 @@ Methods:
126
109
  Types:
127
110
 
128
111
  ```python
129
- from anchorbrowser.types.sessions import ClipboardGetResponse, ClipboardSetResponse
112
+ from anchorbrowser.types.sessions import ClipboardSetResponse
130
113
  ```
131
114
 
132
115
  Methods:
133
116
 
134
- - <code title="get /v1/sessions/{sessionId}/clipboard">client.sessions.clipboard.<a href="./src/anchorbrowser/resources/sessions/clipboard.py">get</a>(session_id) -> <a href="./src/anchorbrowser/types/sessions/clipboard_get_response.py">ClipboardGetResponse</a></code>
135
117
  - <code title="post /v1/sessions/{sessionId}/clipboard">client.sessions.clipboard.<a href="./src/anchorbrowser/resources/sessions/clipboard.py">set</a>(session_id, \*\*<a href="src/anchorbrowser/types/sessions/clipboard_set_params.py">params</a>) -> <a href="./src/anchorbrowser/types/sessions/clipboard_set_response.py">ClipboardSetResponse</a></code>
136
118
 
137
119
  ## Agent
@@ -146,12 +128,11 @@ Methods:
146
128
  Types:
147
129
 
148
130
  ```python
149
- from anchorbrowser.types.sessions.agent import FileListResponse, FileUploadResponse
131
+ from anchorbrowser.types.sessions.agent import FileUploadResponse
150
132
  ```
151
133
 
152
134
  Methods:
153
135
 
154
- - <code title="get /v1/sessions/{sessionId}/agent/files">client.sessions.agent.files.<a href="./src/anchorbrowser/resources/sessions/agent/files.py">list</a>(session_id) -> <a href="./src/anchorbrowser/types/sessions/agent/file_list_response.py">FileListResponse</a></code>
155
136
  - <code title="post /v1/sessions/{sessionId}/agent/files">client.sessions.agent.files.<a href="./src/anchorbrowser/resources/sessions/agent/files.py">upload</a>(session_id, \*\*<a href="src/anchorbrowser/types/sessions/agent/file_upload_params.py">params</a>) -> <a href="./src/anchorbrowser/types/sessions/agent/file_upload_response.py">FileUploadResponse</a></code>
156
137
 
157
138
  # Tools
@@ -173,21 +154,12 @@ Methods:
173
154
  Types:
174
155
 
175
156
  ```python
176
- from anchorbrowser.types import (
177
- ExtensionManifest,
178
- ExtensionRetrieveResponse,
179
- ExtensionListResponse,
180
- ExtensionDeleteResponse,
181
- ExtensionUploadResponse,
182
- )
157
+ from anchorbrowser.types import ExtensionManifest, ExtensionListResponse
183
158
  ```
184
159
 
185
160
  Methods:
186
161
 
187
- - <code title="get /v1/extensions/{id}">client.extensions.<a href="./src/anchorbrowser/resources/extensions.py">retrieve</a>(id) -> <a href="./src/anchorbrowser/types/extension_retrieve_response.py">ExtensionRetrieveResponse</a></code>
188
162
  - <code title="get /v1/extensions">client.extensions.<a href="./src/anchorbrowser/resources/extensions.py">list</a>() -> <a href="./src/anchorbrowser/types/extension_list_response.py">ExtensionListResponse</a></code>
189
- - <code title="delete /v1/extensions/{id}">client.extensions.<a href="./src/anchorbrowser/resources/extensions.py">delete</a>(id) -> <a href="./src/anchorbrowser/types/extension_delete_response.py">ExtensionDeleteResponse</a></code>
190
- - <code title="post /v1/extensions">client.extensions.<a href="./src/anchorbrowser/resources/extensions.py">upload</a>(\*\*<a href="src/anchorbrowser/types/extension_upload_params.py">params</a>) -> <a href="./src/anchorbrowser/types/extension_upload_response.py">ExtensionUploadResponse</a></code>
191
163
 
192
164
  # Events
193
165
 
@@ -207,25 +179,14 @@ Methods:
207
179
  Types:
208
180
 
209
181
  ```python
210
- from anchorbrowser.types import TaskCreateResponse, TaskListResponse
211
- ```
212
-
213
- Methods:
214
-
215
- - <code title="post /v1/task">client.task.<a href="./src/anchorbrowser/resources/task/task.py">create</a>(\*\*<a href="src/anchorbrowser/types/task_create_params.py">params</a>) -> <a href="./src/anchorbrowser/types/task_create_response.py">TaskCreateResponse</a></code>
216
- - <code title="get /v1/task">client.task.<a href="./src/anchorbrowser/resources/task/task.py">list</a>(\*\*<a href="src/anchorbrowser/types/task_list_params.py">params</a>) -> <a href="./src/anchorbrowser/types/task_list_response.py">TaskListResponse</a></code>
217
-
218
- ## Run
219
-
220
- Types:
221
-
222
- ```python
223
- from anchorbrowser.types.task import RunExecuteResponse
182
+ from anchorbrowser.types import TaskCreateResponse, TaskListResponse, TaskRunResponse
224
183
  ```
225
184
 
226
185
  Methods:
227
186
 
228
- - <code title="post /v1/task/run">client.task.run.<a href="./src/anchorbrowser/resources/task/run.py">execute</a>(\*\*<a href="src/anchorbrowser/types/task/run_execute_params.py">params</a>) -> <a href="./src/anchorbrowser/types/task/run_execute_response.py">RunExecuteResponse</a></code>
187
+ - <code title="post /v1/task">client.task.<a href="./src/anchorbrowser/resources/task.py">create</a>(\*\*<a href="src/anchorbrowser/types/task_create_params.py">params</a>) -> <a href="./src/anchorbrowser/types/task_create_response.py">TaskCreateResponse</a></code>
188
+ - <code title="get /v1/task">client.task.<a href="./src/anchorbrowser/resources/task.py">list</a>(\*\*<a href="src/anchorbrowser/types/task_list_params.py">params</a>) -> <a href="./src/anchorbrowser/types/task_list_response.py">TaskListResponse</a></code>
189
+ - <code title="post /v1/task/run">client.task.<a href="./src/anchorbrowser/resources/task.py">run</a>(\*\*<a href="src/anchorbrowser/types/task_run_params.py">params</a>) -> <a href="./src/anchorbrowser/types/task_run_response.py">TaskRunResponse</a></code>
229
190
 
230
191
  # Identities
231
192
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "anchorbrowser"
3
- version = "0.6.1"
3
+ version = "0.7.0"
4
4
  description = "The official Python library for the anchorbrowser API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -9,6 +9,7 @@ import asyncio
9
9
  import inspect
10
10
  import logging
11
11
  import platform
12
+ import warnings
12
13
  import email.utils
13
14
  from types import TracebackType
14
15
  from random import random
@@ -51,9 +52,11 @@ from ._types import (
51
52
  ResponseT,
52
53
  AnyMapping,
53
54
  PostParser,
55
+ BinaryTypes,
54
56
  RequestFiles,
55
57
  HttpxSendArgs,
56
58
  RequestOptions,
59
+ AsyncBinaryTypes,
57
60
  HttpxRequestFiles,
58
61
  ModelBuilderProtocol,
59
62
  not_given,
@@ -477,8 +480,19 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
477
480
  retries_taken: int = 0,
478
481
  ) -> httpx.Request:
479
482
  if log.isEnabledFor(logging.DEBUG):
480
- log.debug("Request options: %s", model_dump(options, exclude_unset=True))
481
-
483
+ log.debug(
484
+ "Request options: %s",
485
+ model_dump(
486
+ options,
487
+ exclude_unset=True,
488
+ # Pydantic v1 can't dump every type we support in content, so we exclude it for now.
489
+ exclude={
490
+ "content",
491
+ }
492
+ if PYDANTIC_V1
493
+ else {},
494
+ ),
495
+ )
482
496
  kwargs: dict[str, Any] = {}
483
497
 
484
498
  json_data = options.json_data
@@ -532,7 +546,13 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
532
546
  is_body_allowed = options.method.lower() != "get"
533
547
 
534
548
  if is_body_allowed:
535
- if isinstance(json_data, bytes):
549
+ if options.content is not None and json_data is not None:
550
+ raise TypeError("Passing both `content` and `json_data` is not supported")
551
+ if options.content is not None and files is not None:
552
+ raise TypeError("Passing both `content` and `files` is not supported")
553
+ if options.content is not None:
554
+ kwargs["content"] = options.content
555
+ elif isinstance(json_data, bytes):
536
556
  kwargs["content"] = json_data
537
557
  else:
538
558
  kwargs["json"] = json_data if is_given(json_data) else None
@@ -1194,6 +1214,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1194
1214
  *,
1195
1215
  cast_to: Type[ResponseT],
1196
1216
  body: Body | None = None,
1217
+ content: BinaryTypes | None = None,
1197
1218
  options: RequestOptions = {},
1198
1219
  files: RequestFiles | None = None,
1199
1220
  stream: Literal[False] = False,
@@ -1206,6 +1227,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1206
1227
  *,
1207
1228
  cast_to: Type[ResponseT],
1208
1229
  body: Body | None = None,
1230
+ content: BinaryTypes | None = None,
1209
1231
  options: RequestOptions = {},
1210
1232
  files: RequestFiles | None = None,
1211
1233
  stream: Literal[True],
@@ -1219,6 +1241,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1219
1241
  *,
1220
1242
  cast_to: Type[ResponseT],
1221
1243
  body: Body | None = None,
1244
+ content: BinaryTypes | None = None,
1222
1245
  options: RequestOptions = {},
1223
1246
  files: RequestFiles | None = None,
1224
1247
  stream: bool,
@@ -1231,13 +1254,25 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1231
1254
  *,
1232
1255
  cast_to: Type[ResponseT],
1233
1256
  body: Body | None = None,
1257
+ content: BinaryTypes | None = None,
1234
1258
  options: RequestOptions = {},
1235
1259
  files: RequestFiles | None = None,
1236
1260
  stream: bool = False,
1237
1261
  stream_cls: type[_StreamT] | None = None,
1238
1262
  ) -> ResponseT | _StreamT:
1263
+ if body is not None and content is not None:
1264
+ raise TypeError("Passing both `body` and `content` is not supported")
1265
+ if files is not None and content is not None:
1266
+ raise TypeError("Passing both `files` and `content` is not supported")
1267
+ if isinstance(body, bytes):
1268
+ warnings.warn(
1269
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1270
+ "Please pass raw bytes via the `content` parameter instead.",
1271
+ DeprecationWarning,
1272
+ stacklevel=2,
1273
+ )
1239
1274
  opts = FinalRequestOptions.construct(
1240
- method="post", url=path, json_data=body, files=to_httpx_files(files), **options
1275
+ method="post", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1241
1276
  )
1242
1277
  return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
1243
1278
 
@@ -1247,11 +1282,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1247
1282
  *,
1248
1283
  cast_to: Type[ResponseT],
1249
1284
  body: Body | None = None,
1285
+ content: BinaryTypes | None = None,
1250
1286
  files: RequestFiles | None = None,
1251
1287
  options: RequestOptions = {},
1252
1288
  ) -> ResponseT:
1289
+ if body is not None and content is not None:
1290
+ raise TypeError("Passing both `body` and `content` is not supported")
1291
+ if files is not None and content is not None:
1292
+ raise TypeError("Passing both `files` and `content` is not supported")
1293
+ if isinstance(body, bytes):
1294
+ warnings.warn(
1295
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1296
+ "Please pass raw bytes via the `content` parameter instead.",
1297
+ DeprecationWarning,
1298
+ stacklevel=2,
1299
+ )
1253
1300
  opts = FinalRequestOptions.construct(
1254
- method="patch", url=path, json_data=body, files=to_httpx_files(files), **options
1301
+ method="patch", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1255
1302
  )
1256
1303
  return self.request(cast_to, opts)
1257
1304
 
@@ -1261,11 +1308,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1261
1308
  *,
1262
1309
  cast_to: Type[ResponseT],
1263
1310
  body: Body | None = None,
1311
+ content: BinaryTypes | None = None,
1264
1312
  files: RequestFiles | None = None,
1265
1313
  options: RequestOptions = {},
1266
1314
  ) -> ResponseT:
1315
+ if body is not None and content is not None:
1316
+ raise TypeError("Passing both `body` and `content` is not supported")
1317
+ if files is not None and content is not None:
1318
+ raise TypeError("Passing both `files` and `content` is not supported")
1319
+ if isinstance(body, bytes):
1320
+ warnings.warn(
1321
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1322
+ "Please pass raw bytes via the `content` parameter instead.",
1323
+ DeprecationWarning,
1324
+ stacklevel=2,
1325
+ )
1267
1326
  opts = FinalRequestOptions.construct(
1268
- method="put", url=path, json_data=body, files=to_httpx_files(files), **options
1327
+ method="put", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1269
1328
  )
1270
1329
  return self.request(cast_to, opts)
1271
1330
 
@@ -1275,9 +1334,19 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1275
1334
  *,
1276
1335
  cast_to: Type[ResponseT],
1277
1336
  body: Body | None = None,
1337
+ content: BinaryTypes | None = None,
1278
1338
  options: RequestOptions = {},
1279
1339
  ) -> ResponseT:
1280
- opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options)
1340
+ if body is not None and content is not None:
1341
+ raise TypeError("Passing both `body` and `content` is not supported")
1342
+ if isinstance(body, bytes):
1343
+ warnings.warn(
1344
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1345
+ "Please pass raw bytes via the `content` parameter instead.",
1346
+ DeprecationWarning,
1347
+ stacklevel=2,
1348
+ )
1349
+ opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, content=content, **options)
1281
1350
  return self.request(cast_to, opts)
1282
1351
 
1283
1352
  def get_api_list(
@@ -1717,6 +1786,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1717
1786
  *,
1718
1787
  cast_to: Type[ResponseT],
1719
1788
  body: Body | None = None,
1789
+ content: AsyncBinaryTypes | None = None,
1720
1790
  files: RequestFiles | None = None,
1721
1791
  options: RequestOptions = {},
1722
1792
  stream: Literal[False] = False,
@@ -1729,6 +1799,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1729
1799
  *,
1730
1800
  cast_to: Type[ResponseT],
1731
1801
  body: Body | None = None,
1802
+ content: AsyncBinaryTypes | None = None,
1732
1803
  files: RequestFiles | None = None,
1733
1804
  options: RequestOptions = {},
1734
1805
  stream: Literal[True],
@@ -1742,6 +1813,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1742
1813
  *,
1743
1814
  cast_to: Type[ResponseT],
1744
1815
  body: Body | None = None,
1816
+ content: AsyncBinaryTypes | None = None,
1745
1817
  files: RequestFiles | None = None,
1746
1818
  options: RequestOptions = {},
1747
1819
  stream: bool,
@@ -1754,13 +1826,25 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1754
1826
  *,
1755
1827
  cast_to: Type[ResponseT],
1756
1828
  body: Body | None = None,
1829
+ content: AsyncBinaryTypes | None = None,
1757
1830
  files: RequestFiles | None = None,
1758
1831
  options: RequestOptions = {},
1759
1832
  stream: bool = False,
1760
1833
  stream_cls: type[_AsyncStreamT] | None = None,
1761
1834
  ) -> ResponseT | _AsyncStreamT:
1835
+ if body is not None and content is not None:
1836
+ raise TypeError("Passing both `body` and `content` is not supported")
1837
+ if files is not None and content is not None:
1838
+ raise TypeError("Passing both `files` and `content` is not supported")
1839
+ if isinstance(body, bytes):
1840
+ warnings.warn(
1841
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1842
+ "Please pass raw bytes via the `content` parameter instead.",
1843
+ DeprecationWarning,
1844
+ stacklevel=2,
1845
+ )
1762
1846
  opts = FinalRequestOptions.construct(
1763
- method="post", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1847
+ method="post", url=path, json_data=body, content=content, files=await async_to_httpx_files(files), **options
1764
1848
  )
1765
1849
  return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
1766
1850
 
@@ -1770,11 +1854,28 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1770
1854
  *,
1771
1855
  cast_to: Type[ResponseT],
1772
1856
  body: Body | None = None,
1857
+ content: AsyncBinaryTypes | None = None,
1773
1858
  files: RequestFiles | None = None,
1774
1859
  options: RequestOptions = {},
1775
1860
  ) -> ResponseT:
1861
+ if body is not None and content is not None:
1862
+ raise TypeError("Passing both `body` and `content` is not supported")
1863
+ if files is not None and content is not None:
1864
+ raise TypeError("Passing both `files` and `content` is not supported")
1865
+ if isinstance(body, bytes):
1866
+ warnings.warn(
1867
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1868
+ "Please pass raw bytes via the `content` parameter instead.",
1869
+ DeprecationWarning,
1870
+ stacklevel=2,
1871
+ )
1776
1872
  opts = FinalRequestOptions.construct(
1777
- method="patch", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1873
+ method="patch",
1874
+ url=path,
1875
+ json_data=body,
1876
+ content=content,
1877
+ files=await async_to_httpx_files(files),
1878
+ **options,
1778
1879
  )
1779
1880
  return await self.request(cast_to, opts)
1780
1881
 
@@ -1784,11 +1885,23 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1784
1885
  *,
1785
1886
  cast_to: Type[ResponseT],
1786
1887
  body: Body | None = None,
1888
+ content: AsyncBinaryTypes | None = None,
1787
1889
  files: RequestFiles | None = None,
1788
1890
  options: RequestOptions = {},
1789
1891
  ) -> ResponseT:
1892
+ if body is not None and content is not None:
1893
+ raise TypeError("Passing both `body` and `content` is not supported")
1894
+ if files is not None and content is not None:
1895
+ raise TypeError("Passing both `files` and `content` is not supported")
1896
+ if isinstance(body, bytes):
1897
+ warnings.warn(
1898
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1899
+ "Please pass raw bytes via the `content` parameter instead.",
1900
+ DeprecationWarning,
1901
+ stacklevel=2,
1902
+ )
1790
1903
  opts = FinalRequestOptions.construct(
1791
- method="put", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1904
+ method="put", url=path, json_data=body, content=content, files=await async_to_httpx_files(files), **options
1792
1905
  )
1793
1906
  return await self.request(cast_to, opts)
1794
1907
 
@@ -1798,9 +1911,19 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1798
1911
  *,
1799
1912
  cast_to: Type[ResponseT],
1800
1913
  body: Body | None = None,
1914
+ content: AsyncBinaryTypes | None = None,
1801
1915
  options: RequestOptions = {},
1802
1916
  ) -> ResponseT:
1803
- opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options)
1917
+ if body is not None and content is not None:
1918
+ raise TypeError("Passing both `body` and `content` is not supported")
1919
+ if isinstance(body, bytes):
1920
+ warnings.warn(
1921
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1922
+ "Please pass raw bytes via the `content` parameter instead.",
1923
+ DeprecationWarning,
1924
+ stacklevel=2,
1925
+ )
1926
+ opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, content=content, **options)
1804
1927
  return await self.request(cast_to, opts)
1805
1928
 
1806
1929
  def get_api_list(
@@ -21,7 +21,7 @@ from ._types import (
21
21
  )
22
22
  from ._utils import is_given, get_async_library
23
23
  from ._version import __version__
24
- from .resources import task, agent, tools, events, browser, profiles, extensions, identities, applications
24
+ from .resources import task, agent, tools, events, browser, profiles, sessions, extensions, identities, applications
25
25
  from ._streaming import Stream as Stream, AsyncStream as AsyncStream
26
26
  from ._exceptions import APIStatusError, AnchorbrowserError
27
27
  from ._base_client import (
@@ -29,7 +29,6 @@ from ._base_client import (
29
29
  SyncAPIClient,
30
30
  AsyncAPIClient,
31
31
  )
32
- from .resources.sessions import sessions
33
32
 
34
33
  __all__ = [
35
34
  "Timeout",
@@ -3,7 +3,20 @@ from __future__ import annotations
3
3
  import os
4
4
  import inspect
5
5
  import weakref
6
- from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
6
+ from typing import (
7
+ IO,
8
+ TYPE_CHECKING,
9
+ Any,
10
+ Type,
11
+ Union,
12
+ Generic,
13
+ TypeVar,
14
+ Callable,
15
+ Iterable,
16
+ Optional,
17
+ AsyncIterable,
18
+ cast,
19
+ )
7
20
  from datetime import date, datetime
8
21
  from typing_extensions import (
9
22
  List,
@@ -787,6 +800,7 @@ class FinalRequestOptionsInput(TypedDict, total=False):
787
800
  timeout: float | Timeout | None
788
801
  files: HttpxRequestFiles | None
789
802
  idempotency_key: str
803
+ content: Union[bytes, bytearray, IO[bytes], Iterable[bytes], AsyncIterable[bytes], None]
790
804
  json_data: Body
791
805
  extra_json: AnyMapping
792
806
  follow_redirects: bool
@@ -805,6 +819,7 @@ class FinalRequestOptions(pydantic.BaseModel):
805
819
  post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven()
806
820
  follow_redirects: Union[bool, None] = None
807
821
 
822
+ content: Union[bytes, bytearray, IO[bytes], Iterable[bytes], AsyncIterable[bytes], None] = None
808
823
  # It should be noted that we cannot use `json` here as that would override
809
824
  # a BaseModel method in an incompatible fashion.
810
825
  json_data: Union[Body, None] = None
@@ -13,9 +13,11 @@ from typing import (
13
13
  Mapping,
14
14
  TypeVar,
15
15
  Callable,
16
+ Iterable,
16
17
  Iterator,
17
18
  Optional,
18
19
  Sequence,
20
+ AsyncIterable,
19
21
  )
20
22
  from typing_extensions import (
21
23
  Set,
@@ -56,6 +58,13 @@ if TYPE_CHECKING:
56
58
  else:
57
59
  Base64FileInput = Union[IO[bytes], PathLike]
58
60
  FileContent = Union[IO[bytes], bytes, PathLike] # PathLike is not subscriptable in Python 3.8.
61
+
62
+
63
+ # Used for sending raw binary data / streaming data in request bodies
64
+ # e.g. for file uploads without multipart encoding
65
+ BinaryTypes = Union[bytes, bytearray, IO[bytes], Iterable[bytes]]
66
+ AsyncBinaryTypes = Union[bytes, bytearray, IO[bytes], AsyncIterable[bytes]]
67
+
59
68
  FileTypes = Union[
60
69
  # file (or bytes)
61
70
  FileContent,
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "anchorbrowser"
4
- __version__ = "0.6.1" # x-release-please-version
4
+ __version__ = "0.7.0" # x-release-please-version