anchorbrowser 0.1.0a3__py3-none-any.whl → 0.1.1__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 (52) hide show
  1. anchorbrowser/__init__.py +3 -1
  2. anchorbrowser/_base_client.py +16 -13
  3. anchorbrowser/_client.py +21 -9
  4. anchorbrowser/_compat.py +48 -48
  5. anchorbrowser/_files.py +4 -4
  6. anchorbrowser/_models.py +51 -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 +14 -0
  18. anchorbrowser/resources/events.py +270 -0
  19. anchorbrowser/resources/extensions.py +9 -9
  20. anchorbrowser/resources/profiles.py +31 -43
  21. anchorbrowser/resources/sessions/all.py +5 -5
  22. anchorbrowser/resources/sessions/clipboard.py +5 -5
  23. anchorbrowser/resources/sessions/keyboard.py +11 -13
  24. anchorbrowser/resources/sessions/mouse.py +19 -19
  25. anchorbrowser/resources/sessions/recordings/primary.py +3 -3
  26. anchorbrowser/resources/sessions/recordings/recordings.py +7 -7
  27. anchorbrowser/resources/sessions/sessions.py +307 -30
  28. anchorbrowser/resources/tools.py +107 -37
  29. anchorbrowser/types/__init__.py +7 -0
  30. anchorbrowser/types/event_signal_params.py +13 -0
  31. anchorbrowser/types/event_wait_for_params.py +14 -0
  32. anchorbrowser/types/event_wait_for_response.py +12 -0
  33. anchorbrowser/types/extension_manifest.py +6 -1
  34. anchorbrowser/types/profile_create_params.py +3 -6
  35. anchorbrowser/types/profile_list_response.py +0 -3
  36. anchorbrowser/types/profile_retrieve_response.py +0 -3
  37. anchorbrowser/types/profile_update_params.py +0 -6
  38. anchorbrowser/types/session_create_params.py +262 -26
  39. anchorbrowser/types/session_list_pages_response.py +25 -0
  40. anchorbrowser/types/session_retrieve_response.py +46 -0
  41. anchorbrowser/types/session_scroll_params.py +3 -0
  42. anchorbrowser/types/session_upload_file_params.py +14 -0
  43. anchorbrowser/types/session_upload_file_response.py +17 -0
  44. anchorbrowser/types/sessions/keyboard_shortcut_params.py +2 -2
  45. anchorbrowser/types/sessions/recording_list_response.py +4 -8
  46. anchorbrowser/types/tool_fetch_webpage_params.py +15 -0
  47. anchorbrowser/types/tool_perform_web_task_params.py +17 -1
  48. anchorbrowser/types/tool_perform_web_task_response.py +3 -3
  49. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.1.1.dist-info}/METADATA +8 -9
  50. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.1.1.dist-info}/RECORD +52 -42
  51. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.1.1.dist-info}/WHEEL +0 -0
  52. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.1.1.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, 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,
@@ -78,6 +80,9 @@ from ...types.session_paste_response import SessionPasteResponse
78
80
  from ...types.session_create_response import SessionCreateResponse
79
81
  from ...types.session_scroll_response import SessionScrollResponse
80
82
  from ...types.shared.success_response import SuccessResponse
83
+ from ...types.session_retrieve_response import SessionRetrieveResponse
84
+ from ...types.session_list_pages_response import SessionListPagesResponse
85
+ from ...types.session_upload_file_response import SessionUploadFileResponse
81
86
  from ...types.session_drag_and_drop_response import SessionDragAndDropResponse
82
87
  from ...types.session_retrieve_downloads_response import SessionRetrieveDownloadsResponse
83
88
 
@@ -127,14 +132,14 @@ class SessionsResource(SyncAPIResource):
127
132
  def create(
128
133
  self,
129
134
  *,
130
- browser: session_create_params.Browser | NotGiven = NOT_GIVEN,
131
- session: session_create_params.Session | NotGiven = NOT_GIVEN,
135
+ browser: session_create_params.Browser | Omit = omit,
136
+ session: session_create_params.Session | Omit = omit,
132
137
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
133
138
  # The extra values given here take precedence over values defined on the client or passed to this method.
134
139
  extra_headers: Headers | None = None,
135
140
  extra_query: Query | None = None,
136
141
  extra_body: Body | None = None,
137
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
142
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
138
143
  ) -> SessionCreateResponse:
