anchorbrowser 0.1.0a3__py3-none-any.whl → 0.2.0__py3-none-any.whl

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 (80) hide show
  1. anchorbrowser/__init__.py +3 -1
  2. anchorbrowser/_base_client.py +16 -13
  3. anchorbrowser/_client.py +38 -9
  4. anchorbrowser/_compat.py +48 -48
  5. anchorbrowser/_files.py +4 -4
  6. anchorbrowser/_models.py +54 -45
  7. anchorbrowser/_qs.py +7 -7
  8. anchorbrowser/_types.py +53 -12
  9. anchorbrowser/_utils/__init__.py +9 -2
  10. anchorbrowser/_utils/_compat.py +45 -0
  11. anchorbrowser/_utils/_datetime_parse.py +136 -0
  12. anchorbrowser/_utils/_transform.py +13 -3
  13. anchorbrowser/_utils/_typing.py +6 -1
  14. anchorbrowser/_utils/_utils.py +4 -5
  15. anchorbrowser/_version.py +1 -1
  16. anchorbrowser/lib/browser.py +1 -1
  17. anchorbrowser/resources/__init__.py +42 -0
  18. anchorbrowser/resources/batch_sessions.py +288 -0
  19. anchorbrowser/resources/events.py +270 -0
  20. anchorbrowser/resources/extensions.py +9 -9
  21. anchorbrowser/resources/profiles.py +24 -150
  22. anchorbrowser/resources/sessions/__init__.py +14 -0
  23. anchorbrowser/resources/sessions/agent/__init__.py +33 -0
  24. anchorbrowser/resources/sessions/agent/agent.py +273 -0
  25. anchorbrowser/resources/sessions/agent/files.py +280 -0
  26. anchorbrowser/resources/sessions/all.py +5 -5
  27. anchorbrowser/resources/sessions/clipboard.py +5 -5
  28. anchorbrowser/resources/sessions/keyboard.py +11 -13
  29. anchorbrowser/resources/sessions/mouse.py +12 -244
  30. anchorbrowser/resources/sessions/recordings/primary.py +3 -3
  31. anchorbrowser/resources/sessions/recordings/recordings.py +7 -7
  32. anchorbrowser/resources/sessions/sessions.py +345 -30
  33. anchorbrowser/resources/task/__init__.py +33 -0
  34. anchorbrowser/resources/task/run.py +225 -0
  35. anchorbrowser/resources/task/task.py +358 -0
  36. anchorbrowser/resources/tools.py +107 -37
  37. anchorbrowser/types/__init__.py +14 -1
  38. anchorbrowser/types/batch_session_create_params.py +487 -0
  39. anchorbrowser/types/batch_session_create_response.py +27 -0
  40. anchorbrowser/types/batch_session_retrieve_response.py +90 -0
  41. anchorbrowser/types/event_signal_params.py +13 -0
  42. anchorbrowser/types/event_wait_for_params.py +14 -0
  43. anchorbrowser/types/event_wait_for_response.py +12 -0
  44. anchorbrowser/types/extension_manifest.py +6 -1
  45. anchorbrowser/types/profile_create_params.py +3 -6
  46. anchorbrowser/types/profile_list_response.py +0 -3
  47. anchorbrowser/types/profile_retrieve_response.py +0 -3
  48. anchorbrowser/types/session_create_params.py +308 -29
  49. anchorbrowser/types/session_list_pages_response.py +25 -0
  50. anchorbrowser/types/session_retrieve_response.py +46 -0
  51. anchorbrowser/types/session_scroll_params.py +3 -0
  52. anchorbrowser/types/session_upload_file_params.py +14 -0
  53. anchorbrowser/types/session_upload_file_response.py +17 -0
  54. anchorbrowser/types/sessions/__init__.py +0 -4
  55. anchorbrowser/types/sessions/agent/__init__.py +7 -0
  56. anchorbrowser/types/sessions/agent/file_list_response.py +32 -0
  57. anchorbrowser/types/sessions/agent/file_upload_params.py +14 -0
  58. anchorbrowser/types/sessions/agent/file_upload_response.py +17 -0
  59. anchorbrowser/types/sessions/keyboard_shortcut_params.py +2 -2
  60. anchorbrowser/types/sessions/recording_list_response.py +4 -8
  61. anchorbrowser/types/task/__init__.py +6 -0
  62. anchorbrowser/types/task/run_execute_params.py +324 -0
  63. anchorbrowser/types/task/run_execute_response.py +33 -0
  64. anchorbrowser/types/task_create_params.py +317 -0
  65. anchorbrowser/types/task_create_response.py +345 -0
  66. anchorbrowser/types/task_list_params.py +15 -0
  67. anchorbrowser/types/task_list_response.py +361 -0
  68. anchorbrowser/types/tool_fetch_webpage_params.py +15 -0
  69. anchorbrowser/types/tool_perform_web_task_params.py +17 -1
  70. anchorbrowser/types/tool_perform_web_task_response.py +3 -3
  71. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.2.0.dist-info}/METADATA +13 -14
  72. anchorbrowser-0.2.0.dist-info/RECORD +126 -0
  73. anchorbrowser/types/profile_update_params.py +0 -27
  74. anchorbrowser/types/sessions/mouse_down_params.py +0 -18
  75. anchorbrowser/types/sessions/mouse_down_response.py +0 -11
  76. anchorbrowser/types/sessions/mouse_up_params.py +0 -18
  77. anchorbrowser/types/sessions/mouse_up_response.py +0 -11
  78. anchorbrowser-0.1.0a3.dist-info/RECORD +0 -100
  79. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.2.0.dist-info}/WHEEL +0 -0
  80. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import Mapping, Iterable, cast
5
6
  from typing_extensions import Literal
6
7
 
7
8
  import httpx
@@ -27,10 +28,11 @@ from ...types import (
27
28
  session_paste_params,
28
29
  session_create_params,
29
30
  session_scroll_params,
31
+ session_upload_file_params,
30
32
  session_drag_and_drop_params,
31
33
  )
32
- from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
33
- from ..._utils import maybe_transform, async_maybe_transform
34
+ from ..._types import Body, Omit, Query, Headers, NotGiven, FileTypes, omit, not_given
35
+ from ..._utils import extract_files, maybe_transform, deepcopy_minimal, async_maybe_transform
34
36
  from .keyboard import (
35
37
  KeyboardResource,
36
38
  AsyncKeyboardResource,
@@ -63,6 +65,14 @@ from ..._response import (
63
65
  async_to_custom_raw_response_wrapper,
64
66
  async_to_custom_streamed_response_wrapper,
65
67
  )
68
+ from .agent.agent import (
69
+ AgentResource,
70
+ AsyncAgentResource,
71
+ AgentResourceWithRawResponse,
72
+ AsyncAgentResourceWithRawResponse,
73
+ AgentResourceWithStreamingResponse,
74
+ AsyncAgentResourceWithStreamingResponse,
75
+ )
66
76
  from ..._base_client import make_request_options
67
77
  from .recordings.recordings import (
68
78
  RecordingsResource,
@@ -78,6 +88,9 @@ from ...types.session_paste_response import SessionPasteResponse
78
88
  from ...types.session_create_response import SessionCreateResponse
79
89
  from ...types.session_scroll_response import SessionScrollResponse
80
90
  from ...types.shared.success_response import SuccessResponse
91
+ from ...types.session_retrieve_response import SessionRetrieveResponse
92
+ from ...types.session_list_pages_response import SessionListPagesResponse
93
+ from ...types.session_upload_file_response import SessionUploadFileResponse
81
94
  from ...types.session_drag_and_drop_response import SessionDragAndDropResponse
82
95
  from ...types.session_retrieve_downloads_response import SessionRetrieveDownloadsResponse
83
96
 
@@ -104,6 +117,9 @@ class SessionsResource(SyncAPIResource):
104
117
  @cached_property
105
118
  def clipboard(self) -> ClipboardResource:
106
119
  return ClipboardResource(self._client)
120
+ @cached_property
121
+ def agent(self) -> AgentResource:
122
+ return AgentResource(self._client)
107
123
 
108
124
  @cached_property
109
125
  def with_raw_response(self) -> SessionsResourceWithRawResponse:
@@ -127,14 +143,15 @@ class SessionsResource(SyncAPIResource):
127
143
  def create(
128
144
  self,
129
145
  *,
130
- browser: session_create_params.Browser | NotGiven = NOT_GIVEN,
131
- session: session_create_params.Session | NotGiven = NOT_GIVEN,
146
+ browser: session_create_params.Browser | Omit = omit,
147
+ integrations: Iterable[session_create_params.Integration] | Omit = omit,
148
+ session: session_create_params.Session | Omit = omit,
132
149
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
133
150
  # The extra values given here take precedence over values defined on the client or passed to this method.
134
151
  extra_headers: Headers | None = None,
135
152
  extra_query: Query | None = None,
136
153
  extra_body: Body | None = None,
137
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
154
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
138
155
  ) -> SessionCreateResponse:
139
156
  """
140
157
  Allocates a new browser session for the user, with optional configurations for
@@ -143,6 +160,9 @@ class SessionsResource(SyncAPIResource):
143
160
  Args:
144
161
  browser: Browser-specific configurations.
145
162
 
163
+ integrations: Array of integrations to load in the browser session. Integrations must be
164
+ previously created using the Integrations API.
165
+
146
166
  session: Session-related configurations.
147
167
 
148
168
  extra_headers: Send extra headers
@@ -158,6 +178,7 @@ class SessionsResource(SyncAPIResource):
158
178
  body=maybe_transform(
159
179
  {
160
180
  "browser": browser,
181
+ "integrations": integrations,
161
182
  "session": session,
162
183
  },
163
184
  session_create_params.SessionCreateParams,
@@ -168,6 +189,39 @@ class SessionsResource(SyncAPIResource):
168
189
  cast_to=SessionCreateResponse,
169
190
  )
170
191
 
192
+ def retrieve(
193
+ self,
194
+ session_id: str,
195
+ *,
196
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
197
+ # The extra values given here take precedence over values defined on the client or passed to this method.
198
+ extra_headers: Headers | None = None,
199
+ extra_query: Query | None = None,
200
+ extra_body: Body | None = None,
201
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
202
+ ) -> SessionRetrieveResponse:
203
+ """
204
+ Retrieves detailed information about a specific browser session.
205
+
206
+ Args:
207
+ extra_headers: Send extra headers
208
+
209
+ extra_query: Add additional query parameters to the request
210
+
211
+ extra_body: Add additional JSON properties to the request
212
+
213
+ timeout: Override the client-level default timeout for this request, in seconds
214
+ """
215
+ if not session_id:
216
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
217
+ return self._get(
218
+ f"/v1/sessions/{session_id}",
219
+ options=make_request_options(
220
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
221
+ ),
222
+ cast_to=SessionRetrieveResponse,
223
+ )
224
+
171
225
  def delete(
172
226
  self,
173
227
  session_id: str,
@@ -177,7 +231,7 @@ class SessionsResource(SyncAPIResource):
177
231
  extra_headers: Headers | None = None,
178
232
  extra_query: Query | None = None,
179
233
  extra_body: Body | None = None,
180
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
234
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
181
235
  ) -> SuccessResponse:
182
236
  """
183
237
  Deletes the browser session associated with the provided browser session ID.
@@ -211,7 +265,7 @@ class SessionsResource(SyncAPIResource):
211
265
  extra_headers: Headers | None = None,
212
266
  extra_query: Query | None = None,
213
267
  extra_body: Body | None = None,
214
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
268
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
215
269
  ) -> SessionCopyResponse:
216
270
  """
217
271
  Copies the currently selected text to the clipboard
@@ -243,13 +297,13 @@ class SessionsResource(SyncAPIResource):
243
297
  end_y: int,
244
298
  start_x: int,
245
299
  start_y: int,
246
- button: Literal["left", "middle", "right"] | NotGiven = NOT_GIVEN,
300
+ button: Literal["left", "middle", "right"] | Omit = omit,
247
301
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
248
302
  # The extra values given here take precedence over values defined on the client or passed to this method.
249
303
  extra_headers: Headers | None = None,
250
304
  extra_query: Query | None = None,
251
305
  extra_body: Body | None = None,
252
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
306
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
253
307
  ) -> SessionDragAndDropResponse:
254
308
  """
255
309
  Performs a drag and drop operation from start coordinates to end coordinates
@@ -303,7 +357,7 @@ class SessionsResource(SyncAPIResource):
303
357
  extra_headers: Headers | None = None,
304
358
  extra_query: Query | None = None,
305
359
  extra_body: Body | None = None,
306
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
360
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
307
361
  ) -> SessionGotoResponse:
308
362
  """
309
363
  Navigates the browser session to the specified URL
@@ -330,6 +384,39 @@ class SessionsResource(SyncAPIResource):
330
384
  cast_to=SessionGotoResponse,
331
385
  )
332
386
 
387
+ def list_pages(
388
+ self,
389
+ session_id: str,
390
+ *,
391
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
392
+ # The extra values given here take precedence over values defined on the client or passed to this method.
393
+ extra_headers: Headers | None = None,
394
+ extra_query: Query | None = None,
395
+ extra_body: Body | None = None,
396
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
397
+ ) -> SessionListPagesResponse:
398
+ """
399
+ Retrieves a list of pages associated with a specific browser session.
400
+
401
+ Args:
402
+ extra_headers: Send extra headers
403
+
404
+ extra_query: Add additional query parameters to the request
405
+
406
+ extra_body: Add additional JSON properties to the request
407
+
408
+ timeout: Override the client-level default timeout for this request, in seconds
409
+ """
410
+ if not session_id:
411
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
412
+ return self._get(
413
+ f"/v1/sessions/{session_id}/pages",
414
+ options=make_request_options(
415
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
416
+ ),
417
+ cast_to=SessionListPagesResponse,
418
+ )
419
+
333
420
  def paste(
334
421
  self,
335
422
  session_id: str,
@@ -340,7 +427,7 @@ class SessionsResource(SyncAPIResource):
340
427
  extra_headers: Headers | None = None,
341
428
  extra_query: Query | None = None,
342
429
  extra_body: Body | None = None,
343
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
430
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
344
431
  ) -> SessionPasteResponse:
345
432
  """
346
433
  Pastes text at the current cursor position
@@ -376,7 +463,7 @@ class SessionsResource(SyncAPIResource):
376
463
  extra_headers: Headers | None = None,
377
464
  extra_query: Query | None = None,
378
465
  extra_body: Body | None = None,
379
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
466
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
380
467
  ) -> SessionRetrieveDownloadsResponse:
381
468
  """Retrieves metadata of files downloaded during a browser session.
382
469
 
@@ -411,7 +498,7 @@ class SessionsResource(SyncAPIResource):
411
498
  extra_headers: Headers | None = None,
412
499
  extra_query: Query | None = None,
413
500
  extra_body: Body | None = None,
414
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
501
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
415
502
  ) -> BinaryAPIResponse:
416
503
  """
417
504
  Takes a screenshot of the current browser session and returns it as an image.
@@ -443,14 +530,15 @@ class SessionsResource(SyncAPIResource):
443
530
  delta_y: int,
444
531
  x: int,
445
532
  y: int,
446
- delta_x: int | NotGiven = NOT_GIVEN,
447
- steps: int | NotGiven = NOT_GIVEN,
533
+ delta_x: int | Omit = omit,
534
+ steps: int | Omit = omit,
535
+ use_os: bool | Omit = omit,
448
536
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
449
537
  # The extra values given here take precedence over values defined on the client or passed to this method.
450
538
  extra_headers: Headers | None = None,
451
539
  extra_query: Query | None = None,
452
540
  extra_body: Body | None = None,
453
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
541
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
454
542
  ) -> SessionScrollResponse:
455
543
  """
456
544
  Performs a scroll action at the specified coordinates
@@ -466,6 +554,8 @@ class SessionsResource(SyncAPIResource):
466
554
 
467
555
  steps: Number of steps to break the scroll into for smoother scrolling
468
556
 
557
+ use_os: Whether to use the OS scroll or the Playwright scroll
558
+
469
559
  extra_headers: Send extra headers
470
560
 
471
561
  extra_query: Add additional query parameters to the request
@@ -485,6 +575,7 @@ class SessionsResource(SyncAPIResource):
485
575
  "y": y,
486
576
  "delta_x": delta_x,
487
577
  "steps": steps,
578
+ "use_os": use_os,
488
579
  },
489
580
  session_scroll_params.SessionScrollParams,
490
581
  ),
@@ -494,6 +585,54 @@ class SessionsResource(SyncAPIResource):
494
585
  cast_to=SessionScrollResponse,
495
586
  )
496
587
 
588
+ def upload_file(
589
+ self,
590
+ session_id: str,
591
+ *,
592
+ file: FileTypes,
593
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
594
+ # The extra values given here take precedence over values defined on the client or passed to this method.
595
+ extra_headers: Headers | None = None,
596
+ extra_query: Query | None = None,
597
+ extra_body: Body | None = None,
598
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
599
+ ) -> SessionUploadFileResponse:
600
+ """
601
+ Upload files directly to a browser session for use with web forms and file
602
+ inputs.
603
+
604
+ Files are saved to the session's uploads directory and can be referenced in CDP
605
+ commands.
606
+
607
+ Args:
608
+ file: File to upload to the browser session
609
+
610
+ extra_headers: Send extra headers
611
+
612
+ extra_query: Add additional query parameters to the request
613
+
614
+ extra_body: Add additional JSON properties to the request
615
+
616
+ timeout: Override the client-level default timeout for this request, in seconds
617
+ """
618
+ if not session_id:
619
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
620
+ body = deepcopy_minimal({"file": file})
621
+ files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
622
+ # It should be noted that the actual Content-Type header that will be
623
+ # sent to the server will contain a `boundary` parameter, e.g.
624
+ # multipart/form-data; boundary=---abc--
625
+ extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
626
+ return self._post(
627
+ f"/v1/sessions/{session_id}/uploads",
628
+ body=maybe_transform(body, session_upload_file_params.SessionUploadFileParams),
629
+ files=files,
630
+ options=make_request_options(
631
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
632
+ ),
633
+ cast_to=SessionUploadFileResponse,
634
+ )
635
+
497
636
 
498
637
  class AsyncSessionsResource(AsyncAPIResource):
499
638
  @cached_property
@@ -515,6 +654,9 @@ class AsyncSessionsResource(AsyncAPIResource):
515
654
  @cached_property
516
655
  def clipboard(self) -> AsyncClipboardResource:
517
656
  return AsyncClipboardResource(self._client)
657
+ @cached_property
658
+ def agent(self) -> AsyncAgentResource:
659
+ return AsyncAgentResource(self._client)
518
660
 
519
661
  @cached_property
520
662
  def with_raw_response(self) -> AsyncSessionsResourceWithRawResponse:
@@ -538,14 +680,15 @@ class AsyncSessionsResource(AsyncAPIResource):
538
680
  async def create(
539
681
  self,
540
682
  *,
541
- browser: session_create_params.Browser | NotGiven = NOT_GIVEN,
542
- session: session_create_params.Session | NotGiven = NOT_GIVEN,
683
+ browser: session_create_params.Browser | Omit = omit,
684
+ integrations: Iterable[session_create_params.Integration] | Omit = omit,
685
+ session: session_create_params.Session | Omit = omit,
543
686
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
544
687
  # The extra values given here take precedence over values defined on the client or passed to this method.
545
688
  extra_headers: Headers | None = None,
546
689
  extra_query: Query | None = None,
547
690
  extra_body: Body | None = None,
548
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
691
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
549
692
  ) -> SessionCreateResponse:
550
693
  """
551
694
  Allocates a new browser session for the user, with optional configurations for
@@ -554,6 +697,9 @@ class AsyncSessionsResource(AsyncAPIResource):
554
697
  Args:
555
698
  browser: Browser-specific configurations.
556
699
 
700
+ integrations: Array of integrations to load in the browser session. Integrations must be
701
+ previously created using the Integrations API.
702
+
557
703
  session: Session-related configurations.
558
704
 
559
705
  extra_headers: Send extra headers
@@ -569,6 +715,7 @@ class AsyncSessionsResource(AsyncAPIResource):
569
715
  body=await async_maybe_transform(
570
716
  {
571
717
  "browser": browser,
718
+ "integrations": integrations,
572
719
  "session": session,
573
720
  },
574
721
  session_create_params.SessionCreateParams,
@@ -579,6 +726,39 @@ class AsyncSessionsResource(AsyncAPIResource):
579
726
  cast_to=SessionCreateResponse,
580
727
  )
581
728
 
729
+ async def retrieve(
730
+ self,
731
+ session_id: str,
732
+ *,
733
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
734
+ # The extra values given here take precedence over values defined on the client or passed to this method.
735
+ extra_headers: Headers | None = None,
736
+ extra_query: Query | None = None,
737
+ extra_body: Body | None = None,
738
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
739
+ ) -> SessionRetrieveResponse:
740
+ """
741
+ Retrieves detailed information about a specific browser session.
742
+
743
+ Args:
744
+ extra_headers: Send extra headers
745
+
746
+ extra_query: Add additional query parameters to the request
747
+
748
+ extra_body: Add additional JSON properties to the request
749
+
750
+ timeout: Override the client-level default timeout for this request, in seconds
751
+ """
752
+ if not session_id:
753
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
754
+ return await self._get(
755
+ f"/v1/sessions/{session_id}",
756
+ options=make_request_options(
757
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
758
+ ),
759
+ cast_to=SessionRetrieveResponse,
760
+ )
761
+
582
762
  async def delete(
583
763
  self,
584
764
  session_id: str,
@@ -588,7 +768,7 @@ class AsyncSessionsResource(AsyncAPIResource):
588
768
  extra_headers: Headers | None = None,
589
769
  extra_query: Query | None = None,
590
770
  extra_body: Body | None = None,
591
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
771
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
592
772
  ) -> SuccessResponse:
593
773
  """
594
774
  Deletes the browser session associated with the provided browser session ID.
@@ -622,7 +802,7 @@ class AsyncSessionsResource(AsyncAPIResource):
622
802
  extra_headers: Headers | None = None,
623
803
  extra_query: Query | None = None,
624
804
  extra_body: Body | None = None,
625
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
805
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
626
806
  ) -> SessionCopyResponse:
627
807
  """
628
808
  Copies the currently selected text to the clipboard
@@ -654,13 +834,13 @@ class AsyncSessionsResource(AsyncAPIResource):
654
834
  end_y: int,
655
835
  start_x: int,
656
836
  start_y: int,
657
- button: Literal["left", "middle", "right"] | NotGiven = NOT_GIVEN,
837
+ button: Literal["left", "middle", "right"] | Omit = omit,
658
838
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
659
839
  # The extra values given here take precedence over values defined on the client or passed to this method.
660
840
  extra_headers: Headers | None = None,
661
841
  extra_query: Query | None = None,
662
842
  extra_body: Body | None = None,
663
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
843
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
664
844
  ) -> SessionDragAndDropResponse:
665
845
  """
666
846
  Performs a drag and drop operation from start coordinates to end coordinates
@@ -714,7 +894,7 @@ class AsyncSessionsResource(AsyncAPIResource):
714
894
  extra_headers: Headers | None = None,
715
895
  extra_query: Query | None = None,
716
896
  extra_body: Body | None = None,
717
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
897
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
718
898
  ) -> SessionGotoResponse:
719
899
  """
