@felan-ai/ext-browser 0.3.0 → 0.4.0
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/NOTICE +4 -4
- package/README.md +22 -7
- package/dist/attachment.d.ts +49 -0
- package/dist/attachment.d.ts.map +1 -0
- package/dist/attachment.js +417 -0
- package/dist/attachment.js.map +1 -0
- package/dist/authorization.d.ts +29 -0
- package/dist/authorization.d.ts.map +1 -0
- package/dist/authorization.js +2 -0
- package/dist/authorization.js.map +1 -0
- package/dist/cli.d.ts +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +85 -101
- package/dist/cli.js.map +1 -1
- package/dist/command-policy.d.ts +8 -0
- package/dist/command-policy.d.ts.map +1 -0
- package/dist/command-policy.js +338 -0
- package/dist/command-policy.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +226 -115
- package/dist/index.js.map +1 -1
- package/dist/installer.d.ts +8 -8
- package/dist/installer.js +9 -9
- package/package.json +2 -2
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,mCAAmC,SAAU,CAAC;AAC3D,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAC9C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,GAChB,mBAAmB,CAarB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,GAChB,mBAAmB,CAMrB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,sBAAsB,CAExB;AAkBD,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,sBAAsB,EAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAClC,GACL,OAAO,CAAC,gBAAgB,CAAC,CAuE3B;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,sBAAsB,EAClC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAsC3B"}
|
package/dist/cli.js
CHANGED
|
@@ -1,49 +1,12 @@
|
|
|
1
1
|
import { createHash, randomUUID } from 'node:crypto';
|
|
2
2
|
import { joinRuntimePath } from './runtime-path.js';
|
|
3
|
+
import { inspectScreenshotArguments, validateAttachedBrowserCommand, validateBrowserCommand } from './command-policy.js';
|
|
4
|
+
export { findBrowserCommand } from './command-policy.js';
|
|
3
5
|
export const MAX_BROWSER_OUTPUT_CHARACTERS = 44_000;
|
|
4
6
|
export const MAX_BROWSER_SKILL_OUTPUT_CHARACTERS = 100_000;
|
|
5
7
|
export const DEFAULT_BROWSER_TIMEOUT_MS = 60_000;
|
|
6
8
|
export const MAX_BROWSER_TIMEOUT_MS = 300_000;
|
|
7
9
|
export const BROWSER_IDLE_TIMEOUT = '1h';
|
|
8
|
-
const BLOCKED_MODEL_COMMANDS = new Set([
|
|
9
|
-
'install',
|
|
10
|
-
'upgrade',
|
|
11
|
-
'doctor',
|
|
12
|
-
'mcp',
|
|
13
|
-
'chat',
|
|
14
|
-
'dashboard',
|
|
15
|
-
'stream',
|
|
16
|
-
'plugin',
|
|
17
|
-
'plugins',
|
|
18
|
-
'batch',
|
|
19
|
-
'confirm',
|
|
20
|
-
'deny',
|
|
21
|
-
]);
|
|
22
|
-
const RESERVED_POLICY_OPTIONS = new Set([
|
|
23
|
-
'--session',
|
|
24
|
-
'--namespace',
|
|
25
|
-
'--idle-timeout',
|
|
26
|
-
'--json',
|
|
27
|
-
'--content-boundaries',
|
|
28
|
-
'--max-output',
|
|
29
|
-
'--config',
|
|
30
|
-
'--allowed-domains',
|
|
31
|
-
'--action-policy',
|
|
32
|
-
'--confirm-actions',
|
|
33
|
-
'--confirm-interactive',
|
|
34
|
-
'--allow-file-access',
|
|
35
|
-
]);
|
|
36
|
-
const CLOSE_COMMANDS = new Set(['close', 'quit', 'exit']);
|
|
37
|
-
const OPTIONS_WITH_VALUES = new Set([
|
|
38
|
-
'--session', '--namespace', '--executable-path', '--extension', '--init-script',
|
|
39
|
-
'--enable', '--args', '--user-agent', '--proxy', '--proxy-bypass', '--hide-scrollbars',
|
|
40
|
-
'--provider', '-p', '--device', '--screenshot-dir', '--screenshot-quality',
|
|
41
|
-
'--screenshot-format', '--cdp', '--color-scheme', '--download-path', '--max-output',
|
|
42
|
-
'--allowed-domains', '--action-policy', '--confirm-actions', '--engine', '--model',
|
|
43
|
-
'--config', '--idle-timeout', '--headers', '--profile', '--restore', '--restore-save',
|
|
44
|
-
'--restore-check-url', '--restore-check-text', '--restore-check-fn', '--session-name',
|
|
45
|
-
'--state', '--timeout',
|
|
46
|
-
]);
|
|
47
10
|
export function createBrowserSessionScope(runtime, sessionId) {
|
|
48
11
|
const namespaceHash = createHash('sha256')
|
|
49
12
|
.update(`${runtime.storage('agent').root}\u0000${runtime.storage('session').root}`)
|
|
@@ -58,46 +21,59 @@ export function createBrowserSessionScope(runtime, sessionId) {
|
|
|
58
21
|
namespace: `f-${namespaceHash}`,
|
|
59
22
|
};
|
|
60
23
|
}
|
|
24
|
+
export function createBrowserAttachmentScope(runtime, sessionId) {
|
|
25
|
+
const base = createBrowserSessionScope(runtime, sessionId);
|
|
26
|
+
return {
|
|
27
|
+
namespace: base.namespace,
|
|
28
|
+
session: `f-${randomUUID().replaceAll('-', '').slice(0, 16)}`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
61
31
|
export function prepareBrowserCommand(runtime, args) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (BLOCKED_MODEL_COMMANDS.has(command)) {
|
|
67
|
-
throw new Error(`The browser tool does not run ${command}; use Felan's explicit dependency onboarding or host controls.`);
|
|
68
|
-
}
|
|
69
|
-
if (command === 'skills') {
|
|
70
|
-
throw new Error('Use browser operation "skill" to retrieve version-matched agent-browser instructions.');
|
|
71
|
-
}
|
|
72
|
-
if (CLOSE_COMMANDS.has(command) && args.some((arg) => arg.split('=', 1)[0] === '--all')) {
|
|
73
|
-
throw new Error('The browser tool closes only its own Felan session; omit --all.');
|
|
74
|
-
}
|
|
75
|
-
for (const arg of args.slice(1)) {
|
|
76
|
-
if (arg === '--') {
|
|
77
|
-
throw new Error('The browser tool does not accept the -- option terminator because Felan enforces trailing session and output policy.');
|
|
78
|
-
}
|
|
79
|
-
const option = arg.split('=', 1)[0];
|
|
80
|
-
if (option && RESERVED_POLICY_OPTIONS.has(option)) {
|
|
81
|
-
throw new Error(`The browser tool owns ${option}; omit it from args.`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
32
|
+
return preparePublicBrowserCommand(runtime, args, true);
|
|
33
|
+
}
|
|
34
|
+
function preparePublicBrowserCommand(runtime, args, stageScreenshot) {
|
|
35
|
+
const command = validateBrowserCommand(args);
|
|
84
36
|
const normalized = [...args];
|
|
85
37
|
if (command !== 'screenshot')
|
|
86
38
|
return { args: normalized };
|
|
87
|
-
|
|
39
|
+
const screenshot = inspectScreenshotArguments(args);
|
|
40
|
+
if (!stageScreenshot || screenshot.path !== undefined)
|
|
88
41
|
return { args: normalized };
|
|
89
|
-
const screenshotPath = joinRuntimePath(runtime.storage('session').root, 'browser/screenshots', `screenshot-${randomUUID()}.
|
|
42
|
+
const screenshotPath = joinRuntimePath(runtime.storage('session').root, 'browser/screenshots', `screenshot-${randomUUID()}.${screenshot.format}`);
|
|
90
43
|
normalized.push(screenshotPath);
|
|
91
44
|
return { args: normalized, generatedScreenshotPath: screenshotPath };
|
|
92
45
|
}
|
|
93
46
|
export async function runBrowserCli(runtime, invocation, args, scope, options = {}) {
|
|
94
47
|
const sessionStorage = runtime.storage('session');
|
|
95
|
-
|
|
48
|
+
if (!options.internalAttachment && options.attached)
|
|
49
|
+
validateAttachedBrowserCommand(args);
|
|
50
|
+
const prepared = options.internalAttachment
|
|
96
51
|
? { args: [...args] }
|
|
97
|
-
:
|
|
52
|
+
: preparePublicBrowserCommand(runtime, args, options.prepareScreenshot !== false);
|
|
53
|
+
const attached = options.attached === true || options.internalAttachment === true;
|
|
54
|
+
const endpoint = options.attachmentEndpoint;
|
|
55
|
+
const localOnly = ['close', 'quit', 'exit'].includes(args[0] ?? '') || (args[0] === 'session' && args[1] === 'info');
|
|
56
|
+
if (attached && !localOnly && !args.includes('--cdp') && !endpoint)
|
|
57
|
+
throw new Error('Attached commands require their leased endpoint.');
|
|
58
|
+
if (endpoint !== undefined) {
|
|
59
|
+
let parsed;
|
|
60
|
+
try {
|
|
61
|
+
parsed = new URL(endpoint);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
throw new Error('Invalid leased endpoint.');
|
|
65
|
+
}
|
|
66
|
+
if (!attached || parsed.protocol !== 'ws:' || parsed.hostname !== '127.0.0.1' || Number(parsed.port) < 1
|
|
67
|
+
|| parsed.username || parsed.password || parsed.search || parsed.hash || parsed.href !== endpoint
|
|
68
|
+
|| !/^\/(?:devtools\/browser(?:\/[A-Za-z0-9._-]+)?|felan-browser\/[A-Za-z0-9._-]+)$/u.test(parsed.pathname)
|
|
69
|
+
|| args.includes('--cdp')) {
|
|
70
|
+
throw new Error('Invalid leased endpoint or command.');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
options.signal?.throwIfAborted();
|
|
98
74
|
if (prepared.generatedScreenshotPath)
|
|
99
75
|
await sessionStorage.mkdir('browser/screenshots', { recursive: true });
|
|
100
|
-
const configPath = await
|
|
76
|
+
const configPath = await writeBrowserConfig(runtime, attached ? 'attached' : 'isolated', scope);
|
|
101
77
|
const timeoutMs = normalizeTimeout(options.timeoutMs);
|
|
102
78
|
const trustedArgs = [
|
|
103
79
|
...prepared.args,
|
|
@@ -112,40 +88,49 @@ export async function runBrowserCli(runtime, invocation, args, scope, options =
|
|
|
112
88
|
String(MAX_BROWSER_OUTPUT_CHARACTERS),
|
|
113
89
|
'--config',
|
|
114
90
|
configPath,
|
|
91
|
+
...(endpoint === undefined || localOnly ? [] : ['--cdp', endpoint]),
|
|
92
|
+
...(!attached || (endpoint !== undefined && !localOnly) ? ['--no-webmcp'] : []),
|
|
115
93
|
];
|
|
116
94
|
let result;
|
|
117
95
|
try {
|
|
96
|
+
options.signal?.throwIfAborted();
|
|
118
97
|
result = await runtime.exec(invocation.command, trustedArgs, {
|
|
119
98
|
cwd: runtime.cwd,
|
|
120
99
|
timeout: timeoutMs,
|
|
100
|
+
maxOutputBytes: MAX_BROWSER_OUTPUT_CHARACTERS * 4,
|
|
121
101
|
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
122
102
|
});
|
|
123
103
|
}
|
|
124
104
|
catch (error) {
|
|
105
|
+
const message = errorMessage(error);
|
|
125
106
|
return {
|
|
126
107
|
stdout: '',
|
|
127
|
-
stderr: boundOutput(
|
|
108
|
+
stderr: boundOutput(message),
|
|
128
109
|
code: 1,
|
|
129
|
-
killed: false,
|
|
110
|
+
killed: options.signal?.aborted ?? false,
|
|
130
111
|
...(prepared.generatedScreenshotPath === undefined ? {} : { generatedScreenshotPath: prepared.generatedScreenshotPath }),
|
|
131
|
-
outputTruncated:
|
|
112
|
+
outputTruncated: message.length > MAX_BROWSER_OUTPUT_CHARACTERS,
|
|
132
113
|
};
|
|
133
114
|
}
|
|
134
115
|
return {
|
|
135
116
|
stdout: boundOutput(result.stdout),
|
|
136
117
|
stderr: boundOutput(result.stderr),
|
|
137
118
|
code: result.code,
|
|
138
|
-
killed: result.killed,
|
|
119
|
+
killed: result.killed || options.signal?.aborted === true,
|
|
139
120
|
...(prepared.generatedScreenshotPath === undefined ? {} : { generatedScreenshotPath: prepared.generatedScreenshotPath }),
|
|
140
|
-
outputTruncated: result.stdout.length > MAX_BROWSER_OUTPUT_CHARACTERS
|
|
121
|
+
outputTruncated: result.truncated === true || result.stdout.length > MAX_BROWSER_OUTPUT_CHARACTERS
|
|
141
122
|
|| result.stderr.length > MAX_BROWSER_OUTPUT_CHARACTERS,
|
|
142
123
|
};
|
|
143
124
|
}
|
|
144
125
|
export async function runBrowserSkill(runtime, invocation, skill, full, signal, timeoutMs) {
|
|
126
|
+
if (!/^[a-z0-9][a-z0-9-]{0,63}$/u.test(skill))
|
|
127
|
+
throw new Error('Invalid browser skill name.');
|
|
128
|
+
signal?.throwIfAborted();
|
|
145
129
|
const args = ['skills', 'get', skill, ...(full ? ['--full'] : [])];
|
|
146
130
|
let result;
|
|
147
131
|
try {
|
|
148
|
-
const configPath = await
|
|
132
|
+
const configPath = await writeBrowserConfig(runtime, 'skills');
|
|
133
|
+
signal?.throwIfAborted();
|
|
149
134
|
result = await runtime.exec(invocation.command, [
|
|
150
135
|
...args,
|
|
151
136
|
'--max-output',
|
|
@@ -155,52 +140,51 @@ export async function runBrowserSkill(runtime, invocation, skill, full, signal,
|
|
|
155
140
|
], {
|
|
156
141
|
cwd: runtime.cwd,
|
|
157
142
|
timeout: normalizeTimeout(timeoutMs),
|
|
143
|
+
maxOutputBytes: MAX_BROWSER_SKILL_OUTPUT_CHARACTERS * 4,
|
|
158
144
|
...(signal === undefined ? {} : { signal }),
|
|
159
145
|
});
|
|
160
146
|
}
|
|
161
147
|
catch (error) {
|
|
148
|
+
const message = errorMessage(error);
|
|
162
149
|
return {
|
|
163
150
|
stdout: '',
|
|
164
|
-
stderr:
|
|
151
|
+
stderr: boundOutput(message, MAX_BROWSER_SKILL_OUTPUT_CHARACTERS),
|
|
165
152
|
code: 1,
|
|
166
|
-
killed: false,
|
|
167
|
-
outputTruncated:
|
|
153
|
+
killed: signal?.aborted ?? false,
|
|
154
|
+
outputTruncated: message.length > MAX_BROWSER_SKILL_OUTPUT_CHARACTERS,
|
|
168
155
|
};
|
|
169
156
|
}
|
|
170
157
|
return {
|
|
171
158
|
stdout: boundOutput(result.stdout, MAX_BROWSER_SKILL_OUTPUT_CHARACTERS),
|
|
172
159
|
stderr: boundOutput(result.stderr, MAX_BROWSER_SKILL_OUTPUT_CHARACTERS),
|
|
173
160
|
code: result.code,
|
|
174
|
-
killed: result.killed,
|
|
175
|
-
outputTruncated: result.stdout.length > MAX_BROWSER_SKILL_OUTPUT_CHARACTERS
|
|
161
|
+
killed: result.killed || signal?.aborted === true,
|
|
162
|
+
outputTruncated: result.truncated === true || result.stdout.length > MAX_BROWSER_SKILL_OUTPUT_CHARACTERS
|
|
176
163
|
|| result.stderr.length > MAX_BROWSER_SKILL_OUTPUT_CHARACTERS,
|
|
177
164
|
};
|
|
178
165
|
}
|
|
179
|
-
|
|
180
|
-
const first = args[0]?.trim();
|
|
181
|
-
return !first || first.startsWith('-') ? undefined : first.toLowerCase();
|
|
182
|
-
}
|
|
183
|
-
function hasPositionalArgument(args) {
|
|
184
|
-
let consumeValue = false;
|
|
185
|
-
for (const arg of args) {
|
|
186
|
-
if (consumeValue) {
|
|
187
|
-
consumeValue = false;
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
if (arg === '--')
|
|
191
|
-
return true;
|
|
192
|
-
if (!arg.startsWith('-'))
|
|
193
|
-
return true;
|
|
194
|
-
if (!arg.includes('=') && OPTIONS_WITH_VALUES.has(arg))
|
|
195
|
-
consumeValue = true;
|
|
196
|
-
}
|
|
197
|
-
return false;
|
|
198
|
-
}
|
|
199
|
-
async function writeIsolatedBrowserConfig(runtime) {
|
|
166
|
+
async function writeBrowserConfig(runtime, mode, scope) {
|
|
200
167
|
const storage = runtime.storage('session');
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
168
|
+
const scopeHash = scope && createHash('sha256').update(JSON.stringify([scope.namespace, scope.session])).digest('hex').slice(0, 32);
|
|
169
|
+
const directory = `browser/controls/${mode}${scopeHash ? `/${scopeHash}` : ''}`;
|
|
170
|
+
const relativePath = `${directory}/agent-browser.json`;
|
|
171
|
+
const attached = mode === 'attached';
|
|
172
|
+
const config = {
|
|
173
|
+
plugins: [], extensions: [], initScripts: [], enable: [],
|
|
174
|
+
autoConnect: false, profile: null, state: null, restore: null, sessionName: null,
|
|
175
|
+
restoreSave: 'never', restoreCheckUrl: null, restoreCheckText: null, restoreCheckFn: null,
|
|
176
|
+
cdp: null, executablePath: null, provider: null, engine: null, args: null,
|
|
177
|
+
proxy: null, proxyBypass: null, userAgent: null, device: null, headers: null,
|
|
178
|
+
caCert: null, clearCaCert: false, ignoreHttpsErrors: false, allowFileAccess: false,
|
|
179
|
+
headed: false, webgpu: false, debug: false, colorScheme: null, downloadPath: null,
|
|
180
|
+
actionPolicy: null, confirmActions: null, confirmInteractive: false, allowedDomains: null,
|
|
181
|
+
pinTab: attached, noAutoDialog: attached,
|
|
182
|
+
// Cleanup must not request a local launch through noWebmcp without --cdp.
|
|
183
|
+
noWebmcp: !attached,
|
|
184
|
+
screenshotDir: joinRuntimePath(storage.root, 'browser/screenshots'), screenshotFormat: 'png',
|
|
185
|
+
};
|
|
186
|
+
await storage.mkdir(directory, { recursive: true });
|
|
187
|
+
await storage.writeFile(relativePath, new TextEncoder().encode(`${JSON.stringify(config)}\n`));
|
|
204
188
|
return joinRuntimePath(storage.root, relativePath);
|
|
205
189
|
}
|
|
206
190
|
function normalizeTimeout(value) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function findBrowserCommand(args: readonly string[]): string | undefined;
|
|
2
|
+
export declare function validateBrowserCommand(args: readonly string[]): string;
|
|
3
|
+
export declare function validateAttachedBrowserCommand(args: readonly string[], origin?: string): void;
|
|
4
|
+
export declare function inspectScreenshotArguments(args: readonly string[]): {
|
|
5
|
+
path?: string;
|
|
6
|
+
format: string;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=command-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-policy.d.ts","sourceRoot":"","sources":["../src/command-policy.ts"],"names":[],"mappings":"AAwDA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAyCtE;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CA2G7F;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAarG"}
|