@vforsh/argus 0.1.11 → 0.1.13

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 (285) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/argus.js +12792 -7821
  3. package/dist/bin.js +4 -47
  4. package/dist/bin.js.map +1 -1
  5. package/dist/cdp/sendCdpCommand.d.ts +6 -2
  6. package/dist/cdp/sendCdpCommand.d.ts.map +1 -1
  7. package/dist/cdp/sendCdpCommand.js +18 -12
  8. package/dist/cdp/sendCdpCommand.js.map +1 -1
  9. package/dist/cli/plugins/registerPlugins.d.ts.map +1 -1
  10. package/dist/cli/plugins/registerPlugins.js +1 -1
  11. package/dist/cli/plugins/registerPlugins.js.map +1 -1
  12. package/dist/cli/program.d.ts.map +1 -1
  13. package/dist/cli/program.js +2 -1
  14. package/dist/cli/program.js.map +1 -1
  15. package/dist/cli/register/domCommandBuilder.d.ts +23 -0
  16. package/dist/cli/register/domCommandBuilder.d.ts.map +1 -0
  17. package/dist/cli/register/domCommandBuilder.js +36 -0
  18. package/dist/cli/register/domCommandBuilder.js.map +1 -0
  19. package/dist/cli/register/index.d.ts +4 -0
  20. package/dist/cli/register/index.d.ts.map +1 -0
  21. package/dist/cli/register/index.js +49 -0
  22. package/dist/cli/register/index.js.map +1 -0
  23. package/dist/cli/register/registerAuth.d.ts.map +1 -1
  24. package/dist/cli/register/registerAuth.js +103 -4
  25. package/dist/cli/register/registerAuth.js.map +1 -1
  26. package/dist/cli/register/registerChrome.d.ts.map +1 -1
  27. package/dist/cli/register/registerChrome.js +53 -14
  28. package/dist/cli/register/registerChrome.js.map +1 -1
  29. package/dist/cli/register/registerClick.d.ts.map +1 -1
  30. package/dist/cli/register/registerClick.js +2 -1
  31. package/dist/cli/register/registerClick.js.map +1 -1
  32. package/dist/cli/register/registerDialog.d.ts +3 -0
  33. package/dist/cli/register/registerDialog.d.ts.map +1 -0
  34. package/dist/cli/register/registerDialog.js +45 -0
  35. package/dist/cli/register/registerDialog.js.map +1 -0
  36. package/dist/cli/register/registerDom.d.ts.map +1 -1
  37. package/dist/cli/register/registerDom.js +142 -121
  38. package/dist/cli/register/registerDom.js.map +1 -1
  39. package/dist/cli/register/registerEval.js +1 -1
  40. package/dist/cli/register/registerEval.js.map +1 -1
  41. package/dist/cli/register/registerFill.d.ts.map +1 -1
  42. package/dist/cli/register/registerFill.js +4 -3
  43. package/dist/cli/register/registerFill.js.map +1 -1
  44. package/dist/cli/register/registerHover.d.ts.map +1 -1
  45. package/dist/cli/register/registerHover.js +2 -1
  46. package/dist/cli/register/registerHover.js.map +1 -1
  47. package/dist/cli/register/registerLocate.d.ts +3 -0
  48. package/dist/cli/register/registerLocate.d.ts.map +1 -0
  49. package/dist/cli/register/registerLocate.js +48 -0
  50. package/dist/cli/register/registerLocate.js.map +1 -0
  51. package/dist/cli/register/registerNet.d.ts.map +1 -1
  52. package/dist/cli/register/registerNet.js +234 -13
  53. package/dist/cli/register/registerNet.js.map +1 -1
  54. package/dist/cli/register/registerQuickAccess.d.ts.map +1 -1
  55. package/dist/cli/register/registerQuickAccess.js +33 -3
  56. package/dist/cli/register/registerQuickAccess.js.map +1 -1
  57. package/dist/cli/register/registerStorage.d.ts.map +1 -1
  58. package/dist/cli/register/registerStorage.js +26 -21
  59. package/dist/cli/register/registerStorage.js.map +1 -1
  60. package/dist/cli/validation.d.ts +1 -0
  61. package/dist/cli/validation.d.ts.map +1 -1
  62. package/dist/cli/validation.js +1 -0
  63. package/dist/cli/validation.js.map +1 -1
  64. package/dist/commands/auth.d.ts +39 -18
  65. package/dist/commands/auth.d.ts.map +1 -1
  66. package/dist/commands/auth.js +104 -122
  67. package/dist/commands/auth.js.map +1 -1
  68. package/dist/commands/authCookieSupport.d.ts +54 -0
  69. package/dist/commands/authCookieSupport.d.ts.map +1 -0
  70. package/dist/commands/authCookieSupport.js +206 -0
  71. package/dist/commands/authCookieSupport.js.map +1 -0
  72. package/dist/commands/authCookies.d.ts +60 -0
  73. package/dist/commands/authCookies.d.ts.map +1 -0
  74. package/dist/commands/authCookies.js +149 -0
  75. package/dist/commands/authCookies.js.map +1 -0
  76. package/dist/commands/chrome/authState.d.ts +23 -0
  77. package/dist/commands/chrome/authState.d.ts.map +1 -0
  78. package/dist/commands/chrome/authState.js +97 -0
  79. package/dist/commands/chrome/authState.js.map +1 -0
  80. package/dist/commands/chrome/browser.d.ts +5 -0
  81. package/dist/commands/chrome/browser.d.ts.map +1 -0
  82. package/dist/commands/chrome/browser.js +71 -0
  83. package/dist/commands/chrome/browser.js.map +1 -0
  84. package/dist/commands/chrome/processes.d.ts +24 -0
  85. package/dist/commands/chrome/processes.d.ts.map +1 -0
  86. package/dist/commands/chrome/processes.js +115 -0
  87. package/dist/commands/chrome/processes.js.map +1 -0
  88. package/dist/commands/chrome/shared.d.ts +31 -0
  89. package/dist/commands/chrome/shared.d.ts.map +1 -0
  90. package/dist/commands/chrome/shared.js +48 -0
  91. package/dist/commands/chrome/shared.js.map +1 -0
  92. package/dist/commands/chrome/targets.d.ts +26 -0
  93. package/dist/commands/chrome/targets.d.ts.map +1 -0
  94. package/dist/commands/chrome/targets.js +240 -0
  95. package/dist/commands/chrome/targets.js.map +1 -0
  96. package/dist/commands/chrome.d.ts +6 -63
  97. package/dist/commands/chrome.d.ts.map +1 -1
  98. package/dist/commands/chrome.js +3 -511
  99. package/dist/commands/chrome.js.map +1 -1
  100. package/dist/commands/chromeStart.d.ts +1 -0
  101. package/dist/commands/chromeStart.d.ts.map +1 -1
  102. package/dist/commands/chromeStart.js +28 -3
  103. package/dist/commands/chromeStart.js.map +1 -1
  104. package/dist/commands/code.d.ts.map +1 -1
  105. package/dist/commands/code.js +9 -1
  106. package/dist/commands/code.js.map +1 -1
  107. package/dist/commands/dialog.d.ts +13 -0
  108. package/dist/commands/dialog.d.ts.map +1 -0
  109. package/dist/commands/dialog.js +71 -0
  110. package/dist/commands/dialog.js.map +1 -0
  111. package/dist/commands/dom/shared.d.ts +16 -0
  112. package/dist/commands/dom/shared.d.ts.map +1 -0
  113. package/dist/commands/dom/shared.js +69 -0
  114. package/dist/commands/dom/shared.js.map +1 -0
  115. package/dist/commands/domAdd.d.ts.map +1 -1
  116. package/dist/commands/domAdd.js +11 -27
  117. package/dist/commands/domAdd.js.map +1 -1
  118. package/dist/commands/domClick.d.ts +1 -0
  119. package/dist/commands/domClick.d.ts.map +1 -1
  120. package/dist/commands/domClick.js +32 -48
  121. package/dist/commands/domClick.js.map +1 -1
  122. package/dist/commands/domFill.d.ts +1 -0
  123. package/dist/commands/domFill.d.ts.map +1 -1
  124. package/dist/commands/domFill.js +21 -38
  125. package/dist/commands/domFill.js.map +1 -1
  126. package/dist/commands/domFocus.d.ts +2 -1
  127. package/dist/commands/domFocus.d.ts.map +1 -1
  128. package/dist/commands/domFocus.js +12 -26
  129. package/dist/commands/domFocus.js.map +1 -1
  130. package/dist/commands/domHover.d.ts +2 -1
  131. package/dist/commands/domHover.d.ts.map +1 -1
  132. package/dist/commands/domHover.js +12 -26
  133. package/dist/commands/domHover.js.map +1 -1
  134. package/dist/commands/domInfo.d.ts +2 -1
  135. package/dist/commands/domInfo.d.ts.map +1 -1
  136. package/dist/commands/domInfo.js +11 -25
  137. package/dist/commands/domInfo.js.map +1 -1
  138. package/dist/commands/domModify.d.ts.map +1 -1
  139. package/dist/commands/domModify.js +14 -26
  140. package/dist/commands/domModify.js.map +1 -1
  141. package/dist/commands/domRemove.d.ts.map +1 -1
  142. package/dist/commands/domRemove.js +10 -25
  143. package/dist/commands/domRemove.js.map +1 -1
  144. package/dist/commands/domScroll.d.ts.map +1 -1
  145. package/dist/commands/domScroll.js +7 -33
  146. package/dist/commands/domScroll.js.map +1 -1
  147. package/dist/commands/domScrollTo.d.ts.map +1 -1
  148. package/dist/commands/domScrollTo.js +7 -33
  149. package/dist/commands/domScrollTo.js.map +1 -1
  150. package/dist/commands/domSetFile.d.ts.map +1 -1
  151. package/dist/commands/domSetFile.js +14 -36
  152. package/dist/commands/domSetFile.js.map +1 -1
  153. package/dist/commands/domTree.d.ts.map +1 -1
  154. package/dist/commands/domTree.js +12 -27
  155. package/dist/commands/domTree.js.map +1 -1
  156. package/dist/commands/extension/setup.js +1 -1
  157. package/dist/commands/extension/setup.js.map +1 -1
  158. package/dist/commands/locate.d.ts +17 -0
  159. package/dist/commands/locate.d.ts.map +1 -0
  160. package/dist/commands/locate.js +117 -0
  161. package/dist/commands/locate.js.map +1 -0
  162. package/dist/commands/net.d.ts +2 -5
  163. package/dist/commands/net.d.ts.map +1 -1
  164. package/dist/commands/net.js +5 -7
  165. package/dist/commands/net.js.map +1 -1
  166. package/dist/commands/netBody.d.ts +6 -0
  167. package/dist/commands/netBody.d.ts.map +1 -0
  168. package/dist/commands/netBody.js +32 -0
  169. package/dist/commands/netBody.js.map +1 -0
  170. package/dist/commands/netCapture.d.ts +36 -0
  171. package/dist/commands/netCapture.d.ts.map +1 -0
  172. package/dist/commands/netCapture.js +105 -0
  173. package/dist/commands/netCapture.js.map +1 -0
  174. package/dist/commands/netClear.d.ts +5 -0
  175. package/dist/commands/netClear.d.ts.map +1 -0
  176. package/dist/commands/netClear.js +20 -0
  177. package/dist/commands/netClear.js.map +1 -0
  178. package/dist/commands/netExport.d.ts +13 -0
  179. package/dist/commands/netExport.d.ts.map +1 -0
  180. package/dist/commands/netExport.js +124 -0
  181. package/dist/commands/netExport.js.map +1 -0
  182. package/dist/commands/netInspect.d.ts +12 -0
  183. package/dist/commands/netInspect.d.ts.map +1 -0
  184. package/dist/commands/netInspect.js +205 -0
  185. package/dist/commands/netInspect.js.map +1 -0
  186. package/dist/commands/netRequestClient.d.ts +17 -0
  187. package/dist/commands/netRequestClient.d.ts.map +1 -0
  188. package/dist/commands/netRequestClient.js +54 -0
  189. package/dist/commands/netRequestClient.js.map +1 -0
  190. package/dist/commands/netRequestTarget.d.ts +14 -0
  191. package/dist/commands/netRequestTarget.d.ts.map +1 -0
  192. package/dist/commands/netRequestTarget.js +36 -0
  193. package/dist/commands/netRequestTarget.js.map +1 -0
  194. package/dist/commands/netShared.d.ts +40 -0
  195. package/dist/commands/netShared.d.ts.map +1 -0
  196. package/dist/commands/netShared.js +108 -0
  197. package/dist/commands/netShared.js.map +1 -0
  198. package/dist/commands/netShow.d.ts +5 -0
  199. package/dist/commands/netShow.d.ts.map +1 -0
  200. package/dist/commands/netShow.js +28 -0
  201. package/dist/commands/netShow.js.map +1 -0
  202. package/dist/commands/netSummary.d.ts +6 -0
  203. package/dist/commands/netSummary.d.ts.map +1 -0
  204. package/dist/commands/netSummary.js +99 -0
  205. package/dist/commands/netSummary.js.map +1 -0
  206. package/dist/commands/netTail.d.ts +2 -5
  207. package/dist/commands/netTail.d.ts.map +1 -1
  208. package/dist/commands/netTail.js +7 -15
  209. package/dist/commands/netTail.js.map +1 -1
  210. package/dist/commands/netWatch.d.ts +11 -0
  211. package/dist/commands/netWatch.d.ts.map +1 -0
  212. package/dist/commands/netWatch.js +55 -0
  213. package/dist/commands/netWatch.js.map +1 -0
  214. package/dist/commands/resolveTestId.d.ts +2 -1
  215. package/dist/commands/resolveTestId.d.ts.map +1 -1
  216. package/dist/commands/resolveTestId.js +3 -3
  217. package/dist/commands/resolveTestId.js.map +1 -1
  218. package/dist/commands/start.d.ts +2 -1
  219. package/dist/commands/start.d.ts.map +1 -1
  220. package/dist/commands/start.js +77 -49
  221. package/dist/commands/start.js.map +1 -1
  222. package/dist/commands/storage.d.ts +17 -0
  223. package/dist/commands/storage.d.ts.map +1 -0
  224. package/dist/commands/storage.js +67 -0
  225. package/dist/commands/storage.js.map +1 -0
  226. package/dist/commands/watcherNativeHost.d.ts.map +1 -1
  227. package/dist/commands/watcherNativeHost.js +13 -2
  228. package/dist/commands/watcherNativeHost.js.map +1 -1
  229. package/dist/commands/watcherSession.d.ts +29 -0
  230. package/dist/commands/watcherSession.d.ts.map +1 -0
  231. package/dist/commands/watcherSession.js +64 -0
  232. package/dist/commands/watcherSession.js.map +1 -0
  233. package/dist/commands/watcherStart.d.ts +1 -1
  234. package/dist/commands/watcherStart.d.ts.map +1 -1
  235. package/dist/commands/watcherStart.js +15 -40
  236. package/dist/commands/watcherStart.js.map +1 -1
  237. package/dist/config/argusConfig.d.ts.map +1 -1
  238. package/dist/config/argusConfig.js +69 -81
  239. package/dist/config/argusConfig.js.map +1 -1
  240. package/dist/net/har.d.ts +86 -0
  241. package/dist/net/har.d.ts.map +1 -0
  242. package/dist/net/har.js +125 -0
  243. package/dist/net/har.js.map +1 -0
  244. package/dist/net/summary.d.ts +33 -0
  245. package/dist/net/summary.d.ts.map +1 -0
  246. package/dist/net/summary.js +128 -0
  247. package/dist/net/summary.js.map +1 -0
  248. package/dist/output/accessibility.js +16 -12
  249. package/dist/output/accessibility.js.map +1 -1
  250. package/dist/output/code.d.ts +2 -1
  251. package/dist/output/code.d.ts.map +1 -1
  252. package/dist/output/code.js +10 -0
  253. package/dist/output/code.js.map +1 -1
  254. package/dist/output/dom.d.ts.map +1 -1
  255. package/dist/output/dom.js +2 -1
  256. package/dist/output/dom.js.map +1 -1
  257. package/dist/output/format.d.ts +1 -3
  258. package/dist/output/format.d.ts.map +1 -1
  259. package/dist/output/format.js +0 -8
  260. package/dist/output/format.js.map +1 -1
  261. package/dist/output/locate.d.ts +3 -0
  262. package/dist/output/locate.d.ts.map +1 -0
  263. package/dist/output/locate.js +25 -0
  264. package/dist/output/locate.js.map +1 -0
  265. package/dist/output/net.d.ts +13 -0
  266. package/dist/output/net.d.ts.map +1 -0
  267. package/dist/output/net.js +239 -0
  268. package/dist/output/net.js.map +1 -0
  269. package/dist/watchers/queryParams.d.ts +17 -0
  270. package/dist/watchers/queryParams.d.ts.map +1 -1
  271. package/dist/watchers/queryParams.js +61 -0
  272. package/dist/watchers/queryParams.js.map +1 -1
  273. package/dist/watchers/requestWatcher.d.ts +13 -1
  274. package/dist/watchers/requestWatcher.d.ts.map +1 -1
  275. package/dist/watchers/requestWatcher.js +32 -0
  276. package/dist/watchers/requestWatcher.js.map +1 -1
  277. package/package.json +2 -5
  278. package/dist/commands/storageLocal.d.ts +0 -18
  279. package/dist/commands/storageLocal.d.ts.map +0 -1
  280. package/dist/commands/storageLocal.js +0 -92
  281. package/dist/commands/storageLocal.js.map +0 -1
  282. package/dist/plugin.d.ts +0 -29
  283. package/dist/plugin.d.ts.map +0 -1
  284. package/dist/plugin.js +0 -2
  285. package/dist/plugin.js.map +0 -1
@@ -1,512 +1,4 @@
1
- import { execFile } from 'node:child_process';
2
- import { resolveCdpEndpoint } from '../cdp/resolveCdpEndpoint.js';
3
- import { sendCdpCommand } from '../cdp/sendCdpCommand.js';
4
- import { filterTargets, selectTargetFromCandidates } from '../cdp/selectTarget.js';
5
- import { fetchJson, fetchText } from '../httpClient.js';
6
- import { createOutput } from '../output/io.js';
7
- import { resolveWatcher } from '../watchers/resolveWatcher.js';
8
- const normalizeUrl = (url) => {
9
- if (url.startsWith('http://') || url.startsWith('https://')) {
10
- return url;
11
- }
12
- return `http://${url}`;
13
- };
14
- export const runChromeVersion = async (options) => {
15
- const output = createOutput(options);
16
- const endpoint = await resolveCdpEndpoint(options);
17
- if (!endpoint.ok) {
18
- output.writeWarn(endpoint.error);
19
- process.exitCode = endpoint.exitCode;
20
- return;
21
- }
22
- const url = `http://${endpoint.host}:${endpoint.port}/json/version`;
23
- let response;
24
- try {
25
- response = await fetchJson(url);
26
- }
27
- catch (error) {
28
- output.writeWarn(`Failed to connect to Chrome at ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
29
- process.exitCode = 1;
30
- return;
31
- }
32
- if (options.json) {
33
- output.writeJson(response);
34
- }
35
- else {
36
- output.writeHuman(`Browser: ${response.Browser}`);
37
- output.writeHuman(`WebSocket: ${response.webSocketDebuggerUrl}`);
38
- }
39
- };
40
- export const runChromeStatus = async (options) => {
41
- const output = createOutput(options);
42
- const endpoint = await resolveCdpEndpoint(options);
43
- if (!endpoint.ok) {
44
- output.writeWarn(endpoint.error);
45
- process.exitCode = endpoint.exitCode;
46
- return;
47
- }
48
- const url = `http://${endpoint.host}:${endpoint.port}/json/version`;
49
- let response;
50
- try {
51
- response = await fetchJson(url);
52
- }
53
- catch (error) {
54
- output.writeWarn(`Failed to connect to Chrome at ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
55
- process.exitCode = 1;
56
- return;
57
- }
58
- if (!response.Browser) {
59
- output.writeWarn(`invalid response from ${endpoint.host}:${endpoint.port}`);
60
- process.exitCode = 1;
61
- return;
62
- }
63
- if (options.json) {
64
- output.writeJson(response);
65
- }
66
- else {
67
- output.writeHuman(`ok ${endpoint.host}:${endpoint.port} ${response.Browser}`);
68
- }
69
- };
70
- export const runChromeTargets = async (options) => {
71
- const output = createOutput(options);
72
- if (options.id) {
73
- const resolved = await resolveWatcher({ id: options.id });
74
- if (!resolved.ok) {
75
- output.writeWarn(resolved.error);
76
- process.exitCode = resolved.exitCode;
77
- return;
78
- }
79
- if (resolved.watcher.source === 'extension') {
80
- let targets;
81
- try {
82
- const response = await fetchJson(`http://${resolved.watcher.host}:${resolved.watcher.port}/targets`);
83
- targets = response.targets;
84
- }
85
- catch (error) {
86
- output.writeWarn(`Failed to load watcher targets from ${resolved.watcher.id}: ${error instanceof Error ? error.message : error}`);
87
- process.exitCode = 1;
88
- return;
89
- }
90
- renderTargets(targets, { output, type: options.type, tree: options.tree, json: options.json });
91
- return;
92
- }
93
- }
94
- const endpoint = await resolveCdpEndpoint(options);
95
- if (!endpoint.ok) {
96
- output.writeWarn(endpoint.error);
97
- process.exitCode = endpoint.exitCode;
98
- return;
99
- }
100
- const url = `http://${endpoint.host}:${endpoint.port}/json/list`;
101
- let targets;
102
- try {
103
- targets = await fetchJson(url);
104
- }
105
- catch (error) {
106
- output.writeWarn(`Failed to connect to Chrome at ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
107
- process.exitCode = 1;
108
- return;
109
- }
110
- renderTargets(targets, { output, type: options.type, tree: options.tree, json: options.json });
111
- };
112
- const renderTargets = (targets, options) => {
113
- let filteredTargets = targets;
114
- if (options.type) {
115
- filteredTargets = filteredTargets.filter((target) => target.type === options.type);
116
- }
117
- if (options.json) {
118
- options.output.writeJson(filteredTargets);
119
- return;
120
- }
121
- if (options.tree) {
122
- renderTargetTree(filteredTargets, options.output);
123
- return;
124
- }
125
- for (const target of filteredTargets) {
126
- const title = target.title ? ` ${target.title}` : '';
127
- const targetUrl = target.url ? ` ${target.url}` : '';
128
- const parentInfo = target.parentId ? ` [parent: ${target.parentId.slice(0, 8)}...]` : '';
129
- options.output.writeHuman(`${target.id} ${target.type}${title}${targetUrl}${parentInfo}`);
130
- }
131
- };
132
- /**
133
- * Render targets as a tree showing parent-child relationships.
134
- */
135
- const renderTargetTree = (targets, output) => {
136
- // Build lookup maps
137
- const targetById = new Map(targets.map((t) => [t.id, t]));
138
- const childrenByParent = new Map();
139
- for (const target of targets) {
140
- const parentId = target.parentId ?? null;
141
- const children = childrenByParent.get(parentId) ?? [];
142
- children.push(target);
143
- childrenByParent.set(parentId, children);
144
- }
145
- // Find root targets (no parent or parent not in our list)
146
- const roots = targets.filter((t) => !t.parentId || !targetById.has(t.parentId));
147
- const renderNode = (target, prefix, isLast) => {
148
- const connector = isLast ? '└── ' : '├── ';
149
- const title = target.title || '(untitled)';
150
- const shortId = target.id.slice(0, 8) + '...';
151
- output.writeHuman(`${prefix}${connector}${title} (${target.type}, ${shortId})`);
152
- output.writeHuman(`${prefix}${isLast ? ' ' : '│ '}${target.url}`);
153
- const children = childrenByParent.get(target.id) ?? [];
154
- children.forEach((child, index) => {
155
- const childIsLast = index === children.length - 1;
156
- renderNode(child, prefix + (isLast ? ' ' : '│ '), childIsLast);
157
- });
158
- };
159
- if (roots.length === 0) {
160
- output.writeHuman('(no targets)');
161
- return;
162
- }
163
- roots.forEach((root, index) => {
164
- const isLast = index === roots.length - 1;
165
- const title = root.title || '(untitled)';
166
- const shortId = root.id.slice(0, 8) + '...';
167
- output.writeHuman(`${title} (${root.type}, ${shortId})`);
168
- output.writeHuman(`${root.url}`);
169
- const children = childrenByParent.get(root.id) ?? [];
170
- children.forEach((child, childIndex) => {
171
- const childIsLast = childIndex === children.length - 1;
172
- renderNode(child, '', childIsLast);
173
- });
174
- if (!isLast) {
175
- output.writeHuman('');
176
- }
177
- });
178
- };
179
- export const runChromeOpen = async (options) => {
180
- const output = createOutput(options);
181
- if (!options.url || options.url.trim() === '') {
182
- output.writeWarn('--url is required.');
183
- process.exitCode = 2;
184
- return;
185
- }
186
- const endpoint = await resolveCdpEndpoint(options);
187
- if (!endpoint.ok) {
188
- output.writeWarn(endpoint.error);
189
- process.exitCode = endpoint.exitCode;
190
- return;
191
- }
192
- const normalizedUrl = normalizeUrl(options.url.trim());
193
- const encodedUrl = encodeURIComponent(normalizedUrl);
194
- const url = `http://${endpoint.host}:${endpoint.port}/json/new?${encodedUrl}`;
195
- let target;
196
- try {
197
- target = await fetchJson(url, { method: 'PUT' });
198
- }
199
- catch (error) {
200
- output.writeWarn(`Failed to open tab: ${error instanceof Error ? error.message : error}`);
201
- process.exitCode = 1;
202
- return;
203
- }
204
- if (options.json) {
205
- output.writeJson(target);
206
- }
207
- else {
208
- output.writeHuman(`${target.id} ${target.url}`);
209
- }
210
- };
211
- export const runChromeActivate = async (options) => {
212
- const output = createOutput(options);
213
- const targetIdInput = options.targetId?.trim();
214
- const hasTargetId = Boolean(targetIdInput);
215
- const hasFilters = Boolean(options.title || options.url || options.match);
216
- if (hasTargetId && hasFilters) {
217
- output.writeWarn('Cannot combine targetId with --title/--url/--match.');
218
- process.exitCode = 2;
219
- return;
220
- }
221
- if (!hasTargetId && !hasFilters) {
222
- output.writeWarn('targetId or --title/--url/--match is required.');
223
- process.exitCode = 2;
224
- return;
225
- }
226
- const endpoint = await resolveCdpEndpoint(options);
227
- if (!endpoint.ok) {
228
- output.writeWarn(endpoint.error);
229
- process.exitCode = endpoint.exitCode;
230
- return;
231
- }
232
- let targetId = targetIdInput;
233
- if (!targetId) {
234
- const url = `http://${endpoint.host}:${endpoint.port}/json/list`;
235
- let targets;
236
- try {
237
- targets = await fetchJson(url);
238
- }
239
- catch (error) {
240
- output.writeWarn(`Failed to load targets from ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
241
- process.exitCode = 1;
242
- return;
243
- }
244
- const candidates = filterTargets(targets, { title: options.title, url: options.url, match: options.match });
245
- const selection = await selectTargetFromCandidates(candidates, output, {
246
- interactive: process.stdin.isTTY === true,
247
- messages: {
248
- empty: 'No targets matched the provided filters.',
249
- ambiguous: 'Multiple targets matched. Provide a narrower filter or a targetId.',
250
- },
251
- });
252
- if (!selection.ok) {
253
- output.writeWarn(selection.error);
254
- process.exitCode = selection.exitCode;
255
- return;
256
- }
257
- targetId = selection.target.id;
258
- }
259
- const activateUrl = `http://${endpoint.host}:${endpoint.port}/json/activate/${targetId}`;
260
- try {
261
- await fetchText(activateUrl);
262
- }
263
- catch (error) {
264
- output.writeWarn(`Failed to activate target: ${error instanceof Error ? error.message : error}`);
265
- process.exitCode = 1;
266
- return;
267
- }
268
- if (options.json) {
269
- output.writeJson({ activated: targetId });
270
- }
271
- else {
272
- output.writeHuman(`activated ${targetId}`);
273
- }
274
- };
275
- export const runChromeClose = async (options) => {
276
- const output = createOutput(options);
277
- if (!options.targetId || options.targetId.trim() === '') {
278
- output.writeWarn('targetId is required.');
279
- process.exitCode = 2;
280
- return;
281
- }
282
- const endpoint = await resolveCdpEndpoint(options);
283
- if (!endpoint.ok) {
284
- output.writeWarn(endpoint.error);
285
- process.exitCode = endpoint.exitCode;
286
- return;
287
- }
288
- const targetId = options.targetId.trim();
289
- const url = `http://${endpoint.host}:${endpoint.port}/json/close/${targetId}`;
290
- try {
291
- await fetchText(url);
292
- }
293
- catch (error) {
294
- output.writeWarn(`Failed to close target: ${error instanceof Error ? error.message : error}`);
295
- process.exitCode = 1;
296
- return;
297
- }
298
- if (options.json) {
299
- output.writeJson({ closed: targetId });
300
- }
301
- else {
302
- output.writeHuman(`closed ${targetId}`);
303
- }
304
- };
305
- export const runChromeStop = async (options) => {
306
- const output = createOutput(options);
307
- const endpoint = await resolveCdpEndpoint(options);
308
- if (!endpoint.ok) {
309
- output.writeWarn(endpoint.error);
310
- process.exitCode = endpoint.exitCode;
311
- return;
312
- }
313
- const url = `http://${endpoint.host}:${endpoint.port}/json/version`;
314
- let response;
315
- try {
316
- response = await fetchJson(url);
317
- }
318
- catch (error) {
319
- output.writeWarn(`Failed to connect to Chrome at ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
320
- process.exitCode = 1;
321
- return;
322
- }
323
- if (!response.webSocketDebuggerUrl) {
324
- output.writeWarn(`No browser WebSocket endpoint exposed at ${endpoint.host}:${endpoint.port}.`);
325
- process.exitCode = 1;
326
- return;
327
- }
328
- try {
329
- await sendCdpCommand(response.webSocketDebuggerUrl, { id: 1, method: 'Browser.close' });
330
- }
331
- catch (error) {
332
- output.writeWarn(`Failed to close Chrome at ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
333
- process.exitCode = 1;
334
- return;
335
- }
336
- if (options.json) {
337
- output.writeJson({ closed: true, host: endpoint.host, port: endpoint.port });
338
- }
339
- else {
340
- output.writeHuman(`closed ${endpoint.host}:${endpoint.port}`);
341
- }
342
- };
343
- export const runChromeReload = async (options) => {
344
- const output = createOutput(options);
345
- if (!options.targetId || options.targetId.trim() === '') {
346
- output.writeWarn('targetId is required.');
347
- process.exitCode = 2;
348
- return;
349
- }
350
- const endpoint = await resolveCdpEndpoint(options);
351
- if (!endpoint.ok) {
352
- output.writeWarn(endpoint.error);
353
- process.exitCode = endpoint.exitCode;
354
- return;
355
- }
356
- const targetId = options.targetId.trim();
357
- const targetsUrl = `http://${endpoint.host}:${endpoint.port}/json/list`;
358
- let targets;
359
- try {
360
- targets = await fetchJson(targetsUrl);
361
- }
362
- catch (error) {
363
- output.writeWarn(`Failed to load targets from ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
364
- process.exitCode = 1;
365
- return;
366
- }
367
- const target = targets.find((entry) => entry.id === targetId);
368
- if (!target) {
369
- output.writeWarn(`Target not found: ${targetId}`);
370
- process.exitCode = 2;
371
- return;
372
- }
373
- if (!target.webSocketDebuggerUrl) {
374
- output.writeWarn(`Target ${targetId} has no webSocketDebuggerUrl.`);
375
- process.exitCode = 1;
376
- return;
377
- }
378
- try {
379
- await sendCdpCommand(target.webSocketDebuggerUrl, { id: 1, method: 'Page.reload' });
380
- }
381
- catch (error) {
382
- output.writeWarn(`Failed to reload target ${targetId}: ${error instanceof Error ? error.message : error}`);
383
- process.exitCode = 1;
384
- return;
385
- }
386
- if (options.json) {
387
- output.writeJson({ reloaded: targetId, url: target.url });
388
- }
389
- else {
390
- output.writeHuman(`reloaded ${targetId}`);
391
- }
392
- };
393
- /** Discover reachable Chrome instances with CDP enabled. */
394
- export const discoverChromeInstances = async (options) => {
395
- const ports = await discoverChromeCdpPorts();
396
- if (ports.length === 0)
397
- return [];
398
- const results = await Promise.all(ports.map(async ({ port, pid }) => {
399
- try {
400
- const [version, targets] = await Promise.all([
401
- fetchJson(`http://127.0.0.1:${port}/json/version`, { timeoutMs: 2_000 }),
402
- fetchJson(`http://127.0.0.1:${port}/json/list`, { timeoutMs: 2_000 }),
403
- ]);
404
- const userPages = targets.filter((t) => t.type === 'page' && isUserPage(t.url));
405
- return {
406
- port,
407
- pid,
408
- reachable: true,
409
- browser: version.Browser,
410
- webSocketDebuggerUrl: version.webSocketDebuggerUrl,
411
- targets: targets.length,
412
- pages: userPages.length,
413
- ...(options?.pages && { pageDetails: userPages.map((p) => ({ title: p.title, url: p.url })) }),
414
- };
415
- }
416
- catch {
417
- return { port, pid, reachable: false };
418
- }
419
- }));
420
- return results.filter((r) => r.reachable);
421
- };
422
- /** Format a Chrome instance as a human-readable line. */
423
- export const formatChromeInstanceLine = (r) => `127.0.0.1:${r.port} pid=${r.pid} ${r.browser} ${r.pages} page${r.pages === 1 ? '' : 's'}`;
424
- export const runChromeList = async (options) => {
425
- const output = createOutput(options);
426
- const ports = await discoverChromeCdpPorts();
427
- if (ports.length === 0) {
428
- output.writeHuman('No Chrome instances found listening on TCP ports.');
429
- return;
430
- }
431
- const instances = await discoverChromeInstances(options);
432
- if (instances.length === 0) {
433
- output.writeHuman('Found Chrome processes listening on TCP, but none responded to CDP.');
434
- return;
435
- }
436
- if (options.json) {
437
- output.writeJson(instances);
438
- }
439
- else {
440
- for (const r of instances) {
441
- output.writeHuman(formatChromeInstanceLine(r));
442
- if (r.pageDetails) {
443
- for (const p of r.pageDetails) {
444
- output.writeHuman(` ${p.title} — ${p.url}`);
445
- }
446
- }
447
- }
448
- }
449
- };
450
- /**
451
- * Chrome-internal URLs that CDP reports as `type: "page"` but are not user-visible tabs.
452
- * Covers omnibox popups, NTP sub-frames, side panels, and other top-chrome UI surfaces.
453
- */
454
- const CHROME_INTERNAL_URL_PATTERN = /^(devtools|chrome-untrusted):\/\/|\.top-chrome\/|^chrome:\/\/newtab-footer\b/;
455
- /** Whether a CDP target URL represents a real user-visible page (tab). */
456
- const isUserPage = (url) => !CHROME_INTERNAL_URL_PATTERN.test(url);
457
- /**
458
- * Match Chrome/Chromium process names in lsof output.
459
- * With `+c 0`, macOS lsof escapes spaces as `\x20` (e.g. `Google\x20Chrome`).
460
- */
461
- const CHROME_NAME_PATTERN = /\b(google(\s|\\x20)*chrome|chromium|chrome)\b/i;
462
- /**
463
- * Discover Chrome processes listening on TCP ports via `lsof`.
464
- * Returns deduplicated `{ port, pid }` pairs.
465
- */
466
- const discoverChromeCdpPorts = async () => {
467
- let stdout;
468
- try {
469
- stdout = await new Promise((resolve, reject) => {
470
- execFile('lsof', ['+c', '0', '-iTCP', '-sTCP:LISTEN', '-P', '-n'], { timeout: 5_000 }, (error, out) => {
471
- if (error) {
472
- reject(error);
473
- return;
474
- }
475
- resolve(out);
476
- });
477
- });
478
- }
479
- catch {
480
- return [];
481
- }
482
- const seen = new Set();
483
- const results = [];
484
- for (const line of stdout.split('\n')) {
485
- if (!CHROME_NAME_PATTERN.test(line)) {
486
- continue;
487
- }
488
- // lsof columns: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
489
- // With +c 0, COMMAND can contain escaped spaces — PID is the first purely numeric column.
490
- const pidMatch = line.match(/\s+(\d+)\s+/);
491
- if (!pidMatch) {
492
- continue;
493
- }
494
- const pid = parseInt(pidMatch[1], 10);
495
- if (isNaN(pid)) {
496
- continue;
497
- }
498
- // NAME column is last, format: *:PORT or 127.0.0.1:PORT (LISTEN)
499
- const portMatch = line.match(/:(\d+)\s+\(LISTEN\)/);
500
- if (!portMatch) {
501
- continue;
502
- }
503
- const port = parseInt(portMatch[1], 10);
504
- if (isNaN(port) || seen.has(port)) {
505
- continue;
506
- }
507
- seen.add(port);
508
- results.push({ port, pid });
509
- }
510
- return results;
511
- };
1
+ export { runChromeVersion, runChromeStatus, runChromeStop } from './chrome/browser.js';
2
+ export { runChromeTargets, runChromeOpen, runChromeActivate, runChromeClose, runChromeReload } from './chrome/targets.js';
3
+ export { discoverChromeInstances, formatChromeInstanceLine, runChromeList } from './chrome/processes.js';
512
4
  //# sourceMappingURL=chrome.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/commands/chrome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/commands/chrome.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACzH,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA"}
@@ -6,6 +6,7 @@ export type ChromeStartOptions = {
6
6
  profile?: 'temp' | 'default-full' | 'default-medium' | 'default-lite';
7
7
  devTools?: boolean;
8
8
  headless?: boolean;
9
+ authState?: string;
9
10
  };
10
11
  export type LaunchChromeOptions = {
11
12
  url?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"chromeStart.d.ts","sourceRoot":"","sources":["../../src/commands/chromeStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAa7D,MAAM,MAAM,kBAAkB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAA;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAUD,MAAM,MAAM,mBAAmB,GAAG;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAA;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,gFAAgF;IAChF,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,+FAA+F;IAC/F,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC,CAAA;AAsLD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAU,SAAS,mBAAmB,KAAG,OAAO,CAAC,kBAAkB,CA2H3F,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,SAAS,kBAAkB,KAAG,OAAO,CAAC,IAAI,CA0E9E,CAAA"}
1
+ {"version":3,"file":"chromeStart.d.ts","sourceRoot":"","sources":["../../src/commands/chromeStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAc7D,MAAM,MAAM,kBAAkB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAA;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAUD,MAAM,MAAM,mBAAmB,GAAG;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAA;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,gFAAgF;IAChF,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,+FAA+F;IAC/F,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC,CAAA;AA6LD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAU,SAAS,mBAAmB,KAAG,OAAO,CAAC,kBAAkB,CA2H3F,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,SAAS,kBAAkB,KAAG,OAAO,CAAC,IAAI,CA6F9E,CAAA"}
@@ -9,6 +9,7 @@ import { createOutput } from '../output/io.js';
9
9
  import { resolveChromeBin } from '../utils/chromeBin.js';
10
10
  import { getCdpPort } from '../utils/ports.js';
11
11
  import { normalizeHttpUrl, registerTerminationHandlers, waitForever } from './startShared.js';
12
+ import { applyAuthStateToChrome } from './chrome/authState.js';
12
13
  const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
13
14
  const resolveChromeUserDataDir = () => {
14
15
  if (process.env.ARGUS_CHROME_USER_DATA_DIR) {
@@ -155,6 +156,12 @@ const normalizeProfile = (profile) => {
155
156
  }
156
157
  return null;
157
158
  };
159
+ const resolveProfileForChromeStart = (options) => {
160
+ if (!options.authState) {
161
+ return options.profile;
162
+ }
163
+ return 'temp';
164
+ };
158
165
  /**
159
166
  * Launch Chrome with CDP enabled. Returns a handle with the child process,
160
167
  * CDP coordinates, and a cleanup function. Throws on failure.
@@ -302,11 +309,12 @@ export const runChromeStart = async (options) => {
302
309
  else if (options.url) {
303
310
  startupUrl = normalizeHttpUrl(options.url);
304
311
  }
312
+ const profile = resolveProfileForChromeStart(options);
305
313
  let result;
306
314
  try {
307
315
  result = await launchChrome({
308
- url: startupUrl,
309
- profile: options.profile,
316
+ url: options.authState ? null : startupUrl,
317
+ profile: profile ?? options.profile,
310
318
  devTools: options.devTools,
311
319
  headless: options.headless,
312
320
  });
@@ -316,6 +324,23 @@ export const runChromeStart = async (options) => {
316
324
  process.exitCode = 1;
317
325
  return;
318
326
  }
327
+ if (options.authState) {
328
+ try {
329
+ const hydrated = await applyAuthStateToChrome({
330
+ authStatePath: options.authState,
331
+ cdpHost: result.cdpHost,
332
+ cdpPort: result.cdpPort,
333
+ startupUrl,
334
+ });
335
+ startupUrl = hydrated.startupUrl;
336
+ }
337
+ catch (error) {
338
+ await result.closeGracefully();
339
+ output.writeWarn(error instanceof Error ? error.message : String(error));
340
+ process.exitCode = 1;
341
+ return;
342
+ }
343
+ }
319
344
  registerTerminationHandlers(() => result.closeGracefully());
320
345
  result.chrome.on('exit', () => {
321
346
  if (result.userDataDir) {
@@ -331,7 +356,7 @@ export const runChromeStart = async (options) => {
331
356
  cdpHost: result.cdpHost,
332
357
  cdpPort: result.cdpPort,
333
358
  userDataDir: result.userDataDir,
334
- startupUrl: result.startupUrl,
359
+ startupUrl,
335
360
  };
336
361
  if (options.json) {
337
362
  output.writeJson(info);