@vforsh/argus 0.1.5 → 0.1.7

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 (76) hide show
  1. package/README.md +0 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/argus.js +230 -368
  4. package/dist/bin.d.ts +1 -1
  5. package/dist/bin.js +3 -1
  6. package/dist/bin.js.map +1 -1
  7. package/dist/cli/plugins/registerPlugins.d.ts +3 -0
  8. package/dist/cli/plugins/registerPlugins.d.ts.map +1 -0
  9. package/dist/cli/plugins/registerPlugins.js +134 -0
  10. package/dist/cli/plugins/registerPlugins.js.map +1 -0
  11. package/dist/cli/program.d.ts.map +1 -1
  12. package/dist/cli/program.js +1 -2
  13. package/dist/cli/program.js.map +1 -1
  14. package/dist/cli/register/registerExtension.d.ts.map +1 -1
  15. package/dist/cli/register/registerExtension.js +0 -9
  16. package/dist/cli/register/registerExtension.js.map +1 -1
  17. package/dist/commands/configInit.d.ts.map +1 -1
  18. package/dist/commands/configInit.js +1 -0
  19. package/dist/commands/configInit.js.map +1 -1
  20. package/dist/commands/contexts.d.ts +7 -0
  21. package/dist/commands/contexts.d.ts.map +1 -0
  22. package/dist/commands/contexts.js +54 -0
  23. package/dist/commands/contexts.js.map +1 -0
  24. package/dist/commands/domDiff.d.ts +43 -0
  25. package/dist/commands/domDiff.d.ts.map +1 -0
  26. package/dist/commands/domDiff.js +279 -0
  27. package/dist/commands/domDiff.js.map +1 -0
  28. package/dist/commands/extension/attach.d.ts +8 -0
  29. package/dist/commands/extension/attach.d.ts.map +1 -0
  30. package/dist/commands/extension/attach.js +171 -0
  31. package/dist/commands/extension/attach.js.map +1 -0
  32. package/dist/commands/extension/detach.d.ts +6 -0
  33. package/dist/commands/extension/detach.d.ts.map +1 -0
  34. package/dist/commands/extension/detach.js +132 -0
  35. package/dist/commands/extension/detach.js.map +1 -0
  36. package/dist/commands/extension/targets.d.ts +13 -0
  37. package/dist/commands/extension/targets.d.ts.map +1 -0
  38. package/dist/commands/extension/targets.js +77 -0
  39. package/dist/commands/extension/targets.js.map +1 -0
  40. package/dist/commands/frames.d.ts +7 -0
  41. package/dist/commands/frames.d.ts.map +1 -0
  42. package/dist/commands/frames.js +90 -0
  43. package/dist/commands/frames.js.map +1 -0
  44. package/dist/config/argusConfig.d.ts +6 -0
  45. package/dist/config/argusConfig.d.ts.map +1 -1
  46. package/dist/config/argusConfig.js +16 -1
  47. package/dist/config/argusConfig.js.map +1 -1
  48. package/dist/frame/frameSelector.d.ts +14 -0
  49. package/dist/frame/frameSelector.d.ts.map +1 -0
  50. package/dist/frame/frameSelector.js +31 -0
  51. package/dist/frame/frameSelector.js.map +1 -0
  52. package/dist/output/domDiff.d.ts +14 -0
  53. package/dist/output/domDiff.d.ts.map +1 -0
  54. package/dist/output/domDiff.js +151 -0
  55. package/dist/output/domDiff.js.map +1 -0
  56. package/dist/plugin.d.ts +29 -0
  57. package/dist/plugin.d.ts.map +1 -0
  58. package/dist/plugin.js +2 -0
  59. package/dist/plugin.js.map +1 -0
  60. package/dist/throttle/networkPresets.d.ts +6 -0
  61. package/dist/throttle/networkPresets.d.ts.map +1 -0
  62. package/dist/throttle/networkPresets.js +24 -0
  63. package/dist/throttle/networkPresets.js.map +1 -0
  64. package/package.json +14 -7
  65. package/dist/commands/extension/doctor.d.ts +0 -5
  66. package/dist/commands/extension/doctor.d.ts.map +0 -1
  67. package/dist/commands/extension/doctor.js +0 -262
  68. package/dist/commands/extension/doctor.js.map +0 -1
  69. package/dist/commands/extension/id.d.ts +0 -9
  70. package/dist/commands/extension/id.d.ts.map +0 -1
  71. package/dist/commands/extension/id.js +0 -122
  72. package/dist/commands/extension/id.js.map +0 -1
  73. package/dist/commands/extension/list.d.ts +0 -8
  74. package/dist/commands/extension/list.d.ts.map +0 -1
  75. package/dist/commands/extension/list.js +0 -194
  76. package/dist/commands/extension/list.js.map +0 -1
