@vforsh/argus-watcher 0.1.2 → 0.1.3

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 (327) hide show
  1. package/README.md +66 -14
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/artifacts.d.ts +13 -0
  4. package/dist/artifacts.d.ts.map +1 -0
  5. package/dist/artifacts.js +27 -0
  6. package/dist/artifacts.js.map +1 -0
  7. package/dist/buffer/LogBuffer.d.ts +8 -3
  8. package/dist/buffer/LogBuffer.d.ts.map +1 -1
  9. package/dist/buffer/LogBuffer.js +9 -1
  10. package/dist/buffer/LogBuffer.js.map +1 -1
  11. package/dist/buffer/NetBuffer.d.ts +29 -0
  12. package/dist/buffer/NetBuffer.d.ts.map +1 -0
  13. package/dist/buffer/NetBuffer.js +85 -0
  14. package/dist/buffer/NetBuffer.js.map +1 -0
  15. package/dist/cdp/accessibility.d.ts +18 -0
  16. package/dist/cdp/accessibility.d.ts.map +1 -0
  17. package/dist/cdp/accessibility.js +300 -0
  18. package/dist/cdp/accessibility.js.map +1 -0
  19. package/dist/cdp/connection.d.ts +24 -0
  20. package/dist/cdp/connection.d.ts.map +1 -0
  21. package/dist/cdp/connection.js +131 -0
  22. package/dist/cdp/connection.js.map +1 -0
  23. package/dist/cdp/dom/fill.d.ts +22 -0
  24. package/dist/cdp/dom/fill.d.ts.map +1 -0
  25. package/dist/cdp/dom/fill.js +59 -0
  26. package/dist/cdp/dom/fill.js.map +1 -0
  27. package/dist/cdp/dom/info.d.ts +14 -0
  28. package/dist/cdp/dom/info.d.ts.map +1 -0
  29. package/dist/cdp/dom/info.js +52 -0
  30. package/dist/cdp/dom/info.js.map +1 -0
  31. package/dist/cdp/dom/insert.d.ts +19 -0
  32. package/dist/cdp/dom/insert.d.ts.map +1 -0
  33. package/dist/cdp/dom/insert.js +30 -0
  34. package/dist/cdp/dom/insert.js.map +1 -0
  35. package/dist/cdp/dom/modify.d.ts +50 -0
  36. package/dist/cdp/dom/modify.d.ts.map +1 -0
  37. package/dist/cdp/dom/modify.js +100 -0
  38. package/dist/cdp/dom/modify.js.map +1 -0
  39. package/dist/cdp/dom/remove.d.ts +17 -0
  40. package/dist/cdp/dom/remove.d.ts.map +1 -0
  41. package/dist/cdp/dom/remove.js +27 -0
  42. package/dist/cdp/dom/remove.js.map +1 -0
  43. package/dist/cdp/dom/selector.d.ts +19 -0
  44. package/dist/cdp/dom/selector.d.ts.map +1 -0
  45. package/dist/cdp/dom/selector.js +64 -0
  46. package/dist/cdp/dom/selector.js.map +1 -0
  47. package/dist/cdp/dom/setFile.d.ts +21 -0
  48. package/dist/cdp/dom/setFile.d.ts.map +1 -0
  49. package/dist/cdp/dom/setFile.js +82 -0
  50. package/dist/cdp/dom/setFile.js.map +1 -0
  51. package/dist/cdp/dom/submit.d.ts +15 -0
  52. package/dist/cdp/dom/submit.d.ts.map +1 -0
  53. package/dist/cdp/dom/submit.js +130 -0
  54. package/dist/cdp/dom/submit.js.map +1 -0
  55. package/dist/cdp/dom/tree.d.ts +16 -0
  56. package/dist/cdp/dom/tree.d.ts.map +1 -0
  57. package/dist/cdp/dom/tree.js +100 -0
  58. package/dist/cdp/dom/tree.js.map +1 -0
  59. package/dist/cdp/dom/types.d.ts +16 -0
  60. package/dist/cdp/dom/types.d.ts.map +1 -0
  61. package/dist/cdp/dom/types.js +2 -0
  62. package/dist/cdp/dom/types.js.map +1 -0
  63. package/dist/cdp/dom.d.ts +17 -0
  64. package/dist/cdp/dom.d.ts.map +1 -0
  65. package/dist/cdp/dom.js +10 -0
  66. package/dist/cdp/dom.js.map +1 -0
  67. package/dist/cdp/emulation.d.ts +16 -0
  68. package/dist/cdp/emulation.d.ts.map +1 -0
  69. package/dist/cdp/emulation.js +40 -0
  70. package/dist/cdp/emulation.js.map +1 -0
  71. package/dist/cdp/eval.d.ts +10 -0
  72. package/dist/cdp/eval.d.ts.map +1 -0
  73. package/dist/cdp/eval.js +34 -0
  74. package/dist/cdp/eval.js.map +1 -0
  75. package/dist/cdp/keyboard.d.ts +38 -0
  76. package/dist/cdp/keyboard.d.ts.map +1 -0
  77. package/dist/cdp/keyboard.js +148 -0
  78. package/dist/cdp/keyboard.js.map +1 -0
  79. package/dist/cdp/mouse.d.ts +49 -0
  80. package/dist/cdp/mouse.d.ts.map +1 -0
  81. package/dist/cdp/mouse.js +199 -0
  82. package/dist/cdp/mouse.js.map +1 -0
  83. package/dist/cdp/networkCapture.d.ts +11 -0
  84. package/dist/cdp/networkCapture.d.ts.map +1 -0
  85. package/dist/cdp/networkCapture.js +99 -0
  86. package/dist/cdp/networkCapture.js.map +1 -0
  87. package/dist/cdp/pageIndicator.d.ts +41 -0
  88. package/dist/cdp/pageIndicator.d.ts.map +1 -0
  89. package/dist/cdp/pageIndicator.js +395 -0
  90. package/dist/cdp/pageIndicator.js.map +1 -0
  91. package/dist/cdp/redaction.d.ts +3 -0
  92. package/dist/cdp/redaction.d.ts.map +1 -0
  93. package/dist/cdp/redaction.js +35 -0
  94. package/dist/cdp/redaction.js.map +1 -0
  95. package/dist/cdp/remoteObject.d.ts +6 -0
  96. package/dist/cdp/remoteObject.d.ts.map +1 -0
  97. package/dist/cdp/remoteObject.js +94 -0
  98. package/dist/cdp/remoteObject.js.map +1 -0
  99. package/dist/cdp/screenshot.d.ts +10 -0
  100. package/dist/cdp/screenshot.d.ts.map +1 -0
  101. package/dist/cdp/screenshot.js +87 -0
  102. package/dist/cdp/screenshot.js.map +1 -0
  103. package/dist/cdp/storageLocal.d.ts +8 -0
  104. package/dist/cdp/storageLocal.d.ts.map +1 -0
  105. package/dist/cdp/storageLocal.js +70 -0
  106. package/dist/cdp/storageLocal.js.map +1 -0
  107. package/dist/cdp/text-filter.d.ts +19 -0
  108. package/dist/cdp/text-filter.d.ts.map +1 -0
  109. package/dist/cdp/text-filter.js +54 -0
  110. package/dist/cdp/text-filter.js.map +1 -0
  111. package/dist/cdp/throttle.d.ts +6 -0
  112. package/dist/cdp/throttle.d.ts.map +1 -0
  113. package/dist/cdp/throttle.js +9 -0
  114. package/dist/cdp/throttle.js.map +1 -0
  115. package/dist/cdp/tracing.d.ts +14 -0
  116. package/dist/cdp/tracing.d.ts.map +1 -0
  117. package/dist/cdp/tracing.js +115 -0
  118. package/dist/cdp/tracing.js.map +1 -0
  119. package/dist/cdp/watcher.d.ts +17 -2
  120. package/dist/cdp/watcher.d.ts.map +1 -1
  121. package/dist/cdp/watcher.js +124 -175
  122. package/dist/cdp/watcher.js.map +1 -1
  123. package/dist/emulation/EmulationController.d.ts +12 -0
  124. package/dist/emulation/EmulationController.d.ts.map +1 -0
  125. package/dist/emulation/EmulationController.js +83 -0
  126. package/dist/emulation/EmulationController.js.map +1 -0
  127. package/dist/events.d.ts +86 -0
  128. package/dist/events.d.ts.map +1 -0
  129. package/dist/events.js +2 -0
  130. package/dist/events.js.map +1 -0
  131. package/dist/fileLogs/WatcherFileLogger.d.ts +5 -2
  132. package/dist/fileLogs/WatcherFileLogger.d.ts.map +1 -1
  133. package/dist/fileLogs/WatcherFileLogger.js +30 -12
  134. package/dist/fileLogs/WatcherFileLogger.js.map +1 -1
  135. package/dist/http/httpUtils.d.ts +25 -0
  136. package/dist/http/httpUtils.d.ts.map +1 -0
  137. package/dist/http/httpUtils.js +170 -0
  138. package/dist/http/httpUtils.js.map +1 -0
  139. package/dist/http/router.d.ts +5 -0
  140. package/dist/http/router.d.ts.map +1 -0
  141. package/dist/http/router.js +81 -0
  142. package/dist/http/router.js.map +1 -0
  143. package/dist/http/routes/getEmulation.d.ts +3 -0
  144. package/dist/http/routes/getEmulation.d.ts.map +1 -0
  145. package/dist/http/routes/getEmulation.js +8 -0
  146. package/dist/http/routes/getEmulation.js.map +1 -0
  147. package/dist/http/routes/getLogs.d.ts +3 -0
  148. package/dist/http/routes/getLogs.d.ts.map +1 -0
  149. package/dist/http/routes/getLogs.js +28 -0
  150. package/dist/http/routes/getLogs.js.map +1 -0
  151. package/dist/http/routes/getNet.d.ts +3 -0
  152. package/dist/http/routes/getNet.d.ts.map +1 -0
  153. package/dist/http/routes/getNet.js +17 -0
  154. package/dist/http/routes/getNet.js.map +1 -0
  155. package/dist/http/routes/getNetTail.d.ts +3 -0
  156. package/dist/http/routes/getNetTail.d.ts.map +1 -0
  157. package/dist/http/routes/getNetTail.js +18 -0
  158. package/dist/http/routes/getNetTail.js.map +1 -0
  159. package/dist/http/routes/getStatus.d.ts +3 -0
  160. package/dist/http/routes/getStatus.d.ts.map +1 -0
  161. package/dist/http/routes/getStatus.js +21 -0
  162. package/dist/http/routes/getStatus.js.map +1 -0
  163. package/dist/http/routes/getTail.d.ts +3 -0
  164. package/dist/http/routes/getTail.d.ts.map +1 -0
  165. package/dist/http/routes/getTail.js +28 -0
  166. package/dist/http/routes/getTail.js.map +1 -0
  167. package/dist/http/routes/getTargets.d.ts +3 -0
  168. package/dist/http/routes/getTargets.d.ts.map +1 -0
  169. package/dist/http/routes/getTargets.js +16 -0
  170. package/dist/http/routes/getTargets.js.map +1 -0
  171. package/dist/http/routes/getThrottle.d.ts +3 -0
  172. package/dist/http/routes/getThrottle.d.ts.map +1 -0
  173. package/dist/http/routes/getThrottle.js +8 -0
  174. package/dist/http/routes/getThrottle.js.map +1 -0
  175. package/dist/http/routes/postAttach.d.ts +3 -0
  176. package/dist/http/routes/postAttach.d.ts.map +1 -0
  177. package/dist/http/routes/postAttach.js +23 -0
  178. package/dist/http/routes/postAttach.js.map +1 -0
  179. package/dist/http/routes/postDetach.d.ts +3 -0
  180. package/dist/http/routes/postDetach.d.ts.map +1 -0
  181. package/dist/http/routes/postDetach.js +23 -0
  182. package/dist/http/routes/postDetach.js.map +1 -0
  183. package/dist/http/routes/postDomAdd.d.ts +7 -0
  184. package/dist/http/routes/postDomAdd.d.ts.map +1 -0
  185. package/dist/http/routes/postDomAdd.js +97 -0
  186. package/dist/http/routes/postDomAdd.js.map +1 -0
  187. package/dist/http/routes/postDomClick.d.ts +3 -0
  188. package/dist/http/routes/postDomClick.d.ts.map +1 -0
  189. package/dist/http/routes/postDomClick.js +85 -0
  190. package/dist/http/routes/postDomClick.js.map +1 -0
  191. package/dist/http/routes/postDomFill.d.ts +3 -0
  192. package/dist/http/routes/postDomFill.d.ts.map +1 -0
  193. package/dist/http/routes/postDomFill.js +58 -0
  194. package/dist/http/routes/postDomFill.js.map +1 -0
  195. package/dist/http/routes/postDomFocus.d.ts +3 -0
  196. package/dist/http/routes/postDomFocus.d.ts.map +1 -0
  197. package/dist/http/routes/postDomFocus.js +40 -0
  198. package/dist/http/routes/postDomFocus.js.map +1 -0
  199. package/dist/http/routes/postDomHover.d.ts +3 -0
  200. package/dist/http/routes/postDomHover.d.ts.map +1 -0
  201. package/dist/http/routes/postDomHover.js +40 -0
  202. package/dist/http/routes/postDomHover.js.map +1 -0
  203. package/dist/http/routes/postDomInfo.d.ts +3 -0
  204. package/dist/http/routes/postDomInfo.d.ts.map +1 -0
  205. package/dist/http/routes/postDomInfo.js +40 -0
  206. package/dist/http/routes/postDomInfo.js.map +1 -0
  207. package/dist/http/routes/postDomKeydown.d.ts +3 -0
  208. package/dist/http/routes/postDomKeydown.d.ts.map +1 -0
  209. package/dist/http/routes/postDomKeydown.js +36 -0
  210. package/dist/http/routes/postDomKeydown.js.map +1 -0
  211. package/dist/http/routes/postDomModify.d.ts +3 -0
  212. package/dist/http/routes/postDomModify.d.ts.map +1 -0
  213. package/dist/http/routes/postDomModify.js +45 -0
  214. package/dist/http/routes/postDomModify.js.map +1 -0
  215. package/dist/http/routes/postDomRemove.d.ts +3 -0
  216. package/dist/http/routes/postDomRemove.d.ts.map +1 -0
  217. package/dist/http/routes/postDomRemove.js +39 -0
  218. package/dist/http/routes/postDomRemove.js.map +1 -0
  219. package/dist/http/routes/postDomScroll.d.ts +3 -0
  220. package/dist/http/routes/postDomScroll.d.ts.map +1 -0
  221. package/dist/http/routes/postDomScroll.js +75 -0
  222. package/dist/http/routes/postDomScroll.js.map +1 -0
  223. package/dist/http/routes/postDomScrollTo.d.ts +3 -0
  224. package/dist/http/routes/postDomScrollTo.d.ts.map +1 -0
  225. package/dist/http/routes/postDomScrollTo.js +69 -0
  226. package/dist/http/routes/postDomScrollTo.js.map +1 -0
  227. package/dist/http/routes/postDomSetFile.d.ts +3 -0
  228. package/dist/http/routes/postDomSetFile.d.ts.map +1 -0
  229. package/dist/http/routes/postDomSetFile.js +67 -0
  230. package/dist/http/routes/postDomSetFile.js.map +1 -0
  231. package/dist/http/routes/postDomSubmit.d.ts +3 -0
  232. package/dist/http/routes/postDomSubmit.d.ts.map +1 -0
  233. package/dist/http/routes/postDomSubmit.js +49 -0
  234. package/dist/http/routes/postDomSubmit.js.map +1 -0
  235. package/dist/http/routes/postDomTree.d.ts +3 -0
  236. package/dist/http/routes/postDomTree.d.ts.map +1 -0
  237. package/dist/http/routes/postDomTree.js +41 -0
  238. package/dist/http/routes/postDomTree.js.map +1 -0
  239. package/dist/http/routes/postEmulation.d.ts +3 -0
  240. package/dist/http/routes/postEmulation.d.ts.map +1 -0
  241. package/dist/http/routes/postEmulation.js +70 -0
  242. package/dist/http/routes/postEmulation.js.map +1 -0
  243. package/dist/http/routes/postEval.d.ts +3 -0
  244. package/dist/http/routes/postEval.d.ts.map +1 -0
  245. package/dist/http/routes/postEval.js +26 -0
  246. package/dist/http/routes/postEval.js.map +1 -0
  247. package/dist/http/routes/postReload.d.ts +3 -0
  248. package/dist/http/routes/postReload.d.ts.map +1 -0
  249. package/dist/http/routes/postReload.js +20 -0
  250. package/dist/http/routes/postReload.js.map +1 -0
  251. package/dist/http/routes/postScreenshot.d.ts +3 -0
  252. package/dist/http/routes/postScreenshot.d.ts.map +1 -0
  253. package/dist/http/routes/postScreenshot.js +17 -0
  254. package/dist/http/routes/postScreenshot.js.map +1 -0
  255. package/dist/http/routes/postShutdown.d.ts +3 -0
  256. package/dist/http/routes/postShutdown.d.ts.map +1 -0
  257. package/dist/http/routes/postShutdown.js +13 -0
  258. package/dist/http/routes/postShutdown.js.map +1 -0
  259. package/dist/http/routes/postSnapshot.d.ts +3 -0
  260. package/dist/http/routes/postSnapshot.d.ts.map +1 -0
  261. package/dist/http/routes/postSnapshot.js +28 -0
  262. package/dist/http/routes/postSnapshot.js.map +1 -0
  263. package/dist/http/routes/postStorageLocal.d.ts +3 -0
  264. package/dist/http/routes/postStorageLocal.d.ts.map +1 -0
  265. package/dist/http/routes/postStorageLocal.js +31 -0
  266. package/dist/http/routes/postStorageLocal.js.map +1 -0
  267. package/dist/http/routes/postThrottle.d.ts +3 -0
  268. package/dist/http/routes/postThrottle.d.ts.map +1 -0
  269. package/dist/http/routes/postThrottle.js +38 -0
  270. package/dist/http/routes/postThrottle.js.map +1 -0
  271. package/dist/http/routes/postTraceStart.d.ts +3 -0
  272. package/dist/http/routes/postTraceStart.d.ts.map +1 -0
  273. package/dist/http/routes/postTraceStart.js +17 -0
  274. package/dist/http/routes/postTraceStart.js.map +1 -0
  275. package/dist/http/routes/postTraceStop.d.ts +3 -0
  276. package/dist/http/routes/postTraceStop.d.ts.map +1 -0
  277. package/dist/http/routes/postTraceStop.js +17 -0
  278. package/dist/http/routes/postTraceStop.js.map +1 -0
  279. package/dist/http/routes/types.d.ts +9 -0
  280. package/dist/http/routes/types.d.ts.map +1 -0
  281. package/dist/http/routes/types.js +10 -0
  282. package/dist/http/routes/types.js.map +1 -0
  283. package/dist/http/server.d.ts +40 -1
  284. package/dist/http/server.d.ts.map +1 -1
  285. package/dist/http/server.js +3 -82
  286. package/dist/http/server.js.map +1 -1
  287. package/dist/index.d.ts +117 -14
  288. package/dist/index.d.ts.map +1 -1
  289. package/dist/index.js +330 -44
  290. package/dist/index.js.map +1 -1
  291. package/dist/native-messaging/messaging.d.ts +18 -0
  292. package/dist/native-messaging/messaging.d.ts.map +1 -0
  293. package/dist/native-messaging/messaging.js +94 -0
  294. package/dist/native-messaging/messaging.js.map +1 -0
  295. package/dist/native-messaging/session-manager.d.ts +105 -0
  296. package/dist/native-messaging/session-manager.d.ts.map +1 -0
  297. package/dist/native-messaging/session-manager.js +259 -0
  298. package/dist/native-messaging/session-manager.js.map +1 -0
  299. package/dist/native-messaging/types.d.ts +79 -0
  300. package/dist/native-messaging/types.d.ts.map +1 -0
  301. package/dist/native-messaging/types.js +6 -0
  302. package/dist/native-messaging/types.js.map +1 -0
  303. package/dist/registry/registry.d.ts +9 -2
  304. package/dist/registry/registry.d.ts.map +1 -1
  305. package/dist/registry/registry.js +53 -9
  306. package/dist/registry/registry.js.map +1 -1
  307. package/dist/scripts/install-host.d.ts +10 -0
  308. package/dist/scripts/install-host.d.ts.map +1 -0
  309. package/dist/scripts/install-host.js +189 -0
  310. package/dist/scripts/install-host.js.map +1 -0
  311. package/dist/sources/cdp-source.d.ts +24 -0
  312. package/dist/sources/cdp-source.d.ts.map +1 -0
  313. package/dist/sources/cdp-source.js +48 -0
  314. package/dist/sources/cdp-source.js.map +1 -0
  315. package/dist/sources/extension-source.d.ts +15 -0
  316. package/dist/sources/extension-source.d.ts.map +1 -0
  317. package/dist/sources/extension-source.js +256 -0
  318. package/dist/sources/extension-source.js.map +1 -0
  319. package/dist/sources/types.d.ts +92 -0
  320. package/dist/sources/types.d.ts.map +1 -0
  321. package/dist/sources/types.js +7 -0
  322. package/dist/sources/types.js.map +1 -0
  323. package/dist/throttle/ThrottleController.d.ts +12 -0
  324. package/dist/throttle/ThrottleController.d.ts.map +1 -0
  325. package/dist/throttle/ThrottleController.js +67 -0
  326. package/dist/throttle/ThrottleController.js.map +1 -0
  327. package/package.json +3 -2
package/dist/index.js CHANGED
@@ -1,108 +1,394 @@
1
+ import os from 'node:os';
1
2
  import path from 'node:path';
2
- import { startCdpWatcher } from './cdp/watcher.js';
3
+ import Emittery from 'emittery';
3
4
  import { LogBuffer } from './buffer/LogBuffer.js';
5
+ import { NetBuffer } from './buffer/NetBuffer.js';
4
6
  import { startHttpServer } from './http/server.js';
5
- import { announceWatcher, removeWatcher, startRegistryHeartbeat } from './registry/registry.js';
7
+ import { announceWatcher, removeWatcher, startRegistryHeartbeat, resolveUniqueWatcherId } from './registry/registry.js';
6
8
  import { WatcherFileLogger } from './fileLogs/WatcherFileLogger.js';
7
9
  import { buildIgnoreMatcher } from './cdp/ignoreList.js';
10
+ import { createNetworkCapture } from './cdp/networkCapture.js';
11
+ import { createTraceRecorder } from './cdp/tracing.js';
12
+ import { createScreenshotter } from './cdp/screenshot.js';
13
+ import { createCdpSessionHandle } from './cdp/connection.js';
14
+ import { createPageIndicatorController, validatePageIndicatorOptions, } from './cdp/pageIndicator.js';
15
+ import { createEmulationController } from './emulation/EmulationController.js';
16
+ import { createThrottleController } from './throttle/ThrottleController.js';
17
+ import { createCdpSource } from './sources/cdp-source.js';
18
+ import { createExtensionSource } from './sources/extension-source.js';
8
19
  /**
9
- * Start a watcher that connects to Chrome CDP, buffers console logs, and exposes the HTTP API.
10
- * @param options - Configuration for binding, CDP matching, and buffering.
20
+ * Start a watcher that connects to Chrome (via CDP or extension), buffers console logs, and exposes the HTTP API.
21
+ * @param options - Configuration for binding, source mode, and buffering.
11
22
  * @returns A handle that can be closed to stop the watcher and clean up registry state.
12
23
  */
13
24
  export const startWatcher = async (options) => {
14
25
  if (!options.id) {
15
26
  throw new Error('Watcher id is required');
16
27
  }
28
+ const watcherId = await resolveUniqueWatcherId(options.id);
29
+ const sourceMode = options.source ?? 'cdp';
17
30
  const host = options.host ?? '127.0.0.1';
18
31
  const port = options.port ?? 0;
19
32
  const chrome = options.chrome ?? { host: '127.0.0.1', port: 9222 };
20
33
  const bufferSize = options.bufferSize ?? 50_000;
34
+ const netBufferSize = options.bufferSize ?? 50_000;
21
35
  const startedAt = Date.now();
22
- const includeTimestamps = options.includeTimestamps ?? false;
23
36
  const ignoreMatcher = buildIgnoreMatcher(options.ignoreList);
24
37
  const stripUrlPrefixes = options.location?.stripUrlPrefixes;
38
+ // Resolve artifacts configuration
39
+ const artifactsBaseDir = resolveArtifactsBaseDir(options.artifacts?.base, watcherId);
40
+ const logsEnabled = options.artifacts?.logs?.enabled === true;
41
+ const logsDir = path.join(artifactsBaseDir, 'logs');
42
+ const includeTimestamps = options.artifacts?.logs?.includeTimestamps ?? false;
43
+ const maxFiles = resolveMaxFiles(options.artifacts?.logs?.maxFiles);
44
+ // Network capture is opt-in (disabled by default) and only in CDP mode
45
+ const netEnabled = sourceMode === 'cdp' && options.net?.enabled === true;
46
+ // Page console logging (default: minimal)
47
+ const pageConsoleLogging = options.pageConsoleLogging ?? 'minimal';
48
+ const events = new Emittery();
25
49
  const buffer = new LogBuffer(bufferSize);
50
+ const netBuffer = netEnabled ? new NetBuffer(netBufferSize) : null;
51
+ let closing = false;
52
+ let readyForShutdown = false;
53
+ let shutdownRequested = false;
54
+ let closeOnce = null;
26
55
  let cdpStatus = { attached: false, target: null };
27
- const fileLogs = options.fileLogs;
28
- const logsDir = fileLogs ? resolveLogsDir(fileLogs.logsDir) : null;
29
- const maxFiles = fileLogs ? resolveMaxFiles(fileLogs.maxFiles) : null;
30
- const fileLogger = logsDir
56
+ const fileLogger = logsEnabled
31
57
  ? new WatcherFileLogger({
32
- watcherId: options.id,
58
+ watcherId,
33
59
  startedAt,
34
60
  logsDir,
35
- chrome,
61
+ chrome: sourceMode === 'cdp' ? chrome : undefined,
36
62
  match: options.match,
37
- maxFiles: maxFiles ?? 5,
63
+ maxFiles,
38
64
  includeTimestamps,
65
+ buildFilename: options.artifacts?.logs?.buildFilename,
39
66
  })
40
67
  : null;
41
68
  const record = {
42
- id: options.id,
69
+ id: watcherId,
43
70
  host,
44
71
  port,
45
72
  pid: process.pid,
46
73
  cwd: process.cwd(),
47
74
  startedAt,
48
75
  updatedAt: Date.now(),
49
- match: options.match,
50
- chrome,
76
+ match: sourceMode === 'cdp' ? options.match : undefined,
77
+ chrome: sourceMode === 'cdp' ? chrome : undefined,
51
78
  includeTimestamps,
79
+ source: sourceMode,
80
+ };
81
+ // Create session handle for CDP mode (used by network capture, tracing, etc.)
82
+ const sessionHandle = createCdpSessionHandle();
83
+ // Emulation controller (shared across CDP and extension modes)
84
+ const emulationController = createEmulationController();
85
+ // Throttle controller (CPU, network, cache — shared across CDP and extension modes)
86
+ const throttleController = createThrottleController();
87
+ const logToPageConsole = (message) => {
88
+ if (pageConsoleLogging === 'none') {
89
+ return;
90
+ }
91
+ if (!sourceHandle?.session.isAttached()) {
92
+ return;
93
+ }
94
+ const fullMessage = `[ARGUS] ${watcherId} :: ${message}`;
95
+ queueMicrotask(() => {
96
+ sourceHandle?.session
97
+ .sendAndWait('Runtime.evaluate', {
98
+ expression: `console.log(${JSON.stringify(fullMessage)})`,
99
+ silent: true,
100
+ })
101
+ .catch(() => { });
102
+ });
103
+ };
104
+ // Page indicator only supported in CDP mode
105
+ validatePageIndicatorOptions(options.pageIndicator);
106
+ const indicatorEnabled = sourceMode === 'cdp' && options.pageIndicator?.enabled === true;
107
+ let indicatorController = null;
108
+ let indicatorAttachedAt = null;
109
+ if (indicatorEnabled) {
110
+ indicatorController = createPageIndicatorController(options.pageIndicator);
111
+ }
112
+ const buildIndicatorInfo = (target) => ({
113
+ watcherId,
114
+ watcherHost: host,
115
+ watcherPort: record.port,
116
+ watcherPid: process.pid,
117
+ targetTitle: target?.title ?? null,
118
+ targetUrl: target?.url ?? null,
119
+ attachedAt: indicatorAttachedAt ?? Date.now(),
120
+ });
121
+ const maybeInjectOnAttach = async (session, target) => {
122
+ if (!options.inject?.script) {
123
+ return;
124
+ }
125
+ if (!session.isAttached()) {
126
+ return;
127
+ }
128
+ const trimmedScript = options.inject.script.trim();
129
+ if (trimmedScript === '') {
130
+ console.warn(`[Watcher] Inject script is empty for watcher ${record.id}. Skipping.`);
131
+ return;
132
+ }
133
+ const attachedAt = Date.now();
134
+ const exposeArgus = options.inject.exposeArgus ?? true;
135
+ const argusPayload = exposeArgus
136
+ ? {
137
+ watcherId: record.id,
138
+ watcherHost: record.host,
139
+ watcherPort: record.port,
140
+ watcherPid: record.pid,
141
+ attachedAt,
142
+ target: {
143
+ title: target.title ?? null,
144
+ url: target.url ?? null,
145
+ type: target.type ?? 'page',
146
+ parentId: target.parentId ?? null,
147
+ },
148
+ }
149
+ : null;
150
+ const expression = buildInjectExpression(trimmedScript, argusPayload);
151
+ try {
152
+ await session.sendAndWait('Page.addScriptToEvaluateOnNewDocument', { source: expression });
153
+ }
154
+ catch (error) {
155
+ console.warn(`[Watcher] Failed to register inject script for watcher ${record.id}: ${formatError(error)}`);
156
+ }
157
+ try {
158
+ await session.sendAndWait('Runtime.evaluate', { expression, silent: true });
159
+ }
160
+ catch (error) {
161
+ console.warn(`[Watcher] Failed to run inject script for watcher ${record.id}: ${formatError(error)}`);
162
+ }
52
163
  };
164
+ // Create the appropriate source based on mode
165
+ let sourceHandle;
166
+ let networkCapture = null;
167
+ let traceRecorder;
168
+ let screenshotter;
169
+ if (sourceMode === 'extension') {
170
+ // Extension mode
171
+ sourceHandle = createExtensionSource({
172
+ events: {
173
+ onLog: (event) => {
174
+ buffer.add(event);
175
+ fileLogger?.writeEvent(event);
176
+ },
177
+ onStatus: (status) => {
178
+ const prevAttached = cdpStatus.attached;
179
+ cdpStatus = status;
180
+ if (status.attached && !prevAttached) {
181
+ const url = status.target?.url ?? 'unknown';
182
+ logToPageConsole(`attached (url=${url})`);
183
+ void events.emit('cdpAttached', {
184
+ ts: Date.now(),
185
+ watcherId,
186
+ target: status.target,
187
+ });
188
+ }
189
+ else if (!status.attached && prevAttached) {
190
+ void events.emit('cdpDetached', {
191
+ ts: Date.now(),
192
+ watcherId,
193
+ target: status.target,
194
+ reason: status.reason ?? 'unknown',
195
+ });
196
+ }
197
+ },
198
+ onPageNavigation: (info) => {
199
+ fileLogger?.rotate(info);
200
+ },
201
+ onPageIntl: (info) => {
202
+ fileLogger?.setPageIntl(info);
203
+ },
204
+ onAttach: async (session, target) => {
205
+ await emulationController.onAttach(session);
206
+ await throttleController.onAttach(session);
207
+ await maybeInjectOnAttach(session, target);
208
+ },
209
+ },
210
+ ignoreMatcher: ignoreMatcher ? (url) => ignoreMatcher.matches(url) : null,
211
+ stripUrlPrefixes,
212
+ });
213
+ // Create trace/screenshot with proxy session
214
+ traceRecorder = createTraceRecorder({ session: sourceHandle.session, artifactsDir: artifactsBaseDir });
215
+ screenshotter = createScreenshotter({ session: sourceHandle.session, artifactsDir: artifactsBaseDir });
216
+ }
217
+ else {
218
+ // CDP mode
219
+ networkCapture = netBuffer ? createNetworkCapture({ session: sessionHandle.session, buffer: netBuffer }) : null;
220
+ traceRecorder = createTraceRecorder({ session: sessionHandle.session, artifactsDir: artifactsBaseDir });
221
+ screenshotter = createScreenshotter({ session: sessionHandle.session, artifactsDir: artifactsBaseDir });
222
+ sourceHandle = createCdpSource({
223
+ chrome,
224
+ match: options.match,
225
+ sessionHandle,
226
+ events: {
227
+ onLog: (event) => {
228
+ buffer.add(event);
229
+ fileLogger?.writeEvent(event);
230
+ },
231
+ onStatus: (status) => {
232
+ const prevAttached = cdpStatus.attached;
233
+ cdpStatus = status;
234
+ if (status.attached && !prevAttached) {
235
+ const url = status.target?.url ?? 'unknown';
236
+ logToPageConsole(`attached (url=${url})`);
237
+ void events.emit('cdpAttached', {
238
+ ts: Date.now(),
239
+ watcherId,
240
+ target: status.target,
241
+ });
242
+ }
243
+ else if (!status.attached && prevAttached) {
244
+ void events.emit('cdpDetached', {
245
+ ts: Date.now(),
246
+ watcherId,
247
+ target: status.target,
248
+ reason: status.reason ?? 'unknown',
249
+ });
250
+ }
251
+ },
252
+ onPageNavigation: (info) => {
253
+ fileLogger?.rotate(info);
254
+ if (indicatorController) {
255
+ indicatorController.onNavigation(sessionHandle.session, buildIndicatorInfo({ title: null, url: info.url }));
256
+ }
257
+ },
258
+ onPageLoad: () => {
259
+ if (indicatorController) {
260
+ indicatorController.reinstall();
261
+ }
262
+ },
263
+ onPageIntl: (info) => {
264
+ fileLogger?.setPageIntl(info);
265
+ },
266
+ onAttach: async (session, target) => {
267
+ await emulationController.onAttach(session);
268
+ await throttleController.onAttach(session);
269
+ await networkCapture?.onAttached();
270
+ if (indicatorController) {
271
+ indicatorAttachedAt = Date.now();
272
+ indicatorController.onAttach(session, {
273
+ id: target.id,
274
+ title: target.title,
275
+ url: target.url,
276
+ type: target.type ?? 'page',
277
+ parentId: target.parentId ?? null,
278
+ webSocketDebuggerUrl: '',
279
+ }, buildIndicatorInfo({ title: target.title, url: target.url }));
280
+ }
281
+ await maybeInjectOnAttach(session, target);
282
+ },
283
+ onDetach: (reason) => {
284
+ networkCapture?.onDetached();
285
+ traceRecorder.onDetached(reason);
286
+ indicatorController?.onDetach();
287
+ },
288
+ },
289
+ ignoreMatcher: ignoreMatcher ? (url) => ignoreMatcher.matches(url) : null,
290
+ stripUrlPrefixes,
291
+ });
292
+ }
53
293
  const server = await startHttpServer({
54
294
  host,
55
295
  port,
56
296
  buffer,
297
+ netBuffer,
57
298
  getWatcher: () => record,
58
299
  getCdpStatus: () => cdpStatus,
300
+ cdpSession: sourceHandle.session,
301
+ traceRecorder,
302
+ screenshotter,
303
+ emulationController,
304
+ throttleController,
305
+ // Extension mode endpoints
306
+ sourceHandle: sourceMode === 'extension' ? sourceHandle : undefined,
307
+ onRequest: (event) => {
308
+ if (pageConsoleLogging === 'full') {
309
+ logToPageConsole(`http ${event.endpoint}`);
310
+ }
311
+ void events.emit('httpRequested', {
312
+ ...event,
313
+ watcherId,
314
+ });
315
+ },
316
+ onShutdown: () => {
317
+ if (!readyForShutdown || !closeOnce) {
318
+ shutdownRequested = true;
319
+ return;
320
+ }
321
+ void closeOnce();
322
+ },
59
323
  });
60
324
  record.port = server.port;
61
325
  await announceWatcher(record);
62
326
  const heartbeat = startRegistryHeartbeat(() => record, options.heartbeatMs ?? 15_000);
63
- const cdp = startCdpWatcher({
64
- chrome,
65
- match: options.match,
66
- ignoreMatcher,
67
- stripUrlPrefixes,
68
- onLog: (event) => {
69
- buffer.add(event);
70
- fileLogger?.writeEvent(event);
71
- },
72
- onPageNavigation: (info) => {
73
- fileLogger?.rotate(info);
74
- },
75
- onPageIntl: (info) => {
76
- fileLogger?.setPageIntl(info);
77
- },
78
- onStatus: (status) => {
79
- cdpStatus = status;
80
- },
81
- });
327
+ closeOnce = async () => {
328
+ if (closing) {
329
+ return;
330
+ }
331
+ closing = true;
332
+ heartbeat.stop();
333
+ indicatorController?.stop();
334
+ if (cdpStatus.attached) {
335
+ logToPageConsole('detached (reason=watcher_stopped)');
336
+ }
337
+ await sourceHandle.stop();
338
+ await fileLogger?.close();
339
+ traceRecorder.onDetached('watcher_stopped');
340
+ await server.close();
341
+ await removeWatcher(record.id);
342
+ events.clearListeners();
343
+ };
344
+ readyForShutdown = true;
345
+ if (shutdownRequested) {
346
+ void closeOnce();
347
+ }
82
348
  return {
83
349
  watcher: record,
350
+ events,
84
351
  close: async () => {
85
- heartbeat.stop();
86
- await cdp.stop();
87
- await fileLogger?.close();
88
- await server.close();
89
- await removeWatcher(record.id);
352
+ await closeOnce?.();
90
353
  },
91
354
  };
92
355
  };
93
- const resolveLogsDir = (logsDir) => {
94
- if (typeof logsDir !== 'string' || logsDir.trim() === '') {
95
- throw new Error('fileLogs.logsDir is required');
356
+ const resolveArtifactsBaseDir = (base, watcherId) => {
357
+ if (base !== undefined && base !== null) {
358
+ if (typeof base !== 'string' || base.trim() === '') {
359
+ throw new Error('artifacts.base must be a non-empty string when provided');
360
+ }
361
+ return path.resolve(base);
96
362
  }
97
- return path.resolve(logsDir);
363
+ return path.join(os.tmpdir(), 'argus', watcherId);
98
364
  };
99
365
  const resolveMaxFiles = (maxFiles) => {
100
366
  if (maxFiles === undefined) {
101
367
  return 5;
102
368
  }
103
369
  if (!Number.isInteger(maxFiles) || maxFiles < 1) {
104
- throw new Error('fileLogs.maxFiles must be an integer >= 1');
370
+ throw new Error('artifacts.logs.maxFiles must be an integer >= 1');
105
371
  }
106
372
  return maxFiles;
107
373
  };
374
+ const buildInjectExpression = (script, argusPayload) => {
375
+ const lines = ['(() => {'];
376
+ if (argusPayload) {
377
+ lines.push(`window.__ARGUS__ = ${JSON.stringify(argusPayload)};`);
378
+ }
379
+ lines.push(`const __argusScript = ${JSON.stringify(script)};`);
380
+ lines.push('const __argusFn = new Function(__argusScript);');
381
+ lines.push('__argusFn();');
382
+ lines.push('})();');
383
+ return lines.join('\n');
384
+ };
385
+ const formatError = (error) => {
386
+ if (!error) {
387
+ return 'Unknown error';
388
+ }
389
+ if (error instanceof Error) {
390
+ return error.message;
391
+ }
392
+ return String(error);
393
+ };
108
394
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Native Messaging protocol handler for stdin/stdout communication.
3
+ * Chrome Native Messaging uses length-prefixed 32-bit messages.
4
+ */
5
+ import type { ExtensionToHost, HostToExtension } from './types.js';
6
+ export type NativeMessagingHandler = {
7
+ onMessage: (callback: (message: ExtensionToHost) => void) => void;
8
+ onDisconnect: (callback: () => void) => void;
9
+ send: (message: HostToExtension) => void;
10
+ start: () => void;
11
+ stop: () => void;
12
+ };
13
+ /**
14
+ * Create a Native Messaging handler for stdin/stdout communication.
15
+ * Messages are length-prefixed with a 32-bit little-endian integer.
16
+ */
17
+ export declare const createNativeMessaging: () => NativeMessagingHandler;
18
+ //# sourceMappingURL=messaging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../src/native-messaging/messaging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAElE,MAAM,MAAM,sBAAsB,GAAG;IACpC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,KAAK,IAAI,CAAA;IACjE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAA;IACxC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;CAChB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAO,sBAoGxC,CAAA"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Native Messaging protocol handler for stdin/stdout communication.
3
+ * Chrome Native Messaging uses length-prefixed 32-bit messages.
4
+ */
5
+ /**
6
+ * Create a Native Messaging handler for stdin/stdout communication.
7
+ * Messages are length-prefixed with a 32-bit little-endian integer.
8
+ */
9
+ export const createNativeMessaging = () => {
10
+ let messageCallback = null;
11
+ let disconnectCallback = null;
12
+ let buffer = Buffer.alloc(0);
13
+ let running = false;
14
+ const processBuffer = () => {
15
+ // Need at least 4 bytes for the length prefix
16
+ while (buffer.length >= 4) {
17
+ const messageLength = buffer.readUInt32LE(0);
18
+ // Wait for the full message
19
+ if (buffer.length < 4 + messageLength) {
20
+ break;
21
+ }
22
+ // Extract the message
23
+ const messageBytes = buffer.subarray(4, 4 + messageLength);
24
+ buffer = buffer.subarray(4 + messageLength);
25
+ try {
26
+ const message = JSON.parse(messageBytes.toString('utf8'));
27
+ if (messageCallback) {
28
+ messageCallback(message);
29
+ }
30
+ }
31
+ catch (err) {
32
+ console.error('[NativeMessaging] Failed to parse message:', err);
33
+ }
34
+ }
35
+ };
36
+ const onData = (chunk) => {
37
+ buffer = Buffer.concat([buffer, chunk]);
38
+ processBuffer();
39
+ };
40
+ const onEnd = () => {
41
+ running = false;
42
+ if (disconnectCallback) {
43
+ disconnectCallback();
44
+ }
45
+ };
46
+ return {
47
+ onMessage: (callback) => {
48
+ messageCallback = callback;
49
+ },
50
+ onDisconnect: (callback) => {
51
+ disconnectCallback = callback;
52
+ },
53
+ send: (message) => {
54
+ if (!running) {
55
+ return;
56
+ }
57
+ const messageStr = JSON.stringify(message);
58
+ const messageBytes = Buffer.from(messageStr, 'utf8');
59
+ const lengthPrefix = Buffer.alloc(4);
60
+ lengthPrefix.writeUInt32LE(messageBytes.length, 0);
61
+ process.stdout.write(lengthPrefix);
62
+ process.stdout.write(messageBytes);
63
+ },
64
+ start: () => {
65
+ if (running) {
66
+ return;
67
+ }
68
+ running = true;
69
+ console.error('[NativeMessaging] Starting...');
70
+ console.error('[NativeMessaging] stdin.isTTY:', process.stdin.isTTY);
71
+ console.error('[NativeMessaging] stdin.readable:', process.stdin.readable);
72
+ // Set stdin to raw mode for binary data
73
+ if (process.stdin.setRawMode) {
74
+ process.stdin.setRawMode(true);
75
+ }
76
+ process.stdin.resume();
77
+ process.stdin.on('data', onData);
78
+ process.stdin.on('end', onEnd);
79
+ process.stdin.on('close', onEnd);
80
+ console.error('[NativeMessaging] Started, listening on stdin');
81
+ },
82
+ stop: () => {
83
+ if (!running) {
84
+ return;
85
+ }
86
+ running = false;
87
+ process.stdin.removeListener('data', onData);
88
+ process.stdin.removeListener('end', onEnd);
89
+ process.stdin.removeListener('close', onEnd);
90
+ process.stdin.pause();
91
+ },
92
+ };
93
+ };
94
+ //# sourceMappingURL=messaging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../src/native-messaging/messaging.ts"],"names":[],"mappings":"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"}