139
144
  """
140
145
  Allocates a new browser session for the user, with optional configurations for
@@ -168,6 +173,39 @@ class SessionsResource(SyncAPIResource):
168
173
  cast_to=SessionCreateResponse,
169
174
  )
170
175
 
176
+ def retrieve(
177
+ self,
178
+ session_id: str,
179
+ *,
180
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
181
+ # The extra values given here take precedence over values defined on the client or passed to this method.
182
+ extra_headers: Headers | None = None,
183
+ extra_query: Query | None = None,
184
+ extra_body: Body | None = None,
185
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
186
+ ) -> SessionRetrieveResponse:
187
+ """
188
+ Retrieves detailed information about a specific browser session.
189
+
190
+ Args:
191
+ extra_headers: Send extra headers
192
+
193
+ extra_query: Add additional query parameters to the request
194
+
195
+ extra_body: Add additional JSON properties to the request
196
+
197
+ timeout: Override the client-level default timeout for this request, in seconds
198
+ """
199
+ if not session_id:
200
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
201
+ return self._get(
202
+ f"/v1/sessions/{session_id}",
203
+ options=make_request_options(
204
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
205
+ ),
206
+ cast_to=SessionRetrieveResponse,
207
+ )
208
+
171
209
  def delete(
172
210
  self,
173
211
  session_id: str,
@@ -177,7 +215,7 @@ class SessionsResource(SyncAPIResource):
177
215
  extra_headers: Headers | None = None,
178
216
  extra_query: Query | None = None,
179
217
  extra_body: Body | None = None,
180
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
218
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
181
219
  ) -> SuccessResponse:
182
220
  """
183
221
  Deletes the browser session associated with the provided browser session ID.
@@ -211,7 +249,7 @@ class SessionsResource(SyncAPIResource):
211
249
  extra_headers: Headers | None = None,
212
250
  extra_query: Query | None = None,
213
251
  extra_body: Body | None = None,
214
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
252
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
215
253
  ) -> SessionCopyResponse:
216
254
  """
217
255
  Copies the currently selected text to the clipboard
@@ -243,13 +281,13 @@ class SessionsResource(SyncAPIResource):
243
281
  end_y: int,
244
282
  start_x: int,
245
283
  start_y: int,
246
- button: Literal["left", "middle", "right"] | NotGiven = NOT_GIVEN,
284
+ button: Literal["left", "middle", "right"] | Omit = omit,
247
285
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
248
286
  # The extra values given here take precedence over values defined on the client or passed to this method.
249
287
  extra_headers: Headers | None = None,
250
288
  extra_query: Query | None = None,
251
289
  extra_body: Body | None = None,
252
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
290
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
253
291
  ) -> SessionDragAndDropResponse:
254
292
  """
255
293
  Performs a drag and drop operation from start coordinates to end coordinates
@@ -303,7 +341,7 @@ class SessionsResource(SyncAPIResource):
303
341
  extra_headers: Headers | None = None,
304
342
  extra_query: Query | None = None,
305
343
  extra_body: Body | None = None,
306
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
344
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
307
345
  ) -> SessionGotoResponse:
308
346
  """
309
347
  Navigates the browser session to the specified URL
@@ -330,6 +368,39 @@ class SessionsResource(SyncAPIResource):
330
368
  cast_to=SessionGotoResponse,
331
369
  )
332
370
 
371
+ def list_pages(
372
+ self,
373
+ session_id: str,
374
+ *,
375
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
376
+ # The extra values given here take precedence over values defined on the client or passed to this method.
377
+ extra_headers: Headers | None = None,
378
+ extra_query: Query | None = None,
379
+ extra_body: Body | None = None,
380
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
381
+ ) -> SessionListPagesResponse:
382
+ """
383
+ Retrieves a list of pages associated with a specific browser session.
384
+
385
+ Args:
386
+ extra_headers: Send extra headers
387
+
388
+ extra_query: Add additional query parameters to the request
389
+
390
+ extra_body: Add additional JSON properties to the request
391
+
392
+ timeout: Override the client-level default timeout for this request, in seconds
393
+ """
394
+ if not session_id:
395
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
396
+ return self._get(
397
+ f"/v1/sessions/{session_id}/pages",
398
+ options=make_request_options(
399
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
400
+ ),
401
+ cast_to=SessionListPagesResponse,
402
+ )
403
+
333
404
  def paste(
334
405
  self,
335
406
  session_id: str,
@@ -340,7 +411,7 @@ class SessionsResource(SyncAPIResource):
340
411
  extra_headers: Headers | None = None,
341
412
  extra_query: Query | None = None,
342
413
  extra_body: Body | None = None,
343
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
414
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
344
415
  ) -> SessionPasteResponse:
345
416
  """
