cdpify 0.3.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. {cdpify-0.3.0 → cdpify-0.4.0}/PKG-INFO +160 -34
  2. {cdpify-0.3.0 → cdpify-0.4.0}/README.md +319 -195
  3. cdpify-0.4.0/cdpify/__init__.py +38 -0
  4. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/client.py +190 -160
  5. cdpify-0.4.0/cdpify/codec.py +236 -0
  6. cdpify-0.4.0/cdpify/domains/__init__.py +198 -0
  7. cdpify-0.4.0/cdpify/domains/accessibility/__init__.py +103 -0
  8. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/accessibility/commands.py +9 -9
  9. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/accessibility/events.py +8 -3
  10. cdpify-0.4.0/cdpify/domains/accessibility/types.py +227 -0
  11. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/accessors.py +193 -62
  12. cdpify-0.4.0/cdpify/domains/ads/__init__.py +37 -0
  13. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/ads/commands.py +1 -1
  14. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/ads/types.py +1 -1
  15. cdpify-0.4.0/cdpify/domains/animation/__init__.py +94 -0
  16. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/animation/commands.py +13 -8
  17. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/animation/domain.py +7 -2
  18. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/animation/events.py +14 -5
  19. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/animation/types.py +15 -19
  20. cdpify-0.4.0/cdpify/domains/audits/__init__.py +299 -0
  21. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/audits/commands.py +3 -3
  22. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/audits/events.py +5 -2
  23. cdpify-0.4.0/cdpify/domains/audits/types.py +1195 -0
  24. cdpify-0.4.0/cdpify/domains/autofill/__init__.py +58 -0
  25. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/autofill/commands.py +5 -4
  26. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/autofill/domain.py +2 -1
  27. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/autofill/events.py +3 -0
  28. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/autofill/types.py +19 -16
  29. cdpify-0.4.0/cdpify/domains/backgroundservice/__init__.py +63 -0
  30. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/backgroundservice/commands.py +4 -4
  31. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/backgroundservice/events.py +10 -1
  32. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/backgroundservice/types.py +19 -18
  33. cdpify-0.4.0/cdpify/domains/bluetoothemulation/__init__.py +146 -0
  34. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/bluetoothemulation/commands.py +17 -17
  35. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/bluetoothemulation/events.py +19 -6
  36. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/bluetoothemulation/types.py +62 -41
  37. cdpify-0.4.0/cdpify/domains/browser/__init__.py +142 -0
  38. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/browser/commands.py +38 -28
  39. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/browser/domain.py +19 -1
  40. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/browser/events.py +9 -7
  41. cdpify-0.4.0/cdpify/domains/browser/types.py +143 -0
  42. cdpify-0.4.0/cdpify/domains/cachestorage/__init__.py +72 -0
  43. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/cachestorage/commands.py +3 -3
  44. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/cachestorage/types.py +17 -11
  45. cdpify-0.4.0/cdpify/domains/cast/__init__.py +53 -0
  46. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/cast/events.py +6 -1
  47. {cdpify-0.3.0/cdpify/domains/digitalcredentials → cdpify-0.4.0/cdpify/domains/cast}/types.py +7 -5
  48. cdpify-0.4.0/cdpify/domains/console/__init__.py +34 -0
  49. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/console/events.py +5 -2
  50. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/console/types.py +7 -11
  51. cdpify-0.4.0/cdpify/domains/crashreportcontext/__init__.py +31 -0
  52. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/crashreportcontext/commands.py +2 -2
  53. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/crashreportcontext/types.py +2 -2
  54. cdpify-0.4.0/cdpify/domains/css/__init__.py +407 -0
  55. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/css/commands.py +51 -44
  56. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/css/domain.py +18 -1
  57. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/css/events.py +14 -3
  58. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/css/types.py +129 -145
  59. cdpify-0.4.0/cdpify/domains/debugger/__init__.py +245 -0
  60. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/debugger/commands.py +31 -38
  61. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/debugger/domain.py +5 -4
  62. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/debugger/events.py +19 -13
  63. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/debugger/types.py +25 -24
  64. cdpify-0.4.0/cdpify/domains/deviceaccess/__init__.py +42 -0
  65. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/deviceaccess/commands.py +2 -2
  66. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/deviceaccess/events.py +8 -3
  67. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/deviceaccess/types.py +5 -5
  68. cdpify-0.4.0/cdpify/domains/deviceorientation/__init__.py +31 -0
  69. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/deviceorientation/commands.py +4 -4
  70. cdpify-0.4.0/cdpify/domains/digitalcredentials/__init__.py +34 -0
  71. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/digitalcredentials/commands.py +3 -5
  72. cdpify-0.4.0/cdpify/domains/digitalcredentials/types.py +18 -0
  73. cdpify-0.4.0/cdpify/domains/dom/__init__.py +431 -0
  74. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/dom/commands.py +77 -41
  75. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/dom/domain.py +63 -1
  76. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/dom/events.py +45 -8
  77. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/dom/types.py +121 -98
  78. cdpify-0.4.0/cdpify/domains/domdebugger/__init__.py +80 -0
  79. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domdebugger/commands.py +7 -7
  80. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domdebugger/domain.py +2 -2
  81. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domdebugger/types.py +22 -19
  82. cdpify-0.4.0/cdpify/domains/domsnapshot/__init__.py +87 -0
  83. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domsnapshot/commands.py +2 -2
  84. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domsnapshot/domain.py +1 -1
  85. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domsnapshot/types.py +22 -27
  86. cdpify-0.4.0/cdpify/domains/domstorage/__init__.py +67 -0
  87. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domstorage/commands.py +4 -4
  88. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domstorage/events.py +12 -3
  89. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domstorage/types.py +2 -3
  90. cdpify-0.4.0/cdpify/domains/emulation/__init__.py +311 -0
  91. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/emulation/commands.py +67 -73
  92. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/emulation/domain.py +7 -3
  93. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/emulation/events.py +8 -5
  94. cdpify-0.4.0/cdpify/domains/emulation/types.py +217 -0
  95. cdpify-0.4.0/cdpify/domains/eventbreakpoints/__init__.py +40 -0
  96. cdpify-0.4.0/cdpify/domains/extensions/__init__.py +63 -0
  97. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/extensions/commands.py +13 -13
  98. cdpify-0.4.0/cdpify/domains/extensions/types.py +33 -0
  99. cdpify-0.4.0/cdpify/domains/fedcm/__init__.py +67 -0
  100. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fedcm/events.py +8 -3
  101. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fedcm/types.py +40 -20
  102. cdpify-0.4.0/cdpify/domains/fetch/__init__.py +91 -0
  103. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fetch/commands.py +7 -11
  104. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fetch/events.py +7 -2
  105. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fetch/types.py +21 -20
  106. cdpify-0.4.0/cdpify/domains/filesystem/__init__.py +37 -0
  107. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/filesystem/commands.py +1 -1
  108. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/filesystem/types.py +4 -4
  109. cdpify-0.4.0/cdpify/domains/findinpage/__init__.py +28 -0
  110. cdpify-0.4.0/cdpify/domains/findinpage/commands.py +25 -0
  111. cdpify-0.4.0/cdpify/domains/findinpage/domain.py +69 -0
  112. cdpify-0.4.0/cdpify/domains/headlessexperimental/__init__.py +37 -0
  113. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/headlessexperimental/commands.py +2 -4
  114. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/headlessexperimental/domain.py +2 -2
  115. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/headlessexperimental/types.py +2 -4
  116. cdpify-0.4.0/cdpify/domains/heapprofiler/__init__.py +101 -0
  117. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/heapprofiler/commands.py +3 -3
  118. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/heapprofiler/events.py +19 -6
  119. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/heapprofiler/types.py +7 -7
  120. cdpify-0.4.0/cdpify/domains/indexeddb/__init__.py +87 -0
  121. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/indexeddb/types.py +18 -20
  122. cdpify-0.4.0/cdpify/domains/input/__init__.py +92 -0
  123. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/input/commands.py +43 -61
  124. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/input/events.py +5 -2
  125. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/input/types.py +25 -13
  126. cdpify-0.4.0/cdpify/domains/inspector/__init__.py +43 -0
  127. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/inspector/events.py +8 -5
  128. cdpify-0.4.0/cdpify/domains/io/__init__.py +46 -0
  129. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/io/commands.py +7 -7
  130. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/io/domain.py +2 -0
  131. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/io/types.py +1 -1
  132. cdpify-0.4.0/cdpify/domains/layertree/__init__.py +97 -0
  133. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/layertree/commands.py +3 -3
  134. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/layertree/events.py +7 -2
  135. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/layertree/types.py +13 -17
  136. cdpify-0.4.0/cdpify/domains/log/__init__.py +38 -0
  137. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/log/commands.py +2 -2
  138. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/log/events.py +5 -2
  139. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/log/types.py +9 -19
  140. cdpify-0.4.0/cdpify/domains/media/__init__.py +72 -0
  141. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/media/events.py +16 -5
  142. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/media/types.py +14 -16
  143. cdpify-0.4.0/cdpify/domains/memory/__init__.py +84 -0
  144. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/memory/commands.py +8 -8
  145. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/memory/types.py +20 -15
  146. cdpify-0.4.0/cdpify/domains/network/__init__.py +641 -0
  147. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/network/commands.py +42 -46
  148. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/network/domain.py +5 -5
  149. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/network/events.py +193 -92
  150. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/network/types.py +557 -493
  151. cdpify-0.4.0/cdpify/domains/overlay/__init__.py +269 -0
  152. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/overlay/commands.py +22 -22
  153. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/overlay/domain.py +3 -3
  154. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/overlay/events.py +15 -2
  155. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/overlay/types.py +71 -19
  156. cdpify-0.4.0/cdpify/domains/page/__init__.py +578 -0
  157. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/page/commands.py +109 -83
  158. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/page/domain.py +77 -14
  159. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/page/events.py +86 -44
  160. cdpify-0.4.0/cdpify/domains/page/types.py +945 -0
  161. cdpify-0.4.0/cdpify/domains/performance/__init__.py +45 -0
  162. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performance/commands.py +1 -1
  163. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performance/domain.py +1 -1
  164. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performance/events.py +6 -3
  165. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performance/types.py +3 -3
  166. cdpify-0.4.0/cdpify/domains/performancetimeline/__init__.py +47 -0
  167. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performancetimeline/events.py +7 -2
  168. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performancetimeline/types.py +8 -8
  169. cdpify-0.4.0/cdpify/domains/preload/__init__.py +93 -0
  170. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/preload/events.py +24 -5
  171. cdpify-0.4.0/cdpify/domains/preload/types.py +316 -0
  172. cdpify-0.4.0/cdpify/domains/profiler/__init__.py +83 -0
  173. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/profiler/commands.py +7 -7
  174. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/profiler/events.py +18 -11
  175. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/profiler/types.py +10 -10
  176. cdpify-0.4.0/cdpify/domains/pwa/__init__.py +65 -0
  177. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/pwa/commands.py +2 -2
  178. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/pwa/types.py +11 -7
  179. cdpify-0.4.0/cdpify/domains/runtime/__init__.py +215 -0
  180. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/runtime/commands.py +19 -21
  181. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/runtime/events.py +27 -15
  182. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/runtime/types.py +56 -78
  183. cdpify-0.4.0/cdpify/domains/schema/__init__.py +31 -0
  184. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/schema/commands.py +2 -2
  185. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/schema/types.py +3 -3
  186. cdpify-0.4.0/cdpify/domains/security/__init__.py +92 -0
  187. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/security/commands.py +3 -3
  188. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/security/domain.py +2 -2
  189. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/security/events.py +11 -4
  190. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/security/types.py +45 -31
  191. cdpify-0.4.0/cdpify/domains/serviceworker/__init__.py +113 -0
  192. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/serviceworker/commands.py +6 -6
  193. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/serviceworker/events.py +14 -3
  194. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/serviceworker/types.py +34 -24
  195. cdpify-0.4.0/cdpify/domains/smartcardemulation/__init__.py +146 -0
  196. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/smartcardemulation/commands.py +7 -7
  197. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/smartcardemulation/events.py +73 -16
  198. cdpify-0.4.0/cdpify/domains/smartcardemulation/types.py +139 -0
  199. cdpify-0.4.0/cdpify/domains/storage/__init__.py +233 -0
  200. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/storage/commands.py +62 -21
  201. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/storage/domain.py +77 -16
  202. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/storage/events.py +31 -4
  203. cdpify-0.4.0/cdpify/domains/storage/types.py +97 -0
  204. cdpify-0.4.0/cdpify/domains/systeminfo/__init__.py +72 -0
  205. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/systeminfo/commands.py +1 -1
  206. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/systeminfo/types.py +28 -17
  207. cdpify-0.4.0/cdpify/domains/target/__init__.py +158 -0
  208. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/target/commands.py +18 -18
  209. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/target/domain.py +1 -1
  210. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/target/events.py +17 -2
  211. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/target/types.py +23 -17
  212. cdpify-0.4.0/cdpify/domains/tethering/__init__.py +35 -0
  213. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/tethering/commands.py +3 -3
  214. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/tethering/events.py +4 -1
  215. cdpify-0.4.0/cdpify/domains/tracing/__init__.py +80 -0
  216. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/tracing/commands.py +6 -8
  217. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/tracing/events.py +10 -6
  218. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/tracing/types.py +42 -23
  219. cdpify-0.4.0/cdpify/domains/webaudio/__init__.py +118 -0
  220. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webaudio/events.py +34 -5
  221. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webaudio/types.py +51 -25
  222. cdpify-0.4.0/cdpify/domains/webauthn/__init__.py +116 -0
  223. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webauthn/commands.py +6 -6
  224. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webauthn/domain.py +1 -1
  225. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webauthn/events.py +12 -3
  226. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webauthn/types.py +28 -13
  227. cdpify-0.4.0/cdpify/domains/webmcp/__init__.py +68 -0
  228. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webmcp/commands.py +1 -1
  229. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webmcp/events.py +15 -9
  230. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webmcp/types.py +17 -15
  231. cdpify-0.4.0/cdpify/event_queue.py +57 -0
  232. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/events/__init__.py +11 -9
  233. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/events/dispatcher.py +21 -3
  234. cdpify-0.4.0/cdpify/events/router.py +149 -0
  235. cdpify-0.4.0/cdpify/events/source.py +36 -0
  236. cdpify-0.4.0/cdpify/events/subscription.py +106 -0
  237. cdpify-0.4.0/cdpify/exceptions.py +74 -0
  238. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/commands.py +9 -3
  239. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/domain.py +14 -5
  240. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/events.py +11 -4
  241. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/init.py +103 -83
  242. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/types.py +32 -12
  243. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/utils.py +17 -1
  244. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/views.py +23 -2
  245. cdpify-0.4.0/cdpify/generator/templates/accessors.py.jinja2 +30 -0
  246. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/templates/commands.py.jinja2 +1 -1
  247. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/templates/domain.py.jinja2 +2 -2
  248. cdpify-0.4.0/cdpify/generator/templates/domain_init.py.jinja2 +35 -0
  249. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/templates/events.py.jinja2 +40 -40
  250. cdpify-0.4.0/cdpify/generator/templates/root_init.py.jinja2 +26 -0
  251. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/templates/types.py.jinja2 +12 -2
  252. cdpify-0.4.0/cdpify/py.typed +0 -0
  253. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/session.py +40 -54
  254. cdpify-0.4.0/cdpify/shared/decorators.py +53 -0
  255. cdpify-0.4.0/cdpify/shared/enums.py +17 -0
  256. cdpify-0.4.0/cdpify/shared/lazy.py +35 -0
  257. cdpify-0.4.0/cdpify/transport.py +52 -0
  258. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/transports/websocket.py +313 -256
  259. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify.egg-info/PKG-INFO +160 -34
  260. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify.egg-info/SOURCES.txt +13 -0
  261. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify.egg-info/requires.txt +3 -0
  262. {cdpify-0.3.0 → cdpify-0.4.0}/pyproject.toml +5 -1
  263. {cdpify-0.3.0 → cdpify-0.4.0}/tests/test_client.py +303 -239
  264. {cdpify-0.3.0 → cdpify-0.4.0}/tests/test_codec.py +59 -0
  265. cdpify-0.4.0/tests/test_decorators_and_exceptions.py +93 -0
  266. {cdpify-0.3.0 → cdpify-0.4.0}/tests/test_dependency_boundaries.py +20 -2
  267. cdpify-0.4.0/tests/test_enums.py +117 -0
  268. {cdpify-0.3.0 → cdpify-0.4.0}/tests/test_event_dispatcher.py +2 -1
  269. cdpify-0.4.0/tests/test_event_subscription.py +331 -0
  270. cdpify-0.4.0/tests/test_lazy_imports.py +75 -0
  271. cdpify-0.4.0/tests/test_models.py +144 -0
  272. {cdpify-0.3.0 → cdpify-0.4.0}/tests/test_session.py +143 -140
  273. cdpify-0.4.0/tests/test_websocket_client.py +168 -0
  274. cdpify-0.4.0/tests/test_websocket_transport.py +379 -0
  275. cdpify-0.3.0/cdpify/__init__.py +0 -27
  276. cdpify-0.3.0/cdpify/codec.py +0 -183
  277. cdpify-0.3.0/cdpify/domains/__init__.py +0 -125
  278. cdpify-0.3.0/cdpify/domains/accessibility/__init__.py +0 -65
  279. cdpify-0.3.0/cdpify/domains/accessibility/types.py +0 -223
  280. cdpify-0.3.0/cdpify/domains/ads/__init__.py +0 -19
  281. cdpify-0.3.0/cdpify/domains/animation/__init__.py +0 -61
  282. cdpify-0.3.0/cdpify/domains/audits/__init__.py +0 -160
  283. cdpify-0.3.0/cdpify/domains/audits/types.py +0 -1092
  284. cdpify-0.3.0/cdpify/domains/autofill/__init__.py +0 -34
  285. cdpify-0.3.0/cdpify/domains/backgroundservice/__init__.py +0 -37
  286. cdpify-0.3.0/cdpify/domains/bluetoothemulation/__init__.py +0 -79
  287. cdpify-0.3.0/cdpify/domains/browser/__init__.py +0 -87
  288. cdpify-0.3.0/cdpify/domains/browser/types.py +0 -129
  289. cdpify-0.3.0/cdpify/domains/cachestorage/__init__.py +0 -45
  290. cdpify-0.3.0/cdpify/domains/cast/__init__.py +0 -31
  291. cdpify-0.3.0/cdpify/domains/cast/types.py +0 -14
  292. cdpify-0.3.0/cdpify/domains/console/__init__.py +0 -18
  293. cdpify-0.3.0/cdpify/domains/crashreportcontext/__init__.py +0 -16
  294. cdpify-0.3.0/cdpify/domains/css/__init__.py +0 -247
  295. cdpify-0.3.0/cdpify/domains/debugger/__init__.py +0 -147
  296. cdpify-0.3.0/cdpify/domains/deviceaccess/__init__.py +0 -22
  297. cdpify-0.3.0/cdpify/domains/deviceorientation/__init__.py +0 -14
  298. cdpify-0.3.0/cdpify/domains/digitalcredentials/__init__.py +0 -16
  299. cdpify-0.3.0/cdpify/domains/dom/__init__.py +0 -249
  300. cdpify-0.3.0/cdpify/domains/domdebugger/__init__.py +0 -41
  301. cdpify-0.3.0/cdpify/domains/domsnapshot/__init__.py +0 -55
  302. cdpify-0.3.0/cdpify/domains/domstorage/__init__.py +0 -41
  303. cdpify-0.3.0/cdpify/domains/emulation/__init__.py +0 -161
  304. cdpify-0.3.0/cdpify/domains/emulation/types.py +0 -211
  305. cdpify-0.3.0/cdpify/domains/eventbreakpoints/__init__.py +0 -19
  306. cdpify-0.3.0/cdpify/domains/extensions/__init__.py +0 -38
  307. cdpify-0.3.0/cdpify/domains/extensions/types.py +0 -26
  308. cdpify-0.3.0/cdpify/domains/fedcm/__init__.py +0 -41
  309. cdpify-0.3.0/cdpify/domains/fetch/__init__.py +0 -53
  310. cdpify-0.3.0/cdpify/domains/filesystem/__init__.py +0 -19
  311. cdpify-0.3.0/cdpify/domains/headlessexperimental/__init__.py +0 -17
  312. cdpify-0.3.0/cdpify/domains/heapprofiler/__init__.py +0 -61
  313. cdpify-0.3.0/cdpify/domains/indexeddb/__init__.py +0 -53
  314. cdpify-0.3.0/cdpify/domains/input/__init__.py +0 -56
  315. cdpify-0.3.0/cdpify/domains/inspector/__init__.py +0 -25
  316. cdpify-0.3.0/cdpify/domains/io/__init__.py +0 -27
  317. cdpify-0.3.0/cdpify/domains/layertree/__init__.py +0 -61
  318. cdpify-0.3.0/cdpify/domains/log/__init__.py +0 -20
  319. cdpify-0.3.0/cdpify/domains/media/__init__.py +0 -45
  320. cdpify-0.3.0/cdpify/domains/memory/__init__.py +0 -43
  321. cdpify-0.3.0/cdpify/domains/network/__init__.py +0 -371
  322. cdpify-0.3.0/cdpify/domains/overlay/__init__.py +0 -141
  323. cdpify-0.3.0/cdpify/domains/page/__init__.py +0 -325
  324. cdpify-0.3.0/cdpify/domains/page/types.py +0 -883
  325. cdpify-0.3.0/cdpify/domains/performance/__init__.py +0 -26
  326. cdpify-0.3.0/cdpify/domains/performancetimeline/__init__.py +0 -27
  327. cdpify-0.3.0/cdpify/domains/preload/__init__.py +0 -55
  328. cdpify-0.3.0/cdpify/domains/preload/types.py +0 -250
  329. cdpify-0.3.0/cdpify/domains/profiler/__init__.py +0 -51
  330. cdpify-0.3.0/cdpify/domains/pwa/__init__.py +0 -39
  331. cdpify-0.3.0/cdpify/domains/runtime/__init__.py +0 -137
  332. cdpify-0.3.0/cdpify/domains/schema/__init__.py +0 -16
  333. cdpify-0.3.0/cdpify/domains/security/__init__.py +0 -53
  334. cdpify-0.3.0/cdpify/domains/serviceworker/__init__.py +0 -67
  335. cdpify-0.3.0/cdpify/domains/smartcardemulation/__init__.py +0 -87
  336. cdpify-0.3.0/cdpify/domains/smartcardemulation/types.py +0 -116
  337. cdpify-0.3.0/cdpify/domains/storage/__init__.py +0 -105
  338. cdpify-0.3.0/cdpify/domains/storage/types.py +0 -80
  339. cdpify-0.3.0/cdpify/domains/systeminfo/__init__.py +0 -41
  340. cdpify-0.3.0/cdpify/domains/target/__init__.py +0 -103
  341. cdpify-0.3.0/cdpify/domains/tethering/__init__.py +0 -18
  342. cdpify-0.3.0/cdpify/domains/tracing/__init__.py +0 -51
  343. cdpify-0.3.0/cdpify/domains/webaudio/__init__.py +0 -73
  344. cdpify-0.3.0/cdpify/domains/webauthn/__init__.py +0 -71
  345. cdpify-0.3.0/cdpify/domains/webmcp/__init__.py +0 -43
  346. cdpify-0.3.0/cdpify/events/router.py +0 -91
  347. cdpify-0.3.0/cdpify/exceptions.py +0 -18
  348. cdpify-0.3.0/cdpify/generator/templates/accessors.py.jinja2 +0 -17
  349. cdpify-0.3.0/cdpify/generator/templates/domain_init.py.jinja2 +0 -22
  350. cdpify-0.3.0/cdpify/generator/templates/root_init.py.jinja2 +0 -9
  351. cdpify-0.3.0/cdpify/shared/decorators.py +0 -27
  352. cdpify-0.3.0/cdpify/transport.py +0 -29
  353. cdpify-0.3.0/tests/test_decorators_and_exceptions.py +0 -42
  354. cdpify-0.3.0/tests/test_models.py +0 -59
  355. cdpify-0.3.0/tests/test_websocket_transport.py +0 -161
  356. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/accessibility/domain.py +0 -0
  357. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/ads/domain.py +0 -0
  358. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/audits/domain.py +0 -0
  359. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/backgroundservice/domain.py +0 -0
  360. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/bluetoothemulation/domain.py +0 -0
  361. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/cachestorage/domain.py +0 -0
  362. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/cast/commands.py +0 -0
  363. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/cast/domain.py +0 -0
  364. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/console/commands.py +0 -0
  365. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/console/domain.py +0 -0
  366. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/crashreportcontext/domain.py +0 -0
  367. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/deviceaccess/domain.py +0 -0
  368. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/deviceorientation/domain.py +0 -0
  369. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/digitalcredentials/domain.py +0 -0
  370. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/domstorage/domain.py +0 -0
  371. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/eventbreakpoints/commands.py +0 -0
  372. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/eventbreakpoints/domain.py +0 -0
  373. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/extensions/domain.py +0 -0
  374. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fedcm/commands.py +0 -0
  375. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fedcm/domain.py +0 -0
  376. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/fetch/domain.py +0 -0
  377. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/filesystem/domain.py +0 -0
  378. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/heapprofiler/domain.py +0 -0
  379. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/indexeddb/commands.py +0 -0
  380. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/indexeddb/domain.py +0 -0
  381. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/input/domain.py +0 -0
  382. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/inspector/commands.py +0 -0
  383. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/inspector/domain.py +0 -0
  384. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/layertree/domain.py +0 -0
  385. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/log/domain.py +0 -0
  386. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/media/commands.py +0 -0
  387. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/media/domain.py +0 -0
  388. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/memory/domain.py +0 -0
  389. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performancetimeline/commands.py +0 -0
  390. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/performancetimeline/domain.py +0 -0
  391. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/preload/commands.py +0 -0
  392. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/preload/domain.py +0 -0
  393. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/profiler/domain.py +0 -0
  394. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/pwa/domain.py +0 -0
  395. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/runtime/domain.py +0 -0
  396. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/schema/domain.py +0 -0
  397. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/serviceworker/domain.py +0 -0
  398. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/smartcardemulation/domain.py +0 -0
  399. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/systeminfo/domain.py +0 -0
  400. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/tethering/domain.py +0 -0
  401. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/tracing/domain.py +0 -0
  402. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webaudio/commands.py +0 -0
  403. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webaudio/domain.py +0 -0
  404. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/domains/webmcp/domain.py +0 -0
  405. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/executor.py +0 -0
  406. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/__main__.py +0 -0
  407. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/downloader.py +0 -0
  408. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/formatting.py +0 -0
  409. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generator.py +0 -0
  410. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/__init__.py +0 -0
  411. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/accessors.py +0 -0
  412. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/constants.py +0 -0
  413. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/generators/context.py +0 -0
  414. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/rendering.py +0 -0
  415. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/generator/schemas.py +0 -0
  416. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/shared/naming.py +0 -0
  417. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify/transports/__init__.py +0 -0
  418. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify.egg-info/dependency_links.txt +0 -0
  419. {cdpify-0.3.0 → cdpify-0.4.0}/cdpify.egg-info/top_level.txt +0 -0
  420. {cdpify-0.3.0 → cdpify-0.4.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdpify
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: A Python client for the Chrome DevTools Protocol (CDP) optimized for DX.
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.12
@@ -8,6 +8,8 @@ Classifier: Programming Language :: Python :: 3.13
8
8
  Classifier: Programming Language :: Python :: 3.14
9
9
  Requires-Python: >=3.12
10
10
  Description-Content-Type: text/markdown
11
+ Provides-Extra: orjson
12
+ Requires-Dist: orjson>=3.11.3; extra == "orjson"
11
13
  Provides-Extra: websocket
12
14
  Requires-Dist: websockets>=15.0.1; extra == "websocket"
13
15
  Provides-Extra: generator
@@ -40,7 +42,7 @@ without working with raw JSON messages.
40
42
 
41
43
  - **Typed by default** — generated models for commands, results, events, and
42
44
  shared protocol types
43
- - **Complete domain coverage** — access all 58 generated CDP domains through
45
+ - **Complete domain coverage** — access all 59 generated CDP domains through
44
46
  properties such as `client.page`, `client.network`, and `client.runtime`
45
47
  - **Async throughout** — transport-neutral core with an optional WebSocket
46
48
  implementation
@@ -56,9 +58,19 @@ pip install "cdpify[websocket]"
56
58
  ```
57
59
 
58
60
  Requires Python 3.12 or newer. The WebSocket extra provides the recommended
59
- default transport used by `Client(url)`. Install `cdpify` without an extra when
61
+ default transport used by `CdpClient(url)`. Install `cdpify` without an extra when
60
62
  supplying your own `Transport` implementation.
61
63
 
64
+ For faster JSON encoding and decoding in the WebSocket transport, install the
65
+ optional `orjson` extra as well:
66
+
67
+ ```bash
68
+ pip install "cdpify[websocket,orjson]"
69
+ ```
70
+
71
+ The transport automatically uses `orjson` when available and otherwise uses
72
+ Python's standard `json` module. Outgoing WebSocket messages remain text frames.
73
+
62
74
  Install the generator dependencies only when regenerating protocol modules:
63
75
 
64
76
  ```bash
@@ -75,7 +87,7 @@ import asyncio
75
87
  import json
76
88
  from urllib.request import urlopen
77
89
 
78
- from cdpify import Client
90
+ from cdpify import CdpClient
79
91
 
80
92
 
81
93
  def get_websocket_url() -> str:
@@ -86,7 +98,7 @@ def get_websocket_url() -> str:
86
98
  async def main() -> None:
87
99
  ws_url = get_websocket_url()
88
100
 
89
- async with Client(ws_url) as client:
101
+ async with CdpClient(ws_url) as client:
90
102
  await client.page.navigate(url="https://example.com")
91
103
 
92
104
  result = await client.runtime.evaluate(
@@ -99,14 +111,34 @@ async def main() -> None:
99
111
  asyncio.run(main())
100
112
  ```
101
113
 
102
- Domains are available as lazy properties on `Client`. Parameters use
114
+ Domains are available as lazy properties on `CdpClient`. Parameters use
103
115
  Python's `snake_case`; `cdpify` handles conversion to and from CDP's wire format.
104
116
 
117
+ Named protocol enums use `StrEnum`, so typed code can use constants such as
118
+ `ResourceType.FETCH` or `CookieOperation.SET_COOKIE`. Decoded responses and
119
+ events contain enum members, including in nested models and lists:
120
+
121
+ ```python
122
+ from cdpify.domains.network import LoadingFailedEvent, NetworkEvent, ResourceType
123
+
124
+ async for event in client.listen(LoadingFailedEvent):
125
+ assert event.__cdp_event__ is NetworkEvent.LOADING_FAILED
126
+ if event.type is ResourceType.FETCH:
127
+ print(event.error_text)
128
+ ```
129
+
130
+ Enum members work as strings and expose the original protocol value through
131
+ `.value`. Unknown values from newer Chrome versions are preserved as members
132
+ of the same enum without changing its declared constants or iteration.
133
+ Anonymous enum annotations such as `Literal["jpeg", "png"]` still accept direct
134
+ strings. Open string fields, including EventSource's server-defined
135
+ `event_name`, remain strings.
136
+
105
137
  ## Supported domains
106
138
 
107
- The generated client currently includes all 58 domains from the bundled CDP
108
- specifications. Each domain is available as a lazy property on `Client` and
109
- `CDPSession`:
139
+ The generated client currently includes all 59 domains from the bundled CDP
140
+ specifications. Each domain is available as a lazy property on `CdpClient` and
141
+ `CdpSession`:
110
142
 
111
143
  | CDP domain | Python accessor | CDP domain | Python accessor |
112
144
  | --- | --- | --- | --- |
@@ -137,37 +169,50 @@ specifications. Each domain is available as a lazy property on `Client` and
137
169
  | `FedCm` | `client.fed_cm` | `Tethering` | `client.tethering` |
138
170
  | `Fetch` | `client.fetch` | `Tracing` | `client.tracing` |
139
171
  | `FileSystem` | `client.file_system` | `WebAudio` | `client.web_audio` |
140
- | `HeadlessExperimental` | `client.headless_experimental` | `WebAuthn` | `client.web_authn` |
141
- | `HeapProfiler` | `client.heap_profiler` | `WebMCP` | `client.web_mcp` |
172
+ | `FindInPage` | `client.find_in_page` | `WebAuthn` | `client.web_authn` |
173
+ | `HeadlessExperimental` | `client.headless_experimental` | `WebMCP` | `client.web_mcp` |
174
+ | `HeapProfiler` | `client.heap_profiler` | | |
142
175
 
143
176
  ## Listening for events
144
177
 
145
- Events are exposed as typed async streams:
178
+ Pass a generated event class to `listen()`. The returned subscription is an
179
+ async iterator of typed events:
146
180
 
147
181
  ```python
148
- from cdpify.domains.network.events import NetworkEvent, RequestWillBeSentEvent
182
+ from cdpify.domains.network.events import RequestWillBeSentEvent
149
183
 
150
184
 
151
185
  await client.network.enable()
152
186
 
153
- async for event in client.listen(
154
- event_name=NetworkEvent.REQUEST_WILL_BE_SENT,
155
- event_type=RequestWillBeSentEvent,
156
- ):
187
+ async for event in client.listen(RequestWillBeSentEvent):
157
188
  print(event.request.method, event.request.url)
158
189
  ```
159
190
 
160
- `client.listen()` accepts an optional `timeout` in seconds and yields only
161
- events from the root connection. A session view applies the same rule to its
162
- bound target:
191
+ The subscription is registered as soon as `listen()` is called, and events are
192
+ buffered until you read them. To wait for an event that your own command
193
+ triggers, subscribe first and then send the command:
194
+
195
+ ```python
196
+ from cdpify.domains.page.events import LoadEventFiredEvent
197
+
198
+
199
+ async with client.listen(LoadEventFiredEvent) as events:
200
+ await client.page.navigate(url="https://example.com")
201
+ await events.next(timeout=10)
202
+ ```
203
+
204
+ Leaving the `async with` block unsubscribes. A stream also ends when the client
205
+ disconnects; `events.next()` then raises `CDPStreamClosedError`. The optional
206
+ `timeout` on `listen()` limits how long each read waits and raises
207
+ `TimeoutError` when it expires.
208
+
209
+ `client.listen()` yields only events from the root connection. A session view
210
+ applies the same rule to its bound target:
163
211
 
164
212
  ```python
165
213
  tab = client.session("session-id")
166
214
 
167
- async for event in tab.listen(
168
- event_name=NetworkEvent.REQUEST_WILL_BE_SENT,
169
- event_type=RequestWillBeSentEvent,
170
- ):
215
+ async for event in tab.listen(RequestWillBeSentEvent):
171
216
  # This stream contains events from this session only.
172
217
  print(event.request.url)
173
218
  ```
@@ -177,15 +222,50 @@ To observe the root connection and all attached sessions together, use
177
222
  event model:
178
223
 
179
224
  ```python
180
- async for received in client.listen_all(
181
- event_name=NetworkEvent.REQUEST_WILL_BE_SENT,
182
- event_type=RequestWillBeSentEvent,
183
- ):
225
+ async for received in client.listen_all(RequestWillBeSentEvent):
184
226
  print(received.session_id, received.value.request.url)
185
227
  ```
186
228
 
187
229
  `received.session_id` is `None` for a root event. Generated event dataclasses
188
- contain only fields defined by the CDP specification.
230
+ contain only fields defined by the CDP specification, plus their CDP name in
231
+ `__cdp_event__`. To listen with your own dataclass, pass the name explicitly:
232
+ `client.listen(MyEvent, event_name="Page.loadEventFired")`.
233
+
234
+ An incoming event is decoded once per event class, when the first listener
235
+ reads it. Matching `listen()`, `CdpSession.listen()`, and `listen_all()`
236
+ subscriptions share that model (`received.value` for `listen_all()`). Treat
237
+ event data as read-only: changing a shared model also changes what other
238
+ listeners see. Make a deep copy when you need your own mutable instance:
239
+
240
+ ```python
241
+ from copy import deepcopy
242
+
243
+ owned_event = deepcopy(event)
244
+ ```
245
+
246
+ Different incoming messages and different event classes have separate cached
247
+ models. Unread events are not decoded. A cache is released when the last
248
+ subscription has read or discarded the incoming event.
249
+
250
+ ### Limiting buffered events
251
+
252
+ Set `max_queue_size` on `CdpClient` to limit each listener's buffer. The default,
253
+ `0`, is unlimited. A full buffer discards its oldest event so slow consumers do
254
+ not block command responses. Override the limit for an individual subscription:
255
+
256
+ ```python
257
+ client = CdpClient(ws_url, max_queue_size=256)
258
+
259
+ async with client:
260
+ async with client.listen(RequestWillBeSentEvent, max_queue_size=32) as events:
261
+ event = await events.next(timeout=10)
262
+ print(events.dropped_events)
263
+ ```
264
+
265
+ The same options apply to `listen_all()` and `CdpSession.listen()`. Passing `0`
266
+ to a listener disables its limit. `events.dropped_events` counts events evicted
267
+ by that listener's buffer. Disconnecting drains the remaining buffered events;
268
+ `aclose()` releases them immediately.
189
269
 
190
270
  ## Working with target sessions
191
271
 
@@ -194,10 +274,10 @@ Attach to a target in flat mode and create an immutable session view with
194
274
  session:
195
275
 
196
276
  ```python
197
- from cdpify import Client
277
+ from cdpify import CdpClient
198
278
 
199
279
 
200
- async with Client(browser_ws_url) as root_client:
280
+ async with CdpClient(browser_ws_url) as root_client:
201
281
  attached = await root_client.target.attach_to_target(
202
282
  target_id="target-id",
203
283
  flatten=True,
@@ -238,11 +318,12 @@ await tab.execute("Runtime.evaluate", {"expression": "1 + 1"})
238
318
  ## Configuration
239
319
 
240
320
  ```python
241
- client = Client(
321
+ client = CdpClient(
242
322
  url="ws://localhost:9222/devtools/browser/...",
243
323
  additional_headers={"Authorization": "Bearer token"},
244
324
  max_frame_size=100 * 1024 * 1024,
245
325
  default_timeout=30.0,
326
+ max_queue_size=256,
246
327
  )
247
328
  ```
248
329
 
@@ -250,11 +331,20 @@ For another transport protocol, implement the exported `Transport` protocol
250
331
  and inject it directly:
251
332
 
252
333
  ```python
253
- from cdpify import Client
334
+ from cdpify import CdpClient
254
335
 
255
- client = Client(transport=my_transport)
336
+ client = CdpClient(transport=my_transport)
256
337
  ```
257
338
 
339
+ Custom transports can optionally implement `CallbackTransport` from
340
+ `cdpify.transport` to deliver events directly to the client. The default
341
+ WebSocket transport uses this path to avoid an intermediate event queue.
342
+ Transports that implement only `Transport.events()` continue to work.
343
+
344
+ When using `WebSocketTransport.events()` directly, its `max_queue_size` option
345
+ sets the same drop-oldest limit on its transport buffer; `dropped_events` counts
346
+ those evictions. A client-supplied custom transport manages its own buffer limits.
347
+
258
348
  For methods not covered by the generated API, use the low-level escape hatch:
259
349
 
260
350
  ```python
@@ -264,6 +354,38 @@ result = await client.execute(
264
354
  )
265
355
  ```
266
356
 
357
+ ### Generated type aliases
358
+
359
+ Generated aliases such as `FrameId`, `NodeId`, and `TargetFilter` use Python's
360
+ `type` statement. Use them in annotations and pass ordinary Python values:
361
+
362
+ ```python
363
+ from cdpify.domains.page import FrameId
364
+
365
+ frame_id: FrameId = "F1"
366
+ ```
367
+
368
+ Aliases are not constructors or runtime classes. Use `"F1"` directly rather
369
+ than `FrameId("F1")`, and `isinstance(frame_id, str)` for a runtime check.
370
+
371
+ ### When Chrome deviates from the spec
372
+
373
+ Chrome does not always send every field the protocol marks as required.
374
+ Instead of failing, cdpify logs a warning on the `cdpify.codec` logger and
375
+ sets the missing field to `None`, even if its type says otherwise. Unknown
376
+ fields from newer Chrome versions are ignored.
377
+
378
+ Deprecated CDP commands still work but emit a `DeprecationWarning`. Use
379
+ Python's warning filters to silence them or turn them into errors:
380
+
381
+ ```python
382
+ import warnings
383
+
384
+ warnings.filterwarnings(
385
+ "ignore", category=DeprecationWarning, message=r"\w+\.\w+ is deprecated"
386
+ )
387
+ ```
388
+
267
389
  ## Development
268
390
 
269
391
  Install the project and its development dependencies with
@@ -275,6 +397,10 @@ uv run pytest
275
397
  uv run ruff check . --exclude cdpify/domains
276
398
  ```
277
399
 
400
+ Use `uv sync --dev --extra orjson` and `uv run --extra orjson pytest` to include
401
+ the optional backend. CI installs this extra and tests both JSON backends on
402
+ Ubuntu, Windows, and macOS with Python 3.12, 3.13, and 3.14.
403
+
278
404
  To download the latest protocol definitions and regenerate all domain clients:
279
405
 
280
406
  ```bash