chromedeveloperprotocol-client 0.1.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 (476) hide show
  1. cdp/__init__.py +4 -0
  2. cdp/domains.py +582 -0
  3. cdp/generator/__init__.py +3 -0
  4. cdp/generator/client_generator.py +246 -0
  5. cdp/generator/constant.py +4 -0
  6. cdp/generator/domain_generator.py +149 -0
  7. cdp/generator/event_generator.py +202 -0
  8. cdp/generator/method_generator.py +215 -0
  9. cdp/generator/service.py +153 -0
  10. cdp/generator/type_generator.py +231 -0
  11. cdp/protocol/__init__.py +0 -0
  12. cdp/protocol/accessibility/__init__.py +0 -0
  13. cdp/protocol/accessibility/events/__init__.py +0 -0
  14. cdp/protocol/accessibility/events/service.py +37 -0
  15. cdp/protocol/accessibility/events/types.py +14 -0
  16. cdp/protocol/accessibility/methods/__init__.py +0 -0
  17. cdp/protocol/accessibility/methods/service.py +109 -0
  18. cdp/protocol/accessibility/methods/types.py +70 -0
  19. cdp/protocol/accessibility/service.py +21 -0
  20. cdp/protocol/accessibility/types.py +89 -0
  21. cdp/protocol/animation/__init__.py +0 -0
  22. cdp/protocol/animation/events/__init__.py +0 -0
  23. cdp/protocol/animation/events/service.py +53 -0
  24. cdp/protocol/animation/events/types.py +20 -0
  25. cdp/protocol/animation/methods/__init__.py +0 -0
  26. cdp/protocol/animation/methods/service.py +131 -0
  27. cdp/protocol/animation/methods/types.py +52 -0
  28. cdp/protocol/animation/service.py +21 -0
  29. cdp/protocol/animation/types.py +79 -0
  30. cdp/protocol/audits/__init__.py +0 -0
  31. cdp/protocol/audits/events/__init__.py +0 -0
  32. cdp/protocol/audits/events/service.py +29 -0
  33. cdp/protocol/audits/events/types.py +10 -0
  34. cdp/protocol/audits/methods/__init__.py +0 -0
  35. cdp/protocol/audits/methods/service.py +76 -0
  36. cdp/protocol/audits/methods/types.py +36 -0
  37. cdp/protocol/audits/service.py +21 -0
  38. cdp/protocol/audits/types.py +293 -0
  39. cdp/protocol/autofill/__init__.py +0 -0
  40. cdp/protocol/autofill/events/__init__.py +0 -0
  41. cdp/protocol/autofill/events/service.py +29 -0
  42. cdp/protocol/autofill/events/types.py +14 -0
  43. cdp/protocol/autofill/methods/__init__.py +0 -0
  44. cdp/protocol/autofill/methods/service.py +65 -0
  45. cdp/protocol/autofill/methods/types.py +22 -0
  46. cdp/protocol/autofill/service.py +21 -0
  47. cdp/protocol/autofill/types.py +54 -0
  48. cdp/protocol/background_service/__init__.py +0 -0
  49. cdp/protocol/background_service/events/__init__.py +0 -0
  50. cdp/protocol/background_service/events/service.py +37 -0
  51. cdp/protocol/background_service/events/types.py +14 -0
  52. cdp/protocol/background_service/methods/__init__.py +0 -0
  53. cdp/protocol/background_service/methods/service.py +65 -0
  54. cdp/protocol/background_service/methods/types.py +17 -0
  55. cdp/protocol/background_service/service.py +21 -0
  56. cdp/protocol/background_service/types.py +32 -0
  57. cdp/protocol/bluetooth_emulation/__init__.py +0 -0
  58. cdp/protocol/bluetooth_emulation/events/__init__.py +0 -0
  59. cdp/protocol/bluetooth_emulation/events/service.py +45 -0
  60. cdp/protocol/bluetooth_emulation/events/types.py +23 -0
  61. cdp/protocol/bluetooth_emulation/methods/__init__.py +0 -0
  62. cdp/protocol/bluetooth_emulation/methods/service.py +186 -0
  63. cdp/protocol/bluetooth_emulation/methods/types.py +81 -0
  64. cdp/protocol/bluetooth_emulation/service.py +21 -0
  65. cdp/protocol/bluetooth_emulation/types.py +45 -0
  66. cdp/protocol/browser/__init__.py +0 -0
  67. cdp/protocol/browser/events/__init__.py +0 -0
  68. cdp/protocol/browser/events/service.py +37 -0
  69. cdp/protocol/browser/events/types.py +28 -0
  70. cdp/protocol/browser/methods/__init__.py +0 -0
  71. cdp/protocol/browser/methods/service.py +230 -0
  72. cdp/protocol/browser/methods/types.py +126 -0
  73. cdp/protocol/browser/service.py +21 -0
  74. cdp/protocol/browser/types.py +57 -0
  75. cdp/protocol/cache_storage/__init__.py +0 -0
  76. cdp/protocol/cache_storage/events/__init__.py +0 -0
  77. cdp/protocol/cache_storage/events/service.py +20 -0
  78. cdp/protocol/cache_storage/events/types.py +3 -0
  79. cdp/protocol/cache_storage/methods/__init__.py +0 -0
  80. cdp/protocol/cache_storage/methods/service.py +76 -0
  81. cdp/protocol/cache_storage/methods/types.py +57 -0
  82. cdp/protocol/cache_storage/service.py +21 -0
  83. cdp/protocol/cache_storage/types.py +49 -0
  84. cdp/protocol/cast/__init__.py +0 -0
  85. cdp/protocol/cast/events/__init__.py +0 -0
  86. cdp/protocol/cast/events/service.py +37 -0
  87. cdp/protocol/cast/events/types.py +12 -0
  88. cdp/protocol/cast/methods/__init__.py +0 -0
  89. cdp/protocol/cast/methods/service.py +87 -0
  90. cdp/protocol/cast/methods/types.py +15 -0
  91. cdp/protocol/cast/service.py +21 -0
  92. cdp/protocol/cast/types.py +9 -0
  93. cdp/protocol/css/__init__.py +0 -0
  94. cdp/protocol/css/events/__init__.py +0 -0
  95. cdp/protocol/css/events/service.py +69 -0
  96. cdp/protocol/css/events/types.py +27 -0
  97. cdp/protocol/css/methods/__init__.py +0 -0
  98. cdp/protocol/css/methods/service.py +428 -0
  99. cdp/protocol/css/methods/types.py +278 -0
  100. cdp/protocol/css/service.py +21 -0
  101. cdp/protocol/css/types.py +451 -0
  102. cdp/protocol/debugger/__init__.py +0 -0
  103. cdp/protocol/debugger/events/__init__.py +0 -0
  104. cdp/protocol/debugger/events/service.py +53 -0
  105. cdp/protocol/debugger/events/types.py +112 -0
  106. cdp/protocol/debugger/methods/__init__.py +0 -0
  107. cdp/protocol/debugger/methods/service.py +362 -0
  108. cdp/protocol/debugger/methods/types.py +250 -0
  109. cdp/protocol/debugger/service.py +21 -0
  110. cdp/protocol/debugger/types.py +91 -0
  111. cdp/protocol/device_access/__init__.py +0 -0
  112. cdp/protocol/device_access/events/__init__.py +0 -0
  113. cdp/protocol/device_access/events/service.py +29 -0
  114. cdp/protocol/device_access/events/types.py +12 -0
  115. cdp/protocol/device_access/methods/__init__.py +0 -0
  116. cdp/protocol/device_access/methods/service.py +65 -0
  117. cdp/protocol/device_access/methods/types.py +16 -0
  118. cdp/protocol/device_access/service.py +21 -0
  119. cdp/protocol/device_access/types.py +13 -0
  120. cdp/protocol/device_orientation/__init__.py +0 -0
  121. cdp/protocol/device_orientation/events/__init__.py +0 -0
  122. cdp/protocol/device_orientation/events/service.py +20 -0
  123. cdp/protocol/device_orientation/events/types.py +3 -0
  124. cdp/protocol/device_orientation/methods/__init__.py +0 -0
  125. cdp/protocol/device_orientation/methods/service.py +43 -0
  126. cdp/protocol/device_orientation/methods/types.py +12 -0
  127. cdp/protocol/device_orientation/service.py +21 -0
  128. cdp/protocol/device_orientation/types.py +3 -0
  129. cdp/protocol/dom/__init__.py +0 -0
  130. cdp/protocol/dom/events/__init__.py +0 -0
  131. cdp/protocol/dom/events/service.py +165 -0
  132. cdp/protocol/dom/events/types.py +97 -0
  133. cdp/protocol/dom/methods/__init__.py +0 -0
  134. cdp/protocol/dom/methods/service.py +593 -0
  135. cdp/protocol/dom/methods/types.py +384 -0
  136. cdp/protocol/dom/service.py +21 -0
  137. cdp/protocol/dom/types.py +151 -0
  138. cdp/protocol/dom_debugger/__init__.py +0 -0
  139. cdp/protocol/dom_debugger/events/__init__.py +0 -0
  140. cdp/protocol/dom_debugger/events/service.py +20 -0
  141. cdp/protocol/dom_debugger/events/types.py +3 -0
  142. cdp/protocol/dom_debugger/methods/__init__.py +0 -0
  143. cdp/protocol/dom_debugger/methods/service.py +109 -0
  144. cdp/protocol/dom_debugger/methods/types.py +51 -0
  145. cdp/protocol/dom_debugger/service.py +21 -0
  146. cdp/protocol/dom_debugger/types.py +36 -0
  147. cdp/protocol/dom_snapshot/__init__.py +0 -0
  148. cdp/protocol/dom_snapshot/events/__init__.py +0 -0
  149. cdp/protocol/dom_snapshot/events/service.py +20 -0
  150. cdp/protocol/dom_snapshot/events/types.py +3 -0
  151. cdp/protocol/dom_snapshot/methods/__init__.py +0 -0
  152. cdp/protocol/dom_snapshot/methods/service.py +54 -0
  153. cdp/protocol/dom_snapshot/methods/types.py +28 -0
  154. cdp/protocol/dom_snapshot/service.py +21 -0
  155. cdp/protocol/dom_snapshot/types.py +220 -0
  156. cdp/protocol/dom_storage/__init__.py +0 -0
  157. cdp/protocol/dom_storage/events/__init__.py +0 -0
  158. cdp/protocol/dom_storage/events/service.py +53 -0
  159. cdp/protocol/dom_storage/events/types.py +22 -0
  160. cdp/protocol/dom_storage/methods/__init__.py +0 -0
  161. cdp/protocol/dom_storage/methods/service.py +87 -0
  162. cdp/protocol/dom_storage/methods/types.py +27 -0
  163. cdp/protocol/dom_storage/service.py +21 -0
  164. cdp/protocol/dom_storage/types.py +15 -0
  165. cdp/protocol/emulation/__init__.py +0 -0
  166. cdp/protocol/emulation/events/__init__.py +0 -0
  167. cdp/protocol/emulation/events/service.py +29 -0
  168. cdp/protocol/emulation/events/types.py +6 -0
  169. cdp/protocol/emulation/methods/__init__.py +0 -0
  170. cdp/protocol/emulation/methods/service.py +494 -0
  171. cdp/protocol/emulation/methods/types.py +261 -0
  172. cdp/protocol/emulation/service.py +21 -0
  173. cdp/protocol/emulation/types.py +132 -0
  174. cdp/protocol/event_breakpoints/__init__.py +0 -0
  175. cdp/protocol/event_breakpoints/events/__init__.py +0 -0
  176. cdp/protocol/event_breakpoints/events/service.py +20 -0
  177. cdp/protocol/event_breakpoints/events/types.py +3 -0
  178. cdp/protocol/event_breakpoints/methods/__init__.py +0 -0
  179. cdp/protocol/event_breakpoints/methods/service.py +54 -0
  180. cdp/protocol/event_breakpoints/methods/types.py +10 -0
  181. cdp/protocol/event_breakpoints/service.py +21 -0
  182. cdp/protocol/event_breakpoints/types.py +3 -0
  183. cdp/protocol/extensions/__init__.py +0 -0
  184. cdp/protocol/extensions/events/__init__.py +0 -0
  185. cdp/protocol/extensions/events/service.py +20 -0
  186. cdp/protocol/extensions/events/types.py +3 -0
  187. cdp/protocol/extensions/methods/__init__.py +0 -0
  188. cdp/protocol/extensions/methods/service.py +87 -0
  189. cdp/protocol/extensions/methods/types.py +46 -0
  190. cdp/protocol/extensions/service.py +21 -0
  191. cdp/protocol/extensions/types.py +6 -0
  192. cdp/protocol/fed_cm/__init__.py +0 -0
  193. cdp/protocol/fed_cm/events/__init__.py +0 -0
  194. cdp/protocol/fed_cm/events/service.py +37 -0
  195. cdp/protocol/fed_cm/events/types.py +18 -0
  196. cdp/protocol/fed_cm/methods/__init__.py +0 -0
  197. cdp/protocol/fed_cm/methods/service.py +98 -0
  198. cdp/protocol/fed_cm/methods/types.py +26 -0
  199. cdp/protocol/fed_cm/service.py +21 -0
  200. cdp/protocol/fed_cm/types.py +25 -0
  201. cdp/protocol/fetch/__init__.py +0 -0
  202. cdp/protocol/fetch/events/__init__.py +0 -0
  203. cdp/protocol/fetch/events/service.py +37 -0
  204. cdp/protocol/fetch/events/types.py +47 -0
  205. cdp/protocol/fetch/methods/__init__.py +0 -0
  206. cdp/protocol/fetch/methods/service.py +120 -0
  207. cdp/protocol/fetch/methods/types.py +85 -0
  208. cdp/protocol/fetch/service.py +21 -0
  209. cdp/protocol/fetch/types.py +41 -0
  210. cdp/protocol/file_system/__init__.py +0 -0
  211. cdp/protocol/file_system/events/__init__.py +0 -0
  212. cdp/protocol/file_system/events/service.py +20 -0
  213. cdp/protocol/file_system/events/types.py +3 -0
  214. cdp/protocol/file_system/methods/__init__.py +0 -0
  215. cdp/protocol/file_system/methods/service.py +32 -0
  216. cdp/protocol/file_system/methods/types.py +14 -0
  217. cdp/protocol/file_system/service.py +21 -0
  218. cdp/protocol/file_system/types.py +28 -0
  219. cdp/protocol/headless_experimental/__init__.py +0 -0
  220. cdp/protocol/headless_experimental/events/__init__.py +0 -0
  221. cdp/protocol/headless_experimental/events/service.py +20 -0
  222. cdp/protocol/headless_experimental/events/types.py +3 -0
  223. cdp/protocol/headless_experimental/methods/__init__.py +0 -0
  224. cdp/protocol/headless_experimental/methods/service.py +32 -0
  225. cdp/protocol/headless_experimental/methods/types.py +22 -0
  226. cdp/protocol/headless_experimental/service.py +21 -0
  227. cdp/protocol/headless_experimental/types.py +12 -0
  228. cdp/protocol/heap_profiler/__init__.py +0 -0
  229. cdp/protocol/heap_profiler/events/__init__.py +0 -0
  230. cdp/protocol/heap_profiler/events/service.py +61 -0
  231. cdp/protocol/heap_profiler/events/types.py +18 -0
  232. cdp/protocol/heap_profiler/methods/__init__.py +0 -0
  233. cdp/protocol/heap_profiler/methods/service.py +153 -0
  234. cdp/protocol/heap_profiler/methods/types.py +73 -0
  235. cdp/protocol/heap_profiler/service.py +21 -0
  236. cdp/protocol/heap_profiler/types.py +32 -0
  237. cdp/protocol/indexed_db/__init__.py +0 -0
  238. cdp/protocol/indexed_db/events/__init__.py +0 -0
  239. cdp/protocol/indexed_db/events/service.py +20 -0
  240. cdp/protocol/indexed_db/events/types.py +3 -0
  241. cdp/protocol/indexed_db/methods/__init__.py +0 -0
  242. cdp/protocol/indexed_db/methods/service.py +120 -0
  243. cdp/protocol/indexed_db/methods/types.py +111 -0
  244. cdp/protocol/indexed_db/service.py +21 -0
  245. cdp/protocol/indexed_db/types.py +74 -0
  246. cdp/protocol/input/__init__.py +0 -0
  247. cdp/protocol/input/events/__init__.py +0 -0
  248. cdp/protocol/input/events/service.py +29 -0
  249. cdp/protocol/input/events/types.py +10 -0
  250. cdp/protocol/input/methods/__init__.py +0 -0
  251. cdp/protocol/input/methods/service.py +164 -0
  252. cdp/protocol/input/methods/types.py +181 -0
  253. cdp/protocol/input/service.py +21 -0
  254. cdp/protocol/input/types.py +46 -0
  255. cdp/protocol/inspector/__init__.py +0 -0
  256. cdp/protocol/inspector/events/__init__.py +0 -0
  257. cdp/protocol/inspector/events/service.py +53 -0
  258. cdp/protocol/inspector/events/types.py +13 -0
  259. cdp/protocol/inspector/methods/__init__.py +0 -0
  260. cdp/protocol/inspector/methods/service.py +43 -0
  261. cdp/protocol/inspector/methods/types.py +3 -0
  262. cdp/protocol/inspector/service.py +21 -0
  263. cdp/protocol/inspector/types.py +3 -0
  264. cdp/protocol/io/__init__.py +0 -0
  265. cdp/protocol/io/events/__init__.py +0 -0
  266. cdp/protocol/io/events/service.py +20 -0
  267. cdp/protocol/io/events/types.py +3 -0
  268. cdp/protocol/io/methods/__init__.py +0 -0
  269. cdp/protocol/io/methods/service.py +54 -0
  270. cdp/protocol/io/methods/types.py +33 -0
  271. cdp/protocol/io/service.py +21 -0
  272. cdp/protocol/io/types.py +6 -0
  273. cdp/protocol/layer_tree/__init__.py +0 -0
  274. cdp/protocol/layer_tree/events/__init__.py +0 -0
  275. cdp/protocol/layer_tree/events/service.py +37 -0
  276. cdp/protocol/layer_tree/events/types.py +18 -0
  277. cdp/protocol/layer_tree/methods/__init__.py +0 -0
  278. cdp/protocol/layer_tree/methods/service.py +120 -0
  279. cdp/protocol/layer_tree/methods/types.py +70 -0
  280. cdp/protocol/layer_tree/service.py +21 -0
  281. cdp/protocol/layer_tree/types.py +73 -0
  282. cdp/protocol/log/__init__.py +0 -0
  283. cdp/protocol/log/events/__init__.py +0 -0
  284. cdp/protocol/log/events/service.py +29 -0
  285. cdp/protocol/log/events/types.py +11 -0
  286. cdp/protocol/log/methods/__init__.py +0 -0
  287. cdp/protocol/log/methods/service.py +76 -0
  288. cdp/protocol/log/methods/types.py +14 -0
  289. cdp/protocol/log/service.py +21 -0
  290. cdp/protocol/log/types.py +40 -0
  291. cdp/protocol/media/__init__.py +0 -0
  292. cdp/protocol/media/events/__init__.py +0 -0
  293. cdp/protocol/media/events/service.py +61 -0
  294. cdp/protocol/media/events/types.py +27 -0
  295. cdp/protocol/media/methods/__init__.py +0 -0
  296. cdp/protocol/media/methods/service.py +43 -0
  297. cdp/protocol/media/methods/types.py +3 -0
  298. cdp/protocol/media/service.py +21 -0
  299. cdp/protocol/media/types.py +42 -0
  300. cdp/protocol/memory/__init__.py +0 -0
  301. cdp/protocol/memory/events/__init__.py +0 -0
  302. cdp/protocol/memory/events/service.py +20 -0
  303. cdp/protocol/memory/events/types.py +3 -0
  304. cdp/protocol/memory/methods/__init__.py +0 -0
  305. cdp/protocol/memory/methods/service.py +142 -0
  306. cdp/protocol/memory/methods/types.py +48 -0
  307. cdp/protocol/memory/service.py +21 -0
  308. cdp/protocol/memory/types.py +34 -0
  309. cdp/protocol/network/__init__.py +0 -0
  310. cdp/protocol/network/events/__init__.py +0 -0
  311. cdp/protocol/network/events/service.py +365 -0
  312. cdp/protocol/network/events/types.py +360 -0
  313. cdp/protocol/network/methods/__init__.py +0 -0
  314. cdp/protocol/network/methods/service.py +384 -0
  315. cdp/protocol/network/methods/types.py +252 -0
  316. cdp/protocol/network/service.py +21 -0
  317. cdp/protocol/network/types.py +691 -0
  318. cdp/protocol/overlay/__init__.py +0 -0
  319. cdp/protocol/overlay/events/__init__.py +0 -0
  320. cdp/protocol/overlay/events/service.py +53 -0
  321. cdp/protocol/overlay/events/types.py +20 -0
  322. cdp/protocol/overlay/methods/__init__.py +0 -0
  323. cdp/protocol/overlay/methods/service.py +307 -0
  324. cdp/protocol/overlay/methods/types.py +144 -0
  325. cdp/protocol/overlay/service.py +21 -0
  326. cdp/protocol/overlay/types.py +198 -0
  327. cdp/protocol/page/__init__.py +0 -0
  328. cdp/protocol/page/events/__init__.py +0 -0
  329. cdp/protocol/page/events/service.py +213 -0
  330. cdp/protocol/page/events/types.py +147 -0
  331. cdp/protocol/page/methods/__init__.py +0 -0
  332. cdp/protocol/page/methods/service.py +560 -0
  333. cdp/protocol/page/methods/types.py +346 -0
  334. cdp/protocol/page/service.py +21 -0
  335. cdp/protocol/page/types.py +379 -0
  336. cdp/protocol/performance/__init__.py +0 -0
  337. cdp/protocol/performance/events/__init__.py +0 -0
  338. cdp/protocol/performance/events/service.py +29 -0
  339. cdp/protocol/performance/events/types.py +13 -0
  340. cdp/protocol/performance/methods/__init__.py +0 -0
  341. cdp/protocol/performance/methods/service.py +54 -0
  342. cdp/protocol/performance/methods/types.py +18 -0
  343. cdp/protocol/performance/service.py +21 -0
  344. cdp/protocol/performance/types.py +10 -0
  345. cdp/protocol/performance_timeline/__init__.py +0 -0
  346. cdp/protocol/performance_timeline/events/__init__.py +0 -0
  347. cdp/protocol/performance_timeline/events/service.py +29 -0
  348. cdp/protocol/performance_timeline/events/types.py +10 -0
  349. cdp/protocol/performance_timeline/methods/__init__.py +0 -0
  350. cdp/protocol/performance_timeline/methods/service.py +32 -0
  351. cdp/protocol/performance_timeline/methods/types.py +7 -0
  352. cdp/protocol/performance_timeline/service.py +21 -0
  353. cdp/protocol/performance_timeline/types.py +46 -0
  354. cdp/protocol/preload/__init__.py +0 -0
  355. cdp/protocol/preload/events/__init__.py +0 -0
  356. cdp/protocol/preload/events/service.py +69 -0
  357. cdp/protocol/preload/events/types.py +49 -0
  358. cdp/protocol/preload/methods/__init__.py +0 -0
  359. cdp/protocol/preload/methods/service.py +43 -0
  360. cdp/protocol/preload/methods/types.py +3 -0
  361. cdp/protocol/preload/service.py +21 -0
  362. cdp/protocol/preload/types.py +56 -0
  363. cdp/protocol/profiler/__init__.py +0 -0
  364. cdp/protocol/profiler/events/__init__.py +0 -0
  365. cdp/protocol/profiler/events/service.py +45 -0
  366. cdp/protocol/profiler/events/types.py +30 -0
  367. cdp/protocol/profiler/methods/__init__.py +0 -0
  368. cdp/protocol/profiler/methods/service.py +120 -0
  369. cdp/protocol/profiler/methods/types.py +45 -0
  370. cdp/protocol/profiler/service.py +21 -0
  371. cdp/protocol/profiler/types.py +65 -0
  372. cdp/protocol/pwa/__init__.py +0 -0
  373. cdp/protocol/pwa/events/__init__.py +0 -0
  374. cdp/protocol/pwa/events/service.py +20 -0
  375. cdp/protocol/pwa/events/types.py +3 -0
  376. cdp/protocol/pwa/methods/__init__.py +0 -0
  377. cdp/protocol/pwa/methods/service.py +98 -0
  378. cdp/protocol/pwa/methods/types.py +43 -0
  379. cdp/protocol/pwa/service.py +21 -0
  380. cdp/protocol/pwa/types.py +15 -0
  381. cdp/protocol/py.typed +0 -0
  382. cdp/protocol/runtime/__init__.py +0 -0
  383. cdp/protocol/runtime/events/__init__.py +0 -0
  384. cdp/protocol/runtime/events/service.py +85 -0
  385. cdp/protocol/runtime/events/types.py +55 -0
  386. cdp/protocol/runtime/methods/__init__.py +0 -0
  387. cdp/protocol/runtime/methods/service.py +274 -0
  388. cdp/protocol/runtime/methods/types.py +226 -0
  389. cdp/protocol/runtime/service.py +21 -0
  390. cdp/protocol/runtime/types.py +194 -0
  391. cdp/protocol/security/__init__.py +0 -0
  392. cdp/protocol/security/events/__init__.py +0 -0
  393. cdp/protocol/security/events/service.py +29 -0
  394. cdp/protocol/security/events/types.py +11 -0
  395. cdp/protocol/security/methods/__init__.py +0 -0
  396. cdp/protocol/security/methods/service.py +54 -0
  397. cdp/protocol/security/methods/types.py +9 -0
  398. cdp/protocol/security/service.py +21 -0
  399. cdp/protocol/security/types.py +102 -0
  400. cdp/protocol/service_worker/__init__.py +0 -0
  401. cdp/protocol/service_worker/events/__init__.py +0 -0
  402. cdp/protocol/service_worker/events/service.py +45 -0
  403. cdp/protocol/service_worker/events/types.py +16 -0
  404. cdp/protocol/service_worker/methods/__init__.py +0 -0
  405. cdp/protocol/service_worker/methods/service.py +153 -0
  406. cdp/protocol/service_worker/methods/types.py +36 -0
  407. cdp/protocol/service_worker/service.py +21 -0
  408. cdp/protocol/service_worker/types.py +38 -0
  409. cdp/protocol/storage/__init__.py +0 -0
  410. cdp/protocol/storage/events/__init__.py +0 -0
  411. cdp/protocol/storage/events/service.py +141 -0
  412. cdp/protocol/storage/events/types.py +139 -0
  413. cdp/protocol/storage/methods/__init__.py +0 -0
  414. cdp/protocol/storage/methods/service.py +428 -0
  415. cdp/protocol/storage/methods/types.py +184 -0
  416. cdp/protocol/storage/service.py +21 -0
  417. cdp/protocol/storage/types.py +236 -0
  418. cdp/protocol/system_info/__init__.py +0 -0
  419. cdp/protocol/system_info/events/__init__.py +0 -0
  420. cdp/protocol/system_info/events/service.py +20 -0
  421. cdp/protocol/system_info/events/types.py +3 -0
  422. cdp/protocol/system_info/methods/__init__.py +0 -0
  423. cdp/protocol/system_info/methods/service.py +54 -0
  424. cdp/protocol/system_info/methods/types.py +27 -0
  425. cdp/protocol/system_info/service.py +21 -0
  426. cdp/protocol/system_info/types.py +71 -0
  427. cdp/protocol/target/__init__.py +0 -0
  428. cdp/protocol/target/events/__init__.py +0 -0
  429. cdp/protocol/target/events/service.py +77 -0
  430. cdp/protocol/target/events/types.py +38 -0
  431. cdp/protocol/target/methods/__init__.py +0 -0
  432. cdp/protocol/target/methods/service.py +219 -0
  433. cdp/protocol/target/methods/types.py +148 -0
  434. cdp/protocol/target/service.py +21 -0
  435. cdp/protocol/target/types.py +44 -0
  436. cdp/protocol/tethering/__init__.py +0 -0
  437. cdp/protocol/tethering/events/__init__.py +0 -0
  438. cdp/protocol/tethering/events/service.py +29 -0
  439. cdp/protocol/tethering/events/types.py +9 -0
  440. cdp/protocol/tethering/methods/__init__.py +0 -0
  441. cdp/protocol/tethering/methods/service.py +43 -0
  442. cdp/protocol/tethering/methods/types.py +10 -0
  443. cdp/protocol/tethering/service.py +21 -0
  444. cdp/protocol/tethering/types.py +3 -0
  445. cdp/protocol/tracing/__init__.py +0 -0
  446. cdp/protocol/tracing/events/__init__.py +0 -0
  447. cdp/protocol/tracing/events/service.py +45 -0
  448. cdp/protocol/tracing/events/types.py +28 -0
  449. cdp/protocol/tracing/methods/__init__.py +0 -0
  450. cdp/protocol/tracing/methods/service.py +87 -0
  451. cdp/protocol/tracing/methods/types.py +54 -0
  452. cdp/protocol/tracing/service.py +21 -0
  453. cdp/protocol/tracing/types.py +34 -0
  454. cdp/protocol/web_audio/__init__.py +0 -0
  455. cdp/protocol/web_audio/events/__init__.py +0 -0
  456. cdp/protocol/web_audio/events/service.py +125 -0
  457. cdp/protocol/web_audio/events/types.py +56 -0
  458. cdp/protocol/web_audio/methods/__init__.py +0 -0
  459. cdp/protocol/web_audio/methods/service.py +54 -0
  460. cdp/protocol/web_audio/methods/types.py +17 -0
  461. cdp/protocol/web_audio/service.py +21 -0
  462. cdp/protocol/web_audio/types.py +66 -0
  463. cdp/protocol/web_authn/__init__.py +0 -0
  464. cdp/protocol/web_authn/events/__init__.py +0 -0
  465. cdp/protocol/web_authn/events/service.py +53 -0
  466. cdp/protocol/web_authn/events/types.py +21 -0
  467. cdp/protocol/web_authn/methods/__init__.py +0 -0
  468. cdp/protocol/web_authn/methods/service.py +164 -0
  469. cdp/protocol/web_authn/methods/types.py +61 -0
  470. cdp/protocol/web_authn/service.py +21 -0
  471. cdp/protocol/web_authn/types.py +54 -0
  472. cdp/py.typed +0 -0
  473. cdp/service.py +184 -0
  474. chromedeveloperprotocol_client-0.1.0.dist-info/METADATA +15 -0
  475. chromedeveloperprotocol_client-0.1.0.dist-info/RECORD +476 -0
  476. chromedeveloperprotocol_client-0.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,164 @@