346
417
  Pastes text at the current cursor position
@@ -376,7 +447,7 @@ class SessionsResource(SyncAPIResource):
376
447
  extra_headers: Headers | None = None,
377
448
  extra_query: Query | None = None,
378
449
  extra_body: Body | None = None,
379
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
450
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
380
451
  ) -> SessionRetrieveDownloadsResponse:
381
452
  """Retrieves metadata of files downloaded during a browser session.
382
453
 
@@ -411,7 +482,7 @@ class SessionsResource(SyncAPIResource):
411
482
  extra_headers: Headers | None = None,
412
483
  extra_query: Query | None = None,
413
484
  extra_body: Body | None = None,
414
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
485
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
415
486
  ) -> BinaryAPIResponse:
416
487
  """
417
488
  Takes a screenshot of the current browser session and returns it as an image.
@@ -443,14 +514,15 @@ class SessionsResource(SyncAPIResource):
443
514
  delta_y: int,
444
515
  x: int,
445
516
  y: int,
446
- delta_x: int | NotGiven = NOT_GIVEN,
447
- steps: int | NotGiven = NOT_GIVEN,
517
+ delta_x: int | Omit = omit,
518
+ steps: int | Omit = omit,
519
+ use_os: bool | Omit = omit,
448
520
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
449
521
  # The extra values given here take precedence over values defined on the client or passed to this method.
450
522
  extra_headers: Headers | None = None,
451
523
  extra_query: Query | None = None,
452
524
  extra_body: Body | None = None,
453
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
525
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
454
526
  ) -> SessionScrollResponse:
455
527
  """
456
528
  Performs a scroll action at the specified coordinates
@@ -466,6 +538,8 @@ class SessionsResource(SyncAPIResource):
466
538
 
467
539
  steps: Number of steps to break the scroll into for smoother scrolling
468
540
 
541
+ use_os: Whether to use the OS scroll or the Playwright scroll
542
+
469
543
  extra_headers: Send extra headers
470
544
 
471
545
  extra_query: Add additional query parameters to the request
@@ -485,6 +559,7 @@ class SessionsResource(SyncAPIResource):
485
559
  "y": y,
486
560
  "delta_x": delta_x,
487
561
  "steps": steps,
562
+ "use_os": use_os,
488
563
  },
489
564
  session_scroll_params.SessionScrollParams,
490
565
  ),
@@ -494,6 +569,54 @@ class SessionsResource(SyncAPIResource):
494
569
  cast_to=SessionScrollResponse,
495
570
  )
496
571
 
572
+ def upload_file(
573
+ self,
574
+ session_id: str,
575
+ *,
576
+ file: FileTypes,
577
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
578
+ # The extra values given here take precedence over values defined on the client or passed to this method.
579
+ extra_headers: Headers | None = None,
580
+ extra_query: Query | None = None,
581
+ extra_body: Body | None = None,
582
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
583
+ ) -> SessionUploadFileResponse:
584
+ """
585
+ Upload files directly to a browser session for use with web forms and file
586
+ inputs.
587
+
588
+ Files are saved to the session's uploads directory and can be referenced in CDP
589
+ commands.
590
+
591
+ Args:
592
+ file: File to upload to the browser session
593
+
594
+ extra_headers: Send extra headers
595
+
596
+ extra_query: Add additional query parameters to the request
597
+
598
+ extra_body: Add additional JSON properties to the request
599
+
600
+ timeout: Override the client-level default timeout for this request, in seconds
601
+ """
602
+ if not session_id:
603
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
604
+ body = deepcopy_minimal({"file": file})
605
+ files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
606
+ # It should be noted that the actual Content-Type header that will be
607
+ # sent to the server will contain a `boundary` parameter, e.g.
608
+ # multipart/form-data; boundary=---abc--
609
+ extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
610
+ return self._post(
611
+ f"/v1/sessions/{session_id}/uploads",
612
+ body=maybe_transform(body, session_upload_file_params.SessionUploadFileParams),
613
+ files=files,
614
+ options=make_request_options(
615
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
616
+ ),
617
+ cast_to=SessionUploadFileResponse,
618
+ )
619
+
497
620
 
498
621
  class AsyncSessionsResource(AsyncAPIResource):
499
622
  @cached_property
@@ -538,14 +661,14 @@ class AsyncSessionsResource(AsyncAPIResource):
538
661
  async def create(
539
662
  self,
540
663
  *,
541
- browser: session_create_params.Browser | NotGiven = NOT_GIVEN,
542
- session: session_create_params.Session | NotGiven = NOT_GIVEN,
664
+ browser: session_create_params.Browser | Omit = omit,
665
+ session: session_create_params.Session | Omit = omit,
543
666
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
544
667
  # The extra values given here take precedence over values defined on the client or passed to this method.
545
668
  extra_headers: Headers | None = None,
546
669
  extra_query: Query | None = None,
547
670
  extra_body: Body | None = None,
548
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
671
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
549
672
  ) -> SessionCreateResponse:
550
673
  """
