cmdop 0.1.18__py3-none-any.whl → 0.1.19__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.
cmdop/__init__.py CHANGED
@@ -124,7 +124,7 @@ from cmdop.logging import (
124
124
  get_log_dir,
125
125
  )
126
126
 
127
- __version__ = "0.1.18"
127
+ __version__ = "0.1.19"
128
128
 
129
129
  __all__ = [
130
130
  # Version
@@ -24,7 +24,7 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1arpc_messages/browser.proto\x12\x08terminal\"\x9b\x01\n\x1b\x42rowserCreateSessionRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x10\n\x08provider\x18\x02 \x01(\t\x12\x12\n\nprofile_id\x18\x03 \x01(\t\x12\x11\n\tstart_url\x18\x04 \x01(\t\x12\x10\n\x08headless\x18\x05 \x01(\x08\x12\r\n\x05width\x18\x06 \x01(\x05\x12\x0e\n\x06height\x18\x07 \x01(\x05\"Z\n\x1c\x42rowserCreateSessionResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"L\n\x1a\x42rowserCloseSessionRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"=\n\x1b\x42rowserCloseSessionResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"i\n\x16\x42rowserNavigateRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"L\n\x17\x42rowserNavigateResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x11\n\tfinal_url\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"k\n\x13\x42rowserClickRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"6\n\x14\x42rowserClickResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x8d\x01\n\x12\x42rowserTypeRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x0c\n\x04text\x18\x04 \x01(\t\x12\x12\n\nhuman_like\x18\x05 \x01(\x08\x12\x13\n\x0b\x63lear_first\x18\x06 \x01(\x08\"5\n\x13\x42rowserTypeResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"j\n\x12\x42rowserWaitRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"D\n\x13\x42rowserWaitResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x66ound\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"{\n\x15\x42rowserExtractRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x11\n\tattribute\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\x05\"W\n\x16\x42rowserExtractResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06values\x18\x02 \x03(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\x7f\n\x1a\x42rowserExtractRegexRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0f\n\x07pattern\x18\x03 \x01(\t\x12\x11\n\tfrom_html\x18\x04 \x01(\x08\x12\r\n\x05limit\x18\x05 \x01(\x05\"]\n\x1b\x42rowserExtractRegexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07matches\x18\x02 \x03(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"Y\n\x15\x42rowserGetHTMLRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\"F\n\x16\x42rowserGetHTMLResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04html\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"Y\n\x15\x42rowserGetTextRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\"F\n\x16\x42rowserGetTextResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"]\n\x1b\x42rowserExecuteScriptRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0e\n\x06script\x18\x03 \x01(\t\"N\n\x1c\x42rowserExecuteScriptResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06result\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"~\n\x18\x42rowserScreenshotRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x11\n\tfull_page\x18\x03 \x01(\x08\x12\x0e\n\x06\x66ormat\x18\x04 \x01(\t\x12\x0f\n\x07quality\x18\x05 \x01(\x05\"I\n\x19\x42rowserScreenshotResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"H\n\x16\x42rowserGetStateRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"U\n\x17\x42rowserGetStateResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\x91\x01\n\rBrowserCookie\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\x12\x0c\n\x04path\x18\x04 \x01(\t\x12\x0e\n\x06secure\x18\x05 \x01(\x08\x12\x11\n\thttp_only\x18\x06 \x01(\x08\x12\x11\n\tsame_site\x18\x07 \x01(\t\x12\x0f\n\x07\x65xpires\x18\x08 \x01(\x03\"t\n\x18\x42rowserSetCookiesRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12(\n\x07\x63ookies\x18\x03 \x03(\x0b\x32\x17.terminal.BrowserCookie\";\n\x19\x42rowserSetCookiesResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"Z\n\x18\x42rowserGetCookiesRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\"e\n\x19\x42rowserGetCookiesResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12(\n\x07\x63ookies\x18\x02 \x03(\x0b\x32\x17.terminal.BrowserCookie\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"\xd5\x01\n\x1f\x42rowserValidateSelectorsRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0c\n\x04item\x18\x03 \x01(\t\x12\x45\n\x06\x66ields\x18\x04 \x03(\x0b\x32\x35.terminal.BrowserValidateSelectorsRequest.FieldsEntry\x1a-\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd2\x02\n BrowserValidateSelectorsResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x46\n\x06\x63ounts\x18\x03 \x03(\x0b\x32\x36.terminal.BrowserValidateSelectorsResponse.CountsEntry\x12H\n\x07samples\x18\x04 \x03(\x0b\x32\x37.terminal.BrowserValidateSelectorsResponse.SamplesEntry\x12\x0e\n\x06\x65rrors\x18\x05 \x03(\t\x12\r\n\x05\x65rror\x18\x06 \x01(\t\x1a-\n\x0b\x43ountsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a.\n\x0cSamplesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"}\n\x19\x42rowserExtractDataRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0c\n\x04item\x18\x03 \x01(\t\x12\x13\n\x0b\x66ields_json\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\x05\"_\n\x1a\x42rowserExtractDataResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\nitems_json\x18\x02 \x01(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\tB\x10Z\x0eterminal/protob\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1arpc_messages/browser.proto\x12\x08terminal\"\x9b\x01\n\x1b\x42rowserCreateSessionRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x10\n\x08provider\x18\x02 \x01(\t\x12\x12\n\nprofile_id\x18\x03 \x01(\t\x12\x11\n\tstart_url\x18\x04 \x01(\t\x12\x10\n\x08headless\x18\x05 \x01(\x08\x12\r\n\x05width\x18\x06 \x01(\x05\x12\x0e\n\x06height\x18\x07 \x01(\x05\"Z\n\x1c\x42rowserCreateSessionResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"L\n\x1a\x42rowserCloseSessionRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"=\n\x1b\x42rowserCloseSessionResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"i\n\x16\x42rowserNavigateRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"L\n\x17\x42rowserNavigateResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x11\n\tfinal_url\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"k\n\x13\x42rowserClickRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"6\n\x14\x42rowserClickResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x8d\x01\n\x12\x42rowserTypeRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x0c\n\x04text\x18\x04 \x01(\t\x12\x12\n\nhuman_like\x18\x05 \x01(\x08\x12\x13\n\x0b\x63lear_first\x18\x06 \x01(\x08\"5\n\x13\x42rowserTypeResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"j\n\x12\x42rowserWaitRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"D\n\x13\x42rowserWaitResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x66ound\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"{\n\x15\x42rowserExtractRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x11\n\tattribute\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\x05\"W\n\x16\x42rowserExtractResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06values\x18\x02 \x03(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\x7f\n\x1a\x42rowserExtractRegexRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0f\n\x07pattern\x18\x03 \x01(\t\x12\x11\n\tfrom_html\x18\x04 \x01(\x08\x12\r\n\x05limit\x18\x05 \x01(\x05\"]\n\x1b\x42rowserExtractRegexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07matches\x18\x02 \x03(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"Y\n\x15\x42rowserGetHTMLRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\"F\n\x16\x42rowserGetHTMLResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04html\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"Y\n\x15\x42rowserGetTextRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\"F\n\x16\x42rowserGetTextResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"]\n\x1b\x42rowserExecuteScriptRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0e\n\x06script\x18\x03 \x01(\t\"N\n\x1c\x42rowserExecuteScriptResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06result\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"~\n\x18\x42rowserScreenshotRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x11\n\tfull_page\x18\x03 \x01(\x08\x12\x0e\n\x06\x66ormat\x18\x04 \x01(\t\x12\x0f\n\x07quality\x18\x05 \x01(\x05\"I\n\x19\x42rowserScreenshotResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"H\n\x16\x42rowserGetStateRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"U\n\x17\x42rowserGetStateResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"K\n\x19\x42rowserGetPageInfoRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"\xbb\x03\n\x1a\x42rowserGetPageInfoResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\r\n\x05title\x18\x04 \x01(\t\x12\x13\n\x0bpage_height\x18\x05 \x01(\x05\x12\x17\n\x0fviewport_height\x18\x06 \x01(\x05\x12\x16\n\x0eviewport_width\x18\x07 \x01(\x05\x12\x10\n\x08scroll_x\x18\x08 \x01(\x05\x12\x10\n\x08scroll_y\x18\t \x01(\x05\x12\x0e\n\x06\x61t_top\x18\n \x01(\x08\x12\x11\n\tat_bottom\x18\x0b \x01(\x08\x12\x14\n\x0cload_time_ms\x18\x0c \x01(\x05\x12\x15\n\rcookies_count\x18\r \x01(\x05\x12\x10\n\x08is_https\x18\x0e \x01(\x08\x12\x13\n\x0bhas_iframes\x18\x0f \x01(\x08\x12\x15\n\rdom_nodes_raw\x18\x10 \x01(\x05\x12\x19\n\x11\x64om_nodes_cleaned\x18\x11 \x01(\x05\x12\x17\n\x0ftokens_estimate\x18\x12 \x01(\x05\x12\x1b\n\x13\x63loudflare_detected\x18\x13 \x01(\x08\x12\x18\n\x10\x63\x61ptcha_detected\x18\x14 \x01(\x08\"\x91\x01\n\rBrowserCookie\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\x12\x0c\n\x04path\x18\x04 \x01(\t\x12\x0e\n\x06secure\x18\x05 \x01(\x08\x12\x11\n\thttp_only\x18\x06 \x01(\x08\x12\x11\n\tsame_site\x18\x07 \x01(\t\x12\x0f\n\x07\x65xpires\x18\x08 \x01(\x03\"t\n\x18\x42rowserSetCookiesRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12(\n\x07\x63ookies\x18\x03 \x03(\x0b\x32\x17.terminal.BrowserCookie\";\n\x19\x42rowserSetCookiesResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"Z\n\x18\x42rowserGetCookiesRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\"e\n\x19\x42rowserGetCookiesResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12(\n\x07\x63ookies\x18\x02 \x03(\x0b\x32\x17.terminal.BrowserCookie\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"n\n\x17\x42rowserMouseMoveRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\t\n\x01x\x18\x03 \x01(\x05\x12\t\n\x01y\x18\x04 \x01(\x05\x12\r\n\x05steps\x18\x05 \x01(\x05\":\n\x18\x42rowserMouseMoveResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"k\n\x13\x42rowserHoverRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"6\n\x14\x42rowserHoverResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x9e\x01\n\x14\x42rowserScrollRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0e\n\x06\x61mount\x18\x04 \x01(\x05\x12\x10\n\x08selector\x18\x05 \x01(\t\x12\x11\n\tcontainer\x18\x06 \x01(\t\x12\x0e\n\x06smooth\x18\x07 \x01(\x08\"\xb1\x01\n\x15\x42rowserScrollResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x10\n\x08scroll_x\x18\x02 \x01(\x05\x12\x10\n\x08scroll_y\x18\x03 \x01(\x05\x12\x13\n\x0bscrolled_by\x18\x04 \x01(\x05\x12\x13\n\x0bpage_height\x18\x05 \x01(\x05\x12\x17\n\x0fviewport_height\x18\x06 \x01(\x05\x12\x11\n\tat_bottom\x18\x07 \x01(\x08\x12\r\n\x05\x65rror\x18\x08 \x01(\t\"\xd5\x01\n\x1f\x42rowserValidateSelectorsRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0c\n\x04item\x18\x03 \x01(\t\x12\x45\n\x06\x66ields\x18\x04 \x03(\x0b\x32\x35.terminal.BrowserValidateSelectorsRequest.FieldsEntry\x1a-\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd2\x02\n BrowserValidateSelectorsResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x46\n\x06\x63ounts\x18\x03 \x03(\x0b\x32\x36.terminal.BrowserValidateSelectorsResponse.CountsEntry\x12H\n\x07samples\x18\x04 \x03(\x0b\x32\x37.terminal.BrowserValidateSelectorsResponse.SamplesEntry\x12\x0e\n\x06\x65rrors\x18\x05 \x03(\t\x12\r\n\x05\x65rror\x18\x06 \x01(\t\x1a-\n\x0b\x43ountsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a.\n\x0cSamplesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"}\n\x19\x42rowserExtractDataRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0c\n\x04item\x18\x03 \x01(\t\x12\x13\n\x0b\x66ields_json\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\x05\"_\n\x1a\x42rowserExtractDataResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\nitems_json\x18\x02 \x01(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\tB\x10Z\x0eterminal/protob\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -90,28 +90,44 @@ if not _descriptor._USE_C_DESCRIPTORS:
90
90
  _globals['_BROWSERGETSTATEREQUEST']._serialized_end=2372
91
91
  _globals['_BROWSERGETSTATERESPONSE']._serialized_start=2374
92
92
  _globals['_BROWSERGETSTATERESPONSE']._serialized_end=2459
93
- _globals['_BROWSERCOOKIE']._serialized_start=2462
94
- _globals['_BROWSERCOOKIE']._serialized_end=2607
95
- _globals['_BROWSERSETCOOKIESREQUEST']._serialized_start=2609
96
- _globals['_BROWSERSETCOOKIESREQUEST']._serialized_end=2725
97
- _globals['_BROWSERSETCOOKIESRESPONSE']._serialized_start=2727
98
- _globals['_BROWSERSETCOOKIESRESPONSE']._serialized_end=2786
99
- _globals['_BROWSERGETCOOKIESREQUEST']._serialized_start=2788
100
- _globals['_BROWSERGETCOOKIESREQUEST']._serialized_end=2878
101
- _globals['_BROWSERGETCOOKIESRESPONSE']._serialized_start=2880
102
- _globals['_BROWSERGETCOOKIESRESPONSE']._serialized_end=2981
103
- _globals['_BROWSERVALIDATESELECTORSREQUEST']._serialized_start=2984
104
- _globals['_BROWSERVALIDATESELECTORSREQUEST']._serialized_end=3197
105
- _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._serialized_start=3152
106
- _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._serialized_end=3197
107
- _globals['_BROWSERVALIDATESELECTORSRESPONSE']._serialized_start=3200
108
- _globals['_BROWSERVALIDATESELECTORSRESPONSE']._serialized_end=3538
109
- _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._serialized_start=3445
110
- _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._serialized_end=3490
111
- _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._serialized_start=3492
112
- _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._serialized_end=3538
113
- _globals['_BROWSEREXTRACTDATAREQUEST']._serialized_start=3540
114
- _globals['_BROWSEREXTRACTDATAREQUEST']._serialized_end=3665
115
- _globals['_BROWSEREXTRACTDATARESPONSE']._serialized_start=3667
116
- _globals['_BROWSEREXTRACTDATARESPONSE']._serialized_end=3762
93
+ _globals['_BROWSERGETPAGEINFOREQUEST']._serialized_start=2461
94
+ _globals['_BROWSERGETPAGEINFOREQUEST']._serialized_end=2536
95
+ _globals['_BROWSERGETPAGEINFORESPONSE']._serialized_start=2539
96
+ _globals['_BROWSERGETPAGEINFORESPONSE']._serialized_end=2982
97
+ _globals['_BROWSERCOOKIE']._serialized_start=2985
98
+ _globals['_BROWSERCOOKIE']._serialized_end=3130
99
+ _globals['_BROWSERSETCOOKIESREQUEST']._serialized_start=3132
100
+ _globals['_BROWSERSETCOOKIESREQUEST']._serialized_end=3248
101
+ _globals['_BROWSERSETCOOKIESRESPONSE']._serialized_start=3250
102
+ _globals['_BROWSERSETCOOKIESRESPONSE']._serialized_end=3309
103
+ _globals['_BROWSERGETCOOKIESREQUEST']._serialized_start=3311
104
+ _globals['_BROWSERGETCOOKIESREQUEST']._serialized_end=3401
105
+ _globals['_BROWSERGETCOOKIESRESPONSE']._serialized_start=3403
106
+ _globals['_BROWSERGETCOOKIESRESPONSE']._serialized_end=3504
107
+ _globals['_BROWSERMOUSEMOVEREQUEST']._serialized_start=3506
108
+ _globals['_BROWSERMOUSEMOVEREQUEST']._serialized_end=3616
109
+ _globals['_BROWSERMOUSEMOVERESPONSE']._serialized_start=3618
110
+ _globals['_BROWSERMOUSEMOVERESPONSE']._serialized_end=3676
111
+ _globals['_BROWSERHOVERREQUEST']._serialized_start=3678
112
+ _globals['_BROWSERHOVERREQUEST']._serialized_end=3785
113
+ _globals['_BROWSERHOVERRESPONSE']._serialized_start=3787
114
+ _globals['_BROWSERHOVERRESPONSE']._serialized_end=3841
115
+ _globals['_BROWSERSCROLLREQUEST']._serialized_start=3844
116
+ _globals['_BROWSERSCROLLREQUEST']._serialized_end=4002
117
+ _globals['_BROWSERSCROLLRESPONSE']._serialized_start=4005
118
+ _globals['_BROWSERSCROLLRESPONSE']._serialized_end=4182
119
+ _globals['_BROWSERVALIDATESELECTORSREQUEST']._serialized_start=4185
120
+ _globals['_BROWSERVALIDATESELECTORSREQUEST']._serialized_end=4398
121
+ _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._serialized_start=4353
122
+ _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._serialized_end=4398
123
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE']._serialized_start=4401
124
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE']._serialized_end=4739
125
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._serialized_start=4646
126
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._serialized_end=4691
127
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._serialized_start=4693
128
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._serialized_end=4739
129
+ _globals['_BROWSEREXTRACTDATAREQUEST']._serialized_start=4741
130
+ _globals['_BROWSEREXTRACTDATAREQUEST']._serialized_end=4866
131
+ _globals['_BROWSEREXTRACTDATARESPONSE']._serialized_start=4868
132
+ _globals['_BROWSEREXTRACTDATARESPONSE']._serialized_end=4963
117
133
  # @@protoc_insertion_point(module_scope)
@@ -294,6 +294,58 @@ class BrowserGetStateResponse(_message.Message):
294
294
  error: str
295
295
  def __init__(self, success: bool = ..., url: _Optional[str] = ..., title: _Optional[str] = ..., error: _Optional[str] = ...) -> None: ...
296
296
 
297
+ class BrowserGetPageInfoRequest(_message.Message):
298
+ __slots__ = ("session_id", "browser_session_id")
299
+ SESSION_ID_FIELD_NUMBER: _ClassVar[int]
300
+ BROWSER_SESSION_ID_FIELD_NUMBER: _ClassVar[int]
301
+ session_id: str
302
+ browser_session_id: str
303
+ def __init__(self, session_id: _Optional[str] = ..., browser_session_id: _Optional[str] = ...) -> None: ...
304
+
305
+ class BrowserGetPageInfoResponse(_message.Message):
306
+ __slots__ = ("success", "error", "url", "title", "page_height", "viewport_height", "viewport_width", "scroll_x", "scroll_y", "at_top", "at_bottom", "load_time_ms", "cookies_count", "is_https", "has_iframes", "dom_nodes_raw", "dom_nodes_cleaned", "tokens_estimate", "cloudflare_detected", "captcha_detected")
307
+ SUCCESS_FIELD_NUMBER: _ClassVar[int]
308
+ ERROR_FIELD_NUMBER: _ClassVar[int]
309
+ URL_FIELD_NUMBER: _ClassVar[int]
310
+ TITLE_FIELD_NUMBER: _ClassVar[int]
311
+ PAGE_HEIGHT_FIELD_NUMBER: _ClassVar[int]
312
+ VIEWPORT_HEIGHT_FIELD_NUMBER: _ClassVar[int]
313
+ VIEWPORT_WIDTH_FIELD_NUMBER: _ClassVar[int]
314
+ SCROLL_X_FIELD_NUMBER: _ClassVar[int]
315
+ SCROLL_Y_FIELD_NUMBER: _ClassVar[int]
316
+ AT_TOP_FIELD_NUMBER: _ClassVar[int]
317
+ AT_BOTTOM_FIELD_NUMBER: _ClassVar[int]
318
+ LOAD_TIME_MS_FIELD_NUMBER: _ClassVar[int]
319
+ COOKIES_COUNT_FIELD_NUMBER: _ClassVar[int]
320
+ IS_HTTPS_FIELD_NUMBER: _ClassVar[int]
321
+ HAS_IFRAMES_FIELD_NUMBER: _ClassVar[int]
322
+ DOM_NODES_RAW_FIELD_NUMBER: _ClassVar[int]
323
+ DOM_NODES_CLEANED_FIELD_NUMBER: _ClassVar[int]
324
+ TOKENS_ESTIMATE_FIELD_NUMBER: _ClassVar[int]
325
+ CLOUDFLARE_DETECTED_FIELD_NUMBER: _ClassVar[int]
326
+ CAPTCHA_DETECTED_FIELD_NUMBER: _ClassVar[int]
327
+ success: bool
328
+ error: str
329
+ url: str
330
+ title: str
331
+ page_height: int
332
+ viewport_height: int
333
+ viewport_width: int
334
+ scroll_x: int
335
+ scroll_y: int
336
+ at_top: bool
337
+ at_bottom: bool
338
+ load_time_ms: int
339
+ cookies_count: int
340
+ is_https: bool
341
+ has_iframes: bool
342
+ dom_nodes_raw: int
343
+ dom_nodes_cleaned: int
344
+ tokens_estimate: int
345
+ cloudflare_detected: bool
346
+ captcha_detected: bool
347
+ def __init__(self, success: bool = ..., error: _Optional[str] = ..., url: _Optional[str] = ..., title: _Optional[str] = ..., page_height: _Optional[int] = ..., viewport_height: _Optional[int] = ..., viewport_width: _Optional[int] = ..., scroll_x: _Optional[int] = ..., scroll_y: _Optional[int] = ..., at_top: bool = ..., at_bottom: bool = ..., load_time_ms: _Optional[int] = ..., cookies_count: _Optional[int] = ..., is_https: bool = ..., has_iframes: bool = ..., dom_nodes_raw: _Optional[int] = ..., dom_nodes_cleaned: _Optional[int] = ..., tokens_estimate: _Optional[int] = ..., cloudflare_detected: bool = ..., captcha_detected: bool = ...) -> None: ...
348
+
297
349
  class BrowserCookie(_message.Message):
298
350
  __slots__ = ("name", "value", "domain", "path", "secure", "http_only", "same_site", "expires")
299
351
  NAME_FIELD_NUMBER: _ClassVar[int]
@@ -352,6 +404,86 @@ class BrowserGetCookiesResponse(_message.Message):
352
404
  error: str
353
405
  def __init__(self, success: bool = ..., cookies: _Optional[_Iterable[_Union[BrowserCookie, _Mapping]]] = ..., error: _Optional[str] = ...) -> None: ...
354
406
 
407
+ class BrowserMouseMoveRequest(_message.Message):
408
+ __slots__ = ("session_id", "browser_session_id", "x", "y", "steps")
409
+ SESSION_ID_FIELD_NUMBER: _ClassVar[int]
410
+ BROWSER_SESSION_ID_FIELD_NUMBER: _ClassVar[int]
411
+ X_FIELD_NUMBER: _ClassVar[int]
412
+ Y_FIELD_NUMBER: _ClassVar[int]
413
+ STEPS_FIELD_NUMBER: _ClassVar[int]
414
+ session_id: str
415
+ browser_session_id: str
416
+ x: int
417
+ y: int
418
+ steps: int
419
+ def __init__(self, session_id: _Optional[str] = ..., browser_session_id: _Optional[str] = ..., x: _Optional[int] = ..., y: _Optional[int] = ..., steps: _Optional[int] = ...) -> None: ...
420
+
421
+ class BrowserMouseMoveResponse(_message.Message):
422
+ __slots__ = ("success", "error")
423
+ SUCCESS_FIELD_NUMBER: _ClassVar[int]
424
+ ERROR_FIELD_NUMBER: _ClassVar[int]
425
+ success: bool
426
+ error: str
427
+ def __init__(self, success: bool = ..., error: _Optional[str] = ...) -> None: ...
428
+
429
+ class BrowserHoverRequest(_message.Message):
430
+ __slots__ = ("session_id", "browser_session_id", "selector", "timeout_ms")
431
+ SESSION_ID_FIELD_NUMBER: _ClassVar[int]
432
+ BROWSER_SESSION_ID_FIELD_NUMBER: _ClassVar[int]
433
+ SELECTOR_FIELD_NUMBER: _ClassVar[int]
434
+ TIMEOUT_MS_FIELD_NUMBER: _ClassVar[int]
435
+ session_id: str
436
+ browser_session_id: str
437
+ selector: str
438
+ timeout_ms: int
439
+ def __init__(self, session_id: _Optional[str] = ..., browser_session_id: _Optional[str] = ..., selector: _Optional[str] = ..., timeout_ms: _Optional[int] = ...) -> None: ...
440
+
441
+ class BrowserHoverResponse(_message.Message):
442
+ __slots__ = ("success", "error")
443
+ SUCCESS_FIELD_NUMBER: _ClassVar[int]
444
+ ERROR_FIELD_NUMBER: _ClassVar[int]
445
+ success: bool
446
+ error: str
447
+ def __init__(self, success: bool = ..., error: _Optional[str] = ...) -> None: ...
448
+
449
+ class BrowserScrollRequest(_message.Message):
450
+ __slots__ = ("session_id", "browser_session_id", "direction", "amount", "selector", "container", "smooth")
451
+ SESSION_ID_FIELD_NUMBER: _ClassVar[int]
452
+ BROWSER_SESSION_ID_FIELD_NUMBER: _ClassVar[int]
453
+ DIRECTION_FIELD_NUMBER: _ClassVar[int]
454
+ AMOUNT_FIELD_NUMBER: _ClassVar[int]
455
+ SELECTOR_FIELD_NUMBER: _ClassVar[int]
456
+ CONTAINER_FIELD_NUMBER: _ClassVar[int]
457
+ SMOOTH_FIELD_NUMBER: _ClassVar[int]
458
+ session_id: str
459
+ browser_session_id: str
460
+ direction: str
461
+ amount: int
462
+ selector: str
463
+ container: str
464
+ smooth: bool
465
+ def __init__(self, session_id: _Optional[str] = ..., browser_session_id: _Optional[str] = ..., direction: _Optional[str] = ..., amount: _Optional[int] = ..., selector: _Optional[str] = ..., container: _Optional[str] = ..., smooth: bool = ...) -> None: ...
466
+
467
+ class BrowserScrollResponse(_message.Message):
468
+ __slots__ = ("success", "scroll_x", "scroll_y", "scrolled_by", "page_height", "viewport_height", "at_bottom", "error")
469
+ SUCCESS_FIELD_NUMBER: _ClassVar[int]
470
+ SCROLL_X_FIELD_NUMBER: _ClassVar[int]
471
+ SCROLL_Y_FIELD_NUMBER: _ClassVar[int]
472
+ SCROLLED_BY_FIELD_NUMBER: _ClassVar[int]
473
+ PAGE_HEIGHT_FIELD_NUMBER: _ClassVar[int]
474
+ VIEWPORT_HEIGHT_FIELD_NUMBER: _ClassVar[int]
475
+ AT_BOTTOM_FIELD_NUMBER: _ClassVar[int]
476
+ ERROR_FIELD_NUMBER: _ClassVar[int]
477
+ success: bool
478
+ scroll_x: int
479
+ scroll_y: int
480
+ scrolled_by: int
481
+ page_height: int
482
+ viewport_height: int
483
+ at_bottom: bool
484
+ error: str
485
+ def __init__(self, success: bool = ..., scroll_x: _Optional[int] = ..., scroll_y: _Optional[int] = ..., scrolled_by: _Optional[int] = ..., page_height: _Optional[int] = ..., viewport_height: _Optional[int] = ..., at_bottom: bool = ..., error: _Optional[str] = ...) -> None: ...
486
+
355
487
  class BrowserValidateSelectorsRequest(_message.Message):
356
488
  __slots__ = ("session_id", "browser_session_id", "item", "fields")
357
489
  class FieldsEntry(_message.Message):
@@ -78,11 +78,19 @@ from rpc_messages.browser_pb2 import BrowserScreenshotRequest as BrowserScreensh
78
78
  from rpc_messages.browser_pb2 import BrowserScreenshotResponse as BrowserScreenshotResponse
79
79
  from rpc_messages.browser_pb2 import BrowserGetStateRequest as BrowserGetStateRequest
80
80
  from rpc_messages.browser_pb2 import BrowserGetStateResponse as BrowserGetStateResponse
81
+ from rpc_messages.browser_pb2 import BrowserGetPageInfoRequest as BrowserGetPageInfoRequest
82
+ from rpc_messages.browser_pb2 import BrowserGetPageInfoResponse as BrowserGetPageInfoResponse
81
83
  from rpc_messages.browser_pb2 import BrowserCookie as BrowserCookie
82
84
  from rpc_messages.browser_pb2 import BrowserSetCookiesRequest as BrowserSetCookiesRequest
83
85
  from rpc_messages.browser_pb2 import BrowserSetCookiesResponse as BrowserSetCookiesResponse
84
86
  from rpc_messages.browser_pb2 import BrowserGetCookiesRequest as BrowserGetCookiesRequest
85
87
  from rpc_messages.browser_pb2 import BrowserGetCookiesResponse as BrowserGetCookiesResponse
88
+ from rpc_messages.browser_pb2 import BrowserMouseMoveRequest as BrowserMouseMoveRequest
89
+ from rpc_messages.browser_pb2 import BrowserMouseMoveResponse as BrowserMouseMoveResponse
90
+ from rpc_messages.browser_pb2 import BrowserHoverRequest as BrowserHoverRequest
91
+ from rpc_messages.browser_pb2 import BrowserHoverResponse as BrowserHoverResponse
92
+ from rpc_messages.browser_pb2 import BrowserScrollRequest as BrowserScrollRequest
93
+ from rpc_messages.browser_pb2 import BrowserScrollResponse as BrowserScrollResponse
86
94
  from rpc_messages.browser_pb2 import BrowserValidateSelectorsRequest as BrowserValidateSelectorsRequest
87
95
  from rpc_messages.browser_pb2 import BrowserValidateSelectorsResponse as BrowserValidateSelectorsResponse
88
96
  from rpc_messages.browser_pb2 import BrowserExtractDataRequest as BrowserExtractDataRequest
@@ -125,7 +125,7 @@ except AttributeError:
125
125
  file__operations_dot_requests__pb2 = file__operations__pb2.file_operations.requests_pb2
126
126
 
127
127
 
128
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rservice.proto\x12\x08terminal\x1a\x14\x61gent_messages.proto\x1a\x16\x63ontrol_messages.proto\x1a\x12rpc_messages.proto\x1a\x0e\x66ile_rpc.proto\x1a\x15\x66ile_operations.proto2\x88$\n\x18TerminalStreamingService\x12G\n\x0f\x43onnectTerminal\x12\x16.terminal.AgentMessage\x1a\x18.terminal.ControlMessage(\x01\x30\x01\x12P\n\rCreateSession\x12\x1e.terminal.CreateSessionRequest\x1a\x1f.terminal.CreateSessionResponse\x12M\n\x0c\x43loseSession\x12\x1d.terminal.CloseSessionRequest\x1a\x1e.terminal.CloseSessionResponse\x12Y\n\x10GetSessionStatus\x12!.terminal.GetSessionStatusRequest\x1a\".terminal.GetSessionStatusResponse\x12M\n\x0cListSessions\x12\x1d.terminal.ListSessionsRequest\x1a\x1e.terminal.ListSessionsResponse\x12\x44\n\tSendInput\x12\x1a.terminal.SendInputRequest\x1a\x1b.terminal.SendInputResponse\x12G\n\nSendResize\x12\x1b.terminal.SendResizeRequest\x1a\x1c.terminal.SendResizeResponse\x12G\n\nSendSignal\x12\x1b.terminal.SendSignalRequest\x1a\x1c.terminal.SendSignalResponse\x12G\n\nGetHistory\x12\x1b.terminal.GetHistoryRequest\x1a\x1c.terminal.GetHistoryResponse\x12J\n\x0bHealthCheck\x12\x1c.terminal.HealthCheckRequest\x1a\x1d.terminal.HealthCheckResponse\x12\x62\n\x13RegisterDeviceToken\x12$.terminal.RegisterDeviceTokenRequest\x1a%.terminal.RegisterDeviceTokenResponse\x12h\n\x15UnregisterDeviceToken\x12&.terminal.UnregisterDeviceTokenRequest\x1a\'.terminal.UnregisterDeviceTokenResponse\x12V\n\x0f\x45nterBackground\x12 .terminal.EnterBackgroundRequest\x1a!.terminal.EnterBackgroundResponse\x12_\n\x12WakeFromBackground\x12#.terminal.WakeFromBackgroundRequest\x1a$.terminal.WakeFromBackgroundResponse\x12M\n\x0cQueueCommand\x12\x1d.terminal.QueueCommandRequest\x1a\x1e.terminal.QueueCommandResponse\x12\x62\n\x11\x46ileListDirectory\x12%.terminal.FileListDirectoryRpcRequest\x1a&.terminal.FileListDirectoryRpcResponse\x12G\n\x08\x46ileRead\x12\x1c.terminal.FileReadRpcRequest\x1a\x1d.terminal.FileReadRpcResponse\x12J\n\tFileWrite\x12\x1d.terminal.FileWriteRpcRequest\x1a\x1e.terminal.FileWriteRpcResponse\x12h\n\x13\x46ileCreateDirectory\x12\'.terminal.FileCreateDirectoryRpcRequest\x1a(.terminal.FileCreateDirectoryRpcResponse\x12M\n\nFileDelete\x12\x1e.terminal.FileDeleteRpcRequest\x1a\x1f.terminal.FileDeleteRpcResponse\x12G\n\x08\x46ileMove\x12\x1c.terminal.FileMoveRpcRequest\x1a\x1d.terminal.FileMoveRpcResponse\x12G\n\x08\x46ileCopy\x12\x1c.terminal.FileCopyRpcRequest\x1a\x1d.terminal.FileCopyRpcResponse\x12P\n\x0b\x46ileGetInfo\x12\x1f.terminal.FileGetInfoRpcRequest\x1a .terminal.FileGetInfoRpcResponse\x12\x62\n\x11\x46ileCreateArchive\x12%.terminal.FileCreateArchiveRpcRequest\x1a&.terminal.FileCreateArchiveRpcResponse\x12M\n\nFileSearch\x12\x1e.terminal.FileSearchRpcRequest\x1a\x1f.terminal.FileSearchRpcResponse\x12Y\n\x0eHlsGetPlaylist\x12\".terminal.HlsGetPlaylistRpcRequest\x1a#.terminal.HlsGetPlaylistRpcResponse\x12V\n\rHlsGetSegment\x12!.terminal.HlsGetSegmentRpcRequest\x1a\".terminal.HlsGetSegmentRpcResponse\x12Y\n\x0eHlsStopSession\x12\".terminal.HlsStopSessionRpcRequest\x1a#.terminal.HlsStopSessionRpcResponse\x12[\n\x16InitiateStreamingRelay\x12\x1f.terminal.StreamingRelayRequest\x1a .terminal.StreamingRelayResponse\x12H\n\nRelayChunk\x12\x1d.terminal.StreamingRelayChunk\x1a\x1b.terminal.StreamingRelayAck\x12`\n\x17GetStreamingRelayStatus\x12%.terminal.StreamingRelayStatusRequest\x1a\x1e.terminal.StreamingRelayStatus\x12\x65\n\x14\x43\x61ncelStreamingRelay\x12%.terminal.StreamingRelayCancelRequest\x1a&.terminal.StreamingRelayCancelResponse\x12\x65\n\x14SendPushNotification\x12%.terminal.SendPushNotificationRequest\x1a&.terminal.SendPushNotificationResponse\x12>\n\x07\x45xtract\x12\x18.terminal.ExtractRequest\x1a\x19.terminal.ExtractResponse\x12\x41\n\x08RunAgent\x12\x19.terminal.RunAgentRequest\x1a\x1a.terminal.RunAgentResponse\x12J\n\x0b\x43\x61ncelAgent\x12\x1c.terminal.CancelAgentRequest\x1a\x1d.terminal.CancelAgentResponse\x12\x65\n\x14\x42rowserCreateSession\x12%.terminal.BrowserCreateSessionRequest\x1a&.terminal.BrowserCreateSessionResponse\x12\x62\n\x13\x42rowserCloseSession\x12$.terminal.BrowserCloseSessionRequest\x1a%.terminal.BrowserCloseSessionResponse\x12V\n\x0f\x42rowserNavigate\x12 .terminal.BrowserNavigateRequest\x1a!.terminal.BrowserNavigateResponse\x12M\n\x0c\x42rowserClick\x12\x1d.terminal.BrowserClickRequest\x1a\x1e.terminal.BrowserClickResponse\x12J\n\x0b\x42rowserType\x12\x1c.terminal.BrowserTypeRequest\x1a\x1d.terminal.BrowserTypeResponse\x12J\n\x0b\x42rowserWait\x12\x1c.terminal.BrowserWaitRequest\x1a\x1d.terminal.BrowserWaitResponse\x12S\n\x0e\x42rowserExtract\x12\x1f.terminal.BrowserExtractRequest\x1a .terminal.BrowserExtractResponse\x12\x62\n\x13\x42rowserExtractRegex\x12$.terminal.BrowserExtractRegexRequest\x1a%.terminal.BrowserExtractRegexResponse\x12S\n\x0e\x42rowserGetHTML\x12\x1f.terminal.BrowserGetHTMLRequest\x1a .terminal.BrowserGetHTMLResponse\x12S\n\x0e\x42rowserGetText\x12\x1f.terminal.BrowserGetTextRequest\x1a .terminal.BrowserGetTextResponse\x12\x65\n\x14\x42rowserExecuteScript\x12%.terminal.BrowserExecuteScriptRequest\x1a&.terminal.BrowserExecuteScriptResponse\x12\\\n\x11\x42rowserScreenshot\x12\".terminal.BrowserScreenshotRequest\x1a#.terminal.BrowserScreenshotResponse\x12V\n\x0f\x42rowserGetState\x12 .terminal.BrowserGetStateRequest\x1a!.terminal.BrowserGetStateResponse\x12\\\n\x11\x42rowserSetCookies\x12\".terminal.BrowserSetCookiesRequest\x1a#.terminal.BrowserSetCookiesResponse\x12\\\n\x11\x42rowserGetCookies\x12\".terminal.BrowserGetCookiesRequest\x1a#.terminal.BrowserGetCookiesResponse\x12q\n\x18\x42rowserValidateSelectors\x12).terminal.BrowserValidateSelectorsRequest\x1a*.terminal.BrowserValidateSelectorsResponse\x12_\n\x12\x42rowserExtractData\x12#.terminal.BrowserExtractDataRequest\x1a$.terminal.BrowserExtractDataResponseB\x10Z\x0eterminal/protob\x06proto3')
128
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rservice.proto\x12\x08terminal\x1a\x14\x61gent_messages.proto\x1a\x16\x63ontrol_messages.proto\x1a\x12rpc_messages.proto\x1a\x0e\x66ile_rpc.proto\x1a\x15\x66ile_operations.proto2\x84&\n\x18TerminalStreamingService\x12G\n\x0f\x43onnectTerminal\x12\x16.terminal.AgentMessage\x1a\x18.terminal.ControlMessage(\x01\x30\x01\x12P\n\rCreateSession\x12\x1e.terminal.CreateSessionRequest\x1a\x1f.terminal.CreateSessionResponse\x12M\n\x0c\x43loseSession\x12\x1d.terminal.CloseSessionRequest\x1a\x1e.terminal.CloseSessionResponse\x12Y\n\x10GetSessionStatus\x12!.terminal.GetSessionStatusRequest\x1a\".terminal.GetSessionStatusResponse\x12M\n\x0cListSessions\x12\x1d.terminal.ListSessionsRequest\x1a\x1e.terminal.ListSessionsResponse\x12\x44\n\tSendInput\x12\x1a.terminal.SendInputRequest\x1a\x1b.terminal.SendInputResponse\x12G\n\nSendResize\x12\x1b.terminal.SendResizeRequest\x1a\x1c.terminal.SendResizeResponse\x12G\n\nSendSignal\x12\x1b.terminal.SendSignalRequest\x1a\x1c.terminal.SendSignalResponse\x12G\n\nGetHistory\x12\x1b.terminal.GetHistoryRequest\x1a\x1c.terminal.GetHistoryResponse\x12J\n\x0bHealthCheck\x12\x1c.terminal.HealthCheckRequest\x1a\x1d.terminal.HealthCheckResponse\x12\x62\n\x13RegisterDeviceToken\x12$.terminal.RegisterDeviceTokenRequest\x1a%.terminal.RegisterDeviceTokenResponse\x12h\n\x15UnregisterDeviceToken\x12&.terminal.UnregisterDeviceTokenRequest\x1a\'.terminal.UnregisterDeviceTokenResponse\x12V\n\x0f\x45nterBackground\x12 .terminal.EnterBackgroundRequest\x1a!.terminal.EnterBackgroundResponse\x12_\n\x12WakeFromBackground\x12#.terminal.WakeFromBackgroundRequest\x1a$.terminal.WakeFromBackgroundResponse\x12M\n\x0cQueueCommand\x12\x1d.terminal.QueueCommandRequest\x1a\x1e.terminal.QueueCommandResponse\x12\x62\n\x11\x46ileListDirectory\x12%.terminal.FileListDirectoryRpcRequest\x1a&.terminal.FileListDirectoryRpcResponse\x12G\n\x08\x46ileRead\x12\x1c.terminal.FileReadRpcRequest\x1a\x1d.terminal.FileReadRpcResponse\x12J\n\tFileWrite\x12\x1d.terminal.FileWriteRpcRequest\x1a\x1e.terminal.FileWriteRpcResponse\x12h\n\x13\x46ileCreateDirectory\x12\'.terminal.FileCreateDirectoryRpcRequest\x1a(.terminal.FileCreateDirectoryRpcResponse\x12M\n\nFileDelete\x12\x1e.terminal.FileDeleteRpcRequest\x1a\x1f.terminal.FileDeleteRpcResponse\x12G\n\x08\x46ileMove\x12\x1c.terminal.FileMoveRpcRequest\x1a\x1d.terminal.FileMoveRpcResponse\x12G\n\x08\x46ileCopy\x12\x1c.terminal.FileCopyRpcRequest\x1a\x1d.terminal.FileCopyRpcResponse\x12P\n\x0b\x46ileGetInfo\x12\x1f.terminal.FileGetInfoRpcRequest\x1a .terminal.FileGetInfoRpcResponse\x12\x62\n\x11\x46ileCreateArchive\x12%.terminal.FileCreateArchiveRpcRequest\x1a&.terminal.FileCreateArchiveRpcResponse\x12M\n\nFileSearch\x12\x1e.terminal.FileSearchRpcRequest\x1a\x1f.terminal.FileSearchRpcResponse\x12Y\n\x0eHlsGetPlaylist\x12\".terminal.HlsGetPlaylistRpcRequest\x1a#.terminal.HlsGetPlaylistRpcResponse\x12V\n\rHlsGetSegment\x12!.terminal.HlsGetSegmentRpcRequest\x1a\".terminal.HlsGetSegmentRpcResponse\x12Y\n\x0eHlsStopSession\x12\".terminal.HlsStopSessionRpcRequest\x1a#.terminal.HlsStopSessionRpcResponse\x12[\n\x16InitiateStreamingRelay\x12\x1f.terminal.StreamingRelayRequest\x1a .terminal.StreamingRelayResponse\x12H\n\nRelayChunk\x12\x1d.terminal.StreamingRelayChunk\x1a\x1b.terminal.StreamingRelayAck\x12`\n\x17GetStreamingRelayStatus\x12%.terminal.StreamingRelayStatusRequest\x1a\x1e.terminal.StreamingRelayStatus\x12\x65\n\x14\x43\x61ncelStreamingRelay\x12%.terminal.StreamingRelayCancelRequest\x1a&.terminal.StreamingRelayCancelResponse\x12\x65\n\x14SendPushNotification\x12%.terminal.SendPushNotificationRequest\x1a&.terminal.SendPushNotificationResponse\x12>\n\x07\x45xtract\x12\x18.terminal.ExtractRequest\x1a\x19.terminal.ExtractResponse\x12\x41\n\x08RunAgent\x12\x19.terminal.RunAgentRequest\x1a\x1a.terminal.RunAgentResponse\x12J\n\x0b\x43\x61ncelAgent\x12\x1c.terminal.CancelAgentRequest\x1a\x1d.terminal.CancelAgentResponse\x12\x65\n\x14\x42rowserCreateSession\x12%.terminal.BrowserCreateSessionRequest\x1a&.terminal.BrowserCreateSessionResponse\x12\x62\n\x13\x42rowserCloseSession\x12$.terminal.BrowserCloseSessionRequest\x1a%.terminal.BrowserCloseSessionResponse\x12V\n\x0f\x42rowserNavigate\x12 .terminal.BrowserNavigateRequest\x1a!.terminal.BrowserNavigateResponse\x12M\n\x0c\x42rowserClick\x12\x1d.terminal.BrowserClickRequest\x1a\x1e.terminal.BrowserClickResponse\x12J\n\x0b\x42rowserType\x12\x1c.terminal.BrowserTypeRequest\x1a\x1d.terminal.BrowserTypeResponse\x12J\n\x0b\x42rowserWait\x12\x1c.terminal.BrowserWaitRequest\x1a\x1d.terminal.BrowserWaitResponse\x12S\n\x0e\x42rowserExtract\x12\x1f.terminal.BrowserExtractRequest\x1a .terminal.BrowserExtractResponse\x12\x62\n\x13\x42rowserExtractRegex\x12$.terminal.BrowserExtractRegexRequest\x1a%.terminal.BrowserExtractRegexResponse\x12S\n\x0e\x42rowserGetHTML\x12\x1f.terminal.BrowserGetHTMLRequest\x1a .terminal.BrowserGetHTMLResponse\x12S\n\x0e\x42rowserGetText\x12\x1f.terminal.BrowserGetTextRequest\x1a .terminal.BrowserGetTextResponse\x12\x65\n\x14\x42rowserExecuteScript\x12%.terminal.BrowserExecuteScriptRequest\x1a&.terminal.BrowserExecuteScriptResponse\x12\\\n\x11\x42rowserScreenshot\x12\".terminal.BrowserScreenshotRequest\x1a#.terminal.BrowserScreenshotResponse\x12V\n\x0f\x42rowserGetState\x12 .terminal.BrowserGetStateRequest\x1a!.terminal.BrowserGetStateResponse\x12\\\n\x11\x42rowserSetCookies\x12\".terminal.BrowserSetCookiesRequest\x1a#.terminal.BrowserSetCookiesResponse\x12\\\n\x11\x42rowserGetCookies\x12\".terminal.BrowserGetCookiesRequest\x1a#.terminal.BrowserGetCookiesResponse\x12q\n\x18\x42rowserValidateSelectors\x12).terminal.BrowserValidateSelectorsRequest\x1a*.terminal.BrowserValidateSelectorsResponse\x12_\n\x12\x42rowserExtractData\x12#.terminal.BrowserExtractDataRequest\x1a$.terminal.BrowserExtractDataResponse\x12Y\n\x10\x42rowserMouseMove\x12!.terminal.BrowserMouseMoveRequest\x1a\".terminal.BrowserMouseMoveResponse\x12M\n\x0c\x42rowserHover\x12\x1d.terminal.BrowserHoverRequest\x1a\x1e.terminal.BrowserHoverResponse\x12P\n\rBrowserScroll\x12\x1e.terminal.BrowserScrollRequest\x1a\x1f.terminal.BrowserScrollResponseB\x10Z\x0eterminal/protob\x06proto3')
129
129
 
130
130
  _globals = globals()
131
131
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -134,5 +134,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
134
134
  _globals['DESCRIPTOR']._loaded_options = None
135
135
  _globals['DESCRIPTOR']._serialized_options = b'Z\016terminal/proto'
136
136
  _globals['_TERMINALSTREAMINGSERVICE']._serialized_start=133
137
- _globals['_TERMINALSTREAMINGSERVICE']._serialized_end=4749
137
+ _globals['_TERMINALSTREAMINGSERVICE']._serialized_end=5001
138
138
  # @@protoc_insertion_point(module_scope)
@@ -320,6 +320,21 @@ class TerminalStreamingServiceStub(object):
320
320
  request_serializer=rpc__messages_dot_browser__pb2.BrowserExtractDataRequest.SerializeToString,
321
321
  response_deserializer=rpc__messages_dot_browser__pb2.BrowserExtractDataResponse.FromString,
322
322
  _registered_method=True)
323
+ self.BrowserMouseMove = channel.unary_unary(
324
+ '/terminal.TerminalStreamingService/BrowserMouseMove',
325
+ request_serializer=rpc__messages_dot_browser__pb2.BrowserMouseMoveRequest.SerializeToString,
326
+ response_deserializer=rpc__messages_dot_browser__pb2.BrowserMouseMoveResponse.FromString,
327
+ _registered_method=True)
328
+ self.BrowserHover = channel.unary_unary(
329
+ '/terminal.TerminalStreamingService/BrowserHover',
330
+ request_serializer=rpc__messages_dot_browser__pb2.BrowserHoverRequest.SerializeToString,
331
+ response_deserializer=rpc__messages_dot_browser__pb2.BrowserHoverResponse.FromString,
332
+ _registered_method=True)
333
+ self.BrowserScroll = channel.unary_unary(
334
+ '/terminal.TerminalStreamingService/BrowserScroll',
335
+ request_serializer=rpc__messages_dot_browser__pb2.BrowserScrollRequest.SerializeToString,
336
+ response_deserializer=rpc__messages_dot_browser__pb2.BrowserScrollResponse.FromString,
337
+ _registered_method=True)
323
338
 
324
339
 
325
340
  class TerminalStreamingServiceServicer(object):
@@ -679,6 +694,25 @@ class TerminalStreamingServiceServicer(object):
679
694
  context.set_details('Method not implemented!')
680
695
  raise NotImplementedError('Method not implemented!')
681
696
 
697
+ def BrowserMouseMove(self, request, context):
698
+ """Mouse & Input (v2.18.0)
699
+ """
700
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
701
+ context.set_details('Method not implemented!')
702
+ raise NotImplementedError('Method not implemented!')
703
+
704
+ def BrowserHover(self, request, context):
705
+ """Missing associated documentation comment in .proto file."""
706
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
707
+ context.set_details('Method not implemented!')
708
+ raise NotImplementedError('Method not implemented!')
709
+
710
+ def BrowserScroll(self, request, context):
711
+ """Missing associated documentation comment in .proto file."""
712
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
713
+ context.set_details('Method not implemented!')
714
+ raise NotImplementedError('Method not implemented!')
715
+
682
716
 
683
717
  def add_TerminalStreamingServiceServicer_to_server(servicer, server):
684
718
  rpc_method_handlers = {
@@ -947,6 +981,21 @@ def add_TerminalStreamingServiceServicer_to_server(servicer, server):
947
981
  request_deserializer=rpc__messages_dot_browser__pb2.BrowserExtractDataRequest.FromString,
948
982
  response_serializer=rpc__messages_dot_browser__pb2.BrowserExtractDataResponse.SerializeToString,
949
983
  ),
984
+ 'BrowserMouseMove': grpc.unary_unary_rpc_method_handler(
985
+ servicer.BrowserMouseMove,
986
+ request_deserializer=rpc__messages_dot_browser__pb2.BrowserMouseMoveRequest.FromString,
987
+ response_serializer=rpc__messages_dot_browser__pb2.BrowserMouseMoveResponse.SerializeToString,
988
+ ),
989
+ 'BrowserHover': grpc.unary_unary_rpc_method_handler(
990
+ servicer.BrowserHover,
991
+ request_deserializer=rpc__messages_dot_browser__pb2.BrowserHoverRequest.FromString,
992
+ response_serializer=rpc__messages_dot_browser__pb2.BrowserHoverResponse.SerializeToString,
993
+ ),
994
+ 'BrowserScroll': grpc.unary_unary_rpc_method_handler(
995
+ servicer.BrowserScroll,
996
+ request_deserializer=rpc__messages_dot_browser__pb2.BrowserScrollRequest.FromString,
997
+ response_serializer=rpc__messages_dot_browser__pb2.BrowserScrollResponse.SerializeToString,
998
+ ),
950
999
  }
951
1000
  generic_handler = grpc.method_handlers_generic_handler(
952
1001
  'terminal.TerminalStreamingService', rpc_method_handlers)
@@ -2392,3 +2441,84 @@ class TerminalStreamingService(object):
2392
2441
  timeout,
2393
2442
  metadata,
2394
2443
  _registered_method=True)
2444
+
2445
+ @staticmethod
2446
+ def BrowserMouseMove(request,
2447
+ target,
2448
+ options=(),
2449
+ channel_credentials=None,
2450
+ call_credentials=None,
2451
+ insecure=False,
2452
+ compression=None,
2453
+ wait_for_ready=None,
2454
+ timeout=None,
2455
+ metadata=None):
2456
+ return grpc.experimental.unary_unary(
2457
+ request,
2458
+ target,
2459
+ '/terminal.TerminalStreamingService/BrowserMouseMove',
2460
+ rpc__messages_dot_browser__pb2.BrowserMouseMoveRequest.SerializeToString,
2461
+ rpc__messages_dot_browser__pb2.BrowserMouseMoveResponse.FromString,
2462
+ options,
2463
+ channel_credentials,
2464
+ insecure,
2465
+ call_credentials,
2466
+ compression,
2467
+ wait_for_ready,
2468
+ timeout,
2469
+ metadata,
2470
+ _registered_method=True)
2471
+
2472
+ @staticmethod
2473
+ def BrowserHover(request,
2474
+ target,
2475
+ options=(),
2476
+ channel_credentials=None,
2477
+ call_credentials=None,
2478
+ insecure=False,
2479
+ compression=None,
2480
+ wait_for_ready=None,
2481
+ timeout=None,
2482
+ metadata=None):
2483
+ return grpc.experimental.unary_unary(
2484
+ request,
2485
+ target,
2486
+ '/terminal.TerminalStreamingService/BrowserHover',
2487
+ rpc__messages_dot_browser__pb2.BrowserHoverRequest.SerializeToString,
2488
+ rpc__messages_dot_browser__pb2.BrowserHoverResponse.FromString,
2489
+ options,
2490
+ channel_credentials,
2491
+ insecure,
2492
+ call_credentials,
2493
+ compression,
2494
+ wait_for_ready,
2495
+ timeout,
2496
+ metadata,
2497
+ _registered_method=True)
2498
+
2499
+ @staticmethod
2500
+ def BrowserScroll(request,
2501
+ target,
2502
+ options=(),
2503
+ channel_credentials=None,
2504
+ call_credentials=None,
2505
+ insecure=False,
2506
+ compression=None,
2507
+ wait_for_ready=None,
2508
+ timeout=None,
2509
+ metadata=None):
2510
+ return grpc.experimental.unary_unary(
2511
+ request,
2512
+ target,
2513
+ '/terminal.TerminalStreamingService/BrowserScroll',
2514
+ rpc__messages_dot_browser__pb2.BrowserScrollRequest.SerializeToString,
2515
+ rpc__messages_dot_browser__pb2.BrowserScrollResponse.FromString,
2516
+ options,
2517
+ channel_credentials,
2518
+ insecure,
2519
+ call_credentials,
2520
+ compression,
2521
+ wait_for_ready,
2522
+ timeout,
2523
+ metadata,
2524
+ _registered_method=True)
@@ -20,7 +20,7 @@ Usage:
20
20
  data = await session.fetch_all(urls, headers={"Accept": "application/json"})
21
21
  """
22
22
 
23
- from cmdop.services.browser.models import BrowserCookie, BrowserState, raise_browser_error
23
+ from cmdop.services.browser.models import BrowserCookie, BrowserState, PageInfo, ScrollResult, raise_browser_error
24
24
 
25
25
  # Sync
26
26
  from cmdop.services.browser.sync.session import BrowserSession
@@ -34,6 +34,8 @@ __all__ = [
34
34
  # Models
35
35
  "BrowserCookie",
36
36
  "BrowserState",
37
+ "PageInfo",
38
+ "ScrollResult",
37
39
  "raise_browser_error",
38
40
  # Sync
39
41
  "BrowserSession",
@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Any
7
7
 
8
8
  from cmdop.services.base import BaseService
9
9
  from cmdop.services.browser.base.service import BaseServiceMixin, cookie_to_pb, pb_to_cookie
10
- from cmdop.services.browser.models import BrowserCookie, BrowserState, raise_browser_error
10
+ from cmdop.services.browser.models import BrowserCookie, BrowserState, PageInfo, ScrollResult, raise_browser_error
11
11
 
12
12
  if TYPE_CHECKING:
13
13
  from cmdop.transport.base import BaseTransport
@@ -321,3 +321,95 @@ class AsyncBrowserService(BaseService, BaseServiceMixin):
321
321
  "items": json.loads(response.items_json) if response.items_json else [],
322
322
  "count": response.count,
323
323
  }
324
+
325
+ # === Mouse & Scroll (v2.18.0) ===
326
+
327
+ async def mouse_move(
328
+ self, session_id: str, x: int, y: int, steps: int = 10
329
+ ) -> None:
330
+ """Move cursor to coordinates with smooth movement."""
331
+ from cmdop._generated.rpc_messages.browser_pb2 import BrowserMouseMoveRequest
332
+
333
+ request = BrowserMouseMoveRequest(
334
+ browser_session_id=session_id, x=x, y=y, steps=steps
335
+ )
336
+ response = await self._call_async(self._get_stub.BrowserMouseMove, request)
337
+
338
+ if not response.success:
339
+ raise RuntimeError(f"MouseMove failed: {response.error}")
340
+
341
+ async def hover(self, session_id: str, selector: str, timeout_ms: int = 5000) -> None:
342
+ """Hover over element by selector."""
343
+ from cmdop._generated.rpc_messages.browser_pb2 import BrowserHoverRequest
344
+
345
+ request = BrowserHoverRequest(
346
+ browser_session_id=session_id, selector=selector, timeout_ms=timeout_ms
347
+ )
348
+ response = await self._call_async(self._get_stub.BrowserHover, request)
349
+
350
+ if not response.success:
351
+ raise_browser_error(response.error, "hover", selector=selector)
352
+
353
+ async def scroll(
354
+ self,
355
+ session_id: str,
356
+ direction: str = "down",
357
+ amount: int = 500,
358
+ selector: str = "",
359
+ smooth: bool = True,
360
+ ) -> ScrollResult:
361
+ """Scroll page or element into view."""
362
+ from cmdop._generated.rpc_messages.browser_pb2 import BrowserScrollRequest
363
+
364
+ request = BrowserScrollRequest(
365
+ browser_session_id=session_id,
366
+ direction=direction,
367
+ amount=amount,
368
+ selector=selector,
369
+ smooth=smooth,
370
+ )
371
+ response = await self._call_async(self._get_stub.BrowserScroll, request)
372
+
373
+ if not response.success:
374
+ return ScrollResult(success=False, error=response.error)
375
+
376
+ return ScrollResult(
377
+ success=True,
378
+ scroll_x=response.scroll_x,
379
+ scroll_y=response.scroll_y,
380
+ scrolled_by=response.scrolled_by,
381
+ page_height=response.page_height,
382
+ viewport_height=response.viewport_height,
383
+ at_bottom=response.at_bottom,
384
+ )
385
+
386
+ async def get_page_info(self, session_id: str) -> PageInfo:
387
+ """Get comprehensive page information."""
388
+ from cmdop._generated.rpc_messages.browser_pb2 import BrowserGetPageInfoRequest
389
+
390
+ request = BrowserGetPageInfoRequest(browser_session_id=session_id)
391
+ response = await self._call_async(self._get_stub.BrowserGetPageInfo, request)
392
+
393
+ if not response.success:
394
+ raise RuntimeError(f"GetPageInfo failed: {response.error}")
395
+
396
+ return PageInfo(
397
+ url=response.url,
398
+ title=response.title,
399
+ page_height=response.page_height,
400
+ viewport_height=response.viewport_height,
401
+ viewport_width=response.viewport_width,
402
+ scroll_x=response.scroll_x,
403
+ scroll_y=response.scroll_y,
404
+ at_top=response.at_top,
405
+ at_bottom=response.at_bottom,
406
+ load_time_ms=response.load_time_ms,
407
+ cookies_count=response.cookies_count,
408
+ is_https=response.is_https,
409
+ has_iframes=response.has_iframes,
410
+ dom_nodes_raw=response.dom_nodes_raw,
411
+ dom_nodes_cleaned=response.dom_nodes_cleaned,
412
+ tokens_estimate=response.tokens_estimate,
413
+ cloudflare_detected=response.cloudflare_detected,
414
+ captcha_detected=response.captcha_detected,
415
+ )