1
+ """CDP WebAuthn Domain Methods"""
2
+ from ..types import *
3
+ from .types import *
4
+ from typing import Optional, Dict, Any, Callable, TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ from ....service import Client
8
+
9
+ class WebAuthnMethods:
10
+ """
11
+ Methods for the WebAuthn domain.
12
+ """
13
+ def __init__(self, client: "Client"):
14
+ """
15
+ Initialize the WebAuthn methods.
16
+
17
+ Args:
18
+ client ("Client"): The parent CDP client instance.
19
+ """
20
+ self.client = client
21
+
22
+ async def enable(self, params: Optional[enableParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
23
+ """
24
+ Enable the WebAuthn domain and start intercepting credential storage and retrieval with a virtual authenticator.
25
+ Args:
26
+ params (enableParameters, optional): Parameters for the enable method.
27
+ session_id (str, optional): Target session ID for flat protocol usage.
28
+
29
+ Returns:
30
+ Dict[str, Any]: The result of the enable call.
31
+ """
32
+ return await self.client.send(method="WebAuthn.enable", params=params,session_id=session_id)
33
+ async def disable(self, params: None=None,session_id: Optional[str] = None) -> Dict[str, Any]:
34
+ """
35
+ Disable the WebAuthn domain.
36
+ Args:
37
+ params (None, optional): Parameters for the disable method.
38
+ session_id (str, optional): Target session ID for flat protocol usage.
39
+
40
+ Returns:
41
+ Dict[str, Any]: The result of the disable call.
42
+ """
43
+ return await self.client.send(method="WebAuthn.disable", params=params,session_id=session_id)
44
+ async def add_virtual_authenticator(self, params: Optional[addVirtualAuthenticatorParameters]=None,session_id: Optional[str] = None) -> addVirtualAuthenticatorReturns:
45
+ """
46
+ Creates and adds a virtual authenticator.
47
+ Args:
48
+ params (addVirtualAuthenticatorParameters, optional): Parameters for the addVirtualAuthenticator method.
49
+ session_id (str, optional): Target session ID for flat protocol usage.
50
+
51
+ Returns:
52
+ addVirtualAuthenticatorReturns: The result of the addVirtualAuthenticator call.
53
+ """
54
+ return await self.client.send(method="WebAuthn.addVirtualAuthenticator", params=params,session_id=session_id)
55
+ async def set_response_override_bits(self, params: Optional[setResponseOverrideBitsParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
56
+ """
57
+ Resets parameters isBogusSignature, isBadUV, isBadUP to false if they are not present.
58
+ Args:
59
+ params (setResponseOverrideBitsParameters, optional): Parameters for the setResponseOverrideBits method.
60
+ session_id (str, optional): Target session ID for flat protocol usage.
61
+
62
+ Returns:
63
+ Dict[str, Any]: The result of the setResponseOverrideBits call.
64
+ """
65
+ return await self.client.send(method="WebAuthn.setResponseOverrideBits", params=params,session_id=session_id)
66
+ async def remove_virtual_authenticator(self, params: Optional[removeVirtualAuthenticatorParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
67
+ """
68
+ Removes the given authenticator.
69
+ Args:
70
+ params (removeVirtualAuthenticatorParameters, optional): Parameters for the removeVirtualAuthenticator method.
71
+ session_id (str, optional): Target session ID for flat protocol usage.
72
+
73
+ Returns:
74
+ Dict[str, Any]: The result of the removeVirtualAuthenticator call.
75
+ """
76
+ return await self.client.send(method="WebAuthn.removeVirtualAuthenticator", params=params,session_id=session_id)
77
+ async def add_credential(self, params: Optional[addCredentialParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
78
+ """
79
+ Adds the credential to the specified authenticator.
80
+ Args:
81
+ params (addCredentialParameters, optional): Parameters for the addCredential method.
82
+ session_id (str, optional): Target session ID for flat protocol usage.
83
+
84
+ Returns:
85
+ Dict[str, Any]: The result of the addCredential call.
86
+ """
87
+ return await self.client.send(method="WebAuthn.addCredential", params=params,session_id=session_id)
88
+ async def get_credential(self, params: Optional[getCredentialParameters]=None,session_id: Optional[str] = None) -> getCredentialReturns:
89
+ """
90
+ Returns a single credential stored in the given virtual authenticator that matches the credential ID.
91
+ Args:
92
+ params (getCredentialParameters, optional): Parameters for the getCredential method.
93
+ session_id (str, optional): Target session ID for flat protocol usage.
94
+
95
+ Returns:
96
+ getCredentialReturns: The result of the getCredential call.
97
+ """
98
+ return await self.client.send(method="WebAuthn.getCredential", params=params,session_id=session_id)
99
+ async def get_credentials(self, params: Optional[getCredentialsParameters]=None,session_id: Optional[str] = None) -> getCredentialsReturns:
100
+ """
101
+ Returns all the credentials stored in the given virtual authenticator.
102
+ Args:
103
+ params (getCredentialsParameters, optional): Parameters for the getCredentials method.
104
+ session_id (str, optional): Target session ID for flat protocol usage.
105
+
106
+ Returns:
107
+ getCredentialsReturns: The result of the getCredentials call.
108
+ """
109
+ return await self.client.send(method="WebAuthn.getCredentials", params=params,session_id=session_id)
110
+ async def remove_credential(self, params: Optional[removeCredentialParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
111
+ """
112
+ Removes a credential from the authenticator.
113
+ Args:
114
+ params (removeCredentialParameters, optional): Parameters for the removeCredential method.
115
+ session_id (str, optional): Target session ID for flat protocol usage.
116
+
117
+ Returns:
118
+ Dict[str, Any]: The result of the removeCredential call.
119
+ """
120
+ return await self.client.send(method="WebAuthn.removeCredential", params=params,session_id=session_id)
121
+ async def clear_credentials(self, params: Optional[clearCredentialsParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
122
+ """
123
+ Clears all the credentials from the specified device.
124
+ Args:
125
+ params (clearCredentialsParameters, optional): Parameters for the clearCredentials method.
126
+ session_id (str, optional): Target session ID for flat protocol usage.
127
+
128
+ Returns:
129
+ Dict[str, Any]: The result of the clearCredentials call.
130
+ """
131
+ return await self.client.send(method="WebAuthn.clearCredentials", params=params,session_id=session_id)
132
+ async def set_user_verified(self, params: Optional[setUserVerifiedParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
133
+ """
134
+ Sets whether User Verification succeeds or fails for an authenticator. The default is true.
135
+ Args:
136
+ params (setUserVerifiedParameters, optional): Parameters for the setUserVerified method.
137
+ session_id (str, optional): Target session ID for flat protocol usage.
138
+
139
+ Returns:
140
+ Dict[str, Any]: The result of the setUserVerified call.
141
+ """
142
+ return await self.client.send(method="WebAuthn.setUserVerified", params=params,session_id=session_id)
143
+ async def set_automatic_presence_simulation(self, params: Optional[setAutomaticPresenceSimulationParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
144
+ """
145
+ Sets whether tests of user presence will succeed immediately (if true) or fail to resolve (if false) for an authenticator. The default is true.
146
+ Args:
147
+ params (setAutomaticPresenceSimulationParameters, optional): Parameters for the setAutomaticPresenceSimulation method.
148
+ session_id (str, optional): Target session ID for flat protocol usage.
149
+
150
+ Returns:
151
+ Dict[str, Any]: The result of the setAutomaticPresenceSimulation call.
152
+ """
153
+ return await self.client.send(method="WebAuthn.setAutomaticPresenceSimulation", params=params,session_id=session_id)
154
+ async def set_credential_properties(self, params: Optional[setCredentialPropertiesParameters]=None,session_id: Optional[str] = None) -> Dict[str, Any]:
155
+ """
156
+ Allows setting credential properties. https://w3c.github.io/webauthn/#sctn-automation-set-credential-properties
157
+ Args:
158
+ params (setCredentialPropertiesParameters, optional): Parameters for the setCredentialProperties method.
159
+ session_id (str, optional): Target session ID for flat protocol usage.
160
+
161
+ Returns:
162
+ Dict[str, Any]: The result of the setCredentialProperties call.
163
+ """
164
+ return await self.client.send(method="WebAuthn.setCredentialProperties", params=params,session_id=session_id)
@@ -0,0 +1,61 @@
1
+ """CDP WebAuthn Methods Types"""
2
+
3
+ from typing import TypedDict, NotRequired, Required, Literal, Any, Dict, Union, Optional, List, Set, Tuple
4
+
5
+ from typing import TYPE_CHECKING
6
+ if TYPE_CHECKING:
7
+ from cdp.protocol.web_authn.types import AuthenticatorId
8
+ from cdp.protocol.web_authn.types import Credential
9
+ from cdp.protocol.web_authn.types import VirtualAuthenticatorOptions
10
+
11
+ class enableParameters(TypedDict, total=False):
12
+ enableUI: NotRequired['bool']
13
+ """Whether to enable the WebAuthn user interface. Enabling the UI is recommended for debugging and demo purposes, as it is closer to the real experience. Disabling the UI is recommended for automated testing. Supported at the embedder's discretion if UI is available. Defaults to false."""
14
+
15
+ class addVirtualAuthenticatorParameters(TypedDict, total=True):
16
+ options: 'VirtualAuthenticatorOptions'
17
+ class setResponseOverrideBitsParameters(TypedDict, total=True):
18
+ authenticatorId: 'AuthenticatorId'
19
+ isBogusSignature: NotRequired['bool']
20
+ """If isBogusSignature is set, overrides the signature in the authenticator response to be zero. Defaults to false."""
21
+ isBadUV: NotRequired['bool']
22
+ """If isBadUV is set, overrides the UV bit in the flags in the authenticator response to be zero. Defaults to false."""
23
+ isBadUP: NotRequired['bool']
24
+ """If isBadUP is set, overrides the UP bit in the flags in the authenticator response to be zero. Defaults to false."""
25
+ class removeVirtualAuthenticatorParameters(TypedDict, total=True):
26
+ authenticatorId: 'AuthenticatorId'
27
+ class addCredentialParameters(TypedDict, total=True):
28
+ authenticatorId: 'AuthenticatorId'
29
+ credential: 'Credential'
30
+ class getCredentialParameters(TypedDict, total=True):
31
+ authenticatorId: 'AuthenticatorId'
32
+ credentialId: 'str'
33
+ class getCredentialsParameters(TypedDict, total=True):
34
+ authenticatorId: 'AuthenticatorId'
35
+ class removeCredentialParameters(TypedDict, total=True):
36
+ authenticatorId: 'AuthenticatorId'
37
+ credentialId: 'str'
38
+ class clearCredentialsParameters(TypedDict, total=True):
39
+ authenticatorId: 'AuthenticatorId'
40
+ class setUserVerifiedParameters(TypedDict, total=True):
41
+ authenticatorId: 'AuthenticatorId'
42
+ isUserVerified: 'bool'
43
+ class setAutomaticPresenceSimulationParameters(TypedDict, total=True):
44
+ authenticatorId: 'AuthenticatorId'
45
+ enabled: 'bool'
46
+ class setCredentialPropertiesParameters(TypedDict, total=True):
47
+ authenticatorId: 'AuthenticatorId'
48
+ credentialId: 'str'
49
+ backupEligibility: NotRequired['bool']
50
+ backupState: NotRequired['bool']
51
+
52
+
53
+ class addVirtualAuthenticatorReturns(TypedDict):
54
+ authenticatorId: 'AuthenticatorId'
55
+
56
+
57
+
58
+ class getCredentialReturns(TypedDict):
59
+ credential: 'Credential'
60
+ class getCredentialsReturns(TypedDict):
61
+ credentials: 'List[Credential]'
@@ -0,0 +1,21 @@
1
+ """CDP WebAuthn Domain"""
2
+ from typing import TYPE_CHECKING
3
+ from .methods.service import WebAuthnMethods
4
+ from .events.service import WebAuthnEvents
5
+
6
+ if TYPE_CHECKING:
7
+ from ...service import Client
8
+
9
+ class WebAuthn(WebAuthnMethods, WebAuthnEvents):
10
+ """
11
+ This domain allows configuring virtual authenticators to test the WebAuthn API.
12
+ """
13
+ def __init__(self, client: "Client"):
14
+ """
15
+ Initialize the WebAuthn domain.
16
+
17
+ Args:
18
+ client ("Client"): The parent CDP client instance.
19
+ """
20
+ WebAuthnMethods.__init__(self, client)
21
+ WebAuthnEvents.__init__(self, client)
@@ -0,0 +1,54 @@
1
+ """CDP WebAuthn Types"""
2
+
3
+ from typing import TypedDict, NotRequired, Required, Literal, Any, Dict, Union, Optional, List, Set, Tuple
4
+
5
+ AuthenticatorId = str
6
+ AuthenticatorProtocol = Literal['u2f','ctap2']
7
+ Ctap2Version = Literal['ctap2_0','ctap2_1']
8
+ AuthenticatorTransport = Literal['usb','nfc','ble','cable','internal']
9
+ class VirtualAuthenticatorOptions(TypedDict, total=True):
10
+ protocol: 'AuthenticatorProtocol'
11
+ transport: 'AuthenticatorTransport'
12
+ ctap2Version: NotRequired['Ctap2Version']
13
+ """Defaults to ctap2_0. Ignored if |protocol| == u2f."""
14
+ hasResidentKey: NotRequired['bool']
15
+ """Defaults to false."""
16
+ hasUserVerification: NotRequired['bool']
17
+ """Defaults to false."""
18
+ hasLargeBlob: NotRequired['bool']
19
+ """If set to true, the authenticator will support the largeBlob extension. https://w3c.github.io/webauthn#largeBlob Defaults to false."""
20
+ hasCredBlob: NotRequired['bool']
21
+ """If set to true, the authenticator will support the credBlob extension. https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#sctn-credBlob-extension Defaults to false."""
22
+ hasMinPinLength: NotRequired['bool']
23
+ """If set to true, the authenticator will support the minPinLength extension. https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-minpinlength-extension Defaults to false."""
24
+ hasPrf: NotRequired['bool']
25
+ """If set to true, the authenticator will support the prf extension. https://w3c.github.io/webauthn/#prf-extension Defaults to false."""
26
+ automaticPresenceSimulation: NotRequired['bool']
27
+ """If set to true, tests of user presence will succeed immediately. Otherwise, they will not be resolved. Defaults to true."""
28
+ isUserVerified: NotRequired['bool']
29
+ """Sets whether User Verification succeeds or fails for an authenticator. Defaults to false."""
30
+ defaultBackupEligibility: NotRequired['bool']
31
+ """Credentials created by this authenticator will have the backup eligibility (BE) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup"""
32
+ defaultBackupState: NotRequired['bool']
33
+ """Credentials created by this authenticator will have the backup state (BS) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup"""
34
+ class Credential(TypedDict, total=True):
35
+ credentialId: 'str'
36
+ isResidentCredential: 'bool'
37
+ privateKey: 'str'
38
+ """The ECDSA P-256 private key in PKCS#8 format. (Encoded as a base64 string when passed over JSON)"""
39
+ signCount: 'int'
40
+ """Signature counter. This is incremented by one for each successful assertion. See https://w3c.github.io/webauthn/#signature-counter"""
41
+ rpId: NotRequired['str']
42
+ """Relying Party ID the credential is scoped to. Must be set when adding a credential."""
43
+ userHandle: NotRequired['str']
44
+ """An opaque byte sequence with a maximum size of 64 bytes mapping the credential to a specific user. (Encoded as a base64 string when passed over JSON)"""
45
+ largeBlob: NotRequired['str']
46
+ """The large blob associated with the credential. See https://w3c.github.io/webauthn/#sctn-large-blob-extension (Encoded as a base64 string when passed over JSON)"""
47
+ backupEligibility: NotRequired['bool']
48
+ """Assertions returned by this credential will have the backup eligibility (BE) flag set to this value. Defaults to the authenticator's defaultBackupEligibility value."""
49
+ backupState: NotRequired['bool']
50
+ """Assertions returned by this credential will have the backup state (BS) flag set to this value. Defaults to the authenticator's defaultBackupState value."""
51
+ userName: NotRequired['str']
52
+ """The credential's user.name property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialentity-name"""
53
+ userDisplayName: NotRequired['str']
54
+ """The credential's user.displayName property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialuserentity-displayname"""
cdp/py.typed ADDED
File without changes
cdp/service.py ADDED
@@ -0,0 +1,184 @@
1
+ from typing import Optional, Dict, Any, Callable,Annotated, List
2
+ from operator import add
3
+ import websockets
4
+ import asyncio
5
+ import logging
6
+ import json
7
+
8
+ from .domains import Domains
9
+ from .generator.service import CDPGenerator
10
+
11
+ class Client(Domains):
12
+ """
13
+ Core client for interacting with Chrome DevTools Protocol (CDP).
14
+
15
+ This class provides a high-level API to send commands and listen for events across
16
+ various CDP domains. It manages the underlying WebSocket connection and dispatches
17
+ messages to the appropriate handlers.
18
+
19
+ Attributes:
20
+ url (str): The WebSocket URL of the remote debugging target.
21
+ ws (websockets.ClientConnection): The active WebSocket connection.
22
+ listen_task (asyncio.Task): Background task processing incoming CDP messages.
23
+ id_counter (int): Counter for generating unique request IDs.
24
+ pending_requests (Dict[int, asyncio.Future]): Tracks outstanding requests by ID.
25
+ event_handlers (Dict[str, List[Callable]]): Registered callbacks for CDP events.
26
+ """
27
+ def __init__(self, url: str, refresh: bool = False):
28
+ """
29
+ Initialize the CDP Client.
30
+
31
+ Args:
32
+ url (str): WebSocket debugger URL.
33
+ refresh (bool): If True, regenerates the CDP protocol definitions on initialization.
34
+ """
35
+ super().__init__(self)
36
+ self.url = url
37
+ self.ws :Optional[websockets.ClientConnection] = None
38
+ self.listen_task :Optional[asyncio.Task] = None
39
+ self.id_counter: Annotated[int, add] = 0
40
+ self.pending_requests: Dict[int, asyncio.Future] = {}
41
+ self.event_handlers: Dict[str, List[Callable[[Any, Optional[str]], None]]] = {}
42
+
43
+ if refresh:
44
+ self.refresh()
45
+
46
+ async def __aenter__(self):
47
+ """Connect to the WebSocket and start the background listener."""
48
+ self.ws = await websockets.connect(self.url,max_size=100*1024*1024)
49
+ self.listen_task = asyncio.create_task(self.listen())
50
+ return self
51
+
52
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
53
+ """Cancel the listener, clear pending requests, and close the WebSocket."""
54
+ for future in self.pending_requests.values():
55
+ if not future.done():
56
+ future.set_exception(Exception("WebSocket connection closed"))
57
+ self.pending_requests.clear()
58
+ if self.listen_task:
59
+ try:
60
+ self.listen_task.cancel()
61
+ await self.listen_task
62
+ except asyncio.CancelledError:
63
+ pass
64
+ finally:
65
+ self.listen_task = None
66
+ if self.ws:
67
+ await self.ws.close()
68
+ self.ws = None
69
+
70
+ async def send(self, method: str, params: Optional[dict] = None,session_id: Optional[str] = None) -> Any:
71
+ """
72
+ Send a CDP command and wait for the result.
73
+
74
+ Args:
75
+ method (str): The CDP method name (e.g., 'Page.navigate').
76
+ params (dict, optional): Parameters for the method.
77
+ session_id (str, optional): Target session ID for flat protocol usage.
78
+
79
+ Returns:
80
+ Any: The 'result' object from the CDP response.
81
+
82
+ Raises:
83
+ Exception: If the CDP returns an error or the connection is lost.
84
+ """
85
+ self.id_counter+=1
86
+ future = asyncio.Future()
87
+ self.pending_requests[self.id_counter] = future
88
+
89
+ try:
90
+ message = {"id": self.id_counter, "method": method, "params": params or {}}
91
+ if session_id:
92
+ message['sessionId'] = session_id
93
+ await self.ws.send(json.dumps(message))
94
+ return await future
95
+ except Exception as e:
96
+ self.pending_requests.pop(self.id_counter, None)
97
+ raise e
98
+
99
+ def on(self, event: str, callback: Callable[[Any, Optional[str]], None]) -> None:
100
+ """
101
+ Register an event handler. Alias for `Client.register`.
102
+
103
+ Args:
104
+ event (str): The CDP event name (e.g., 'Page.loadEventFired').
105
+ callback (callable): Function called with (params, session_id).
106
+ """
107
+ self.register(event, callback)
108
+
109
+ def register(self, event: str, callback: Callable[[Any, Optional[str]], None]) -> None:
110
+ """
111
+ Register a handler for a specific CDP event.
112
+
113
+ Args:
114
+ event (str): The CDP event name.
115
+ callback (callable): Function called with (params, session_id).
116
+ """
117
+ if event not in self.event_handlers:
118
+ self.event_handlers[event] = []
119
+ self.event_handlers[event].append(callback)
120
+
121
+ def unregister(self, event: str) -> None:
122
+ """
123
+ Unregister all handlers for a specific CDP event.
124
+
125
+ Args:
126
+ event (str): The CDP event name.
127
+ """
128
+ if event in self.event_handlers:
129
+ del self.event_handlers[event]
130
+
131
+ def refresh(self):
132
+ """
133
+ Refresh the CDP protocol definitions by fetching latest schemas and
134
+ regenerating the client source code on disk.
135
+ """
136
+ generator = CDPGenerator()
137
+ generator.generate()
138
+
139
+ async def listen(self):
140
+ """
141
+ Internal background loop that receives messages from the WebSocket.
142
+ Dispatches responses to pending request futures and events to registered handlers.
143
+ """
144
+ while True:
145
+ try:
146
+ message = await self.ws.recv()
147
+ data = json.loads(message)
148
+ if "id" in data:
149
+ # Method
150
+ request_id=data["id"]
151
+ logging.debug(f"Received method response: {data}")
152
+ if request_id not in self.pending_requests:
153
+ continue
154
+ future = self.pending_requests.pop(request_id)
155
+ if not future.done():
156
+ if "error" in data:
157
+ future.set_exception(Exception(data.get("error")))
158
+ else:
159
+ future.set_result(data.get("result"))
160
+ elif 'method' in data:
161
+ # Event
162
+ method=data.get("method")
163
+ params = data.get("params", {})
164
+ session_id=data.get("sessionId")
165
+ logging.debug(f"Received event: {data}")
166
+ if method not in self.event_handlers:
167
+ continue
168
+
169
+ handlers = self.event_handlers[method]
170
+ for handler in handlers:
171
+ try:
172
+ if asyncio.iscoroutinefunction(handler):
173
+ asyncio.create_task(handler(params,session_id))
174
+ else:
175
+ handler(params,session_id)
176
+ except Exception as e:
177
+ logging.error(f"Error in event handler for {method}: {e}")
178
+ continue
179
+ except websockets.exceptions.ConnectionClosed:
180
+ logging.info("CDP WebSocket connection closed")
181
+ break
182
+ except Exception as e:
183
+ logging.error(f"Error in CDP listen loop: {e}")
184
+ break
@@ -0,0 +1,15 @@
1
+ Metadata-Version: 2.4
2
+ Name: chromedeveloperprotocol-client
3
+ Version: 0.1.0
4
+ Summary: Python wrapper for Chrome DevTools Protocol
5
+ Requires-Python: >=3.13
6
+ Requires-Dist: httpx>=0.28.1
7
+ Requires-Dist: inflection>=0.5.1
8
+ Requires-Dist: ipykernel>=7.1.0
9
+ Requires-Dist: jinja2-strcase>=0.0.2
10
+ Requires-Dist: jinja2>=3.1.6
11
+ Requires-Dist: websockets>=15.0.1
12
+ Provides-Extra: test
13
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'test'
14
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
15
+ Requires-Dist: pytest>=8.0.0; extra == 'test'