551
674
  Allocates a new browser session for the user, with optional configurations for
@@ -579,6 +702,39 @@ class AsyncSessionsResource(AsyncAPIResource):
579
702
  cast_to=SessionCreateResponse,
580
703
  )
581
704
 
705
+ async def retrieve(
706
+ self,
707
+ session_id: str,
708
+ *,
709
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
710
+ # The extra values given here take precedence over values defined on the client or passed to this method.
711
+ extra_headers: Headers | None = None,
712
+ extra_query: Query | None = None,
713
+ extra_body: Body | None = None,
714
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
715
+ ) -> SessionRetrieveResponse:
716
+ """
717
+ Retrieves detailed information about a specific browser session.
718
+
719
+ Args:
720
+ extra_headers: Send extra headers
721
+
722
+ extra_query: Add additional query parameters to the request
723
+
724
+ extra_body: Add additional JSON properties to the request
725
+
726
+ timeout: Override the client-level default timeout for this request, in seconds
727
+ """
728
+ if not session_id:
729
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
730
+ return await self._get(
731
+ f"/v1/sessions/{session_id}",
732
+ options=make_request_options(
733
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
734
+ ),
735
+ cast_to=SessionRetrieveResponse,
736
+ )
737
+
582
738
  async def delete(
583
739
  self,
584
740
  session_id: str,
@@ -588,7 +744,7 @@ class AsyncSessionsResource(AsyncAPIResource):
588
744
  extra_headers: Headers | None = None,
589
745
  extra_query: Query | None = None,
590
746
  extra_body: Body | None = None,
591
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
747
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
592
748
  ) -> SuccessResponse:
593
749
  """
594
750
  Deletes the browser session associated with the provided browser session ID.
@@ -622,7 +778,7 @@ class AsyncSessionsResource(AsyncAPIResource):
622
778
  extra_headers: Headers | None = None,
623
779
  extra_query: Query | None = None,
624
780
  extra_body: Body | None = None,
625
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
781
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
626
782
  ) -> SessionCopyResponse:
627
783
  """
628
784
  Copies the currently selected text to the clipboard
@@ -654,13 +810,13 @@ class AsyncSessionsResource(AsyncAPIResource):
654
810
  end_y: int,
655
811
  start_x: int,
656
812
  start_y: int,
657
- button: Literal["left", "middle", "right"] | NotGiven = NOT_GIVEN,
813
+ button: Literal["left", "middle", "right"] | Omit = omit,
658
814
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
659
815
  # The extra values given here take precedence over values defined on the client or passed to this method.
