browser-debugger-cli 0.0.1-alpha.0 → 0.1.0-alpha.1

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 (421) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -52
  3. package/dist/__testfixtures__/cdpMessages.d.ts +43 -0
  4. package/dist/__testfixtures__/cdpMessages.d.ts.map +1 -0
  5. package/dist/__testfixtures__/cdpMessages.js +118 -0
  6. package/dist/__testfixtures__/cdpMessages.js.map +1 -0
  7. package/dist/__testfixtures__/connectionTargets.d.ts +21 -0
  8. package/dist/__testfixtures__/connectionTargets.d.ts.map +1 -0
  9. package/dist/__testfixtures__/connectionTargets.js +59 -0
  10. package/dist/__testfixtures__/connectionTargets.js.map +1 -0
  11. package/dist/__tests__/integration/session-files.integration.test.d.ts +2 -0
  12. package/dist/__tests__/integration/session-files.integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/integration/session-files.integration.test.js +66 -0
  14. package/dist/__tests__/integration/session-files.integration.test.js.map +1 -0
  15. package/dist/__testutils__/FakeClock.d.ts +67 -0
  16. package/dist/__testutils__/FakeClock.d.ts.map +1 -0
  17. package/dist/__testutils__/FakeClock.js +132 -0
  18. package/dist/__testutils__/FakeClock.js.map +1 -0
  19. package/dist/__testutils__/FakeWebSocket.d.ts +106 -0
  20. package/dist/__testutils__/FakeWebSocket.d.ts.map +1 -0
  21. package/dist/__testutils__/FakeWebSocket.js +213 -0
  22. package/dist/__testutils__/FakeWebSocket.js.map +1 -0
  23. package/dist/__testutils__/assertions.d.ts +33 -0
  24. package/dist/__testutils__/assertions.d.ts.map +1 -0
  25. package/dist/__testutils__/assertions.js +57 -0
  26. package/dist/__testutils__/assertions.js.map +1 -0
  27. package/dist/__testutils__/index.d.ts +15 -0
  28. package/dist/__testutils__/index.d.ts.map +1 -0
  29. package/dist/__testutils__/index.js +15 -0
  30. package/dist/__testutils__/index.js.map +1 -0
  31. package/dist/__testutils__/testClock.d.ts +28 -0
  32. package/dist/__testutils__/testClock.d.ts.map +1 -0
  33. package/dist/__testutils__/testClock.js +81 -0
  34. package/dist/__testutils__/testClock.js.map +1 -0
  35. package/dist/__testutils__/testFixtures.d.ts +15 -0
  36. package/dist/__testutils__/testFixtures.d.ts.map +1 -0
  37. package/dist/__testutils__/testFixtures.js +23 -0
  38. package/dist/__testutils__/testFixtures.js.map +1 -0
  39. package/dist/__testutils__/testProcess.d.ts +46 -0
  40. package/dist/__testutils__/testProcess.d.ts.map +1 -0
  41. package/dist/__testutils__/testProcess.js +77 -0
  42. package/dist/__testutils__/testProcess.js.map +1 -0
  43. package/dist/cli/collectors/dom.d.ts +8 -0
  44. package/dist/cli/collectors/dom.d.ts.map +1 -0
  45. package/dist/cli/collectors/dom.js +361 -0
  46. package/dist/cli/collectors/dom.js.map +1 -0
  47. package/dist/cli/collectors/helpers/domCache.d.ts +40 -0
  48. package/dist/cli/collectors/helpers/domCache.d.ts.map +1 -0
  49. package/dist/cli/collectors/helpers/domCache.js +79 -0
  50. package/dist/cli/collectors/helpers/domCache.js.map +1 -0
  51. package/dist/cli/collectors/helpers/domQuery.d.ts +45 -0
  52. package/dist/cli/collectors/helpers/domQuery.d.ts.map +1 -0
  53. package/dist/cli/collectors/helpers/domQuery.js +100 -0
  54. package/dist/cli/collectors/helpers/domQuery.js.map +1 -0
  55. package/dist/cli/collectors/helpers/selectorParser.d.ts +20 -0
  56. package/dist/cli/collectors/helpers/selectorParser.d.ts.map +1 -0
  57. package/dist/cli/collectors/helpers/selectorParser.js +20 -0
  58. package/dist/cli/collectors/helpers/selectorParser.js.map +1 -0
  59. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +24 -0
  60. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
  61. package/dist/cli/commands/__tests__/cdp.contract.test.js +467 -0
  62. package/dist/cli/commands/__tests__/cdp.contract.test.js.map +1 -0
  63. package/dist/cli/commands/__tests__/ipcTest.test.d.ts +2 -0
  64. package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +1 -0
  65. package/dist/cli/commands/__tests__/ipcTest.test.js +37 -0
  66. package/dist/cli/commands/__tests__/ipcTest.test.js.map +1 -0
  67. package/dist/cli/commands/cdp.d.ts +8 -0
  68. package/dist/cli/commands/cdp.d.ts.map +1 -0
  69. package/dist/cli/commands/cdp.js +45 -0
  70. package/dist/cli/commands/cdp.js.map +1 -0
  71. package/dist/cli/commands/cleanup.d.ts +8 -0
  72. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  73. package/dist/cli/commands/cleanup.js +130 -0
  74. package/dist/cli/commands/cleanup.js.map +1 -0
  75. package/dist/cli/commands/console.d.ts +8 -0
  76. package/dist/cli/commands/console.d.ts.map +1 -0
  77. package/dist/cli/commands/console.js +97 -0
  78. package/dist/cli/commands/console.js.map +1 -0
  79. package/dist/cli/commands/details.d.ts +8 -0
  80. package/dist/cli/commands/details.d.ts.map +1 -0
  81. package/dist/cli/commands/details.js +68 -0
  82. package/dist/cli/commands/details.js.map +1 -0
  83. package/dist/cli/commands/dom/helpers/domCache.d.ts +36 -0
  84. package/dist/cli/commands/dom/helpers/domCache.d.ts.map +1 -0
  85. package/dist/cli/commands/dom/helpers/domCache.js +65 -0
  86. package/dist/cli/commands/dom/helpers/domCache.js.map +1 -0
  87. package/dist/cli/commands/dom/helpers/domQuery.d.ts +48 -0
  88. package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +1 -0
  89. package/dist/cli/commands/dom/helpers/domQuery.js +104 -0
  90. package/dist/cli/commands/dom/helpers/domQuery.js.map +1 -0
  91. package/dist/cli/commands/dom/helpers/errorHandler.d.ts +45 -0
  92. package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -0
  93. package/dist/cli/commands/dom/helpers/errorHandler.js +70 -0
  94. package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -0
  95. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +52 -0
  96. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +1 -0
  97. package/dist/cli/commands/dom/helpers/evalHelpers.js +75 -0
  98. package/dist/cli/commands/dom/helpers/evalHelpers.js.map +1 -0
  99. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +35 -0
  100. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +1 -0
  101. package/dist/cli/commands/dom/helpers/optionsBuilder.js +51 -0
  102. package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +1 -0
  103. package/dist/cli/commands/dom/helpers/selectorParser.d.ts +20 -0
  104. package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +1 -0
  105. package/dist/cli/commands/dom/helpers/selectorParser.js +20 -0
  106. package/dist/cli/commands/dom/helpers/selectorParser.js.map +1 -0
  107. package/dist/cli/commands/dom/index.d.ts +8 -0
  108. package/dist/cli/commands/dom/index.d.ts.map +1 -0
  109. package/dist/cli/commands/dom/index.js +257 -0
  110. package/dist/cli/commands/dom/index.js.map +1 -0
  111. package/dist/cli/commands/ipcTest.d.ts +23 -0
  112. package/dist/cli/commands/ipcTest.d.ts.map +1 -0
  113. package/dist/cli/commands/ipcTest.js +181 -0
  114. package/dist/cli/commands/ipcTest.js.map +1 -0
  115. package/dist/cli/commands/network.d.ts +8 -0
  116. package/dist/cli/commands/network.d.ts.map +1 -0
  117. package/dist/cli/commands/network.js +40 -0
  118. package/dist/cli/commands/network.js.map +1 -0
  119. package/dist/cli/commands/peek.d.ts +8 -0
  120. package/dist/cli/commands/peek.d.ts.map +1 -0
  121. package/dist/cli/commands/peek.js +109 -0
  122. package/dist/cli/commands/peek.js.map +1 -0
  123. package/dist/cli/commands/query.d.ts +9 -0
  124. package/dist/cli/commands/query.d.ts.map +1 -0
  125. package/dist/cli/commands/query.js +127 -0
  126. package/dist/cli/commands/query.js.map +1 -0
  127. package/dist/cli/commands/start.d.ts +9 -0
  128. package/dist/cli/commands/start.d.ts.map +1 -0
  129. package/dist/cli/commands/start.js +78 -0
  130. package/dist/cli/commands/start.js.map +1 -0
  131. package/dist/cli/commands/status.d.ts +9 -0
  132. package/dist/cli/commands/status.d.ts.map +1 -0
  133. package/dist/cli/commands/status.js +84 -0
  134. package/dist/cli/commands/status.js.map +1 -0
  135. package/dist/cli/commands/stop.d.ts +8 -0
  136. package/dist/cli/commands/stop.d.ts.map +1 -0
  137. package/dist/cli/commands/stop.js +146 -0
  138. package/dist/cli/commands/stop.js.map +1 -0
  139. package/dist/cli/formatters/detailsFormatter.d.ts +10 -0
  140. package/dist/cli/formatters/detailsFormatter.d.ts.map +1 -0
  141. package/dist/cli/formatters/detailsFormatter.js +63 -0
  142. package/dist/cli/formatters/detailsFormatter.js.map +1 -0
  143. package/dist/cli/formatters/previewFormatter.d.ts +27 -0
  144. package/dist/cli/formatters/previewFormatter.d.ts.map +1 -0
  145. package/dist/cli/formatters/previewFormatter.js +160 -0
  146. package/dist/cli/formatters/previewFormatter.js.map +1 -0
  147. package/dist/cli/formatters/statusFormatter.d.ts +34 -0
  148. package/dist/cli/formatters/statusFormatter.d.ts.map +1 -0
  149. package/dist/cli/formatters/statusFormatter.js +108 -0
  150. package/dist/cli/formatters/statusFormatter.js.map +1 -0
  151. package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
  152. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
  153. package/dist/cli/handlers/ChromeBootstrap.js +50 -0
  154. package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
  155. package/dist/cli/handlers/CommandRunner.d.ts +60 -0
  156. package/dist/cli/handlers/CommandRunner.d.ts.map +1 -0
  157. package/dist/cli/handlers/CommandRunner.js +81 -0
  158. package/dist/cli/handlers/CommandRunner.js.map +1 -0
  159. package/dist/cli/handlers/OutputBuilder.d.ts +60 -0
  160. package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -0
  161. package/dist/cli/handlers/OutputBuilder.js +138 -0
  162. package/dist/cli/handlers/OutputBuilder.js.map +1 -0
  163. package/dist/cli/handlers/OutputWriter.d.ts +15 -0
  164. package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
  165. package/dist/cli/handlers/OutputWriter.js +34 -0
  166. package/dist/cli/handlers/OutputWriter.js.map +1 -0
  167. package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
  168. package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
  169. package/dist/cli/handlers/PreviewWriter.js +119 -0
  170. package/dist/cli/handlers/PreviewWriter.js.map +1 -0
  171. package/dist/cli/handlers/SessionLock.d.ts +16 -0
  172. package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
  173. package/dist/cli/handlers/SessionLock.js +38 -0
  174. package/dist/cli/handlers/SessionLock.js.map +1 -0
  175. package/dist/cli/handlers/SessionLoop.d.ts +19 -0
  176. package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
  177. package/dist/cli/handlers/SessionLoop.js +47 -0
  178. package/dist/cli/handlers/SessionLoop.js.map +1 -0
  179. package/dist/cli/handlers/ShutdownController.d.ts +38 -0
  180. package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
  181. package/dist/cli/handlers/ShutdownController.js +83 -0
  182. package/dist/cli/handlers/ShutdownController.js.map +1 -0
  183. package/dist/cli/handlers/SignalHandler.d.ts +35 -0
  184. package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
  185. package/dist/cli/handlers/SignalHandler.js +81 -0
  186. package/dist/cli/handlers/SignalHandler.js.map +1 -0
  187. package/dist/cli/handlers/TargetSetup.d.ts +42 -0
  188. package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
  189. package/dist/cli/handlers/TargetSetup.js +87 -0
  190. package/dist/cli/handlers/TargetSetup.js.map +1 -0
  191. package/dist/cli/handlers/commonOptions.d.ts +54 -0
  192. package/dist/cli/handlers/commonOptions.d.ts.map +1 -0
  193. package/dist/cli/handlers/commonOptions.js +64 -0
  194. package/dist/cli/handlers/commonOptions.js.map +1 -0
  195. package/dist/cli/handlers/daemonSessionController.d.ts +23 -0
  196. package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -0
  197. package/dist/cli/handlers/daemonSessionController.js +108 -0
  198. package/dist/cli/handlers/daemonSessionController.js.map +1 -0
  199. package/dist/cli/handlers/sessionController.d.ts +21 -0
  200. package/dist/cli/handlers/sessionController.d.ts.map +1 -0
  201. package/dist/cli/handlers/sessionController.js +55 -0
  202. package/dist/cli/handlers/sessionController.js.map +1 -0
  203. package/dist/cli/registry.d.ts +11 -0
  204. package/dist/cli/registry.d.ts.map +1 -0
  205. package/dist/cli/registry.js +46 -0
  206. package/dist/cli/registry.js.map +1 -0
  207. package/dist/collectors/__tests__/network.contract.test.d.ts +28 -0
  208. package/dist/collectors/__tests__/network.contract.test.d.ts.map +1 -0
  209. package/dist/collectors/__tests__/network.contract.test.js +525 -0
  210. package/dist/collectors/__tests__/network.contract.test.js.map +1 -0
  211. package/dist/collectors/console.d.ts +5 -3
  212. package/dist/collectors/console.d.ts.map +1 -1
  213. package/dist/collectors/console.js +48 -26
  214. package/dist/collectors/console.js.map +1 -1
  215. package/dist/collectors/dom.d.ts +2 -2
  216. package/dist/collectors/dom.d.ts.map +1 -1
  217. package/dist/collectors/dom.js +23 -12
  218. package/dist/collectors/dom.js.map +1 -1
  219. package/dist/collectors/network.d.ts +18 -4
  220. package/dist/collectors/network.d.ts.map +1 -1
  221. package/dist/collectors/network.js +111 -34
  222. package/dist/collectors/network.js.map +1 -1
  223. package/dist/connection/__tests__/cdp.contract.test.d.ts +16 -0
  224. package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -0
  225. package/dist/connection/__tests__/cdp.contract.test.js +378 -0
  226. package/dist/connection/__tests__/cdp.contract.test.js.map +1 -0
  227. package/dist/connection/__tests__/finder.contract.test.d.ts +2 -0
  228. package/dist/connection/__tests__/finder.contract.test.d.ts.map +1 -0
  229. package/dist/connection/__tests__/finder.contract.test.js +239 -0
  230. package/dist/connection/__tests__/finder.contract.test.js.map +1 -0
  231. package/dist/connection/__tests__/tabs.contract.test.d.ts +2 -0
  232. package/dist/connection/__tests__/tabs.contract.test.d.ts.map +1 -0
  233. package/dist/connection/__tests__/tabs.contract.test.js +137 -0
  234. package/dist/connection/__tests__/tabs.contract.test.js.map +1 -0
  235. package/dist/connection/cdp.d.ts +165 -16
  236. package/dist/connection/cdp.d.ts.map +1 -1
  237. package/dist/connection/cdp.js +342 -122
  238. package/dist/connection/cdp.js.map +1 -1
  239. package/dist/connection/finder.d.ts +5 -4
  240. package/dist/connection/finder.d.ts.map +1 -1
  241. package/dist/connection/finder.js +10 -16
  242. package/dist/connection/finder.js.map +1 -1
  243. package/dist/connection/launcher.d.ts +18 -11
  244. package/dist/connection/launcher.d.ts.map +1 -1
  245. package/dist/connection/launcher.js +148 -82
  246. package/dist/connection/launcher.js.map +1 -1
  247. package/dist/connection/tabs.d.ts +47 -14
  248. package/dist/connection/tabs.d.ts.map +1 -1
  249. package/dist/connection/tabs.js +493 -132
  250. package/dist/connection/tabs.js.map +1 -1
  251. package/dist/constants.d.ts +209 -0
  252. package/dist/constants.d.ts.map +1 -0
  253. package/dist/constants.js +232 -0
  254. package/dist/constants.js.map +1 -0
  255. package/dist/daemon/__tests__/ipcServer.contract.test.d.ts +23 -0
  256. package/dist/daemon/__tests__/ipcServer.contract.test.d.ts.map +1 -0
  257. package/dist/daemon/__tests__/ipcServer.contract.test.js +401 -0
  258. package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -0
  259. package/dist/daemon/__tests__/launcher.unit.test.d.ts +8 -0
  260. package/dist/daemon/__tests__/launcher.unit.test.d.ts.map +1 -0
  261. package/dist/daemon/__tests__/launcher.unit.test.js +20 -0
  262. package/dist/daemon/__tests__/launcher.unit.test.js.map +1 -0
  263. package/dist/daemon/ipcServer.d.ts +83 -0
  264. package/dist/daemon/ipcServer.d.ts.map +1 -0
  265. package/dist/daemon/ipcServer.js +670 -0
  266. package/dist/daemon/ipcServer.js.map +1 -0
  267. package/dist/daemon/launcher.d.ts +31 -0
  268. package/dist/daemon/launcher.d.ts.map +1 -0
  269. package/dist/daemon/launcher.js +137 -0
  270. package/dist/daemon/launcher.js.map +1 -0
  271. package/dist/daemon/startSession.d.ts +51 -0
  272. package/dist/daemon/startSession.d.ts.map +1 -0
  273. package/dist/daemon/startSession.js +149 -0
  274. package/dist/daemon/startSession.js.map +1 -0
  275. package/dist/daemon/worker.d.ts +18 -0
  276. package/dist/daemon/worker.d.ts.map +1 -0
  277. package/dist/daemon/worker.js +623 -0
  278. package/dist/daemon/worker.js.map +1 -0
  279. package/dist/daemon/workerIpc.d.ts +33 -0
  280. package/dist/daemon/workerIpc.d.ts.map +1 -0
  281. package/dist/daemon/workerIpc.js +8 -0
  282. package/dist/daemon/workerIpc.js.map +1 -0
  283. package/dist/daemon.d.ts +10 -0
  284. package/dist/daemon.d.ts.map +1 -0
  285. package/dist/daemon.js +32 -0
  286. package/dist/daemon.js.map +1 -0
  287. package/dist/index.js +41 -420
  288. package/dist/index.js.map +1 -1
  289. package/dist/ipc/__tests__/client.contract.test.d.ts +23 -0
  290. package/dist/ipc/__tests__/client.contract.test.d.ts.map +1 -0
  291. package/dist/ipc/__tests__/client.contract.test.js +466 -0
  292. package/dist/ipc/__tests__/client.contract.test.js.map +1 -0
  293. package/dist/ipc/client.d.ts +109 -0
  294. package/dist/ipc/client.d.ts.map +1 -0
  295. package/dist/ipc/client.js +220 -0
  296. package/dist/ipc/client.js.map +1 -0
  297. package/dist/ipc/commands.d.ts +208 -0
  298. package/dist/ipc/commands.d.ts.map +1 -0
  299. package/dist/ipc/commands.js +69 -0
  300. package/dist/ipc/commands.js.map +1 -0
  301. package/dist/ipc/responseValidator.d.ts +40 -0
  302. package/dist/ipc/responseValidator.d.ts.map +1 -0
  303. package/dist/ipc/responseValidator.js +28 -0
  304. package/dist/ipc/responseValidator.js.map +1 -0
  305. package/dist/ipc/types.d.ts +193 -0
  306. package/dist/ipc/types.d.ts.map +1 -0
  307. package/dist/ipc/types.js +21 -0
  308. package/dist/ipc/types.js.map +1 -0
  309. package/dist/session/BdgSession.d.ts +71 -4
  310. package/dist/session/BdgSession.d.ts.map +1 -1
  311. package/dist/session/BdgSession.js +173 -75
  312. package/dist/session/BdgSession.js.map +1 -1
  313. package/dist/session/chrome.d.ts +46 -0
  314. package/dist/session/chrome.d.ts.map +1 -0
  315. package/dist/session/chrome.js +92 -0
  316. package/dist/session/chrome.js.map +1 -0
  317. package/dist/session/cleanup.d.ts +45 -0
  318. package/dist/session/cleanup.d.ts.map +1 -0
  319. package/dist/session/cleanup.js +230 -0
  320. package/dist/session/cleanup.js.map +1 -0
  321. package/dist/session/index.d.ts +15 -0
  322. package/dist/session/index.d.ts.map +1 -0
  323. package/dist/session/index.js +23 -0
  324. package/dist/session/index.js.map +1 -0
  325. package/dist/session/lock.d.ts +57 -0
  326. package/dist/session/lock.d.ts.map +1 -0
  327. package/dist/session/lock.js +154 -0
  328. package/dist/session/lock.js.map +1 -0
  329. package/dist/session/metadata.d.ts +59 -0
  330. package/dist/session/metadata.d.ts.map +1 -0
  331. package/dist/session/metadata.js +71 -0
  332. package/dist/session/metadata.js.map +1 -0
  333. package/dist/session/output.d.ts +18 -0
  334. package/dist/session/output.d.ts.map +1 -0
  335. package/dist/session/output.js +24 -0
  336. package/dist/session/output.js.map +1 -0
  337. package/dist/session/paths.d.ts +73 -0
  338. package/dist/session/paths.d.ts.map +1 -0
  339. package/dist/session/paths.js +84 -0
  340. package/dist/session/paths.js.map +1 -0
  341. package/dist/session/pid.d.ts +40 -0
  342. package/dist/session/pid.d.ts.map +1 -0
  343. package/dist/session/pid.js +73 -0
  344. package/dist/session/pid.js.map +1 -0
  345. package/dist/session/process.d.ts +45 -0
  346. package/dist/session/process.d.ts.map +1 -0
  347. package/dist/session/process.js +88 -0
  348. package/dist/session/process.js.map +1 -0
  349. package/dist/types.d.ts +114 -38
  350. package/dist/types.d.ts.map +1 -1
  351. package/dist/utils/__tests__/filters.unit.test.d.ts +2 -0
  352. package/dist/utils/__tests__/filters.unit.test.d.ts.map +1 -0
  353. package/dist/utils/__tests__/filters.unit.test.js +239 -0
  354. package/dist/utils/__tests__/filters.unit.test.js.map +1 -0
  355. package/dist/utils/__tests__/session.contract.test.d.ts +2 -0
  356. package/dist/utils/__tests__/session.contract.test.d.ts.map +1 -0
  357. package/dist/utils/__tests__/session.contract.test.js +234 -0
  358. package/dist/utils/__tests__/session.contract.test.js.map +1 -0
  359. package/dist/utils/atomicFile.d.ts +38 -0
  360. package/dist/utils/atomicFile.d.ts.map +1 -0
  361. package/dist/utils/atomicFile.js +71 -0
  362. package/dist/utils/atomicFile.js.map +1 -0
  363. package/dist/utils/cdpHandlers.d.ts +31 -0
  364. package/dist/utils/cdpHandlers.d.ts.map +1 -0
  365. package/dist/utils/cdpHandlers.js +38 -0
  366. package/dist/utils/cdpHandlers.js.map +1 -0
  367. package/dist/utils/chromeDiagnostics.d.ts +28 -0
  368. package/dist/utils/chromeDiagnostics.d.ts.map +1 -0
  369. package/dist/utils/chromeDiagnostics.js +88 -0
  370. package/dist/utils/chromeDiagnostics.js.map +1 -0
  371. package/dist/utils/errors.d.ts +82 -0
  372. package/dist/utils/errors.d.ts.map +1 -0
  373. package/dist/utils/errors.js +88 -0
  374. package/dist/utils/errors.js.map +1 -0
  375. package/dist/utils/exitCodes.d.ts +32 -0
  376. package/dist/utils/exitCodes.d.ts.map +1 -0
  377. package/dist/utils/exitCodes.js +36 -0
  378. package/dist/utils/exitCodes.js.map +1 -0
  379. package/dist/utils/filters.d.ts +108 -0
  380. package/dist/utils/filters.d.ts.map +1 -0
  381. package/dist/utils/filters.js +304 -0
  382. package/dist/utils/filters.js.map +1 -0
  383. package/dist/utils/formatters/network.d.ts +23 -0
  384. package/dist/utils/formatters/network.d.ts.map +1 -0
  385. package/dist/utils/formatters/network.js +35 -0
  386. package/dist/utils/formatters/network.js.map +1 -0
  387. package/dist/utils/http.d.ts +34 -0
  388. package/dist/utils/http.d.ts.map +1 -0
  389. package/dist/utils/http.js +48 -0
  390. package/dist/utils/http.js.map +1 -0
  391. package/dist/utils/logger.d.ts +42 -0
  392. package/dist/utils/logger.d.ts.map +1 -0
  393. package/dist/utils/logger.js +43 -0
  394. package/dist/utils/logger.js.map +1 -0
  395. package/dist/utils/objects.d.ts +23 -0
  396. package/dist/utils/objects.d.ts.map +1 -0
  397. package/dist/utils/objects.js +25 -0
  398. package/dist/utils/objects.js.map +1 -0
  399. package/dist/utils/url/safeParseUrl.d.ts +63 -0
  400. package/dist/utils/url/safeParseUrl.d.ts.map +1 -0
  401. package/dist/utils/url/safeParseUrl.js +84 -0
  402. package/dist/utils/url/safeParseUrl.js.map +1 -0
  403. package/dist/utils/url.d.ts +63 -1
  404. package/dist/utils/url.d.ts.map +1 -1
  405. package/dist/utils/url.js +152 -2
  406. package/dist/utils/url.js.map +1 -1
  407. package/dist/utils/validation.d.ts +1 -1
  408. package/dist/utils/validation.d.ts.map +1 -1
  409. package/dist/utils/version.d.ts +3 -0
  410. package/dist/utils/version.d.ts.map +1 -0
  411. package/dist/utils/version.js +27 -0
  412. package/dist/utils/version.js.map +1 -0
  413. package/package.json +57 -10
  414. package/dist/utils/pageLoad.d.ts +0 -21
  415. package/dist/utils/pageLoad.d.ts.map +0 -1
  416. package/dist/utils/pageLoad.js +0 -85
  417. package/dist/utils/pageLoad.js.map +0 -1
  418. package/dist/utils/session.d.ts +0 -104
  419. package/dist/utils/session.d.ts.map +0 -1
  420. package/dist/utils/session.js +0 -244
  421. package/dist/utils/session.js.map +0 -1
