@vforsh/argus 0.1.4 → 0.1.6

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 (72) hide show
  1. package/README.md +0 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/argus.js +158 -261
  4. package/dist/bin.js +2 -0
  5. package/dist/bin.js.map +1 -1
  6. package/dist/cli/plugins/registerPlugins.d.ts +3 -0
  7. package/dist/cli/plugins/registerPlugins.d.ts.map +1 -0
  8. package/dist/cli/plugins/registerPlugins.js +134 -0
  9. package/dist/cli/plugins/registerPlugins.js.map +1 -0
  10. package/dist/cli/register/registerExtension.d.ts.map +1 -1
  11. package/dist/cli/register/registerExtension.js +0 -9
  12. package/dist/cli/register/registerExtension.js.map +1 -1
  13. package/dist/commands/configInit.d.ts.map +1 -1
  14. package/dist/commands/configInit.js +1 -0
  15. package/dist/commands/configInit.js.map +1 -1
  16. package/dist/commands/contexts.d.ts +7 -0
  17. package/dist/commands/contexts.d.ts.map +1 -0
  18. package/dist/commands/contexts.js +54 -0
  19. package/dist/commands/contexts.js.map +1 -0
  20. package/dist/commands/domDiff.d.ts +43 -0
  21. package/dist/commands/domDiff.d.ts.map +1 -0
  22. package/dist/commands/domDiff.js +279 -0
  23. package/dist/commands/domDiff.js.map +1 -0
  24. package/dist/commands/extension/attach.d.ts +8 -0
  25. package/dist/commands/extension/attach.d.ts.map +1 -0
  26. package/dist/commands/extension/attach.js +171 -0
  27. package/dist/commands/extension/attach.js.map +1 -0
  28. package/dist/commands/extension/detach.d.ts +6 -0
  29. package/dist/commands/extension/detach.d.ts.map +1 -0
  30. package/dist/commands/extension/detach.js +132 -0
  31. package/dist/commands/extension/detach.js.map +1 -0
  32. package/dist/commands/extension/targets.d.ts +13 -0
  33. package/dist/commands/extension/targets.d.ts.map +1 -0
  34. package/dist/commands/extension/targets.js +77 -0
  35. package/dist/commands/extension/targets.js.map +1 -0
  36. package/dist/commands/frames.d.ts +7 -0
  37. package/dist/commands/frames.d.ts.map +1 -0
  38. package/dist/commands/frames.js +90 -0
  39. package/dist/commands/frames.js.map +1 -0
  40. package/dist/config/argusConfig.d.ts +6 -0
  41. package/dist/config/argusConfig.d.ts.map +1 -1
  42. package/dist/config/argusConfig.js +16 -1
  43. package/dist/config/argusConfig.js.map +1 -1
  44. package/dist/frame/frameSelector.d.ts +14 -0
  45. package/dist/frame/frameSelector.d.ts.map +1 -0
  46. package/dist/frame/frameSelector.js +31 -0
  47. package/dist/frame/frameSelector.js.map +1 -0
  48. package/dist/output/domDiff.d.ts +14 -0
  49. package/dist/output/domDiff.d.ts.map +1 -0
  50. package/dist/output/domDiff.js +151 -0
  51. package/dist/output/domDiff.js.map +1 -0
  52. package/dist/plugin.d.ts +29 -0
  53. package/dist/plugin.d.ts.map +1 -0
  54. package/dist/plugin.js +2 -0
  55. package/dist/plugin.js.map +1 -0
  56. package/dist/throttle/networkPresets.d.ts +6 -0
  57. package/dist/throttle/networkPresets.d.ts.map +1 -0
  58. package/dist/throttle/networkPresets.js +24 -0
  59. package/dist/throttle/networkPresets.js.map +1 -0
  60. package/package.json +15 -5
  61. package/dist/commands/extension/doctor.d.ts +0 -5
  62. package/dist/commands/extension/doctor.d.ts.map +0 -1
  63. package/dist/commands/extension/doctor.js +0 -262
  64. package/dist/commands/extension/doctor.js.map +0 -1
  65. package/dist/commands/extension/id.d.ts +0 -9
  66. package/dist/commands/extension/id.d.ts.map +0 -1
  67. package/dist/commands/extension/id.js +0 -122
  68. package/dist/commands/extension/id.js.map +0 -1
  69. package/dist/commands/extension/list.d.ts +0 -8
  70. package/dist/commands/extension/list.d.ts.map +0 -1
  71. package/dist/commands/extension/list.js +0 -194
  72. package/dist/commands/extension/list.js.map +0 -1