660
816
  extra_headers: Headers | None = None,
661
817
  extra_query: Query | None = None,
662
818
  extra_body: Body | None = None,
663
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
819
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
664
820
  ) -> SessionDragAndDropResponse:
665
821
  """
666
822
  Performs a drag and drop operation from start coordinates to end coordinates
@@ -714,7 +870,7 @@ class AsyncSessionsResource(AsyncAPIResource):
714
870
  extra_headers: Headers | None = None,
715
871
  extra_query: Query | None = None,
716
872
  extra_body: Body | None = None,
717
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
873
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
718
874
  ) -> SessionGotoResponse:
719
875
  """
720
876
  Navigates the browser session to the specified URL
@@ -741,6 +897,39 @@ class AsyncSessionsResource(AsyncAPIResource):
741
897
  cast_to=SessionGotoResponse,
742
898
  )
743
899
 
900
+ async def list_pages(
901
+ self,
902
+ session_id: str,
903
+ *,
904
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
905
+ # The extra values given here take precedence over values defined on the client or passed to this method.
906
+ extra_headers: Headers | None = None,
907
+ extra_query: Query | None = None,
908
+ extra_body: Body | None = None,
909
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
910
+ ) -> SessionListPagesResponse:
911
+ """
912
+ Retrieves a list of pages associated with a specific browser session.
913
+
914
+ Args:
915
+ extra_headers: Send extra headers
916
+
917
+ extra_query: Add additional query parameters to the request
918
+
919
+ extra_body: Add additional JSON properties to the request
920
+
921
+ timeout: Override the client-level default timeout for this request, in seconds
922
+ """
923
+ if not session_id:
924
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
925
+ return await self._get(
926
+ f"/v1/sessions/{session_id}/pages",
927
+ options=make_request_options(
928
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
929
+ ),
930
+ cast_to=SessionListPagesResponse,
931
+ )
932
+
744
933
  async def paste(
745
934
  self,
746
935
  session_id: str,
@@ -751,7 +940,7 @@ class AsyncSessionsResource(AsyncAPIResource):
751
940
  extra_headers: Headers | None = None,
752
941
  extra_query: Query | None = None,
753
942
  extra_body: Body | None = None,
754
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
943
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
755
944
  ) -> SessionPasteResponse:
756
945
  """
757
946
  Pastes text at the current cursor position
@@ -787,7 +976,7 @@ class AsyncSessionsResource(AsyncAPIResource):
787
976
  extra_headers: Headers | None = None,
788
977
  extra_query: Query | None = None,
789
978
  extra_body: Body | None = None,
790
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
979
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
791
980
  ) -> SessionRetrieveDownloadsResponse:
792
981
  """Retrieves metadata of files downloaded during a browser session.
793
982
 
@@ -822,7 +1011,7 @@ class AsyncSessionsResource(AsyncAPIResource):
822
1011
  extra_headers: Headers | None = None,
823
1012
  extra_query: Query | None = None,
824
1013
  extra_body: Body | None = None,
825
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1014
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
826
1015
  ) -> AsyncBinaryAPIResponse:
827
1016
  """
828
1017
  Takes a screenshot of the current browser session and returns it as an image.
@@ -854,14 +1043,15 @@ class AsyncSessionsResource(AsyncAPIResource):
854
1043
  delta_y: int,
855
1044
  x: int,
856
1045
  y: int,
857
- delta_x: int | NotGiven = NOT_GIVEN,
858
- steps: int | NotGiven = NOT_GIVEN,
1046
+ delta_x: int | Omit = omit,
1047
+ steps: int | Omit = omit,
1048
+ use_os: bool | Omit = omit,
859
1049
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
860
1050
  # The extra values given here take precedence over values defined on the client or passed to this method.
861
1051
  extra_headers: Headers | None = None,
862
1052
  extra_query: Query | None = None,
863
1053
  extra_body: Body | None = None,
864
- timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1054
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
865
1055
  ) -> SessionScrollResponse:
866
1056
  """
867
1057
  Performs a scroll action at the specified coordinates
@@ -877,6 +1067,8 @@ class AsyncSessionsResource(AsyncAPIResource):
877
1067
 