@@ -1,4 +1,6 @@
1
- const MAX_MESSAGES = 10000; // Prevent memory issues
1
+ import { MAX_CONSOLE_MESSAGES } from '../constants.js';
2
+ import { CDPHandlerRegistry } from '../utils/cdpHandlers.js';
3
+ import { shouldExcludeConsoleMessage } from '../utils/filters.js';
2
4
  /**
3
5
  * Start collecting console messages and exceptions via CDP Runtime domain.
4
6
  *
@@ -6,60 +8,80 @@ const MAX_MESSAGES = 10000; // Prevent memory issues
6
8
  *
7
9
  * @param cdp - CDP connection instance
8
10
  * @param messages - Array to populate with console messages
11
+ * @param includeAll - If true, disable default pattern filtering (default: false)
9
12
  * @returns Cleanup function to remove event handlers
10
13
  *
11
14
  * @remarks
12
15
  * - Message limit of 10,000 prevents memory issues in long-running sessions
13
16
  * - After limit is reached, new messages are silently dropped (warning logged once)
17
+ * - By default, common dev server noise patterns are filtered out (use includeAll to disable)
14
18
  */
15
- export async function startConsoleCollection(cdp, messages) {
16
- const handlers = [];
19
+ export async function startConsoleCollection(cdp, messages, includeAll = false) {
20
+ const registry = new CDPHandlerRegistry();
17
21
  // Enable runtime
18
22
  await cdp.send('Runtime.enable');
19
23
  await cdp.send('Log.enable');
20
24
  // Listen for console API calls
21
- const consoleAPIId = cdp.on('Runtime.consoleAPICalled', (params) => {
25
+ registry.register(cdp, 'Runtime.consoleAPICalled', (params) => {
26
+ const text = params.args
27
+ .map((arg) => {
28
+ // arg type already defined in CDPConsoleAPICalledParams
29
+ if (arg.value !== undefined) {
30
+ // Handle different value types - primitives only, objects use description
31
+ const value = arg.value;
32
+ if (typeof value === 'string' ||
33
+ typeof value === 'number' ||
34
+ typeof value === 'boolean') {
35
+ return String(value);
36
+ }
37
+ // For objects/arrays, use description if available
38
+ return arg.description ?? '[object]';
39
+ }
40
+ if (arg.description !== undefined) {
41
+ return arg.description;
42
+ }
43
+ return '';
44
+ })
45
+ .join(' ');
46
+ // Apply pattern filtering
47
+ if (shouldExcludeConsoleMessage(text, params.type, includeAll)) {
48
+ return;
49
+ }
22
50
  const message = {
23
51
  type: params.type,
24
- text: params.args
25
- .map((arg) => {
26
- if (arg.value !== undefined) {
27
- return String(arg.value);
28
- }
29
- if (arg.description !== undefined) {
30
- return arg.description;
31
- }
32
- return '';
33
- })
34
- .join(' '),
52
+ text,
35
53
  timestamp: params.timestamp,
36
- args: params.args
54
+ args: params.args,
37
55
  };
38
- if (messages.length < MAX_MESSAGES) {
56
+ if (messages.length < MAX_CONSOLE_MESSAGES) {
39
57
  messages.push(message);
40
58
  }
41
- else if (messages.length === MAX_MESSAGES) {
42
- console.error(`Warning: Console message limit reached (${MAX_MESSAGES})`);
59
+ else if (messages.length === MAX_CONSOLE_MESSAGES) {
60
+ console.error(`Warning: Console message limit reached (${MAX_CONSOLE_MESSAGES})`);
43
61
  }
44
62
  });
45
- handlers.push({ event: 'Runtime.consoleAPICalled', id: consoleAPIId });
46
63
  // Listen for exceptions
47
- const exceptionId = cdp.on('Runtime.exceptionThrown', (params) => {
64
+ registry.register(cdp, 'Runtime.exceptionThrown', (params) => {
48
65
  const exception = params.exceptionDetails;
66
+ const text = exception.text ?? exception.exception?.description ?? 'Unknown error';
67
+ // Apply pattern filtering (but don't filter errors by default)
68
+ // Errors are usually important, only filter if they match noise patterns
69
+ if (shouldExcludeConsoleMessage(text, 'error', includeAll)) {
70
+ return;
71
+ }
49
72
  const message = {
50
73
  type: 'error',
51
- text: exception.text || exception.exception?.description || 'Unknown error',
52
- timestamp: exception.timestamp || Date.now()
74
+ text,
75
+ timestamp: exception.timestamp ?? Date.now(),
53
76
  };
54
- if (messages.length < MAX_MESSAGES) {
77
+ if (messages.length < MAX_CONSOLE_MESSAGES) {
55
78
  messages.push(message);
56
79
  }
57
80
  });
58
- handlers.push({ event: 'Runtime.exceptionThrown', id: exceptionId });
59
81
  // Return cleanup function
60
82
  return () => {
61
83
  // Remove event handlers
62
- handlers.forEach(({ event, id }) => cdp.off(event, id));
84
+ registry.cleanup(cdp);
63
85
  };
64
86
  }
65
87
  //# sourceMappingURL=console.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/collectors/console.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,wBAAwB;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAkB,EAClB,QAA0B;IAE1B,MAAM,QAAQ,GAAyC,EAAE,CAAC;IAE1D,iBAAiB;IACjB,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE7B,+BAA+B;IAC/B,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,MAAiC,EAAE,EAAE;QAC5F,MAAM,OAAO,GAAmB;YAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;iBACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBAClC,OAAO,GAAG,CAAC,WAAW,CAAC;gBACzB,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC;YACZ,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,2CAA2C,YAAY,GAAG,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAEvE,wBAAwB;IACxB,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,MAAgC,EAAE,EAAE;QACzF,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAC1C,MAAM,OAAO,GAAmB;YAC9B,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,SAAS,EAAE,WAAW,IAAI,eAAe;YAC3E,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;SAC7C,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAErE,0BAA0B;IAC1B,OAAO,GAAG,EAAE;QACV,wBAAwB;QACxB,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/collectors/console.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { CDPConnection } from '../connection/cdp.js';
2
- import { DOMData, CleanupFunction } from '../types.js';
1
+ import type { CDPConnection } from '../connection/cdp.js';
2
+ import type { DOMData, CleanupFunction } from '../types.js';
3
3
  /**
4
4
  * Prepare CDP domains for DOM collection.
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/collectors/dom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAsBvF;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAoErE"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/collectors/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EAKhB,MAAM,SAAS,CAAC;AAEjB;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAsBvF;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAoFrE"}
@@ -36,48 +36,59 @@ export async function prepareDOMCollection(cdp) {
36
36
  * @returns DOM data including URL, title, and full HTML
37
37
  */
38
38
  export async function collectDOM(cdp) {
39
+ const domCaptureStart = Date.now();
39
40
  try {
40
41
  // Add a timeout wrapper to prevent hanging
41
42
  const timeout = 5000; // 5 seconds should be plenty for DOM capture
42
43
  const captureWithTimeout = async (promise, label) => {
43
44
  return Promise.race([
44
45
  promise,
45
- new Promise((_, reject) => setTimeout(() => reject(new Error(`${label} timed out after ${timeout}ms`)), timeout))
46
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`${label} timed out after ${timeout}ms`)), timeout)),
46
47
  ]);
47
48
  };
48
49
  // Get document
49
50
  console.error('Getting document...');
50
- const { root } = await captureWithTimeout(cdp.send('DOM.getDocument', { depth: -1 }), 'DOM.getDocument');
51
- console.error(`Got document root (nodeId: ${root.nodeId})`);
51
+ const docStart = Date.now();
52
+ const documentResponse = await captureWithTimeout(cdp.send('DOM.getDocument', { depth: -1 }), 'DOM.getDocument');
53
+ const root = documentResponse.root;
54
+ console.error(`[PERF] DOM.getDocument: ${Date.now() - docStart}ms (nodeId: ${root.nodeId})`);
52
55
  // Get outer HTML
53
56
  console.error('Getting outer HTML...');
54
- const { outerHTML } = await captureWithTimeout(cdp.send('DOM.getOuterHTML', { nodeId: root.nodeId }), 'DOM.getOuterHTML');
55
- console.error(`Got outer HTML (${outerHTML.length} chars)`);
57
+ const htmlStart = Date.now();
58
+ const htmlResponse = await captureWithTimeout(cdp.send('DOM.getOuterHTML', { nodeId: root.nodeId }), 'DOM.getOuterHTML');
59
+ const outerHTML = htmlResponse.outerHTML;
60
+ console.error(`[PERF] DOM.getOuterHTML: ${Date.now() - htmlStart}ms (${outerHTML.length} chars)`);
56
61
  // Get page info
57
62
  console.error('Getting page info...');
58
- const frameTree = await captureWithTimeout(cdp.send('Page.getFrameTree'), 'Page.getFrameTree');
59
- const frame = frameTree.frameTree.frame;
60
- console.error(`Got page info (url: ${frame.url})`);
63
+ const frameStart = Date.now();
64
+ const frameTreeResponse = await captureWithTimeout(cdp.send('Page.getFrameTree'), 'Page.getFrameTree');
65
+ const frame = frameTreeResponse.frameTree.frame;
66
+ console.error(`[PERF] Page.getFrameTree: ${Date.now() - frameStart}ms (url: ${frame.url})`);
61
67
  // Get real document title using Runtime.evaluate
62
68
  console.error('Getting document title...');
63
69
  let title = 'Untitled';
64
70
  try {
71
+ const titleStart = Date.now();
65
72
  const titleResult = await captureWithTimeout(cdp.send('Runtime.evaluate', {
66
73
  expression: 'document.title',
67
- returnByValue: true
74
+ returnByValue: true,
68
75
  }), 'Runtime.evaluate (document.title)');
69
- if (titleResult.result && titleResult.result.value) {
76
+ if (titleResult.result.value !== undefined && typeof titleResult.result.value === 'string') {
70
77
  title = titleResult.result.value;
71
78
  }
79
+ console.error(`[PERF] Runtime.evaluate (title): ${Date.now() - titleStart}ms`);
72
80
  }
73
81
  catch (titleError) {
74
82
  console.error('Failed to get document title, using fallback:', titleError);
75
83
  }
76
84
  console.error(`Got document title: ${title}`);
85
+ const url = frame.url;
86
+ const totalDuration = Date.now() - domCaptureStart;
87
+ console.error(`[PERF] Total DOM capture: ${totalDuration}ms`);
77
88
  return {
78
- url: frame.url,
89
+ url,
79
90
  title,
80
- outerHTML
91
+ outerHTML,
81
92
  };
82
93
  }
83
94
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/collectors/dom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/collectors/dom.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
- import { CDPConnection } from '../connection/cdp.js';
2
- import { NetworkRequest, CleanupFunction } from '../types.js';
1
+ import type { CDPConnection } from '../connection/cdp.js';
2
+ import type { NetworkRequest, CleanupFunction } from '../types.js';
3
+ export interface NetworkCollectionOptions {
4
+ includeAll?: boolean;
5
+ fetchAllBodies?: boolean;
6
+ fetchBodiesInclude?: string[];
7
+ fetchBodiesExclude?: string[];
8
+ networkInclude?: string[];
9
+ networkExclude?: string[];
10
+ maxBodySize?: number;
11
+ }
3
12
  /**
4
13
  * Start collecting network requests via CDP Network domain.
5
14
  *
@@ -8,12 +17,17 @@ import { NetworkRequest, CleanupFunction } from '../types.js';
8
17
  *
9
18
  * @param cdp - CDP connection instance
10
19
  * @param requests - Array to populate with completed network requests
20
+ * @param options - Collection options
11
21
  * @returns Cleanup function to remove event handlers and clear state
12
22
  *
13
23
  * @remarks
24
+ * - Chrome buffer limits: 50MB total, 10MB per resource, 1MB POST data (with fallback)
14
25
  * - Stale requests (incomplete after 60s) are removed from tracking but NOT added to output
15
26
  * - Request limit of 10,000 prevents memory issues in long-running sessions
16
- * - Response bodies are only fetched for JSON/JavaScript/text MIME types
27
+ * - Response bodies are automatically skipped for images, fonts, CSS, and source maps (see DEFAULT_SKIP_BODY_PATTERNS)
28
+ * - Response bodies larger than 5MB are skipped with a placeholder message
29
+ * - By default, common tracking/analytics domains are filtered out (use includeAll to disable)
30
+ * - Pattern precedence: include patterns always trump exclude patterns
17
31
  */
18
- export declare function startNetworkCollection(cdp: CDPConnection, requests: NetworkRequest[]): Promise<CleanupFunction>;
32
+ export declare function startNetworkCollection(cdp: CDPConnection, requests: NetworkRequest[], options?: NetworkCollectionOptions): Promise<CleanupFunction>;
19
33
  //# sourceMappingURL=network.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/collectors/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,eAAe,EAKhB,MAAM,aAAa,CAAC;AAKrB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,eAAe,CAAC,CAwG1B"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/collectors/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAMhB,MAAM,SAAS,CAAC;AAIjB,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CAwN1B"}
@@ -1,5 +1,6 @@
1
- const MAX_REQUESTS = 10000; // Prevent memory issues
2
- const STALE_REQUEST_TIMEOUT = 60000; // 60 seconds
1
+ import { MAX_NETWORK_REQUESTS, STALE_REQUEST_TIMEOUT, STALE_REQUEST_CLEANUP_INTERVAL, MAX_RESPONSE_SIZE, CHROME_NETWORK_BUFFER_TOTAL, CHROME_NETWORK_BUFFER_PER_RESOURCE, CHROME_POST_DATA_LIMIT, } from '../constants.js';
2
+ import { CDPHandlerRegistry } from '../utils/cdpHandlers.js';
3
+ import { shouldExcludeDomain, shouldExcludeUrl, shouldFetchBody } from '../utils/filters.js';
3
4
  /**
4
5
  * Start collecting network requests via CDP Network domain.
5
6
  *
@@ -8,18 +9,40 @@ const STALE_REQUEST_TIMEOUT = 60000; // 60 seconds
8
9
  *
9
10
  * @param cdp - CDP connection instance
10
11
  * @param requests - Array to populate with completed network requests
12
+ * @param options - Collection options
11
13
  * @returns Cleanup function to remove event handlers and clear state
12
14
  *
13
15
  * @remarks
16
+ * - Chrome buffer limits: 50MB total, 10MB per resource, 1MB POST data (with fallback)
14
17
  * - Stale requests (incomplete after 60s) are removed from tracking but NOT added to output
15
18
  * - Request limit of 10,000 prevents memory issues in long-running sessions
16
- * - Response bodies are only fetched for JSON/JavaScript/text MIME types
19
+ * - Response bodies are automatically skipped for images, fonts, CSS, and source maps (see DEFAULT_SKIP_BODY_PATTERNS)
20
+ * - Response bodies larger than 5MB are skipped with a placeholder message
21
+ * - By default, common tracking/analytics domains are filtered out (use includeAll to disable)
22
+ * - Pattern precedence: include patterns always trump exclude patterns
17
23
  */
18
- export async function startNetworkCollection(cdp, requests) {
24
+ export async function startNetworkCollection(cdp, requests, options = {}) {
25
+ const { includeAll = false, fetchAllBodies = false, fetchBodiesInclude = [], fetchBodiesExclude = [], networkInclude = [], networkExclude = [], maxBodySize = MAX_RESPONSE_SIZE, } = options;
19
26
  const requestMap = new Map();
20
- const handlers = [];
21
- // Enable network tracking
22
- await cdp.send('Network.enable');
27
+ const registry = new CDPHandlerRegistry();
28
+ // Counters for PERF logging
29
+ let bodiesFetched = 0;
30
+ let bodiesSkipped = 0;
31
+ // Enable network tracking with buffer limits (if supported)
32
+ // These parameters are optional and experimental, but widely supported in Chrome 58+
33
+ // See docs/chrome-cdp-compatibility.md for details
34
+ try {
35
+ await cdp.send('Network.enable', {
36
+ maxTotalBufferSize: CHROME_NETWORK_BUFFER_TOTAL,
37
+ maxResourceBufferSize: CHROME_NETWORK_BUFFER_PER_RESOURCE,
38
+ maxPostDataSize: CHROME_POST_DATA_LIMIT,
39
+ });
40
+ }
41
+ catch {
42
+ // Fallback to basic Network.enable if buffer parameters not supported
43
+ console.error('Network buffer limits not supported, using default settings');
44
+ await cdp.send('Network.enable');
45
+ }
23
46
  // Periodic cleanup of stale requests (see JSDoc @remarks for behavior)
24
47
  const cleanupInterval = setInterval(() => {
25
48
  const now = Date.now();
@@ -31,13 +54,13 @@ export async function startNetworkCollection(cdp, requests) {
31
54
  });
32
55
  if (staleRequests.length > 0) {
33
56
  console.error(`Cleaning up ${staleRequests.length} stale network requests`);
34
- staleRequests.forEach(requestId => requestMap.delete(requestId));
57
+ staleRequests.forEach((requestId) => requestMap.delete(requestId));
35
58
  }
36
- }, 30000); // Check every 30 seconds
59
+ }, STALE_REQUEST_CLEANUP_INTERVAL);
37
60
  // Listen for requests
38
- const requestWillBeSentId = cdp.on('Network.requestWillBeSent', (params) => {
39
- if (requestMap.size >= MAX_REQUESTS) {
40
- console.error(`Warning: Network request limit reached (${MAX_REQUESTS}), dropping new requests`);
61
+ registry.register(cdp, 'Network.requestWillBeSent', (params) => {
62
+ if (requestMap.size >= MAX_NETWORK_REQUESTS) {
63
+ console.error(`Warning: Network request limit reached (${MAX_NETWORK_REQUESTS}), dropping new requests`);
41
64
  return;
42
65
  }
43
66
  const request = {
@@ -46,16 +69,15 @@ export async function startNetworkCollection(cdp, requests) {
46
69
  method: params.request.method,
47
70
  timestamp: params.timestamp,
48
71
  requestHeaders: params.request.headers,
49
- requestBody: params.request.postData
72
+ requestBody: params.request.postData,
50
73
  };
51
74
  requestMap.set(params.requestId, {
52
75
  request,
53
- timestamp: Date.now()
76
+ timestamp: Date.now(),
54
77
  });
55
78
  });
56
- handlers.push({ event: 'Network.requestWillBeSent', id: requestWillBeSentId });
57
79
  // Listen for responses
58
- const responseReceivedId = cdp.on('Network.responseReceived', (params) => {
80
+ registry.register(cdp, 'Network.responseReceived', (params) => {
59
81
  const entry = requestMap.get(params.requestId);
60
82
  if (entry) {
61
83
  entry.request.status = params.response.status;
@@ -63,50 +85,105 @@ export async function startNetworkCollection(cdp, requests) {
63
85
  entry.request.responseHeaders = params.response.headers;
64
86
  }
65
87
  });
66
- handlers.push({ event: 'Network.responseReceived', id: responseReceivedId });
67
88
  // Listen for finished requests
68
- const loadingFinishedId = cdp.on('Network.loadingFinished', async (params) => {
89
+ registry.register(cdp, 'Network.loadingFinished', (params) => {
69
90
  const entry = requestMap.get(params.requestId);
70
- if (entry && requests.length < MAX_REQUESTS) {
91
+ if (entry && requests.length < MAX_NETWORK_REQUESTS) {
71
92
  const request = entry.request;
72
- // Try to get response body for API calls
73
- if (request.mimeType?.includes('json') || request.mimeType?.includes('javascript') || request.mimeType?.includes('text')) {
74
- try {
75
- const { body } = await cdp.send('Network.getResponseBody', { requestId: params.requestId });
76
- request.responseBody = body;
93
+ // Apply domain filtering
94
+ if (shouldExcludeDomain(request.url, includeAll)) {
95
+ requestMap.delete(params.requestId);
96
+ return;
97
+ }
98
+ // Apply URL pattern filtering
99
+ if (shouldExcludeUrl(request.url, {
100
+ includePatterns: networkInclude,
101
+ excludePatterns: networkExclude,
102
+ })) {
103
+ requestMap.delete(params.requestId);
104
+ return;
105
+ }
106
+ // Determine if we should fetch the response body
107
+ const isSizeAcceptable = params.encodedDataLength <= maxBodySize;
108
+ const isTextResponse = (request.mimeType?.includes('json') ?? false) ||
109
+ (request.mimeType?.includes('javascript') ?? false) ||
110
+ (request.mimeType?.includes('text') ?? false) ||
111
+ (request.mimeType?.includes('html') ?? false);
112
+ if (isTextResponse && isSizeAcceptable) {
113
+ // Check if we should fetch body based on patterns
114
+ const shouldFetch = shouldFetchBody(request.url, request.mimeType, {
115
+ fetchAllBodies,
116
+ includePatterns: fetchBodiesInclude,
117
+ excludePatterns: fetchBodiesExclude,
118
+ });
119
+ if (shouldFetch) {
120
+ bodiesFetched++;
121
+ // Fetch response body asynchronously
122
+ void cdp
123
+ .send('Network.getResponseBody', { requestId: params.requestId })
124
+ .then((response) => {
125
+ const typedResponse = response;
126
+ request.responseBody = typedResponse.body;
127
+ })
128
+ .catch(() => {
129
+ // Response body not available (e.g., 204 No Content, redirects, etc.)
130
+ });
77
131
  }
78
- catch (error) {
79
- // Response body not available (e.g., 204 No Content, redirects, etc.)
132
+ else {
133
+ bodiesSkipped++;
134
+ request.responseBody = '[SKIPPED: Auto-optimization (see DEFAULT_SKIP_BODY_PATTERNS)]';
80
135
  }
81
136
  }
137
+ else if (isTextResponse && !isSizeAcceptable) {
138
+ bodiesSkipped++;
139
+ // Mark large responses as skipped
140
+ request.responseBody = `[SKIPPED: Response too large (${(params.encodedDataLength / 1024 / 1024).toFixed(2)}MB > ${maxBodySize / 1024 / 1024}MB)]`;
141
+ }
82
142
  requests.push(request);
83
143
  requestMap.delete(params.requestId);
84
144
  }
85
- else if (requests.length >= MAX_REQUESTS) {
86
- console.error(`Warning: Network request limit reached (${MAX_REQUESTS})`);
145
+ else if (requests.length >= MAX_NETWORK_REQUESTS) {
146
+ console.error(`Warning: Network request limit reached (${MAX_NETWORK_REQUESTS})`);
87
147
  requestMap.delete(params.requestId);
88
148
  }
89
149
  });
90
- handlers.push({ event: 'Network.loadingFinished', id: loadingFinishedId });
91
150
  // Listen for failed requests
92
- const loadingFailedId = cdp.on('Network.loadingFailed', (params) => {
151
+ registry.register(cdp, 'Network.loadingFailed', (params) => {
93
152
  const entry = requestMap.get(params.requestId);
94
- if (entry && requests.length < MAX_REQUESTS) {
153
+ if (entry && requests.length < MAX_NETWORK_REQUESTS) {
154
+ // Apply domain filtering
155
+ if (shouldExcludeDomain(entry.request.url, includeAll)) {
156
+ requestMap.delete(params.requestId);
157
+ return;
158
+ }
159
+ // Apply URL pattern filtering
160
+ if (shouldExcludeUrl(entry.request.url, {
161
+ includePatterns: networkInclude,
162
+ excludePatterns: networkExclude,
163
+ })) {
164
+ requestMap.delete(params.requestId);
165
+ return;
166
+ }
95
167
  entry.request.status = 0; // Indicate failure
96
168
  requests.push(entry.request);
97
169
  requestMap.delete(params.requestId);
98
170
  }
99
- else if (requests.length >= MAX_REQUESTS) {
171
+ else if (requests.length >= MAX_NETWORK_REQUESTS) {
100
172
  requestMap.delete(params.requestId);
101
173
  }
102
174
  });
103
- handlers.push({ event: 'Network.loadingFailed', id: loadingFailedId });
104
175
  // Return cleanup function
105
176
  return () => {
177
+ // Log PERF metrics
178
+ const totalBodyDecisions = bodiesFetched + bodiesSkipped;
179
+ if (totalBodyDecisions > 0) {
180
+ const percentageSkipped = ((bodiesSkipped / totalBodyDecisions) * 100).toFixed(1);
181
+ console.error(`[PERF] Network bodies: ${bodiesFetched} fetched, ${bodiesSkipped} skipped (${percentageSkipped}% reduction)`);
182
+ }
106
183
  // Clear interval
107
184
  clearInterval(cleanupInterval);
108
185
  // Remove event handlers
109
- handlers.forEach(({ event, id }) => cdp.off(event, id));
186
+ registry.cleanup(cdp);
110
187
  // Clear request map
111
188
  requestMap.clear();
112
189
  };
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/collectors/network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/collectors/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CDPConnection contract tests
3
+ *
4
+ * Tests the public API contracts of CDPConnection WITHOUT testing implementation details.
5
+ * Uses FakeWebSocket to mock the WebSocket boundary while keeping all CDP logic real.
6
+ *
7
+ * Coverage:
8
+ * 1. Message correlation - Request/response pairing with IDs
9
+ * 2. Connection lifecycle - Connect, close, error handling
10
+ * 3. Timeouts - Connection timeout (10s), command timeout (30s)
11
+ * 4. Keepalive - Ping/pong lifecycle, missed pongs detection
12
+ * 5. Event subscription - on/off/removeAllListeners
13
+ * 6. Edge cases - Close during send, stale handlers, state transitions
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=cdp.contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp.contract.test.d.ts","sourceRoot":"","sources":["../../../src/connection/__tests__/cdp.contract.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG"}