browser-debugger-cli 0.3.0 → 0.5.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 (484) hide show
  1. package/README.md +137 -126
  2. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts +8 -0
  3. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts.map +1 -0
  4. package/dist/__tests__/smoke/error-handling.smoke.test.js +106 -0
  5. package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -0
  6. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts +8 -0
  7. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts.map +1 -0
  8. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +109 -0
  9. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -0
  10. package/dist/__testutils__/commandRunner.d.ts +45 -0
  11. package/dist/__testutils__/commandRunner.d.ts.map +1 -0
  12. package/dist/__testutils__/commandRunner.js +108 -0
  13. package/dist/__testutils__/commandRunner.js.map +1 -0
  14. package/dist/__testutils__/daemonHelpers.d.ts +81 -0
  15. package/dist/__testutils__/daemonHelpers.d.ts.map +1 -0
  16. package/dist/__testutils__/daemonHelpers.js +206 -0
  17. package/dist/__testutils__/daemonHelpers.js.map +1 -0
  18. package/dist/__testutils__/index.d.ts +1 -0
  19. package/dist/__testutils__/index.d.ts.map +1 -1
  20. package/dist/__testutils__/index.js +1 -0
  21. package/dist/__testutils__/index.js.map +1 -1
  22. package/dist/__testutils__/testCleanup.d.ts +45 -0
  23. package/dist/__testutils__/testCleanup.d.ts.map +1 -0
  24. package/dist/__testutils__/testCleanup.js +87 -0
  25. package/dist/__testutils__/testCleanup.js.map +1 -0
  26. package/dist/__testutils__/testHome.d.ts +26 -0
  27. package/dist/__testutils__/testHome.d.ts.map +1 -0
  28. package/dist/__testutils__/testHome.js +57 -0
  29. package/dist/__testutils__/testHome.js.map +1 -0
  30. package/dist/__testutils__/testProcess.d.ts.map +1 -1
  31. package/dist/__testutils__/testProcess.js +11 -3
  32. package/dist/__testutils__/testProcess.js.map +1 -1
  33. package/dist/cli/commands/__tests__/start.unit.test.d.ts +2 -0
  34. package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +1 -0
  35. package/dist/cli/commands/__tests__/start.unit.test.js +131 -0
  36. package/dist/cli/commands/__tests__/start.unit.test.js.map +1 -0
  37. package/dist/cli/commands/cleanup.d.ts +1 -0
  38. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  39. package/dist/cli/commands/cleanup.js +80 -61
  40. package/dist/cli/commands/cleanup.js.map +1 -1
  41. package/dist/cli/commands/details.d.ts +2 -1
  42. package/dist/cli/commands/details.d.ts.map +1 -1
  43. package/dist/cli/commands/details.js +104 -52
  44. package/dist/cli/commands/details.js.map +1 -1
  45. package/dist/cli/commands/peek.d.ts +2 -1
  46. package/dist/cli/commands/peek.d.ts.map +1 -1
  47. package/dist/cli/commands/peek.js +22 -67
  48. package/dist/cli/commands/peek.js.map +1 -1
  49. package/dist/cli/commands/query.d.ts +9 -0
  50. package/dist/cli/commands/query.d.ts.map +1 -0
  51. package/dist/cli/commands/query.js +125 -0
  52. package/dist/cli/commands/query.js.map +1 -0
  53. package/dist/cli/commands/start.d.ts +74 -0
  54. package/dist/cli/commands/start.d.ts.map +1 -1
  55. package/dist/cli/commands/start.js +147 -38
  56. package/dist/cli/commands/start.js.map +1 -1
  57. package/dist/cli/commands/status.d.ts.map +1 -1
  58. package/dist/cli/commands/status.js +37 -49
  59. package/dist/cli/commands/status.js.map +1 -1
  60. package/dist/cli/commands/stop.d.ts +1 -0
  61. package/dist/cli/commands/stop.d.ts.map +1 -1
  62. package/dist/cli/commands/stop.js +106 -120
  63. package/dist/cli/commands/stop.js.map +1 -1
  64. package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
  65. package/dist/cli/formatters/previewFormatter.d.ts +7 -7
  66. package/dist/cli/formatters/previewFormatter.d.ts.map +1 -1
  67. package/dist/cli/formatters/previewFormatter.js +5 -10
  68. package/dist/cli/formatters/previewFormatter.js.map +1 -1
  69. package/dist/cli/formatters/statusFormatter.d.ts +13 -10
  70. package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
  71. package/dist/cli/formatters/statusFormatter.js +26 -53
  72. package/dist/cli/formatters/statusFormatter.js.map +1 -1
  73. package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
  74. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
  75. package/dist/cli/handlers/ChromeBootstrap.js +50 -0
  76. package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
  77. package/dist/cli/handlers/OutputBuilder.d.ts +2 -3
  78. package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -1
  79. package/dist/cli/handlers/OutputBuilder.js +2 -4
  80. package/dist/cli/handlers/OutputBuilder.js.map +1 -1
  81. package/dist/cli/handlers/OutputWriter.d.ts +15 -0
  82. package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
  83. package/dist/cli/handlers/OutputWriter.js +34 -0
  84. package/dist/cli/handlers/OutputWriter.js.map +1 -0
  85. package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
  86. package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
  87. package/dist/cli/handlers/PreviewWriter.js +118 -0
  88. package/dist/cli/handlers/PreviewWriter.js.map +1 -0
  89. package/dist/cli/handlers/SessionLock.d.ts +16 -0
  90. package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
  91. package/dist/cli/handlers/SessionLock.js +35 -0
  92. package/dist/cli/handlers/SessionLock.js.map +1 -0
  93. package/dist/cli/handlers/SessionLoop.d.ts +19 -0
  94. package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
  95. package/dist/cli/handlers/SessionLoop.js +47 -0
  96. package/dist/cli/handlers/SessionLoop.js.map +1 -0
  97. package/dist/cli/handlers/ShutdownController.d.ts +41 -0
  98. package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
  99. package/dist/cli/handlers/ShutdownController.js +94 -0
  100. package/dist/cli/handlers/ShutdownController.js.map +1 -0
  101. package/dist/cli/handlers/SignalHandler.d.ts +35 -0
  102. package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
  103. package/dist/cli/handlers/SignalHandler.js +81 -0
  104. package/dist/cli/handlers/SignalHandler.js.map +1 -0
  105. package/dist/cli/handlers/TargetSetup.d.ts +42 -0
  106. package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
  107. package/dist/cli/handlers/TargetSetup.js +87 -0
  108. package/dist/cli/handlers/TargetSetup.js.map +1 -0
  109. package/dist/cli/handlers/sessionController.d.ts +41 -0
  110. package/dist/cli/handlers/sessionController.d.ts.map +1 -1
  111. package/dist/cli/handlers/sessionController.js +266 -5
  112. package/dist/cli/handlers/sessionController.js.map +1 -1
  113. package/dist/cli/registry.d.ts +2 -2
  114. package/dist/cli/registry.d.ts.map +1 -1
  115. package/dist/cli/registry.js +12 -37
  116. package/dist/cli/registry.js.map +1 -1
  117. package/dist/collectors/console.d.ts +1 -1
  118. package/dist/collectors/console.js +2 -2
  119. package/dist/collectors/console.js.map +1 -1
  120. package/dist/collectors/dom.d.ts +1 -1
  121. package/dist/collectors/network.d.ts +1 -2
  122. package/dist/collectors/network.d.ts.map +1 -1
  123. package/dist/collectors/network.js +3 -3
  124. package/dist/collectors/network.js.map +1 -1
  125. package/dist/commands/cdp.js +1 -1
  126. package/dist/commands/cdp.js.map +1 -1
  127. package/dist/commands/cleanup.d.ts.map +1 -1
  128. package/dist/commands/cleanup.js +12 -15
  129. package/dist/commands/cleanup.js.map +1 -1
  130. package/dist/commands/dom.d.ts.map +1 -1
  131. package/dist/commands/dom.js +13 -19
  132. package/dist/commands/dom.js.map +1 -1
  133. package/dist/commands/domEvalHelpers.d.ts +1 -1
  134. package/dist/commands/domEvalHelpers.d.ts.map +1 -1
  135. package/dist/commands/domEvalHelpers.js +56 -7
  136. package/dist/commands/domEvalHelpers.js.map +1 -1
  137. package/dist/commands/domOptionsBuilder.d.ts +32 -0
  138. package/dist/commands/domOptionsBuilder.d.ts.map +1 -1
  139. package/dist/commands/domOptionsBuilder.js +35 -0
  140. package/dist/commands/domOptionsBuilder.js.map +1 -1
  141. package/dist/commands/machineReadableHelp.d.ts +98 -0
  142. package/dist/commands/machineReadableHelp.d.ts.map +1 -0
  143. package/dist/commands/machineReadableHelp.js +137 -0
  144. package/dist/commands/machineReadableHelp.js.map +1 -0
  145. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  146. package/dist/commands/shared/CommandRunner.js +2 -3
  147. package/dist/commands/shared/CommandRunner.js.map +1 -1
  148. package/dist/commands/shared/OutputBuilder.js +1 -1
  149. package/dist/commands/shared/OutputBuilder.js.map +1 -1
  150. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  151. package/dist/commands/shared/commonOptions.js +9 -3
  152. package/dist/commands/shared/commonOptions.js.map +1 -1
  153. package/dist/commands/shared/daemonSessionController.d.ts +2 -0
  154. package/dist/commands/shared/daemonSessionController.d.ts.map +1 -1
  155. package/dist/commands/shared/daemonSessionController.js +13 -16
  156. package/dist/commands/shared/daemonSessionController.js.map +1 -1
  157. package/dist/commands/shared/sessionController.js +1 -1
  158. package/dist/commands/shared/sessionController.js.map +1 -1
  159. package/dist/commands/start.d.ts.map +1 -1
  160. package/dist/commands/start.js +16 -1
  161. package/dist/commands/start.js.map +1 -1
  162. package/dist/commands/status.d.ts.map +1 -1
  163. package/dist/commands/status.js +72 -55
  164. package/dist/commands/status.js.map +1 -1
  165. package/dist/commands/stop.d.ts.map +1 -1
  166. package/dist/commands/stop.js +11 -25
  167. package/dist/commands/stop.js.map +1 -1
  168. package/dist/commands/tail.d.ts +11 -0
  169. package/dist/commands/tail.d.ts.map +1 -0
  170. package/dist/commands/tail.js +114 -0
  171. package/dist/commands/tail.js.map +1 -0
  172. package/dist/commands.d.ts.map +1 -1
  173. package/dist/commands.js +2 -0
  174. package/dist/commands.js.map +1 -1
  175. package/dist/connection/cdp.d.ts +46 -2
  176. package/dist/connection/cdp.d.ts.map +1 -1
  177. package/dist/connection/cdp.js +71 -5
  178. package/dist/connection/cdp.js.map +1 -1
  179. package/dist/connection/diagnostics.d.ts +16 -0
  180. package/dist/connection/diagnostics.d.ts.map +1 -0
  181. package/dist/connection/diagnostics.js +37 -0
  182. package/dist/connection/diagnostics.js.map +1 -0
  183. package/dist/connection/errors.d.ts +74 -0
  184. package/dist/connection/errors.d.ts.map +1 -0
  185. package/dist/connection/errors.js +83 -0
  186. package/dist/connection/errors.js.map +1 -0
  187. package/dist/connection/handlers.d.ts +31 -0
  188. package/dist/connection/handlers.d.ts.map +1 -0
  189. package/dist/connection/handlers.js +38 -0
  190. package/dist/connection/handlers.js.map +1 -0
  191. package/dist/connection/launcher.d.ts +3 -20
  192. package/dist/connection/launcher.d.ts.map +1 -1
  193. package/dist/connection/launcher.js +130 -32
  194. package/dist/connection/launcher.js.map +1 -1
  195. package/dist/connection/pageReadiness.d.ts +46 -0
  196. package/dist/connection/pageReadiness.d.ts.map +1 -0
  197. package/dist/connection/pageReadiness.js +270 -0
  198. package/dist/connection/pageReadiness.js.map +1 -0
  199. package/dist/connection/tabs.d.ts +52 -0
  200. package/dist/connection/tabs.d.ts.map +1 -0
  201. package/dist/connection/tabs.js +227 -0
  202. package/dist/connection/tabs.js.map +1 -0
  203. package/dist/constants.d.ts +20 -40
  204. package/dist/constants.d.ts.map +1 -1
  205. package/dist/constants.js +26 -40
  206. package/dist/constants.js.map +1 -1
  207. package/dist/daemon/ipcServer.d.ts +5 -7
  208. package/dist/daemon/ipcServer.d.ts.map +1 -1
  209. package/dist/daemon/ipcServer.js +178 -143
  210. package/dist/daemon/ipcServer.js.map +1 -1
  211. package/dist/daemon/launcher.js +1 -1
  212. package/dist/daemon/launcher.js.map +1 -1
  213. package/dist/daemon/server/SocketServer.d.ts +22 -0
  214. package/dist/daemon/server/SocketServer.d.ts.map +1 -0
  215. package/dist/daemon/server/SocketServer.js +67 -0
  216. package/dist/daemon/server/SocketServer.js.map +1 -0
  217. package/dist/daemon/server/WorkerManager.d.ts +36 -0
  218. package/dist/daemon/server/WorkerManager.d.ts.map +1 -0
  219. package/dist/daemon/server/WorkerManager.js +98 -0
  220. package/dist/daemon/server/WorkerManager.js.map +1 -0
  221. package/dist/daemon/startSession.d.ts +2 -0
  222. package/dist/daemon/startSession.d.ts.map +1 -1
  223. package/dist/daemon/startSession.js +4 -2
  224. package/dist/daemon/startSession.js.map +1 -1
  225. package/dist/daemon/worker/TelemetryStore.d.ts +18 -0
  226. package/dist/daemon/worker/TelemetryStore.d.ts.map +1 -0
  227. package/dist/daemon/worker/TelemetryStore.js +49 -0
  228. package/dist/daemon/worker/TelemetryStore.js.map +1 -0
  229. package/dist/daemon/worker/collectors.d.ts +8 -0
  230. package/dist/daemon/worker/collectors.d.ts.map +1 -0
  231. package/dist/daemon/worker/collectors.js +19 -0
  232. package/dist/daemon/worker/collectors.js.map +1 -0
  233. package/dist/daemon/worker/commandRegistry.d.ts +10 -0
  234. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -0
  235. package/dist/daemon/worker/commandRegistry.js +289 -0
  236. package/dist/daemon/worker/commandRegistry.js.map +1 -0
  237. package/dist/daemon/worker/plugins.d.ts +21 -0
  238. package/dist/daemon/worker/plugins.d.ts.map +1 -0
  239. package/dist/daemon/worker/plugins.js +71 -0
  240. package/dist/daemon/worker/plugins.js.map +1 -0
  241. package/dist/daemon/worker/types.d.ts +13 -0
  242. package/dist/daemon/worker/types.d.ts.map +1 -0
  243. package/dist/daemon/worker/types.js +2 -0
  244. package/dist/daemon/worker/types.js.map +1 -0
  245. package/dist/daemon/worker.js +206 -529
  246. package/dist/daemon/worker.js.map +1 -1
  247. package/dist/help/machineReadableHelp.d.ts +100 -0
  248. package/dist/help/machineReadableHelp.d.ts.map +1 -0
  249. package/dist/help/machineReadableHelp.js +139 -0
  250. package/dist/help/machineReadableHelp.js.map +1 -0
  251. package/dist/index.js +18 -9
  252. package/dist/index.js.map +1 -1
  253. package/dist/ipc/__tests__/client.contract.test.js +2 -2
  254. package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
  255. package/dist/ipc/client.d.ts +3 -1
  256. package/dist/ipc/client.d.ts.map +1 -1
  257. package/dist/ipc/client.js +27 -14
  258. package/dist/ipc/client.js.map +1 -1
  259. package/dist/ipc/commands.d.ts +1 -0
  260. package/dist/ipc/commands.d.ts.map +1 -1
  261. package/dist/ipc/commands.js.map +1 -1
  262. package/dist/ipc/types.d.ts +2 -0
  263. package/dist/ipc/types.d.ts.map +1 -1
  264. package/dist/session/BdgSession.d.ts +91 -0
  265. package/dist/session/BdgSession.d.ts.map +1 -0
  266. package/dist/session/BdgSession.js +230 -0
  267. package/dist/session/BdgSession.js.map +1 -0
  268. package/dist/session/cleanup.d.ts.map +1 -1
  269. package/dist/session/cleanup.js +67 -65
  270. package/dist/session/cleanup.js.map +1 -1
  271. package/dist/session/fileOps.d.ts +25 -0
  272. package/dist/session/fileOps.d.ts.map +1 -0
  273. package/dist/session/fileOps.js +39 -0
  274. package/dist/session/fileOps.js.map +1 -0
  275. package/dist/session/metadata.js +2 -2
  276. package/dist/session/metadata.js.map +1 -1
  277. package/dist/session/paths.d.ts +2 -7
  278. package/dist/session/paths.d.ts.map +1 -1
  279. package/dist/session/paths.js +8 -8
  280. package/dist/session/paths.js.map +1 -1
  281. package/dist/session/queryCache.js +1 -1
  282. package/dist/session/queryCache.js.map +1 -1
  283. package/dist/telemetry/__tests__/filters.unit.test.d.ts +2 -0
  284. package/dist/telemetry/__tests__/filters.unit.test.d.ts.map +1 -0
  285. package/dist/telemetry/__tests__/filters.unit.test.js +239 -0
  286. package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -0
  287. package/dist/telemetry/console.d.ts +1 -1
  288. package/dist/telemetry/console.d.ts.map +1 -1
  289. package/dist/telemetry/console.js +5 -3
  290. package/dist/telemetry/console.js.map +1 -1
  291. package/dist/telemetry/dialogs.d.ts +27 -0
  292. package/dist/telemetry/dialogs.d.ts.map +1 -0
  293. package/dist/telemetry/dialogs.js +51 -0
  294. package/dist/telemetry/dialogs.js.map +1 -0
  295. package/dist/telemetry/filters.d.ts +148 -0
  296. package/dist/telemetry/filters.d.ts.map +1 -0
  297. package/dist/telemetry/filters.js +358 -0
  298. package/dist/telemetry/filters.js.map +1 -0
  299. package/dist/telemetry/navigation.d.ts +49 -0
  300. package/dist/telemetry/navigation.d.ts.map +1 -0
  301. package/dist/telemetry/navigation.js +69 -0
  302. package/dist/telemetry/navigation.js.map +1 -0
  303. package/dist/telemetry/network.d.ts +1 -0
  304. package/dist/telemetry/network.d.ts.map +1 -1
  305. package/dist/telemetry/network.js +23 -34
  306. package/dist/telemetry/network.js.map +1 -1
  307. package/dist/types.d.ts +2 -0
  308. package/dist/types.d.ts.map +1 -1
  309. package/dist/ui/errors/CommandError.d.ts +39 -0
  310. package/dist/ui/errors/CommandError.d.ts.map +1 -0
  311. package/dist/ui/errors/CommandError.js +48 -0
  312. package/dist/ui/errors/CommandError.js.map +1 -0
  313. package/dist/ui/errors/SystemErrors.d.ts +22 -0
  314. package/dist/ui/errors/SystemErrors.d.ts.map +1 -0
  315. package/dist/ui/errors/SystemErrors.js +23 -0
  316. package/dist/ui/errors/SystemErrors.js.map +1 -0
  317. package/dist/ui/errors/index.d.ts +9 -0
  318. package/dist/ui/errors/index.d.ts.map +1 -0
  319. package/dist/ui/errors/index.js +12 -0
  320. package/dist/ui/errors/index.js.map +1 -0
  321. package/dist/ui/errors/utils.d.ts +24 -0
  322. package/dist/ui/errors/utils.d.ts.map +1 -0
  323. package/dist/ui/errors/utils.js +28 -0
  324. package/dist/ui/errors/utils.js.map +1 -0
  325. package/dist/ui/formatters/status.d.ts.map +1 -1
  326. package/dist/ui/formatters/status.js +1 -1
  327. package/dist/ui/formatters/status.js.map +1 -1
  328. package/dist/ui/logging/index.d.ts +7 -0
  329. package/dist/ui/logging/index.d.ts.map +1 -0
  330. package/dist/ui/logging/index.js +7 -0
  331. package/dist/ui/logging/index.js.map +1 -0
  332. package/dist/ui/logging/logger.d.ts +98 -0
  333. package/dist/ui/logging/logger.d.ts.map +1 -0
  334. package/dist/ui/logging/logger.js +93 -0
  335. package/dist/ui/logging/logger.js.map +1 -0
  336. package/dist/ui/messages/chrome.d.ts +50 -1
  337. package/dist/ui/messages/chrome.d.ts.map +1 -1
  338. package/dist/ui/messages/chrome.js +77 -0
  339. package/dist/ui/messages/chrome.js.map +1 -1
  340. package/dist/ui/messages/deprecation.d.ts +30 -0
  341. package/dist/ui/messages/deprecation.d.ts.map +1 -0
  342. package/dist/ui/messages/deprecation.js +49 -0
  343. package/dist/ui/messages/deprecation.js.map +1 -0
  344. package/dist/ui/messages/preview.js +1 -1
  345. package/dist/ui/messages/preview.js.map +1 -1
  346. package/dist/ui/messages/session.d.ts.map +1 -1
  347. package/dist/ui/messages/session.js +21 -7
  348. package/dist/ui/messages/session.js.map +1 -1
  349. package/dist/utils/__tests__/session.contract.test.js +15 -1
  350. package/dist/utils/__tests__/session.contract.test.js.map +1 -1
  351. package/dist/utils/filters.d.ts +40 -0
  352. package/dist/utils/filters.d.ts.map +1 -1
  353. package/dist/utils/filters.js +54 -0
  354. package/dist/utils/filters.js.map +1 -1
  355. package/dist/utils/pageReadiness.js +24 -25
  356. package/dist/utils/pageReadiness.js.map +1 -1
  357. package/dist/utils/session.d.ts +200 -0
  358. package/dist/utils/session.d.ts.map +1 -0
  359. package/dist/utils/session.js +498 -0
  360. package/dist/utils/session.js.map +1 -0
  361. package/dist/utils/url.d.ts.map +1 -1
  362. package/dist/utils/url.js +10 -0
  363. package/dist/utils/url.js.map +1 -1
  364. package/dist/utils/validation.d.ts +12 -0
  365. package/dist/utils/validation.d.ts.map +1 -0
  366. package/dist/utils/validation.js +20 -0
  367. package/dist/utils/validation.js.map +1 -0
  368. package/package.json +2 -1
  369. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +0 -24
  370. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +0 -1
  371. package/dist/cli/commands/__tests__/cdp.contract.test.js +0 -467
  372. package/dist/cli/commands/__tests__/cdp.contract.test.js.map +0 -1
  373. package/dist/cli/commands/cdp.d.ts +0 -8
  374. package/dist/cli/commands/cdp.d.ts.map +0 -1
  375. package/dist/cli/commands/cdp.js +0 -45
  376. package/dist/cli/commands/cdp.js.map +0 -1
  377. package/dist/cli/commands/console.d.ts +0 -8
  378. package/dist/cli/commands/console.d.ts.map +0 -1
  379. package/dist/cli/commands/console.js +0 -97
  380. package/dist/cli/commands/console.js.map +0 -1
  381. package/dist/cli/commands/dom/helpers/domCache.d.ts +0 -36
  382. package/dist/cli/commands/dom/helpers/domCache.d.ts.map +0 -1
  383. package/dist/cli/commands/dom/helpers/domCache.js +0 -65
  384. package/dist/cli/commands/dom/helpers/domCache.js.map +0 -1
  385. package/dist/cli/commands/dom/helpers/domQuery.d.ts +0 -48
  386. package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +0 -1
  387. package/dist/cli/commands/dom/helpers/domQuery.js +0 -104
  388. package/dist/cli/commands/dom/helpers/domQuery.js.map +0 -1
  389. package/dist/cli/commands/dom/helpers/errorHandler.d.ts +0 -45
  390. package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +0 -1
  391. package/dist/cli/commands/dom/helpers/errorHandler.js +0 -71
  392. package/dist/cli/commands/dom/helpers/errorHandler.js.map +0 -1
  393. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +0 -52
  394. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +0 -1
  395. package/dist/cli/commands/dom/helpers/evalHelpers.js +0 -75
  396. package/dist/cli/commands/dom/helpers/evalHelpers.js.map +0 -1
  397. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +0 -35
  398. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +0 -1
  399. package/dist/cli/commands/dom/helpers/optionsBuilder.js +0 -51
  400. package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +0 -1
  401. package/dist/cli/commands/dom/helpers/selectorParser.d.ts +0 -20
  402. package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +0 -1
  403. package/dist/cli/commands/dom/helpers/selectorParser.js +0 -20
  404. package/dist/cli/commands/dom/helpers/selectorParser.js.map +0 -1
  405. package/dist/cli/commands/dom/index.d.ts +0 -8
  406. package/dist/cli/commands/dom/index.d.ts.map +0 -1
  407. package/dist/cli/commands/dom/index.js +0 -257
  408. package/dist/cli/commands/dom/index.js.map +0 -1
  409. package/dist/cli/commands/dom.d.ts +0 -8
  410. package/dist/cli/commands/dom.d.ts.map +0 -1
  411. package/dist/cli/commands/dom.js +0 -257
  412. package/dist/cli/commands/dom.js.map +0 -1
  413. package/dist/cli/commands/domErrorHandler.d.ts +0 -45
  414. package/dist/cli/commands/domErrorHandler.d.ts.map +0 -1
  415. package/dist/cli/commands/domErrorHandler.js +0 -71
  416. package/dist/cli/commands/domErrorHandler.js.map +0 -1
  417. package/dist/cli/commands/domEvalHelpers.d.ts +0 -52
  418. package/dist/cli/commands/domEvalHelpers.d.ts.map +0 -1
  419. package/dist/cli/commands/domEvalHelpers.js +0 -76
  420. package/dist/cli/commands/domEvalHelpers.js.map +0 -1
  421. package/dist/cli/commands/domOptionsBuilder.d.ts +0 -35
  422. package/dist/cli/commands/domOptionsBuilder.d.ts.map +0 -1
  423. package/dist/cli/commands/domOptionsBuilder.js +0 -51
  424. package/dist/cli/commands/domOptionsBuilder.js.map +0 -1
  425. package/dist/cli/commands/domSelectorParser.d.ts +0 -20
  426. package/dist/cli/commands/domSelectorParser.d.ts.map +0 -1
  427. package/dist/cli/commands/domSelectorParser.js +0 -20
  428. package/dist/cli/commands/domSelectorParser.js.map +0 -1
  429. package/dist/cli/commands/network.d.ts +0 -8
  430. package/dist/cli/commands/network.d.ts.map +0 -1
  431. package/dist/cli/commands/network.js +0 -43
  432. package/dist/cli/commands/network.js.map +0 -1
  433. package/dist/cli/handlers/CommandRunner.d.ts +0 -60
  434. package/dist/cli/handlers/CommandRunner.d.ts.map +0 -1
  435. package/dist/cli/handlers/CommandRunner.js +0 -81
  436. package/dist/cli/handlers/CommandRunner.js.map +0 -1
  437. package/dist/cli/handlers/commonOptions.d.ts +0 -54
  438. package/dist/cli/handlers/commonOptions.d.ts.map +0 -1
  439. package/dist/cli/handlers/commonOptions.js +0 -64
  440. package/dist/cli/handlers/commonOptions.js.map +0 -1
  441. package/dist/cli/handlers/daemonSessionController.d.ts +0 -23
  442. package/dist/cli/handlers/daemonSessionController.d.ts.map +0 -1
  443. package/dist/cli/handlers/daemonSessionController.js +0 -79
  444. package/dist/cli/handlers/daemonSessionController.js.map +0 -1
  445. package/dist/cli/handlers/landingPage.d.ts +0 -8
  446. package/dist/cli/handlers/landingPage.d.ts.map +0 -1
  447. package/dist/cli/handlers/landingPage.js +0 -8
  448. package/dist/cli/handlers/landingPage.js.map +0 -1
  449. package/dist/collectors/__tests__/network.contract.test.d.ts +0 -28
  450. package/dist/collectors/__tests__/network.contract.test.d.ts.map +0 -1
  451. package/dist/collectors/__tests__/network.contract.test.js +0 -540
  452. package/dist/collectors/__tests__/network.contract.test.js.map +0 -1
  453. package/dist/commandRegistry.d.ts +0 -11
  454. package/dist/commandRegistry.d.ts.map +0 -1
  455. package/dist/commandRegistry.js +0 -45
  456. package/dist/commandRegistry.js.map +0 -1
  457. package/dist/commands/domErrorHandler.d.ts +0 -45
  458. package/dist/commands/domErrorHandler.d.ts.map +0 -1
  459. package/dist/commands/domErrorHandler.js +0 -71
  460. package/dist/commands/domErrorHandler.js.map +0 -1
  461. package/dist/dom/cache.d.ts +0 -36
  462. package/dist/dom/cache.d.ts.map +0 -1
  463. package/dist/dom/cache.js +0 -65
  464. package/dist/dom/cache.js.map +0 -1
  465. package/dist/dom/index.d.ts +0 -9
  466. package/dist/dom/index.d.ts.map +0 -1
  467. package/dist/dom/index.js +0 -9
  468. package/dist/dom/index.js.map +0 -1
  469. package/dist/dom/query.d.ts +0 -48
  470. package/dist/dom/query.d.ts.map +0 -1
  471. package/dist/dom/query.js +0 -104
  472. package/dist/dom/query.js.map +0 -1
  473. package/dist/utils/formatters/network.d.ts +0 -23
  474. package/dist/utils/formatters/network.d.ts.map +0 -1
  475. package/dist/utils/formatters/network.js +0 -35
  476. package/dist/utils/formatters/network.js.map +0 -1
  477. package/dist/utils/ui.d.ts +0 -36
  478. package/dist/utils/ui.d.ts.map +0 -1
  479. package/dist/utils/ui.js +0 -47
  480. package/dist/utils/ui.js.map +0 -1
  481. package/dist/utils/url/safeParseUrl.d.ts +0 -63
  482. package/dist/utils/url/safeParseUrl.d.ts.map +0 -1
  483. package/dist/utils/url/safeParseUrl.js +0 -84
  484. package/dist/utils/url/safeParseUrl.js.map +0 -1
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Default filters for reducing noise in collected data
3
+ */
4
+ /**
5
+ * Decision object for whether to fetch a response body.
6
+ */
7
+ export interface BodyFetchDecision {
8
+ /** Whether the body should be fetched */
9
+ should: boolean;
10
+ /** Reason why the body was skipped (if should is false) */
11
+ reason?: string;
12
+ }
13
+ /**
14
+ * Domains to exclude by default (common tracking/analytics)
15
+ * These generate high volume but are rarely useful for debugging
16
+ */
17
+ export declare const DEFAULT_EXCLUDED_DOMAINS: string[];
18
+ /**
19
+ * Console message types to exclude by default (Redux/React DevTools noise)
20
+ */
21
+ export declare const DEFAULT_EXCLUDED_CONSOLE_TYPES: string[];
22
+ /**
23
+ * Console message patterns to exclude by default (dev server noise)
24
+ */
25
+ export declare const DEFAULT_EXCLUDED_CONSOLE_PATTERNS: string[];
26
+ /**
27
+ * File patterns to skip body fetching by default (assets unlikely to be useful for debugging)
28
+ * These reduce data volume significantly without losing critical debugging information.
29
+ */
30
+ export declare const DEFAULT_SKIP_BODY_PATTERNS: string[];
31
+ /**
32
+ * MIME types to skip body fetching by default
33
+ * This catches resources that may not have obvious file extensions (e.g., CSS with query params)
34
+ */
35
+ export declare const DEFAULT_SKIP_BODY_MIME_TYPES: string[];
36
+ /**
37
+ * Check if a URL should be excluded based on domain filtering.
38
+ *
39
+ * @param url - URL to check against exclusion list
40
+ * @param includeAll - If true, disables all filtering
41
+ * @returns True if the URL's domain matches an excluded domain
42
+ */
43
+ export declare function shouldExcludeDomain(url: string, includeAll?: boolean): boolean;
44
+ /**
45
+ * Check if a console message should be excluded based on type and pattern filtering
46
+ */
47
+ export declare function shouldExcludeConsoleMessage(text: string, type: string, includeAll?: boolean): boolean;
48
+ /**
49
+ * Simple wildcard pattern matcher.
50
+ * Supports only the * wildcard character.
51
+ *
52
+ * Examples:
53
+ * matchesWildcard("api.json", "*.json") → true
54
+ * matchesWildcard("api/users", "*api*") → true
55
+ * matchesWildcard("index.html", "*.js") → false
56
+ *
57
+ * @param str - The string to test
58
+ * @param pattern - The pattern with * wildcards
59
+ * @returns True if the string matches the pattern
60
+ */
61
+ export declare function matchesWildcard(str: string, pattern: string): boolean;
62
+ /**
63
+ * Check if a URL matches any pattern in a list.
64
+ *
65
+ * Matches against both bare hostname and hostname+pathname to support:
66
+ * - Bare hostname patterns: `api.example.com` matches all requests to that host
67
+ * - Hostname wildcard patterns: `*analytics*` matches "analytics.google.com/collect"
68
+ * - Path patterns: `*\/api\/*` matches "example.com/api/users"
69
+ * - Combined patterns: `api.example.com\/users` matches specific endpoint
70
+ *
71
+ * @param url - The URL to check
72
+ * @param patterns - Array of wildcard patterns
73
+ * @returns True if URL matches any pattern
74
+ */
75
+ /**
76
+ * Determine if a response body should be fetched based on URL, MIME type, and patterns.
77
+ *
78
+ * Pattern precedence (follows include-trumps-exclude rule):
79
+ * 1. If URL matches includePatterns → FETCH (even if it also matches excludePatterns)
80
+ * 2. If includePatterns specified but URL doesn't match → SKIP (whitelist mode)
81
+ * 3. If URL matches excludePatterns → SKIP
82
+ * 4. If fetchAllBodies flag is true → FETCH
83
+ * 5. If MIME type matches DEFAULT_SKIP_BODY_MIME_TYPES → SKIP
84
+ * 6. If URL matches DEFAULT_SKIP_BODY_PATTERNS → SKIP
85
+ * 7. Otherwise → FETCH (default behavior)
86
+ *
87
+ * @param url - The request URL
88
+ * @param mimeType - The response MIME type (for MIME-based skipping)
89
+ * @param options - Configuration options
90
+ * @returns True if the body should be fetched
91
+ */
92
+ export declare function shouldFetchBody(url: string, mimeType: string | undefined, options?: {
93
+ fetchAllBodies?: boolean;
94
+ includePatterns?: string[];
95
+ excludePatterns?: string[];
96
+ }): boolean;
97
+ /**
98
+ * Determine if a response body should be fetched with detailed reason.
99
+ *
100
+ * Combines all decision logic: MIME type, size limits, smart defaults, and fetch flags.
101
+ * Returns a decision object with reason string for logging/debugging.
102
+ *
103
+ * @param url - Request URL
104
+ * @param mimeType - Response MIME type
105
+ * @param encodedDataLength - Response size in bytes
106
+ * @param options - Configuration options
107
+ * @returns Decision object with should boolean and optional reason
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const decision = shouldFetchBodyWithReason(
112
+ * 'https://api.example.com/data',
113
+ * 'application/json',
114
+ * 1024,
115
+ * { maxBodySize: 5 * 1024 * 1024 }
116
+ * );
117
+ * if (!decision.should) {
118
+ * console.log(`Skipped: ${decision.reason}`);
119
+ * }
120
+ * ```
121
+ */
122
+ export declare function shouldFetchBodyWithReason(url: string, mimeType: string | undefined, encodedDataLength: number, options?: {
123
+ fetchAllBodies?: boolean;
124
+ includePatterns?: string[];
125
+ excludePatterns?: string[];
126
+ maxBodySize?: number;
127
+ }): BodyFetchDecision;
128
+ /**
129
+ * Determine if a network request should be excluded based on URL patterns.
130
+ *
131
+ * Pattern precedence (follows include-trumps-exclude rule):
132
+ * 1. If URL matches includePatterns → CAPTURE (even if it also matches excludePatterns)
133
+ * 2. If includePatterns specified but URL doesn't match → EXCLUDE (whitelist mode)
134
+ * 3. If URL matches excludePatterns → EXCLUDE
135
+ * 4. Otherwise → CAPTURE (default behavior)
136
+ *
137
+ * Note: This function is separate from domain filtering (shouldExcludeDomain).
138
+ * Both filters can be applied: domain filtering happens first, then URL pattern filtering.
139
+ *
140
+ * @param url - The request URL
141
+ * @param options - Configuration options
142
+ * @returns True if the request should be excluded
143
+ */
144
+ export declare function shouldExcludeUrl(url: string, options?: {
145
+ includePatterns?: string[];
146
+ excludePatterns?: string[];
147
+ }): boolean;
148
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/telemetry/filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,UA6CpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,UAAoD,CAAC;AAEhG;;GAEG;AACH,eAAO,MAAM,iCAAiC,UAS7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,UAuCtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,UAqBxC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO,CAOrF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,OAAe,GAC1B,OAAO,CAeT;AAoDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQrE;AAED;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GACL,OAAO,CA8CT;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,iBAAiB,CAmCnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GACL,OAAO,CAST"}
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Default filters for reducing noise in collected data
3
+ */
4
+ import { extractHostname, extractHostnameWithPath } from '../utils/url.js';
5
+ /**
6
+ * Domains to exclude by default (common tracking/analytics)
7
+ * These generate high volume but are rarely useful for debugging
8
+ */
9
+ export const DEFAULT_EXCLUDED_DOMAINS = [
10
+ // Google Analytics & Ads
11
+ 'analytics.google.com',
12
+ 'googletagmanager.com',
13
+ 'googleadservices.com',
14
+ 'doubleclick.net',
15
+ 'google-analytics.com',
16
+ // Microsoft/Bing
17
+ 'clarity.ms',
18
+ 'bat.bing.com',
19
+ // Social Media Tracking
20
+ 'facebook.com',
21
+ 'connect.facebook.net',
22
+ 'tiktok.com',
23
+ 'linkedin.com',
24
+ 'twitter.com',
25
+ 'snapchat.com',
26
+ // Product Analytics
27
+ 'mixpanel.com',
28
+ 'segment.com',
29
+ 'segment.io',
30
+ 'amplitude.com',
31
+ 'heap.io',
32
+ // Session Recording & Heatmaps
33
+ 'fullstory.com',
34
+ 'hotjar.com',
35
+ 'logrocket.com',
36
+ 'smartlook.com',
37
+ // Ad Networks & Attribution
38
+ 'exactag.com',
39
+ 'criteo.com',
40
+ 'adroll.com',
41
+ 'outbrain.com',
42
+ 'taboola.com',
43
+ // Other Analytics
44
+ 'confirmit.com',
45
+ 'newrelic.com',
46
+ 'datadoghq.com',
47
+ 'sentry.io',
48
+ ];
49
+ /**
50
+ * Console message types to exclude by default (Redux/React DevTools noise)
51
+ */
52
+ export const DEFAULT_EXCLUDED_CONSOLE_TYPES = ['startGroup', 'startGroupCollapsed', 'endGroup'];
53
+ /**
54
+ * Console message patterns to exclude by default (dev server noise)
55
+ */
56
+ export const DEFAULT_EXCLUDED_CONSOLE_PATTERNS = [
57
+ 'webpack-dev-server',
58
+ '[HMR]',
59
+ '[WDS]',
60
+ 'Download the React DevTools',
61
+ '@@redux', // Redux actions
62
+ '%c prev state', // Redux logger
63
+ '%c action', // Redux logger
64
+ '%c next state', // Redux logger
65
+ ];
66
+ /**
67
+ * File patterns to skip body fetching by default (assets unlikely to be useful for debugging)
68
+ * These reduce data volume significantly without losing critical debugging information.
69
+ */
70
+ export const DEFAULT_SKIP_BODY_PATTERNS = [
71
+ // Images
72
+ '*.png',
73
+ '*.jpg',
74
+ '*.jpeg',
75
+ '*.gif',
76
+ '*.svg',
77
+ '*.ico',
78
+ '*.webp',
79
+ '*.bmp',
80
+ '*.tiff',
81
+ // Fonts
82
+ '*.woff',
83
+ '*.woff2',
84
+ '*.ttf',
85
+ '*.eot',
86
+ '*.otf',
87
+ // Stylesheets
88
+ '*.css',
89
+ // Source maps (can be large and rarely needed)
90
+ '*.map',
91
+ '*.js.map',
92
+ '*.css.map',
93
+ // Videos
94
+ '*.mp4',
95
+ '*.webm',
96
+ '*.ogg',
97
+ '*.avi',
98
+ '*.mov',
99
+ // Audio
100
+ '*.mp3',
101
+ '*.wav',
102
+ '*.flac',
103
+ '*.aac',
104
+ ];
105
+ /**
106
+ * MIME types to skip body fetching by default
107
+ * This catches resources that may not have obvious file extensions (e.g., CSS with query params)
108
+ */
109
+ export const DEFAULT_SKIP_BODY_MIME_TYPES = [
110
+ 'text/css',
111
+ 'image/svg+xml',
112
+ 'image/png',
113
+ 'image/jpeg',
114
+ 'image/gif',
115
+ 'image/webp',
116
+ 'image/avif',
117
+ 'image/bmp',
118
+ 'image/tiff',
119
+ 'font/woff',
120
+ 'font/woff2',
121
+ 'font/ttf',
122
+ 'font/eot',
123
+ 'font/otf',
124
+ 'application/font-woff',
125
+ 'application/font-woff2',
126
+ 'video/mp4',
127
+ 'video/webm',
128
+ 'audio/mpeg',
129
+ 'audio/wav',
130
+ ];
131
+ /**
132
+ * Check if a URL should be excluded based on domain filtering.
133
+ *
134
+ * @param url - URL to check against exclusion list
135
+ * @param includeAll - If true, disables all filtering
136
+ * @returns True if the URL's domain matches an excluded domain
137
+ */
138
+ export function shouldExcludeDomain(url, includeAll = false) {
139
+ if (includeAll) {
140
+ return false; // Don't filter anything if --include-all flag is set
141
+ }
142
+ const hostname = extractHostname(url).toLowerCase();
143
+ return DEFAULT_EXCLUDED_DOMAINS.some((domain) => hostname.includes(domain.toLowerCase()));
144
+ }
145
+ /**
146
+ * Check if a console message should be excluded based on type and pattern filtering
147
+ */
148
+ export function shouldExcludeConsoleMessage(text, type, includeAll = false) {
149
+ if (includeAll) {
150
+ return false; // Don't filter anything if --include-all flag is set
151
+ }
152
+ // Check if message type should be excluded (e.g., group messages)
153
+ if (DEFAULT_EXCLUDED_CONSOLE_TYPES.includes(type)) {
154
+ return true;
155
+ }
156
+ const lowerText = text.toLowerCase();
157
+ return DEFAULT_EXCLUDED_CONSOLE_PATTERNS.some((pattern) => lowerText.includes(pattern.toLowerCase()));
158
+ }
159
+ /**
160
+ * Evaluate whether a URL matches pattern rules using include-trumps-exclude logic.
161
+ *
162
+ * Provides centralized pattern matching with consistent precedence rules:
163
+ * 1. If URL matches includePatterns → true (even if it also matches excludePatterns)
164
+ * 2. If includePatterns specified but URL doesn't match → false (whitelist mode)
165
+ * 3. If URL matches excludePatterns → false
166
+ * 4. Otherwise → use defaultBehavior
167
+ *
168
+ * This function consolidates the URL parsing and wildcard matching logic that was
169
+ * previously duplicated across multiple filter functions.
170
+ *
171
+ * @param url - The URL to check against patterns
172
+ * @param config - Pattern matching configuration with include/exclude patterns
173
+ * @returns True if the URL should be included based on pattern rules
174
+ */
175
+ function evaluatePatternMatch(url, config) {
176
+ const { includePatterns = [], excludePatterns = [], defaultBehavior = 'include' } = config;
177
+ // Parse URL once for all pattern checks
178
+ const hostname = extractHostname(url);
179
+ const hostnameWithPath = extractHostnameWithPath(url);
180
+ // Helper: check if any pattern matches hostname or hostname+path
181
+ const matchesAny = (patterns) => patterns.some((pattern) => matchesWildcard(hostname, pattern) || matchesWildcard(hostnameWithPath, pattern));
182
+ // Compute match states
183
+ const includeSpecified = includePatterns.length > 0;
184
+ const includeMatch = includeSpecified && matchesAny(includePatterns);
185
+ const excludeMatch = excludePatterns.length > 0 && matchesAny(excludePatterns);
186
+ // Decision logic: include trumps exclude, then whitelist mode, then exclude, then default
187
+ return includeMatch || (!includeSpecified && !excludeMatch && defaultBehavior === 'include');
188
+ }
189
+ /**
190
+ * Simple wildcard pattern matcher.
191
+ * Supports only the * wildcard character.
192
+ *
193
+ * Examples:
194
+ * matchesWildcard("api.json", "*.json") → true
195
+ * matchesWildcard("api/users", "*api*") → true
196
+ * matchesWildcard("index.html", "*.js") → false
197
+ *
198
+ * @param str - The string to test
199
+ * @param pattern - The pattern with * wildcards
200
+ * @returns True if the string matches the pattern
201
+ */
202
+ export function matchesWildcard(str, pattern) {
203
+ // Escape special regex characters except *
204
+ const regexPattern = pattern
205
+ .replace(/[.+?^${}()|[\]\\]/g, '\\$&') // Escape special chars
206
+ .replace(/\*/g, '.*'); // Replace * with .*
207
+ const regex = new RegExp(`^${regexPattern}$`, 'i'); // Case-insensitive
208
+ return regex.test(str);
209
+ }
210
+ /**
211
+ * Check if a URL matches any pattern in a list.
212
+ *
213
+ * Matches against both bare hostname and hostname+pathname to support:
214
+ * - Bare hostname patterns: `api.example.com` matches all requests to that host
215
+ * - Hostname wildcard patterns: `*analytics*` matches "analytics.google.com/collect"
216
+ * - Path patterns: `*\/api\/*` matches "example.com/api/users"
217
+ * - Combined patterns: `api.example.com\/users` matches specific endpoint
218
+ *
219
+ * @param url - The URL to check
220
+ * @param patterns - Array of wildcard patterns
221
+ * @returns True if URL matches any pattern
222
+ */
223
+ /**
224
+ * Determine if a response body should be fetched based on URL, MIME type, and patterns.
225
+ *
226
+ * Pattern precedence (follows include-trumps-exclude rule):
227
+ * 1. If URL matches includePatterns → FETCH (even if it also matches excludePatterns)
228
+ * 2. If includePatterns specified but URL doesn't match → SKIP (whitelist mode)
229
+ * 3. If URL matches excludePatterns → SKIP
230
+ * 4. If fetchAllBodies flag is true → FETCH
231
+ * 5. If MIME type matches DEFAULT_SKIP_BODY_MIME_TYPES → SKIP
232
+ * 6. If URL matches DEFAULT_SKIP_BODY_PATTERNS → SKIP
233
+ * 7. Otherwise → FETCH (default behavior)
234
+ *
235
+ * @param url - The request URL
236
+ * @param mimeType - The response MIME type (for MIME-based skipping)
237
+ * @param options - Configuration options
238
+ * @returns True if the body should be fetched
239
+ */
240
+ export function shouldFetchBody(url, mimeType, options = {}) {
241
+ const { fetchAllBodies = false, includePatterns = [], excludePatterns = [] } = options;
242
+ // If includePatterns specified, act as whitelist (trumps everything else)
243
+ if (includePatterns.length > 0) {
244
+ return evaluatePatternMatch(url, {
245
+ includePatterns,
246
+ defaultBehavior: 'exclude',
247
+ });
248
+ }
249
+ // If excludePatterns specified and URL matches → skip (trumps fetchAllBodies)
250
+ if (excludePatterns.length > 0) {
251
+ const matchesExclude = evaluatePatternMatch(url, {
252
+ includePatterns: excludePatterns,
253
+ defaultBehavior: 'exclude',
254
+ });
255
+ if (matchesExclude) {
256
+ return false;
257
+ }
258
+ }
259
+ // If fetchAllBodies flag is set → fetch everything
260
+ if (fetchAllBodies) {
261
+ return true;
262
+ }
263
+ // Check MIME type against default skip list (case-insensitive)
264
+ if (mimeType) {
265
+ const normalizedMimeType = mimeType.toLowerCase().split(';')[0]?.trim() ?? ''; // Remove charset etc.
266
+ if (normalizedMimeType &&
267
+ DEFAULT_SKIP_BODY_MIME_TYPES.some((skipType) => normalizedMimeType === skipType.toLowerCase())) {
268
+ return false;
269
+ }
270
+ }
271
+ // Apply default auto-skip URL patterns
272
+ const matchesDefaultSkip = evaluatePatternMatch(url, {
273
+ includePatterns: DEFAULT_SKIP_BODY_PATTERNS,
274
+ defaultBehavior: 'exclude',
275
+ });
276
+ // Default: fetch the body unless it matches default skip patterns
277
+ return !matchesDefaultSkip;
278
+ }
279
+ /**
280
+ * Determine if a response body should be fetched with detailed reason.
281
+ *
282
+ * Combines all decision logic: MIME type, size limits, smart defaults, and fetch flags.
283
+ * Returns a decision object with reason string for logging/debugging.
284
+ *
285
+ * @param url - Request URL
286
+ * @param mimeType - Response MIME type
287
+ * @param encodedDataLength - Response size in bytes
288
+ * @param options - Configuration options
289
+ * @returns Decision object with should boolean and optional reason
290
+ *
291
+ * @example
292
+ * ```typescript
293
+ * const decision = shouldFetchBodyWithReason(
294
+ * 'https://api.example.com/data',
295
+ * 'application/json',
296
+ * 1024,
297
+ * { maxBodySize: 5 * 1024 * 1024 }
298
+ * );
299
+ * if (!decision.should) {
300
+ * console.log(`Skipped: ${decision.reason}`);
301
+ * }
302
+ * ```
303
+ */
304
+ export function shouldFetchBodyWithReason(url, mimeType, encodedDataLength, options = {}) {
305
+ const { maxBodySize = 5 * 1024 * 1024 } = options;
306
+ // Check if response is text-based
307
+ const isTextResponse = (mimeType?.includes('json') ?? false) ||
308
+ (mimeType?.includes('javascript') ?? false) ||
309
+ (mimeType?.includes('text') ?? false) ||
310
+ (mimeType?.includes('html') ?? false);
311
+ if (!isTextResponse) {
312
+ return { should: false, reason: 'Non-text response type' };
313
+ }
314
+ // Check size limits
315
+ if (encodedDataLength > maxBodySize) {
316
+ const sizeStr = `${(encodedDataLength / 1024 / 1024).toFixed(2)}MB`;
317
+ const limitStr = `${(maxBodySize / 1024 / 1024).toFixed(2)}MB`;
318
+ return {
319
+ should: false,
320
+ reason: `Response too large (${sizeStr} > ${limitStr})`,
321
+ };
322
+ }
323
+ // Use existing shouldFetchBody for pattern matching
324
+ const shouldFetch = shouldFetchBody(url, mimeType, options);
325
+ if (!shouldFetch) {
326
+ return {
327
+ should: false,
328
+ reason: 'Auto-optimization (see DEFAULT_SKIP_BODY_PATTERNS)',
329
+ };
330
+ }
331
+ return { should: true };
332
+ }
333
+ /**
334
+ * Determine if a network request should be excluded based on URL patterns.
335
+ *
336
+ * Pattern precedence (follows include-trumps-exclude rule):
337
+ * 1. If URL matches includePatterns → CAPTURE (even if it also matches excludePatterns)
338
+ * 2. If includePatterns specified but URL doesn't match → EXCLUDE (whitelist mode)
339
+ * 3. If URL matches excludePatterns → EXCLUDE
340
+ * 4. Otherwise → CAPTURE (default behavior)
341
+ *
342
+ * Note: This function is separate from domain filtering (shouldExcludeDomain).
343
+ * Both filters can be applied: domain filtering happens first, then URL pattern filtering.
344
+ *
345
+ * @param url - The request URL
346
+ * @param options - Configuration options
347
+ * @returns True if the request should be excluded
348
+ */
349
+ export function shouldExcludeUrl(url, options = {}) {
350
+ const { includePatterns = [], excludePatterns = [] } = options;
351
+ // Use unified pattern matching - invert result since we want exclusion logic
352
+ return !evaluatePatternMatch(url, {
353
+ includePatterns,
354
+ excludePatterns,
355
+ defaultBehavior: 'include',
356
+ });
357
+ }
358
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/telemetry/filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { CDPConnection } from '../connection/cdp.js';
2
+ import type { CleanupFunction } from '../types';
3
+ /**
4
+ * Navigation event information.
5
+ */
6
+ export interface NavigationEvent {
7
+ /** URL navigated to */
8
+ url: string;
9
+ /** Timestamp of navigation */
10
+ timestamp: number;
11
+ /** Navigation counter (increments with each main frame navigation) */
12
+ navigationId: number;
13
+ }
14
+ /**
15
+ * Start tracking page navigation events.
16
+ *
17
+ * Monitors main frame navigations (page loads, URL changes) and maintains
18
+ * a navigation counter that increments with each navigation. This counter
19
+ * can be used to detect stale references (e.g., network request indices
20
+ * from a previous page load).
21
+ *
22
+ * @param cdp - CDP connection instance
23
+ * @param navigations - Array to populate with navigation events
24
+ * @returns Object with cleanup function and getCurrentNavigationId getter
25
+ *
26
+ * @remarks
27
+ * - Only tracks main frame navigations (ignores iframe navigations)
28
+ * - Navigation ID starts at 0 and increments with each navigation
29
+ * - Initial page load counts as navigation 0
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const navs: NavigationEvent[] = [];
34
+ * const { cleanup, getCurrentNavigationId } = await startNavigationTracking(cdp, navs);
35
+ *
36
+ * // Later, validate if a reference is stale:
37
+ * const currentNavId = getCurrentNavigationId();
38
+ * if (referenceNavId !== currentNavId) {
39
+ * throw new Error('Stale reference - page has navigated');
40
+ * }
41
+ *
42
+ * cleanup();
43
+ * ```
44
+ */
45
+ export declare function startNavigationTracking(cdp: CDPConnection, navigations: NavigationEvent[]): Promise<{
46
+ cleanup: CleanupFunction;
47
+ getCurrentNavigationId: () => number;
48
+ }>;
49
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/telemetry/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;CACtB;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,eAAe,EAAE,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,sBAAsB,EAAE,MAAM,MAAM,CAAA;CAAE,CAAC,CA4C7E"}
@@ -0,0 +1,69 @@
1
+ import { CDPHandlerRegistry } from '../connection/handlers.js';
2
+ import { createLogger } from '../ui/logging/index.js';
3
+ const log = createLogger('navigation');
4
+ /**
5
+ * Start tracking page navigation events.
6
+ *
7
+ * Monitors main frame navigations (page loads, URL changes) and maintains
8
+ * a navigation counter that increments with each navigation. This counter
9
+ * can be used to detect stale references (e.g., network request indices
10
+ * from a previous page load).
11
+ *
12
+ * @param cdp - CDP connection instance
13
+ * @param navigations - Array to populate with navigation events
14
+ * @returns Object with cleanup function and getCurrentNavigationId getter
15
+ *
16
+ * @remarks
17
+ * - Only tracks main frame navigations (ignores iframe navigations)
18
+ * - Navigation ID starts at 0 and increments with each navigation
19
+ * - Initial page load counts as navigation 0
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const navs: NavigationEvent[] = [];
24
+ * const { cleanup, getCurrentNavigationId } = await startNavigationTracking(cdp, navs);
25
+ *
26
+ * // Later, validate if a reference is stale:
27
+ * const currentNavId = getCurrentNavigationId();
28
+ * if (referenceNavId !== currentNavId) {
29
+ * throw new Error('Stale reference - page has navigated');
30
+ * }
31
+ *
32
+ * cleanup();
33
+ * ```
34
+ */
35
+ export async function startNavigationTracking(cdp, navigations) {
36
+ const registry = new CDPHandlerRegistry();
37
+ let navigationCounter = 0;
38
+ // Enable Page domain to receive navigation events
39
+ await cdp.send('Page.enable');
40
+ // Record initial navigation (the page we're currently on)
41
+ const initialNavigation = {
42
+ url: '', // Will be updated by first frameNavigated event or from session metadata
43
+ timestamp: Date.now(),
44
+ navigationId: navigationCounter,
45
+ };
46
+ navigations.push(initialNavigation);
47
+ // Listen for frame navigation events
48
+ registry.register(cdp, 'Page.frameNavigated', (params) => {
49
+ // Only track main frame navigations (parentId is undefined for main frame)
50
+ if (params.frame.parentId === undefined) {
51
+ navigationCounter++;
52
+ const navigation = {
53
+ url: params.frame.url,
54
+ timestamp: Date.now(),
55
+ navigationId: navigationCounter,
56
+ };
57
+ navigations.push(navigation);
58
+ log.debug(`Main frame navigation detected [${navigationCounter}]: ${params.frame.url}`);
59
+ }
60
+ });
61
+ // Return cleanup function and navigation ID getter
62
+ return {
63
+ cleanup: () => {
64
+ registry.cleanup(cdp);
65
+ },
66
+ getCurrentNavigationId: () => navigationCounter,
67
+ };
68
+ }
69
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/telemetry/navigation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AA+BvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAkB,EAClB,WAA8B;IAE9B,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC1C,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,kDAAkD;IAClD,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE9B,0DAA0D;IAC1D,MAAM,iBAAiB,GAAoB;QACzC,GAAG,EAAE,EAAE,EAAE,yEAAyE;QAClF,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,YAAY,EAAE,iBAAiB;KAChC,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAEpC,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,CACf,GAAG,EACH,qBAAqB,EACrB,CAAC,MAA+B,EAAE,EAAE;QAClC,2EAA2E;QAC3E,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,iBAAiB,EAAE,CAAC;YAEpB,MAAM,UAAU,GAAoB;gBAClC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;gBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,YAAY,EAAE,iBAAiB;aAChC,CAAC;YAEF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE7B,GAAG,CAAC,KAAK,CAAC,mCAAmC,iBAAiB,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC,CACF,CAAC;IAEF,mDAAmD;IACnD,OAAO;QACL,OAAO,EAAE,GAAG,EAAE;YACZ,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,sBAAsB,EAAE,GAAG,EAAE,CAAC,iBAAiB;KAChD,CAAC;AACJ,CAAC"}
@@ -8,6 +8,7 @@ export interface NetworkCollectionOptions {
8
8
  networkInclude?: string[];
9
9
  networkExclude?: string[];
10
10
  maxBodySize?: number;
11
+ getCurrentNavigationId?: (() => number) | undefined;
11
12
  }
12
13
  /**
13
14
  * Start collecting network requests via CDP Network domain.
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/telemetry/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
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAWzD,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;IACrB,sBAAsB,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CAkN1B"}