878
1068
  steps: Number of steps to break the scroll into for smoother scrolling
879
1069
 
1070
+ use_os: Whether to use the OS scroll or the Playwright scroll
1071
+
880
1072
  extra_headers: Send extra headers
881
1073
 
882
1074
  extra_query: Add additional query parameters to the request
@@ -896,6 +1088,7 @@ class AsyncSessionsResource(AsyncAPIResource):
896
1088
  "y": y,
897
1089
  "delta_x": delta_x,
898
1090
  "steps": steps,
1091
+ "use_os": use_os,
899
1092
  },
900
1093
  session_scroll_params.SessionScrollParams,
901
1094
  ),
@@ -905,6 +1098,54 @@ class AsyncSessionsResource(AsyncAPIResource):
905
1098
  cast_to=SessionScrollResponse,
906
1099
  )
907
1100
 
1101
+ async def upload_file(
1102
+ self,
1103
+ session_id: str,
1104
+ *,
1105
+ file: FileTypes,
1106
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1107
+ # The extra values given here take precedence over values defined on the client or passed to this method.
1108
+ extra_headers: Headers | None = None,
1109
+ extra_query: Query | None = None,
1110
+ extra_body: Body | None = None,
1111
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
1112
+ ) -> SessionUploadFileResponse:
1113
+ """
1114
+ Upload files directly to a browser session for use with web forms and file
1115
+ inputs.
1116
+
1117
+ Files are saved to the session's uploads directory and can be referenced in CDP
1118
+ commands.
1119
+
1120
+ Args:
1121
+ file: File to upload to the browser session
1122
+
1123
+ extra_headers: Send extra headers
1124
+
1125
+ extra_query: Add additional query parameters to the request
1126
+
1127
+ extra_body: Add additional JSON properties to the request
1128
+
1129
+ timeout: Override the client-level default timeout for this request, in seconds
1130
+ """
1131
+ if not session_id:
1132
+ raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
1133
+ body = deepcopy_minimal({"file": file})
1134
+ files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
1135
+ # It should be noted that the actual Content-Type header that will be
1136
+ # sent to the server will contain a `boundary` parameter, e.g.
1137
+ # multipart/form-data; boundary=---abc--
1138
+ extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
1139
+ return await self._post(
1140
+ f"/v1/sessions/{session_id}/uploads",
1141
+ body=await async_maybe_transform(body, session_upload_file_params.SessionUploadFileParams),
1142
+ files=files,
1143
+ options=make_request_options(
1144
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1145
+ ),
1146
+ cast_to=SessionUploadFileResponse,
1147
+ )
1148
+
908
1149
 
909
1150
  class SessionsResourceWithRawResponse:
910
1151
  def __init__(self, sessions: SessionsResource) -> None:
@@ -913,6 +1154,9 @@ class SessionsResourceWithRawResponse:
913
1154
  self.create = to_raw_response_wrapper(
914
1155
  sessions.create,
915
1156
  )
1157
+ self.retrieve = to_raw_response_wrapper(
1158
+ sessions.retrieve,
1159
+ )
916
1160
  self.delete = to_raw_response_wrapper(
917
1161
  sessions.delete,
918
1162
  )
@@ -925,6 +1169,9 @@ class SessionsResourceWithRawResponse:
925
1169
  self.goto = to_raw_response_wrapper(
926
1170
  sessions.goto,
927
1171
  )
1172
+ self.list_pages = to_raw_response_wrapper(
1173
+ sessions.list_pages,
1174
+ )
928
1175
  self.paste = to_raw_response_wrapper(
929
1176
  sessions.paste,
930
1177
  )
@@ -938,6 +1185,9 @@ class SessionsResourceWithRawResponse:
938
1185
  self.scroll = to_raw_response_wrapper(
939
1186
  sessions.scroll,
940
1187
  )
1188
+ self.upload_file = to_raw_response_wrapper(
1189
+ sessions.upload_file,
1190
+ )
941
1191
 
942
1192
  @cached_property
943
1193
  def all(self) -> AllResourceWithRawResponse:
