fix: reject invalid --headers JSON, empty frame commands, and --cdp + --extension combo (#488)

## Summary

- Return a `ParseError` when `--headers` receives invalid JSON instead of silently dropping the headers and proceeding
- Reject `frame` commands that provide no `selector`, `name`, or `url` (previously returned `{ switched: true }` without doing anything)
- Add missing mutual exclusion check for `--cdp` + `--extension` (extensions require a local browser, not a CDP connection)
This commit is contained in:
Chris Tate
2026-02-16 23:55:40 -06:00
committed by GitHub
parent 01efe418af
commit f9b33ac23d
4 changed files with 45 additions and 6 deletions
+15
View File
@@ -733,6 +733,21 @@ describe('parseCommand', () => {
expect(result.success).toBe(true);
});
it('should reject frame with no selector, name, or url', () => {
const result = parseCommand(cmd({ id: '1', action: 'frame' }));
expect(result.success).toBe(false);
});
it('should parse frame with name', () => {
const result = parseCommand(cmd({ id: '1', action: 'frame', name: 'myframe' }));
expect(result.success).toBe(true);
});
it('should parse frame with url', () => {
const result = parseCommand(cmd({ id: '1', action: 'frame', url: 'https://example.com' }));
expect(result.success).toBe(true);
});
it('should parse mainframe', () => {
const result = parseCommand(cmd({ id: '1', action: 'mainframe' }));
expect(result.success).toBe(true);
+8
View File
@@ -1001,6 +1001,14 @@ export function parseCommand(input: string): ParseResult {
return { success: false, error: 'Either content or url must be provided', id };
}
if (command.action === 'frame' && !command.selector && !command.name && !command.url) {
return {
success: false,
error: 'frame command requires at least one of: selector, name, or url',
id,
};
}
return { success: true, command };
}