720
900
  Navigates the browser session to the specified URL
@@ -741,6 +921,39 @@ class AsyncSessionsResource(AsyncAPIResource):
741
921
  cast_to=SessionGotoResponse,
742
922
  )
743
923
 
924
+ async def list_pages(
925
+ self,
926
+ session_id: str,
927
+ *,
928
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
929
+ # The extra values given here take precedence over values defined on the client or passed to this method.
930
+ extra_headers: Headers | None = None,
931
+ extra_query: Query | None = None,
932
+ extra_body: Body | None = None,
933
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
934
+ ) -> SessionListPagesResponse:
935
+ """
936
+ Retrieves a list of pages associated with a specific browser session.
937
+
938
+ Args:
939
+ extra_headers: Send extra headers
940
+
941
+ extra_query: Add additional query parameters to the request
942
+
943
+ extra_body: Add additional JSON properties to the request
944
+
945
+ timeout: Override the client-level default timeout for this request, in seconds
946
+ """
947
+ if not session_id:
948
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
949
+ return await self._get(
950
+ f"/v1/sessions/{session_id}/pages",
951
+ options=make_request_options(
952
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
953
+ ),
954
+ cast_to=SessionListPagesResponse,
955
+ )
956
+
744
957
  async def paste(
745
958
  self,
746
959
  session_id: str,
@@ -751,7 +964,7 @@ class AsyncSessionsResource(AsyncAPIResource):
751
964
  extra_headers: Headers | None = None,
752
965
  extra_query: Query | None = None,
753
966
  extra_body: Body | None = None,
754
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
967
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
755
968
  ) -> SessionPasteResponse:
756
969
  """
757
970
  Pastes text at the current cursor position
@@ -787,7 +1000,7 @@ class AsyncSessionsResource(AsyncAPIResource):
787
1000
  extra_headers: Headers | None = None,
788
1001
  extra_query: Query | None = None,
789
1002
  extra_body: Body | None = None,
790
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1003
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
791
1004
  ) -> SessionRetrieveDownloadsResponse:
792
1005
  """Retrieves metadata of files downloaded during a browser session.
793
1006
 
@@ -822,7 +1035,7 @@ class AsyncSessionsResource(AsyncAPIResource):
822
1035
  extra_headers: Headers | None = None,
823
1036
  extra_query: Query | None = None,
824
1037
  extra_body: Body | None = None,
825
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1038
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
826
1039
  ) -> AsyncBinaryAPIResponse:
827
1040
  """
828
1041
  Takes a screenshot of the current browser session and returns it as an image.
@@ -854,14 +1067,15 @@ class AsyncSessionsResource(AsyncAPIResource):
854
1067
  delta_y: int,
855
1068
  x: int,
856
1069
  y: int,
857
- delta_x: int | NotGiven = NOT_GIVEN,
858
- steps: int | NotGiven = NOT_GIVEN,
1070
+ delta_x: int | Omit = omit,
1071
+ steps: int | Omit = omit,
1072
+ use_os: bool | Omit = omit,
859
1073
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
860
1074
  # The extra values given here take precedence over values defined on the client or passed to this method.
861
1075
  extra_headers: Headers | None = None,
862
1076
  extra_query: Query | None = None,
863
1077
  extra_body: Body | None = None,
864
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1078
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
865
1079
  ) -> SessionScrollResponse:
866
1080
  """
867
1081
  Performs a scroll action at the specified coordinates
@@ -877,6 +1091,8 @@ class AsyncSessionsResource(AsyncAPIResource):
877
1091
 
878
1092
  steps: Number of steps to break the scroll into for smoother scrolling
879
1093
 
1094
+ use_os: Whether to use the OS scroll or the Playwright scroll
1095
+
880
1096
  extra_headers: Send extra headers
881
1097
 
882
1098
  extra_query: Add additional query parameters to the request
@@ -896,6 +1112,7 @@ class AsyncSessionsResource(AsyncAPIResource):
896
1112
  "y": y,
897
1113
  "delta_x": delta_x,
898
1114
  "steps": steps,
1115
+ "use_os": use_os,
899
1116
  },
900
1117
  session_scroll_params.SessionScrollParams,
901
1118
  ),
@@ -905,6 +1122,54 @@ class AsyncSessionsResource(AsyncAPIResource):
905
1122
  cast_to=SessionScrollResponse,
906
1123
  )
907
1124
 