@@ -967,6 +1217,9 @@ class AsyncSessionsResourceWithRawResponse:
967
1217
  self.create = async_to_raw_response_wrapper(
968
1218
  sessions.create,
969
1219
  )
1220
+ self.retrieve = async_to_raw_response_wrapper(
1221
+ sessions.retrieve,
1222
+ )
970
1223
  self.delete = async_to_raw_response_wrapper(
971
1224
  sessions.delete,
972
1225
  )
@@ -979,6 +1232,9 @@ class AsyncSessionsResourceWithRawResponse:
979
1232
  self.goto = async_to_raw_response_wrapper(
980
1233
  sessions.goto,
981
1234
  )
1235
+ self.list_pages = async_to_raw_response_wrapper(
1236
+ sessions.list_pages,
1237
+ )
982
1238
  self.paste = async_to_raw_response_wrapper(
983
1239
  sessions.paste,
984
1240
  )
@@ -992,6 +1248,9 @@ class AsyncSessionsResourceWithRawResponse:
992
1248
  self.scroll = async_to_raw_response_wrapper(
993
1249
  sessions.scroll,
994
1250
  )
1251
+ self.upload_file = async_to_raw_response_wrapper(
1252
+ sessions.upload_file,
1253
+ )
995
1254
 
996
1255
  @cached_property
997
1256
  def all(self) -> AsyncAllResourceWithRawResponse:
@@ -1021,6 +1280,9 @@ class SessionsResourceWithStreamingResponse:
1021
1280
  self.create = to_streamed_response_wrapper(
1022
1281
  sessions.create,
1023
1282
  )
1283
+ self.retrieve = to_streamed_response_wrapper(
1284
+ sessions.retrieve,
1285
+ )
1024
1286
  self.delete = to_streamed_response_wrapper(
1025
1287
  sessions.delete,
1026
1288
  )
@@ -1033,6 +1295,9 @@ class SessionsResourceWithStreamingResponse:
1033
1295
  self.goto = to_streamed_response_wrapper(
1034
1296
  sessions.goto,
1035
1297
  )
1298
+ self.list_pages = to_streamed_response_wrapper(
1299
+ sessions.list_pages,
1300
+ )
1036
1301
  self.paste = to_streamed_response_wrapper(
1037
1302
  sessions.paste,
1038
1303
  )
@@ -1046,6 +1311,9 @@ class SessionsResourceWithStreamingResponse:
1046
1311
  self.scroll = to_streamed_response_wrapper(
1047
1312
  sessions.scroll,
1048
1313
  )
1314
+ self.upload_file = to_streamed_response_wrapper(
1315
+ sessions.upload_file,
1316
+ )
1049
1317
 
1050
1318
  @cached_property
1051
1319
  def all(self) -> AllResourceWithStreamingResponse:
@@ -1075,6 +1343,9 @@ class AsyncSessionsResourceWithStreamingResponse:
1075
1343
  self.create = async_to_streamed_response_wrapper(
1076
1344
  sessions.create,
1077
1345
  )
1346
+ self.retrieve = async_to_streamed_response_wrapper(
1347
+ sessions.retrieve,
1348
+ )
1078
1349
  self.delete = async_to_streamed_response_wrapper(
1079
1350
  sessions.delete,
1080
1351
  )
@@ -1087,6 +1358,9 @@ class AsyncSessionsResourceWithStreamingResponse:
1087
1358
  self.goto = async_to_streamed_response_wrapper(
1088
1359
  sessions.goto,
1089
1360
  )
1361
+ self.list_pages = async_to_streamed_response_wrapper(
1362
+ sessions.list_pages,
1363
+ )
1090
1364
  self.paste = async_to_streamed_response_wrapper(
1091
1365
  sessions.paste,
1092
1366
  )
@@ -1100,6 +1374,9 @@ class AsyncSessionsResourceWithStreamingResponse:
1100
1374
  self.scroll = async_to_streamed_response_wrapper(
1101
1375
  sessions.scroll,
1102
1376
  )
1377
+ self.upload_file = async_to_streamed_response_wrapper(
1378
+ sessions.upload_file,
1379
+ )
1103
1380
 
1104
1381
  @cached_property
1105
1382
  def all(self) -> AsyncAllResourceWithStreamingResponse: