@vforsh/argus 0.1.15 → 0.1.16
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/argus.js +691 -285
- package/dist/cli/register/registerEval.d.ts.map +1 -1
- package/dist/cli/register/registerEval.js +6 -0
- package/dist/cli/register/registerEval.js.map +1 -1
- package/dist/cli/register/registerExtension.d.ts.map +1 -1
- package/dist/cli/register/registerExtension.js +24 -1
- package/dist/cli/register/registerExtension.js.map +1 -1
- package/dist/cli/register/registerWatcher.d.ts.map +1 -1
- package/dist/cli/register/registerWatcher.js +1 -0
- package/dist/cli/register/registerWatcher.js.map +1 -1
- package/dist/commands/eval.d.ts +2 -0
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/evalBundle.d.ts +17 -0
- package/dist/commands/evalBundle.d.ts.map +1 -0
- package/dist/commands/evalBundle.js +119 -0
- package/dist/commands/evalBundle.js.map +1 -0
- package/dist/commands/evalShared.d.ts +1 -0
- package/dist/commands/evalShared.d.ts.map +1 -1
- package/dist/commands/evalShared.js +21 -3
- package/dist/commands/evalShared.js.map +1 -1
- package/dist/commands/evalUntil.d.ts +2 -0
- package/dist/commands/evalUntil.d.ts.map +1 -1
- package/dist/commands/evalUntil.js.map +1 -1
- package/dist/commands/extension/attach.d.ts +12 -0
- package/dist/commands/extension/attach.d.ts.map +1 -0
- package/dist/commands/extension/attach.js +175 -0
- package/dist/commands/extension/attach.js.map +1 -0
- package/dist/commands/extension/info.d.ts.map +1 -1
- package/dist/commands/extension/info.js +13 -33
- package/dist/commands/extension/info.js.map +1 -1
- package/dist/commands/extension/nativeHost.d.ts +35 -5
- package/dist/commands/extension/nativeHost.d.ts.map +1 -1
- package/dist/commands/extension/nativeHost.js +95 -12
- package/dist/commands/extension/nativeHost.js.map +1 -1
- package/dist/commands/extension/remove.d.ts.map +1 -1
- package/dist/commands/extension/remove.js +18 -38
- package/dist/commands/extension/remove.js.map +1 -1
- package/dist/commands/extension/resolveExtensionWatcher.d.ts +1 -1
- package/dist/commands/extension/resolveExtensionWatcher.d.ts.map +1 -1
- package/dist/commands/extension/resolveExtensionWatcher.js +15 -29
- package/dist/commands/extension/resolveExtensionWatcher.js.map +1 -1
- package/dist/commands/extension/setup.d.ts.map +1 -1
- package/dist/commands/extension/setup.js +20 -35
- package/dist/commands/extension/setup.js.map +1 -1
- package/dist/commands/extension/status.d.ts.map +1 -1
- package/dist/commands/extension/status.js +12 -38
- package/dist/commands/extension/status.js.map +1 -1
- package/dist/commands/watcherNativeHost.d.ts +1 -0
- package/dist/commands/watcherNativeHost.d.ts.map +1 -1
- package/dist/commands/watcherNativeHost.js +8 -2
- package/dist/commands/watcherNativeHost.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { createOutput } from '../../output/io.js';
|
|
2
|
+
import { formatWatcherLine } from '../../output/format.js';
|
|
3
|
+
import { fetchWatcherJson } from '../../watchers/requestWatcher.js';
|
|
4
|
+
import { resolveExtensionWatcher } from './resolveExtensionWatcher.js';
|
|
5
|
+
export const runExtensionAttach = async (options) => {
|
|
6
|
+
await runExtensionTabAction('attach', options);
|
|
7
|
+
};
|
|
8
|
+
export const runExtensionDetach = async (options) => {
|
|
9
|
+
await runExtensionTabAction('detach', options);
|
|
10
|
+
};
|
|
11
|
+
const runExtensionTabAction = async (action, options) => {
|
|
12
|
+
const output = createOutput(options);
|
|
13
|
+
const resolved = await resolveExtensionWatcher({});
|
|
14
|
+
if (!resolved.ok) {
|
|
15
|
+
writeResolveFailure(output, options, resolved);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const selector = parseTabSelector(options);
|
|
19
|
+
if (!selector.ok) {
|
|
20
|
+
writeTabResolutionFailure(output, options, selector);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const tabs = await fetchTabs(resolved.watcher, selector.selector, output, options);
|
|
24
|
+
if (!tabs) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const tab = resolveTab(tabs, selector.selector);
|
|
28
|
+
if (!tab.ok) {
|
|
29
|
+
writeTabResolutionFailure(output, options, tab);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
let response;
|
|
33
|
+
try {
|
|
34
|
+
response = await fetchWatcherJson(resolved.watcher, {
|
|
35
|
+
path: action === 'attach' ? '/attach' : '/detach',
|
|
36
|
+
method: 'POST',
|
|
37
|
+
body: { tabId: tab.tab.tabId },
|
|
38
|
+
timeoutMs: 5_000,
|
|
39
|
+
returnErrorResponse: true,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
44
|
+
writeCommandError(output, options, `${resolved.watcher.id}: failed to ${action} tab (${message})`, message);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
writeCommandError(output, options, `Error: ${response.error.message}`, response);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (options.json) {
|
|
52
|
+
output.writeJson({
|
|
53
|
+
ok: true,
|
|
54
|
+
tab: tab.tab,
|
|
55
|
+
watcherId: resolved.watcher.id,
|
|
56
|
+
});
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const verb = action === 'attach' ? 'Attach' : 'Detach';
|
|
60
|
+
output.writeHuman(`${verb} request sent via ${resolved.watcher.id}`);
|
|
61
|
+
output.writeHuman(` ${formatExtensionTabLine(tab.tab)}`);
|
|
62
|
+
};
|
|
63
|
+
const fetchTabs = async (watcher, selector, output, options) => {
|
|
64
|
+
const query = buildTabsQuery(selector);
|
|
65
|
+
try {
|
|
66
|
+
const response = await fetchWatcherJson(watcher, {
|
|
67
|
+
path: '/tabs',
|
|
68
|
+
query,
|
|
69
|
+
timeoutMs: 5_000,
|
|
70
|
+
returnErrorResponse: true,
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
writeCommandError(output, options, `Error: ${response.error.message}`, response);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
return response.tabs;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
80
|
+
writeCommandError(output, options, `${watcher.id}: failed to list extension tabs (${message})`, message);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const parseTabSelector = (options) => {
|
|
85
|
+
const tabId = parseTabId(options.tab);
|
|
86
|
+
const url = options.url?.trim();
|
|
87
|
+
const title = options.title?.trim();
|
|
88
|
+
if (tabId !== null && (url || title)) {
|
|
89
|
+
return { ok: false, reason: 'Use --tab by itself, or resolve by --url/--title.', exitCode: 2 };
|
|
90
|
+
}
|
|
91
|
+
if (tabId === null && !url && !title) {
|
|
92
|
+
return { ok: false, reason: 'Specify --tab <tabId>, --url <substring>, or --title <substring>.', exitCode: 2 };
|
|
93
|
+
}
|
|
94
|
+
if (options.tab != null && tabId === null) {
|
|
95
|
+
return { ok: false, reason: `Invalid --tab value: ${options.tab}`, exitCode: 2 };
|
|
96
|
+
}
|
|
97
|
+
if (tabId !== null) {
|
|
98
|
+
return { ok: true, selector: { kind: 'tab', tabId } };
|
|
99
|
+
}
|
|
100
|
+
return { ok: true, selector: { kind: 'query', url, title } };
|
|
101
|
+
};
|
|
102
|
+
const resolveTab = (tabs, selector) => {
|
|
103
|
+
const matches = selector.kind === 'tab' ? tabs.filter((tab) => tab.tabId === selector.tabId) : tabs;
|
|
104
|
+
if (matches.length === 0) {
|
|
105
|
+
return { ok: false, reason: 'No extension tab matched.', exitCode: 2 };
|
|
106
|
+
}
|
|
107
|
+
if (matches.length > 1) {
|
|
108
|
+
return { ok: false, reason: 'Multiple extension tabs matched. Use --tab to pick one.', exitCode: 2, matches };
|
|
109
|
+
}
|
|
110
|
+
return { ok: true, tab: matches[0] };
|
|
111
|
+
};
|
|
112
|
+
const parseTabId = (value) => {
|
|
113
|
+
if (value === undefined) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const tabId = typeof value === 'number' ? value : Number(value);
|
|
117
|
+
return Number.isInteger(tabId) ? tabId : null;
|
|
118
|
+
};
|
|
119
|
+
const buildTabsQuery = (selector) => {
|
|
120
|
+
const query = new URLSearchParams();
|
|
121
|
+
if (selector.kind === 'tab') {
|
|
122
|
+
return query;
|
|
123
|
+
}
|
|
124
|
+
if (selector.url) {
|
|
125
|
+
query.set('url', selector.url);
|
|
126
|
+
}
|
|
127
|
+
if (selector.title) {
|
|
128
|
+
query.set('title', selector.title);
|
|
129
|
+
}
|
|
130
|
+
return query;
|
|
131
|
+
};
|
|
132
|
+
const writeTabResolutionFailure = (output, options, result) => {
|
|
133
|
+
const matches = 'matches' in result ? result.matches : undefined;
|
|
134
|
+
if (options.json) {
|
|
135
|
+
output.writeJson({ ok: false, error: result.reason, matches: matches ?? [] });
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
output.writeWarn(result.reason);
|
|
139
|
+
if (matches) {
|
|
140
|
+
for (const tab of matches) {
|
|
141
|
+
output.writeWarn(` ${formatExtensionTabLine(tab)}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
process.exitCode = result.exitCode;
|
|
146
|
+
};
|
|
147
|
+
const writeResolveFailure = (output, options, resolved) => {
|
|
148
|
+
if (options.json) {
|
|
149
|
+
output.writeJson({ ok: false, error: resolved.error, candidates: resolved.candidates?.map((watcher) => watcher.id) ?? [] });
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
output.writeWarn(resolved.error);
|
|
153
|
+
if (resolved.candidates && resolved.candidates.length > 0) {
|
|
154
|
+
for (const watcher of resolved.candidates) {
|
|
155
|
+
output.writeWarn(formatWatcherLine(watcher));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
process.exitCode = resolved.exitCode;
|
|
160
|
+
};
|
|
161
|
+
const writeCommandError = (output, options, humanMessage, jsonPayload) => {
|
|
162
|
+
if (options.json) {
|
|
163
|
+
output.writeJson(typeof jsonPayload === 'string' ? { ok: false, error: jsonPayload } : jsonPayload);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
output.writeWarn(humanMessage);
|
|
167
|
+
}
|
|
168
|
+
process.exitCode = 1;
|
|
169
|
+
};
|
|
170
|
+
const formatExtensionTabLine = (tab) => {
|
|
171
|
+
const state = tab.attached ? 'attached' : 'available';
|
|
172
|
+
const label = tab.title || '(untitled)';
|
|
173
|
+
return `${tab.tabId} [${state}] ${label} - ${tab.url}`;
|
|
174
|
+
};
|
|
175
|
+
//# 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/info.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,IAAI,CA8ClF,CAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
1
|
import { createOutput } from '../../output/io.js';
|
|
3
|
-
import {
|
|
2
|
+
import { getPlatform, inspectNativeHosts, shortenPath } from './nativeHost.js';
|
|
4
3
|
export const runExtensionInfo = async (options) => {
|
|
5
4
|
const output = createOutput(options);
|
|
6
5
|
let platform;
|
|
@@ -17,51 +16,32 @@ export const runExtensionInfo = async (options) => {
|
|
|
17
16
|
process.exitCode = 1;
|
|
18
17
|
return;
|
|
19
18
|
}
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const manifestExists = fs.existsSync(manifestPath);
|
|
23
|
-
const wrapperExists = fs.existsSync(wrapperPath);
|
|
24
|
-
let extensionId = null;
|
|
25
|
-
let argusPath = null;
|
|
26
|
-
if (manifestExists) {
|
|
27
|
-
const manifest = readManifest(manifestPath);
|
|
28
|
-
if (manifest) {
|
|
29
|
-
argusPath = manifest.path;
|
|
30
|
-
const origin = manifest.allowed_origins?.[0];
|
|
31
|
-
if (origin) {
|
|
32
|
-
const match = origin.match(/^chrome-extension:\/\/([^/]+)\/$/);
|
|
33
|
-
if (match) {
|
|
34
|
-
extensionId = match[1];
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
const installed = manifestExists && wrapperExists;
|
|
19
|
+
const hosts = inspectNativeHosts(platform);
|
|
20
|
+
const installed = hosts.every((host) => host.installed);
|
|
40
21
|
if (options.json) {
|
|
41
22
|
output.writeJson({
|
|
42
|
-
hostName: HOST_NAME,
|
|
43
23
|
platform,
|
|
44
|
-
manifestPath,
|
|
45
|
-
wrapperPath,
|
|
46
24
|
installed,
|
|
47
|
-
|
|
48
|
-
argusPath,
|
|
25
|
+
hosts,
|
|
49
26
|
});
|
|
50
27
|
return;
|
|
51
28
|
}
|
|
52
29
|
output.writeHuman('');
|
|
53
30
|
output.writeHuman('Native Messaging Host Info');
|
|
54
31
|
output.writeHuman('');
|
|
55
|
-
output.writeHuman(` Host name: ${HOST_NAME}`);
|
|
56
32
|
output.writeHuman(` Platform: ${platform}`);
|
|
57
|
-
|
|
58
|
-
|
|
33
|
+
for (const host of hosts) {
|
|
34
|
+
output.writeHuman(` Host name: ${host.hostName}`);
|
|
35
|
+
output.writeHuman(` Manifest path: ${shortenPath(host.manifestPath)}`);
|
|
36
|
+
output.writeHuman(` Wrapper path: ${shortenPath(host.wrapperPath)}`);
|
|
37
|
+
}
|
|
59
38
|
output.writeHuman('');
|
|
60
39
|
output.writeHuman('Current configuration:');
|
|
61
40
|
output.writeHuman(` Installed: ${installed ? 'yes' : 'no'}`);
|
|
62
|
-
|
|
63
|
-
output.writeHuman(`
|
|
64
|
-
output.writeHuman(`
|
|
41
|
+
for (const host of hosts.filter((entry) => entry.installed)) {
|
|
42
|
+
output.writeHuman(` ${host.hostName}`);
|
|
43
|
+
output.writeHuman(` Extension ID: ${host.extensionId ?? '(unknown)'}`);
|
|
44
|
+
output.writeHuman(` Argus path: ${host.argusPath ?? '(unknown)'}`);
|
|
65
45
|
}
|
|
66
46
|
output.writeHuman('');
|
|
67
47
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/extension/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/extension/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAM9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAA6B,EAAiB,EAAE;IACtF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAEpC,IAAI,QAAQ,CAAA;IACZ,IAAI,CAAC;QACJ,QAAQ,GAAG,WAAW,EAAE,CAAA;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;QACtD,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAEvD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC;YAChB,QAAQ;YACR,SAAS;YACT,KAAK;SACL,CAAC,CAAA;QACF,OAAM;IACP,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAA;IAC/C,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,CAAC,UAAU,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,UAAU,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACtD,MAAM,CAAC,UAAU,CAAC,oBAAoB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QACvE,MAAM,CAAC,UAAU,CAAC,oBAAoB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACvE,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAA;IAC3C,MAAM,CAAC,UAAU,CAAC,oBAAoB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvC,MAAM,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC,CAAA;QACzE,MAAM,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;AACtB,CAAC,CAAA"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const BRIDGE_HOST_NAME = "com.vforsh.argus.bridge";
|
|
2
|
+
export declare const CONTROL_HOST_NAME = "com.vforsh.argus.control";
|
|
3
|
+
export declare const CONTROL_WATCHER_ID = "extension-control";
|
|
4
|
+
export declare const HOST_NAMES: readonly ["com.vforsh.argus.bridge", "com.vforsh.argus.control"];
|
|
5
|
+
export type NativeHostName = (typeof HOST_NAMES)[number];
|
|
2
6
|
export type Platform = 'darwin' | 'linux' | 'win32';
|
|
3
7
|
export declare const getManifestDir: (platform: Platform) => string;
|
|
4
|
-
export declare const getManifestPath: (platform: Platform) => string;
|
|
5
|
-
export declare const getWrapperPath: (platform: Platform) => string;
|
|
8
|
+
export declare const getManifestPath: (platform: Platform, hostName?: NativeHostName) => string;
|
|
9
|
+
export declare const getWrapperPath: (platform: Platform, hostName?: NativeHostName) => string;
|
|
6
10
|
export declare const getPlatform: () => Platform;
|
|
7
11
|
export declare const findArgusExecutable: () => string;
|
|
8
12
|
export declare const findNodePath: () => string;
|
|
@@ -13,8 +17,34 @@ export type NativeHostManifest = {
|
|
|
13
17
|
type: 'stdio';
|
|
14
18
|
allowed_origins: string[];
|
|
15
19
|
};
|
|
16
|
-
export
|
|
17
|
-
|
|
20
|
+
export type NativeHostInspection = {
|
|
21
|
+
hostName: NativeHostName;
|
|
22
|
+
manifestPath: string;
|
|
23
|
+
wrapperPath: string;
|
|
24
|
+
manifestExists: boolean;
|
|
25
|
+
manifestValid: boolean;
|
|
26
|
+
wrapperExists: boolean;
|
|
27
|
+
wrapperExecutable: boolean;
|
|
28
|
+
configured: boolean;
|
|
29
|
+
installed: boolean;
|
|
30
|
+
extensionId: string | null;
|
|
31
|
+
argusPath: string | null;
|
|
32
|
+
};
|
|
33
|
+
export type InstalledNativeHost = {
|
|
34
|
+
hostName: NativeHostName;
|
|
35
|
+
manifestPath: string;
|
|
36
|
+
wrapperPath: string;
|
|
37
|
+
};
|
|
38
|
+
export type RemovedNativeHost = NativeHostInspection & {
|
|
39
|
+
manifestRemoved: boolean;
|
|
40
|
+
wrapperRemoved: boolean;
|
|
41
|
+
};
|
|
42
|
+
export declare const createManifest: (extensionId: string, executablePath: string, hostName?: NativeHostName) => NativeHostManifest;
|
|
43
|
+
export declare const createWrapperScript: (platform: Platform, executablePath: string, hostName?: NativeHostName) => string;
|
|
44
|
+
export declare const installNativeHosts: (platform: Platform, extensionId: string, executablePath: string) => InstalledNativeHost[];
|
|
45
|
+
export declare const inspectNativeHosts: (platform: Platform) => NativeHostInspection[];
|
|
46
|
+
export declare const removeNativeHosts: (platform: Platform) => RemovedNativeHost[];
|
|
47
|
+
export declare const inspectNativeHost: (platform: Platform, hostName: NativeHostName) => NativeHostInspection;
|
|
18
48
|
export declare const readManifest: (manifestPath: string) => NativeHostManifest | null;
|
|
19
49
|
export declare const isWrapperExecutable: (wrapperPath: string) => boolean;
|
|
20
50
|
export declare const shortenPath: (filePath: string) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeHost.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/nativeHost.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"nativeHost.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/nativeHost.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,4BAA4B,CAAA;AACzD,eAAO,MAAM,iBAAiB,6BAA6B,CAAA;AAC3D,eAAO,MAAM,kBAAkB,sBAAsB,CAAA;AACrD,eAAO,MAAM,UAAU,kEAAiD,CAAA;AAExE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AAEnD,eAAO,MAAM,cAAc,GAAI,UAAU,QAAQ,KAAG,MAWnD,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,EAAE,WAAU,cAAiC,KAAG,MAEjG,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,QAAQ,EAAE,WAAU,cAAiC,KAAG,MAGhG,CAAA;AAED,eAAO,MAAM,WAAW,QAAO,QAM9B,CAAA;AAED,eAAO,MAAM,mBAAmB,QAAO,MAuBtC,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,MAI/B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;IACb,eAAe,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,cAAc,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;IACtB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,cAAc,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG;IACtD,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,aAAa,MAAM,EAAE,gBAAgB,MAAM,EAAE,WAAU,cAAiC,KAAG,kBAQzH,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,UAAU,QAAQ,EAAE,gBAAgB,MAAM,EAAE,WAAU,cAAiC,KAAG,MAa7H,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,EAAE,aAAa,MAAM,EAAE,gBAAgB,MAAM,KAAG,mBAAmB,EAUvH,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,KAAG,oBAAoB,EAE3E,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,UAAU,QAAQ,KAAG,iBAAiB,EAQvE,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,UAAU,QAAQ,EAAE,UAAU,cAAc,KAAG,oBAuBhF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,cAAc,MAAM,KAAG,kBAAkB,GAAG,IAOxE,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,aAAa,MAAM,KAAG,OAOzD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,MAM9C,CAAA"}
|
|
@@ -2,7 +2,10 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import { execSync } from 'node:child_process';
|
|
5
|
-
export const
|
|
5
|
+
export const BRIDGE_HOST_NAME = 'com.vforsh.argus.bridge';
|
|
6
|
+
export const CONTROL_HOST_NAME = 'com.vforsh.argus.control';
|
|
7
|
+
export const CONTROL_WATCHER_ID = 'extension-control';
|
|
8
|
+
export const HOST_NAMES = [BRIDGE_HOST_NAME, CONTROL_HOST_NAME];
|
|
6
9
|
export const getManifestDir = (platform) => {
|
|
7
10
|
switch (platform) {
|
|
8
11
|
case 'darwin':
|
|
@@ -15,11 +18,12 @@ export const getManifestDir = (platform) => {
|
|
|
15
18
|
throw new Error(`Unsupported platform: ${platform}`);
|
|
16
19
|
}
|
|
17
20
|
};
|
|
18
|
-
export const getManifestPath = (platform) => {
|
|
19
|
-
return path.join(getManifestDir(platform), `${
|
|
21
|
+
export const getManifestPath = (platform, hostName = BRIDGE_HOST_NAME) => {
|
|
22
|
+
return path.join(getManifestDir(platform), `${hostName}.json`);
|
|
20
23
|
};
|
|
21
|
-
export const getWrapperPath = (platform) => {
|
|
22
|
-
|
|
24
|
+
export const getWrapperPath = (platform, hostName = BRIDGE_HOST_NAME) => {
|
|
25
|
+
const filename = hostName === CONTROL_HOST_NAME ? 'argus-native-control-host.sh' : 'argus-native-host.sh';
|
|
26
|
+
return path.join(getManifestDir(platform), filename);
|
|
23
27
|
};
|
|
24
28
|
export const getPlatform = () => {
|
|
25
29
|
const platform = os.platform();
|
|
@@ -57,27 +61,73 @@ export const findNodePath = () => {
|
|
|
57
61
|
// This is important for fnm/nvm which use symlinks in temporary directories
|
|
58
62
|
return fs.realpathSync(process.execPath);
|
|
59
63
|
};
|
|
60
|
-
export const createManifest = (extensionId, executablePath) => {
|
|
64
|
+
export const createManifest = (extensionId, executablePath, hostName = BRIDGE_HOST_NAME) => {
|
|
61
65
|
return {
|
|
62
|
-
name:
|
|
63
|
-
description: 'Argus Watcher Native Messaging Host',
|
|
66
|
+
name: hostName,
|
|
67
|
+
description: hostName === CONTROL_HOST_NAME ? 'Argus Extension Control Native Messaging Host' : 'Argus Watcher Native Messaging Host',
|
|
64
68
|
path: executablePath,
|
|
65
69
|
type: 'stdio',
|
|
66
70
|
allowed_origins: [`chrome-extension://${extensionId}/`],
|
|
67
71
|
};
|
|
68
72
|
};
|
|
69
|
-
export const createWrapperScript = (platform, executablePath) => {
|
|
70
|
-
const
|
|
71
|
-
const wrapperPath = path.join(wrapperDir, 'argus-native-host.sh');
|
|
73
|
+
export const createWrapperScript = (platform, executablePath, hostName = BRIDGE_HOST_NAME) => {
|
|
74
|
+
const wrapperPath = getWrapperPath(platform, hostName);
|
|
72
75
|
const nodePath = findNodePath();
|
|
76
|
+
const args = hostName === CONTROL_HOST_NAME ? `watcher native-host --role control --id ${CONTROL_WATCHER_ID}` : 'watcher native-host --role tab';
|
|
73
77
|
// Create a wrapper script that launches argus in native-host mode
|
|
74
78
|
// Use absolute path to node since Chrome spawns without shell profile
|
|
75
79
|
const script = `#!/bin/bash
|
|
76
|
-
exec "${nodePath}" "${executablePath}"
|
|
80
|
+
exec "${nodePath}" "${executablePath}" ${args}
|
|
77
81
|
`;
|
|
78
82
|
fs.writeFileSync(wrapperPath, script, { mode: 0o755 });
|
|
79
83
|
return wrapperPath;
|
|
80
84
|
};
|
|
85
|
+
export const installNativeHosts = (platform, extensionId, executablePath) => {
|
|
86
|
+
fs.mkdirSync(getManifestDir(platform), { recursive: true });
|
|
87
|
+
return HOST_NAMES.map((hostName) => {
|
|
88
|
+
const wrapperPath = createWrapperScript(platform, executablePath, hostName);
|
|
89
|
+
const manifestPath = getManifestPath(platform, hostName);
|
|
90
|
+
const manifest = createManifest(extensionId, wrapperPath, hostName);
|
|
91
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
92
|
+
registerWindowsNativeHost(platform, hostName, manifestPath);
|
|
93
|
+
return { hostName, manifestPath, wrapperPath };
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
export const inspectNativeHosts = (platform) => {
|
|
97
|
+
return HOST_NAMES.map((hostName) => inspectNativeHost(platform, hostName));
|
|
98
|
+
};
|
|
99
|
+
export const removeNativeHosts = (platform) => {
|
|
100
|
+
return HOST_NAMES.map((hostName) => {
|
|
101
|
+
const host = inspectNativeHost(platform, hostName);
|
|
102
|
+
const manifestRemoved = removeFileIfExists(host.manifestPath);
|
|
103
|
+
const wrapperRemoved = removeFileIfExists(host.wrapperPath);
|
|
104
|
+
unregisterWindowsNativeHost(platform, hostName);
|
|
105
|
+
return { ...host, manifestRemoved, wrapperRemoved };
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
export const inspectNativeHost = (platform, hostName) => {
|
|
109
|
+
const manifestPath = getManifestPath(platform, hostName);
|
|
110
|
+
const wrapperPath = getWrapperPath(platform, hostName);
|
|
111
|
+
const manifestExists = fs.existsSync(manifestPath);
|
|
112
|
+
const wrapperExists = fs.existsSync(wrapperPath);
|
|
113
|
+
const wrapperExecutable = wrapperExists && isWrapperExecutable(wrapperPath);
|
|
114
|
+
const manifest = manifestExists ? readManifest(manifestPath) : null;
|
|
115
|
+
const manifestValid = Boolean(manifest && manifest.name === hostName && manifest.type === 'stdio' && Array.isArray(manifest.allowed_origins));
|
|
116
|
+
const extensionId = extractExtensionId(manifest?.allowed_origins?.[0]);
|
|
117
|
+
return {
|
|
118
|
+
hostName,
|
|
119
|
+
manifestPath,
|
|
120
|
+
wrapperPath,
|
|
121
|
+
manifestExists,
|
|
122
|
+
manifestValid,
|
|
123
|
+
wrapperExists,
|
|
124
|
+
wrapperExecutable,
|
|
125
|
+
configured: manifestExists && manifestValid && wrapperExists && wrapperExecutable,
|
|
126
|
+
installed: manifestExists && wrapperExists,
|
|
127
|
+
extensionId,
|
|
128
|
+
argusPath: manifest?.path ?? null,
|
|
129
|
+
};
|
|
130
|
+
};
|
|
81
131
|
export const readManifest = (manifestPath) => {
|
|
82
132
|
try {
|
|
83
133
|
const content = fs.readFileSync(manifestPath, 'utf8');
|
|
@@ -103,4 +153,37 @@ export const shortenPath = (filePath) => {
|
|
|
103
153
|
}
|
|
104
154
|
return filePath;
|
|
105
155
|
};
|
|
156
|
+
const extractExtensionId = (origin) => {
|
|
157
|
+
if (!origin) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
const match = origin.match(/^chrome-extension:\/\/([^/]+)\/$/);
|
|
161
|
+
return match?.[1] ?? null;
|
|
162
|
+
};
|
|
163
|
+
const removeFileIfExists = (filePath) => {
|
|
164
|
+
if (!fs.existsSync(filePath)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
fs.unlinkSync(filePath);
|
|
168
|
+
return true;
|
|
169
|
+
};
|
|
170
|
+
const registerWindowsNativeHost = (platform, hostName, manifestPath) => {
|
|
171
|
+
if (platform !== 'win32') {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const regKey = `HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${hostName}`;
|
|
175
|
+
execSync(`reg add "${regKey}" /ve /t REG_SZ /d "${manifestPath}" /f`, { stdio: 'pipe' });
|
|
176
|
+
};
|
|
177
|
+
const unregisterWindowsNativeHost = (platform, hostName) => {
|
|
178
|
+
if (platform !== 'win32') {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const regKey = `HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${hostName}`;
|
|
182
|
+
try {
|
|
183
|
+
execSync(`reg delete "${regKey}" /f`, { stdio: 'pipe' });
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Key might not exist.
|
|
187
|
+
}
|
|
188
|
+
};
|
|
106
189
|
//# sourceMappingURL=nativeHost.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeHost.js","sourceRoot":"","sources":["../../../src/commands/extension/nativeHost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"nativeHost.js","sourceRoot":"","sources":["../../../src/commands/extension/nativeHost.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/remove.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/remove.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,GAAG;IACpC,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAmDtF,CAAA"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import { execSync } from 'node:child_process';
|
|
3
1
|
import { createOutput } from '../../output/io.js';
|
|
4
|
-
import {
|
|
2
|
+
import { getPlatform, removeNativeHosts, shortenPath } from './nativeHost.js';
|
|
5
3
|
export const runExtensionRemove = async (options) => {
|
|
6
4
|
const output = createOutput(options);
|
|
7
5
|
let platform;
|
|
@@ -18,56 +16,38 @@ export const runExtensionRemove = async (options) => {
|
|
|
18
16
|
process.exitCode = 1;
|
|
19
17
|
return;
|
|
20
18
|
}
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
let wrapperRemoved = false;
|
|
25
|
-
// Remove manifest
|
|
26
|
-
if (fs.existsSync(manifestPath)) {
|
|
27
|
-
fs.unlinkSync(manifestPath);
|
|
28
|
-
manifestRemoved = true;
|
|
29
|
-
}
|
|
30
|
-
// Remove wrapper script
|
|
31
|
-
if (fs.existsSync(wrapperPath)) {
|
|
32
|
-
fs.unlinkSync(wrapperPath);
|
|
33
|
-
wrapperRemoved = true;
|
|
34
|
-
}
|
|
35
|
-
// Windows: Remove registry key
|
|
36
|
-
if (platform === 'win32') {
|
|
37
|
-
const regKey = `HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${HOST_NAME}`;
|
|
38
|
-
try {
|
|
39
|
-
execSync(`reg delete "${regKey}" /f`, { stdio: 'pipe' });
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
// Key might not exist
|
|
43
|
-
}
|
|
44
|
-
}
|
|
19
|
+
const removedHosts = removeNativeHosts(platform);
|
|
20
|
+
const manifestRemoved = removedHosts.some((host) => host.manifestRemoved);
|
|
21
|
+
const wrapperRemoved = removedHosts.some((host) => host.wrapperRemoved);
|
|
45
22
|
if (options.json) {
|
|
46
23
|
output.writeJson({
|
|
47
24
|
success: true,
|
|
48
25
|
manifestRemoved,
|
|
49
26
|
wrapperRemoved,
|
|
50
|
-
|
|
51
|
-
wrapperPath,
|
|
27
|
+
hosts: removedHosts,
|
|
52
28
|
});
|
|
53
29
|
}
|
|
54
30
|
else {
|
|
55
31
|
output.writeHuman('');
|
|
56
32
|
if (manifestRemoved || wrapperRemoved) {
|
|
57
|
-
output.writeHuman('Native messaging
|
|
33
|
+
output.writeHuman('Native messaging hosts removed');
|
|
58
34
|
output.writeHuman('');
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
35
|
+
for (const host of removedHosts) {
|
|
36
|
+
if (host.manifestRemoved) {
|
|
37
|
+
output.writeHuman(` Removed manifest: ${shortenPath(host.manifestPath)}`);
|
|
38
|
+
}
|
|
39
|
+
if (host.wrapperRemoved) {
|
|
40
|
+
output.writeHuman(` Removed wrapper: ${shortenPath(host.wrapperPath)}`);
|
|
41
|
+
}
|
|
64
42
|
}
|
|
65
43
|
}
|
|
66
44
|
else {
|
|
67
|
-
output.writeHuman('Native messaging
|
|
45
|
+
output.writeHuman('Native messaging hosts were not installed');
|
|
68
46
|
output.writeHuman('');
|
|
69
|
-
|
|
70
|
-
|
|
47
|
+
for (const host of removedHosts) {
|
|
48
|
+
output.writeHuman(` Manifest not found: ${shortenPath(host.manifestPath)}`);
|
|
49
|
+
output.writeHuman(` Wrapper not found: ${shortenPath(host.wrapperPath)}`);
|
|
50
|
+
}
|
|
71
51
|
}
|
|
72
52
|
output.writeHuman('');
|
|
73
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/extension/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/extension/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAM7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAA+B,EAAiB,EAAE;IAC1F,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAEpC,IAAI,QAAQ,CAAA;IACZ,IAAI,CAAC;QACJ,QAAQ,GAAG,WAAW,EAAE,CAAA;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;QACtE,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAEhD,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACzE,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAEvE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC;YAChB,OAAO,EAAE,IAAI;YACb,eAAe;YACf,cAAc;YACd,KAAK,EAAE,YAAY;SACnB,CAAC,CAAA;IACH,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACrB,IAAI,eAAe,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAA;YACnD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACrB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC1B,MAAM,CAAC,UAAU,CAAC,uBAAuB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;gBAC3E,CAAC;gBACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACzB,MAAM,CAAC,UAAU,CAAC,uBAAuB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;gBAC1E,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,UAAU,CAAC,2CAA2C,CAAC,CAAA;YAC9D,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACrB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBACjC,MAAM,CAAC,UAAU,CAAC,yBAAyB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;gBAC5E,MAAM,CAAC,UAAU,CAAC,yBAAyB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YAC5E,CAAC;QACF,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACtB,CAAC;AACF,CAAC,CAAA"}
|
|
@@ -14,7 +14,7 @@ export type ResolveExtensionWatcherResult = {
|
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
16
|
* Resolve a watcher that is known to be backed by the Chrome extension transport.
|
|
17
|
-
* When id is omitted,
|
|
17
|
+
* When id is omitted, use the browser-level control watcher.
|
|
18
18
|
*/
|
|
19
19
|
export declare const resolveExtensionWatcher: (input: ResolveExtensionWatcherInput) => Promise<ResolveExtensionWatcherResult>;
|
|
20
20
|
//# sourceMappingURL=resolveExtensionWatcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveExtensionWatcher.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/resolveExtensionWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"resolveExtensionWatcher.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/resolveExtensionWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAKnF,MAAM,MAAM,4BAA4B,GAAG;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,6BAA6B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,GAC1D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAA;CAAE,CAAA;AAE9E;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAU,OAAO,4BAA4B,KAAG,OAAO,CAAC,6BAA6B,CA4CxH,CAAA"}
|