@@ -1,262 +0,0 @@
1
- import fs from 'node:fs';
2
- import { constants as fsConstants } from 'node:fs';
3
- import { readRegistry } from '@vforsh/argus-core';
4
- import { createOutput } from '../../output/io.js';
5
- import { fetchJson } from '../../httpClient.js';
6
- import { HOST_NAME, getManifestPath, getPlatform, getWrapperPath, isWrapperExecutable, readManifest } from './nativeHost.js';
7
- export const runExtensionDoctor = async (options) => {
8
- const output = createOutput(options);
9
- let platform;
10
- try {
11
- platform = getPlatform();
12
- }
13
- catch (error) {
14
- const message = error.message;
15
- if (options.json) {
16
- output.writeJson({ ok: false, status: 'fail', checks: [{ id: 'platform', status: 'fail', message }] });
17
- }
18
- else {
19
- output.writeHuman(`FAIL ${message}`);
20
- }
21
- process.exitCode = 1;
22
- return;
23
- }
24
- const checks = [];
25
- const hints = new Set();
26
- const extensionInstallHint = 'Ensure Argus extension is installed and enabled in chrome://extensions (Developer mode for unpacked install).';
27
- hints.add(extensionInstallHint);
28
- const manifestPath = getManifestPath(platform);
29
- const wrapperPath = getWrapperPath(platform);
30
- const manifestExists = fs.existsSync(manifestPath);
31
- const wrapperExists = fs.existsSync(wrapperPath);
32
- const wrapperExecutable = wrapperExists && isWrapperExecutable(wrapperPath);
33
- let extensionId = null;
34
- let manifestValid = false;
35
- let manifestHostValid = false;
36
- let manifestPathExecutable = false;
37
- let manifestPathMatchesWrapper = false;
38
- let manifestPathFromFile = null;
39
- if (manifestExists) {
40
- const manifest = readManifest(manifestPath);
41
- if (manifest) {
42
- manifestPathFromFile = manifest.path;
43
- manifestHostValid = manifest.name === HOST_NAME && manifest.type === 'stdio' && Array.isArray(manifest.allowed_origins);
44
- const origin = manifest.allowed_origins?.[0];
45
- if (origin) {
46
- const match = origin.match(/^chrome-extension:\/\/([^/]+)\/$/);
47
- if (match) {
48
- extensionId = match[1];
49
- }
50
- }
51
- if (manifest.path && fileExecutable(manifest.path)) {
52
- manifestPathExecutable = true;
53
- }
54
- manifestPathMatchesWrapper = manifest.path === wrapperPath;
55
- manifestValid = manifestHostValid && manifestPathExecutable && Boolean(extensionId);
56
- }
57
- }
58
- if (!manifestExists) {
59
- const hint = 'Run: argus extension setup <extensionId> (copy ID from chrome://extensions).';
60
- checks.push({ id: 'native-host-manifest', status: 'fail', message: `manifest not found: ${manifestPath}`, hint });
61
- hints.add(hint);
62
- }
63
- else if (!manifestHostValid) {
64
- const hint = 'Manifest looks invalid. Reinstall host: argus extension setup <extensionId>.';
65
- checks.push({ id: 'native-host-manifest', status: 'fail', message: 'manifest exists but has invalid schema/host fields', hint });
66
- hints.add(hint);
67
- }
68
- else if (!extensionId) {
69
- const hint = 'Manifest has no valid extension origin. Re-run: argus extension setup <extensionId>.';
70
- checks.push({ id: 'native-host-manifest', status: 'fail', message: 'manifest missing chrome-extension origin', hint });
71
- hints.add(hint);
72
- }
73
- else if (!manifestPathExecutable) {
74
- const hint = 'Manifest points to non-executable host path. Re-run: argus extension setup <extensionId>.';
75
- checks.push({
76
- id: 'native-host-manifest',
77
- status: 'fail',
78
- message: `manifest host path is not executable: ${manifestPathFromFile ?? '(unknown)'}`,
79
- hint,
80
- });
81
- hints.add(hint);
82
- }
83
- else {
84
- checks.push({
85
- id: 'native-host-manifest',
86
- status: 'ok',
87
- message: `manifest configured for extension ${extensionId}`,
88
- data: {
89
- path: manifestPath,
90
- extensionId,
91
- },
92
- });
93
- }
94
- if (!wrapperExists) {
95
- const hint = 'Wrapper script missing. Re-run: argus extension setup <extensionId>.';
96
- checks.push({ id: 'native-host-wrapper', status: 'fail', message: `wrapper not found: ${wrapperPath}`, hint });
97
- hints.add(hint);
98
- }
99
- else if (!wrapperExecutable) {
100
- const hint = `Wrapper is not executable. Run: chmod +x "${wrapperPath}" or re-run extension setup.`;
101
- checks.push({ id: 'native-host-wrapper', status: 'fail', message: `wrapper not executable: ${wrapperPath}`, hint });
102
- hints.add(hint);
103
- }
104
- else if (!manifestPathMatchesWrapper) {
105
- const hint = "Manifest path doesn't match wrapper path. Re-run: argus extension setup <extensionId>.";
106
- checks.push({
107
- id: 'native-host-wrapper',
108
- status: 'warn',
109
- message: `wrapper exists (${wrapperPath}) but manifest points to ${manifestPathFromFile ?? '(unknown)'}`,
110
- hint,
111
- });
112
- hints.add(hint);
113
- }
114
- else {
115
- checks.push({ id: 'native-host-wrapper', status: 'ok', message: `wrapper executable: ${wrapperPath}` });
116
- }
117
- const watcherReports = [];
118
- let registryError = null;
119
- try {
120
- const registry = await loadRegistryWithoutStderrWarnings();
121
- const extensionWatchers = Object.values(registry.watchers).filter((entry) => entry.source === 'extension');
122
- if (extensionWatchers.length === 0) {
123
- const hint = 'Start extension mode watcher: argus watcher start --id app --source extension';
124
- checks.push({ id: 'extension-watcher', status: 'warn', message: 'no extension watchers registered', hint });
125
- hints.add(hint);
126
- }
127
- else {
128
- for (const watcher of extensionWatchers) {
129
- const statusResult = await checkWatcherStatus(watcher.host, watcher.port);
130
- if (!statusResult.ok) {
131
- const hint = `Watcher "${watcher.id}" unreachable. Restart it: argus watcher start --id ${watcher.id} --source extension`;
132
- watcherReports.push({
133
- id: watcher.id,
134
- host: watcher.host,
135
- port: watcher.port,
136
- status: 'warn',
137
- message: `unreachable (${statusResult.error})`,
138
- hint,
139
- });
140
- hints.add(hint);
141
- continue;
142
- }
143
- const status = statusResult.status;
144
- if (!status.attached) {
145
- const hint = `Watcher "${watcher.id}" is running but detached. Open extension popup and attach a tab.`;
146
- watcherReports.push({
147
- id: watcher.id,
148
- host: watcher.host,
149
- port: watcher.port,
150
- status: 'warn',
151
- message: 'running but no tabs attached',
152
- hint,
153
- attached: false,
154
- target: status.target,
155
- });
156
- hints.add(hint);
157
- }
158
- else {
159
- watcherReports.push({
160
- id: watcher.id,
161
- host: watcher.host,
162
- port: watcher.port,
163
- status: 'ok',
164
- message: 'running and attached',
165
- attached: true,
166
- target: status.target,
167
- });
168
- }
169
- }
170
- const hasAttachedWatcher = watcherReports.some((report) => report.status === 'ok' && report.attached);
171
- if (!hasAttachedWatcher) {
172
- const hint = 'No attached extension tabs detected. Open the Argus extension popup and click Attach.';
173
- checks.push({ id: 'extension-attach', status: 'warn', message: 'no attached extension tabs', hint });
174
- hints.add(hint);
175
- }
176
- else {
177
- checks.push({ id: 'extension-attach', status: 'ok', message: 'at least one extension watcher is attached' });
178
- }
179
- }
180
- }
181
- catch (error) {
182
- registryError = error instanceof Error ? error.message : String(error);
183
- const hint = 'Run `argus doctor` to inspect registry and environment issues.';
184
- checks.push({ id: 'registry', status: 'warn', message: `failed to read registry (${registryError})`, hint });
185
- hints.add(hint);
186
- }
187
- const hasFail = checks.some((check) => check.status === 'fail');
188
- const hasWarn = checks.some((check) => check.status === 'warn') || watcherReports.some((report) => report.status === 'warn');
189
- const ok = !hasFail && !hasWarn;
190
- const status = hasFail ? 'fail' : hasWarn ? 'warn' : 'ok';
191
- if (options.json) {
192
- output.writeJson({
193
- ok,
194
- status,
195
- hostName: HOST_NAME,
196
- platform,
197
- manifestPath,
198
- wrapperPath,
199
- extensionId,
200
- registryError,
201
- checks,
202
- watchers: watcherReports,
203
- hints: Array.from(hints),
204
- });
205
- if (!ok) {
206
- process.exitCode = 1;
207
- }
208
- return;
209
- }
210
- output.writeHuman('');
211
- output.writeHuman(`Extension doctor: ${status.toUpperCase()}`);
212
- output.writeHuman('');
213
- for (const check of checks) {
214
- output.writeHuman(`${formatStatus(check.status)} ${check.message}`);
215
- }
216
- for (const watcher of watcherReports) {
217
- const target = watcher.target?.title ?? watcher.target?.url;
218
- output.writeHuman(`${formatStatus(watcher.status)} watcher ${watcher.id} ${watcher.host}:${watcher.port} ${watcher.message}${target ? ` (${target})` : ''}`);
219
- }
220
- if (hints.size > 0) {
221
- output.writeHuman('');
222
- output.writeHuman('Hints:');
223
- for (const hint of hints) {
224
- output.writeHuman(` - ${hint}`);
225
- }
226
- }
227
- output.writeHuman('');
228
- if (!ok) {
229
- process.exitCode = 1;
230
- }
231
- };
232
- const loadRegistryWithoutStderrWarnings = async () => {
233
- const { registry } = await readRegistry();
234
- return registry;
235
- };
236
- const checkWatcherStatus = async (host, port) => {
237
- const url = `http://${host}:${port}/status`;
238
- try {
239
- const status = await fetchJson(url, { timeoutMs: 2_000 });
240
- return { ok: true, status };
241
- }
242
- catch (error) {
243
- return { ok: false, error: error instanceof Error ? error.message : String(error) };
244
- }
245
- };
246
- const fileExecutable = (path) => {
247
- try {
248
- fs.accessSync(path, fsConstants.X_OK);
249
- return true;
250
- }
251
- catch {
252
- return false;
253
- }
254
- };
255
- const formatStatus = (status) => {
256
- if (status === 'ok')
257
- return 'OK';
258
- if (status === 'fail')
259
- return 'FAIL';
260
- return 'WARN';
261
- };
262
- //# sourceMappingURL=doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/commands/extension/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export type ExtensionIdOptions = {
2
- query?: string;
3
- json?: boolean;
4
- profile?: string;
5
- userDataDir?: string;
6
- raw?: boolean;
7
- };
8
- export declare const runExtensionId: (options: ExtensionIdOptions) => Promise<void>;
9
- //# sourceMappingURL=id.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/id.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAA;CACb,CAAA;AAMD,eAAO,MAAM,cAAc,GAAU,SAAS,kBAAkB,KAAG,OAAO,CAAC,IAAI,CAuE9E,CAAA"}
@@ -1,122 +0,0 @@
1
- import { createOutput } from '../../output/io.js';
2
- import { discoverInstalledExtensions } from './list.js';
3
- export const runExtensionId = async (options) => {
4
- const output = createOutput(options);
5
- const discovered = discoverInstalledExtensions({
6
- profile: options.profile,
7
- userDataDir: options.userDataDir,
8
- });
9
- if (!discovered.ok) {
10
- if (options.json) {
11
- output.writeJson({ ok: false, error: discovered.error, matches: [] });
12
- }
13
- else {
14
- output.writeHuman('');
15
- output.writeHuman(`WARN ${discovered.error}`);
16
- output.writeHuman('');
17
- }
18
- process.exitCode = 1;
19
- return;
20
- }
21
- const all = discovered.profiles.flatMap((profile) => profile.extensions);
22
- const matcher = buildMatcher(options.query);
23
- const matches = all
24
- .map((extension) => {
25
- const matchBy = matcher(extension);
26
- return matchBy ? { ...extension, matchBy } : null;
27
- })
28
- .filter((entry) => entry !== null);
29
- if (options.json) {
30
- output.writeJson({
31
- ok: matches.length === 1,
32
- query: matcher.label,
33
- matches,
34
- resolvedId: matches.length === 1 ? matches[0].id : null,
35
- });
36
- if (matches.length !== 1) {
37
- process.exitCode = 1;
38
- }
39
- return;
40
- }
41
- output.writeHuman('');
42
- if (matches.length === 0) {
43
- output.writeHuman(`WARN No installed extension matches query: ${matcher.label}`);
44
- output.writeHuman('Hint: run `argus extension list` and search by exact extension name.');
45
- output.writeHuman('');
46
- process.exitCode = 1;
47
- return;
48
- }
49
- if (matches.length > 1) {
50
- output.writeHuman(`WARN Multiple extensions match query: ${matcher.label}`);
51
- for (const match of matches) {
52
- output.writeHuman(` - ${match.id} ${match.name} [profile: ${match.profile}; match: ${match.matchBy}]`);
53
- }
54
- output.writeHuman('Hint: pass a more specific query, e.g. exact ID or full extension name.');
55
- output.writeHuman('');
56
- process.exitCode = 1;
57
- return;
58
- }
59
- const match = matches[0];
60
- if (options.raw) {
61
- output.writeHuman(match.id);
62
- return;
63
- }
64
- output.writeHuman(`Extension ID: ${match.id}`);
65
- output.writeHuman(`Name: ${match.name}`);
66
- output.writeHuman(`Profile: ${match.profile}`);
67
- output.writeHuman('');
68
- };
69
- const buildMatcher = (query) => {
70
- const normalized = query?.trim();
71
- if (!normalized) {
72
- const fn = ((extension) => {
73
- const name = extension.name.toLowerCase();
74
- if (name.includes('argus cdp bridge') || name.includes('argus')) {
75
- return 'name';
76
- }
77
- return null;
78
- });
79
- fn.label = 'argus';
80
- return fn;
81
- }
82
- const regex = parseRegexLiteral(normalized);
83
- if (regex) {
84
- const fn = ((extension) => {
85
- if (regex.test(extension.id))
86
- return 'id';
87
- if (regex.test(extension.name))
88
- return 'name';
89
- return null;
90
- });
91
- fn.label = normalized;
92
- return fn;
93
- }
94
- const needle = normalized.toLowerCase();
95
- const fn = ((extension) => {
96
- if (extension.id === needle || extension.id.includes(needle))
97
- return 'id';
98
- if (extension.name.toLowerCase().includes(needle))
99
- return 'name';
100
- return null;
101
- });
102
- fn.label = normalized;
103
- return fn;
104
- };
105
- const parseRegexLiteral = (input) => {
106
- if (!input.startsWith('/')) {
107
- return null;
108
- }
109
- const lastSlash = input.lastIndexOf('/');
110
- if (lastSlash <= 0) {
111
- return null;
112
- }
113
- const pattern = input.slice(1, lastSlash);
114
- const flags = input.slice(lastSlash + 1);
115
- try {
116
- return new RegExp(pattern, flags);
117
- }
118
- catch {
119
- return null;
120
- }
121
- };
122
- //# sourceMappingURL=id.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../../../src/commands/extension/id.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export type ExtensionListOptions = {
2
- json?: boolean;
3
- profile?: string;
4
- userDataDir?: string;
5
- enabledOnly?: boolean;
6
- };
7
- export declare const runExtensionList: (options: ExtensionListOptions) => Promise<void>;
8
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/list.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAiBD,eAAO,MAAM,gBAAgB,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,IAAI,CA8DlF,CAAA"}
@@ -1,194 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import os from 'node:os';
4
- import { createOutput } from '../../output/io.js';
5
- export const runExtensionList = async (options) => {
6
- const output = createOutput(options);
7
- const userDataDir = resolveChromeUserDataDir(options.userDataDir);
8
- if (!userDataDir) {
9
- const hint = 'Chrome user data dir not found. Set --user-data-dir or ARGUS_CHROME_USER_DATA_DIR.';
10
- if (options.json) {
11
- output.writeJson({ ok: false, error: hint, profiles: [] });
12
- }
13
- else {
14
- output.writeHuman('');
15
- output.writeHuman(`WARN ${hint}`);
16
- output.writeHuman('');
17
- }
18
- process.exitCode = 1;
19
- return;
20
- }
21
- const profiles = discoverProfiles(userDataDir, options.profile);
22
- const reports = profiles.map((profileName) => collectProfileExtensions(userDataDir, profileName, Boolean(options.enabledOnly)));
23
- const populated = reports.filter((report) => report !== null);
24
- if (options.json) {
25
- output.writeJson({
26
- ok: populated.length > 0,
27
- userDataDir,
28
- profiles: populated,
29
- });
30
- if (populated.length === 0) {
31
- process.exitCode = 1;
32
- }
33
- return;
34
- }
35
- output.writeHuman('');
36
- output.writeHuman(`Chrome extensions (best-effort): ${userDataDir}`);
37
- output.writeHuman('');
38
- if (populated.length === 0) {
39
- output.writeHuman('WARN No readable profile Preferences with extension data found.');
40
- output.writeHuman('Hints:');
41
- output.writeHuman(' - Ensure Chrome has been launched at least once.');
42
- output.writeHuman(' - Pass --profile Default or --profile "Profile 1".');
43
- output.writeHuman(' - Pass --user-data-dir to target a specific Chrome profile root.');
44
- output.writeHuman('');
45
- process.exitCode = 1;
46
- return;
47
- }
48
- for (const report of populated) {
49
- output.writeHuman(`Profile: ${report.profile} (${report.extensions.length})`);
50
- for (const extension of report.extensions) {
51
- const version = extension.version ? ` v${extension.version}` : '';
52
- const state = extension.enabled === true
53
- ? 'enabled'
54
- : extension.enabled === false
55
- ? `disabled${extension.state !== null ? `:${extension.state}` : ''}`
56
- : 'unknown';
57
- output.writeHuman(` - ${extension.id} ${extension.name}${version} [${state}]`);
58
- }
59
- }
60
- output.writeHuman('');
61
- };
62
- const resolveChromeUserDataDir = (override) => {
63
- const explicit = override?.trim() || process.env.ARGUS_CHROME_USER_DATA_DIR?.trim();
64
- if (explicit) {
65
- return fs.existsSync(explicit) ? explicit : null;
66
- }
67
- const platform = process.platform;
68
- if (platform === 'darwin') {
69
- const candidates = [
70
- path.join(os.homedir(), 'Library/Application Support/Google/Chrome'),
71
- path.join(os.homedir(), 'Library/Application Support/Chromium'),
72
- ];
73
- return candidates.find((candidate) => fs.existsSync(candidate)) ?? null;
74
- }
75
- if (platform === 'linux') {
76
- const candidates = [path.join(os.homedir(), '.config/google-chrome'), path.join(os.homedir(), '.config/chromium')];
77
- return candidates.find((candidate) => fs.existsSync(candidate)) ?? null;
78
- }
79
- if (platform === 'win32') {
80
- const base = process.env.LOCALAPPDATA;
81
- if (!base) {
82
- return null;
83
- }
84
- const candidates = [path.join(base, 'Google/Chrome/User Data'), path.join(base, 'Chromium/User Data')];
85
- return candidates.find((candidate) => fs.existsSync(candidate)) ?? null;
86
- }
87
- return null;
88
- };
89
- const discoverProfiles = (userDataDir, profile) => {
90
- if (profile?.trim()) {
91
- return [profile.trim()];
92
- }
93
- let names = [];
94
- try {
95
- const entries = fs.readdirSync(userDataDir, { withFileTypes: true });
96
- names = entries
97
- .filter((entry) => entry.isDirectory())
98
- .map((entry) => entry.name)
99
- .filter((name) => name === 'Default' || /^Profile \d+$/.test(name));
100
- }
101
- catch {
102
- return [];
103
- }
104
- return names.sort((a, b) => a.localeCompare(b));
105
- };
106
- const collectProfileExtensions = (userDataDir, profile, enabledOnly) => {
107
- const prefsPaths = [path.join(userDataDir, profile, 'Secure Preferences'), path.join(userDataDir, profile, 'Preferences')];
108
- const existingPaths = prefsPaths.filter((p) => fs.existsSync(p));
109
- if (existingPaths.length === 0) {
110
- return null;
111
- }
112
- const settings = readExtensionSettingsFromPaths(existingPaths);
113
- if (!settings) {
114
- return null;
115
- }
116
- const extensions = Object.entries(settings)
117
- .map(([id, record]) => {
118
- const state = readNumberField(record, 'state');
119
- const manifest = readObjectField(record, 'manifest');
120
- const nameFromManifest = readStringField(manifest, 'name');
121
- const version = readStringField(manifest, 'version');
122
- const enabled = state === null ? null : state === 1;
123
- return {
124
- id,
125
- name: normalizeExtensionName(nameFromManifest) ?? id,
126
- version: version ?? null,
127
- enabled,
128
- state,
129
- profile,
130
- };
131
- })
132
- .filter((entry) => (enabledOnly ? entry.enabled === true : true))
133
- .sort((a, b) => a.name.localeCompare(b.name) || a.id.localeCompare(b.id));
134
- return { profile, preferencesPath: existingPaths, extensions };
135
- };
136
- const readExtensionSettingsFromPaths = (paths) => {
137
- const merged = {};
138
- let found = false;
139
- for (const preferencesPath of paths) {
140
- const settings = readExtensionSettings(preferencesPath);
141
- if (!settings) {
142
- continue;
143
- }
144
- Object.assign(merged, settings);
145
- found = true;
146
- }
147
- return found ? merged : null;
148
- };
149
- const readExtensionSettings = (preferencesPath) => {
150
- try {
151
- const content = fs.readFileSync(preferencesPath, 'utf8');
152
- const parsed = JSON.parse(content);
153
- const extensions = readObjectField(parsed, 'extensions');
154
- const settings = readObjectField(extensions, 'settings');
155
- return settings ?? null;
156
- }
157
- catch {
158
- return null;
159
- }
160
- };
161
- const readObjectField = (value, key) => {
162
- if (!value || typeof value !== 'object') {
163
- return null;
164
- }
165
- const field = value[key];
166
- if (!field || typeof field !== 'object') {
167
- return null;
168
- }
169
- return field;
170
- };
171
- const readStringField = (value, key) => {
172
- if (!value || typeof value !== 'object') {
173
- return null;
174
- }
175
- const field = value[key];
176
- return typeof field === 'string' && field.trim() ? field.trim() : null;
177
- };
178
- const readNumberField = (value, key) => {
179
- if (!value || typeof value !== 'object') {
180
- return null;
181
- }
182
- const field = value[key];
183
- return typeof field === 'number' && Number.isFinite(field) ? field : null;
184
- };
185
- const normalizeExtensionName = (name) => {
186
- if (!name) {
187
- return null;
188
- }
189
- if (name.startsWith('__MSG_') && name.endsWith('__')) {
190
- return null;
191
- }
192
- return name;
193
- };
194
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/extension/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAwBjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAA6B,EAAiB,EAAE;IACtF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAEjE,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,oFAAoF,CAAA;QACjG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACrB,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;YACjC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAC/H,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAA;IAE7D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC;YAChB,EAAE,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;YACxB,WAAW;YACX,QAAQ,EAAE,SAAS;SACnB,CAAC,CAAA;QACF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACrB,CAAC;QACD,OAAM;IACP,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,CAAC,UAAU,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAA;IACpE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAErB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,UAAU,CAAC,iEAAiE,CAAC,CAAA;QACpF,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC3B,MAAM,CAAC,UAAU,CAAC,oDAAoD,CAAC,CAAA;QACvE,MAAM,CAAC,UAAU,CAAC,sDAAsD,CAAC,CAAA;QACzE,MAAM,CAAC,UAAU,CAAC,oEAAoE,CAAC,CAAA;QACvF,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,CAAC,YAAY,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAC7E,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACjE,MAAM,KAAK,GACV,SAAS,CAAC,OAAO,KAAK,IAAI;gBACzB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS,CAAC,OAAO,KAAK,KAAK;oBAC5B,CAAC,CAAC,WAAW,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;oBACpE,CAAC,CAAC,SAAS,CAAA;YACd,MAAM,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,GAAG,OAAO,MAAM,KAAK,GAAG,CAAC,CAAA;QAClF,CAAC;IACF,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;AACtB,CAAC,CAAA;AAED,MAAM,wBAAwB,GAAG,CAAC,QAAiB,EAAiB,EAAE;IACrE,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAA;IACnF,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACjC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG;YAClB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,2CAA2C,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,sCAAsC,CAAC;SAC/D,CAAA;QACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAA;IACxE,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAA;QAClH,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAA;IACxE,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,IAAI,CAAA;QACZ,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAA;QACtG,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAA;IACxE,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAE,OAAgB,EAAY,EAAE;IAC5E,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACxB,CAAC;IAED,IAAI,KAAK,GAAa,EAAE,CAAA;IACxB,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QACpE,KAAK,GAAG,OAAO;aACb,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACrE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAA;IACV,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,MAAM,wBAAwB,GAAG,CAAC,WAAmB,EAAE,OAAe,EAAE,WAAoB,EAAwB,EAAE;IACrH,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAA;IAC1H,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,8BAA8B,CAAC,aAAa,CAAC,CAAA;IAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,UAAU,GAAqB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;QACrB,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACpD,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QACpD,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAA;QACnD,OAAO;YACN,EAAE;YACF,IAAI,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,IAAI,EAAE;YACpD,OAAO,EAAE,OAAO,IAAI,IAAI;YACxB,OAAO;YACP,KAAK;YACL,OAAO;SACP,CAAA;IACF,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAE1E,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,CAAA;AAC/D,CAAC,CAAA;AAED,MAAM,8BAA8B,GAAG,CAAC,KAAe,EAAkC,EAAE;IAC1F,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,KAAK,MAAM,eAAe,IAAI,KAAK,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAA;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,SAAQ;QACT,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC/B,KAAK,GAAG,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAAC,eAAuB,EAAkC,EAAE;IACzF,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAA;QAC7C,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QACxD,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QACxD,OAAO,QAAQ,IAAI,IAAI,CAAA;IACxB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,GAAW,EAAkC,EAAE;IACvF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,MAAM,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAA;IACrD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,OAAO,KAAgC,CAAA;AACxC,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,GAAW,EAAiB,EAAE;IACtE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,MAAM,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAA;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AACvE,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,GAAW,EAAiB,EAAE;IACtE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,MAAM,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAA;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1E,CAAC,CAAA;AAED,MAAM,sBAAsB,GAAG,CAAC,IAAmB,EAAiB,EAAE;IACrE,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA"}