1125
+ async def upload_file(
1126
+ self,
1127
+ session_id: str,
1128
+ *,
1129
+ file: FileTypes,
1130
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1131
+ # The extra values given here take precedence over values defined on the client or passed to this method.
1132
+ extra_headers: Headers | None = None,
1133
+ extra_query: Query | None = None,
1134
+ extra_body: Body | None = None,
1135
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
1136
+ ) -> SessionUploadFileResponse:
1137
+ """
1138
+ Upload files directly to a browser session for use with web forms and file
1139
+ inputs.
1140
+
1141
+ Files are saved to the session's uploads directory and can be referenced in CDP
1142
+ commands.
1143
+
1144
+ Args:
1145
+ file: File to upload to the browser session
1146
+
1147
+ extra_headers: Send extra headers
1148
+
1149
+ extra_query: Add additional query parameters to the request
1150
+
1151
+ extra_body: Add additional JSON properties to the request
1152
+
1153
+ timeout: Override the client-level default timeout for this request, in seconds
1154
+ """
1155
+ if not session_id:
1156
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
1157
+ body = deepcopy_minimal({"file": file})
1158
+ files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
1159
+ # It should be noted that the actual Content-Type header that will be
1160
+ # sent to the server will contain a `boundary` parameter, e.g.
1161
+ # multipart/form-data; boundary=---abc--
1162
+ extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
1163
+ return await self._post(
1164
+ f"/v1/sessions/{session_id}/uploads",
1165
+ body=await async_maybe_transform(body, session_upload_file_params.SessionUploadFileParams),
1166
+ files=files,
1167
+ options=make_request_options(
1168
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1169
+ ),
1170
+ cast_to=SessionUploadFileResponse,
1171
+ )
1172
+
908
1173
 
909
1174
  class SessionsResourceWithRawResponse:
910
1175
  def __init__(self, sessions: SessionsResource) -> None:
@@ -913,6 +1178,9 @@ class SessionsResourceWithRawResponse:
913
1178
  self.create = to_raw_response_wrapper(
914
1179
  sessions.create,
915
1180
  )
1181
+ self.retrieve = to_raw_response_wrapper(
1182
+ sessions.retrieve,
1183
+ )
916
1184
  self.delete = to_raw_response_wrapper(
917
1185
  sessions.delete,
918
1186
  )
@@ -925,6 +1193,9 @@ class SessionsResourceWithRawResponse:
925
1193
  self.goto = to_raw_response_wrapper(
926
1194
  sessions.goto,
927
1195
  )
1196
+ self.list_pages = to_raw_response_wrapper(
1197
+ sessions.list_pages,
1198
+ )
928
1199
  self.paste = to_raw_response_wrapper(
929
1200
  sessions.paste,
930
1201
  )
@@ -938,6 +1209,9 @@ class SessionsResourceWithRawResponse:
938
1209
  self.scroll = to_raw_response_wrapper(
939
1210
  sessions.scroll,
940
1211
  )
1212
+ self.upload_file = to_raw_response_wrapper(
1213
+ sessions.upload_file,
1214
+ )
941
1215
 
942
1216
  @cached_property
943
1217
  def all(self) -> AllResourceWithRawResponse:
@@ -959,6 +1233,10 @@ class SessionsResourceWithRawResponse:
959
1233
  def clipboard(self) -> ClipboardResourceWithRawResponse:
960
1234
  return ClipboardResourceWithRawResponse(self._sessions.clipboard)
961
1235
 
1236
+ @cached_property
1237
+ def agent(self) -> AgentResourceWithRawResponse:
1238
+ return AgentResourceWithRawResponse(self._sessions.agent)
1239
+
962
1240
 
963
1241
  class AsyncSessionsResourceWithRawResponse:
964
1242
  def __init__(self, sessions: AsyncSessionsResource) -> None:
@@ -967,6 +1245,9 @@ class AsyncSessionsResourceWithRawResponse:
967
1245
  self.create = async_to_raw_response_wrapper(
968
1246
  sessions.create,
969
1247
  )
1248
+ self.retrieve = async_to_raw_response_wrapper(
1249
+ sessions.retrieve,
1250
+ )
970
1251
  self.delete = async_to_raw_response_wrapper(
971
1252
  sessions.delete,
972
1253
  )
@@ -979,6 +1260,9 @@ class AsyncSessionsResourceWithRawResponse:
979
1260
  self.goto = async_to_raw_response_wrapper(
980
1261
  sessions.goto,
981
1262
  )
1263
+ self.list_pages = async_to_raw_response_wrapper(
1264
+ sessions.list_pages,
1265
+ )
982
1266
  self.paste = async_to_raw_response_wrapper(
983
1267
  sessions.paste,
984
1268
  )
@@ -992,6 +1276,9 @@ class AsyncSessionsResourceWithRawResponse:
992
1276
  self.scroll = async_to_raw_response_wrapper(
993
1277
  sessions.scroll,
994
1278
  )
1279
+ self.upload_file = async_to_raw_response_wrapper(
1280
+ sessions.upload_file,
1281
+ )
995
1282
 
996
1283
  @cached_property