@@ -0,0 +1,279 @@
1
+ import { fetchJson } from '../httpClient.js';
2
+ import { formatDomDiff, formatSnapshotList, formatSnapshotCreated } from '../output/domDiff.js';
3
+ import { createOutput } from '../output/io.js';
4
+ import { writeWatcherCandidates } from '../watchers/candidates.js';
5
+ import { resolveWatcher } from '../watchers/resolveWatcher.js';
6
+ const formatError = (error) => {
7
+ if (!error) {
8
+ return 'unknown error';
9
+ }
10
+ if (error instanceof Error) {
11
+ return error.message;
12
+ }
13
+ return String(error);
14
+ };
15
+ const parseSelectors = (selector) => {
16
+ // Split by comma, trim, filter empty
17
+ return selector
18
+ .split(',')
19
+ .map((s) => s.trim())
20
+ .filter(Boolean);
21
+ };
22
+ /**
23
+ * Run the dom diff --snapshot command to take a snapshot.
24
+ */
25
+ export const runDomDiffSnapshot = async (id, options) => {
26
+ const output = createOutput(options);
27
+ if (!options.selector || options.selector.trim() === '') {
28
+ output.writeWarn('--selector is required');
29
+ process.exitCode = 2;
30
+ return;
31
+ }
32
+ if (!options.snapshot || options.snapshot.trim() === '') {
33
+ output.writeWarn('--snapshot name is required');
34
+ process.exitCode = 2;
35
+ return;
36
+ }
37
+ const resolved = await resolveWatcher({ id });
38
+ if (!resolved.ok) {
39
+ output.writeWarn(resolved.error);
40
+ if (resolved.candidates && resolved.candidates.length > 0) {
41
+ writeWatcherCandidates(resolved.candidates, output);
42
+ output.writeWarn('Hint: run `argus list` to see all watchers.');
43
+ }
44
+ process.exitCode = resolved.exitCode;
45
+ return;
46
+ }
47
+ const { watcher } = resolved;
48
+ const selectors = parseSelectors(options.selector);
49
+ const url = `http://${watcher.host}:${watcher.port}/dom/snapshot`;
50
+ let response;
51
+ try {
52
+ response = await fetchJson(url, {
53
+ method: 'POST',
54
+ body: {
55
+ selectors,
56
+ name: options.snapshot,
57
+ persist: options.persist ?? false,
58
+ },
59
+ timeoutMs: 30_000,
60
+ returnErrorResponse: true,
61
+ });
62
+ }
63
+ catch (error) {
64
+ output.writeWarn(`${watcher.id}: failed to reach watcher (${formatError(error)})`);
65
+ process.exitCode = 1;
66
+ return;
67
+ }
68
+ if (!response.ok) {
69
+ const errorResp = response;
70
+ if (options.json) {
71
+ output.writeJson(response);
72
+ }
73
+ else {
74
+ output.writeWarn(`Error: ${errorResp.error.message}`);
75
+ }
76
+ process.exitCode = 1;
77
+ return;
78
+ }
79
+ const successResp = response;
80
+ if (options.json) {
81
+ output.writeJson(successResp);
82
+ return;
83
+ }
84
+ const formatted = formatSnapshotCreated(successResp.snapshot.name, successResp.snapshot.elements.length, successResp.file);
85
+ output.writeHuman(formatted);
86
+ };
87
+ /**
88
+ * Run the dom diff --compare command to compare against a baseline snapshot.
89
+ */
90
+ export const runDomDiffCompare = async (id, options) => {
91
+ const output = createOutput(options);
92
+ if (!options.selector || options.selector.trim() === '') {
93
+ output.writeWarn('--selector is required');
94
+ process.exitCode = 2;
95
+ return;
96
+ }
97
+ if (!options.compare || options.compare.trim() === '') {
98
+ output.writeWarn('--compare baseline name is required');
99
+ process.exitCode = 2;
100
+ return;
101
+ }
102
+ const resolved = await resolveWatcher({ id });
103
+ if (!resolved.ok) {
104
+ output.writeWarn(resolved.error);
105
+ if (resolved.candidates && resolved.candidates.length > 0) {
106
+ writeWatcherCandidates(resolved.candidates, output);
107
+ output.writeWarn('Hint: run `argus list` to see all watchers.');
108
+ }
109
+ process.exitCode = resolved.exitCode;
110
+ return;
111
+ }
112
+ const { watcher } = resolved;
113
+ const selectors = parseSelectors(options.selector);
114
+ const url = `http://${watcher.host}:${watcher.port}/dom/diff`;
115
+ let response;
116
+ try {
117
+ response = await fetchJson(url, {
118
+ method: 'POST',
119
+ body: {
120
+ baseline: options.compare,
121
+ selectors,
122
+ },
123
+ timeoutMs: 30_000,
124
+ returnErrorResponse: true,
125
+ });
126
+ }
127
+ catch (error) {
128
+ output.writeWarn(`${watcher.id}: failed to reach watcher (${formatError(error)})`);
129
+ process.exitCode = 1;
130
+ return;
131
+ }
132
+ if (!response.ok) {
133
+ const errorResp = response;
134
+ if (options.json) {
135
+ output.writeJson(response);
136
+ }
137
+ else {
138
+ output.writeWarn(`Error: ${errorResp.error.message}`);
139
+ }
140
+ process.exitCode = 1;
141
+ return;
142
+ }
143
+ const successResp = response;
144
+ if (options.json) {
145
+ output.writeJson(successResp);
146
+ return;
147
+ }
148
+ const formatted = formatDomDiff(successResp);
149
+ output.writeHuman(formatted);
150
+ };
151
+ /**
152
+ * Run the dom diff action command with before/after eval expressions.
153
+ */
154
+ export const runDomDiffAction = async (id, options) => {
155
+ const output = createOutput(options);
156
+ if (!options.selector || options.selector.trim() === '') {
157
+ output.writeWarn('--selector is required');
158
+ process.exitCode = 2;
159
+ return;
160
+ }
161
+ if (!options.beforeEval && !options.afterEval) {
162
+ output.writeWarn('At least one of --before-eval or --after-eval is required');
163
+ process.exitCode = 2;
164
+ return;
165
+ }
166
+ const resolved = await resolveWatcher({ id });
167
+ if (!resolved.ok) {
168
+ output.writeWarn(resolved.error);
169
+ if (resolved.candidates && resolved.candidates.length > 0) {
170
+ writeWatcherCandidates(resolved.candidates, output);
171
+ output.writeWarn('Hint: run `argus list` to see all watchers.');
172
+ }
173
+ process.exitCode = resolved.exitCode;
174
+ return;
175
+ }
176
+ const { watcher } = resolved;
177
+ const selectors = parseSelectors(options.selector);
178
+ const afterDelay = parsePositiveInt(options.delay) ?? 500;
179
+ const beforeDelay = parsePositiveInt(options.beforeDelay) ?? 0;
180
+ const url = `http://${watcher.host}:${watcher.port}/dom/diff/action`;
181
+ let response;
182
+ try {
183
+ response = await fetchJson(url, {
184
+ method: 'POST',
185
+ body: {
186
+ selectors,
187
+ beforeEval: options.beforeEval,
188
+ afterEval: options.afterEval,
189
+ beforeDelay,
190
+ afterDelay,
191
+ },
192
+ timeoutMs: 60_000, // Longer timeout for action mode
193
+ returnErrorResponse: true,
194
+ });
195
+ }
196
+ catch (error) {
197
+ output.writeWarn(`${watcher.id}: failed to reach watcher (${formatError(error)})`);
198
+ process.exitCode = 1;
199
+ return;
200
+ }
201
+ if (!response.ok) {
202
+ const errorResp = response;
203
+ if (options.json) {
204
+ output.writeJson(response);
205
+ }
206
+ else {
207
+ output.writeWarn(`Error: ${errorResp.error.message}`);
208
+ }
209
+ process.exitCode = 1;
210
+ return;
211
+ }
212
+ const successResp = response;
213
+ if (options.json) {
214
+ output.writeJson(successResp);
215
+ return;
216
+ }
217
+ const formatted = formatDomDiff(successResp);
218
+ output.writeHuman(formatted);
219
+ };
220
+ /**
221
+ * Run the dom diff list command to list stored snapshots.
222
+ */
223
+ export const runDomDiffList = async (id, options) => {
224
+ const output = createOutput(options);
225
+ const resolved = await resolveWatcher({ id });
226
+ if (!resolved.ok) {
227
+ output.writeWarn(resolved.error);
228
+ if (resolved.candidates && resolved.candidates.length > 0) {
229
+ writeWatcherCandidates(resolved.candidates, output);
230
+ output.writeWarn('Hint: run `argus list` to see all watchers.');
231
+ }
232
+ process.exitCode = resolved.exitCode;
233
+ return;
234
+ }
235
+ const { watcher } = resolved;
236
+ const url = `http://${watcher.host}:${watcher.port}/dom/snapshot/list`;
237
+ let response;
238
+ try {
239
+ response = await fetchJson(url, {
240
+ method: 'GET',
241
+ timeoutMs: 10_000,
242
+ returnErrorResponse: true,
243
+ });
244
+ }
245
+ catch (error) {
246
+ output.writeWarn(`${watcher.id}: failed to reach watcher (${formatError(error)})`);
247
+ process.exitCode = 1;
248
+ return;
249
+ }
250
+ if (!response.ok) {
251
+ const errorResp = response;
252
+ if (options.json) {
253
+ output.writeJson(response);
254
+ }
255
+ else {
256
+ output.writeWarn(`Error: ${errorResp.error.message}`);
257
+ }
258
+ process.exitCode = 1;
259
+ return;
260
+ }
261
+ const successResp = response;
262
+ if (options.json) {
263
+ output.writeJson(successResp);
264
+ return;
265
+ }
266
+ const formatted = formatSnapshotList(successResp.snapshots);
267
+ output.writeHuman(formatted);
268
+ };
269
+ const parsePositiveInt = (value) => {
270
+ if (value === undefined) {
271
+ return undefined;
272
+ }
273
+ const parsed = Number(value);
274
+ if (!Number.isFinite(parsed) || parsed < 0 || !Number.isInteger(parsed)) {
275
+ return undefined;
276
+ }
277
+ return parsed;
278
+ };
279
+ //# sourceMappingURL=domDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domDiff.js","sourceRoot":"","sources":["../../src/commands/domDiff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type ExtensionAttachOptions = {
2
+ tabId?: string;
3
+ url?: string;
4
+ title?: string;
5
+ json?: boolean;
6
+ };
7
+ export declare const runExtensionAttach: (id: string | undefined, options: ExtensionAttachOptions) => Promise<void>;
8
+ //# sourceMappingURL=attach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/attach.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,sBAAsB,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,SAAS,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAsH9G,CAAA"}
@@ -0,0 +1,171 @@
1
+ import { fetchJson } from '../../httpClient.js';
2
+ import { createOutput } from '../../output/io.js';
3
+ import { resolveWatcher } from '../../watchers/resolveWatcher.js';
4
+ import { writeWatcherCandidates } from '../../watchers/candidates.js';
5
+ export const runExtensionAttach = async (id, options) => {
6
+ const output = createOutput(options);
7
+ const resolved = await resolveWatcher({ id });
8
+ if (!resolved.ok) {
9
+ output.writeWarn(resolved.error);
10
+ if (resolved.candidates && resolved.candidates.length > 0) {
11
+ writeWatcherCandidates(resolved.candidates, output);
12
+ }
13
+ process.exitCode = resolved.exitCode;
14
+ return;
15
+ }
16
+ const { watcher } = resolved;
17
+ const baseUrl = `http://${watcher.host}:${watcher.port}`;
18
+ // If tabId is provided directly, use it
19
+ if (options.tabId) {
20
+ const tabIdNum = parseInt(options.tabId, 10);
21
+ if (isNaN(tabIdNum)) {
22
+ output.writeWarn(`Invalid tabId: ${options.tabId}`);
23
+ process.exitCode = 2;
24
+ return;
25
+ }
26
+ await attachToTab(baseUrl, tabIdNum, options.tabId, output, options.json);
27
+ return;
28
+ }
29
+ // Otherwise, we need to find a matching tab
30
+ if (!options.url && !options.title) {
31
+ output.writeWarn('Either --tab-id, --url, or --title is required.');
32
+ output.writeWarn('');
33
+ output.writeWarn('Examples:');
34
+ output.writeWarn(' argus ext attach app --tab-id 123456789');
35
+ output.writeWarn(' argus ext attach app --url localhost:3000');
36
+ output.writeWarn(' argus ext attach app --title "My App"');
37
+ process.exitCode = 2;
38
+ return;
39
+ }
40
+ // Fetch available targets
41
+ let targetsResponse;
42
+ try {
43
+ targetsResponse = await fetchJson(`${baseUrl}/targets`, { timeoutMs: 5_000, returnErrorResponse: true });
44
+ }
45
+ catch (error) {
46
+ output.writeWarn(`Failed to fetch targets: ${error instanceof Error ? error.message : error}`);
47
+ process.exitCode = 1;
48
+ return;
49
+ }
50
+ if (!targetsResponse.ok || !targetsResponse.targets) {
51
+ const message = targetsResponse.error?.message ?? 'Unknown error';
52
+ if (targetsResponse.error?.code === 'not_available' || targetsResponse.error?.code === 'not_found') {
53
+ output.writeWarn(`Watcher "${watcher.id}" is not in extension mode.`);
54
+ output.writeWarn('Start the watcher with --source extension to use this command.');
55
+ }
56
+ else {
57
+ output.writeWarn(`Failed to list targets: ${message}`);
58
+ }
59
+ process.exitCode = 1;
60
+ return;
61
+ }
62
+ const { targets } = targetsResponse;
63
+ // Filter to non-attached targets
64
+ const available = targets.filter((t) => !t.attached);
65
+ if (available.length === 0) {
66
+ output.writeWarn('No available tabs to attach.');
67
+ const attached = targets.filter((t) => t.attached);
68
+ if (attached.length > 0) {
69
+ output.writeWarn(`Already attached to ${attached.length} tab(s).`);
70
+ }
71
+ process.exitCode = 1;
72
+ return;
73
+ }
74
+ // Find matching tabs
75
+ const matches = available.filter((target) => {
76
+ if (options.url && !target.url.toLowerCase().includes(options.url.toLowerCase())) {
77
+ return false;
78
+ }
79
+ if (options.title && !target.title.toLowerCase().includes(options.title.toLowerCase())) {
80
+ return false;
81
+ }
82
+ return true;
83
+ });
84
+ if (matches.length === 0) {
85
+ output.writeWarn('No tabs match the specified criteria.');
86
+ output.writeWarn('');
87
+ output.writeWarn('Available tabs:');
88
+ for (const target of available.slice(0, 5)) {
89
+ output.writeWarn(` [${target.id}] ${truncate(target.title, 40)} - ${truncate(target.url, 50)}`);
90
+ }
91
+ if (available.length > 5) {
92
+ output.writeWarn(` ... and ${available.length - 5} more`);
93
+ }
94
+ process.exitCode = 1;
95
+ return;
96
+ }
97
+ if (matches.length > 1) {
98
+ output.writeWarn(`Multiple tabs match (${matches.length}). Be more specific or use --tab-id.`);
99
+ output.writeWarn('');
100
+ output.writeWarn('Matching tabs:');
101
+ for (const target of matches.slice(0, 5)) {
102
+ output.writeWarn(` [${target.id}] ${truncate(target.title, 40)} - ${truncate(target.url, 50)}`);
103
+ }
104
+ if (matches.length > 5) {
105
+ output.writeWarn(` ... and ${matches.length - 5} more`);
106
+ }
107
+ process.exitCode = 1;
108
+ return;
109
+ }
110
+ // Attach to the single match
111
+ const target = matches[0];
112
+ const tabIdNum = parseInt(target.id, 10);
113
+ await attachToTab(baseUrl, tabIdNum, target.id, output, options.json, target);
114
+ };
115
+ const attachToTab = async (baseUrl, tabId, tabIdStr, output, json, target) => {
116
+ let response;
117
+ try {
118
+ response = await fetchJson(`${baseUrl}/attach`, {
119
+ method: 'POST',
120
+ body: { tabId },
121
+ timeoutMs: 5_000,
122
+ returnErrorResponse: true,
123
+ });
124
+ }
125
+ catch (error) {
126
+ if (json) {
127
+ output.writeJson({ success: false, error: error instanceof Error ? error.message : String(error) });
128
+ }
129
+ else {
130
+ output.writeWarn(`Failed to attach: ${error instanceof Error ? error.message : error}`);
131
+ }
132
+ process.exitCode = 1;
133
+ return;
134
+ }
135
+ if (!response.ok) {
136
+ const message = response.error?.message ?? 'Unknown error';
137
+ if (json) {
138
+ output.writeJson({ success: false, error: message });
139
+ }
140
+ else {
141
+ output.writeWarn(`Failed to attach: ${message}`);
142
+ }
143
+ process.exitCode = 1;
144
+ return;
145
+ }
146
+ if (json) {
147
+ output.writeJson({
148
+ success: true,
149
+ tabId: tabIdStr,
150
+ title: target?.title ?? null,
151
+ url: target?.url ?? null,
152
+ });
153
+ }
154
+ else {
155
+ output.writeHuman('');
156
+ output.writeHuman(`Attach request sent for tab ${tabIdStr}`);
157
+ if (target) {
158
+ output.writeHuman(` Title: ${target.title}`);
159
+ output.writeHuman(` URL: ${target.url}`);
160
+ }
161
+ output.writeHuman('');
162
+ output.writeHuman('The extension will attach shortly. Chrome will show a debugging indicator.');
163
+ output.writeHuman('');
164
+ }
165
+ };
166
+ const truncate = (str, maxLen) => {
167
+ if (str.length <= maxLen)
168
+ return str;
169
+ return str.slice(0, maxLen - 3) + '...';
170
+ };
171
+ //# sourceMappingURL=attach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/commands/extension/attach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type ExtensionDetachOptions = {
2
+ tabId?: string;
3
+ json?: boolean;
4
+ };
5
+ export declare const runExtensionDetach: (id: string | undefined, options: ExtensionDetachOptions) => Promise<void>;
6
+ //# sourceMappingURL=detach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detach.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/detach.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,sBAAsB,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,SAAS,sBAAsB,KAAG,OAAO,CAAC,IAAI,CA6E9G,CAAA"}
@@ -0,0 +1,132 @@
1
+ import { fetchJson } from '../../httpClient.js';
2
+ import { createOutput } from '../../output/io.js';
3
+ import { resolveWatcher } from '../../watchers/resolveWatcher.js';
4
+ import { writeWatcherCandidates } from '../../watchers/candidates.js';
5
+ export const runExtensionDetach = async (id, options) => {
6
+ const output = createOutput(options);
7
+ const resolved = await resolveWatcher({ id });
8
+ if (!resolved.ok) {
9
+ output.writeWarn(resolved.error);
10
+ if (resolved.candidates && resolved.candidates.length > 0) {
11
+ writeWatcherCandidates(resolved.candidates, output);
12
+ }
13
+ process.exitCode = resolved.exitCode;
14
+ return;
15
+ }
16
+ const { watcher } = resolved;
17
+ const baseUrl = `http://${watcher.host}:${watcher.port}`;
18
+ // If tabId is provided directly, use it
19
+ if (options.tabId) {
20
+ const tabIdNum = parseInt(options.tabId, 10);
21
+ if (isNaN(tabIdNum)) {
22
+ output.writeWarn(`Invalid tabId: ${options.tabId}`);
23
+ process.exitCode = 2;
24
+ return;
25
+ }
26
+ await detachFromTab(baseUrl, tabIdNum, options.tabId, output, options.json);
27
+ return;
28
+ }
29
+ // Otherwise, find attached tabs and detach from the first one (or all)
30
+ let targetsResponse;
31
+ try {
32
+ targetsResponse = await fetchJson(`${baseUrl}/targets`, { timeoutMs: 5_000, returnErrorResponse: true });
33
+ }
34
+ catch (error) {
35
+ output.writeWarn(`Failed to fetch targets: ${error instanceof Error ? error.message : error}`);
36
+ process.exitCode = 1;
37
+ return;
38
+ }
39
+ if (!targetsResponse.ok || !targetsResponse.targets) {
40
+ const message = targetsResponse.error?.message ?? 'Unknown error';
41
+ if (targetsResponse.error?.code === 'not_available' || targetsResponse.error?.code === 'not_found') {
42
+ output.writeWarn(`Watcher "${watcher.id}" is not in extension mode.`);
43
+ output.writeWarn('Start the watcher with --source extension to use this command.');
44
+ }
45
+ else {
46
+ output.writeWarn(`Failed to list targets: ${message}`);
47
+ }
48
+ process.exitCode = 1;
49
+ return;
50
+ }
51
+ const { targets } = targetsResponse;
52
+ const attached = targets.filter((t) => t.attached);
53
+ if (attached.length === 0) {
54
+ if (options.json) {
55
+ output.writeJson({ success: false, error: 'No tabs currently attached' });
56
+ }
57
+ else {
58
+ output.writeWarn('No tabs currently attached.');
59
+ }
60
+ process.exitCode = 1;
61
+ return;
62
+ }
63
+ if (attached.length > 1) {
64
+ output.writeWarn(`Multiple tabs attached (${attached.length}). Use --tab-id to specify which one.`);
65
+ output.writeWarn('');
66
+ output.writeWarn('Attached tabs:');
67
+ for (const target of attached) {
68
+ output.writeWarn(` [${target.id}] ${truncate(target.title, 40)} - ${truncate(target.url, 50)}`);
69
+ }
70
+ process.exitCode = 1;
71
+ return;
72
+ }
73
+ // Detach from the single attached tab
74
+ const target = attached[0];
75
+ const tabIdNum = parseInt(target.id, 10);
76
+ await detachFromTab(baseUrl, tabIdNum, target.id, output, options.json, target);
77
+ };
78
+ const detachFromTab = async (baseUrl, tabId, tabIdStr, output, json, target) => {
79
+ let response;
80
+ try {
81
+ response = await fetchJson(`${baseUrl}/detach`, {
82
+ method: 'POST',
83
+ body: { tabId },
84
+ timeoutMs: 5_000,
85
+ returnErrorResponse: true,
86
+ });
87
+ }
88
+ catch (error) {
89
+ if (json) {
90
+ output.writeJson({ success: false, error: error instanceof Error ? error.message : String(error) });
91
+ }
92
+ else {
93
+ output.writeWarn(`Failed to detach: ${error instanceof Error ? error.message : error}`);
94
+ }
95
+ process.exitCode = 1;
96
+ return;
97
+ }
98
+ if (!response.ok) {
99
+ const message = response.error?.message ?? 'Unknown error';
100
+ if (json) {
101
+ output.writeJson({ success: false, error: message });
102
+ }
103
+ else {
104
+ output.writeWarn(`Failed to detach: ${message}`);
105
+ }
106
+ process.exitCode = 1;
107
+ return;
108
+ }
109
+ if (json) {
110
+ output.writeJson({
111
+ success: true,
112
+ tabId: tabIdStr,
113
+ title: target?.title ?? null,
114
+ url: target?.url ?? null,
115
+ });
116
+ }
117
+ else {
118
+ output.writeHuman('');
119
+ output.writeHuman(`Detach request sent for tab ${tabIdStr}`);
120
+ if (target) {
121
+ output.writeHuman(` Title: ${target.title}`);
122
+ output.writeHuman(` URL: ${target.url}`);
123
+ }
124
+ output.writeHuman('');
125
+ }
126
+ };
127
+ const truncate = (str, maxLen) => {
128
+ if (str.length <= maxLen)
129
+ return str;
130
+ return str.slice(0, maxLen - 3) + '...';
131
+ };
132
+ //# sourceMappingURL=detach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detach.js","sourceRoot":"","sources":["../../../src/commands/extension/detach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type ExtensionTarget = {
2
+ id: string;
3
+ title: string;
4
+ url: string;
5
+ type?: string;
6
+ faviconUrl?: string;
7
+ attached?: boolean;
8
+ };
9
+ export type ExtensionTargetsOptions = {
10
+ json?: boolean;
11
+ };
12
+ export declare const runExtensionTargets: (id: string | undefined, options: ExtensionTargetsOptions) => Promise<void>;
13
+ //# sourceMappingURL=targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/targets.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAQD,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,SAAS,uBAAuB,KAAG,OAAO,CAAC,IAAI,CA0EhH,CAAA"}