997
1284
  def all(self) -> AsyncAllResourceWithRawResponse:
@@ -1013,6 +1300,9 @@ class AsyncSessionsResourceWithRawResponse:
1013
1300
  def clipboard(self) -> AsyncClipboardResourceWithRawResponse:
1014
1301
  return AsyncClipboardResourceWithRawResponse(self._sessions.clipboard)
1015
1302
 
1303
+ @cached_property
1304
+ def agent(self) -> AsyncAgentResourceWithRawResponse:
1305
+ return AsyncAgentResourceWithRawResponse(self._sessions.agent)
1016
1306
 
1017
1307
  class SessionsResourceWithStreamingResponse:
1018
1308
  def __init__(self, sessions: SessionsResource) -> None:
@@ -1021,6 +1311,9 @@ class SessionsResourceWithStreamingResponse:
1021
1311
  self.create = to_streamed_response_wrapper(
1022
1312
  sessions.create,
1023
1313
  )
1314
+ self.retrieve = to_streamed_response_wrapper(
1315
+ sessions.retrieve,
1316
+ )
1024
1317
  self.delete = to_streamed_response_wrapper(
1025
1318
  sessions.delete,
1026
1319
  )
@@ -1033,6 +1326,9 @@ class SessionsResourceWithStreamingResponse:
1033
1326
  self.goto = to_streamed_response_wrapper(
1034
1327
  sessions.goto,
1035
1328
  )
1329
+ self.list_pages = to_streamed_response_wrapper(
1330
+ sessions.list_pages,
1331
+ )
1036
1332
  self.paste = to_streamed_response_wrapper(
1037
1333
  sessions.paste,
1038
1334
  )
@@ -1046,6 +1342,9 @@ class SessionsResourceWithStreamingResponse:
1046
1342
  self.scroll = to_streamed_response_wrapper(
1047
1343
  sessions.scroll,
1048
1344
  )
1345
+ self.upload_file = to_streamed_response_wrapper(
1346
+ sessions.upload_file,
1347
+ )
1049
1348
 
1050
1349
  @cached_property
1051
1350
  def all(self) -> AllResourceWithStreamingResponse:
@@ -1067,6 +1366,9 @@ class SessionsResourceWithStreamingResponse:
1067
1366
  def clipboard(self) -> ClipboardResourceWithStreamingResponse:
1068
1367
  return ClipboardResourceWithStreamingResponse(self._sessions.clipboard)
1069
1368
 
1369
+ @cached_property
1370
+ def agent(self) -> AgentResourceWithStreamingResponse:
1371
+ return AgentResourceWithStreamingResponse(self._sessions.agent)
1070
1372
 
1071
1373
  class AsyncSessionsResourceWithStreamingResponse:
1072
1374
  def __init__(self, sessions: AsyncSessionsResource) -> None:
@@ -1075,6 +1377,9 @@ class AsyncSessionsResourceWithStreamingResponse:
1075
1377
  self.create = async_to_streamed_response_wrapper(
1076
1378
  sessions.create,
1077
1379
  )
1380
+ self.retrieve = async_to_streamed_response_wrapper(
1381
+ sessions.retrieve,
1382
+ )
1078
1383
  self.delete = async_to_streamed_response_wrapper(
1079
1384
  sessions.delete,
1080
1385
  )
@@ -1087,6 +1392,9 @@ class AsyncSessionsResourceWithStreamingResponse:
1087
1392
  self.goto = async_to_streamed_response_wrapper(
1088
1393
  sessions.goto,
1089
1394
  )
1395
+ self.list_pages = async_to_streamed_response_wrapper(
1396
+ sessions.list_pages,
1397
+ )
1090
1398
  self.paste = async_to_streamed_response_wrapper(
1091
1399
  sessions.paste,
1092
1400
  )
@@ -1100,6 +1408,9 @@ class AsyncSessionsResourceWithStreamingResponse:
1100
1408
  self.scroll = async_to_streamed_response_wrapper(
1101
1409
  sessions.scroll,
1102
1410
  )
1411
+ self.upload_file = async_to_streamed_response_wrapper(
1412
+ sessions.upload_file,
1413
+ )
1103
1414
 
1104
1415
  @cached_property
1105
1416
  def all(self) -> AsyncAllResourceWithStreamingResponse:
@@ -1120,3 +1431,7 @@ class AsyncSessionsResourceWithStreamingResponse:
1120
1431
  @cached_property
1121
1432
  def clipboard(self) -> AsyncClipboardResourceWithStreamingResponse:
1122
1433
  return AsyncClipboardResourceWithStreamingResponse(self._sessions.clipboard)
1434
+
1435
+ @cached_property
1436
+ def agent(self) -> AsyncAgentResourceWithStreamingResponse:
1437
+ return AsyncAgentResourceWithStreamingResponse(self._sessions.agent)